Ir para conteúdo
  • Cadastre-se

Posts Recomendados

[NPC] Troca de Itens

Olá a Todos!

Introdução

Estou criando esse tópico, porque vejo que muitos tem dúvida e nada melhor para entender que um próprio exemplo, não achas?

Utilidade

Será um NPC, que trocará itens com o player, ou seja, pedirá Item1 e dará o Item2, que poderá ser configurado no script.

Código

Toddy.lua


local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)

NpcSystem.parseParameters(npcHandler)


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



-- Config --


local configs = {


	FirstItemId = 2455,

	FirstItemCount = 5,

	SecondItemId = 2321,

	SecondItemCount = 1,


	isQuest = "false",	

	questStorage = 17890,


	msgMeet = 'Você deseja trocar '..FirstItemCount .. ' '.. getItemName(FirstItemId) ..' por '.. SecondItemCount ..' '.. getItemName(SecondItemId) ..'?',

	msgQuestCompleted = "Você já fez essa quest.",

	msgQuestNotItem = "Voce não tem o item necessario.",


	}



function npcTroca(cid, message, keywords, parameters, node)


	if(not npcHandler:isFocused(cid)) then

		return false

	end


	if (configs.isQuest == "true") then

	if (getPlayerStorageValue(configs.questStorage) <= 0) then

		if (getItemCount(cid, configs.FirstItemId) == configs.FirstItemCount) then

			doRemoveItem(configs.FirstItemId, config.FirstItemCount)

			doPlayerAddItem(cid, configs.SecondItemId, configs.SecondItemCount)

		else

			return	 doPlayerSendTextMessage(cid, 27, configs.msgQuestNotItem)

		end

	else

		return doPlayerSendTextMessage(cid, 27, configs.msgQuestCompleted)

	end

   else

	if (getItemCount(cid, configs.FirstItemId) == configs.FirstItemCount) then

		doRemoveItem(configs.FirstItemId, config.FirstItemCount)

		doPlayerAddItem(cid, configs.SecondItemId, configs.SecondItemCount)

	else

		return	 doPlayerSendTextMessage(cid, 27, configs.msgQuestNotItem)

	end	

   end

end


itemTrade = keywordHandler:addKeyword({'offer'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = configs.msgMeet})

itemTrade:addChildKeyword({'yes'}, npcTroca, {})

itemTrade:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then.', reset = true})


npcHandler:addModule(FocusModule:new())

O código acima possui a acessibilidade de troca de IDs e Quantidades, para isso vá no CONFIGS e altere.

Quest?

Para colocar como uma quest so é necessário mudar de ["false"] para ["true"].

Espero que tenham entendido, qualquer dúvida posta no tópico!

Atenciosamente,

Aluccard.

Editado por Aluccard (veja o histórico de edições)

The life is hard: No projects for a while.

 

adfly.350x19.1.png

Link para o post
Compartilhar em outros sites
  • Respostas 8
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

[NPC] Troca de Itens Olá a Todos! Introdução Estou criando esse tópico, porque vejo que muitos tem dúvida e nada melhor para entender que um próprio exemplo, não achas? Utilidade Será um NPC, que trocará itens com o player, ou seja, pedirá Item1 e dará o Item2, que poderá ser configurado no script. Código Toddy.lua O código acima possui a acessibilidade de troca de IDs e Quantidades, para isso vá no CONFIGS e altere. Quest? Para c

Pô, gostei bastante. A ideia é bem legal. Seria legal uma segunda versão onde o NPC pede múltiplos itens e dá um só, por exemplo

Bem diferente o NPC, com uma otima função, parabéns. A ideia do Lpz também e muito boa, tipo ele poderia pedir uma "receita" de items para trocar por um diferente com tal elemento.

  • Administrador

Cara, bacana a função do NPC, bem útil...

Reputado!

TibiaKing Team- KingTópicos
www.tibiaking.com

Link para o post
Compartilhar em outros sites

Bem diferente o NPC, com uma otima função, parabéns.

A ideia do Lpz também e muito boa, tipo ele poderia pedir uma "receita" de items para trocar por um diferente com tal elemento.

E-mail para contato: [email protected]

Quer ter um fórum mais organizado? Cumpra as regras!

EU VOLTEI GAROTAS!

31/12/2011

Atenciosamente,

Guilherme Salviati.

Link para o post
Compartilhar em outros sites
  • 2 weeks later...

ae no meu ot mapa heroserv 8.60 na hora de coloca on ocorre o seguinte erro:

[Error - Npc interface]

data/npc/scripts/vip coins trade.lua

Description:

(luaGetThing) Thing not found

[Error - Npc interface]

data/npc/scripts/vip coins trade.lua

Description:

data/lib/050-function.lua:234: attempt to index a boolean value

[Warning - NpcScript::NpcScript] Cannot load script: data/npc/scripts/vip coins

trade.lua

Ajuda gente!

Só mais uma coisa, o script do meu Info Vip tá assim:

local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)

NpcSystem.parseParameters(npcHandler)

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

npcHandler:addModule(FocusModule:new())

Obs.: lá no bloco de notas tudo isso tá em uma linha só, e não separado.

Editado por Ot Creator (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Mathwsz
      Bom galera, estou trazendo um script de fusão que funciona assim:
      Explicação: É necessário de 7 itens, na qual você coloca em tal coordenada e aperte a alavanca, sendo assim formando um item na qual você deseja em tal lugar configurado.
      Exemplo: Você pode fazer 7 bosses na qual dropa tals itens "Parecidos" e formando um item raro de sua escolha, ou como preferir.. Vamos ao script!
       
      Em Data/Actions/Scripts crie um arquivo chamado fusaoitens.lua e adicione isto dentro:
       
       
      Agora, em Data/Actions.xml adicione o seguinte:
       
      <action uniqueid="9900" script="fusaoitens.lua" /> E no seu RemeresMapEditor , pegue sua alavanca, vai em Propriedades e adicione o UniqueID 9900 nele! 
      PRONTO! Agora configure e divirta-se! Obs: Caso lhe ajudei, da um REP+ Aí !
    • Por Gandh
      boa galera , gostaria de pedir uma ajuda, atualmente estou mechendo com poketibia e faltou algumas sprites de paredes relacionadas a poketibia no meu server, entao adicionei as sprites no OB, e Item editor, e passei o items para o RME , para ser usado no mapa, e aparece tudo correto no RME, porem quando salvo e entro ingame, no local aonde coloquei essas paredes/Portas etc, o local fica todo bugado, e me crasha de vez em qndo, poderiam me ajudar? deixarei algumas imgs..

      Itens no RME que coloquei.


      Quando salvo e entro ingame , dá isso:

      primeiro quadrado vermelho => Onde coloquei a wall (Ela ficou invisivel) e buga o mapa.
      Segundo quadrado => Consequencia de ter a wall naquele local , pq no RME tá consertadinho a ground .. (bug)
    • Por RankerS
      Hoje estarei disponibilizando um outfit criado por mim para vocês do TK .
      sakuraskin_1915.obd
    • Por Kimoszin
      Informações
      Oque é o Rent System?
      É um sistema feito para os jogadores poderem alugar alguns itens por uma quantia e por um certo tempo.
      Hmmm, legal... mas para que esse sistema seria util?
      Bom, para o jogador antes de comprar algum item vip, por exemplo. Ele poderia testar para ver seus hits.
      Ok, Mas como ele funciona?
      O sistema vai entregar para o player um item, depois do tempo configuravel ele irá remover, não importa onde esteja, ele vai remover.
      Instalação
      \mods\rent.xml
      <?xml version="1.0" encoding="UTF-8"?> <mod name="Rent System" version="1.0" author="Kimoszin" contact="tibiaking.com" enabled="yes"> <config name="rent_config"><![CDATA[ messages = { sucess = MESSAGE_INFO_DESCR, fail = MESSAGE_STATUS_WARNING, } warningStorage = 45768 items = { ["knight armor"] = {id=2476, time=1, price=3000, premium=true, cap=false}, ["demon legs"] = {id=2495, time=3, price=3000, premium=true, cap=true}, ["blue legs"] = {id=7730, time=2, price=3000, premium=true, cap=true}, ["demon shield"] = {id=2520, time=1, price=3000, premium=true, cap=true}, } function doWarningItemWasRemoved(cid) if (getCreatureStorage(cid, warningStorage) > -1) then local item = items[getItemNameById(getCreatureStorage(cid, warningStorage))] doPlayerSendTextMessage(cid, messages.sucess, "Ok, "..item.time..(item.time > 1 and " minutes" or " minute").." has passed, the rent of "..getItemNameById(item.id).." ended.") doCreatureSetStorage(cid, warningStorage, -1) end end ]]></config> <talkaction words="!rent" event="buffer"><![CDATA[ domodlib('rent_config') local item, itemuid = items[param:lower()], math.random(1000, 65535) if (param == "") then return doPlayerSendTextMessage(cid, messages.fail, "Sorry, you need to inform parameters.") end if (param == "list") then local str = "~* Rent System by Kimoszin *~\n\n" for name, iten in pairs(items) do str = str..string.sub(name, 0, 1):upper()..string.sub(name, 2):lower().." - "..iten.price.."gps \n" end str = str .."\n WWW.TIBIAKING.COM" return doPlayerPopupFYI(cid, str) end if not(item) then return doPlayerSendTextMessage(cid, messages.fail, "Sorry, but it is not possible to rent this item.") end if (item.premium and not(isPremium(cid))) then return doPlayerSendTextMessage(cid, messages.fail, "You need a premium account.") end if (item.cap and not(getPlayerFreeCap(cid) >= getItemWeightById(item.id, 1, 1))) then return doPlayerSendTextMessage(cid, messages.fail, "You don't have capacity.") end if not(doPlayerRemoveMoney(cid, item.price)) then return doPlayerSendTextMessage(cid, messages.fail, "Sorry, you do not have any money.") end doItemSetAttribute(doPlayerAddItem(cid, item.id, 1), "uid", itemuid) doPlayerSendTextMessage(cid, messages.sucess, "You rented a "..getItemNameById(item.id).." for "..item.time.. (item.time > 1 and " minutes" or " minute")..".") doCreatureSetStorage(cid, warningStorage, item.id) local player_id = getPlayerGUID(cid) addEvent(function() local player = getPlayerByGUID(player_id) if not(isPlayer(player)) then db.executeQuery("DELETE FROM `player_items` WHERE `player_items`.`player_id` = "..player_id.." AND `itemtype` = "..item.id..";") else doPlayerSendTextMessage(cid, messages.sucess, "Ok, "..item.time..(item.time > 1 and " minutes" or " minute").." has passed, the rent of "..getItemNameById(item.id).." ended.") doCreatureSetStorage(cid, warningStorage, -1) doRemoveItem(itemuid, 1) end end, item.time * 60 * 1000) ]]></talkaction> <creatureevent name="rentLogin" type="login" event="buffer"><![CDATA[ domodlib('rent_config') doWarningItemWasRemoved(cid) ]]></creatureevent> </mod>  
      Explicações
      ♣ Comandos:
      !rent itemname: vai alugar o item !rent list: vai mostrar a lista dos item que são alugaveis. ♣ Variaveis
      id: id do item que vai ser alugado time: tempo do item que vai ser alugado price: preço do item que vai ser alugado premium: vai verificar se o player é premium cap: vai verificar se o player tem capacidade para alugar o item
  • Estatísticas dos Fóruns

    96840
    Tópicos
    519578
    Posts



×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo