Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Oi, vi a ideia desse NPC em um lugar por aí e resolvi fazer.

Consiste em um NPC que aprimora seu item (deve estar em uma das mãos - esquerda ou direita) a troco de um outro item (configurável).

A cada nível de aprimoramento, seu item recebe um valor configurável no ataque, defesa e/ou armadura.

Você pode configurar o nível de aprimoramento máximo, chance de falhar, valor adicional que o item receberá a cada aprimoração e, como já dito antes, o item que será cobrado pelo NPC.

Em data/npc, crie um arquivo com extensão .XML, nomeie-o Upgrader, e coloque o seguinte conteúdo:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Upgrader" script="upgradenpc.lua" walkinterval="3000" floorchange="0" access="5" level="1" maglevel="1">
    <health now="150" max="150"/>
    <look type="134" head="39" body="113" legs="38" feet="0" addons="3" corpse="2212"/>
    <parameters>
        <parameter key="message_greet" value="Olá |PLAYERNAME|, voce gostaria de aprimorar o seu equipamento?"/>
    </parameters>
</npc>
Em data/npc/scripts, crie um arquivo com extensão .lua, nomeie-o upgradenpc.lua, e coloque o seguinte conteúdo:
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
    local config = {
        items = {12343, 10},      --Respectivamente, ID do item que o NPC irá cobrar e quantidade.
        maxBoost = 10,            --Nível máximo do equipamento.
        failChance = 20,          --Em porcentagem.
        upgradeValue = 1,         --Valor adicional que o item receberá a cada aprimoração.
    }
    if msgcontains(msg:lower(), "yes") then
        for slot = 5, 6 do
            local item = getPlayerSlotItem(cid, slot)
            if item.uid > 0 then
                if getItemAttack(item) > 0 or getItemDefense(item) > 0 or getItemArmor(item) > 0 then
                    if doPlayerRemoveItem(cid, config.items[1], config.items[2]) then
                        local newUpgrade = (getItemAttribute(item.uid, "upgrade") or 0) + 1
                        if newUpgrade <= config.maxBoost then
                            if math.random(1, 100) > config.failChance then
                                doItemSetAttribute(item.uid, "name", getItemInfo(item.itemid).name.." [+"..newUpgrade.."]")
                                if getItemAttack(item) > 0 then
                                    setItemAttack(item, getItemAttack(item) + config.upgradeValue)
                                end
                                if getItemDefense(item) > 0 then
                                    setItemDefense(item, getItemDefense(item) + config.upgradeValue)
                                end
                                if getItemArmor(item) > 0 then
                                    setItemArmor(item, getItemArmor(item) + config.upgradeValue)
                                end
                                doItemSetAttribute(item.uid, "upgrade", newUpgrade)
                                selfSay("Seu equipamento foi aprimorado com sucesso.", cid)
                                doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE)
                            else
                                selfSay("Aah, parece que a aprimoração falhou! Mais sorte na próxima vez.", cid)
                            end
                            return true
                        else
                            return selfSay("Seu equipamento já alcançou o nível máximo.", cid)
                        end
                    else
                        return selfSay("Você não tem "..config._item[2].."x "..getItemNameById(config._item[1])..(config._item[2] > 1 and "s" or "")..".", cid)
                    end
                end
            end
        end
        selfSay("Parece que você não tem um item para aprimorar.", cid)
    elseif msgcontains(msg:lower(), "no") then
        selfSay("Tudo bem, então.")
    end
    return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())            

Versão testada: 8.54
Bem, é só isso, até mais.

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

não respondo pms solicitando suporte em programação/scripting

Postado

Tópico aprovado e movido para área correta. Por estar contribuindo, vou te dar um ponto de reputação (REP+). Na próxima tente anexar uma foto pra deixar o tópico mais bonito ;]

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

  • 1 year later...
Postado

Ola, desculpe reviver o topico, mas achei o sistema bastante interessante... porem ele da 1 erro...

 

[27/6/2016 13:50:41] [Error - NpcScript Interface] 
[27/6/2016 13:50:41] data/npc/scripts/upgradenpc.lua:onCreatureSay
[27/6/2016 13:50:41] Description: 
[27/6/2016 13:50:41] data/npc/scripts/upgradenpc.lua:24: attempt to call global 'getItemAttack' (a nil value)
[27/6/2016 13:50:41] stack traceback:
[27/6/2016 13:50:41]     data/npc/scripts/upgradenpc.lua:24: in function 'callback'
[27/6/2016 13:50:41]     data/npc/lib/npcsystem/npchandler.lua:456: in function 'onCreatureSay'
[27/6/2016 13:50:41]     data/npc/scripts/upgradenpc.lua:7: in function <data/npc/scripts/upgradenpc.lua:7>

 

poderia resolve? acredito que nao deva ser um erro tao grande..

 

obrigado

rep+ pra qm ajudar :D

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo