def write_data(self, stream): stream.write(c_bit(self.stats)) if self.stats: stream.write(c_uint32(self.health)) stream.write(c_float(self.max_health)) stream.write(c_uint32(self.armor)) stream.write(c_float(self.max_armor)) stream.write(c_uint32(self.imagination)) stream.write(c_float(self.max_imagination)) stream.write(c_uint32(0)) # NOTE: unknown stream.write(c_bit(True)) stream.write(c_bit(False)) stream.write(c_bit(False)) stream.write(c_float(self.max_health)) stream.write(c_float(self.max_armor)) stream.write(c_float(self.max_imagination)) stream.write(c_uint32(len(self.factions))) for faction_id in self.factions: stream.write(c_int32(faction_id)) stream.write(c_bit(self.smashable))
def write_construction(self, stream): self.serialize(stream) stream.write(c_bit(False)) stream.write(c_float(self.activator_pos.x)) stream.write(c_float(self.activator_pos.y)) stream.write(c_float(self.activator_pos.z)) stream.write(c_bit(True))
def serialize(self, stream): stream.write(c_bit(True)) stream.write(c_uint32(0)) stream.write(c_bit(True)) stream.write(c_uint32(self.state)) stream.write(c_bit(self.success)) stream.write(c_bit(self.enabled)) stream.write(c_float(self.start)) stream.write(c_float(self.paused))
def mission_accept(self, packet, conn: Connection, stream: ReadStream): """ Handles the mission dialogue ok game message """ complete = stream.read(c_bit) state = stream.read(c_int) mission_id = stream.read(c_int) responder_objid = stream.read(c_int64) print(f'Mission {mission_id} accepted') print(f'Complete: {complete}') print(f'State: {state}') print(f'Responder: {responder_objid}') session = self.server.handle_until_return('session:get_session', conn.get_address()) char = self.server.handle_until_return( 'char:characters', session.account.user.id)[session.account.front_character] if complete: self.server.handle('char:complete_mission', char.pk, mission_id) wstr = WriteStream() wstr.write(c_int(mission_id)) wstr.write(c_int(8)) wstr.write(c_bit(False)) msg = ServerGameMessage(responder_objid, GameMessageID.NOTIFY_MISSION, wstr) else: self.server.handle('char:activate_mission', char.pk, mission_id) # tasks = self.server.handle_until_return('world:get_mission_tasks', mission_id) # for task in tasks: # wstr = WriteStream() # wstr.write(c_int(mission_id)) # wstr.write(c_int(1 << (task[2] + 1))) # wstr.write(c_uint8(0)) # msg = ServerGameMessage(packet.objid, GameMessageID.NOTIFY_MISSION_TASK, wstr) # conn.send(msg) wstr = WriteStream() wstr.write(c_int(mission_id)) wstr.write(c_int(2)) wstr.write(c_bit(False)) msg = ServerGameMessage(responder_objid, GameMessageID.NOTIFY_MISSION, wstr) conn.send(msg)
def write_construction(self, stream): stream.write(c_bit(self.jetpack)) if self.jetpack: stream.write(c_uint32(self.jetpack_effect)) stream.write(c_bit(False)) stream.write(c_bit(True)) # NOTE: flag is unknown for _ in range(7): stream.write(c_uint32(0)) self.write_data(stream)
def serialize(self, stream): """ Serializes the component """ stream.write(c_bit(False)) # NOTE: unknown stream.write(c_bit(False)) # NOTE: unknown stream.write(c_bit(True)) stream.write(c_float(self.pos.x)) stream.write(c_float(self.pos.y)) stream.write(c_float(self.pos.z)) stream.write(c_float(self.rot.x)) stream.write(c_float(self.rot.y)) stream.write(c_float(self.rot.z)) stream.write(c_float(self.rot.w))
def serialize(self, stream): """ Serializes the component """ stream.write(c_bit(self.trigger_id != None)) if self.trigger_id: stream.write(c_int32(self.trigger_id))
def write_construction(self, stream): """ Writes construction data to a stream """ stream.write(c_bit(False)) # NOTE: unknown stream.write(c_float(0)) # NOTE: unknown self.serialize(stream)
def serialize(self, stream): """ Serializes the component """ stream.write(c_bit(True)) stream.write(c_float(self.pos.x)) stream.write(c_float(self.pos.y)) stream.write(c_float(self.pos.z)) stream.write(c_float(self.rot.x)) stream.write(c_float(self.rot.y)) stream.write(c_float(self.rot.z)) stream.write(c_float(self.rot.w)) stream.write(c_bit(True)) stream.write(c_bit(self.effect)) if self.effect: stream.write(c_uint32(self.effect_type)) stream.write(c_float(self.effect_amount)) stream.write(c_bit(False)) stream.write(c_bit(True)) stream.write(c_float(self.effect_direction.x)) stream.write(c_float(self.effect_direction.y)) stream.write(c_float(self.effect_direction.z))
def write_construction(self, stream): stream.write(c_bit(True)) # NOTE: unknown for _ in range(9): stream.write(c_uint32(0)) self.write_data(stream) if self.stats: stream.write(c_bit(False)) # NOTE: unknown(?) stream.write(c_bit(False)) # NOTE: same as above if self.smashable: stream.write(c_bit(False)) # NOTE: unknown stream.write(c_bit(False)) # NOTE: same as above stream.write(c_bit(True)) stream.write(c_bit(False))
def post_creation(self, stream): """ Writes part 2 of data """ stream.write(c_bit(True)) stream.write(c_bit(self.pvp)) stream.write(c_bit(self.gm)) stream.write(c_uint8(self.gmlevel)) stream.write(c_bit(False)) # NOTE: unknown stream.write(c_uint8(0)) # NOTE: unknown stream.write(c_bit(True)) stream.write(c_uint32(1 if self.glowing_head else 0)) stream.write(c_bit(self.guild)) if self.guild: stream.write(c_int64(self.guild_id)) stream.write(self.guild_name, allocated_length=33) stream.write(c_bit(True)) # NOTE: unknown stream.write(c_int32(-1)) # NOTE: unknown
def __init__(self, *args): super().__init__(*args) self.luz = LUZReader(ZONE_LUZ[ZONE_IDS[self.server.type]], self.server.type) for scene in self.luz.scenes: for obj in scene.objects: if obj.spawner is not None: trigger = obj.config.get('renderDisabled') components = obj.components if trigger: trigger_comp = Trigger() components.append(trigger_comp) replica = BaseData(obj.objid, obj.lot, obj.name, trigger=trigger, spawner=obj.spawner, scale=obj.scale, components=components) wstr = WriteStream() wstr.write(c_uint8(0x24)) wstr.write(c_bit(True)) wstr.write(c_uint16(0)) replica.write_construction(wstr) self.server.repman.construct(replica, True)
def pre_creation(self, stream): """ Writes part 1 of data """ stream.write(c_bit(True)) stream.write(c_bit(self.vehicle)) if self.vehicle: stream.write(c_int64(self.vehicle_id)) stream.write(c_uint8(0)) # NOTE: unknown stream.write(c_bit(self.level)) if self.level: stream.write(c_uint32(self.level_num)) stream.write(c_bit(True)) stream.write(c_bit(False)) stream.write(c_bit(True))
def write_construction(self, stream): stream.write(c_bit(False)) # TODO: add a var for this
def serialize(self, stream): self.write_data(stream) stream.write(c_bit(False)) # NOTE: should this be true?
def write_construction(self, stream): stream.write(c_bit(self.script))
def write_data(self, stream): """ Writes object data """ stream.write(c_bit(False)) # NOTE: flag is unknown stream.write(c_bit(True)) # NOTE: same as above stream.write(c_float(0)) stream.write(c_bit(False)) stream.write(c_bit(True)) # NOTE: same here stream.write(c_bit(False)) stream.write(c_bit(self.player)) if self.player: stream.write(c_float(self.player_pos.x)) stream.write(c_float(self.player_pos.y)) stream.write(c_float(self.player_pos.z)) stream.write(c_float(self.player_rot.x)) stream.write(c_float(self.player_rot.y)) stream.write(c_float(self.player_rot.z)) stream.write(c_float(self.player_rot.w)) stream.write(c_bit(self.player_ground)) stream.write(c_bit(self.player_rail)) stream.write(c_bit(self.player_velocity)) if self.player_velocity: stream.write(c_float(self.player_velocity_vec.x)) stream.write(c_float(self.player_velocity_vec.y)) stream.write(c_float(self.player_velocity_vec.z)) stream.write(c_bit(self.player_angular_velocity)) if self.player_angular_velocity: stream.write(c_float(self.player_angular_velocity_vec.x)) stream.write(c_float(self.player_angular_velocity_vec.y)) stream.write(c_float(self.player.angular_velocity_vec.z)) stream.write(c_bit(False)) # NOTE: unknown flag
def write_construction(self, stream): stream.write(c_bit(False)) # NOTE: unknown flag(?) stream.write(c_bit(False)) # NOTE: unknown flag
def serialize(self, stream): stream.write(c_bit(True)) stream.write(c_bit(not self.requires_pet))
def serialize(self, stream): stream.write(c_bit(True)) # NOTE: unknown stream.write(c_int64(0))
def write_construction(self, stream): self.pre_creation(stream) stream.write(c_bit(False)) # NOTE: unknown flag(?) stream.write(c_bit(False)) # NOTE: unknown flag stream.write(c_bit(False)) # NOTE: same as above stream.write(c_bit(False)) # NOTE: same here stream.write(c_uint32(self.hair_color)) stream.write(c_uint32(self.hair_style)) stream.write(c_uint32(0)) # NOTE: unknown(?) stream.write(c_uint32(self.shirt_color)) stream.write(c_uint32(self.pants_color)) stream.write(c_uint32(0)) # NOTE: unknown(?) stream.write(c_uint32(0)) # NOTE: unknown(?) stream.write(c_uint32(self.eyebrows)) stream.write(c_uint32(self.eyes)) stream.write(c_uint32(self.mouth)) stream.write(c_uint64(self.account_id)) stream.write(c_uint64(self.llog)) stream.write(c_uint64(0)) # NOTE: unknown stream.write(c_uint64(self.lego_score)) stream.write(c_bit(self.free_to_play)) stream.write(c_uint64(self.currency_collected)) stream.write(c_uint64(self.bricks_collected)) stream.write(c_uint64(self.smashables_smashed)) stream.write(c_uint64(self.quick_builds)) stream.write(c_uint64(self.enemies_smashed)) stream.write(c_uint64(self.rockets_used)) stream.write(c_uint64(self.missions_completed)) stream.write(c_uint64(self.pets_tamed)) stream.write(c_uint64(self.imagination_powerups)) stream.write(c_uint64(self.life_powerups)) stream.write(c_uint64(self.armor_powerups)) stream.write(c_uint64(self.distance_traveled)) stream.write(c_uint64(self.times_smashed)) stream.write(c_uint64(self.damage_taken)) stream.write(c_uint64(self.damage_healed)) stream.write(c_uint64(self.armor_repaired)) stream.write(c_uint64(self.imagination_restored)) stream.write(c_uint64(self.imagination_used)) stream.write(c_uint64(self.distance_driven)) stream.write(c_uint64(self.airborne_time_race_car)) stream.write(c_uint64(self.racing_imagination_powerups)) stream.write(c_uint64(self.racing_imagination_crates_smashed)) stream.write(c_uint64(self.race_car_boosts)) stream.write(c_uint64(self.race_car_wrecks)) stream.write(c_uint64(self.racing_smashables_smashed)) stream.write(c_uint64(self.races_finished)) stream.write(c_uint64(self.first_place_finishes)) stream.write(c_bit(False)) # NOTE: unknown(?) stream.write(c_bit(self.rocket)) if self.rocket: stream.write(c_uint16(self.rocket_characters)) # TODO: LDF rocket info self.post_creation(stream)
def serialize(self, stream): self.write_data(stream) stream.write(c_bit(True)) # NOTE: unknown flag stream.write(c_bit(False))