Jump to content
  • 0
potinho

Scripting Repetir Task (TFS 0.4)

Question

potinho

Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do website / etc.).

The OTX Server Version: (2.100 - 6000) - Codename: (FINAL) Versão 7.72

Qual é a sua pergunta?

Tenho um npc de task, porém ele deixa fazer as tasks somente uma vez, gostaria de permitir que os players repetissem as tasks, como fazer? Seguem Scripts

MOD

 

Spoiler

<?xml version="1.0" encoding="UTF-8"?>  

<mod name="Simple Task" version="3.0" author="Vodkart" contact="************.com" enabled="yes">  

<config name="task_func"><![CDATA[


tasktabble = {

["troll"] = {monster_race={"troll","frost troll","furious troll","island troll","swamp troll","troll champion","troll legionnaire"}, storage_start = 200201, storage = 91001,count = 100,exp = 50000,money = 3000},

["goblin"] = {monster_race={"goblin","goblin assassin","goblin leader"}, storage_start = 200202, storage = 91002,count = 200,exp = 70000,money = 3000},

["rotworm"] = {monster_race={"rotworm","carrion worm"}, storage_start = 200203, storage = 91003,count = 100,exp = 100000,money = 10000},

["cyclops"] = {monster_race={"cyclops","cyclops smith","cyclops drone"}, storage_start = 200204, storage = 91004,count = 300,exp = 200000,money = 15000},

["minotaur"] = {monster_race={"minotaur","minotaur archer","minotaur mage","minotaur guard"}, storage_start = 200209, storage = 91009,count = 350,exp = 100000,money = 5000},

["dragon"] = {monster_race={"dragon","dragon lord","frost dragon"}, storage_start = 200214, storage = 91014,count= 300, exp = 850000,money = 15000},

["giant spider"] = {monster_race={"giant spider"}, storage_start = 200215, storage = 91016,count = 500, exp = 500000, money = 15000},

["demon"] = {monster_race={"demon"}, storage_start = 200216, storage = 91017,count = 6666, reward = {{2495,1},{3960,1}}},

["hero"] = {monster_race={"hero"}, storage_start = 200217, storage = 91018,count = 600, exp = 1000000, money = 35000},

["vampire"] = {monster_race={"vampire"}, storage_start = 200218, storage = 91019,count = 500, exp = 400000, money = 30000},

["warlock"] = {monster_race={"warlock"}, storage_start = 200219, storage = 91020,count = 1000, exp = 8000000, money = 200000},

["hydra"] = {monster_race={"hydra"}, storage_start = 200220, storage = 91021,count = 700, exp = 2000000, reward = {{2195,1},{2498,1}}},

["dragon lord"] = {monster_race={"dragon lord"}, storage_start = 200221, storage = 91022,count = 1500, exp = 5000000, money = 150000},

["behemoth"] = {monster_race={"behemoth"}, storage_start = 200222, storage = 91023,count = 700, exp = 7000000, money = 80000},

["black knight"] = {monster_race={"black knight"}, storage_start = 200223, storage = 91024,count = 600, exp = 2000000, money = 80000},

["hero king"] = {monster_race={"hero king"}, storage_start = 200224, storage = 91025,count = 3000, exp = 30000000, money = 500000},

["ferumbras"] = {monster_race={"ferumbras"}, storage_start = 200225, storage = 91026,count = 200, reward = {2469,1}},

["infernus"] = {monster_race={"infernus"}, storage_start = 200226, storage = 91027,count = 100, reward = {2345,5}},

["master warlock"] = {monster_race={"master warlock"}, storage_start = 200227, storage = 91028,count = 3000, exp = 30000000, money = 500000},

}

configbosses_task = {

{race = "cave rat",Playerpos = {x = 189, y = 57, z = 7}, FromPosToPos = {{x = 186, y = 54, z = 7},{x = 193, y = 60, z = 7}},time = 5},

}


function CheckTask(cid)

for k, v in pairs(tasktabble) do

if getPlayerStorageValue(cid,v.storage_start) >= 1 then return true end

end

return false

end

function finisheAllTask(cid)

local config = {

exp = {true,100000},

money = {true,200000},

items ={false,{{2124,2},{2173,1}}},

premium ={true,5}

}

local x = true

for k, v in pairs(tasktabble) do

if tonumber(getPlayerStorageValue(cid,v.storage)) then

x = false

end

end

if x == true then

setPlayerStorageValue(cid, 521456, 0)

local b = getGlobalStorageValue(63005) if b == -1 then b = 1 end

if b < 11 then

setGlobalStorageValue(63005,b+1)

doBroadcastMessage('[Task Mission Complete] '..getCreatureName(cid)..' was the '..b..' to finish the task!.')

doPlayerAddPremiumDays(cid, config.premium[1] == true and config.premium[2] or 0)

doPlayerAddExp(cid, config.exp[1] == true and config.exp[2] or 0)

doPlayerAddMoney(cid, config.money[1] == true and config.money[2] or 0)

if config.items[1] == true then doAddItemsFromList(cid,config.items[2]) end

doItemSetAttribute(doPlayerAddItem(cid, 7369), "name", "trophy "..getCreatureName(cid).." completed all the task.")

end

end

end

function HavePlayerPosition(cid, from, to)

    return isInRange(getPlayerPosition(cid), from, to) and true or false

end

function getRankStorage(cid, value, max, RankName) -- by vodka

local str =""

str = "--[".. (RankName == nil and "RANK STORAGE" or ""..RankName.."") .."]--\n\n"

local query = db.getResult("SELECT `player_id`, `value` FROM `player_storage` WHERE `key` = "..value.." ORDER BY cast(value as INTEGER) DESC;")

if (query:getID() ~= -1) then k = 1 repeat if k > max then break end

str = str .. "\n " .. k .. ". "..getPlayerNameByGUID(query:getDataString("player_id")).." - [" .. query:getDataInt("value") .. "]"

k = k + 1 until not query:next() end return doShowTextDialog(cid, 2529, str)

end

function getItemsInContainerById(container, itemid) -- Function By Kydrai

            local items = {}

            if isContainer(container) and getContainerSize(container) > 0 then

                            for slot=0, (getContainerSize(container)-1) do

                                            local item = getContainerItem(container, slot)

                                            if isContainer(item.uid) then

                                                            local itemsbag = getItemsInContainerById(item.uid, itemid)

                                                            for i=0, #itemsbag do

                                                                            table.insert(items, itemsbag)

                                                            end

                                            else

                                                            if itemid == item.itemid then

                                                                            table.insert(items, item.uid)

                                                            end

                                            end

                            end

            end

            return items

end

function doPlayerAddItemStacking(cid, itemid, quant) -- by mkalo

    local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)

    local piles = 0

    if #item > 0 then

            for i,x in pairs(item) do

                    if getThing(x).type < 100 then

                            local it = getThing(x)

                            doTransformItem(it.uid, itemid, it.type+quant)

                            if it.type+quant > 100 then

                                    doPlayerAddItem(cid, itemid, it.type+quant-100)

                            end

                    else

                           piles = piles+1

                    end

            end

    else

            return doPlayerAddItem(cid, itemid, quant)

    end

    if piles == #item then

            doPlayerAddItem(cid, itemid, quant)

    end

end

function getItemsFromList(items) -- by vodka

local str = ''

if table.maxn(items) > 0 then

for i = 1, table.maxn(items) do

str = str .. items[2] .. ' ' .. getItemNameById(items[1])

if i ~= table.maxn(items) then str = str .. ', ' end end end

return str

end

function doAddItemsFromList(cid,items) -- by vodka

if table.maxn(items) > 0 then

for i = 1, table.maxn(items) do

local count = items[2]

while count > 0 do

if isItemStackable(items[1]) then

doPlayerAddItemStacking(cid, items[1], 1)

else

doPlayerAddItem(cid, items[1],1)

end

count = count - 1

end

end

end

end

        function pairsByKeys(t, f)

          local a = {}

          for n in pairs(t) do table.insert(a, n) end

          table.sort(a, f)

          local i = 0

          local iter = function ()

                i = i + 1

                if a == nil then return nil

                else return a, t[a]

                end

          end

          return iter

        end

]]></config>

<event type="login" name="TaskLogin" event="script"><![CDATA[

function onLogin(cid)

registerCreatureEvent(cid, "KillTask")

return true

end]]></event>    

<event type="kill" name="KillTask" event="script"><![CDATA[

domodlib('task_func')

function onKill(cid, target, lastHit)

if(isMonster(target) == true) then

local n = string.lower(getCreatureName(target))

for race, mob in pairs(tasktabble) do

if getPlayerStorageValue(cid,mob .storage_start) >= 1 then

for i = 1,#mob.monster_race do

if n == mob.monster_race then

local contagem = getPlayerStorageValue(cid, mob.storage)

if (contagem == -1) then contagem = 1 end

if not tonumber(contagem) then return true end

if contagem > mob.count then return true end

if contagem > mob.count then return true end

setPlayerStorageValue(cid, mob.storage, contagem+1)

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,""..(contagem == mob.count and "Congratulations! You finished the task of "..race.."." or "defeated. Total [" .. contagem .. "/" .. mob.count .. "] " .. race .. ".").."")

end

end

end

end

end

return true

end]]></event>

</mod>

NPC

Hidden Content

    Sign In here or Sign Up here to see this hidden content.

 

NPC/SCRIPT

Hidden Content

    Sign In here or Sign Up here to see this hidden content.

 

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0
grilo13

Não sei o que tem na lib task_func, mas acho que alterando essa linha dá pra fazer ela novamente

Hidden Content

    Sign In here or Sign Up here to see this hidden content.

Alterando o valor pra -1 ou 1

Share this post


Link to post
Share on other sites
  • 0
potinho

Quando eu entrego a task ele me da o premio, quando eu vou repetir ele diz que já estou em uma task e dá esse erro na console do servidor:

 

[21/10/2020 16:54:0] [Error - NpcScript Interface] 
[21/10/2020 16:54:0] data/npc/scripts/simple_task.lua:onCreatureSay
[21/10/2020 16:54:0] Description: 
[21/10/2020 16:54:0] data/npc/scripts/simple_task.lua:175: attempt to perform arithmetic on local 'contagem' (a string value)
[21/10/2020 16:54:0] stack traceback:
[21/10/2020 16:54:0]     data/npc/scripts/simple_task.lua:175: in function 'callback'
[21/10/2020 16:54:0]     data/npc/lib/npcsystem/npchandler.lua:363: in function 'onCreatureSay'
[21/10/2020 16:54:0]     data/npc/scripts/simple_task.lua:15: in function <data/npc/scripts/simple_task.lua:15>
 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×