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 ADMRagnarok
      .Qual servidor ou website você utiliza como base? 
      https://github.com/mattyx14/otxserver/tree/otxserv2
      Qual o motivo deste tópico? 
      Alguem teria um script de reset preferencialmente por source para otx2 atualizado https://github.com/mattyx14/otxserver/tree/otxserv2
      se for por distro as mudanças me diga aonde mudar eu mesmo compilo
      ou script normal mesmo, porem as configuraçoes do script seriam as seguintes
      level necessario para resetar = x
      aumento de x level para reset = x
      item e quantidade de item para resetar = x,x
      aumento de x items por reset= x
      vida e mana volta ao inicio ao resetar = true or false
      skills voltao ao inicio ao resetar = true false
      hp e mp adicional ganho /lvl por reset = 1% (configurável)
      dano e heal adicionado por reset = 1% configuravel
      reset voc = {x, x, x, x, x, x, x} (quando der o 10 reset por exemplo(configuravel) , será feito uma checagem de vocation para poder resetar, por exemplo até 10 resets qualquer voc reseta nao será feito checagem, porem no reset 10 só resetará se for uma das seguintes vocações, se for mais facil deixa só 1 reset configuravel assim se for dificil pode colocar apartir de tantos resets precisa da classe, coloque oque for mais pratico pois o efeito será o mesmo.
      teleport para o templo= true or false
      pode resetar com battle= true or false
      a cada x resets ganhe tal item (configuravel) reset x recebe item x ao resetar, reset =5 {2160, 100} - exemplo.
      nao me importa se será storage, source, script. só me importo com o resultado e que nao tenha bugs, quanto mais bem feito melhor na hora de negociar o preço, se nao for permitido este tipo de post aqui alguem me avise que eu retiro ele. se tem outro local por favor movam ele, mais informações mande msg no privado responderei assim que possível.
         
    • By Ackerzin
      Olá, achei esse codigo em outro forum, ele foi desenvolvido para abrir o mapa do old cliente, mas ele foi feito para 1.2+, gostaria de saber se alguem poderia passar ele para 0.4.

      crédito Gesior.pl
    • By iTzBrHue3
      .Qual servidor ou website você utiliza como base?  OTX 2.8
       
      Qual o motivo deste tópico? Duvida
       
      Está surgindo algum erro? Se sim coloque-o aqui. 
       
      Você tem o código disponível? Se tiver publique-o aqui: 
          -- HP --
          conditionHP = createConditionObject(CONDITION_ATTRIBUTES)
          setConditionParam(conditionHP, CONDITION_PARAM_TICKS, -1)
          setConditionParam(conditionHP, CONDITION_PARAM_STAT_MAXHEALTH, n)
          setConditionParam(conditionHP, CONDITION_PARAM_BUFF, true)
          setConditionParam(conditionHP, CONDITION_PARAM_SUBID, 90)
          -- MANA --
          conditionMP = createConditionObject(CONDITION_ATTRIBUTES)
          setConditionParam(conditionMP, CONDITION_PARAM_TICKS, -1)
          setConditionParam(conditionMP, CONDITION_PARAM_STAT_MAXMANA, 9999)
          setConditionParam(conditionMP, CONDITION_PARAM_BUFF, true)
          setConditionParam(conditionMP, CONDITION_PARAM_SUBID, 91)
          -- Magic Level --
          conditionML = createConditionObject(CONDITION_ATTRIBUTES)
          setConditionParam(conditionML, CONDITION_PARAM_TICKS, -1)
          setConditionParam(conditionML, CONDITION_PARAM_STAT_MAGICLEVEL, 99)
          setConditionParam(conditionML, CONDITION_PARAM_BUFF, true)
          setConditionParam(conditionML, CONDITION_PARAM_SUBID, 92)
          -- MELEE --
          conditionMELEE = createConditionObject(CONDITION_ATTRIBUTES)
          setConditionParam(conditionMELEE, CONDITION_PARAM_TICKS, -1)
          setConditionParam(conditionMELEE, CONDITION_PARAM_SKILL_CLUB, 99)
          setConditionParam(conditionMELEE, CONDITION_PARAM_SKILL_SWORD, 99)
          setConditionParam(conditionMELEE, CONDITION_PARAM_SKILL_AXE, 99)
          setConditionParam(conditionMELEE, CONDITION_PARAM_BUFF, true)
          setConditionParam(conditionMELEE, CONDITION_PARAM_SUBID, 93)
          -- Shield --
          conditionSHI = createConditionObject(CONDITION_ATTRIBUTES)
          setConditionParam(conditionSHI, CONDITION_PARAM_TICKS, -1)
          setConditionParam(conditionSHI, CONDITION_PARAM_SKILL_SHIELD, 99)
          setConditionParam(conditionSHI, CONDITION_PARAM_BUFF, true)
          setConditionParam(conditionSHI, CONDITION_PARAM_SUBID, 94)
          -- Dist --
          conditionDIST = createConditionObject(CONDITION_ATTRIBUTES)
          setConditionParam(conditionDIST, CONDITION_PARAM_TICKS, -1)
          setConditionParam(conditionDIST, CONDITION_PARAM_SKILL_DISTANCE, 99)
          setConditionParam(conditionDIST, CONDITION_PARAM_BUFF, true)
          setConditionParam(conditionDIST, CONDITION_PARAM_SUBID, 95)
      function onLogin(cid)
          doAddCondition(cid, conditionHP)
          doAddCondition(cid, conditionMP)
          doAddCondition(cid, conditionML)
          doAddCondition(cid, conditionMELEE)
          doAddCondition(cid, conditionSHI)
          doAddCondition(cid, conditionDIST)
          return true
      end
       
       
      Como eu faço pra adcionar os valores das condition vindo de um storage do player?
       
    • By Myalitth
      .Qual servidor ou website você utiliza como base? 
       
      OTX -  TFS 1.2
       
      Boa Noite, eu gostaria de um script que fizesse com que um item x sumisse de determinado SQM quando um player pise em um determinado tile (sqm) e reaparecer quando o player sair do tile...
      Se possivel com um exausted entre efeitos (ações).
       
      Exemplo a ilha da Spike Sword em Rookgaard, só que com um tile proximo em que possa sumir o item ao pisar.
       
      Eu tentei porém não obtive exito
       
       
    • By Nto Avus Official
      Opa rapazeada queria uma ajuda pra colocar esse script de akatsuki pra dar a outfit e dar dano, pros jogadores, queria que não desse hp e sim dano tipo uns 2000 de dano.
       
      Script
       
      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. 
       
  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...

Important Information

Confirmação de Termo