Ir para conteúdo
  • 0

[Resolvido] npc troca item por pokemon


clebao666

Pergunta

ola galera!

 

gostaria de uma ajuda na criação de um npc que troca x item por 1 pokemon exemplo:

escence zard x 50 >shiny charizard

escence toise x 50 >shiny blastoise

 

estarei colocando uns 40 pokes nesse npc .

 

agradeço dmais a ajuda dos companheiros ae do forum. vlw

 

uso base cyan by senhor

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0


local trade_pokes, options = {

["Shiny Charizard"] = {itemid = ID_do_item, count = quantidade},

["Shiny Blastoise"] = {itemid = ID_do_item, count = quantidade},

}, {}

 

for poke_name, trade_info in pairs(trade_pokes) do

table.insert(options, poke_name.." - "..trade_info.count.."x "..getItemNameById(trade_info.itemid))

end

 

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:lower(), "help") or msgcontains(msg:lower(), "trade") then

selfSay("I can trade the following pokemons for the subsequent items. Which one do you wanna buy?", cid)

doPlayerPopupFYI(cid, "*** TRADEABLE POKEMONS ***\n\n"..table.concat(options, "\n"))

talkState[talkUser] = 1

elseif talkState[talkUser] == 1 then

local poke = trade_pokes[msg]

 

if poke then

if doPlayerRemoveItem(cid, poke.itemid, poke.count) then

selfSay("It was a pleasure to make bussiness with you! Make a good use of your new "..msg..".", cid)

addPokeToPlayer(cid, msg, 0, nil, "normal")

talkState[talkUser] = 0

else

selfSay("You do not have enough itens to buy this pokemon, sorry.", cid)

end

else

selfSay("Sorry, you probably wrote this pokemon's name wrong or I don't sell it. Make sure you're typing it in case-sensitive.")

end

end

return true

end

 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

Foi mal, eu li depois


pode ser por box ? por exemplo, você dá 50x Essence Zard por uma box que dá um Charizard...

tem como sem ser por Box, mas eu tô meio ocupado...

Editado por Danny0
Link para o comentário
Compartilhar em outros sites

  • 0

Estou meio que sem tempo, então vou te passar um rápido aqui !

 

Em data/actions/scripts crie um arquivo chamado boox.lua e cole isso:

 

 

local a = {

[iDDABOX] = {pokemons = {"Shiny Charizard"}}
local happy = 1000
function onUse(cid, item, frompos, item2, topos)
local b = a[item.itemid]
if not b then return true end
local pokemon = b.pokemons[math.random(#b.pokemons)]
if not pokes[pokemon] then return true end
doPlayerSendTextMessage(cid, 27, "You opened a pokemon prize box +"..item.itemid - (11637).."!")
doPlayerSendTextMessage(cid, 27, "The prize pokemon was a "..pokemon..", congratulations!")
doSendMagicEffect(getThingPos(cid), 29)
addPokeToPlayer(cid, pokemon, 0, nil, btype) --alterado v1.9
doRemoveItem(item.uid, 1)
if useOTClient then
doCreatureExecuteTalkAction(cid, "/salvar")
end
return true
end

Em data/actions/actions.xml cole essa tag:

<action itemid="IDDABOX" event="script" value="boox.lua"/>

Data/npc: Crie um arquivo com o nome do NPC que quiser, vou usar Ruby como exemplo, e dentro do arquivo cole isso:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Ruby" script="RUBYTRADE.lua" walkinterval="350000" floorchange="0" speed="0">
<health now="100" max="100"/>
<look type="2335" head="20" body="100" legs="50" feet="0"/>
<parameters>
<parameter key="message_greet" value="Hello |PLAYERNAME|.I need {help}...you help me?"/> </parameters>
</npc>
Em data/npc/scripts crie um arquivo chamado RUBYTRADE.lua e cole isso dentro:
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)
---------
local need = {
{id = ID DAS ESSENCES, qt = 50}, --ID DAS ESSENCES ZARD, QUANTIDADE
}
local rewards = {
{id = IDDABOX, qt = 1}, --charizard BOX
}
local stoFinish = 92120 -- USE ESSA OU A STORAGE QUE QUISER
---------
if msgcontains(msg, 'help') or msgcontains(msg, 'ajuda') then
if getPlayerStorageValue(cid, stoFinish) >= 500 then
selfSay("Sorry, you already had done this quest.", cid)
talkState[talkUser] = 0
return true
end
selfSay("Olá meu amigo, sou o NPC de trocas de Essences, me dê 50 Essences e lhe darei 1 Box que virá seu Pokemon! Diga YES para trocarmos.",cid)
talkState[talkUser] = 1
return true
elseif msgcontains(msg, 'yes') or msgcontains(msg, 'sim') and talkState[talkUser] == 1 then
if getPlayerItemCount(cid, need[1].id) < need[1].qt then
selfSay("Você não me trouxe todas as Essences...", cid)
selfSay("Lembre-se, eu preciso de 50 Essences...", cid)
talkState[talkUser] = 0
return true
end
for i = 1, #need do
doPlayerRemoveItem(cid, need.id, need.qt)
end
for i = 1, #rewards do
doPlayerAddItem(cid, rewards.id, rewards.qt)
doPlayerAddExperience(cid, 0)
end
selfSay("Obrigado, tchau!", cid)
setPlayerStorageValue(cid, stoFinish, 1)
talkState[talkUser] = 0
return true
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
OBS: Não testei
Editado por Bluester
Link para o comentário
Compartilhar em outros sites

  • 0

 

Estou meio que sem tempo, então vou te passar um rápido aqui !

 

Em data/actions/scripts crie um arquivo chamado boox.lua e cole isso:

 

 

local a = {

[iDDABOX] = {pokemons = {"Shiny Charizard"}}
local happy = 1000
function onUse(cid, item, frompos, item2, topos)
local b = a[item.itemid]
if not b then return true end
local pokemon = b.pokemons[math.random(#b.pokemons)]
if not pokes[pokemon] then return true end
doPlayerSendTextMessage(cid, 27, "You opened a pokemon prize box +"..item.itemid - (11637).."!")
doPlayerSendTextMessage(cid, 27, "The prize pokemon was a "..pokemon..", congratulations!")
doSendMagicEffect(getThingPos(cid), 29)
addPokeToPlayer(cid, pokemon, 0, nil, btype) --alterado v1.9
doRemoveItem(item.uid, 1)
if useOTClient then
doCreatureExecuteTalkAction(cid, "/salvar")
end
return true
end

Em data/actions/actions.xml cole essa tag:

<action itemid="IDDABOX" event="script" value="boox.lua"/>

Data/npc: Crie um arquivo com o nome do NPC que quiser, vou usar Ruby como exemplo, e dentro do arquivo cole isso:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Ruby" script="RUBYTRADE.lua" walkinterval="350000" floorchange="0" speed="0">
<health now="100" max="100"/>
<look type="2335" head="20" body="100" legs="50" feet="0"/>
<parameters>
<parameter key="message_greet" value="Hello |PLAYERNAME|.I need {help}...you help me?"/> </parameters>
</npc>
Em data/npc/scripts crie um arquivo chamado RUBYTRADE.lua e cole isso dentro:
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)
---------
local need = {
{id = ID DAS ESSENCES, qt = 50}, --ID DAS ESSENCES ZARD, QUANTIDADE
}
local rewards = {
{id = IDDABOX, qt = 1}, --charizard BOX
}
local stoFinish = 92120 -- USE ESSA OU A STORAGE QUE QUISER
---------
if msgcontains(msg, 'help') or msgcontains(msg, 'ajuda') then
if getPlayerStorageValue(cid, stoFinish) >= 500 then
selfSay("Sorry, you already had done this quest.", cid)
talkState[talkUser] = 0
return true
end
selfSay("Olá meu amigo, sou o NPC de trocas de Essences, me dê 50 Essences e lhe darei 1 Box que virá seu Pokemon! Diga YES para trocarmos.",cid)
talkState[talkUser] = 1
return true
elseif msgcontains(msg, 'yes') or msgcontains(msg, 'sim') and talkState[talkUser] == 1 then
if getPlayerItemCount(cid, need[1].id) < need[1].qt then
selfSay("Você não me trouxe todas as Essences...", cid)
selfSay("Lembre-se, eu preciso de 50 Essences...", cid)
talkState[talkUser] = 0
return true
end
for i = 1, #need do
doPlayerRemoveItem(cid, need.id, need.qt)
end
for i = 1, #rewards do
doPlayerAddItem(cid, rewards.id, rewards.qt)
doPlayerAddExperience(cid, 0)
end
selfSay("Obrigado, tchau!", cid)
setPlayerStorageValue(cid, stoFinish, 1)
talkState[talkUser] = 0
return true
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
OBS: Não testei

 

acho que esse da certo sim vo testar aq vlw jaja posto se funciono.

so como pedi la sera varios pokes mesmo que eu crie uma box pra cada shiny que eu quero trocar tem como esse npc trocar todas as box.

 

tipo 50 ecence zard > 1 box zard

50 escence toise > 1 box toise

 

tendeu o mesmo npc trocar varios itens por varias box.

 

agradeço dmais a ajuda de vcs ae vlw galera.

Foi mal, eu li depois

tem como sem ser por Box, mas eu tô meio ocupado...

 

ola amigo.

 

pode ser por box sim amis como falei ae teria que o mesmo npc tipo pedir

 

me de 50 escence zard e te do > uma box shiny charizard

se me der 50 escence toise te do > uma box toise e assim por diante.

 

tera uns 30 shiny ou mais pra ele fazer.

 

desde ja agradeço a qquer ajuda vlw.

Editado por clebao666
Link para o comentário
Compartilhar em outros sites

  • 0

acho que esse da certo sim vo testar aq vlw jaja posto se funciono.

so como pedi la sera varios pokes mesmo que eu crie uma box pra cada shiny que eu quero trocar tem como esse npc trocar todas as box.

 

tipo 50 ecence zard > 1 box zard

50 escence toise > 1 box toise

 

tendeu o mesmo npc trocar varios itens por varias box.

 

agradeço dmais a ajuda de vcs ae vlw galera.

 

 

ola amigo.

 

pode ser por box sim amis como falei ae teria que o mesmo npc tipo pedir

 

me de 50 escence zard e te do > uma box shiny charizard

se me der 50 escence toise te do > uma box toise e assim por diante.

 

tera uns 30 shiny ou mais pra ele fazer.

 

desde ja agradeço a qquer ajuda vlw.

Testa o script que postei acima.

Faltou o REP né ? rs, mas fico feliz em ter ajudado de alguma forma.

Link para o comentário
Compartilhar em outros sites

  • 0

Testa o script que postei acima.

 

testado e aprovado. script sem erro e funfando legau apenas teria que ser refeita pra o mesmo npc poder trocar mais itens diferentes por pokes diferentes.

 

se puder me ajudar agradeço muito vlww ja dei rep++

Link para o comentário
Compartilhar em outros sites

  • 0

 

testado e aprovado. script sem erro e funfando legau apenas teria que ser refeita pra o mesmo npc poder trocar mais itens diferentes por pokes diferentes.

 

se puder me ajudar agradeço muito vlww ja dei rep++

Só adicionar mais boxes no script boox.lua, e trocar os itens de trocas e as falas do NPC ^^
Link para o comentário
Compartilhar em outros sites

  • 0

Só adicionar mais boxes no script boox.lua, e trocar os itens de trocas e as falas do NPC ^^

 

tipo man se nao entendeu . as box e de boas criar mais umas 200 o foda e enfia um npc pra cada troca de itens por box tendeu. eu queria um npc que o cara fala hi help yes se ele tive o item escence zard ele ganha uma box de shiny zard , ja se ele tiver por exenplo um escence toise ae o proprio npc da pra ele uma box de shiny toise. tendeu senao vo ter que criar um npc e uma box pra cada shiny que eu va por pra trocar e pretendo por todos do server. se souber me ajudar agradeço dmaissss vlw ae man.

Link para o comentário
Compartilhar em outros sites

  • 0

tipo man se nao entendeu . as box e de boas criar mais umas 200 o foda e enfia um npc pra cada troca de itens por box tendeu. eu queria um npc que o cara fala hi help yes se ele tive o item escence zard ele ganha uma box de shiny zard , ja se ele tiver por exenplo um escence toise ae o proprio npc da pra ele uma box de shiny toise. tendeu senao vo ter que criar um npc e uma box pra cada shiny que eu va por pra trocar e pretendo por todos do server. se souber me ajudar agradeço dmaissss vlw ae man.

 

   local need = {
      {id = ID DAS ESSENCES, qt = 50}, --ID DAS ESSENCES ZARD, QUANTIDADE
   }
   local rewards = {
      {id = IDDABOX, qt = 1}, --charizard BOX
   }
   local need = {
      {id = ID DAS ESSENCES, qt = 50}, --ID DAS ESSENCES ZARD, QUANTIDADE
      {id = ID DAS ESSENCES2, qt = 50}, --ID DAS ESSENCES Blastoise, QUANTIDADE
   }
   local rewards = {
      {id = IDDABOX, qt = 1}, --charizard BOX
      {id = IDDABOX2, qt = 1}, --blastoise BOX
   }


já tentou ?

Link para o comentário
Compartilhar em outros sites

  • 0
   local need = {
      {id = ID DAS ESSENCES, qt = 50}, --ID DAS ESSENCES ZARD, QUANTIDADE
   }
   local rewards = {
      {id = IDDABOX, qt = 1}, --charizard BOX
   }
   local need = {
      {id = ID DAS ESSENCES, qt = 50}, --ID DAS ESSENCES ZARD, QUANTIDADE
      {id = ID DAS ESSENCES2, qt = 50}, --ID DAS ESSENCES Blastoise, QUANTIDADE
   }
   local rewards = {
      {id = IDDABOX, qt = 1}, --charizard BOX
      {id = IDDABOX2, qt = 1}, --blastoise BOX
   }


já tentou ?

 

desse jeito ae se o cara tem apenas 50 de um item o npc ja da todas as box de uma ves que tao na parte de baixo

no caso testei apenas duas do zard e toise e so tiro 50 das escences e ja foi dando as 2 box

tem que mudar a script ae so nao sei como

 

Link para o comentário
Compartilhar em outros sites

  • 0
local trade_pokes, options = {
    ["Shiny Charizard"] = {itemid = ID_do_item, count = quantidade},
    ["Shiny Blastoise"] = {itemid = ID_do_item, count = quantidade},
}, {}
   
for poke_name, trade_info in pairs(trade_pokes) do
    table.insert(options, poke_name.." - "..trade_info.count.."x "..getItemNameById(trade_info.itemid))
end

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:lower(), "help") or msgcontains(msg:lower(), "trade") then
        selfSay("I can trade the following pokemons for the subsequent items. Which one do you wanna buy?", cid)
        doPlayerPopupFYI(cid, "*** TRADEABLE POKEMONS ***\n\n"..table.concat(options, "\n"))
        talkState[talkUser] = 1
    elseif talkState[talkUser] == 1 then
        local poke = trade_pokes[msg]
        
        if poke then
            if doPlayerRemoveItem(cid, poke.itemid, poke.count) then
                selfSay("It was a pleasure to make bussiness with you! Make a good use of your new "..msg..".", cid)
                addPokeToPlayer(cid, msg, 0, nil, "normal")
                talkState[talkUser] = 0
            else
                selfSay("You do not have enough itens to buy this pokemon, sorry.", cid)
            end
        else
            selfSay("Sorry, you probably wrote this pokemon's name wrong or I don't sell it. Make sure you're typing it in case-sensitive.")
        end
    end
    return true
end
                    
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

eaw zipter blz man.

 

tipo nao entendi a script sua porq onde fica pra por o id dos itens que o npc pede e onde fica o id da box que o npc vai dar em troca do item.

 

seria um npc so que trocaria itens por shiny box especificas uma pra cada shiny exemplo.

 

se me der 50 pot of fire te dou uma shiny box de charizard

se me der 50 ice clow te dou uma box de jynx

 

tendeu se essa scrript que tu posto ae estiver assim ja peço desculpas pela minha falta de exp em script.

senao ajuda eu ae man por favor vlw. s2 como sempre reputado por ajudar.

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...