Exemple #1
0
def set_effect_area(effect: EffectObject,
                    x1: int, y1: int, x2: int, y2: int) -> None:
    """
    Sets the area selected by effect to minimum (x1, y1) and maximum (x2, y2).
    """
    effect.area_1_x = x1
    effect.area_1_y = y1
    effect.area_2_x = x2
    effect.area_2_y = y2
    def _reconstruct_object(parsed_header, parsed_data, objects,
                            **kwargs):  # Expected {trigger=triggerStruct}
        trigger_data_retriever = find_retriever(
            parsed_data['TriggerPiece'].retrievers, "Trigger data")
        trigger = kwargs['trigger']
        trigger.effect_order = parser.listify(trigger.effect_order)
        trigger.condition_order = parser.listify(trigger.condition_order)

        effects_list = []
        for effect_obj in trigger.effects:
            EffectObject._reconstruct_object(parsed_header,
                                             parsed_data,
                                             objects,
                                             effect=effect_obj,
                                             effects=effects_list)

        helper.update_order_array(trigger.effect_order, len(trigger.effects))

        conditions_list = []
        for condition_obj in trigger.conditions:
            ConditionObject._reconstruct_object(parsed_header,
                                                parsed_data,
                                                objects,
                                                condition=condition_obj,
                                                conditions=conditions_list)

        helper.update_order_array(trigger.condition_order,
                                  len(trigger.conditions))

        trigger_data_retriever.data.append(
            TriggerStruct(data=[
                trigger.enabled,
                trigger.looping,
                trigger.description_stid,
                trigger.display_as_objective,
                trigger.description_order,
                trigger.header,
                trigger.short_description_stid,
                trigger.display_on_screen,
                b'\x00\x00\x00\x00\x00',  # Unknown
                trigger.mute_objectives,
                trigger.description,
                trigger.name,
                trigger.short_description,
                len(trigger.effects),
                effects_list,
                trigger.effect_order,
                len(trigger.conditions),
                conditions_list,
                trigger.condition_order,
            ]))
 def add_effect(self,
                effect_type: Effect,
                ai_script_goal=None,
                aa_quantity=None,
                aa_armor_or_attack_type=None,
                quantity=None,
                tribute_list=None,
                diplomacy=None,
                number_of_units_selected=None,
                object_list_unit_id=None,
                source_player=None,
                target_player=None,
                technology=None,
                string_id=None,
                display_time=None,
                trigger_id=None,
                location_x=None,
                location_y=None,
                location_object_reference=None,
                area_1_x=None,
                area_1_y=None,
                area_2_x=None,
                area_2_y=None,
                object_group=None,
                object_type=None,
                instruction_panel_position=None,
                attack_stance=None,
                time_unit=None,
                enabled_or_victory=None,
                food=None,
                wood=None,
                stone=None,
                gold=None,
                item_id=None,
                flash_object=None,
                force_research_technology=None,
                visibility_state=None,
                scroll=None,
                operation=None,
                object_list_unit_id_2=None,
                button_location=None,
                ai_signal_value=None,
                object_attributes=None,
                from_variable=None,
                variable_or_timer=None,
                facet=None,
                play_sound=None,
                message=None,
                sound_name=None,
                selected_object_ids=None) -> EffectObject:
     effect_defaults = effects.default_attributes[effect_type]
     effect_attr = {}
     for key, value in effect_defaults.items():
         effect_attr[key] = (locals()[key]
                             if locals()[key] is not None else value)
     new_effect = EffectObject(**{**effect_defaults, **effect_attr})
     self.effects.append(new_effect)
     helper.update_order_array(self.effect_order, len(self.effects))
     return new_effect
    def _parse_object(
            parsed_data,
            **kwargs):  # Expected {trigger=triggerStruct, trigger_id=id}
        trigger = kwargs['trigger']

        effects_list = []
        effect_structs = parser.listify(
            find_retriever(trigger.retrievers, "Effect data").data)
        for effect_struct in effect_structs:
            effects_list.append(
                EffectObject._parse_object(parsed_data, effect=effect_struct))

        conditions_list = []
        condition_structs = parser.listify(
            find_retriever(trigger.retrievers, "Condition data").data)
        for condition_struct in condition_structs:
            conditions_list.append(
                ConditionObject._parse_object(parsed_data,
                                              condition=condition_struct))

        return TriggerObject(
            name=find_retriever(trigger.retrievers, "Trigger name").data,
            description=find_retriever(trigger.retrievers,
                                       "Trigger description").data,
            description_stid=find_retriever(
                trigger.retrievers, "Description string Table ID").data,
            display_as_objective=find_retriever(trigger.retrievers,
                                                "Act as objective").data,
            short_description=find_retriever(trigger.retrievers,
                                             "Short description").data,
            short_description_stid=find_retriever(
                trigger.retrievers, "Short description string Table ID").data,
            display_on_screen=find_retriever(trigger.retrievers,
                                             "Display on screen").data,
            description_order=find_retriever(
                trigger.retrievers, "Description order (in objectives)").data,
            enabled=find_retriever(trigger.retrievers, "Enabled").data,
            looping=find_retriever(trigger.retrievers, "Looping").data,
            header=find_retriever(trigger.retrievers, "Make header").data,
            mute_objectives=find_retriever(trigger.retrievers,
                                           "Mute objectives").data,
            conditions_list=conditions_list,
            condition_order=parser.listify(
                find_retriever(trigger.retrievers,
                               "Condition display order array").data),
            effects_list=effects_list,
            effect_order=parser.listify(
                find_retriever(trigger.retrievers,
                               "Effect display order array").data),
            trigger_id=kwargs['trigger_id'],
        )
 def add_effect(self, effect_type: Effect):
     new_effect = EffectObject(
         **effects.default_attributes[effect_type.value])
     self.effects.append(new_effect)
     helper.update_order_array(self.effect_order, len(self.effects))
     return new_effect
 def add_effect(self, effect_type):
     new_effect = EffectObject(effect_type)
     self.effects.append(new_effect)
     helper.update_order_array(self.effect_order, len(self.effects))
     return new_effect