Is it possible to make on_entity_replace easy?
Code: Select all
script.on_event(defines.events.on_preplayer_mined_item, function (event)
event_if_replace (event, "first")
end)
script.on_event(defines.events.on_built_entity, function (event)
event_if_replace (event, "second")
end)
function event_if_replace (event, tstring)
local player_index = event.player_index
local entity = event.entity or event.created_entity
try_init ()
local tick = game.tick
if tstring == "first" then
global.event_replace[tick] = {}
global.event_replace_valid = true
global.event_replace[tick].first = {}
global.event_replace[tick].first.name = entity.name
global.event_replace[tick].first.type = entity.type
global.event_replace[tick].first.position = entity.position
global.event_replace[tick].first.player_index = player_index
elseif ((tstring == "second") and
(global.event_replace_valid) and
(global.event_replace[tick])) then
local first_position = global.event_replace[tick].first.position
local second_position = entity.position
if comparePositions (first_position, second_position) then
local first = global.event_replace[tick].first
local second = {}
second.name = entity.name
second.type = entity.type
second.position = entity.position
second.player_index = player_index
handler_event_on_replace (first, second)
global.event_replace_valid = false
end
elseif global.event_replace[tick] then
-- do nothing
else
global.event_replace = nil
end
end
----------------------------- EVENT ON REPLACE --------------------
function handler_event_on_replace (first, second)
printAll("it was replacing!")
end
function try_init ()
if not (global) then global = {} end
if not (global.event_replace) then global.event_replace = {} end
end
-- -- other stuff -- --
function comparePositions (pos1, pos2)
if not (pos1 and pos2) then return false end
if not ((type (pos1) == "table") and (type (pos2) == "table")) then return false end
if ((pos1.x == pos2.x) and (pos1.y == pos2.y)) then return true end
printAll("not same position, how?")
return false
end
function printAll(text)
for player_index, player in pairs (game.players) do
game.players[player_index].print (text)
end
end