diff options
| author | rubenwardy <rw@rubenwardy.com> | 2018-09-13 17:31:58 +0100 | 
|---|---|---|
| committer | rubenwardy <rw@rubenwardy.com> | 2018-09-13 17:33:04 +0100 | 
| commit | 29a1b97b3849daaf07e2d3789b54817101e9061c (patch) | |
| tree | 7fc5032035718ea9a03a8ef51475610153f5f0b2 /src/data.lua | |
| parent | b856aea54dde26adcb81add8dd3e835ff6c801c1 (diff) | |
Improve code structure and awards formspec size
Diffstat (limited to 'src/data.lua')
| -rw-r--r-- | src/data.lua | 111 | 
1 files changed, 111 insertions, 0 deletions
| diff --git a/src/data.lua b/src/data.lua new file mode 100644 index 0000000..27ae5e3 --- /dev/null +++ b/src/data.lua @@ -0,0 +1,111 @@ + +local storage = minetest.get_mod_storage() +local __player_data + +-- Table Save Load Functions +function awards.save() +	storage:set_string("player_data", minetest.write_json(__player_data)) +end + +local function convert_data() +	minetest.log("warning", "Importing awards data from previous version") + +	local old_players = __player_data +	__player_data = {} +	for name, data in pairs(old_players) do +		while name.name do +			name = name.name +		end +		data.name = name +		print("Converting data for " .. name) + +		-- Just rename counted +		local counted = { +			chats  = "chat", +			deaths = "death", +			joins  = "join", +		} +		for from, to in pairs(counted) do +			data[to]   = data[from] +			data[from] = nil +		end + +		data.death = { +			unknown = data.death, +			__total = data.death, +		} + +		-- Convert item db to new format +		local counted_items = { +			count = "dig", +			place = "place", +			craft = "craft", +		} +		for from, to in pairs(counted_items) do +			local ret = {} + +			local count = 0 +			if data[from] then +				for modname, items in pairs(data[from]) do +					for itemname, value in pairs(items) do +						itemname = modname .. ":" .. itemname +						local key = minetest.registered_aliases[itemname] or itemname +						ret[key] = value +						count = count + value +					end +				end +			end + +			ret.__total = count +			data[from] = nil +			data[to] = ret +		end + +		__player_data[name] = data +	end +end + +function awards.load() +	local old_save_path = minetest.get_worldpath().."/awards.txt" +	local file = io.open(old_save_path, "r") +	if file then +		local table = minetest.deserialize(file:read("*all")) +		if type(table) == "table" then +			__player_data = table +			convert_data() +		else +			__player_data = {} +		end +		file:close() +		os.rename(old_save_path, minetest.get_worldpath().."/awards.bk.txt") +		awards.save() +	else +		__player_data = minetest.parse_json(storage:get_string("player_data")) or {} +	end +end + +function awards.player(name) +	assert(type(name) == "string") +	local data = __player_data[name] or {} +	__player_data[name] = data + +	data.name     = data.name or name +	data.unlocked = data.unlocked or {} +	return data +end + +function awards.player_or_nil(name) +	return __player_data[name] +end + +function awards.enable(name) +	awards.player(name).disabled = nil +end + +function awards.disable(name) +	awards.player(name).disabled = true +end + +function awards.clear_player(name) +	__player_data[name] = {} +end | 
