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