CL

[Resolvido] npc troca item por pokemon

Por clebao666, 13 de out. de 2015 em Resolvidos

npc
resolvido
21
5.7k
clebao666C
13 de outubro de 2015 às 19:02

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

BluesterB
13 de outubro de 2015 às 19:57

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

RefeR
13 de outubro de 2015 às 19:59

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 Outubro 13 por Danny0

BluesterB
13 de outubro de 2015 às 20:01

Foi mal, eu li depois

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

Também estou sem tempo, por isso vou fazer um com box, se ele quiser, ele pega...

RefeR
13 de outubro de 2015 às 20:02

Também estou sem tempo, por isso vou fazer um com box, se ele quiser, ele pega...

Blz '-'

BluesterB
13 de outubro de 2015 às 20:10

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 Outubro 13 por Bluester

SkyLighS
13 de outubro de 2015 às 21:16

Tópico movido para área correta verifique a seção antes de postar.


Tópico Movido
Este tópico foi movido de "OTServSuporte OTServSuporte Spriting"
para "OTServSuporte OTServSuporte Derivados".

 

 

clebao666C
13 de outubro de 2015 às 23:01

 

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 Outubro 13 por clebao666

BluesterB
13 de outubro de 2015 às 23:28

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.

clebao666C
14 de outubro de 2015 às 01:00

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++

BluesterB
14 de outubro de 2015 às 01:14

 

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 ^^
clebao666C
14 de outubro de 2015 às 01:43

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.

RefeR
14 de outubro de 2015 às 11:54

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 ?

clebao666C
14 de outubro de 2015 às 18:36
   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

 

zipter98Z
15 de outubro de 2015 às 14:41
Melhor resposta


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 Outubro 15 por zipter98