Ich brauche Hilfe bei einem Problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
SwezzyPlays
User
Beiträge: 6
Registriert: Dienstag 22. September 2015, 14:09

Ich bin neu bei Phyton und es kommt immer eine Fehlermeldung wenn ich den Gameserver start der Fehler liegt wohl in der Gameserver.py Er sagt ja dass das Problem in Zeile 41 liegt
Bild

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")

SwezzyPlays
User
Beiträge: 6
Registriert: Dienstag 22. September 2015, 14:09

Hier nochmal der ganze Code

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")

IP = '127.0.0.1'
if len(sys.argv) == 2:
	IP = sys.argv[1]
print "[Game Server] started"
print '(%s:13009)\n' % IP
server = SocketServer.ThreadingTCPServer((IP, 13009), GameServerRequestHandler)
server.serve_forever()
SwezzyPlays
User
Beiträge: 6
Registriert: Dienstag 22. September 2015, 14:09

BlackJack

@SwezzyPlays: Du führst das auch mit Python 2.x aus und nicht mit 3.x?
SwezzyPlays
User
Beiträge: 6
Registriert: Dienstag 22. September 2015, 14:09

BlackJack hat geschrieben:@SwezzyPlays: Du führst das auch mit Python 2.x aus und nicht mit 3.x?
Ups sry bin neu und weiß dass net :D Ich dussel
SwezzyPlays
User
Beiträge: 6
Registriert: Dienstag 22. September 2015, 14:09

BlackJack hat geschrieben:@SwezzyPlays: Du führst das auch mit Python 2.x aus und nicht mit 3.x?
Ich finde 2.0 nicht im Internet....
BlackJack

@SwezzyPlays: Na die 2.0 würde ich auch nicht nehmen, das könnte auch nicht funktionieren. Die aktuelle 2er-Version ist 2.7.x. Wie sucht man nach Python ohne auf die Homepage von Python zu stossen‽
SwezzyPlays
User
Beiträge: 6
Registriert: Dienstag 22. September 2015, 14:09

BlackJack hat geschrieben:@SwezzyPlays: Na die 2.0 würde ich auch nicht nehmen, das könnte auch nicht funktionieren. Die aktuelle 2er-Version ist 2.7.x. Wie sucht man nach Python ohne auf die Homepage von Python zu stossen‽

Tut mir leid wurde auf sonst welche seiten übergeleitet
Antworten