Ir para conteúdo
  • 0

Npc Sweet Cyclop


brendoonh

Pergunta

Boa noite..

 

Estou precisando de um NPC que troque itens por outros, porem ele varia diversas trocas, por exemplo:

 

100 soul orbs - 100 infernalt bolt

10 life crystal = 1 flawless ice crystal

dragon lance + dragon shield + bart skirt = obsidian knife

 

Alguém poderia me ajudar??

 

Obrigado!! REP+ pra quem me der uma moral nisso ae!


up


up

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Configuração da tabela:

[ID_do_item_vendido] = {amount = quantidade, requires = {{ID_do_item_trocado, quantidade}, {ID_do_item_trocado, quantidade}, etc}},

Código:

local config = {
    --[itemid] = {amount = x, requires = {{itemid, amount}, {itemid, amount}, ...}},
}

local options = ""
for sell, info in pairs(config) do
    local itens_required = ""
    
    for i = 1, #info.requires do
        if itens_required == "" then
            itens_required = info.requires[i][2].."x "..getItemNameById(info.requires[i][1])
        else
            itens_required = itens_required..(i == #info.requires and " and " or ", ")..info.requires[i][2].."x "..getItemNameById(info.requires[i][1])
        end
    end
    
    options = options.."\n"..info.amount.."x "..getItemNameById(sell).." - "..itens_required
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, "trade") or msgcontains(msg, "buy") then
        selfSay("Hello. To see my offers, say {offers}; to buy something, tell me the item's name.", cid)
        talkState[talkUser] = 1
    elseif msgcontains(msg, "offers") and talkState[talkUser] == 1 then
        doPlayerPopupFYI(cid, options)
        talkState[talkUser] = 0
    elseif talkState[talkUser] == 1 then
        local item = config[getItemIdByName(msg)]
        
        if not item then
            selfSay("Sorry, I don't recognize this item. Try another one.")
            return true
        end       
        for i = 1, #item.requires do
            if getPlayerItemCount(cid, item.requires[i][1]) < item.requires[i][2] then
                selfSay("Sorry, you don't have "..item.requires[i][2].."x "..getItemNameById(item.requires[i][1])..".", cid)
                talkState[talkUser] = 0
                return true
            end
        end
        
        selfSay("OK, here yours "..item.amount.."x "..getItemNameById(getItemIdByName(msg)).."!", cid)
        for i = 1, #item.requires do
            doPlayerRemoveItem(cid, item.requires[i][1], item.requires[i][2])
        end
        doPlayerAddItem(cid, getItemIdByName(msg), item.amount)
        talkState[talkUser] = 0
    end
    return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())             
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

 

Configuração da tabela:

[ID_do_item_vendido] = {amount = quantidade, requires = {{ID_do_item_trocado, quantidade}, {ID_do_item_trocado, quantidade}, etc}},

Código:

local config = {
    --[itemid] = {amount = x, requires = {{itemid, amount}, {itemid, amount}, ...}},
}

local options = ""
for sell, info in pairs(config) do
    local itens_required = ""
    
    for i = 1, #info.requires do
        if itens_required == "" then
            itens_required = info.requires[i][2].."x "..getItemNameById(info.requires[i][1])
        else
            itens_required = itens_required..(i == #info.requires and " and " or ", ")..info.requires[i][2].."x "..getItemNameById(info.requires[i][1])
        end
    end
    
    options = options.."\n"..info.amount.."x "..getItemNameById(sell).." - "..itens_required
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, "trade") or msgcontains(msg, "buy") then
        selfSay("Hello. To see my offers, say {offers}; to buy something, tell me the item's name.", cid)
        talkState[talkUser] = 1
    elseif msgcontains(msg, "offers") and talkState[talkUser] == 1 then
        doPlayerPopupFYI(cid, offers)
        talkState[talkUser] = 0
    elseif talkState[talkUser] == 1 then
        local item = config[getItemIdByName(msg)]
        
        if not item then
            selfSay("Sorry, I don't recognize this item. Try another one.")
            return true
        end       
        for i = 1, #item.requires do
            if getPlayerItemCount(cid, item.requires[i][1]) < item.requires[i][2] then
                selfSay("Sorry, you don't have "..item.requires[i][2].."x "..getItemNameById(item.requires[i][1])..".", cid)
                talkState[talkUser] = 0
                return true
            end
        end
        
        selfSay("OK, here yours "..item.amount.."x "..getItemNameById(getItemIdByName(msg)).."!", cid)
        for i = 1, #item.requires do
            doPlayerRemoveItem(cid, item.requires[i][1], item.requires[i][2])
        end
        doPlayerAddItem(cid, getItemIdByName(msg), item.amount)
        talkState[talkUser] = 0
    end
    return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())             

Opa, boa tarde. Obrigado pela colaboração..

Estou com umas duvidas, primeiro, eu estou usando isso no .Lua

<npc name="Sweet Cyclops" script="data/npc/scripts/sweet.lua" access="5" lookdir="1">
    <health now="1000" max="1000"/>
<look type="22" head="0" body="86" legs="0" feet="38" addons="1"/>
</npc>  

No caso da script, eu fiz assim:

[8306] = {amount = 1, requires = {{2177, 10}, {2160, 1}, ...}},

 

No caso, o 8306 seria o item que iria ganhar? Utilizando os requires? (10 life crystal e 10k). To meio confuso mesmo depois das explicações citadas na tabela, e na hora que falo hi, trade ele fala para eu falar offers e ao falar offers nao aparece nada, sendo assim, creio eu que nao configurei certo, teria como dar uma atenção aqui pra mim??? Fico grato, lancei um rep+ pra tu pela colaboração!!!

Editado por brendoonh
Link para o comentário
Compartilhar em outros sites

  • 0

Sim, é dessa maneira que você pensou. Entretanto, para evitar erros você deve retirar as reticências (coloquei apenas como um indicativo que você pode configurar quantos itens quiser).

De todo modo, cometi uma pequena confusão no nome de uma variável. Corrigido.

Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

Sim, é dessa maneira que você pensou. Entretanto, para evitar erros você deve retirar as reticências (coloquei apenas como um indicativo que você pode configurar quantos itens quiser).

De todo modo, cometi uma pequena confusão no nome de uma variável. Corrigido.

Boa noite, não consigo fazer a troca, veja como configurei..

local config = {
    --[8300] = {amount = 1, requires = {{2177, 10}, {2160, 1}, ...}},
}

local options = ""
for sell, info in pairs(config) do
    local itens_required = ""
    
    for i = 1, #info.requires do
        if itens_required == "" then
            itens_required = info.requires[i][2].."x "..getItemNameById(info.requires[i][1])
        else
            itens_required = itens_required..(i == #info.requires and " and " or ", ")..info.requires[i][2].."x "..getItemNameById(info.requires[i][1])
        end
    end
    
    options = options.."\n"..info.amount.."x "..getItemNameById(sell).." - "..itens_required
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, "trade") or msgcontains(msg, "buy") then
        selfSay("Hello. To see my offers, say {offers}; to buy something, tell me the item's name.", cid)
        talkState[talkUser] = 1
    elseif msgcontains(msg, "offers") and talkState[talkUser] == 1 then
        doPlayerPopupFYI(cid, options)
        talkState[talkUser] = 0
    elseif talkState[talkUser] == 1 then
        local item = config[getItemIdByName(msg)]
        
        if not item then
            selfSay("Sorry, I don't recognize this item. Try another one.")
            return true
        end       
        for i = 1, #item.requires do
            if getPlayerItemCount(cid, item.requires[i][1]) < item.requires[i][2] then
                selfSay("Sorry, you don't have "..item.requires[i][2].."x "..getItemNameById(item.requires[i][1])..".", cid)
                talkState[talkUser] = 0
                return true
            end
        end
        
        selfSay("OK, here yours "..item.amount.."x "..getItemNameById(getItemIdByName(msg)).."!", cid)
        for i = 1, #item.requires do
            doPlayerRemoveItem(cid, item.requires[i][1], item.requires[i][2])
        end
        doPlayerAddItem(cid, getItemIdByName(msg), item.amount)
        talkState[talkUser] = 0
    end
    return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())          

 

 

19:48 ADM [250]: trade
19:48 Sweet Cyclops: Hello. To see my offers, say offers; to buy something, tell me the item's name.
19:48 ADM [250]: buy
19:48 Sweet Cyclops: Hello. To see my offers, say offers; to buy something, tell me the item's name.
19:48 ADM [250]: flawless ice crystal
19:49 ADM [250]: offers
OBS: quando falei isso, flawless ice crystal que no caso é o item 8300, apareceu isso no default:
19:48 Sweet Cyclops: Sorry, I don't recognize this item. Try another one.

Editado por brendoonh
Link para o comentário
Compartilhar em outros sites

  • 0

Duas travessões seguidas fazem o servidor interpretar o que vem a seguir como um comentário, que, no caso, não é interpretado como uma parte efetiva do código.

Tire-os, juntamente com as reticências (como lhe informei anteriormente), e seja feliz.

Link para o comentário
Compartilhar em outros sites

  • 0

Duas travessões seguidas fazem o servidor interpretar o que vem a seguir como um comentário, que, no caso, não é interpretado como uma parte efetiva do código.

Tire-os, juntamente com as reticências (como lhe informei anteriormente), e seja feliz.

Caraaamba @@zipter98, ficou melhor do que eu imaginava de verdade, muito melhor de como imaginei, to muito satisfeito pelo seu trabalho. Fico gratíssimo!!!

 

obs: te contar que tomei 1 coro aqui só para conseguir fazer isso que você falou, devido a inesperiencia, sabendo que era coisa fácil, removi, ai n deu, ai começo uns erros, enfim.. Consegui e ta funcionando perfeitamente excelente!

 

OBRIGADOOOOO CARA !!!

 

Aproveitando o embalo, feliz natal.. Tudo de bom!!

@edit :(

 

Aff , com 1 item tinha funcionado, fucei, fucei, na tentativa de por os outros, mais não quer ir.. :sad: Quando fala o nome do item ele para, fala mais nada, nem se falar offers ele responde mais.. Aff, desculpe a chatice, mais não manjo muito, tentei, tentei, nao é querendo tudo pronto, mais antes de voltar aqui, eu tentei muitas vezes, de varios modos e nada... Desculpe-me pela inconveniência :(

 

Depois de tentar varias vezes, desistir e ficou assim..

@@zipter98

local config = {
    [8300] = {amount = 1, requires = {{2177, 10}, {2160, 1}, }},
    [6529] = {amount = 1, requires = {{5944, 1}, }},
}
Editado por brendoonh
Link para o comentário
Compartilhar em outros sites

  • 0

Use a seguinte tabela. É comum quem não está familiarizado com Lua ter problemas em configurar tabelas, não se preocupe.

local config = {
    [8300] = {amount = 1, requires = {{2177, 10}, {2160, 1}}},
    [6529] = {amount = 1, requires = {{5944, 1}}},
}

Feliz Natal pra você também :^)

Link para o comentário
Compartilhar em outros sites

  • 0

@@zipter98, obrigado!

 

Fui testar o npc aqui, com a tag corrigida que você me passou e notei 1 coisa..

Pra ver a lista lá de quais itens tem e o que precisa pra trocar, temos que falar offers, até ai ok.

Quando saimos da janela que mostra os itens, o npc nao responde mais, nada de nada, ele so reconhece quando falamos bye...

E outra coisa, quando eu falo o nome do item sem falar offers ele reconhece... Parece que o offers cancela as ações dele.. Algo do tipo!

 

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...