local UPGRADE_ITEM_ID = 5902 -- The upgrade item, in this case, the "scary blue eye"
local LIFE_LEECH_INCREMENT = 1 -- Percentage to be added to Life Leech
local MANA_LEECH_INCREMENT = 1 -- Percentage to be added to Mana Leech
local MAX_LEECH_PERCENT = 100 -- Maximum limit for Life Leech and Mana Leech
local FIXED_DAMAGE = 100000000000 -- Fixed damage to be dealt
function onUse(cid, item, fromPosition, itemEx, toPosition)
-- Check if the player is valid
if not isPlayer(cid) then
return false
end
-- Get the weapon the player is holding (left or right hand)
local weapon = getPlayerSlotItem(cid, CONST_SLOT_LEFT)
if weapon.itemid == 0 then
weapon = getPlayerSlotItem(cid, CONST_SLOT_RIGHT)
end
-- Check if the player is holding a weapon
if weapon.itemid == 0 then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_SMALL, "You need to be holding a weapon to upgrade it.")
return false
end
-- Get the current Life Leech and Mana Leech values (if they exist)
local currentLifeLeech = tonumber(getItemAttribute(weapon.uid, "lifeLeech")) or 0
local currentManaLeech = tonumber(getItemAttribute(weapon.uid, "manaLeech")) or 0
-- Accumulate new leech values, limited by the maximum
local newLifeLeech = math.min(currentLifeLeech + LIFE_LEECH_INCREMENT, MAX_LEECH_PERCENT)
local newManaLeech = math.min(currentManaLeech + MANA_LEECH_INCREMENT, MAX_LEECH_PERCENT)
-- Apply the new Life Leech and Mana Leech values to the weapon
doItemSetAttribute(weapon.uid, "lifeLeech", newLifeLeech)
doItemSetAttribute(weapon.uid, "manaLeech", newManaLeech)
-- Modify the weapon's description to show the new leech values
local description = getItemAttribute(weapon.uid, "description") or ""
description = "This weapon now has " .. newLifeLeech .. "% Life Leech and " .. newManaLeech .. "% Mana Leech. The maximum is 100%."
doItemSetAttribute(weapon.uid, "description", description)
-- Send a message to the player informing about the upgrade
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your weapon has been upgraded! It now has " .. newLifeLeech .. "% Life Leech and " .. newManaLeech .. "% Mana Leech. The maximum is 100%.")
-- Display animated text "+Leech!!!" in green (color 35)
local position = getCreaturePosition(cid)
doSendAnimatedText(position, "+Leech!!!", 35)
-- The line that removed the upgrade item has been removed to allow infinite use
-- doRemoveItem(item.uid, 1) -- REMOVED
-- Combat logic: damage with the weapon
local target = getCreatureTarget(cid)
if isCreature(target) then
-- Check if the weapon has reached the limit for Life Leech and Mana Leech
if newLifeLeech == MAX_LEECH_PERCENT and newManaLeech == MAX_LEECH_PERCENT then
-- Fixed damage from the weapon
local damage = FIXED_DAMAGE
-- Apply the damage to the target
doTargetCombatHealth(cid, target, COMBAT_UNDEFINEDDAMAGE, -damage, -damage, CONST_ME_EXPLOSIONHIT)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You dealt " .. damage .. " damage with your weapon!")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_SMALL, "Your weapon has not reached the limit to deal damage.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_SMALL, "You do not have a valid target to attack.")
end
return true
end
local portalId, t = 25058,
{
["glacius death"] = {
message = "You have defeated Glacius Death!",
config = {
createPos = {}, -- O portal será criado onde o monstro morrer.
toPos = {x = 32202, y = 31863, z = 13}, -- Posição onde o portal irá teleportar
portalTime = 1, -- Duração do portal em minutos
}
},
}
---------------------------------------------------------------------------------------
-- Fim da Configuração
---------------------------------------------------------------------------------------
local function spectatorStartCountdown(time, position)
local spectators = Game.getSpectators(position, false, false, 5, 5, 5, 5)
if #spectators > 0 then
for i = 1, #spectators do
if time > 1 then
spectators:say("" .. time .. "", TALKTYPE_MONSTER_SAY, false, spectators, position)
else
spectators:say("Time out!", TALKTYPE_MONSTER_SAY, false, spectators, position)
break
end
end
end
local portal = Tile(position):getItemById(portalId)
if portal then
addEvent(spectatorStartCountdown, 1000, time - 1, position)
end
end
local function removePortal(position)
local portal = Tile(position):getItemById(portalId)
if portal then
portal:remove()
end
end
local deathMonsterCreatePortal = CreatureEvent("deathMonsterCreatePortal")
function deathMonsterCreatePortal.onDeath(creature, corpse, killer, mostDamageKiller)
if not creature:isMonster() or creature:getMaster() then
return true
end
local k = t[creature:getName():lower()]
if not k then
return true
end
local pos = creature:getPosition()
local cPos = k.config.createPos
if next(cPos) == nil then
cPos = pos
end
if Tile(cPos):getItemById(portalId) then
return true
end
local item = Game.createItem(portalId, 1, cPos)
if item:isTeleport() then
item:setDestination(k.config.toPos)
end
local pt = k.config.portalTime
addEvent(spectatorStartCountdown, 500, pt * 60, cPos)
addEvent(removePortal, pt * 60 * 1000, cPos)
return true
end
deathMonsterCreatePortal:type("death")
deathMonsterCreatePortal:register()
---------------------------------------------------------------------------------------
-- Registrar script onLogin
---------------------------------------------------------------------------------------
local monsterDeathLogin = CreatureEvent("monsterDeathLogin")
function monsterDeathLogin.onLogin(player)
player:registerEvent("deathMonsterCreatePortal")
return true
end
monsterDeathLogin:type("login")
monsterDeathLogin:register()