Added more
This commit is contained in:
parent
277ada9a79
commit
cef43f545c
@ -77,7 +77,7 @@ class Netserver:
|
||||
er.ApplicationReservedData += b'\x00\x04\x00'
|
||||
er.ApplicationReservedData += b'\xd9\x05' # game version
|
||||
er.ApplicationReservedData += b'\x02\x92\x05\x00\x01\x00\x00\x00\x00\x00' # Unknown
|
||||
er.ApplicationReservedData += b'\x9c\x53\xf4\xdd' # Seems to be a checksum of current map
|
||||
er.ApplicationReservedData += b'\x9c\x53\xf4\xde' # Seems to be a checksum of current map
|
||||
# \x00\x00\x00\x00: [None]
|
||||
# \x00\x00\x00\x01: <custom map>
|
||||
# \x9c\x53\xf4\xdd: Three Way Island - Canyons
|
||||
@ -148,7 +148,7 @@ class Netserver:
|
||||
session.send_cframe_sack()
|
||||
sack_sent = True
|
||||
|
||||
if not session.CFRAME_NRcv == cframe.NRecv:
|
||||
if not session.next_send == cframe.NRecv:
|
||||
logger.error("Received CFRAME (%s) does not have same NRcv (%s). One sent packet might have been lost.", cframe.NRecv, session.CFRAME_NRcv)
|
||||
if not sack_sent:
|
||||
session.send_cframe_sack()
|
||||
@ -199,6 +199,8 @@ class Netserver:
|
||||
# TODO: broadcast session has disconnected
|
||||
self.addrs.remove(session)
|
||||
return
|
||||
if dframe.Control & DFrame.PACKET_CONTROL_KEEPALIVE_OR_CORRELATE:
|
||||
session.send_dframe_keepalive()
|
||||
|
||||
session.next_expected_seq += 1
|
||||
if dframe.Payload:
|
||||
@ -281,17 +283,34 @@ class Netserver:
|
||||
payload.write(b'\x01\x01\x00')
|
||||
#payload.write(b'\x00\x04\x00')
|
||||
payload.write(b'\xd9\x05') # game version
|
||||
payload.write(b'\x02\x92\x05\x00\x01\x00\x00\x00\x00\x00') # Unknown
|
||||
payload.write(b'\x9c\x53\xf4\xde') # Seems to be a checksum of current map
|
||||
payload.write(b'\x02\x92') # unknown
|
||||
payload.write(b'\x05\x00\x01\x00\x00\x00\x00\x00') # Unknown
|
||||
payload.write(b'\x9c\x53\xf4\xdf') # Seems to be a checksum of current map OR linked to the number of chars in the map name
|
||||
payload.write(self.server.currentmap.mapname.encode("ascii"))
|
||||
payload.putLong(0x00) # ??
|
||||
payload.write(b'\x00' * (32 - len(self.server.currentmap.mapname)))
|
||||
#payload.putLong(0x00) # ??
|
||||
payload.write((self.server.name + "\x00").encode("utf-16-le"))
|
||||
|
||||
r.Payload = payload.getvalue()
|
||||
session.send(r)
|
||||
|
||||
if payload[0] == 0xc3:
|
||||
self.server.broadcast_message(name + " is a dick.")
|
||||
elif payload[0] == 0xc3:
|
||||
player = self.get_player(session)
|
||||
self.server.broadcast_message("%s: you should never have joined... Sorry bro." % player.name)
|
||||
player.session.send_gamedata(b'\x3c\x56\xab\x31\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
|
||||
player.session.send_gamedata(b'\x01\x02\x57\xab\xa1\x96\x56\xab\x31\x96\x0e\x01\x00\x00\x00')
|
||||
player.session.send_gamedata(b'\x3d\x00\x5b\x53\x65\x72\x76\x65\x72\x5d') # [SERVER]
|
||||
player.session.send_gamedata(b'\x3d\x01'+player.name.encode("ascii")+b"\x00") # playername
|
||||
player.session.send_gamedata(b'\x0f\x56\xab\x31\x96\x06\x00\x00\x00\x00\x00\x00\x00\x00') # unknown
|
||||
player.session.send_gamedata(b'\x10\x02\x56\xab\x31\x96\x00\x00\x00\x00\x00\x00\x00\x00') # unknown
|
||||
player.session.send_gamedata(b'\x29\x28\x00\x00\x80\x32\x00\x00\x80\x05\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00') # unknown
|
||||
player.session.send_gamedata(b'\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') # unknown
|
||||
player.session.send_gamedata(b'\x39\x01\x02\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') # unknown
|
||||
player.session.send_gamedata(b'\x0f\x56\xab\x31\x96\x07\x00\x00\x00\x00\x00\x00\x00\x00') # unknown
|
||||
|
||||
player.session.send_gamedata(b'\x0a\x12\x00\x00\x00\x00\x28\x10\x03\x10\x12\x00\x00\x00\xc1\xff\x41\xff\x00', acknow=True) # unknown
|
||||
player.session.send_gamedata(b'\x0f\x56\xab\x31\x96\x08\x00\x00\x00\x00\x00\x00\x00\x00', acknow=True) # unknown
|
||||
|
||||
|
||||
|
||||
def send_packet(self, addr, packet):
|
||||
@ -303,3 +322,11 @@ class Netserver:
|
||||
return next((x for x in self.addrs if x.ip == iporaddr[0] and x.port == iporaddr[1]), None)
|
||||
else:
|
||||
return next((x for x in self.addrs if x.ip == iporaddr and x.port == port), None)
|
||||
|
||||
def get_player(self, iporaddr, port=None):
|
||||
if type(iporaddr) == Session:
|
||||
return next((x for x in self.server.players if x.session.ip == iporaddr.ip and x.session.port == iporaddr.port), None)
|
||||
if not port:
|
||||
return next((x for x in self.server.players if x.session.ip == iporaddr[0] and x.session.port == iporaddr[1]), None)
|
||||
else:
|
||||
return next((x for x in self.server.players if x.session.ip == iporaddr and x.session.port == port), None)
|
@ -49,9 +49,12 @@ class Session:
|
||||
self.send(response)
|
||||
self.connect_retry_timer = self.setup_Connect_Retry_Timer()
|
||||
|
||||
def send_gamedata(self, bPayload):
|
||||
def send_gamedata(self, bPayload, **kwargs):
|
||||
acknow = kwargs.get("acknow", False)
|
||||
dframe = DFrame()
|
||||
dframe.Command = DFrame.PACKET_COMMAND_DATA | DFrame.PACKET_COMMAND_POLL | DFrame.PACKET_COMMAND_RELIABLE | DFrame.PACKET_COMMAND_SEQUENTIAL | DFrame.PACKET_COMMAND_NEW_MSG | DFrame.PACKET_COMMAND_END_MSG
|
||||
dframe.Command = DFrame.PACKET_COMMAND_DATA | DFrame.PACKET_COMMAND_RELIABLE | DFrame.PACKET_COMMAND_SEQUENTIAL | DFrame.PACKET_COMMAND_NEW_MSG | DFrame.PACKET_COMMAND_END_MSG
|
||||
if acknow:
|
||||
dframe.Command = dframe.Command | DFrame.PACKET_COMMAND_POLL
|
||||
dframe.Control = 0x00
|
||||
dframe.Seq = self.next_send
|
||||
dframe.NRcv = self.next_expected_seq
|
||||
|
Loading…
Reference in New Issue
Block a user