KO
dúvida

Erro em Npc

Por koete, 12 de mar. de 2013 em Scripts

script
8
894
koeteK
12 de março de 2013 às 19:49

pow eu to tentando fazer um npc que pega 10 items seu e te da 1 outro

 

ele começa falando quando vc diz Hi assim:

 

<parameter key="message_greet" value="Ola, deseja que eu purifique qual tipo de pedra? {Turquoise}, {Diamond}, {Onix}, {Emerald}, {Ruby}, {Jasmine}, {Gold} ou {Chairo}?" /> 

 

 

mas... eu não consigo fazer com que o player escolha um desses sempre da error no end... ou if...

alguem pode me ajudar? o script ta aqui

 

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

msg = string.lower(msg)

---------

 

 

 

if (msgcontains(msg, 'chairo') or msgcontains(msg, 'trocar chairo')) then

selfSay("Okay, lhe darei 1 [Chairo Fusu Ma] a cada 10 [Chairo] que você me der. Deseja que eu purifique 10 Chairos para voce?", cid)

talkState[talkUser] = 1

return true

end

 

if (msgcontains(msg, 'turquoise') or msgcontains(msg, 'trocar turquoise')) then

selfSay("Okay, lhe darei 1 [Turquoise Fusu Ma] a cada 10 [Turquoise] que você me der. Deseja que eu purifique 10 Turquoise para voce?", cid)

talkState[talkUser] = 3

return true

end

 

if (msgcontains(msg, 'onix') or msgcontains(msg, 'trocar onix')) then

selfSay("Okay, lhe darei 1 [Onix Fusu Ma] a cada 10 [Onix] que você me der. Deseja que eu purifique 10 Onix para voce?", cid)

talkState[talkUser] = 5

return true

end

 

if (msgcontains(msg, 'diamond') or msgcontains(msg, 'trocar diamond')) then

selfSay("Okay, lhe darei 1 [Diamond Fusu Ma] a cada 10 [Diamond] que você me der. Deseja que eu purifique 10 Diamond para voce?", cid)

talkState[talkUser] = 7

return true

end

 

if (msgcontains(msg, 'emerald') or msgcontains(msg, 'trocar emerald')) then

selfSay("Okay, lhe darei 1 [Emerald Fusu Ma] a cada 10 [Emerald] que você me der. Deseja que eu purifique 10 Emerald para voce?", cid)

talkState[talkUser] = 9

return true

end

 

if (msgcontains(msg, 'ruby') or msgcontains(msg, 'trocar ruby')) then

selfSay("Okay, lhe darei 1 [Ruby Fusu Ma] a cada 10 [Ruby] que você me der. Deseja que eu purifique 10 Ruby para voce?", cid)

talkState[talkUser] = 11

return true

end

 

if (msgcontains(msg, 'jasmine') or msgcontains(msg, 'trocar jasmine')) then

selfSay("Okay, lhe darei 1 [Jasmine Fusu Ma] a cada 10 [Jasmine] que você me der. Deseja que eu purifique 10 Jasmine para voce?", cid)

talkState[talkUser] = 13

return true

end

 

if (msgcontains(msg, 'gold') or msgcontains(msg, 'trocar gold')) then

selfSay("Okay, lhe darei 1 [Gold Fusu Ma] a cada 10 [Gold] que você me der. Deseja que eu purifique 10 Gold para voce?", cid)

talkState[talkUser] = 15

return true

end

 

 

 

 

 

 

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then

selfSay("Ok... se voce ja tiver os 10 Chairos diga {terminar}.", cid)

talkState[talkUser] = 2

end

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 3 then

selfSay("Ok... se voce ja tiver os 10 Turquoise diga {terminar}.", cid)

talkState[talkUser] = 4

end

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 5 then

selfSay("Ok... se voce ja tiver os 10 Onix diga {terminar}.", cid)

talkState[talkUser] = 6

end

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 7 then

selfSay("Ok... se voce ja tiver os 10 Diamond diga {terminar}.", cid)

talkState[talkUser] = 8

end

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 9 then

selfSay("Ok... se voce ja tiver os 10 Emerald diga {terminar}.", cid)

talkState[talkUser] = 10

end

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 11 then

selfSay("Ok... se voce ja tiver os 10 Ruby diga {terminar}.", cid)

talkState[talkUser] = 12

end

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 13 then

selfSay("Ok... se voce ja tiver os 10 Jasmine diga {terminar}.", cid)

talkState[talkUser] = 14

end

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 15 then

selfSay("Ok... se voce ja tiver os 10 Gold diga {terminar}.", cid)

talkState[talkUser] = 16

end

 

 

 

 

 

 

 

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 3071) < 10 and talkState[talkUser] == 2 then

selfSay("Desculpe, mas você não tem Chairo suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

return true

end

end

selfSay("muito bom, Aqui esta Sua Chairo Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3037, 1)

doPlayerRemoveItem(cid, 3071, 10)

doSendMagicEffect(getThingPos(cid), 27)

return true

 

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 2998) < 10 and talkState[talkUser] == 4 then

selfSay("Desculpe, mas você não tem Turquoise suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

return true

end

end

selfSay("muito bom, Aqui esta Sua Turquoise Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3043, 1)

doPlayerRemoveItem(cid, 2998, 10)

doSendMagicEffect(getThingPos(cid), 27)

return true

 

 

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 2999) < 10 and talkState[talkUser] == 6 then

selfSay("Desculpe, mas você não tem Onix suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

return true

end

end

selfSay("muito bom, Aqui esta Sua Onix Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3042, 1)

doPlayerRemoveItem(cid, 2999, 10)

doSendMagicEffect(getThingPos(cid), 27)

return true

 

 

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 3000) < 10 and talkState[talkUser] == 8 then

selfSay("Desculpe, mas você não tem Diamond suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

return true

end

end

selfSay("muito bom, Aqui esta Sua Diamond Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3036, 1)

doPlayerRemoveItem(cid, 3000, 10)

doSendMagicEffect(getThingPos(cid), 27)

return true

 

 

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 3001) < 10 and talkState[talkUser] == 10 then

selfSay("Desculpe, mas você não tem Emerald suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

return true

end

end

selfSay("muito bom, Aqui esta Sua Emerald Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3038, 1)

doPlayerRemoveItem(cid, 3001, 10)

doSendMagicEffect(getThingPos(cid), 27)

return true

 

 

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 3002) < 10 and talkState[talkUser] == 12 then

selfSay("Desculpe, mas você não tem Ruby suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

return true

end

end

selfSay("muito bom, Aqui esta Sua Ruby Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3041, 1)

doPlayerRemoveItem(cid, 3002, 10)

doSendMagicEffect(getThingPos(cid), 27)

return true

 

 

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 3003) < 10 and talkState[talkUser] == 14 then

 

selfSay("Desculpe, mas você não tem Jasmine suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

return true

end

end

selfSay("muito bom, Aqui esta Sua Jasmine Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3040, 1)

doPlayerRemoveItem(cid, 3003, 10)

doSendMagicEffect(getThingPos(cid), 27)

return true

 

 

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 3004) < 10 and talkState[talkUser] == 16 then

selfSay("Desculpe, mas você não tem Gold suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

return true

end

end

selfSay("muito bom, Aqui esta Sua Gold Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3039, 1)

doPlayerRemoveItem(cid, 3004, 10)

doSendMagicEffect(getThingPos(cid), 27)

return true

end

 

 

 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())[/php}

RoksasR
12 de março de 2013 às 20:14

Tenta ai:

 

 

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

msg = string.lower(msg)

---------

 

 

 

if (msgcontains(msg, 'chairo') or msgcontains(msg, 'trocar chairo')) then

selfSay("Okay, lhe darei 1 [Chairo Fusu Ma] a cada 10 [Chairo] que você me der. Deseja que eu purifique 10 Chairos para voce?", cid)

talkState[talkUser] = 1

return true

end

 

if (msgcontains(msg, 'turquoise') or msgcontains(msg, 'trocar turquoise')) then

selfSay("Okay, lhe darei 1 [Turquoise Fusu Ma] a cada 10 [Turquoise] que você me der. Deseja que eu purifique 10 Turquoise para voce?", cid)

talkState[talkUser] = 3

return true

end

 

if (msgcontains(msg, 'onix') or msgcontains(msg, 'trocar onix')) then

selfSay("Okay, lhe darei 1 [Onix Fusu Ma] a cada 10 [Onix] que você me der. Deseja que eu purifique 10 Onix para voce?", cid)

talkState[talkUser] = 5

return true

end

 

if (msgcontains(msg, 'diamond') or msgcontains(msg, 'trocar diamond')) then

selfSay("Okay, lhe darei 1 [Diamond Fusu Ma] a cada 10 [Diamond] que você me der. Deseja que eu purifique 10 Diamond para voce?", cid)

talkState[talkUser] = 7

return true

end

 

if (msgcontains(msg, 'emerald') or msgcontains(msg, 'trocar emerald')) then

selfSay("Okay, lhe darei 1 [Emerald Fusu Ma] a cada 10 [Emerald] que você me der. Deseja que eu purifique 10 Emerald para voce?", cid)

talkState[talkUser] = 9

return true

end

 

if (msgcontains(msg, 'ruby') or msgcontains(msg, 'trocar ruby')) then

selfSay("Okay, lhe darei 1 [Ruby Fusu Ma] a cada 10 [Ruby] que você me der. Deseja que eu purifique 10 Ruby para voce?", cid)

talkState[talkUser] = 11

return true

end

 

if (msgcontains(msg, 'jasmine') or msgcontains(msg, 'trocar jasmine')) then

selfSay("Okay, lhe darei 1 [Jasmine Fusu Ma] a cada 10 [Jasmine] que você me der. Deseja que eu purifique 10 Jasmine para voce?", cid)

talkState[talkUser] = 13

return true

end

 

if (msgcontains(msg, 'gold') or msgcontains(msg, 'trocar gold')) then

selfSay("Okay, lhe darei 1 [Gold Fusu Ma] a cada 10 [Gold] que você me der. Deseja que eu purifique 10 Gold para voce?", cid)

talkState[talkUser] = 15

return true

end

 

 

 

 

 

 

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then

selfSay("Ok... se voce ja tiver os 10 Chairos diga {terminar}.", cid)

talkState[talkUser] = 2

end

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 3 then

selfSay("Ok... se voce ja tiver os 10 Turquoise diga {terminar}.", cid)

talkState[talkUser] = 4

end

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 5 then

selfSay("Ok... se voce ja tiver os 10 Onix diga {terminar}.", cid)

talkState[talkUser] = 6

end

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 7 then

selfSay("Ok... se voce ja tiver os 10 Diamond diga {terminar}.", cid)

talkState[talkUser] = 8

end

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 9 then

selfSay("Ok... se voce ja tiver os 10 Emerald diga {terminar}.", cid)

talkState[talkUser] = 10

end

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 11 then

selfSay("Ok... se voce ja tiver os 10 Ruby diga {terminar}.", cid)

talkState[talkUser] = 12

end

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 13 then

selfSay("Ok... se voce ja tiver os 10 Jasmine diga {terminar}.", cid)

talkState[talkUser] = 14

end

 

 

if (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 15 then

selfSay("Ok... se voce ja tiver os 10 Gold diga {terminar}.", cid)

talkState[talkUser] = 16

end

 

 

 

 

 

 

 

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 3071) < 10 and talkState[talkUser] == 2 then

selfSay("Desculpe, mas você não tem Chairo suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

if doPlayerRemoveItem(cid, 3071, 10) then

selfSay("muito bom, Aqui esta Sua Chairo Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3037, 1)

doSendMagicEffect(getThingPos(cid), 27)

end

return true

end

 

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 2998) < 10 and talkState[talkUser] == 4 then

selfSay("Desculpe, mas você não tem Turquoise suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

selfSay("muito bom, Aqui esta Sua Turquoise Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3043, 1)

doPlayerRemoveItem(cid, 2998, 10)

doSendMagicEffect(getThingPos(cid), 27)

end

return true

end

 

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 2999) < 10 and talkState[talkUser] == 6 then

selfSay("Desculpe, mas você não tem Onix suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

if doPlayerRemoveItem(cid, 2999, 10) then

selfSay("muito bom, Aqui esta Sua Onix Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3042, 1)

doSendMagicEffect(getThingPos(cid), 27)

end

return true

end

 

 

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 3000) < 10 and talkState[talkUser] == 8 then

selfSay("Desculpe, mas você não tem Diamond suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

if doPlayerRemoveItem(cid, 3000, 10) then

selfSay("muito bom, Aqui esta Sua Diamond Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3036, 1)

doSendMagicEffect(getThingPos(cid), 27)

end

return true

end

 

 

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 3001) < 10 and talkState[talkUser] == 10 then

selfSay("Desculpe, mas você não tem Emerald suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

if doPlayerRemoveItem(cid, 3001, 10) then

selfSay("muito bom, Aqui esta Sua Emerald Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3038, 1)

doSendMagicEffect(getThingPos(cid), 27)

return true

end

 

 

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 3002) < 10 and talkState[talkUser] == 12 then

selfSay("Desculpe, mas você não tem Ruby suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

if doPlayerRemoveItem(cid, 3002, 10) then

selfSay("muito bom, Aqui esta Sua Ruby Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3041, 1)

doSendMagicEffect(getThingPos(cid), 27)

return true

end

 

 

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 3003) < 10 and talkState[talkUser] == 14 then

 

selfSay("Desculpe, mas você não tem Jasmine suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

if doPlayerRemoveItem(cid, 3003, 10) then

selfSay("muito bom, Aqui esta Sua Jasmine Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3040, 1)

doSendMagicEffect(getThingPos(cid), 27)

end

return true

end

 

if msgcontains(msg, 'terminar') and getPlayerItemCount(cid, 3004) < 10 and talkState[talkUser] == 16 then

selfSay("Desculpe, mas você não tem Gold suficiente, volte quando tiver!", cid)

talkState[talkUser] = 0

elseif doPlayerRemoveItem(cid, 3004, 10) then

selfSay("muito bom, Aqui esta Sua Gold Fusu Ma!", cid)

talkState[talkUser] = 0

doPlayerAddItem(cid, 3039, 1)

doSendMagicEffect(getThingPos(cid), 27)

end

return true

end

end

 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

ThiagoBjiT
12 de março de 2013 às 21:13

Aconselho você fazer igual o Roksas, usa o script em spoiler, pra não ocupar espaço no tópico. (muito espaço!)

koeteK
12 de março de 2013 às 23:04

estranho... deu um error aqui

[12/03/2013 23:02:10] data/npc/lib/npc.lua:54: attempt to index local 'message' (a nil value)
[12/03/2013 23:02:10] [Warning - NpcScript::NpcScript] Cannot load script: data/npc/scripts/npcminer.lua

 

Aconselho você fazer igual o Roksas, usa o script em spoiler, pra não ocupar espaço no tópico. (muito espaço!)

pow... percebi isso tambem valew mas como faz isso?

Editado Março 12 por koete

ThiagoBjiT
13 de março de 2013 às 15:54

Assim. Poem [ spoiler] o que você quer dentro do spoiler aqui [ /spoiler]

 

Só que na parte do [ spoiler] e [ /spoiler], é tudo junto

Assim:

entendeu?

 

koeteK
15 de março de 2013 às 02:11

 

Valew Thiago ajudou muito hehe

 

 

OBS: Ja consegui resolver o Script sozinho muito obrigado a todos

ThiagoBjiT
15 de março de 2013 às 06:50

 

Nada :)

 

 

Dúvida Sanada - Reportado.

RoksasR
15 de março de 2013 às 12:38

Tópico movido para pedidos e dúvidas resolvidos.