Code: Select all
function entityBuiltEventHandler(event)
if(event.created_entity.name == "XXX")then
end
end
Code: Select all
script.on_event(defines.events.on_built_entity, entityBuiltEventHandler, {{filter="name", name="XXX" }} )
Code: Select all
function entityBuiltEventHandler(event)
if(event.created_entity.name == "XXX")then
end
end
Code: Select all
script.on_event(defines.events.on_built_entity, entityBuiltEventHandler, {{filter="name", name="XXX" }} )
This isn't true. You can have multiple entries in a filter, mixing different types. If you need to merge two sets of filters together, you can just merge the filter tables. For example:
Code: Select all
local event_filters = {
{filter = "name", name = "iron-gas-vent"},
{filter = "type", type = "storage-tank"},
{filter = "type", type = "pipe"},
{filter = "type", type = "pipe-to-ground"},
}
script.set_event_filter(defines.events.on_built_entity, event_filters)
script.set_event_filter(defines.events.on_robot_built_entity, event_filters)
script.set_event_filter(defines.events.on_player_mined_entity, event_filters)
Never heard of it.For bigger mods, you'll probably want to use the event_handler core lib, however that lib doesn't support filters at all.
You said you could have one filter per event. That's not true.PFQNiet wrote: ↑Mon Nov 09, 2020 2:42 pmYes... that's exactly what I described. A filter collecting all the types you want (in your example, one entity by name and two entity types). Within your event handler you may want different behaviour for each of those, in which case you will need the `if` blocks.
No-one is bragging.And frankly, your ignorance of the core Factorio libraries isn't something to brag about.
You can make a kind of multi-filter, but it's quite tedious and not intuitive. For example, in Water Turrets I want to act if an entity has been damaged by one of my turrets. It's likely that my turrets have caused the damage if the damage is one of my damage types, so I could filter by that:
Code: Select all
script.on_event(defines.events.on_entity_damaged, on_entity_damaged, {
{filter = "damage-type", type = WT.steam_damage_name},
{filter = "damage-type", type = WT.water_damage_name},
{filter = "damage-type", type = WT.fire_ex_damage_name},
})
Code: Select all
script.on_event(defines.events.on_entity_damaged, on_entity_damaged, {
{filter = "final-damage-amount", comparison = ">", value = 0},
{filter = "damage-type", type = WT.steam_damage_name, mode = "and"},
{filter = "damage-type", type = WT.water_damage_name, mode = "or"},
{filter = "damage-type", type = WT.fire_ex_damage_name, mode = "or"},
})
Code: Select all
script.on_event(defines.events.on_entity_damaged, on_entity_damaged, {
{filter = "final-damage-amount", comparison = ">", value = 0},
{filter = "damage-type", type = WT.steam_damage_name, mode = "and"},
{filter = "final-damage-amount", comparison = ">", value = 0, mode = "or"},
{filter = "damage-type", type = WT.water_damage_name, mode = "and"},
{filter = "final-damage-amount", comparison = ">", value = 0, mode = "or"},
{filter = "damage-type", type = WT.fire_ex_damage_name, mode = "and"},
})
For common events like on_entity_died it really makes a difference whether you'll have to go through the if-blocks for each biter you've killed or whether the event only triggers for the types of entities you're actually interested in. So I'd say filtering out the bulk of unwanted cases via event filtering and fine-tuning the rest inside the event handler is the best solution.