Code: Alles auswählen
# -*- coding: utf-8 -*-
import SharedVariables
import SocketServer
import binascii
import Packet
import ServerPacket
import thread
import time
import struct
import GameServerPacket
import sqlite3
import logging
import random
import sys
import KeyCodes
import announcement
import announcements
import CapsuleShop
import CreateRoom
import Lobby
import msg
import Namechannels
import Perfil
import StartRoom
announcements = [["CF Private Server by SweZZy",9], ["We are SweZZy",8]]
servers_player_count = 0
xp_ratio = 1
global IP
logger = logging.getLogger('game_server')
hdlr = logging.FileHandler('game_server.log')
formatter = logging.Formatter('<%(asctime)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
class GameServerRequestHandler (SocketServer.BaseRequestHandler):
def console(self, text):
global logger
logger.log(logging.WARNING, "[Game Server] ["+self.CLIENT_IP+":"+str(self.CLIENT_PORT)+"] "+text)
print "[Game Server] [%s:%d] %s" % (self.CLIENT_IP, self.CLIENT_PORT, text)
def send_announcement( self ):
i = 0
while self.disconnected == 0:
self.request.send (GameServerPacket.announcement("%s\0" % announcements[i][0]))
time.sleep(announcements[i][1])
if i < len(announcements)-1:
i += 1
else:
i = 0
def PrintDataAsString(self, data):
print "[Game Server] (%s:%i): Data: %s" % (self.client_address[0], self.client_address[1], data)
def PrintData(self, data):
print "[Game Server] (%s:%i): Data: %s" % (self.client_address[0], self.client_address[1], binascii.hexlify (data))
def setup(self):
self.conn = sqlite3.connect ('crossfire.sqlite')
self.conn.row_factory = sqlite3.Row
self.disconnected = 0
self.data = None
self.config = None
self.current_channel = -1
self.current_room_id = -1
self.port = self.server.socket.getsockname()[1]
thread.start_new_thread( self.send_announcement, () )
self.storage_items = []
self.CLIENT_IP = self.client_address[0]
self.CLIENT_PORT = self.client_address[1]
self.debug = 0
self.console ("connected")
#GameServerPacket.room_lists[0][0] = ["TDM Mexico 2 20 Min",None,"UltiNaruto",1,4,17,2,2,20,0,0,0,1]
#GameServerPacket.room_lists[0][1] = ["FFA Port 20 Min",None,"UltiNaruto",1,4,14,4,2,20,0,0,0,1]
def handle(self):
i = 0
id = 0
while 1:
try:
data = self.request.recv(1472)
except:
break
self.PrintData(data)
p = Packet.Packet (data)
p.getChar () # f1
size = p.getShort()
header = p.getShort ()
#self.request.send( binascii.a2b_hex('f120000a0303020000000300000032303130303135353031006d61647a696132330000000000f2'))
if header == 0x0001:
self.console ("Connect data")
self.request.send (binascii.a2b_hex ('f1040001090001000000f2'))
id = struct.unpack ("I", data[0x06:0x0a])
c = self.conn.cursor()
p.getString(5)
name = p.getString(12)
name = name.lower()
p.getString(33)
guid = p.getString(32)
p.getString(108)
session_id = p.getString(32) # 7511feb39726e7f590b132b78aea079c
c = self.conn.cursor()
c2 = self.conn.cursor()
c3 = self.conn.cursor()
c.execute ('SELECT * FROM user WHERE id = ?', id)
row = c.fetchone ()
c2.execute ('SELECT * FROM user_storage WHERE id = ?', id)
row2 = c2.fetchone ()
c3.execute ('SELECT * FROM config WHERE id = ?', id)
row3 = c3.fetchone()
if not row or not row2 or not row3:
break
else:
self.request.send (GameServerPacket.lobby (str(row['name']), str(row['clan']), row['id'], row['level'], row['gp'], row['sp'], row['exp'], row3['Key_Forward'], row3['Key_Backward'], row3['Key_Left'], row3['Key_Right'], row3['Key_Walk'], row3['Key_Jump'], row3['Key_Crouch'], row3['Key_DropWep'], row3['Key_Reload'], row3['Key_Fire'], row3['Key_SpecialAttack'], row3['Key_PreviousWep'], row3['Key_DefuseBomb'], row3['Key_SwitchBag'], row3['Key_MainWep'], row3['Key_SubWep'], row3['Key_Melee'], row3['Key_ThrownWep'], row3['Key_C4'], row3['Key_Group1'], row3['Key_Group2'], row3['Key_Group3'], row3['Mouse_Sensitivity'], row3['Block_Friend_Invitation'], row3['Block_Invitation'], row3['Block_Whisper'], row3['Invert_Y_Axis'], row3['CrossHair_Color'], row3['CrossHair_Style'], row3['Hand_Pos'], row3['Display_Method'], row3['Display_Achievement_Title'], str(row3['Macro_1']), str(row3['Macro_2']), str(row3['Macro_3']), str(row3['Macro_4'])))
self.data = row
time.sleep (0.5) #hack for now, until login and game server can communicate
if self.port == 13009:
ServerPacket.servers_player_count[0] += 1
elif self.port == 13010:
ServerPacket.servers_player_count[1] += 1
#self.request.send (GameServerPacket.items())
#self.request.send(binascii.a2b_hex ('f1740201c900000000000b0000000000000000000000000000433030313700000000000000005a3d000000000000b80b0c001f0017003b0000009f860100000000009f8601000000000000000000000000433030313700000000000000005b3d000000000000b80b0c001f0017003b0000009f860100000000009f8601000000000000000000000000433030313700000000000000005c3d000000000000b80b0c001f0017003b0000009f860100000000009f8601000000000000000000000000433030313700000000000000005d3d000000000000b80b0c001f0017003b0000009f860100000000009f8601000000000000000000000000433030313500000000000000005e3d000000000000b80b0c001f0017003b0000009f860100000000009f8601000000000000000000000000433030313500000000000000005f3d000000000000b80b0c001f0017003b0000009f860100000000009f860100000000000000000000000043303030360000000000000000603d000000000000b80b0c001f0017003b0000006400000000000000204e0000000000000000000000000043303030390000000000000000613d000000000000b80b0c001f0017003b0000006400000000000000204e0000000000000000000000000043303030370000000000000000b5b7090000000000b80b0c001f0017003b0000006400000000000000204e0000000000000000000000000043303031330000000000000000ba30170000000000b80b0c001f0017003b00000064000000000000005c1200000000000000000000000000433030333100000000000000009732170000000000b80b0c001f0017003b00000064000000000000005c12000000000000f2'))
self.request.send(GameServerPacket.weapons(str(row2['weapons']),c))
self.storage_items = SharedVariables.temp_storage_items_array
self.request.send(binascii.a2b_hex ('f1840501c9000100000019000000000000000000000000000042303134330000000000000000fff75003000000000000000016000e00070000009f860100000000009f860100313031303030303130310042303030310000000000000000feffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303030303230310042303030320000000000000000fdffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303030313330310042303031330000000000000000fcffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303030303330310042303030330000000000000000fbffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303030303430310042303030340000000000000000faffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303030313430310042303031340000000000000000f9ffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303030303630310042303030360000000000000000f8ffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303030303530310042303030350000000000000000f7ffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303030333630310042303033360000000000000000f6ffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303031303030310042303130300000000000000000f5ffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303031303130310042303130310000000000000000f4ffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303032303030310042303130330000000000000000f3ffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303032303130310042303130340000000000000000f2ffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303030393730310042303039370000000000000000f1ffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303030393830310042303039380000000000000000f0ffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303032333630310042303136390000000000000000efffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303032333730310042303137300000000000000000eeffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303032343130310042303137340000000000000000edffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303032353430310042303138370000000000000000ecffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303032353530310042303138380000000000000000ebffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303031313230310042303231300000000000000000eaffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303031313330310042303231310000000000000000e9ffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303031323230310042303232310000000000000000e8ffffffffffff7fb80b0c001f0017003b0000009f860100000000009f860100313031303031323330310042303232320000000000000000e7ffffffffffff7fb80b0c001f0017003b0000009f860100000000009f86010000000000f2'))
self.request.send(binascii.a2b_hex ('f18c0701c900020000000a0000003130303030303031303100413030303100000000000000000000000000000000b80b0c001f0017003b0000009f860100000000009f860100feffffffffffff7ffdffffffffffff7ffff7500300000000000000000000000000000000000000000000000000000000fcffffffffffff7f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031303030303030323031004130303032000000009f8601000000000000000000b80b0c001f0017003b0000429f860100000000009f860100fbffffffffffff7ffaffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000f9ffffffffffff7f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003130303030303033303100413030303300310042303030360000000000000000b80b0c001f0017003b000c009f860100000000009f8601000000000000000000f8ffffffffffff7ff7ffffffffffff7f000000000000000000000000000000000000000000000000f6ffffffffffff7f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031303030303030353031004130303035000b0c001f0017000000000000000000b80b0c001f0017003b0031309f860100000000009f860100f5ffffffffffff7ff4ffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003130303030303036303100413030303600303130303039370000000000000000b80b0c001f0017003b00ffff9f860100000000009f860100f3ffffffffffff7ff2ffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003130303030303037303100413030303700ffffffffffff7f0000000000000000b80b0c001f0017003b0000009f860100000000009f860100f1ffffffffffff7ff0ffffffffffff7f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031303030303030393031004130303039000000009f8601000000000000000000b80b0c001f0017003b0000009f860100000000009f860100efffffffffffff7feeffffffffffff7fedffffffffffff7f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003130303030303130303100413030313000000000000000000000000000000000b80b0c001f0017003b0000009f860100000000009f860100ecffffffffffff7febffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003130303030303131303100413030313100000000640000000000000000000000b80b0c001f0017003b0000439f860100000000009f860100eaffffffffffff7fe9ffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003130303030303134303100413030313400000043303134360000000000000000b80b0c001f0017003b000c009f860100000000009f860100e8ffffffffffff7fe7ffffffffffff7f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2'))
print 'f18c0101c90002000000020000003130303030303032303100413030303200000000000000000000000000000000b80b0c001f0017003b0000009f860100000000009f860100feffffffffffff7ffdffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000fcffffffffffff7f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031303030303030333031004130303033000000009f8601000000000000000000b80b0c001f0017003b0000429f860100000000009f8601000000000000000000fbffffffffffff7ffaffffffffffff7f000000000000000000000000000000000000000000000000f9ffffffffffff7f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2'
#print binascii.hexlify(GameServerPacket.char_items(str(row2['char_items']), c))
#self.request.send(GameServerPacket.char_items(str(row2['char_items']), c))
self.request.send(binascii.a2b_hex ('f1dc0401c900030000000e0000000030303030303031303100493030353000000000000000007a7e330300000000b80b0c001f0017003b0000000b000000000000000b00000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000493030373500ffffffffffff7fa27e3303000000000000000074001200050000009f860100000000009f8601000100000000000000000000000000000000000000000000000000000000000000000000000000000000000049303036340030303030303032cc7e330300000000000000004a001200060000009f860100000000009f8601000000000000000000000000000000000000000000000000000000000000ffff7f00000000000000000000004930303038000000000000000021d44e0300000000000000007a001200050000009f860100000000009f860100010000000000000000000000000000000000000000000000000000000000000000000000000000000000004930303637000000000000000023d44e03000000000000000065001200110000419f860100000000009f86010000000000000000000000000000000000000000000000000000000000008601000000000000000000f8ffff493030373700ffffffffffff7f11bd6003000000000000000017000200300000009f860100000000009f86010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000493030313700000000000000003408400400000000000000004b000100330000009f860100000000009f8601000000000000000000000000000000000000000000000000000000000000001700000031309f860100000000493031353900ffffffffffff7f5c084004000000000000000008000300350000009f860100000000009f8601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049303135380000000000000000e3bc4a04000000000000000014000300350000009f860100000000009f86010000000000000000000000000000000000000000000000000000000000003039370000000000000000b80b0c49303238380000ffff9f86010045aac50b00000000b80b0c001f0017003b00ffff0200000000000000020000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000049303330300000000000000000d3c0cd0b0000000000000000020006001c0000009f860100000000009f8601000000000000000000000000000000000000000000000000000000000000303037003100413030303700ffff4930333032000000000000000078dfcf0b000000000000000005000600280000009f860100000000009f8601000100000000000000000000000000000000000000000000000000000000000000000000000000000000000049303239300000000000000000e4652e0c00000000b80b0c001f0017003b000000320000000000000032000000010000000000000000000000000000000000000000000000000000000000000000000000000000003130304930323837003100413030303943f2990e0000000000000000060006001c000c009f860100000000009f8601000100000000000000000000000000000000000000000000000000000000ffff7f00000000f2'))
self.request.send(binascii.a2b_hex ('f17c0001c9000400000002000000003030303030303130310044303030310000000000000000c8f8ffffffffffffb80b0c001f0017003b000000000000000000000000000000000000000000000000000044303030320000000000000000c9f8ffffffffffffb80b0c001f0017003b000049000000000000000000000000a27e3303f2'))
self.request.send(binascii.a2b_hex ('f1280201ca0004000000020000000030303030303031303100443030303100000000000000001b59ef0600000000b80b0c001f0017003b000000000000009266190f0000000000000000000000000000004430303032bd63c90e00000000c9f8ffffffffffffb80b0c001f00170050ce26070000000012b98e03000000009ede760300000000b80b0c001f0017003b0000009f860100000000009f86010001000044303030320000000001000000288d1209000000000000000000000000000000000000000018e9ef0a000000000030303030303032cc7e3303000000005b988b0a00000000060000009f860100000000009f8601005c443c0700000000508e08070000000085ce260700000000b80b0c001f0017003b000000000000000000004930303038000000443030303300d44e03020000000000000000000000050000009f860100000000009f86010000000000000000000000000000000000000000000000000049aa280300000000000000000000000000000049303036370000000000000000000000000000000000000000000000000000000000000000000000009f86010000000000000000000000004430303034000000000300000000000000000000000000000000000000f8ffff4930303737000000000000000011bd60030000000000000000170002004aaa280300000000000000009f860100000000000000000000000000000000000000000000000000000000000000000000000000000000000000004930303137f2'))
self.request.send(binascii.a2b_hex ('f1200101d702fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2'))
self.request.send(GameServerPacket.heartbeat())
self.console ("HeartBeat")
c.close()
c2.close()
c3.close()
elif header == 0x7801:
p.getString(5) # not important
item_type = p.getShort() # Item Type (used when buying stuff)
p.getString(30) # not scanned yet
item_id = p.getString(15) # Item ID
c = self.conn.cursor()
c2 = self.conn.cursor()
c.execute ('SELECT * FROM user WHERE id = ?', id)
c2.execute ('SELECT * FROM user_storage WHERE id = ?', id)
player_info = c.fetchone ()
row2 = c2.fetchone ()
item_info = GameServerPacket.getItemInfoByItemShopID(c,item_id)
if not item_info:
self.request.send(GameServerPacket.buy_item(item_id, item_type, 1))
self.console ("Bought Item [%s]" % item_id)
return
if item_id[0:1] == "9":
self.request.send(GameServerPacket.buy_item(item_id, item_type, 1))
self.console ("Bought Item [%s]" % item_id)
else:
if not row and not row2:
break
else:
if int(player_info['gp']) >= int(item_info['Price']):
self.request.send(GameServerPacket.buy_item(item_id, item_type, 1))
c.execute ('UPDATE user SET gp==:gp WHERE id==:id', {'gp' : (int(player_info['gp'])-int(item_info['Price'])), 'id' : str(self.data['id'])})
if item_info['StorageID'][0:1] == 'A':
if row2['char_items']:
c2.execute('UPDATE user_storage SET char_items==:char_items WHERE id==:id', {'char_items' : str(row2['char_items'])+";"+str(item_info['StorageID']), 'id' : str(self.data['id'])})
else:
c2.execute('UPDATE user_storage SET char_items==:char_items WHERE id==:id', {'char_items' : str(item_info['StorageID']), 'id' : str(self.data['id'])})
elif item_info['StorageID'][0:1] == 'C':
if row2['weapons']:
c2.execute('UPDATE user_storage SET weapons==:weapons WHERE id==:id', {'weapons' : str(row2['weapons'])+";"+str(item_info['StorageID'])+':100:0', 'id' : str(self.data['id'])})
else:
c2.execute('UPDATE user_storage SET weapons==:weapons WHERE id==:id', {'weapons' : str(item_info['StorageID'])+':100:0', 'id' : str(self.data['id'])})
elif item_info['StorageID'][0:1] == 'D':
if row2['bags']:
c2.execute('UPDATE user_storage SET bags==:bags WHERE id==:id', {'bags' : str(row2['bags'])+';'+str(item_info['StorageID'])+':2592000', 'id' : str(self.data['id'])})
else:
c2.execute('UPDATE user_storage SET bags==:bags WHERE id==:id', {'bags' : str(item_info['StorageID'])+':2592000', 'id' : str(self.data['id'])})
elif item_info['StorageID'][0:1] == 'I':
if row2['items']:
c2.execute('UPDATE user_storage SET items==:items WHERE id==:id', {'items' : str(row2['items'])+';'+str(item_info['StorageID']), 'id' : str(self.data['id'])})
else:
c2.execute('UPDATE user_storage SET items==:items WHERE id==:id', {'items' : str(item_info['StorageID']), 'id' : str(self.data['id'])})
self.console ("Bought Item [%s]" % item_info['ItemName'])
self.conn.commit()
elif header == 0x1F01:
channel = ord (data[7])
self.console ("Join Channel %d" % (channel+1))
if GameServerPacket.Channels[channel] < 300:
self.current_channel = channel
self.request.send (GameServerPacket.joinchannel(channel))
else:
self.current_channel = channel
self.request.send (GameServerPacket.joinchannel(channel, 2))
elif header == 0x3201:
self.console ("Packet 1 in channel join process")
self.request.send(GameServerPacket.unknown1 (str(self.data['name'])))
self.request.send(GameServerPacket.rooms(self.current_channel))
elif header == 0x2101:
self.console ("Packet 2 in channel join process")
self.request.send(GameServerPacket.players())
self.request.send(GameServerPacket.end_join())
elif header == 0x0002:
p.getChar()
text = p.getString(size+1)
self.console ("Chat Message (Text = %s)" % text[0:size])
self.request.send(GameServerPacket.chat(text[0:size]))
elif header == 0x0501:
self.request.send (binascii.a2b_hex ('f1c0000106000000000000000000c0d05d513034000084d05d5132303133303430343135313230340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0000009b1700005b1300003166333164666237623934616165366266613563336632346365646538396534000000009d890000c401000066000000410000000b0000003e000000120000001d000000010000000a0000000000000000000000000000148cdad241f2'))
self.console ("Returning to Server List")
elif header == 0xD501:
self.request.send(binascii.a2b_hex ('f1040001d60000000000f2'))
self.console ("Request main sack")
elif header == 0xD301:
self.request.send(binascii.a2b_hex('f1040001d40000000000f2'))
self.console ("Request main character")
'''self.request.send(binascii.a2b_hex ('f128000a0b06ffffffffffffffffffffffff050000000000000000000000000000000000000000000000ab054d00f2'))
self.request.send(binascii.a2b_hex ('f158000a0505010000000200000000000000020000000000000000000000020000009a0000000000000000000000ec0000000000000000000000b70000000000000000000000000000000000000000000000070000000000000000000000f2'))
self.request.send(binascii.a2b_hex ('f1a0050a050901000000020000000000000000000000192f7118020000000000000000000000010000000200000000000000000000001a2f7118020000000000000000000000010000000200000000000000000000001b2f7118020000000000000000000000010000000200000000000000000000002153ce77000000000000000000000000010000000200000000000000000000002253ce77000000000000000000000000010000000200000000000000000000002353ce77000000000000000000000000010000000200000000000000000000008553ce77000000000000000000000000010000000200000000000000000000008653ce77000000000000000000000000010000000200000000000000000000008753ce77000000000000000000000000010000000200000000000000000000007d2f7118020000000000000000000000010000000200000000000000000000007e2f7118020000000000000000000000010000000200000000000000000000007f2f7118020000000000000000000000010000000200000000000000000000002153ce77000000000000000000000000010000000200000000000000000000002253ce77000000000000000000000000010000000200000000000000000000002353ce7700000000000000000000000001000000020000000000000000000000e953ce7700000000000000000000000001000000020000000000000000000000ea53ce7700000000000000000000000001000000020000000000000000000000eb53ce7700000000000000000000000001000000020000000000000000000000e12f711802000000000000000000000001000000020000000000000000000000e22f711802000000000000000000000001000000020000000000000000000000e32f7118020000000000000000000000010000000200000000000000000000002153ce77000000000000000000000000010000000200000000000000000000002253ce77000000000000000000000000010000000200000000000000000000002353ce77000000000000000000000000010000000200000000000000000000004d54ce77000000000000000000000000010000000200000000000000000000004e54ce77000000000000000000000000010000000200000000000000000000004f54ce77000000000000000000000000010000000200000000000000000000007d69333c000000000000000000000000010000000200000000000000000000007e69333c000000000000000000000000020000000200000002000000000000007e69333c00000000b354ce770000000001000000020000000000000000000000d928711802000000000000000000000001000000020000000000000000000000da287118020000000000000000000000020000000200000002000000000000004f54ce7700000000da2871180200000001000000020000000000000000000000f51b711802000000000000000000000001000000020000000000000000000000f61b7118020000000000000000000000020000000200000002000000000000008753ce7700000000eb53ce7700000000010000000200000000000000000000004530711802000000000000000000000001000000020000000000000000000000463071180200000000000000000000000100000002000000000000000000000047307118020000000000000000000000010000000200000000000000000000002153ce77000000000000000000000000010000000200000000000000000000002253ce77000000000000000000000000010000000200000000000000000000002353ce7700000000000000000000000001000000020000000000000000000000b154ce7700000000000000000000000001000000020000000000000000000000b254ce7700000000000000000000000001000000020000000000000000000000b354ce77000000000000000000000000f2'))
# friend list
self.request.send(binascii.a2b_hex ('f16500c000ca8f1a4206030000004e8746061042656e6b657232000000000000fefefe0100330000002cffff0069854b060a4a65616e5f72656e6f00000000fefefe01003530310000ffff00105158060b6f4e652d73486f542e65586500fefefe01003638303200ffff00f2'))
self.request.send(binascii.a2b_hex ('f10700c0012d4e874606fffffff2'))
self.request.send(binascii.a2b_hex ('f10700c0012d69854b06fffffff2'))
self.request.send(binascii.a2b_hex ('f10700c0012d10515806fffffff2'))'''
elif header == 0x2301:
#self.request.send (GameServerPacket.channels())
self.request.send (binascii.a2b_hex('f1040001240001000000f2'))
self.console ("Returning to Channel List")
elif header == 0x01BF:
packet_id = p.getChar()
if packet_id == 0x9A:
c = self.conn.cursor()
c.execute ('SELECT * FROM user WHERE id = ?', id)
row = c.fetchone()
if not row:
break
else:
self.request.send(GameServerPacket.currency(row['sp']))
self.request.send(binascii.a2b_hex ('f10400c0019b00000000f2'))
self.request.send(binascii.a2b_hex ('f10c00c0032b000000000000000000000000f2'))
self.console ("Unknow Header %X" % header)
elif header == 0x03BF:
self.console ("Unknow Header %X" % header)
elif header == 0xB601:
c = self.conn.cursor()
c.execute ('SELECT * FROM user_storage WHERE id = ?', id)
row = c.fetchone()
p.getChar()
crate_id = p.getInt()
c2 = self.conn.cursor()
StorageID = self.getItemById(crate_id)[0]
c2.execute ('SELECT * FROM crate_list WHERE id = ?', (StorageID,))
row2 = c2.fetchone()
self.request.send(GameServerPacket.spin_crate(crate_id))
if row2:
possible_items_A = str(row2['items_to_win_a']).split(';')
possible_items_B = str(row2['items_to_win_b']).split(';')
item_1 = "%s\0" % possible_items_A[random.randint(0,len(possible_items_A)-1)][:10]
item_2 = "%s\0" % possible_items_B[random.randint(0,len(possible_items_B)-1)][:10]
gp = 0
if row2 and int(row2['zp']) == 1:
gp = GameServerPacket.gp_gained_zp_crate[random.randint(0,len(GameServerPacket.gp_gained_zp_crate)-1)]
else:
gp = GameServerPacket.gp_gained_gp_crate[random.randint(0,len(GameServerPacket.gp_gained_gp_crate)-1)]
if GameServerPacket.getItemInfoByItemShopID(c, item_1)['StorageID'] == "I0050":
c.execute('UPDATE user SET coupons_owned==:coupons_owned WHERE id==:id', {'coupons_owned' : str(int(self.data['coupons_owned'])+1), 'id' : str(self.data['id'])})
else:
if row['weapons']:
c.execute('UPDATE user_storage SET weapons==:weapons WHERE id==:id', {'weapons' : str(row['weapons'])+";"+str(GameServerPacket.getItemInfoByItemShopID(c, item_1)['StorageID'])+':100:0', 'id' : str(self.data['id'])})
else:
c.execute('UPDATE user_storage SET weapons==:weapons WHERE id==:id', {'weapons' : str(GameServerPacket.getItemInfoByItemShopID(c, item_1)['StorageID'])+':100:0', 'id' : str(self.data['id'])})
c.execute('UPDATE user SET gp==:gp WHERE id==:id', {'gp' : int(self.data['gp'])+gp, 'id' : str(self.data['id'])})
self.conn.commit()
self.console ("item_1 = %s" % item_1)
self.console ("item_2 = %s" % item_2)
self.console ("gp = %d" % gp)
self.request.send(GameServerPacket.items_won(item_1,item_2,gp))
self.console ("Spinning crate [%s]" % row2['name'])
else:
self.request.send(GameServerPacket.items_won("0","0",0))
self.console ("Spinning crate [%d]" % crate_id)
elif header == 0x8401:
self.request.send(binascii.a2b_hex ('f10700c0012d5cfd5b06fffffff2'))
self.console ("Enter Shooting Range Packet 1")
elif header == 0x8201:
item_id = p.getShort()
c = self.conn.cursor()
self.console ("Resell item %s" % GameServerPacket.getItemInfoByStorageID(c, self.getItemById(item_id)[0])['ItemShopID'])
elif header == 0x030A:
packet_id = p.getChar()
if packet_id == 0x01:
tab_index = p.getInt()
capsule_index = p.getInt()
self.console ("Crate Selected (%d:%d)" % (tab_index,capsule_index))
self.request.send(binascii.a2b_hex ('f1b4000a030200000000270000000700000032303130303239323031003434657242697a6570732e000032303130303239323031005b4745525d2d456c6974652a0032303130303239323031007869616f7869616f000000000032303130303239323031007a414f52000000000000000000323031303032393230310042726f74686572735f4e732a0032303130303239323031005b445d75704c65785f2a000000323031303032393230310046494c53534f4e000000000000f2'))
elif packet_id == 0x02:
self.request.send(binascii.a2b_hex ('f1b4000a030200000000270000000700000032303130303239323031003434657242697a6570732e000032303130303239323031005b4745525d2d456c6974652a0032303130303239323031007869616f7869616f000000000032303130303239323031007a414f52000000000000000000323031303032393230310042726f74686572735f4e732a0032303130303239323031005b445d75704c65785f2a000000323031303032393230310046494c53534f4e000000000000f2'))
self.console ("Winner List")
elif packet_id == 0x03:
self.console ("[Game Server] A gun in BM has been won")
elif header == 0xB401:
self.request.send(binascii.a2b_hex ('f10700c0012d4e874606fffffff2'))
self.console ("Unknow Header %X" % header)
elif header == 0xBB01:
c = self.conn.cursor()
c.execute ('SELECT * FROM coupon_items_list')
row = c.fetchone()
self.request.send(GameServerPacket.coupons(row))
self.console ("Coupon Items List")
elif header == 0xC801:
self.console ("Unknow Header %X" % header)
elif header == 0x1A01:
self.request.send(GameServerPacket.exit_cf(self.data['exp']))
self.console ("Exit Game Message Box (Name : %s)" % str(self.data['name']))
elif header == 0x5D01:
self.request.send(GameServerPacket.profile_window())
self.console ("Profile Window")
elif header == 0xCF01:
self.console ("Change Character")
elif header == 0x5F01:
self.console ("End Of Tutorial")
if self.data['tutorial_done']==0:
if not self.data:
break
else:
c = self.conn.cursor()
c.execute ('UPDATE user SET tutorial_done==:tutorial_done WHERE id==:id', {'tutorial_done' : 1, 'id' : str(self.data['id'])})
c.execute ('UPDATE user SET exp==:exp WHERE id==:id', {'exp' : (self.data['exp']+300*xp_ratio), 'id' : str(self.data['id'])})
self.conn.commit()
elif header == 0x1E01:
self.console ("Channel List")
self.request.send (GameServerPacket.channels())
#self.request.send(binascii.a2b_hex ('f1280201ca000400000002000000003030303030303230310044303030310000000000000000603d000000000000b80b0c001f0017003b000000000000009732170000000000000000000000000000000044303030325a3d00000000000021fcffffffffffffb80b0c001f0017005e3d00000000000000000000000000000000000000000000b80b0c001f0017003b00000001000000000000000100000001000044303030320000000001000000b5b709000000000000000000000000000000000000000000ba301700000000000030303030303033d3e04d00000000005b3d0000000000003b0000001500000000000000150000005f3d00000000000000000000000000000000000000000000b80b0c001f0017003b00ffffffffff7f0000004930313335000000443030303300e14d000200000000000000000000003b0000000100000000000000010000000000000000000000000000000000000000000000000000005c3d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043303030390000000000000000613d004430303034000b0c0003000000000000000000000000000000204e0000000000000000000000000000000000000000000000000000b5b70900000000005d3d0000000000003b0000006400000000000000204e0000000000000000000000000000000000000000000000000000000000000000000000000c001f001700f2'))
#self.request.send(binascii.a2b_hex ('f1200101d702fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2'))
#self.request.send(binascii.a2b_hex ('f140000a0a0208000000010000003230313030303631303100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2'))
#self.request.send(binascii.a2b_hex ('f1e8000a04020132303132313232313030303000490002000000000000003148ce7700000000000000004c06000004000000ffffffff01000000010000004d06000003000000ffffffff01000000020000004e0600000b000000ffffffff030000000000000032303133303130313030303000350000050000000a0000000f0000001400000002000000000000008143ce77000000000200000000000000f18cce77000000000200000000000000ee4ace77000000000200000000000000b54bce77000000000900000043524f5353464952450000005b434100000000000200000000000000558dce7700000000f2'))
#self.request.send(binascii.a2b_hex ('f14c000a040932303132313232303030303000320000000000004e4e594e4e4e4e594e000000000000004e00000000000000060000000000000001000000050000000000000002000000a086010000000000f2'))
#self.request.send(binascii.a2b_hex ('f134020a0b0214000000010000000000000001000000170000002000000029000000320000000200000001000000010000000400000006000000080000000a00000003000000020000000100000002000000040000000600000008000000040000000000000002000000360000005a00000087000000b40000000500000001000000020000000500000007000000090000000b00000006000000020000000200000003000000040000000500000006000000070000000000000003000000090000001b000000240000002d00000008000000010000000300000004000000050000000600000007000000090000000200000003000000020000000300000004000000050000000a000000000000000400000036000000480000005a0000006c0000000b00000001000000040000000500000007000000090000000a0000000c0000000100000005000000050000000600000007000000080000000d0000000000000009000000170000002000000029000000320000000e00000001000000090000000400000006000000080000000a0000000f00000002000000090000000200000004000000060000000800000010000000010000000c0000000300000005000000090000000b00000011000000030000000b000000905f0100b0ad0100e022020030e6020012000000040000000b0000001b000000210000002a0000003900000013000000010000000e0000000300000005000000070000000a0000001400000001000000630000000400000006000000080000000a000000f2'))
elif header == 0x8001:
self.console ("Currency")
c = self.conn.cursor()
c.execute ('SELECT * FROM user WHERE id = ?', id)
row = c.fetchone()
if not row:
break
else:
self.request.send(GameServerPacket.currency(row['sp']))
elif header == 0xAB01:
self.request.send(GameServerPacket.heartbeat())
self.console ("Ping")
elif header == 0x1701:
self.console ("Save Config")
p.getChar()
Key_1 = p.getShort()
Key_2 = p.getShort()
Key_3 = p.getShort()
Key_4 = p.getShort()
Key_5 = p.getShort()
Key_6 = p.getShort()
Key_7 = p.getShort()
Key_10 = p.getShort()
Key_9 = p.getShort()
Key_11 = p.getShort()
Key_8 = p.getShort()
Key_12 = p.getShort()
Key_13 = p.getShort()
Key_14 = p.getShort()
Key_15 = p.getShort()
Key_16 = p.getShort()
Key_17 = p.getShort()
Key_18 = p.getShort()
Key_19 = p.getShort()
Key_20 = p.getShort()
Key_21 = p.getShort()
Key_22 = p.getShort()
Mouse_Sensitivity = p.getShort()
Block_Invitation = p.getChar()
Block_Whisper = p.getChar()
Block_Friend_Invitation = p.getChar()
p.getShort()
p.getChar()
Invert_Y_Axis = p.getShort() # 1 = Invert | 0 = Normal
CrossHair_Style = p.getShort() # 0 = Cross | 1 = Dot Cross | 2 = Circle
CrossHair_Color = p.getShort() # 0 = Green | 1 = Yellow | 2 = Cyan
Hand_Pos = p.getShort() # 1 = Left | 0 = Right
p.getInt()
Display_Method = p.getInt()
Display_Achievement_Title = p.getInt()
Macro_1 = p.getString(56)
p.getString(95)
Macro_2 = p.getString(56)
p.getString(95)
Macro_3 = p.getString(56)
p.getString(95)
Macro_4 = p.getString(56)
self.config = self.conn.cursor()
self.config.execute('UPDATE config SET Key_Forward==:Key_1 WHERE id==:id', {'Key_1' : Key_1, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_Backward==:Key_2 WHERE id==:id', {'Key_2' : Key_2, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_Left==:Key_3 WHERE id==:id', {'Key_3' : Key_3, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_Right==:Key_4 WHERE id==:id', {'Key_4' : Key_4, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_Walk==:Key_5 WHERE id==:id', {'Key_5' : Key_5, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_Jump==:Key_6 WHERE id==:id', {'Key_6' : Key_6, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_Crouch==:Key_7 WHERE id==:id', {'Key_7' : Key_7, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_DropWep==:Key_8 WHERE id==:id', {'Key_8' : Key_8, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_Reload==:Key_9 WHERE id==:id', {'Key_9' : Key_9, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_Fire==:Key_10 WHERE id==:id', {'Key_10' : Key_10, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_SpecialAttack==:Key_11 WHERE id==:id', {'Key_11' : Key_11, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_PreviousWep==:Key_12 WHERE id==:id', {'Key_12' : Key_12, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_DefuseBomb==:Key_13 WHERE id==:id', {'Key_13' : Key_13, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_SwitchBag==:Key_14 WHERE id==:id', {'Key_14' : Key_14, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_MainWep==:Key_15 WHERE id==:id', {'Key_15' : Key_15, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_SubWep==:Key_16 WHERE id==:id', {'Key_16' : Key_16, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_Melee==:Key_17 WHERE id==:id', {'Key_17' : Key_17, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_ThrownWep==:Key_18 WHERE id==:id', {'Key_18' : Key_18, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_C4==:Key_19 WHERE id==:id', {'Key_19' : Key_19, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_Group1==:Key_20 WHERE id==:id', {'Key_20' : Key_20, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_Group2==:Key_21 WHERE id==:id', {'Key_21' : Key_21, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Key_Group3==:Key_22 WHERE id==:id', {'Key_22' : Key_22, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Mouse_Sensitivity==:Mouse_Sensitivity WHERE id==:id', {'Mouse_Sensitivity' : Mouse_Sensitivity, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Block_Friend_Invitation==:Block_Friend_Invitation WHERE id==:id', {'Block_Friend_Invitation' : Block_Friend_Invitation, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Block_Invitation==:Block_Invitation WHERE id==:id', {'Block_Invitation' : Block_Invitation, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Block_Whisper==:Block_Whisper WHERE id==:id', {'Block_Whisper' : Block_Whisper, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Invert_Y_Axis==:Invert_Y_Axis WHERE id==:id', {'Invert_Y_Axis' : Invert_Y_Axis, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET CrossHair_Color==:CrossHair_Color WHERE id==:id', {'CrossHair_Color' : CrossHair_Color, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET CrossHair_Style==:CrossHair_Style WHERE id==:id', {'CrossHair_Style' : CrossHair_Style, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Hand_Pos==:Hand_Pos WHERE id==:id', {'Hand_Pos' : Hand_Pos, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Display_Method==:Display_Method WHERE id==:id', {'Display_Method' : Display_Method, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Display_Achievement_Title==:Display_Achievement_Title WHERE id==:id', {'Display_Achievement_Title' : Display_Achievement_Title, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Macro_1==:Macro_1 WHERE id==:id', {'Macro_1' : Macro_1, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Macro_2==:Macro_2 WHERE id==:id', {'Macro_2' : Macro_2, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Macro_3==:Macro_3 WHERE id==:id', {'Macro_3' : Macro_3, 'id' : str(self.data['id'])})
self.config.execute('UPDATE config SET Macro_4==:Macro_4 WHERE id==:id', {'Macro_4' : Macro_4, 'id' : str(self.data['id'])})
self.conn.commit()
if self.debug >= 1:
print "Key_Forward = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_1), Key_1)
print "Key_Backward = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_2), Key_2)
print "Key_Left = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_3), Key_3)
print "Key_Right = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_4), Key_4)
print "Key_Walk = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_5), Key_5)
print "Key_Jump = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_6), Key_6)
print "Key_Crouch = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_7), Key_7)
print "Key_DropWep = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_8), Key_8)
print "Key_Reload = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_9), Key_9)
print "Key_Fire = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_10), Key_10)
print "Key_SpecialAttack = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_11), Key_11)
print "Key_PreviousWep = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_12), Key_12)
print "Key_DefuseBomb = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_13), Key_13)
print "Key_SwitchBag = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_14), Key_14)
print "Key_MainWep = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_15), Key_15)
print "Key_SubWep = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_16), Key_16)
print "Key_Melee = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_17), Key_17)
print "Key_ThrownWep = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_18), Key_18)
print "Key_C4 = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_19), Key_19)
print "Key_Group1 = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_20), Key_20)
print "Key_Group2 = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_21), Key_21)
print "Key_Group3 = %s (%d)" % (KeyCodes.GetKeyCodeName(Key_22), Key_22)
if self.debug > 1:
print "Mouse_Sensitivity = %d" % Mouse_Sensitivity
print "Block_Friend_Invitation = %d" % Block_Friend_Invitation
print "Block_Whisper = %d" % Block_Whisper
print "Block_Invitation = %d" % Block_Invitation
print "Invert_Y_Axis = %d" % Invert_Y_Axis
print "CrossHair_Style = %d" % CrossHair_Style
print "CrossHair_Color = %d" % CrossHair_Color
print "Hand_Pos = %d" % Hand_Pos
print "Display_Method = %d" % Display_Method
print "Display_Achievement_Title = %d" % Display_Achievement_Title
print "Macro_1 = %s" % Macro_1
print "Macro_2 = %s" % Macro_2
print "Macro_3 = %s" % Macro_3
print "Macro_4 = %s" % Macro_4
elif header == 0x10D:
self.console ("Unknow Header %X" % header)
elif header == 0x3401:
self.console ("Create Room")
p.getChar()
password = p.getString(10)
p.getString(12)
max_players = p.getInt()
map_id = p.getShort()
gamemode_id = p.getInt()
p.getInt()
objective_type = p.getInt()
objective_count = p.getInt()
p.getString(3)
room_name = p.getString(28)
p.getString(57)
self.current_room_id = GameServerPacket.getFirstEmtpyRoomId(self.current_channel)
self.console ("[%d] %s [PW : %s] [Host : %s] [Player Slots : %d]" % (self.current_room_id+1, room_name, password, str(self.data['name']), max_players))
GameServerPacket.room_lists[self.current_channel][self.current_room_id] = [room_name, password, str(self.data['name']), 1, max_players, map_id, gamemode_id, objective_type, objective_count, 0, 0, 0, 1]
self.request.send(GameServerPacket.createroom(self.current_room_id))
elif header == 0x3601:
p.getChar()
room_id = p.getInt()
self.request.send(GameServerPacket.enterroom(room_id))
self.console ("[Game Server] Enter Room (%s)" % GameServerPacket.room_lists[self.current_channel][room_id][0])
'''password = p.getString(16)
if not password:
self.request.send(binascii.a2b_hex ('f14c090137000000000017001000000011000100000001000000000100000000000005000000000000000000000000000001040000007e010000d70200000d000000160000000200000038706506000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d61747269782a35350000000000ffffffffffffffff01000000010000000000000008000000000000000000010107000000a0020000fd030000320000007500000004000000b74064060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047616e676f6c696f000000000000ffffffffffffffff0400000001000000000000000800000000000000000000010e000000e2200000dd180000a40100009c02000004000000946d5a065b535d6c3f6467650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e02002c0048326f2d506b6572000000000000ffffffffffffffff0400000004000000000000000600000000000000000000010c0000003d1600006b0e0000a6000000ed00000004000000c97d4d067765524156452e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000766f4c756d652e00000000000000ffffffffffffffff0100000003000000000000000800000000000000000000010b000000610a0000201500008f0000005701000004000000a1505c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048656c426f795844370000000000ffffffffffffffff02000000020000000000000008000000000000000000000000000000160000002d00000001000000070000000200000032a96506000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b6f6b696c696361000000000000ffffffffffffffff0000000000000000000000000800000000000000ffff0000000000000000000000000000000000000000000002000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffff00000000000000010e0000006b150000db2500000d010000ee03000004000000292f5f065b73616b65725d434c414e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000726166616c6f6632303031000000000000003d0000000100000003000000000000000800000000000000010000010e000000fe180000fb1d00001b010000030200000400000034b861065d4e5b6f2e2d4d657263595d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d20002e004b6f6e7472614b00000000000000000000000a000000040000000400000000000000ffffffff01000000010000011a0000007f430000b6510000420300003008000004000000bcaa51064769726c506f7765725f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0e000e004c61753432000000000000000000ffffffffffffffff0100000004000000000000000600000000000000010000011e000000b0ca00005d71000057060000c105000003000000ee205506536f756e647a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011110005002e51735f536b696c6c7a00000000000000003d000000030000000500000000000000ffffffff00000000010000011e000000a7c1000066700000f7050000d3080000040000001a5c530642616c6b616e456c6974652a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e020003004b61726c6f390000000000000000000000004e000000010000000200000000000000ffffffff0000000001000001080000006f040000c1070000280000007100000004000000ff135c0654524f50416c6f726569726f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0b000e0076616e69612e31352e6700000000ffffffffffffffff020000000200000000000000ffffffff00000000010000011b000000fb9500005970000052050000d108000004000000edaa580642616c6b616e456c6974652a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e020003005061746f372d4d65686f00000000ffffffffffffffff00000000040000000000000008000000000000000100000007000000ee090000321500003e00000090010000040000008f1a420600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000556c74726150474e6f6f6f620000000000000c0000000100000002000000000000000800000000000000ffff0000000000000000000000000000000000000000000002000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffff01000000000080400000000000000000000000000000000000000000000000000000000000000000f2'))
self.request.send(binascii.a2b_hex ('f10e000a01044d61747269782a35350000000001f2'))
self.request.send(binascii.a2b_hex ('f10e000a01044b6f6e7472614b00350000000001f2'))
self.request.send(binascii.a2b_hex ('f10e000a010447616e676f6c696f000000000001f2'))
self.request.send(binascii.a2b_hex ('f10e000a01044c6175343200696f000000000001f2'))
self.request.send(binascii.a2b_hex ('f10e000a010448326f2d506b6572000000000001f2'))
self.request.send(binascii.a2b_hex ('f10e000a01042e51735f536b696c6c7a00000001f2'))
self.request.send(binascii.a2b_hex ('f10e000a0104766f4c756d652e006c7a00000001f2'))
self.request.send(binascii.a2b_hex ('f10e000a01044b61726c6f3900006c7a00000001f2'))
self.request.send(binascii.a2b_hex ('f10e000a010448656c426f795844370000000001f2'))
self.request.send(binascii.a2b_hex ('f10e000a010476616e69612e31352e6700000001f2'))
self.request.send(binascii.a2b_hex ('f10e000a01044b6f6b696c696361006700000001f2'))
self.request.send(binascii.a2b_hex ('f10e000a01045061746f372d4d65686f00000001f2'))
self.request.send(binascii.a2b_hex ('f10e000a0104726166616c6f6632303031000001f2'))'''
elif header == 0x3E01:
'''p.getShort()
p.getInt()
GameServerPacket.room_lists[self.current_channel][self.current_room_id][5] = p.getShort() # Map ID
GameServerPacket.room_lists[self.current_channel][self.current_room_id][6] = p.getInt() # Game Mode ID
p.getChar()
GameServerPacket.room_lists[self.current_channel][self.current_room_id][9] = p.getChar() # Game Rule Type
p.getShort()
GameServerPacket.room_lists[self.current_channel][self.current_room_id][7] = p.getInt() # Objective Type
GameServerPacket.room_lists[self.current_channel][self.current_room_id][8] = p.getInt() # Objective Count
p.getChar()
p.getInt()
GameServerPacket.room_lists[self.current_channel][self.current_room_id][11] = p.getChar() # Respawn Time
p.getInt()
p.getChar()'''
self.console ("Room Change State (%s)" % GameServerPacket.room_lists[self.current_channel][self.current_room_id][0])
elif header == 0x4201:
self.console ("Start Room (%s)" % GameServerPacket.room_lists[self.current_channel][self.current_room_id][0])
self.request.send(GameServerPacket.startroom())
self.request.send(GameServerPacket.joinroom(str(self.data['name'])))
#self.request.send(GameServerPacket.joinroom("[BOT] LUFFY"))
self.request.send(binascii.a2b_hex ('f10700c0012d390a6206fffffff2'))
#self.request.send(binascii.a2b_hex ('f10700c0012d39274306fffffff2'))
self.request.send(binascii.a2b_hex ('f10800014f000000d20000000000f2'))
#self.request.send(binascii.a2b_hex ('f10800014f000000d20000000000f2'))
self.request.send(binascii.a2b_hex ('f11400014400102f00007f00000100ffffffff00005f060000f2'))
#self.request.send(binascii.a2b_hex ('f11400014400e92e00004d5f1e171a00ffffffff000020000000f2'))
time.sleep (0.2)
self.request.send(binascii.a2b_hex ('f11000014e00102f00007f000001ffffffff00000000f2'))
#self.request.send(binascii.a2b_hex ('f11000014e00102f00004d5f1e1affffffff00000000f2'))
GameServerPacket.room_lists[self.current_channel][self.current_room_id][12] = 2
elif header == 0x4001:
self.console ("[Game Server] Quit Room")
if self.current_room_id:
if GameServerPacket.room_lists[self.current_channel][self.current_room_id][3] > 1:
GameServerPacket.room_lists[self.current_channel][self.current_room_id][3] -= 1
else:
self.console ("Deleting room (%s)" % GameServerPacket.room_lists[self.current_channel][self.current_room_id][0])
GameServerPacket.room_lists[self.current_channel][self.current_room_id] = None
self.request.send(binascii.a2b_hex ('f1040001410000000000f2'))
elif header == 0x3C01:
self.console ("Switch Side")
p.getShort()
p.getShort()
self.request.send(GameServerPacket.switchside())
elif header == 0x50A:
GameServerPacket.room_lists[self.current_channel][self.current_room_id][12] = 1
self.console ("Game Score")
elif header == 0xCD01:
self.console ("Unknow Header %X" % header)
elif header == 0xBD01:
self.console ("Exchange Coupons")
elif header == 0x010A:
self.console ("Unknow Header %X" % header)
elif header == 0x0A01:
self.request.send (binascii.a2b_hex ('f10400010b0001000000f2'))
self.console ("Unknow Header %X" % header)
elif header == 0x130A:
self.console ("Unknow Header %X" % header)
elif header == 0x0C0A:
self.console ("Unknow Header %X" % header)
elif header == 0x0F0A:
self.console ("Unknow Header %X" % header)
elif header == 0xA901:
self.request.send (binascii.a2b_hex ('f10c0001a902000000000f00000000006400f2'))
self.console ("Unknow Header %X" % header)
elif header == 0x1901:
self.console ("Unknow Header %X" % header)
else:
self.console ("Unknow Header %X" % header)
break
self.request.close()
def getItemById(self, i):
j = 0
for storage_id in self.storage_items:
if j==i:
return storage_id
else:
j+=1
return None
def finish(self):
if self.port == 13009:
ServerPacket.servers_player_count[0] -= 1
elif self.port == 13010:
ServerPacket.servers_player_count[1] -= 1
if self.current_channel > 0:
GameServerPacket.Channels[self.current_channel] -= 1
if self.current_room_id > 0:
if GameServerPacket.room_lists[self.current_channel][self.current_room_id][3] > 1:
GameServerPacket.room_lists[self.current_channel][self.current_room_id][3] -= 1
else:
print "Deleting room (%s)" % GameServerPacket.room_lists[self.current_channel][self.current_room_id][0]
GameServerPacket.room_lists[self.current_channel][self.current_room_id] = None
self.disconnected = 1
self.console ("disconnected")