1
0
mirror of https://github.com/Refactorio/RedMew.git synced 2025-01-18 03:21:47 +02:00

Merge branch 'master' of https://github.com/grilledham/RedMew into disable-ag

This commit is contained in:
grilledham 2018-07-02 10:51:56 +01:00
commit aea7bc2d0f
5 changed files with 62 additions and 34 deletions

View File

@ -1,13 +1,20 @@
local Event = require 'utils.event'
local Global = require 'utils.global'
local Task = require 'utils.Task'
local Token = require 'utils.global_token'
local function on_init()
global.corpse_util_corpses = {}
end
local player_corpses = {}
Global.register(
player_corpses,
function(tbl)
player_corpses = tbl
end
)
local function player_died(event)
local player = game.players[event.player_index]
local player_index = event.player_index
local player = game.players[player_index]
if not player or not player.valid then
return
@ -16,12 +23,14 @@ local function player_died(event)
local pos = player.position
local entities =
player.surface.find_entities_filtered {
area = {{pos.x, pos.y}, {pos.x + 1, pos.y + 1}},
area = {{pos.x - 0.5, pos.y - 0.5}, {pos.x + 0.5, pos.y + 0.5}},
name = 'character-corpse'
}
local tick = game.tick
local entity
for _, e in ipairs(entities) do
if e.character_corpse_player_index == event.player_index then
if e.character_corpse_player_index == event.player_index and e.character_corpse_tick_of_death == tick then
entity = e
break
end
@ -43,16 +52,14 @@ local function player_died(event)
return
end
global.corpse_util_corpses[position.x .. ',' .. position.y] = tag
player_corpses[player_index * 0x100000000 + tick] = tag
end
local function remove_tag(position)
local pos = position.x .. ',' .. position.y
local function remove_tag(player_index, tick)
local index = player_index * 0x100000000 + tick
local tag = global.corpse_util_corpses[pos]
if tag then
global.corpse_util_corpses[pos] = nil
end
local tag = player_corpses[index]
player_corpses[index] = nil
if not tag or not tag.valid then
return
@ -65,7 +72,7 @@ local function corpse_expired(event)
local entity = event.corpse
if entity and entity.valid then
remove_tag(entity.position)
remove_tag(entity.character_corpse_player_index, entity.character_corpse_tick_of_death)
end
end
@ -73,7 +80,7 @@ local corpse_util_mined_entity =
Token.register(
function(data)
if not data.entity.valid then
remove_tag(data.position)
remove_tag(data.player_index, data.tick)
end
end
)
@ -84,11 +91,18 @@ local function mined_entity(event)
if entity and entity.valid and entity.name == 'character-corpse' then
-- The corpse may be mined but not removed (if player doesn't have inventory space)
-- so we wait one tick to see if the corpse is gone.
Task.set_timeout_in_ticks(1, corpse_util_mined_entity, {entity = entity, position = entity.position})
Task.set_timeout_in_ticks(
1,
corpse_util_mined_entity,
{
entity = entity,
player_index = entity.character_corpse_player_index,
tick = entity.character_corpse_tick_of_death
}
)
end
end
Event.on_init(on_init)
Event.add(defines.events.on_player_died, player_died)
Event.add(defines.events.on_character_corpse_expired, corpse_expired)
Event.add(defines.events.on_pre_player_mined_item, mined_entity)

View File

@ -61,7 +61,7 @@ local function teleport_location(cmd)
game.player.teleport(pos)
end
local function do_fish_kill(player)
local function do_fish_kill(player, suicide)
local c = player.character
if not c then
return false
@ -70,6 +70,11 @@ local function do_fish_kill(player)
local e = player.surface.create_entity {name = 'fish', position = player.position}
c.die(player.force, e)
-- Don't want people killing themselves for free fish.
if suicide then
e.destroy()
end
return true
end
@ -86,12 +91,12 @@ local function kill(cmd)
end
if not target and player then
if not do_fish_kill(player) then
if not do_fish_kill(player, true) then
player_print("Sorry, you don't have a character to kill.")
end
elseif player then
if target == player then
if not do_fish_kill(player) then
if not do_fish_kill(player, true) then
player_print("Sorry, you don't have a character to kill.")
end
elseif target and player.admin then

View File

@ -106,13 +106,22 @@ local total_fish_market_bonus_messages = #fish_market_bonus_message
local function fish_earned(event, amount)
local player_index = event.player_index
local player = game.players[player_index]
local stack = {name = 'raw-fish', count = amount}
local inserted = player.insert(stack)
local diff = amount - inserted
if diff > 0 then
stack.count = diff
player.surface.spill_item_stack(player.position, stack, true)
end
local fish = PlayerStats.get_fish_earned(player_index)
fish = fish + amount
PlayerStats.set_fish_earned(player_index, fish)
if fish % 70 == 0 then
local player = game.players[player_index]
if player and player.valid then
local message = fish_market_bonus_message[math.random(total_fish_market_bonus_messages)]
player.print(message)

View File

@ -40,7 +40,7 @@ Global.register(
},
function(tbl)
player_poke_cooldown = tbl.player_poke_cooldown
player_pokes = player_pokes
player_pokes = tbl.player_pokes
player_settings = tbl.player_settings
no_notify_players = tbl.no_notify_players
end
@ -144,13 +144,13 @@ local column_builders = {
[sprite_heading_name] = {
create_data = function(player)
local ticks = player.online_time
local level = math.ceil(ticks * inv_sprite_time_step)
local level = math.floor(ticks * inv_sprite_time_step) + 1
level = math.min(level, #player_sprites)
return level
end,
sort = function(a, b)
return a > b
return a < b
end,
draw_heading = function(parent)
local label = parent.add {type = 'label', name = sprite_heading_name, caption = ' '}
@ -179,7 +179,7 @@ local column_builders = {
return player
end,
sort = function(a, b)
return a.name > b.name
return a.name:lower() < b.name:lower()
end,
draw_heading = function(parent)
local label = parent.add {type = 'label', name = player_name_heading_name, caption = 'Name'}
@ -213,7 +213,7 @@ local column_builders = {
return player.online_time
end,
sort = function(a, b)
return a > b
return a < b
end,
draw_heading = function(parent)
local label = parent.add {type = 'label', name = time_heading_name, caption = 'Time'}
@ -237,7 +237,7 @@ local column_builders = {
[rank_heading_name] = {
create_data = get_rank_level,
sort = function(a, b)
return a > b
return a < b
end,
draw_heading = function(parent)
local label = parent.add {type = 'label', name = rank_heading_name, caption = 'Rank'}
@ -262,7 +262,7 @@ local column_builders = {
return PlayerStats.get_walk_distance(player.index)
end,
sort = function(a, b)
return a > b
return a < b
end,
draw_heading = function(parent)
local label = parent.add {type = 'label', name = distance_heading_name, caption = 'Distance'}
@ -294,9 +294,9 @@ local column_builders = {
sort = function(a, b)
local a_fish_earned, b_fish_earned = a.fish_earned, b.fish_earned
if a_fish_earned == b_fish_earned then
return a.fish_spent > b.fish_spent
return a.fish_spent < b.fish_spent
else
return a_fish_earned > b_fish_earned
return a_fish_earned < b_fish_earned
end
end,
draw_heading = function(parent)
@ -333,7 +333,7 @@ local column_builders = {
}
end,
sort = function(a, b)
return a.count > b.count
return a.count < b.count
end,
draw_heading = function(parent)
local label = parent.add {type = 'label', name = deaths_heading_name, caption = 'Deaths'}
@ -368,7 +368,7 @@ local column_builders = {
return {poke_count = player_pokes[player.index] or 0, player = player}
end,
sort = function(a, b)
return a.poke_count > b.poke_count
return a.poke_count < b.poke_count
end,
draw_heading = function(parent, data)
local label = parent.add {type = 'label', name = poke_name_heading_name, caption = 'Poke'}
@ -696,7 +696,7 @@ Gui.on_click(
if sorted_column == poke_name_heading_name then
redraw_cells(frame_data)
else
local poke_button = poke_bottons[p.index]
local poke_button = poke_bottons[poke_player_index]
poke_button.caption = count
end
end

View File

@ -164,7 +164,7 @@ local function redraw_poll_viewer_content(data)
end
table.remove(edit_names)
local edit_text = table.concat(edit_names, ', ')
local edit_text = table.concat(edit_names)
top_flow.add {type = 'label', caption = edit_text, tooltip = edit_text}
end