[SOLVED][0.17] on_entity_damaged -> show damage

Place to get help with not working mods / modding interface.
Post Reply
XaLpHa89
Fast Inserter
Fast Inserter
Posts: 119
Joined: Wed Jan 24, 2018 6:59 am
Contact:

[SOLVED][0.17] on_entity_damaged -> show damage

Post by XaLpHa89 »

Why is the function "event.on_entity_damaged" called twice, although I only do one damage?
.

Code: Select all

local function on_entity_damaged( event )
if event.entity.name == 'tank' then
event.entity.surface.create_entity( { name = 'flying-text', position = event.entity.position, text = event.final_damage_amount, color = { r = 255, g = 0, b = 255 }, text_alignment = 'center' } )
game.print( 'original_damage_amount -- ' .. event.original_damage_amount )
game.print( 'final_damage_amount -- ' .. event.final_damage_amount )
end
end
event.add( defines.events.on_entity_damaged, on_entity_damaged )
.
20190714203428_1.jpg
20190714203428_1.jpg (436.62 KiB) Viewed 581 times
Last edited by XaLpHa89 on Mon Jul 15, 2019 12:51 pm, edited 2 times in total.

User avatar
Klonan
Factorio Staff
Factorio Staff
Posts: 5150
Joined: Sun Jan 11, 2015 2:09 pm
Contact:

Re: [0.17] event.on_entity_damaged

Post by Klonan »

What did you hit the entity with? A cannon shell?

The cannon does two damages:

Code: Select all

    action =
    {
      type = "direct",
      action_delivery =
      {
        type = "instant",
        target_effects =
        {
          {
            type = "damage",
            damage = {amount = 200 , type = "physical"}
          },
          {
            type = "damage",
            damage = {amount = 100 , type = "explosion"}
          },
          {
            type = "create-entity",
            entity_name = "explosion"
          }
        }
      }
    },

XaLpHa89
Fast Inserter
Fast Inserter
Posts: 119
Joined: Wed Jan 24, 2018 6:59 am
Contact:

Re: [SOLVED][0.17] event.on_entity_damaged

Post by XaLpHa89 »

My new approach:

Code: Select all

local function on_tick( event )
if game.tick % 30 == 0 and table_of_cause_damages ~= nil then
for _, item in pairs( table_of_cause_damages ) do
item.surface.create_entity( { name = 'flying-text', position = item.position, text = math.ceil( item.damage ), color = { r = 255, g = 0, b = 255 } } )
end
table_of_cause_damages = nil
end
end
event.add( defines.events.on_tick, on_tick )
local function on_entity_damaged( event )
if not event.entity.valid then return end
if event.final_damage_amount < 1 then return end
if table_of_cause_damages == nil then table_of_cause_damages = {} end
if table_of_cause_damages[ event.entity.unit_number ] == nil then table_of_cause_damages[ event.entity.unit_number ] = { surface = event.entity.surface, position = event.entity.position, damage = 0 } end
table_of_cause_damages[ event.entity.unit_number ].damage = table_of_cause_damages[ event.entity.unit_number ].damage + event.final_damage_amount
end
event.add( defines.events.on_entity_damaged, on_entity_damaged )

Post Reply

Return to “Modding help”