Ir para conteúdo

NPC Upgrader


zipter98

Posts Recomendados

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.

Link para o comentário
Compartilhar em outros sites

Conteudo de qualidade e script bem organizado e limpo.

Já vi em alguns servidores e é muito requisitado, vai fazer sucesso este post

Coloque os creditos, até mesmo para valorizar o seu trabalho.

Link para o comentário
Compartilhar em outros sites

  • 2 months later...
×
×
  • Criar Novo...