forked from mtcontrib/awards
Move helpers and chat commands to separate files
This commit is contained in:
parent
85a40d2488
commit
85efc67049
173
api.lua
173
api.lua
@ -18,6 +18,11 @@ function awards.save()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function awards.init()
|
||||||
|
awards.players = awards.load()
|
||||||
|
awards.def = {}
|
||||||
|
end
|
||||||
|
|
||||||
function awards.load()
|
function awards.load()
|
||||||
local file = io.open(minetest.get_worldpath().."/awards.txt", "r")
|
local file = io.open(minetest.get_worldpath().."/awards.txt", "r")
|
||||||
if file then
|
if file then
|
||||||
@ -29,77 +34,15 @@ function awards.load()
|
|||||||
return {}
|
return {}
|
||||||
end
|
end
|
||||||
|
|
||||||
awards.players = awards.load()
|
awards.init()
|
||||||
function awards.player(name)
|
|
||||||
return awards.players[name]
|
|
||||||
end
|
|
||||||
|
|
||||||
-- A table of award definitions
|
|
||||||
awards.def = {}
|
|
||||||
|
|
||||||
function awards.tbv(tb,value,default)
|
|
||||||
if not default then
|
|
||||||
default = {}
|
|
||||||
end
|
|
||||||
if not tb or type(tb) ~= "table" then
|
|
||||||
if not value then
|
|
||||||
value = "[NULL]"
|
|
||||||
end
|
|
||||||
minetest.log("error", "awards.tbv - table "..dump(value).." is null, or not a table! Dump: "..dump(tb))
|
|
||||||
return
|
|
||||||
end
|
|
||||||
if not value then
|
|
||||||
error("[ERROR] awards.tbv was not used correctly!\n"..
|
|
||||||
"Value: '"..dump(value).."'\n"..
|
|
||||||
"Dump:"..dump(tb))
|
|
||||||
return
|
|
||||||
end
|
|
||||||
if not tb[value] then
|
|
||||||
tb[value] = default
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function awards.assertPlayer(playern)
|
|
||||||
awards.tbv(awards.players, playern)
|
|
||||||
awards.tbv(awards.players[playern], "name", playern)
|
|
||||||
awards.tbv(awards.players[playern], "unlocked")
|
|
||||||
awards.tbv(awards.players[playern], "place")
|
|
||||||
awards.tbv(awards.players[playern], "count")
|
|
||||||
awards.tbv(awards.players[playern], "craft")
|
|
||||||
awards.tbv(awards.players[playern], "deaths", 0)
|
|
||||||
awards.tbv(awards.players[playern], "joins", 0)
|
|
||||||
awards.tbv(awards.players[playern], "chats", 0)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Load files
|
-- Load files
|
||||||
|
dofile(minetest.get_modpath("awards").."/helpers.lua")
|
||||||
dofile(minetest.get_modpath("awards").."/triggers.lua")
|
dofile(minetest.get_modpath("awards").."/triggers.lua")
|
||||||
|
|
||||||
-- API Functions
|
-- API Functions
|
||||||
function awards._additional_triggers(name, data_table)
|
function awards._additional_triggers(name, data_table)
|
||||||
-- To add triggers in another mod, you should override this function
|
-- Depreciated!
|
||||||
-- If the code can't handle the trigger passed, then call the last value of _additional_triggers
|
|
||||||
--[[
|
|
||||||
local add_trig = awards._additional_triggers
|
|
||||||
awards._additional_triggers = function(name, data_table)
|
|
||||||
if data_table.trigger.type == "trigger" then
|
|
||||||
local tmp = {
|
|
||||||
award = name,
|
|
||||||
node = data_table.trigger.node,
|
|
||||||
target = data_table.trigger.target,
|
|
||||||
}
|
|
||||||
table.insert(awards.onTrigger,tmp)
|
|
||||||
elseif data_table.trigger.type == "trigger2" then
|
|
||||||
local tmp = {
|
|
||||||
award = name,
|
|
||||||
node = data_table.trigger.node,
|
|
||||||
target = data_table.trigger.target,
|
|
||||||
}
|
|
||||||
table.insert(awards.onTrigger2,tmp)
|
|
||||||
else
|
|
||||||
add_trig(name, data_table)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
]]--
|
|
||||||
end
|
end
|
||||||
function awards.register_achievement(name,data_table)
|
function awards.register_achievement(name,data_table)
|
||||||
-- see if a trigger is defined in the achievement definition
|
-- see if a trigger is defined in the achievement definition
|
||||||
@ -158,7 +101,7 @@ function awards.register_achievement(name,data_table)
|
|||||||
if data_table.custom_announce == nil or data_table.custom_announce == "" then
|
if data_table.custom_announce == nil or data_table.custom_announce == "" then
|
||||||
data_table.custom_announce = "Achievement Unlocked:"
|
data_table.custom_announce = "Achievement Unlocked:"
|
||||||
end
|
end
|
||||||
|
|
||||||
-- add the achievement to the definition table
|
-- add the achievement to the definition table
|
||||||
data_table.name = name
|
data_table.name = name
|
||||||
awards.def[name] = data_table
|
awards.def[name] = data_table
|
||||||
@ -204,7 +147,7 @@ end
|
|||||||
function awards.give_achievement(name, award)
|
function awards.give_achievement(name, award)
|
||||||
-- Access Player Data
|
-- Access Player Data
|
||||||
local data = awards.players[name]
|
local data = awards.players[name]
|
||||||
|
|
||||||
-- Perform checks
|
-- Perform checks
|
||||||
if not data then
|
if not data then
|
||||||
return
|
return
|
||||||
@ -290,7 +233,7 @@ function awards.give_achievement(name, award)
|
|||||||
position = {x = 0.5, y = 0},
|
position = {x = 0.5, y = 0},
|
||||||
offset = {x = 0, y = 40},
|
offset = {x = 0, y = 40},
|
||||||
alignment = {x = 0, y = -1}
|
alignment = {x = 0, y = -1}
|
||||||
})
|
})
|
||||||
local three = player:hud_add({
|
local three = player:hud_add({
|
||||||
hud_elem_type = "text",
|
hud_elem_type = "text",
|
||||||
name = "award_title",
|
name = "award_title",
|
||||||
@ -300,7 +243,7 @@ function awards.give_achievement(name, award)
|
|||||||
position = {x = 0.5, y = 0},
|
position = {x = 0.5, y = 0},
|
||||||
offset = {x = 30, y = 100},
|
offset = {x = 30, y = 100},
|
||||||
alignment = {x = 0, y = -1}
|
alignment = {x = 0, y = -1}
|
||||||
})
|
})
|
||||||
local four = player:hud_add({
|
local four = player:hud_add({
|
||||||
hud_elem_type = "image",
|
hud_elem_type = "image",
|
||||||
name = "award_icon",
|
name = "award_icon",
|
||||||
@ -317,50 +260,15 @@ function awards.give_achievement(name, award)
|
|||||||
player:hud_remove(four)
|
player:hud_remove(four)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- record this in the log
|
-- record this in the log
|
||||||
minetest.log("action", name.." has unlocked award "..title)
|
minetest.log("action", name.." has unlocked award "..title)
|
||||||
|
|
||||||
-- save playertable
|
-- save playertable
|
||||||
awards.save()
|
awards.save()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- List a player's achievements
|
|
||||||
minetest.register_chatcommand("list_awards", {
|
|
||||||
params = "obsolete",
|
|
||||||
description = "list_awards: obsolete. Use /awards",
|
|
||||||
func = function(name, param)
|
|
||||||
minetest.chat_send_player(name, "This command has been made obsolete. Use /awards instead.")
|
|
||||||
awards.showto(name, name, nil, false)
|
|
||||||
end
|
|
||||||
})
|
|
||||||
minetest.register_chatcommand("awards", {
|
|
||||||
params = "",
|
|
||||||
description = "awards: list awards",
|
|
||||||
func = function(name, param)
|
|
||||||
awards.showto(name, name, nil, false)
|
|
||||||
end
|
|
||||||
})
|
|
||||||
minetest.register_chatcommand("cawards", {
|
|
||||||
params = "",
|
|
||||||
description = "awards: list awards in chat",
|
|
||||||
func = function(name, param)
|
|
||||||
awards.showto(name, name, nil, true)
|
|
||||||
end
|
|
||||||
})
|
|
||||||
minetest.register_chatcommand("awd", {
|
|
||||||
params = "award name",
|
|
||||||
description = "awd: Details of awd gotten",
|
|
||||||
func = function(name, param)
|
|
||||||
local def = awards.def[param]
|
|
||||||
if def then
|
|
||||||
minetest.chat_send_player(name,def.title..": "..def.description)
|
|
||||||
else
|
|
||||||
minetest.chat_send_player(name,"Award not found.")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
})
|
|
||||||
--[[minetest.register_chatcommand("gawd", {
|
--[[minetest.register_chatcommand("gawd", {
|
||||||
params = "award name",
|
params = "award name",
|
||||||
description = "gawd: give award to self",
|
description = "gawd: give award to self",
|
||||||
@ -369,26 +277,6 @@ minetest.register_chatcommand("awd", {
|
|||||||
end
|
end
|
||||||
})]]--
|
})]]--
|
||||||
|
|
||||||
function awards._order_awards(name)
|
|
||||||
local done = {}
|
|
||||||
local retval = {}
|
|
||||||
local player = awards.player(name)
|
|
||||||
if player and player.unlocked then
|
|
||||||
for _,got in pairs(player.unlocked) do
|
|
||||||
if awards.def[got] then
|
|
||||||
done[got] = true
|
|
||||||
table.insert(retval,{name=got,got=true})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
for _,def in pairs(awards.def) do
|
|
||||||
if not done[def.name] then
|
|
||||||
table.insert(retval,{name=def.name,got=false})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return retval
|
|
||||||
end
|
|
||||||
|
|
||||||
function awards.showto(name, to, sid, text)
|
function awards.showto(name, to, sid, text)
|
||||||
if name == "" or name == nil then
|
if name == "" or name == nil then
|
||||||
name = to
|
name = to
|
||||||
@ -404,7 +292,7 @@ function awards.showto(name, to, sid, text)
|
|||||||
local def = awards.def[str]
|
local def = awards.def[str]
|
||||||
if def then
|
if def then
|
||||||
if def.title then
|
if def.title then
|
||||||
if def.description then
|
if def.description then
|
||||||
minetest.chat_send_player(to, def.title..": "..def.description)
|
minetest.chat_send_player(to, def.title..": "..def.description)
|
||||||
else
|
else
|
||||||
minetest.chat_send_player(to, def.title)
|
minetest.chat_send_player(to, def.title)
|
||||||
@ -418,9 +306,9 @@ function awards.showto(name, to, sid, text)
|
|||||||
if sid == nil or sid < 1 then
|
if sid == nil or sid < 1 then
|
||||||
sid = 1
|
sid = 1
|
||||||
end
|
end
|
||||||
local formspec = "size[11,5]"
|
local formspec = "size[11,5]"
|
||||||
local listofawards = awards._order_awards(name)
|
local listofawards = awards._order_awards(name)
|
||||||
|
|
||||||
-- Sidebar
|
-- Sidebar
|
||||||
if sid then
|
if sid then
|
||||||
local item = listofawards[sid+0]
|
local item = listofawards[sid+0]
|
||||||
@ -429,7 +317,7 @@ function awards.showto(name, to, sid, text)
|
|||||||
formspec = formspec .. "label[1,2.75;Secret Award]"..
|
formspec = formspec .. "label[1,2.75;Secret Award]"..
|
||||||
"image[1,0;3,3;unknown.png]"
|
"image[1,0;3,3;unknown.png]"
|
||||||
if def and def.description then
|
if def and def.description then
|
||||||
formspec = formspec .. "label[0,3.25;Unlock this award to find out what it is]"
|
formspec = formspec .. "label[0,3.25;Unlock this award to find out what it is]"
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
local title = item.name
|
local title = item.name
|
||||||
@ -447,13 +335,13 @@ function awards.showto(name, to, sid, text)
|
|||||||
formspec = formspec .. "label[1,2.75;"..title..status.."]"..
|
formspec = formspec .. "label[1,2.75;"..title..status.."]"..
|
||||||
"image[1,0;3,3;"..icon.."]"
|
"image[1,0;3,3;"..icon.."]"
|
||||||
if def and def.description then
|
if def and def.description then
|
||||||
formspec = formspec .. "label[0,3.25;"..def.description.."]"
|
formspec = formspec .. "label[0,3.25;"..def.description.."]"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Create list box
|
-- Create list box
|
||||||
formspec = formspec .. "textlist[4.75,0;6,5;awards;"
|
formspec = formspec .. "textlist[4.75,0;6,5;awards;"
|
||||||
local first = true
|
local first = true
|
||||||
for _,award in pairs(listofawards) do
|
for _,award in pairs(listofawards) do
|
||||||
local def = awards.def[award.name]
|
local def = awards.def[award.name]
|
||||||
@ -462,14 +350,14 @@ function awards.showto(name, to, sid, text)
|
|||||||
formspec = formspec .. ","
|
formspec = formspec .. ","
|
||||||
end
|
end
|
||||||
first = false
|
first = false
|
||||||
|
|
||||||
if def.secret and not award.got then
|
if def.secret and not award.got then
|
||||||
formspec = formspec .. "#ACACACSecret Award"
|
formspec = formspec .. "#ACACACSecret Award"
|
||||||
else
|
else
|
||||||
local title = award.name
|
local title = award.name
|
||||||
if def and def.title then
|
if def and def.title then
|
||||||
title = def.title
|
title = def.title
|
||||||
end
|
end
|
||||||
if award.got then
|
if award.got then
|
||||||
formspec = formspec .. minetest.formspec_escape(title)
|
formspec = formspec .. minetest.formspec_escape(title)
|
||||||
else
|
else
|
||||||
@ -477,7 +365,7 @@ function awards.showto(name, to, sid, text)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
formspec = formspec .. ";"..sid.."]"
|
formspec = formspec .. ";"..sid.."]"
|
||||||
|
|
||||||
-- Show formspec to user
|
-- Show formspec to user
|
||||||
@ -495,11 +383,10 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
if fields.awards then
|
if fields.awards then
|
||||||
local event = minetest.explode_textlist_event(fields.awards)
|
local event = minetest.explode_textlist_event(fields.awards)
|
||||||
if event.type == "CHG" then
|
if event.type == "CHG" then
|
||||||
awards.showto(name,name,event.index,false)
|
awards.showto(name,name,event.index,false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return true
|
return true
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
37
chat_commands.lua
Normal file
37
chat_commands.lua
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
minetest.register_chatcommand("list_awards", {
|
||||||
|
params = "obsolete",
|
||||||
|
description = "list_awards: obsolete. Use /awards",
|
||||||
|
func = function(name, param)
|
||||||
|
minetest.chat_send_player(name, "This command has been made obsolete. Use /awards instead.")
|
||||||
|
awards.showto(name, name, nil, false)
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_chatcommand("awards", {
|
||||||
|
params = "",
|
||||||
|
description = "awards: list awards",
|
||||||
|
func = function(name, param)
|
||||||
|
awards.showto(name, name, nil, false)
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_chatcommand("cawards", {
|
||||||
|
params = "",
|
||||||
|
description = "awards: list awards in chat",
|
||||||
|
func = function(name, param)
|
||||||
|
awards.showto(name, name, nil, true)
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_chatcommand("awd", {
|
||||||
|
params = "award name",
|
||||||
|
description = "awd: Details of awd gotten",
|
||||||
|
func = function(name, param)
|
||||||
|
local def = awards.def[param]
|
||||||
|
if def then
|
||||||
|
minetest.chat_send_player(name,def.title..": "..def.description)
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(name,"Award not found.")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
})
|
56
helpers.lua
Normal file
56
helpers.lua
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
function awards.tbv(tb,value,default)
|
||||||
|
if not default then
|
||||||
|
default = {}
|
||||||
|
end
|
||||||
|
if not tb or type(tb) ~= "table" then
|
||||||
|
if not value then
|
||||||
|
value = "[NULL]"
|
||||||
|
end
|
||||||
|
minetest.log("error", "awards.tbv - table "..dump(value).." is null, or not a table! Dump: "..dump(tb))
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not value then
|
||||||
|
error("[ERROR] awards.tbv was not used correctly!\n"..
|
||||||
|
"Value: '"..dump(value).."'\n"..
|
||||||
|
"Dump:"..dump(tb))
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not tb[value] then
|
||||||
|
tb[value] = default
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function awards.assertPlayer(playern)
|
||||||
|
awards.tbv(awards.players, playern)
|
||||||
|
awards.tbv(awards.players[playern], "name", playern)
|
||||||
|
awards.tbv(awards.players[playern], "unlocked")
|
||||||
|
awards.tbv(awards.players[playern], "place")
|
||||||
|
awards.tbv(awards.players[playern], "count")
|
||||||
|
awards.tbv(awards.players[playern], "deaths", 0)
|
||||||
|
awards.tbv(awards.players[playern], "joins", 0)
|
||||||
|
awards.tbv(awards.players[playern], "chats", 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
function awards.player(name)
|
||||||
|
return awards.players[name]
|
||||||
|
end
|
||||||
|
|
||||||
|
function awards._order_awards(name)
|
||||||
|
local done = {}
|
||||||
|
local retval = {}
|
||||||
|
local player = awards.player(name)
|
||||||
|
if player and player.unlocked then
|
||||||
|
for _,got in pairs(player.unlocked) do
|
||||||
|
if awards.def[got] then
|
||||||
|
done[got] = true
|
||||||
|
table.insert(retval,{name=got,got=true})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for _,def in pairs(awards.def) do
|
||||||
|
if not done[def.name] then
|
||||||
|
table.insert(retval,{name=def.name,got=false})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return retval
|
||||||
|
end
|
10
init.lua
10
init.lua
@ -13,6 +13,7 @@ else
|
|||||||
end
|
end
|
||||||
|
|
||||||
dofile(minetest.get_modpath("awards").."/api.lua")
|
dofile(minetest.get_modpath("awards").."/api.lua")
|
||||||
|
dofile(minetest.get_modpath("awards").."/chat_commands.lua")
|
||||||
|
|
||||||
-- Light it up
|
-- Light it up
|
||||||
awards.register_achievement("award_lightitup",{
|
awards.register_achievement("award_lightitup",{
|
||||||
@ -328,7 +329,7 @@ awards.register_onDeath(function(player,data)
|
|||||||
local pos = player:getpos()
|
local pos = player:getpos()
|
||||||
if pos and minetest.find_node_near(pos, 2, "fire:basic_flame") ~= nil then
|
if pos and minetest.find_node_near(pos, 2, "fire:basic_flame") ~= nil then
|
||||||
return "award_burn"
|
return "award_burn"
|
||||||
end
|
end
|
||||||
return nil
|
return nil
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@ -341,7 +342,7 @@ awards.register_onDeath(function(player,data)
|
|||||||
local pos = player:getpos()
|
local pos = player:getpos()
|
||||||
if pos and minetest.find_node_near(pos, 2, "default:lava_flowing") ~= nil then
|
if pos and minetest.find_node_near(pos, 2, "default:lava_flowing") ~= nil then
|
||||||
return "award_in_the_flow"
|
return "award_in_the_flow"
|
||||||
end
|
end
|
||||||
return nil
|
return nil
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@ -354,7 +355,7 @@ awards.register_onDeath(function(player,data)
|
|||||||
local pos = player:getpos()
|
local pos = player:getpos()
|
||||||
if pos and minetest.find_node_near(pos, 5, "default:stone_with_diamond") ~= nil then
|
if pos and minetest.find_node_near(pos, 5, "default:stone_with_diamond") ~= nil then
|
||||||
return "award_this_is_sad"
|
return "award_this_is_sad"
|
||||||
end
|
end
|
||||||
return nil
|
return nil
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@ -367,7 +368,6 @@ awards.register_onDeath(function(player,data)
|
|||||||
local pos = player:getpos()
|
local pos = player:getpos()
|
||||||
if pos and minetest.find_node_near(pos, 5, "bones:bones") ~= nil then
|
if pos and minetest.find_node_near(pos, 5, "bones:bones") ~= nil then
|
||||||
return "award_the_stack"
|
return "award_the_stack"
|
||||||
end
|
end
|
||||||
return nil
|
return nil
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user