From a5c51849330c0fe3b4eb64fed5d7206e4a42b7d1 Mon Sep 17 00:00:00 2001 From: raymoo Date: Thu, 26 May 2016 09:30:25 -0700 Subject: [PATCH] Make monoids remove players from themselves on leave --- init.lua | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/init.lua b/init.lua index 92c139f..5fa6e6c 100644 --- a/init.lua +++ b/init.lua @@ -4,10 +4,9 @@ -- Any documentation here are internal details, please avoid using them in your -- mod. -player_monoids = {} +local modpath = minetest.get_modpath(minetest.get_current_modname()) --- Needed for removing players from monoid lists when they leave. -local player_maps = {} +player_monoids = {} local mon_meta = {} @@ -22,14 +21,22 @@ mon_meta.__index = mon_meta local function monoid(def) local mon = {} - local player_map = {} - mon.players = player_map - table.insert(player_maps, player_map) + local p_map = {} + mon.player_map = p_map mon.next_id = 1 + local v_cache = {} + mon.value_cache = v_cache + setmetatable(mon, mon_methods) + minetest.register_on_leaveplayer(function(player) + local p_name = player:get_player_name() + p_map[p_name] = nil + v_cache[p_name] = nil + end) + return mon end @@ -55,7 +62,7 @@ function mon_meta:add_change(player, value) local old_total = self.value_cache[p_name] p_effects[actual_id] = value - local new_total = self.fold(p_effects) + local new_total = self.fold(p_effects) self.value_cache[p_name] = new_total self.apply(new_total, player)