Jump to content

Scripting (Resolvido)Npc de Troca


Go to solution Solved by Dwarfer,

Recommended Posts

Alguém me ajuda quero um NPC, que pede 3 itens e dar 1!

 

id dos itens pedidos: 13386, 12713, 13400.

id do item que ele dar em troca: 12714.

 

Obrigado!

 

Link to post
Share on other sites

  • Moderator
  • Solution

@isac001

Spoiler

-- by dwarfer
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local npcTopic = {}
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 t = {
    costItems = {{13386, 1}, {12713, 1}, {13400, 1}}, -- {id do item, quantidade}
    rewardItems = {{12714, 1}},
}

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("Olá, "..getPlayerName(cid)..". Posso te dar {itens} especiais se você me der o que preciso.", cid)
            npcTopic[talkUser] = 1
        else
            return false
        end
    elseif msgcontains(msg, "itens") and npcTopic[talkUser] == 1 then
        local textcost, textrwd, tmp = "", "", {}
        for k = 1, #t.rewardItems do
            tmp = t.rewardItems[k]
            textrwd = textrwd .. tmp[2] .. "x " .. getItemNameById(tmp[1]) .. ((k+1) == #t.rewardItems and " e " or (k ~= #t.rewardItems and ", " or ""))
        end
        if #t.costItems > 0 then
            for i = 1, #t.costItems do
                tmp = t.costItems[i]
                textcost = textcost .. tmp[2] .. "x " .. getItemNameById(tmp[1]) .. (i ~= #t.costItems and ", " or "")
            end
            npcHandler:say("Você quer me dar "..textcost.." em troca de "..textrwd.."?", cid)
            npcTopic[talkUser] = 2
        else
            npcHandler:say("Você quer "..textrwd.." grátis?", cid)
            npcTopic[talkUser] = 2
        end
    elseif msgcontains(msg, "yes") and npcTopic[talkUser] == 2 then
        local check, tmp = true, {}
        if #t.costItems > 0 then
            for i = 1, #t.costItems do
                tmp = t.costItems[i]
                if getPlayerItemCount(cid, tmp[1]) < tmp[2] then
                    check = false
                    break
                end
            end
        end
        if not check then
            npcHandler:say("Você não tem todos os itens que preciso. Volte quando estiver com todos eles.", cid)
            npcTopic[talkUser] = 0
            npcHandler:releaseFocus(cid)
        else
            if #t.costItems > 0 then
                for i = 1, #t.costItems do
                    tmp = t.costItems[i]
                    doPlayerRemoveItem(cid, tmp[1], tmp[2])
                end
            end
            for k = 1, #t.rewardItems do
                tmp = t.rewardItems[k]
                if isItemStackable(tmp[1]) then
                    doPlayerAddItem(cid, tmp[1], tmp[2])
                else
                    for n = 1, tmp[2] do
                        doPlayerAddItem(cid, tmp[1], 1)
                    end
                end
            end
            npcHandler:say("Negócio fechado! Receba o que prometi. Aguardo seu retorno outro dia.", cid)
            npcTopic[talkUser] = 0
            npcHandler:releaseFocus(cid)
        end
        
    elseif msgcontains(msg, "no") and npcTopic[talkUser] == 2 then
        npcHandler:say("Sem problemas, estarei sempre aqui no mesmo local e no mesmo horário.", cid)
        npcTopic[talkUser] = 0
        npcHandler:releaseFocus(cid)
    elseif msgcontains(msg, "bye") then
        npcHandler:say("Até outro dia.", cid)
        npcTopic[talkUser] = 0
        npcHandler:releaseFocus(cid)
    end
    return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:setMessage(MESSAGE_FAREWELL, "Até mais.")
npcHandler:setMessage(MESSAGE_WALKAWAY, "Até.")  

 

 

Contato:

  • Email: dwarfer@sapo.pt
  • Discord: Dwarfer#2715

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Similar Content

    • By Felippe Reine014
      uso tfs 1.3
       
      fala pessoal vim pedir a ajuda de voces com um script de equipe 
      por exemplo quando o player tiver usando um demon shield e toma um hit de 300 ai esse hit que o player levou de 300 adiciona 5% de vida para o player 
      obrigado desde ja a todos 
       
      Você tem o código disponível? Se tiver publique-o aqui: 
         
      Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 
       
    • By MIzakinha
      Salve!
       
      Estou com um projeto e para ajudar os players a progredirem mais facilmente pensei em fazer um script de uma box que da itens.
       
      Funcionaria da seguinte maneira:
       
      Ao criar o char e entrar no server pela primeira vez a box já vai estar na sua bolsa. Até essa parte tudo bem, até porque ela faz parte de outra script. kkk...
       
      Bom, agora sim, esse script deve fazer com que eu só consiga usar essa box quando eu atingir o lvl 15. Ao clicar nessa box eu irei ganhar vários itens, e um deles será outra box que eu só vou poder abrir no lvl 30. Ao clicar nessa box eu irei ganhar vários itens e outra box que eu só vou poder abrir no lvl 60. Ao abrir essa box eu irei ganha vários itens e fim. Acabou por aí.
       
      Alguém consegue me ajudar a fazer esse script?
       
      Estou usando como base um servidor DxP
       
       
       
    • By Jeff Delay
      Comecei a usar TFS 1.3 recentemente porem não entendo quase nada praticamente, quero por nessa magia a posição do efeito e o tempo que ela vai sair no target
       
      local combat = Combat() combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) combat:setParameter(COMBAT_PARAM_EFFECT, 0) combat:setParameter(COMBAT_PARAM_BLOCKARMOR, true) -- combat:setParameter(COMBAT_PARAM_USECHARGES, true) function onGetFormulaValues(player, skill, attack, factor)     local min = (player:getLevel() / 5) + (skill * attack * 0.02) + 4     local max = (player:getLevel() / 5) + (skill * attack * 0.04) + 9     return -min, -max end combat:setCallback(CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onCastSpell(creature, variant) local parameters = {creature = creature, variant = variant} local target = Variant.getNumber(variant) addEvent(effect, 200, target, {1,0}, 45)     return combat:execute(creature, variant) end onde em 
      200 = tempo para sair o efeito
      {1,0} = posição do efeito
      45 = efeito
      nela gostaria também de tempo para sair o danos.
    • By pedrobta
      .Qual servidor ou website você utiliza como base? 
      TFS 1.4
       
      Qual o motivo deste tópico? 
      Gostaria de solicitar a ajuda de vocês em relação a uma dúvida. Gostaria de realçar algumas cores dentro da GAMESTORE, no caso desse exemplo é o laranja.
      Estou enviando uma imagem para dúvidas.
       
      Imagem como eu gostaria de fazer.
       
      Você tem o código disponível? Segue meu GAMESTORE.LUA
       
    • By miguelprojac
      .Qual servidor ou website você utiliza como base? 
      https://github.com/opentibiabr/OTServBR-Global
       
      Bom a situação é a seguinte: quando o player está equipado com uma arma de dano físico que foi imbuida com um dano elemental, a magia de cura que o mesmo usa é diminuida conforme a porcentagem do imbue elemental.
       
      Ex: Arma imbuida nível 2 dano de fogo (25% do dano é convertido para fire)  >> Magia  cura 25% menos;
           Arma imbuida nível 3 dano de gelo (50% do dano é convertido para ice)  >> Magia  cura 50% menos;
       
      Alguem já viu algum problema parecido?  Utilizo o otservbr 12.6 TFS 1.3
          
       
  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...

Important Information

Confirmação de Termo