Page 1 of 1

[SOLVED][0.17] on_entity_damaged -> show damage

Posted: Sun Jul 14, 2019 6:41 pm
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 855 times

Re: [0.17] event.on_entity_damaged

Posted: Sun Jul 14, 2019 6:43 pm
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"
          }
        }
      }
    },

Re: [SOLVED][0.17] event.on_entity_damaged

Posted: Mon Jul 15, 2019 12:50 pm
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 )