Secret awards, fixes

This commit is contained in:
rubenwardy 2014-05-02 20:09:54 +01:00
parent d0e5dfc0c1
commit 6a592781d5
3 changed files with 62 additions and 31 deletions

35
api.lua

@ -261,15 +261,15 @@ minetest.register_chatcommand("list_awards", {
end
})
minetest.register_chatcommand("awards", {
params = "Empty params for your awards, player name for someone else's awards",
params = "",
description = "awards: list awards",
func = function(name, param)
awards.showto(name, name, nil, false)
end
})
minetest.register_chatcommand("cawards", {
params = "Empty params for your awards, player name for someone else's awards",
description = "awards: list awards",
params = "",
description = "awards: list awards in chat",
func = function(name, param)
awards.showto(name, name, nil, true)
end
@ -313,16 +313,28 @@ function awards._order_awards(name)
end
function awards.showto(name, to, sid, text)
if name == "" or name == nil then
name = to
end
if text then
if not awards.players[name] or not awards.players[name].unlocked then
minetest.chat_send_player(name, "You do not have any awards")
minetest.chat_send_player(to, "You have not unlocked any awards")
return
end
minetest.chat_send_player(to, name.."'s awards:")
for _, str in pairs(awards.players[name].unlocked) do
local def = awards.def[str]
if def and def.title then
if def.description then
minetest.chat_send_player(to, def.title..": "..def.description)
else
minetest.chat_send_player(to, def.title)
end
else
minetest.chat_send_player(to, str)
end
end
else
if sid == nil or sid < 1 then
sid = 1
@ -334,6 +346,13 @@ function awards.showto(name, to, sid, text)
if sid then
local item = listofawards[sid+0]
local def = awards.def[item.name]
if def and def.secret and not item.got then
formspec = formspec .. "label[1,2.75;Secret Award]"..
"image[1,0;3,3;unknown.png]"
if def and def.description then
formspec = formspec .. "label[0,3.25;Unlock this award to find out what it is]"
end
else
local title = item.name
if def and def.title then
title = def.title
@ -351,6 +370,7 @@ function awards.showto(name, to, sid, text)
formspec = formspec .. "label[0,3.25;"..def.description.."]"
end
end
end
-- Create list box
formspec = formspec .. "textlist[4.75,0;6,5;awards;"
@ -361,18 +381,21 @@ function awards.showto(name, to, sid, text)
end
first = false
local def = awards.def[award.name]
local title = award.name
if def and def.secret and not award.got then
formspec = formspec .. "#ACACACSecret Award"
else
local title = award.name
if def and def.title then
title = def.title
end
if award.got then
formspec = formspec .. minetest.formspec_escape(title)
else
formspec = formspec .. "#ACACAC".. minetest.formspec_escape(title)
end
end
end
formspec = formspec .. ";"..sid.."]"
-- Show formspec to user

@ -126,7 +126,7 @@ awards.register_achievement("award_death1",{
-- Burned to death
awards.register_achievement("award_burn",{
title = S("You're a witch!"),
description = S("Burn to death in a fire"),
description = S("Burn to death in a fire")
})
-- 1 sentence

@ -17,9 +17,10 @@ The API
* sound [optional]
* image [optional]
* trigger [optional] [table]
* type - "dig" or "place"
* type - "dig", "place", "death", "chat" or "join"
* (for dig/place type) node - the nodes name
* (for all types) target - how many to dig / place
* secret [optional] - if true, then player needs to unlock to find out what it is.
* awards.give_achievement(name,award)
* -- gives an award to a player
* awards.register_onDig(func(player,data))
@ -28,6 +29,10 @@ The API
* -- return award name or null
* awards.register_onDeath(func(player,data))
* -- return award name or null
* awards.register_onChat(func(player,data))
* -- return award name or null
* awards.register_onJoin(func(player,data))
* -- return award name or null
Player Data
@ -42,3 +47,6 @@ A list of data referenced/hashed by the player's name.
* place [table] - place counter
* modname [table]
* itemname [int]
* deaths
* chats
* joins