• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

RevScripts [TFS1.X+] Achievements talkactions script?

Jaki Maoh

Member
Joined
Sep 13, 2017
Messages
52
Reaction score
11
Hello community!

I followed this thread:
Darkhaos Achievements LIB/Talkaction
Changed some functions to try and make it work but unsurprisingly, did not manage.

So I decided to call you experts for help. ;)
Lua:
local talkaction = TalkAction("!cs")

function talkaction.onSay(player, words, param, type)
    local storage_id = tonumber(param)
    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "storage value: " .. player:getStorageValue(storage_id))
    return true
end

talkaction:separator(" ")
talkaction:register()

usage: !cs 3123

should work
Could someone make/share a working talkaction just like @Evil Puncker's that checkes, removes or adds achievements instead of storages?
I've tried my best to find a working solution for TFS 1.X, but ended up finding nothing

Thanks in advance,
Jaki
 
/addach -- add achievement to a player (/addach Darkhaos, 5 - /addach Darkhaos, Chorister)
/removeach --remove achievement to a player (/removeach Darkhaos, 5 - /removeach Darkhaos, Chorister)

Lua:
local talkaction = TalkAction("/addach")
function talkaction.onSay(player, words, param, type)
    if param == "" then
        return true
    end
    local ach
    local cid = player:getId()
    local split = param:splitTrimmed(",")
    if not split[2] then
        return player:sendCancelMessage("Invalid achievement id/name.")
    end

    local target = Player(split[1])
    if not target then
        player:sendCancelMessage("A player with that name is not online.")
        return false
    end

    ach = split[2]
    ach = type(ach) == "string" and getAchievementInfoByName(ach) or getAchievementInfo(tonumber(ach))
    if ach then
        if playerHasAchievement(target, ach.id) then
            player:sendCancelMessage("Player already has the achievement \"" .. ach.name .. "\".")
        else
            doPlayerAddAchievement(target, ach.id, (split[3] and true or false))
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You added achievement " .. ach.id .. " (" .. ach.name .. ") to " .. split[1] .. ".")
            doPlayerSendTextMessage(target, MESSAGE_INFO_DESCR, "You received the achievement: " .. ach.name)
            return true
        end
    else
        return player:sendCancelMessage("Invalid achievement.")
    end
    return true
end
talkaction:separator(" ")
talkaction:register()

local talkaction2 = TalkAction("/removeach")
function talkaction2.onSay(player, words, param, type)
    if param == "" then
        return true
    end
    local ach
    local cid = player:getId()
    local split = param:splitTrimmed(",")
    if not split[2] then
        return player:sendCancelMessage("Invalid achievement id/name.")
    end
    local target = Player(split[1])
    if not target then
        player:sendCancelMessage("A player with that name is not online.")
        return false
    end

    ach = tonumber(split[2])
    ach = type(ach) == "string" and getAchievementInfoByName(ach) or getAchievementInfo(tonumber(ach))
    if ach then
        if playerHasAchievement(target, ach.id) then
            doPlayerRemoveAchievement(target, ach.id)
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You removed achievement " .. ach.id .. " (" .. ach.name .. ") to " .. split[1] .. ".")
            doPlayerSendTextMessage(target, MESSAGE_INFO_DESCR, "You lost the achievement: " .. ach.name)
            return true
        else
            return player:sendCancelMessage("That player doest not has that achievement.")
        end
    else
        return player:sendCancelMessage("Invalid achievement.")
    end
    return true
end
talkaction2:separator(" ")
talkaction2:register()
 
Last edited by a moderator:
Lua:
Lua Script Error: [Scripts Interface]
C:\LoZ\forgottenserver\data\scripts\talkactions\achievements.lua:callback
...orgottenserver\data\scripts\talkactions\achievements.lua:20: attempt to call local 'type' (a number value)
stack traceback:
        [C]: in function 'type'
        ...orgottenserver\data\scripts\talkactions\achievements.lua:20: in function <...orgottenserver\data\scripts\talkactions\achievements.lua:2>
o_O
 
Last edited:
Lua:
ua Script Error: [Scripts Interface]
C:\LoZ\forgottenserver\data\scripts\talkactions\achievements.lua:callback
...orgottenserver\data\scripts\talkactions\achievements.lua:10: attempt to call field 'explode' (a nil value)
stack traceback:
        [C]: in function 'explode'
        ...orgottenserver\data\scripts\talkactions\achievements.lua:10: in function <...orgottenserver\data\scripts\talkactions\achievements.lua:3>
o_O
I've edited my post, try it again
 
Remove type from line #2 and #39
Lua:
Lua Script Error: [Scripts Interface]
C:\LoZ\forgottenserver\data\scripts\talkactions\achievements.lua:callback
...orgottenserver\data\scripts\talkactions\achievements.lua:21: attempt to call global 'getAchievementInfo' (a nil value)
stack traceback:
        [C]: in function 'getAchievementInfo'
        ...orgottenserver\data\scripts\talkactions\achievements.lua:21: in function <...orgottenserver\data\scripts\talkactions\achievements.lua:3>
Not yet:confused:
Maybe my database is different?
Using TFS 1.3
 
Lua:
local talkaction = TalkAction("/addach")
function talkaction.onSay(player, words, param)
    if param == "" then
        return true
    end
    local ach
    local cid = player:getId()
    local split = param:splitTrimmed(",")
    if not split[2] then
        return player:sendCancelMessage("Invalid achievement id/name.")
    end
    local target = Player(split[1])
    if not target then
        player:sendCancelMessage("A player with that name is not online.")
        return false
    end
    ach = split[2]
    ach = type(ach) == "string" and getAchievementInfoByName(ach) or getAchievementInfoById(tonumber(ach))
    if ach then
        if player:hasAchievement(target, ach.id) then
            player:sendCancelMessage("Player already has the achievement \"" .. ach.name .. "\".")
        else
            doPlayerAddAchievement(target, ach.id, (split[3] and true or false))
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You added achievement " .. ach.id .. " (" .. ach.name .. ") to " .. split[1] .. ".")
            doPlayerSendTextMessage(target, MESSAGE_INFO_DESCR, "You received the achievement: " .. ach.name)
            return true
        end
    else
        return player:sendCancelMessage("Invalid achievement.")
    end
    return true
end
talkaction:separator(" ")
talkaction:register()
local talkaction2 = TalkAction("/removeach")
function talkaction2.onSay(player, words, param)
    if param == "" then
        return true
    end
    local ach
    local cid = player:getId()
    local split = param:splitTrimmed(",")
    if not split[2] then
        return player:sendCancelMessage("Invalid achievement id/name.")
    end
    local target = Player(split[1])
    if not target then
        player:sendCancelMessage("A player with that name is not online.")
        return false
    end
    ach = tonumber(split[2])
    ach = type(ach) == "string" and getAchievementInfoByName(ach) or getAchievementInfoById(tonumber(ach))
    if ach then
        if player:hasAchievement(target, ach.id) then
            doPlayerRemoveAchievement(target, ach.id)
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You removed achievement " .. ach.id .. " (" .. ach.name .. ") to " .. split[1] .. ".")
            doPlayerSendTextMessage(target, MESSAGE_INFO_DESCR, "You lost the achievement: " .. ach.name)
            return true
        else
            return player:sendCancelMessage("That player doest not has that achievement.")
        end
    else
        return player:sendCancelMessage("Invalid achievement.")
    end
    return true
end
talkaction2:separator(" ")
talkaction2:register()
 
Last edited:
Lua:
Lua Script Error: [Scripts Interface]
C:\LoZ\forgottenserver\data\scripts\talkactions\achievements.lua:callback
...orgottenserver\data\scripts\talkactions\achievements.lua:20: attempt to call method 'HasAchievement' (a nil value)
stack traceback:
        [C]: in function 'HasAchievement'
        ...orgottenserver\data\scripts\talkactions\achievements.lua:20: in function <...orgottenserver\data\scripts\talkactions\achievements.lua:2>
@Rombadr
 
Last edited:
Back
Top