local ultimateHealthPot = 8473
local greatHealthPot = 7591
local greatManaPot = 7590
local greatSpiritPot = 8472
local strongHealthPot = 7588
local strongManaPot = 7589
local healthPot = 7618
local manaPot = 7620
local smallHealthPot = 8704
local antidotePot = 8474
local greatEmptyPot = 7635
local strongEmptyPot = 7634
local emptyPot = 7636
local antidote = Combat()
antidote:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
antidote:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
antidote:setParameter(COMBAT_PARAM_TARGETCASTERORT OPMOST, true)
antidote:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
antidote:setParameter(COMBAT_PARAM_DISPEL, CONDITION_POISON)
local exhaust = Condition(CONDITION_EXHAUST_HEAL)
exhaust:setParameter(CONDITION_PARAM_TICKS, (configManager.getNumber(configKeys.EX_ACTIONS_DEL AY_INTERVAL) +650))
-- 1000 - 100 due to exact condition timing. -100 doesn't hurt us, and players don't have reminding ~50ms exhaustion.
local function sendManaNumbers(player, mana)
player:sendTextMessage(MESSAGE_HEALED, ("You gained %d mana."):format(mana), player:getPosition(), mana, TEXTCOLOR_BLUE)
local name = player:getName()
for _, spectator in ipairs(Game.getSpectators(player:getPosition(), false, true)) do
if spectator ~= player then
spectator:sendTextMessage(MESSAGE_HEALED, ("%s gained %d mana."):format(name, mana), player:getPosition(), mana, TEXTCOLOR_BLUE)
end
end
end
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
if target == nil or not target:isPlayer() then
return true
end
if player:getCondition(CONDITION_EXHAUST_HEAL) then
player:sendTextMessage(MESSAGE_STATUS_SMALL, Game.getReturnMessage(RETURNVALUE_YOUAREEXHAUSTED) )
return true
end
local itemId = item:getId()
if itemId == antidotePot then
if not antidote:execute(target, numberToVariant(target:getId())) then
return false
end
player:addCondition(exhaust)
target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
elseif itemId == smallHealthPot then
if not doTargetCombatHealth(0, target, COMBAT_HEALING, 500, 500, CONST_ME_MAGIC_BLUE) then
return false
end
player:addCondition(exhaust)
target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
elseif itemId == healthPot then
if not doTargetCombatHealth(0, target, COMBAT_HEALING, 2000, 2700, CONST_ME_MAGIC_BLUE) then
return false
end
player:addCondition(exhaust)
target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
elseif itemId == manaPot then
local mana = math.random(2000, 2700)
if not doTargetCombatMana(0, target, mana, mana, CONST_ME_MAGIC_BLUE) then
return false
end
sendManaNumbers(player, mana)
player:addCondition(exhaust)
target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
elseif itemId == strongHealthPot then
if (not isInArray({1,2,3,4,5,6,7,8}, target:getVocation():getId()) or target:getLevel() < 1000) and not getPlayerFlagValue(player, PlayerFlag_IgnoreSpellCheck) then
player:say("Para level 1000+.", TALKTYPE_MONSTER_SAY)
return true
end
if not doTargetCombatHealth(0, target, COMBAT_HEALING, 7400, 7600, CONST_ME_MAGIC_BLUE) then
return false
end
player:addCondition(exhaust)
target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
elseif itemId == strongManaPot then
if (not isInArray({1,2,3,4,5,6,7,8}, target:getVocation():getId()) or target:getLevel() < 1000) and not getPlayerFlagValue(player, PlayerFlag_IgnoreSpellCheck) then
player:say("Para level 1000+.", TALKTYPE_MONSTER_SAY)
return true
end
local mana = math.random(7400, 7600)
if not doTargetCombatMana(0, target, mana, mana, CONST_ME_MAGIC_BLUE) then
return false
end
sendManaNumbers(player, mana)
player:addCondition(exhaust)
target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
elseif itemId == greatSpiritPot then
if (not isInArray({1,2,3,4,5,6,7,8}, target:getVocation():getId()) or target:getLevel() < 41000) and not getPlayerFlagValue(player, PlayerFlag_IgnoreSpellCheck) then
player:say("Para level 41000+.", TALKTYPE_MONSTER_SAY)
return true
end
local mana = math.random(33000, 35000)
if not doTargetCombatHealth(0, target, COMBAT_HEALING, 33000, 35000, CONST_ME_MAGIC_BLUE) or not doTargetCombatMana(0, target, mana, mana, CONST_ME_MAGIC_BLUE) then
return false
end
sendManaNumbers(player, mana)
player:addCondition(exhaust)
target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
elseif itemId == greatHealthPot then
if (not isInArray({1,2,3,4,5,6,7,8}, target:getVocation():getId()) or target:getLevel() < 6000) and not getPlayerFlagValue(player, PlayerFlag_IgnoreSpellCheck) then
player:say("Para level 6000+.", TALKTYPE_MONSTER_SAY)
return true
end
if not doTargetCombatHealth(0, target, COMBAT_HEALING, 13000, 15000, CONST_ME_MAGIC_BLUE) then
return false
end
player:addCondition(exhaust)
target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
elseif itemId == greatManaPot then
if (not isInArray({1,2,3,4,5,6,7,8}, target:getVocation():getId()) or target:getLevel() < 6000) and not getPlayerFlagValue(player, PlayerFlag_IgnoreSpellCheck) then
player:say("Para level 6000+.", TALKTYPE_MONSTER_SAY)
return true
end
local mana = math.random(13000, 15000)
if not doTargetCombatMana(0, target, mana, mana, CONST_ME_MAGIC_BLUE) then
return false
end
sendManaNumbers(player, mana)
player:addCondition(exhaust)
target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
elseif itemId == ultimateHealthPot then
if (not isInArray({1,2,3,4,5,6,7,8}, target:getVocation():getId()) or target:getLevel() < 41000) and not getPlayerFlagValue(player, PlayerFlag_IgnoreSpellCheck) then
player:say("Para level 41000+.", TALKTYPE_MONSTER_SAY)
return true
end
if not doTargetCombatHealth(0, target, COMBAT_HEALING, 33000, 35000, CONST_ME_MAGIC_BLUE) then
return false
end
player:addCondition(exhaust)
target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
end
return true
end