Postado Março 23, 2016 9 anos Opa Galerinha do TK gostaria de um auxilio em 2 casos aqui um é o NPC Mission que eu implantei no servidor, e o outro é um npc que te da algumas missões para fazer e quando termina-las ele te promove para a classe configurada no script. bom vamos la - o npc de promotion funciona assim resumidamente vc paga para ele (configuravel o valor) para ele te dar algumas missões onde vc tera que matar alguns monstros e no final vc retorna e fala com ele e ele te promove para a determinada vocação. 1º - problema [spoiler*] [spoiler*] Npc = Rodrick.Xml <?xml version="1.0" encoding="UTF-8"?> <npc name="Rodrick" script="swordmanpromotion.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/> <parameters> <parameter key="message_greet" value="Olá |PLAYERNAME|, para você ser promoivido precisa passar por uma {mission}, para de uma olhada no que fazer diga {lista} ."/> </parameters> </npc> [/spoiler*] swordmanpromotion.lua [spoiler*] local Config = { Monsters = { -- ["Name"] = {amount = quantidade} ["Demon"] = {amount = 30}, ["Hydra"] = {amount = 10}, }, StoragePro = 54661, -- Não mexer se não souber editar Money = 100000 -- Dinheiro } local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if not npcHandler:isFocused(cid) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid local msg = msg:lower() local release = talkState[talkUser] if msgcontains(msg, "mission") then if getPlayerStorageValue(cid, Config.StoragePro) < 1 then selfSay("A missão para promovido custa " .. Config.Money .. " você aceita fazer ?", cid) release = 1 elseif getPlayerStorageValue(cid, Config.StoragePro) == (2 + #Config.Monsters) then selfSay("Você já cumpriu a missão peça pra ser {promovido}.", cid) release = 2 elseif getPlayerStorageValue(cid, Config.StoragePro) == (3 + #Config.Monsters) then selfSay("Voce já terminou as missões, pode ir em embora!", cid) release = 0 end elseif msgcontains(msg, "yes") and release == 1 then if doPlayerRemoveMoney(cid, Config.Money) then local text = "" for monsters, v in pairs(Config.Monsters) do txt = txt .. ", " txt = txt .. v.amount .. " {" .. monsters .. "}" end npcHandler:say("A missão é matar esses monstros para mim" .. text .. ".", cid) for i, _ in pairs(Config.Monsters) do setPlayerStorageValue(cid, i, 0) end setPlayerStorageValue(cid, Config.StoragePro, 1) release = 0 else selfSay("Você não tem money suficiente!", cid) release = 0 end elseif msgcontains(msg, "no") and release == 2 then selfSay("Até logo!", cid) release = 0 end if msgcontains(msg, "lista") and getPlayerStorageValue(cid, Config.StoragePro) < (#Config.Monster + 3) then local text, n = "", 0 for monsters, v in pairs(Config.Monsters) do local sto = getPlayerStorageValue(cid, monsters) if sto < v.amount then n = n + 1 text = text .. ", " text = text .. (tostring(sto) < tostring(1) and v.amount or (tostring(v.amount) - tostring(sto))) .. " {" .. monsters .. "}" end end text = text:sub(3) if n > 1 then selfSay("Para terminar sua missão você ainda tem que matar esses monstros : " .. text, cid) release = 0 elseif n == 1 then selfSay("Você só tem mais um monstro à matar : " .. text, cid) release = 0 else selfSay("Você já terminou de matar os monstro que lhe pedi, agora sim tu é digno de ser {promovido}.", cid) release = 2 end elseif msgcontains(msg, "promovido") and release == 2 then selfSay("Aqui está sua promoção jovem soldado!!", cid) setPlayerVocation(cid, (getPlayerVocation(cid) + 4)) setPlayerStorageValue(cid, Config.StoragePro, (#Config.Monsters + 3)) -- Para deixar em utilizavel a storage para outras coisas for monsters, _ in pairs(Config.Monsters) do setPlayerStorageValue(cid, monsters, -1) end release = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) [/spoiler*] Creaturescripts/scripts/swordmantasks.lua [spoiler*] local Config = { Monsters = { -- ["Name"] = {amount = quantidade} ["Demon"] = {amount = 30}, ["Hydra"] = {amount = 10}, }, StoragePro = 54661, -- Não mexer se não souber editar Money = 100000 -- Dinheiro } function onKill(cid, target) if not isMonster(target) and getPlayerStorageValue(cid, Config.StoragePro) >= (2 + #Config.StoragePro) then return false end local monster = Config.Monsters[getCreatureName(target):lower] if monster then local sto = getPlayerStorageValue(cid, monster) if sto < (monster.amount - 1) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Task message: [" .. (sto + 1) .. "/" .. monster.amount .. "] of " .. getCreatureName(target) .. ".") setPlayerStorageValue(cid, monster, (sto + 1)) elseif sto == (monster.amount - 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Congratulations!! you have killed [" .. (sto + 1) .. "/" .. monster.amount .. "] of " .. getCreatureName(target) .. "s ands and completed the task.") setPlayerStorageValue(cid, monster, (sto + 1)) setPlayerStorageValue(cid, Config.StoragePro, (getPlayerStorageValue(cid, Config.StoragePro) + 1)) end end return true end function onLogin(cid) registerCreatureEvent('taskNpc') return true end [/spoiler*] Creaturescripts.xml TAGS [spoiler*] <event type="login" name="verf_taskNpc" event="script" value="swordmantasks.lua"/> <event type="kill" name="taskNpc" event="script" value="swordmantasks.lua"/> [/spoiler*] e o erro que aparece na distro é esse aqui [23/03/2016 17:38:16] [Error - LuaScriptInterface::loadFile] data/creaturescripts/scripts/swordmantasks.lua:14: function arguments expected near ']' [23/03/2016 17:38:16] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/swordmantasks.lua) [23/03/2016 17:38:16] data/creaturescripts/scripts/swordmantasks.lua:14: function arguments expected near ']' [23/03/2016 17:38:16] [Error - LuaScriptInterface::loadFile] data/creaturescripts/scripts/swordmantasks.lua:14: function arguments expected near ']' [23/03/2016 17:38:16] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/swordmantasks.lua) [23/03/2016 17:38:16] data/creaturescripts/scripts/swordmantasks.lua:14: function arguments expected near ']' [/spoiler*] 2 - problema o NPC Mission funciona assim vc fala com ele hi, quest e ele vai pedindo para vc trazer itens para ele conforme o script ele deveria te entregar um premio no final pelas missoes feitas mas não acontece e pra cada pedido novo de missão ocorre um erro na distro dados do npc. Mission.XML [spoiler*] <?xml version="1.0" encoding="UTF-8"?> <npc name="Mission" script="mission.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="325" head="29" body="4" legs="20" feet="96" addons="3" corpse="2212"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|. What brings you to me? You want start the {quest}?"/> </parameters> </npc> [/spoiler*] Mission.lua [spoiler*] local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if(msgcontains(msg, 'quest')) then selfSay('To start this quest tell {mission}', cid) --This is just an example, In this script added 4 mission for you end if(msgcontains(msg, 'mission')) then if(getPlayerStorageValue(cid,700) < 1) then selfSay('Your first mission will be to get 100 {tarantula egg}.', cid) talkState[talkUser] = 1 elseif (getPlayerStorageValue(cid,701) < 1) then selfSay('Your next mission will be to get 150 {strands of medusa hair}.', cid) talkState[talkUser] = 1 elseif (getPlayerStorageValue(cid,702) < 0) then selfSay('Your next mission will be to get 300 {red dragon scales}.', cid) talkState[talkUser] = 1 elseif (getPlayerStorageValue(cid,703) < 0) then selfSay('Your next mission will be to get 400 {green dragon scales}.', cid) talkState[talkUser] = 1 elseif (getPlayerStorageValue(cid,703) == 1) then --zmieniac w zaleznosci od ostatniego storage!! selfSay('You have done all missions.', cid) talkState[talkUser] = 1 end --------------------------------------- elseif(msgcontains(msg, 'tarantula egg') and talkState[talkUser] == 1 and (getPlayerStorageValue(cid,700) < 1)) then if(doPlayerRemoveItem(cid, 11198, 100) == TRUE) then setPlayerStorageValue(cid,700,1) doPlayerAddPercentLevel(cid, 5) selfSay('Thank you.', cid) talkState[talkUser] = 0 else selfSay('To end mission you need have 100 {tarantula egg}.', cid) end --------------------------------------- elseif(msgcontains(msg, 'strands of medusa hair') and talkState[talkUser] == 1 and (getPlayerStorageValue(cid,701) < 1) and (getPlayerStorageValue(cid,700) == 1)) then if(doPlayerRemoveItem(cid, 11226, 150) == TRUE) then setPlayerStorageValue(cid,701,1) doPlayerAddPercentLevel(cid, 7) selfSay('Thank you.', cid) talkState[talkUser] = 0 else selfSay('To end mission you need have 150 {strands of medusa hair}.', cid) end --------------------------------------- elseif(msgcontains(msg, 'red dragon scales') and talkState[talkUser] == 1 and (getPlayerStorageValue(cid,702) < 1) and (getPlayerStorageValue(cid,701) == 1)) then if(doPlayerRemoveItem(cid, 5882, 300) == TRUE) then setPlayerStorageValue(cid,702,1) doPlayerAddPercentLevel(cid, 6) selfSay('Thank you.', cid) talkState[talkUser] = 0 else selfSay('To end mission you need have 300 {red dragon scales}.', cid) end --------------------------------------- elseif(msgcontains(msg, 'green dragon scales') and talkState[talkUser] == 1 and (getPlayerStorageValue(cid,703) < 1) and (getPlayerStorageValue(cid,702) == 1)) then if(doPlayerRemoveItem(cid, 5920, 400) == TRUE) then setPlayerStorageValue(cid,703,1) doPlayerAddPercentLevel(cid, 5) selfSay('Thank you.', cid) talkState[talkUser] = 0 else selfSay('To end mission you need have 400 {green dragon scales}.', cid) end ------------------------------------------ end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) [/spoiler*] erro que aparece na distro [23/03/2016 17:57:23] [Error - Npc interface] [23/03/2016 17:57:23] data/npc/scripts/mission.lua:onCreatureSay [23/03/2016 17:57:23] Description: [23/03/2016 17:57:23] data/npc/scripts/mission.lua:83: attempt to call global 'doPlayerAddPercentLevel' (a nil value) [23/03/2016 17:57:23] stack traceback: [23/03/2016 17:57:23] data/npc/scripts/mission.lua:83: in function 'callback' [23/03/2016 17:57:23] data/npc/lib/npcsystem/npchandler.lua:390: in function 'onCreatureSay' [23/03/2016 17:57:23] data/npc/scripts/mission.lua:13: in function <data/npc/scripts/mission.lua:13> [23/03/2016 18:11:38] > Broadcasted message: "Qualquer duvida, sujestao ou critica, mantenha o Help Chat aberto e contate um responsavel. Trabalhando por um OT melhor!". [23/03/2016 18:20:38] [Error - Npc interface] [23/03/2016 18:20:38] data/npc/scripts/mission.lua:onCreatureSay [23/03/2016 18:20:38] Description: [23/03/2016 18:20:38] data/npc/scripts/mission.lua:103: attempt to call global 'doPlayerAddPercentLevel' (a nil value) [23/03/2016 18:20:38] stack traceback: [23/03/2016 18:20:38] data/npc/scripts/mission.lua:103: in function 'callback' [23/03/2016 18:20:38] data/npc/lib/npcsystem/npchandler.lua:390: in function 'onCreatureSay' [23/03/2016 18:20:38] data/npc/scripts/mission.lua:13: in function <data/npc/scripts/mission.lua:13> [23/03/2016 18:25:01] [Error - Npc interface] [23/03/2016 18:25:01] data/npc/scripts/mission.lua:onCreatureSay [23/03/2016 18:25:01] Description: [23/03/2016 18:25:01] data/npc/scripts/mission.lua:123: attempt to call global 'doPlayerAddPercentLevel' (a nil value) [23/03/2016 18:25:01] stack traceback: [23/03/2016 18:25:01] data/npc/scripts/mission.lua:123: in function 'callback' [23/03/2016 18:25:01] data/npc/lib/npcsystem/npchandler.lua:390: in function 'onCreatureSay' [23/03/2016 18:25:01] data/npc/scripts/mission.lua:13: in function <data/npc/scripts/mission.lua:13> [23/03/2016 18:25:14] [Error - Npc interface] [23/03/2016 18:25:14] data/npc/scripts/mission.lua:onCreatureSay [23/03/2016 18:25:14] Description: [23/03/2016 18:25:14] data/npc/scripts/mission.lua:143: attempt to call global 'doPlayerAddPercentLevel' (a nil value) [23/03/2016 18:25:14] stack traceback: [23/03/2016 18:25:14] data/npc/scripts/mission.lua:143: in function 'callback' [23/03/2016 18:25:14] data/npc/lib/npcsystem/npchandler.lua:390: in function 'onCreatureSay' [23/03/2016 18:25:14] data/npc/scripts/mission.lua:13: in function <data/npc/scripts/mission.lua:13> bom galera quem puder e ajudar além do rep ficarei eternamente agradecido vlw a todos Editado Março 23, 2016 9 anos por rheynkhen (veja o histórico de edições)
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.