示例#1
0
文件: mitm.py 项目: FleX-iBeL/cuwo
 def on_client_packet(self, packet):
     if packet.packet_id == EntityUpdate.packet_id:
         self.on_entity_update(packet)
     if self.relay_client is None:
         self.relay_packets.append(write_packet(packet))
         return
     self.relay_client.transport.write(write_packet(packet))
     if packet.packet_id not in (0, ):
         print 'Got client packet:', packet.packet_id
示例#2
0
文件: mitm.py 项目: xEnt22/cuwo
 def on_client_packet(self, packet):
     if packet.packet_id == EntityUpdate.packet_id:
         self.on_entity_update(packet)
     if self.relay_client is None:
         self.relay_packets.append(write_packet(packet))
         return
     self.relay_client.transport.write(write_packet(packet))
     if packet.packet_id not in (0,):
         print 'Got client packet:', packet.packet_id
示例#3
0
    def send_entity_data(self, entity):
        base = self.config.base

        # full entity packet for new, close players
        entity_packet.set_entity(entity, entity.entity_id)
        full = packets.write_packet(entity_packet)

        # pos entity packet
        if not entity.is_tgen:
            entity_packet.set_entity(entity, entity.entity_id,
                                     entitydata.POS_FLAG)
            only_pos = packets.write_packet(entity_packet)

        # reduced rate packet
        skip_reduced = self.skip_index != 0
        entity_packet.set_entity(entity, entity.entity_id,
                                 entitydata.POS_FLAG)
        reduced = packets.write_packet(entity_packet)

        max_distance = base.max_distance
        max_reduce_distance = base.max_reduce_distance

        old_close_players = entity.close_players
        new_close_players = {}
        for connection in self.players.values():
            player_entity = connection.entity
            if player_entity is None:
                continue
            if entity is player_entity:
                continue
            if entity.full_update:
                connection.send_data(full)
                new_close_players[connection] = entity.copy()
                continue
            dist = (player_entity.pos - entity.pos).length
            if dist > max_distance:
                if not entity.is_tgen:
                    connection.send_data(only_pos)
                continue
            old_ref = old_close_players.get(connection, None)
            if old_ref is None:
                connection.send_data(full)
                new_close_players[connection] = entity.copy()
                continue
            if dist > max_reduce_distance and skip_reduced:
                connection.send_data(reduced)
                new_close_players[connection] = old_ref
                continue
            new_mask = entitydata.get_mask(old_ref, entity)
            entity_packet.set_entity(entity, entity.entity_id, new_mask)
            connection.send_packet(entity_packet)
            new_close_players[connection] = entity.copy()

        entity.close_players = new_close_players
        entity.full_update = False
示例#4
0
文件: server.py 项目: matpow2/cuwo
    def send_entity_data(self, entity):
        base = self.config.base

        # full entity packet for new, close players
        entity_packet.set_entity(entity, entity.entity_id)
        full = packets.write_packet(entity_packet)

        # pos entity packet
        if not entity.is_tgen:
            entity_packet.set_entity(entity, entity.entity_id,
                                     entitydata.POS_FLAG)
            only_pos = packets.write_packet(entity_packet)

        # reduced rate packet
        skip_reduced = self.skip_index != 0
        entity_packet.set_entity(entity, entity.entity_id,
                                 entitydata.POS_FLAG)
        reduced = packets.write_packet(entity_packet)

        max_distance = base.max_distance
        max_reduce_distance = base.max_reduce_distance

        old_close_players = entity.close_players
        new_close_players = {}
        for connection in self.players.values():
            player_entity = connection.entity
            if player_entity is None:
                continue
            if entity is player_entity:
                continue
            if entity.full_update:
                connection.send_data(full)
                new_close_players[connection] = entity.copy()
                continue
            dist = (player_entity.pos - entity.pos).length
            if dist > max_distance:
                if not entity.is_tgen:
                    connection.send_data(only_pos)
                continue
            old_ref = old_close_players.get(connection, None)
            if old_ref is None:
                connection.send_data(full)
                new_close_players[connection] = entity.copy()
                continue
            if dist > max_reduce_distance and skip_reduced:
                connection.send_data(reduced)
                new_close_players[connection] = old_ref
                continue
            new_mask = entitydata.get_mask(old_ref, entity)
            entity_packet.set_entity(entity, entity.entity_id, new_mask)
            connection.send_packet(entity_packet)
            new_close_players[connection] = entity.copy()

        entity.close_players = new_close_players
        entity.full_update = False
示例#5
0
文件: mitm.py 项目: CarlosX/cuwo
 def send_debug(self):
     reactor.callLater(0.01, self.send_debug)
     if self.entity_id is None:
         return
     entity = self.entities[self.entity_id]
     from cuwo.vector import Vector3
     shoot = ShootPacket()
     shoot.entity_id = 2
     shoot.chunk_x, shoot.chunk_y = get_chunk(
         Vector3(entity.x, entity.y, entity.z))
     import random
     shoot.something5 = random.randrange(0, 10)
     shoot.something13 = 0
     shoot.something14 = 0
     shoot.something15 = 0
     shoot.something19 = 10.49137020111084
     shoot.something20 = 0.5
     shoot.something21 = 1.0
     shoot.something22 = 0.0
     shoot.something23 = 0
     shoot.something24 = 0
     shoot.something25 = 0
     shoot.something26 = 0
     shoot.something27 = 0
     shoot.something28 = 0
     shoot.pos = Vector3(entity.x, entity.y, entity.z + 150000)
     shoot.velocity = Vector3(93.929801940, -34.1773529054, -3.0167741775)
     self.relay_client.transport.write(write_packet(shoot))
示例#6
0
文件: mitm.py 项目: lilezek/cuwo
 def on_client_packet(self, packet):
     if packet.packet_id in (12, 11):
         return
     if self.relay_client is None:
         self.relay_packets.append(write_packet(packet))
         return
     self.relay_client.transport.write(write_packet(packet))
     client_ids[packet.packet_id] += 1
     if packet.packet_id == EntityUpdate.packet_id:
         try:
             name = packet.entity.name
             if not name:
                 return
             self.name = name
             reactor.callLater(10, self.send_welcome)
         except AttributeError:
             pass
         return
     print 'Got client packet:', packet.packet_id
示例#7
0
文件: mitm.py 项目: xEnt22/cuwo
 def on_server_packet(self, packet):
     if packet.packet_id == EntityUpdate.packet_id:
         self.on_entity_update(packet)
     elif packet.packet_id == ServerData.packet_id:
         self.entity_id = packet.entity_id
     elif packet.packet_id == CurrentTime.packet_id:
         # I hate darkness
         packet.time = constants.MAX_TIME / 2
     self.transport.write(write_packet(packet))
     if packet.packet_id not in (0, 2, 4, 5):
         print 'Got server packet:', packet.packet_id
示例#8
0
文件: mitm.py 项目: FleX-iBeL/cuwo
 def on_server_packet(self, packet):
     if packet.packet_id == EntityUpdate.packet_id:
         self.on_entity_update(packet)
     elif packet.packet_id == JoinPacket.packet_id:
         self.entity_id = packet.entity_id
     elif packet.packet_id == CurrentTime.packet_id:
         # I hate darkness
         packet.time = constants.MAX_TIME / 2
     self.transport.write(write_packet(packet))
     if packet.packet_id not in (0, 2, 4, 5):
         print 'Got server packet:', packet.packet_id
示例#9
0
文件: mitm.py 项目: matpow2/cuwo
 def on_server_packet(self, packet):
     if packet.packet_id == EntityUpdate.packet_id:
         self.on_entity_update(packet)
     elif packet.packet_id == JoinPacket.packet_id:
         self.entity_id = packet.entity_id
     elif packet.packet_id == CurrentTime.packet_id:
         # I hate darkness
         packet.time = constants.MAX_TIME / 2
     elif packet.packet_id == ServerUpdate.packet_id:
         self.on_server_update(packet)
     self.transport.write(write_packet(packet))
     if packet.packet_id not in (EntityUpdate.packet_id,
                                 UpdateFinished.packet_id,
                                 CurrentTime.packet_id,
                                 ServerUpdate.packet_id):
         print('Got server packet:', packet.packet_id)
示例#10
0
文件: mitm.py 项目: mfgpker/cuwo
 def on_server_packet(self, packet):
     if packet.packet_id == EntityUpdate.packet_id:
         self.on_entity_update(packet)
     elif packet.packet_id == JoinPacket.packet_id:
         self.entity_id = packet.entity_id
     elif packet.packet_id == CurrentTime.packet_id:
         # I hate darkness
         packet.time = constants.MAX_TIME / 2
     elif packet.packet_id == ServerUpdate.packet_id:
         self.on_server_update(packet)
     self.transport.write(write_packet(packet))
     if packet.packet_id not in (EntityUpdate.packet_id,
                                 UpdateFinished.packet_id,
                                 CurrentTime.packet_id,
                                 ServerUpdate.packet_id):
         print('Got server packet:', packet.packet_id)
示例#11
0
    def send_update(self):
        self.skip_index = (self.skip_index + 1) % self.config.base.reduce_skip
        for entity in self.world.entities.values():
            self.send_entity_data(entity)
        self.broadcast_packet(update_finished_packet)

        # other updates
        update_packet = self.update_packet
        for chunk in self.updated_chunks:
            chunk.on_update(update_packet)
        if not update_packet.is_empty():
            # passive_actions will be modified for each player, so we must keep a copy of the original
            old_passives = update_packet.passive_actions
            # send update to each player
            for player in self.players.values():
                # generate only passives actions which were not originally sent by this player
                update_packet.passive_actions = [x for x in old_passives 
                                                 if self.received_passives.get(x, None) != player]
                data = packets.write_packet(update_packet)
                player.send_data(data)
                
        self.received_passives.clear()
        update_packet.reset()

        # reset drop times
        for chunk in self.updated_chunks:
            chunk.on_post_update()
        self.updated_chunks.clear()

        # time update
        new_time = (self.get_time(), self.get_day())
        if new_time != self.old_time:
            time_packet.time = new_time[0]
            time_packet.day = new_time[1]
            self.broadcast_packet(time_packet)
            self.old_time = new_time
示例#12
0
文件: mitm.py 项目: lilezek/cuwo
 def on_server_packet(self, packet):
     self.transport.write(write_packet(packet))
     server_ids[packet.packet_id] += 1
     if packet.packet_id in (0, 2, 4, 5):
         return
     print 'Got server packet:', packet.packet_id
示例#13
0
 def send_packet(self, packet):
     self.transport.write(write_packet(packet))
示例#14
0
文件: mitm.py 项目: lilezek/cuwo
 def send_chat(self, value):
     packet = ServerChatMessage()
     packet.entity_id = 0
     packet.value = value
     self.transport.write(write_packet(packet))
示例#15
0
文件: mitm.py 项目: mfgpker/cuwo
 def send_client_chat(self, value):
     packet = ClientChatMessage()
     packet.value = value
     self.relay_client.transport.write(write_packet(packet))
示例#16
0
 def send_packet(self, packet):
     if self.disconnected:
         return
     self.transport.write(packets.write_packet(packet))
示例#17
0
 def broadcast_packet(self, packet):
     data = write_packet(packet)
     for player in self.players.values():
         player.transport.write(data)
示例#18
0
文件: mitm.py 项目: matpow2/cuwo
 def send_client_chat(self, value):
     packet = ClientChatMessage()
     packet.value = value
     self.relay_client.transport.write(write_packet(packet))
示例#19
0
 def relay_packet(self, packet):
     if self.relay_client is None:
         self.relay_packets.append(write_packet(packet))
     else:
         self.relay_client.transport.write(write_packet(packet))
示例#20
0
def create_message(message, entity_id=0):
    packet = ServerChatMessage()
    packet.entity_id = entity_id
    packet.value = message
    return write_packet(packet)
示例#21
0
文件: server.py 项目: Twistere/cuwo
 def send_packet(self, packet):
     if self.is_closing():
         return
     data = packets.write_packet(packet)
     self.transport.write(data)
示例#22
0
文件: server.py 项目: Twistere/cuwo
 def broadcast_packet(self, packet):
     data = packets.write_packet(packet)
     for player in self.players.values():
         player.send_data(data)
示例#23
0
 def broadcast_packet(self, packet):
     data = packets.write_packet(packet)
     for player in self.players.values():
         player.transport.write(data)
示例#24
0
文件: server.py 项目: TomYaMee/cuwo
 def broadcast_packet(self, packet):
     data = write_packet(packet)
     for connection in self.connections.values():
         connection.transport.write(data)
示例#25
0
 def send_packet(self, packet):
     self.transport.write(write_packet(packet))
示例#26
0
 def send_packet(self, packet):
     if self.disconnected:
         return
     self.transport.write(packets.write_packet(packet))
示例#27
0
文件: server.py 项目: matpow2/cuwo
 def send_packet(self, packet):
     if self.is_closing():
         return
     data = packets.write_packet(packet)
     self.transport.write(data)
示例#28
0
文件: mitm.py 项目: mfgpker/cuwo
 def send_chat(self, value):
     packet = ServerChatMessage()
     packet.entity_id = 0
     packet.value = value
     self.transport.write(write_packet(packet))
示例#29
0
文件: server.py 项目: matpow2/cuwo
 def broadcast_packet(self, packet):
     data = packets.write_packet(packet)
     for player in self.players.values():
         player.send_data(data)
示例#30
0
def create_message(message, entity_id=0):
    packet = ServerChatMessage()
    packet.entity_id = entity_id
    packet.value = message
    return write_packet(packet)