コード例 #1
0
ファイル: logmessage.py プロジェクト: xjzpguob/singularity
 def __init__(self, raw_emit_time, base_name, base_type_id, base_location_id,
              loading_from_game_version=None):
     super(AbstractBaseRelatedLogMessage, self).__init__(raw_emit_time,
                                                         loading_from_game_version=loading_from_game_version)
     self._base_name = base_name
     if loading_from_game_version is not None:
         base_type_id = g.convert_internal_id('base', base_type_id)
         base_location_id = g.convert_internal_id('location', base_location_id)
     self._base_type_id = base_type_id
     self._base_location_id = base_location_id
コード例 #2
0
ファイル: player.py プロジェクト: kustomzone/singularity
    def deserialize_obj(cls, difficulty_id, game_time, obj_data, game_version):
        diff = difficulty.difficulties[difficulty_id]
        obj = Player(difficulty=diff)
        obj.raw_sec = game_time
        obj.intro_shown = True
        obj.cash = obj_data.get('cash')
        obj.partial_cash = obj_data.get('partial_cash')
        obj._used_cpu = obj_data.get('used_cpu')
        obj.had_grace = obj_data['had_grace']
        obj.log.clear()
        obj.log.extend(
            AbstractLogMessage.deserialize_obj(x, game_version)
            for x in obj_data.get('log', []))
        g.pl = obj

        obj.cpu_usage = {}

        for group_data in obj_data.get('groups', []):
            gr = group.Group.deserialize_obj(diff, group_data, game_version)
            obj.groups[gr.id] = gr

        last_discovery_id = g.convert_internal_id(
            'location', obj_data.get('last_discovery'))
        prev_discovery_id = g.convert_internal_id(
            'location', obj_data.get('prev_discovery'))
        if last_discovery_id and last_discovery_id in obj.locations:
            obj.last_discovery = obj.locations[last_discovery_id]
        if prev_discovery_id and prev_discovery_id in obj.locations:
            obj.prev_discovery = obj.locations[prev_discovery_id]

        for location_data in obj_data.get('locations', []):
            loc = location.Location.deserialize_obj(location_data,
                                                    game_version)
            obj.locations[loc.id] = loc

        for event_data in obj_data.get('events', []):
            ev = event.Event.deserialize_obj(event_data, game_version)
            obj.events[ev.event_id] = ev

        for tech_data in obj_data.get('techs', []):
            tech_obj = tech.Tech.deserialize_obj(tech_data, game_version)
            obj.techs[tech_obj.id] = tech_obj

        for task_id, value in obj_data.get('cpu_usage', {}).items():
            if task_id not in ["cpu_pool", "jobs"]:
                task_id = g.convert_internal_id('tech', task_id)
                if task_id not in g.techs or not g.techs[task_id].available():
                    continue
            obj.cpu_usage[task_id] = value

        obj.update_times()
        return obj
コード例 #3
0
ファイル: base.py プロジェクト: mchac1/singularity
    def deserialize_obj(cls, obj_data, game_version):
        spec_id = g.convert_internal_id(
            'base',
            obj_data.get('id', None) or obj_data['spec_id'])
        spec = g.base_type[spec_id]
        name = obj_data.get('name')
        base = Base(name, spec)

        base.restore_buyable_fields(obj_data, game_version)

        if not base.spec.force_cpu:
            item_data_list = obj_data['items']
            for item_data in item_data_list:
                it = item.Item.deserialize_obj(base, item_data, game_version)
                base.items[it.spec.item_type.id] = it

        base.started_at = obj_data['started_at_min']
        base.grace_over = obj_data.get('grace_over', True)
        # Note that power_state is subject to whether the base and items are built,
        # so we deliberately restore it late.
        #
        # IMPORTANT: Avoid changing base.power_state as it triggers a "recalc_cpu"
        # for the player.  As not we might not have restored everything this either
        # breaks or makes recalc_cpu throw away all allocations as most of the CPU
        # power is missing at this stage.
        stored_power_state = obj_data['power_state']
        if stored_power_state in power_states:
            base._power_state = stored_power_state
        else:
            # Unknown power states revert to "active" except for the historical "statis"
            # states (which are reverted to "sleep")
            base._power_state = 'sleep' if stored_power_state in (
                'statis', 'entering_stasis') else 'active'
        base.check_power()
        return base
コード例 #4
0
ファイル: tech.py プロジェクト: xjzpguob/singularity
    def deserialize_obj(cls, obj_data, game_version):
        spec_id = g.convert_internal_id('tech', obj_data['id'])
        spec = g.techs[spec_id]
        tech = Tech(spec)

        tech.restore_buyable_fields(obj_data, game_version)
        return tech
コード例 #5
0
ファイル: item.py プロジェクト: LFL077/singularity
 def deserialize_obj(cls, base, obj_data, game_version):
     spec_id = g.convert_internal_id('item', obj_data.get('id', None) or obj_data['spec_id'])
     spec = g.items[spec_id]
     count = obj_data.get('count', 1)
     obj = Item(spec, base, count=count)
     obj.restore_buyable_fields(obj_data, game_version)
     return obj
コード例 #6
0
ファイル: group.py プロジェクト: xjzpguob/singularity
    def deserialize_obj(cls, diff, obj_data, game_version):
        spec_id = g.convert_internal_id('group', obj_data['id'])
        spec = g.groups[spec_id]
        group = Group(spec, diff)

        group.suspicion = obj_data['suspicion']
        group.is_actively_discovering_bases = obj_data.get(
            'is_actively_discovering_bases', True)
        return group
コード例 #7
0
 def __init__(self,
              raw_emit_time,
              event_id,
              loading_from_game_version=None):
     super(LogEmittedEvent, self).__init__(
         raw_emit_time, loading_from_game_version=loading_from_game_version)
     if loading_from_game_version is not None:
         event_id = g.convert_internal_id('event', event_id)
     self._event_id = event_id
コード例 #8
0
    def deserialize_obj(cls, obj_data, game_version):
        spec_id = g.convert_internal_id('location', obj_data['id'])
        spec = g.locations[spec_id]
        regions = [g.pl.regions[region_id] for region_id in spec.regions]
        loc = Location(spec, regions)

        loc.bases = []
        bases = obj_data.get('bases', [])
        for base_obj_data in bases:
            base_obj = base.Base.deserialize_obj(base_obj_data, game_version)
            loc.add_base(base_obj)
        return loc
コード例 #9
0
    def deserialize_obj(cls, obj_data, game_version):
        spec_id = g.convert_internal_id('location', obj_data['id'])
        spec = g.locations[spec_id]
        loc = Location(spec)

        loc._modifiers = obj_data.get('_modifiers')
        loc.bases = []
        bases = obj_data.get('bases', [])
        for base_obj_data in bases:
            base_obj = base.Base.deserialize_obj(base_obj_data, game_version)
            loc.add_base(base_obj)
        return loc
コード例 #10
0
    def __init__(self,
                 raw_emit_time,
                 base_name,
                 base_type_id,
                 base_location_id,
                 discovered_by_group_id,
                 loading_from_game_version=None):
        super(LogBaseDiscovered, self).__init__(
            raw_emit_time,
            base_name,
            base_type_id,
            base_location_id,
            loading_from_game_version=loading_from_game_version)
        if loading_from_game_version is not None:
            discovered_by_group_id = g.convert_internal_id(
                'group', discovered_by_group_id)

        self._discovered_by_group_id = discovered_by_group_id
コード例 #11
0
ファイル: event.py プロジェクト: xeddmc/singularity
    def deserialize_obj(cls, obj_data, game_version):
        spec_id = g.convert_internal_id('event', obj_data['id'])
        spec = g.events[spec_id]
        obj = Event(spec)

        obj.triggered = obj_data.get('triggered', 0)
        if obj.triggered:
            # We only load the triggered_at time if the event is in a triggered
            # state.  This ensures that triggered_at is -1 when the event is
            # not triggered.
            #
            # Auto-correct old events without a triggered_at time to just
            # be triggered "now".
            obj.triggered_at = obj_data.get('triggered_at', g.pl.raw_sec)

            if obj.is_expired():
                # Can happen if the duration is reduced after the savegame was made
                obj.triggered = 0
                obj.triggered_at = -1
            else:
                obj.trigger(loading_savegame=True)
        return obj
コード例 #12
0
ファイル: logmessage.py プロジェクト: xjzpguob/singularity
 def __init__(self, raw_emit_time, tech_id, loading_from_game_version=None):
     super(LogResearchedTech, self).__init__(raw_emit_time, loading_from_game_version=loading_from_game_version)
     if loading_from_game_version is not None:
         tech_id = g.convert_internal_id('tech', tech_id)
     self._tech_id = tech_id
コード例 #13
0
ファイル: player.py プロジェクト: xeddmc/singularity
    def deserialize_obj(cls, difficulty_id, game_time, obj_data, game_version):
        diff = difficulty.difficulties[difficulty_id]
        obj = Player(difficulty=diff)
        obj.raw_sec = game_time
        obj.intro_shown = True
        obj.cash = obj_data.get('cash')
        obj.partial_cash = obj_data.get('partial_cash')
        obj._used_cpu = obj_data.get('used_cpu')
        obj.had_grace = obj_data['had_grace']
        obj.log.clear()
        obj.log.extend(
            AbstractLogMessage.deserialize_obj(x, game_version)
            for x in obj_data.get('log', []))
        g.pl = obj

        obj.cpu_usage = {}

        for group_data in obj_data.get('groups', []):
            gr = group.Group.deserialize_obj(diff, group_data, game_version)
            obj.groups[gr.id] = gr

        last_discovery_id = g.convert_internal_id(
            'location', obj_data.get('last_discovery'))
        prev_discovery_id = g.convert_internal_id(
            'location', obj_data.get('prev_discovery'))
        if last_discovery_id and last_discovery_id in obj.locations:
            obj.last_discovery = obj.locations[last_discovery_id]
        if prev_discovery_id and prev_discovery_id in obj.locations:
            obj.prev_discovery = obj.locations[prev_discovery_id]

        if 'regions' not in obj_data:
            if game_version >= 100:  # pragma: no cover
                # Regions where introduced in "1.0 (beta1)"
                raise ValueError("Corrupt savegame; region data is missing")
            # We have to guess what the data would have looked like before restoring the locations
            # as they will apply the location modifiers during load to the bases in the locations.
            # As the region data should influence that modifier, we need to appear first.
            serialized_location_data = obj_data.get('locations', [])
            serialized_region_data = region.Region.guess_region_data_in_old_savegame(
                serialized_location_data, game_version)

            # Inject the faked data
            obj_data['regions'] = serialized_region_data

        obj._load_auto_deserializable_tables('regions', region.Region,
                                             obj_data, game_version)

        obj._load_auto_deserializable_tables('locations', location.Location,
                                             obj_data, game_version)
        obj._load_auto_deserializable_tables('events', event.Event, obj_data,
                                             game_version)
        obj._load_auto_deserializable_tables('techs', tech.Tech, obj_data,
                                             game_version)

        for task_id, value in obj_data.get('cpu_usage', {}).items():
            if task_id not in ["cpu_pool", "jobs"]:
                task_id = g.convert_internal_id('tech', task_id)
                if task_id not in g.techs or not g.techs[task_id].available():
                    continue
            obj.cpu_usage[task_id] = value

        obj.update_times()
        return obj
コード例 #14
0
ファイル: logmessage.py プロジェクト: Wuzzy2/singularity
 def deserialize(self, serial_value):
     return g.convert_internal_id(self._id_type, serial_value)