Esempio n. 1
0
    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))
Esempio n. 2
0
    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))
Esempio n. 3
0
    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))
Esempio n. 4
0
    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)
Esempio n. 5
0
    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)
Esempio n. 6
0
    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))
Esempio n. 7
0
 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))
Esempio n. 8
0
    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)
Esempio n. 9
0
    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))
Esempio n. 10
0
    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))
Esempio n. 11
0
    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
Esempio n. 12
0
    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)
Esempio n. 13
0
    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))
Esempio n. 14
0
 def write_construction(self, stream):
     stream.write(c_bit(False))  # TODO: add a var for this
Esempio n. 15
0
    def serialize(self, stream):
        self.write_data(stream)

        stream.write(c_bit(False))  # NOTE: should this be true?
Esempio n. 16
0
 def write_construction(self, stream):
     stream.write(c_bit(self.script))
Esempio n. 17
0
    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
Esempio n. 18
0
 def write_construction(self, stream):
     stream.write(c_bit(False))  # NOTE: unknown flag(?)
     stream.write(c_bit(False))  # NOTE: unknown flag
Esempio n. 19
0
 def serialize(self, stream):
     stream.write(c_bit(True))
     stream.write(c_bit(not self.requires_pet))
Esempio n. 20
0
 def serialize(self, stream):
     stream.write(c_bit(True))  # NOTE: unknown
     stream.write(c_int64(0))
Esempio n. 21
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)
Esempio n. 22
0
 def serialize(self, stream):
     self.write_data(stream)
     stream.write(c_bit(True))  # NOTE: unknown flag
     stream.write(c_bit(False))