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
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
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
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))
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
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
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
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)
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
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
def send_packet(self, packet): self.transport.write(write_packet(packet))
def send_chat(self, value): packet = ServerChatMessage() packet.entity_id = 0 packet.value = value self.transport.write(write_packet(packet))
def send_client_chat(self, value): packet = ClientChatMessage() packet.value = value self.relay_client.transport.write(write_packet(packet))
def send_packet(self, packet): if self.disconnected: return self.transport.write(packets.write_packet(packet))
def broadcast_packet(self, packet): data = write_packet(packet) for player in self.players.values(): player.transport.write(data)
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))
def create_message(message, entity_id=0): packet = ServerChatMessage() packet.entity_id = entity_id packet.value = message return write_packet(packet)
def send_packet(self, packet): if self.is_closing(): return data = packets.write_packet(packet) self.transport.write(data)
def broadcast_packet(self, packet): data = packets.write_packet(packet) for player in self.players.values(): player.send_data(data)
def broadcast_packet(self, packet): data = packets.write_packet(packet) for player in self.players.values(): player.transport.write(data)
def broadcast_packet(self, packet): data = write_packet(packet) for connection in self.connections.values(): connection.transport.write(data)