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
  • 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
  • 4 years later...
  • 1 year later...

me sale el mismo error debe ser algo con la funcion.

[Error - Npc interface] 
data/npc/scripts/wosve/craff.lua
 Description: 
data/lib/050-function.lua:306: attempt to index a boolean value

 [Warning - NpcScript::NpcScript] Cannot load script: data/npc/scripts/craff.lua

 

me podrian ayudar como agrego esa nueva funcion

Link para o post
Compartilhar em outros sites

@Garou tipo assim?

 

Citar

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local npcTopic, xmsg = {}, {}
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

local craft = {
["demon helmet"] = {reward = {{2493, 1}}, items = {{id = 2160, count = 1}, {id = 2148, count = 1}}},
["magic plate armor"] = {reward = {{2472, 1}}, items = {{id = 2160, count = 10}, {id = 2044, count = 2}}},
["soft boots"] = {reward = {{6132, 1}}, items = {{id = 2160, count = 1}, {id = 2148, count = 1}}},
["knight armor"] = {reward = {{2376, 1}}, items = {{id = 2160, count = 1}, {id = 2148, count = 1}}}
}

local function checkItemsNeeded(cid, items)
local check = {}
for i, v in pairs(items) do
    if getPlayerItemCount(cid, v.id) >= v.count then
        check[#check + 1] = 1
    end
end
return #check
end

local function getItemsFromTable(items)
local str = ''
if table.maxn(items) > 0 then
for i = 1, table.maxn(items) do
str = str .. items.count .. ' ' .. getItemNameById(items.id)
if i ~= table.maxn(items) then str = str .. ', ' end end end
return str
end

local function craftingEffects(position, delay)
local text = {"Ishhh!", "Kaboom", "Tic Tac", "BUM!", "Blop Blop!", "Cronch!"}
local effects = {2, 6, 25, 31, 36,40, 54, 51, 65, 66, 67, 68}
if delay ~= 0 then
doSendAnimatedText(position, text[math.random(1, #text)], math.random(1, 255))
doSendMagicEffect(position, effects[math.random(1, #effects)])
addEvent(craftingEffects, 1000, position, delay - 1)
end
end

function creatureSayCallback(cid, type, msg)
    local talkUser, msg = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid, string.lower(msg)
    if(not npcHandler:isFocused(cid)) then
        if isInArray({"hi", "hello"}, msg) then
            npcHandler:addFocus(cid)
            npcHandler:say("Ola, "..getPlayerName(cid)..". Posso Construir Alguns {items} Para Voce, Mas Preciso De Linceças Especiais Para Faze Los.", cid)
            npcTopic[talkUser] = 1
        else
            return false
        end
    elseif msgcontains(msg, "items") and npcTopic[talkUser] == 1 then
        local text = ""
        for i, v in pairs(craft) do
            text = text .. " {"..i.."}, "
        end
        npcHandler:say("Eu Posso Contruir " .. text .. " Qual Deles Voce Deseja?", cid)
        npcTopic[talkUser] = 2
    elseif craft[msg] and npcTopic[talkUser] == 2 then
        npcHandler:say("Oh, " .. msg .. " E Uma Boa Escolha. Deixe Me Ver ... Eu Preciso " .. getItemsFromTable(craft[msg].items) .. ", Voce As Tem?" , cid)
        npcTopic[talkUser] = 3
        xmsg[talkUser] = msg
    elseif not craft[msg] and npcTopic[talkUser] == 2 then    
        npcHandler:say("Eu Nao Estou Elaborando Esse Item, Talvez Eu Possa Considerar Seu Pedido Mais Tarde.", cid)
        npcTopic[talkUser] = 0
    elseif msgcontains(msg, "yes") and npcTopic[talkUser] == 3 then
        local x = craft[xmsg[talkUser]]
        local delay = 6
        if checkItemsNeeded(cid, x.items) == #x.items then
            craftingEffects(getCreaturePosition(getNpcCid()), delay)
                for i = 1, #x.items do
                    doPlayerRemoveItem(cid, x.items.id, x.items.count)
                end
            addEvent(function()
                if isPlayer(cid) then
                    for i = 1, #x.reward do
                        doPlayerAddItem(cid, x.reward[1], x.reward[2])
                    end
                end
            end, delay*1000)
            local type = talkUser == 0 and TALKTYPE_SAY or TALKTYPE_PRIVATE_NP
            addEvent(doCreatureSay, delay*1000, getNpcCid(), "Muito Obrigado! Aqui Esta O Seu Item Como Eu Prometi.", type, cid)
            npcTopic[talkUser] = 0
        else
            npcHandler:say("Desculpe, Mas Voce Nao Tem Os Itens Que Eu Preciso.", cid)
            npcTopic[talkUser] = 0
        end
    elseif msgcontains(msg, "no") and npcTopic[talkUser] == 3 then
        npcHandler:say("Ok, maybe on the next.", cid)
        npcTopic[talkUser] = 0
    elseif msgcontains(msg, "bye") then
        npcHandler:say("Bye.", cid)
        npcHandler:releaseFocus(cid)
    else
        npcHandler:say("Estou Muito Ocupado, Nao Posso Falar Com voce Agora!", cid)
        npcTopic[talkUser] = 0
    end
    return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)    

 

 

                     Projeto    Nto Myth

 

" Eu to disposto a lutar e que se foda todo mundo que duvida que eu vou tocar o terror na porra toda! "

 

 

                                                                                                    bang.gif.bfc77cb73cf3065add6e416ceba6dc90.gif

 

 

Link para o post
Compartilhar em outros sites

@Hokograma oye amigo hablo con el y no me da el items que le pido acambio x los 2 que tengo en el bag no dice nada o explicame como funciona, este si lo pude crear con el god

 

items reward: 5898, 1 - items craff1:  5848,1 - items craff2: 5878, 1

 

los items craff1 y craff2: son los que dare para que me haga el items reward.

 

me urge algo asi.. plx

 

Error que me da cuando digo. shoton symbol, id items 5898...

 

[12/01/2018 07:36:26] [Error - Npc interface] 
[12/01/2018 07:36:26] data/npc/scripts/wosve/Raiton Master.lua:onCreatureSay
[12/01/2018 07:36:26] Description: 
[12/01/2018 07:36:26] data/lib/050-function.lua:294: attempt to index a boolean value
[12/01/2018 07:36:26] stack traceback:
[12/01/2018 07:36:26]     data/lib/050-function.lua:294: in function 'getItemNameById'
[12/01/2018 07:36:26]     data/npc/scripts/Raiton Master.lua:31: in function 'getItemsFromTable'
[12/01/2018 07:36:26]     data/npc/scripts/Raiton Master.lua:64: in function 'callback'
[12/01/2018 07:36:26]     data/npc/lib/npcsystem/npchandler.lua:390: in function 'onCreatureSay'
[12/01/2018 07:36:26]     data/npc/scripts/Raiton Master.lua:7: in function <data/npc/scripts/Raiton Master.lua:7>

Editado por acan (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
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo