• 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!

TFS 0.X Command to go to the end of task

newby

Active Member
Joined
Jun 11, 2016
Messages
183
Reaction score
43
Somebody help me to when player use the command !skipmission

Go to the end of mission, i mean, rotworms have to kill 50, if you do the command, is just like kill 50 rotworms

command !skipmission
Code:
function onSay(cid, words, param, channel)
   local storage = 0
   local count = 0
   -- Rotworm
   if getCreatureStorage(cid, 200203 ) >= 1 and getCreatureStorage(cid, 200204 ) < 1 then
       storage = 200203
       count = 50
   -- Carrion Worm
   elseif getCreatureStorage(cid, 200204 ) >= 1 and getCreatureStorage(cid, 200205 ) < 1 then
       storage = 200204
       count = 100
   end
   -- have donate coin?
   local DP = 6527
   local quantidade = 1
   if getPlayerItemCount(cid, DP) < quantidade then
       doPlayerSendTextMessage(cid,22, "You don't a Donate Point!")
       return 1
   end
   -- go to the end of task
   if(storage > 0) then
       doPlayerRemoveItem(cid, DP, quantidade)
       doSendMagicEffect(getPlayerPosition(cid), 5)
       setPlayerStorageValue(cid, storage, count)
   end
   return true
end

task system
Code:
<?xml version="1.0" encoding="UTF-8"?>  
<mod name="Simple Task" version="3.0" author="Vodkart" contact="xtibia.com" enabled="yes">  
<config name="task_func"><![CDATA[

tasktabble = {
   -- Lucca - em frente ao barco e templo
   ["rotworm"] = {monster_race={"rotworm"}, storage_start = 200203, storage = 200204,count = 50},
   ["carrion worm"] = {monster_race={"carrion worm"}, storage_start = 200204, storage = 200205,count = 100},
   ["rotworm queen"] = {monster_race={"rotworm queen"}, storage_start = 200205, storage = 200206,count = 10}   
}


configbosses_task = {
   {race = "minotaur",Playerpos = {x = 189, y = 57, z = 7}, FromPosToPos = {{x = 186, y = 54, z = 7},{x = 193, y = 60, z = 7}},time = 5},
   {race = "necromancer",Playerpos = {x = 196, y = 39, z = 7}, FromPosToPos = {{x = 195, y = 37, z = 7},{x = 198, y = 41, z = 7}}, time = 5},
   {race = "dragon",Playerpos = {x = 208, y = 59, z = 7}, FromPosToPos = {{x = 206, y = 56, z = 7},{x = 209, y = 65, 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[i])
                                                           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[i][2] .. ' ' .. getItemNameById(items[i][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[i][2]
while count > 0 do
if isItemStackable(items[i][1]) then
doPlayerAddItemStacking(cid, items[i][1], 1)
else
doPlayerAddItem(cid, items[i][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[i] == nil then return nil
               else return a[i], t[a[i]]
               end
         end
         return iter
       end
]]></config>
<event type="login" name="TaskLogin" event="script"><![CDATA[
function onLogin(cid)
registerCreatureEvent(cid, "KillTask")
return true
end]]></event>
<talkaction words="/task;!task" event="buffer"><![CDATA[
domodlib('task_func')
local param = string.lower(param)
if param == "rank" then
getRankStorage(cid, 521456, 20, "Task Rank Finalizadas") return true
end
local str = ""
str = str .. "Task Completed :\n\n"
for k, v in pairsByKeys(tasktabble) do
local contagem = getPlayerStorageValue(cid, v.storage)
if (contagem == -1) then contagem = 1 end
str = str..k.." = ".. (not tonumber(contagem) and "["..contagem.."]" or "["..((contagem)-1).."/"..v.count.."]") .."\n"
end
str = str .. ""
return doShowTextDialog(cid, 8983, str)
]]></talkaction>   
<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[i] 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>
 
Anybody have any idea how to do this? So confused to me and i really need this...
See if this works
Lua:
function onSay(cid, words, param, channel)
    -- have donate coin?
    local DP = 6527
    local quantidade = 1
    if getPlayerItemCount(cid, DP) < quantidade then
        doPlayerSendTextMessage(cid,22, "You don't a Donate Point!")
        return true
    end

    local name = param:lower()
    if name and tasktabble[name] then
        doPlayerRemoveItem(cid, DP, quantidade)
        doSendMagicEffect(getPlayerPosition(cid), 5)
        setPlayerStorageValue(cid, tasktabble[name].storage, tasktabble[name].count)
        doPlayerSendTextMessage(cid,22, 'Task '.. name .. ' complete!')
    else
        doPlayerSendTextMessage(cid,22, 'There are no '..name..' tasks.')
    end
    return true
end
 
Try this one. Add it at the end before "</mod>"

Lua:
<talkaction words="!task;/task" event="buffer"><![CDATA[
domodlib('task_func')
   if (param == ' ')
         doSendCancelMessage (cid, "Command requires param!")
   return false
end
local name = getCreatureName(param):lower()

  if tasktable[name] then
         if getPlayerStorageValue(cid, tasktable[name].storage) < tasktable[name].count then
                  setPlayerStorageValue(cid, tasktable[name].storage, tasktabble[name].count)
         else
                 doSendCancelMessage(cid, 'You have already done '..tasktable[name]..' task!')
          end
  else
       doSendCancelMessage(cid, 'Task '..param..' doesnt exist')
     end
   return true
end]]></talkaction>
 
Thank you all, but i cant use this way u guys gave, because it's just a base to my task system, and my task system works: you can only go to carrion worms, when you finish rotworms...

O i've tried this script with the base u gave:
Code:
<talkaction words="/skipmission;!skipmission" event="buffer"><![CDATA[
   domodlib('task_func')
   -- have donate coin?
   local DP = 6527
   local quantidade = 1
   if getPlayerItemCount(cid, DP) < quantidade then
       doPlayerSendTextMessage(cid,22, "You don't a Donate Point!")
       return 1
   end
   -- in which task the player is
   local name = 'empty'
   if getPlayerStorageValue(cid, tasktable['rotworm'].storage) < tasktable['rotworm'].count then
       name = 'rotworm'
   elseif getPlayerStorageValue(cid, tasktable['carrion worm'].storage) < tasktable['carrion worm'].count then
       name = 'carrion worm'
   elseif getPlayerStorageValue(cid, tasktable['rotworm queen'].storage) < tasktable['rotworm queen'].count then
       name = 'rotworm queen'
   end
   -- still have tasks to do
   if(name ~= 'empty') then
       setPlayerStorageValue(cid, tasktable[name].storage, tasktabble[name].count)
       doPlayerRemoveItem(cid, DP, quantidade)
       doSendMagicEffect(getPlayerPosition(cid), 5)
   end
   return true

]]></talkaction>

But it's not working and is showing this on console:
Code:
[20:5:15.422] [Error - TalkAction Interface]
[20:5:15.422] local cid = 268460705
[20:5:15.422] local words = "!skipmission"
[20:5:15.422] local param = ""
[20:5:15.422] local channel = 65534
[20:5:15.422]    domodlib('task_func')
[20:5:15.422]    -- have donate coin?
[20:5:15.422]    local DP = 6527
[20:5:15.422]    local quantidade = 1
[20:5:15.422]    if getPlayerItemCount(cid, DP) < quantidade then
[20:5:15.422]        doPlayerSendTextMessage(cid,22, "You don't a Donate Point!")
[20:5:15.422]        return 1
[20:5:15.422]    end
[20:5:15.422]    -- in which task the player is
[20:5:15.422]    local name = 'empty'
[20:5:15.422]    if getPlayerStorageValue(cid, tasktable['rotworm'].storage) < tasktable['rotworm'].count then
[20:5:15.422]        name = 'rotworm'
[20:5:15.422]    elseif getPlayerStorageValue(cid, tasktable['carrion worm'].storage) < tasktable['carrion worm'].count then
[20:5:15.423]        name = 'carrion worm'
[20:5:15.423]    elseif getPlayerStorageValue(cid, tasktable['rotworm queen'].storage) < tasktable['rotworm queen'].count then
[20:5:15.423]        name = 'rotworm queen'
[20:5:15.423]    end
[20:5:15.423]    -- still have tasks to do
[20:5:15.423]    if(name ~= 'empty') then
[20:5:15.423]        setPlayerStorageValue(cid, tasktable[name].storage, tasktabble[name].count)
[20:5:15.423]        doPlayerRemoveItem(cid, DP, quantidade)
[20:5:15.423]        doSendMagicEffect(getPlayerPosition(cid), 5)
[20:5:15.423]    end
[20:5:15.423]    return true


[20:5:15.423] Description:
[20:5:15.423] [string "LuaInterface::loadBuffer"]:15: attempt to index global 'tasktable' (a nil value)
 
Back
Top