• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua TFS 1.2 Potions real animation

Karmia

https://discord.gg/FP36zQyaYG
Joined
Apr 21, 2016
Messages
127
Reaction score
85
Hello, is it possible to get this work without source edit? I'm using TFS 1.2.

make text effect visible only for players in range 1x1

Code:
   target:say("Aaaah...", TALKTYPE_MONSTER_SAY)


Code:
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_TARGETCASTERORTOPMOST, 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_DELAY_INTERVAL) - 900))
-- 1000 - 100 due to exact condition timing. -100 doesn't hurt us, and players don't have reminding ~50ms exhaustion.

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)
     item:remove(1)
     player:addItem(emptyPot, 1)
   elseif itemId == smallHealthPot then
     if not doTargetCombatHealth(0, target, COMBAT_HEALING, 60, 90, CONST_ME_MAGIC_BLUE) then
       return false
     end

     player:addCondition(exhaust)
     target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
     item:remove(1)
     player:addItem(emptyPot, 1)
   elseif itemId == healthPot then
     if not doTargetCombatHealth(0, target, COMBAT_HEALING, 125, 175, CONST_ME_MAGIC_BLUE) then
       return false
     end

     player:addCondition(exhaust)
     target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
     item:remove(1)
     player:addItem(emptyPot, 1)
   elseif itemId == manaPot then
     if not doTargetCombatMana(0, target, 75, 125, CONST_ME_MAGIC_BLUE) then
       return false
     end

     player:addCondition(exhaust)
     target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
     item:remove(1)
     player:addItem(emptyPot, 1)
   elseif itemId == strongHealthPot then
     if (not isInArray({3, 4, 7, 8}, target:getVocation():getId()) or target:getLevel() < 50) and not getPlayerFlagValue(player, PlayerFlag_IgnoreSpellCheck) then
       player:say("This potion can only be consumed by paladins and knights of level 50 or higher.", TALKTYPE_MONSTER_SAY)
       return true
     end

     if not doTargetCombatHealth(0, target, COMBAT_HEALING, 250, 350, CONST_ME_MAGIC_BLUE) then
       return false
     end

     player:addCondition(exhaust)
     target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
     item:remove(1)
     player:addItem(strongEmptyPot, 1)
   elseif itemId == strongManaPot then
     if (not isInArray({1, 2, 3, 5, 6, 7}, target:getVocation():getId()) or target:getLevel() < 50) and not getPlayerFlagValue(player, PlayerFlag_IgnoreSpellCheck) then
       player:say("This potion can only be consumed by sorcerers, druids and paladins of level 50 or higher.", TALKTYPE_MONSTER_SAY)
       return true
     end

     if not doTargetCombatMana(0, target, 115, 185, CONST_ME_MAGIC_BLUE) then
       return false
     end

     player:addCondition(exhaust)
     target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
     item:remove(1)
     player:addItem(strongEmptyPot, 1)
   elseif itemId == greatSpiritPot then
     if (not isInArray({3, 7}, target:getVocation():getId()) or target:getLevel() < 80) and not getPlayerFlagValue(player, PlayerFlag_IgnoreSpellCheck) then
       player:say("This potion can only be consumed by paladins of level 80 or higher.", TALKTYPE_MONSTER_SAY)
       return true
     end

     if not doTargetCombatHealth(0, target, COMBAT_HEALING, 250, 350, CONST_ME_MAGIC_BLUE) or not doTargetCombatMana(0, target, 100, 200, CONST_ME_MAGIC_BLUE) then
       return false
     end

     player:addCondition(exhaust)
     target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
     item:remove(1)
     player:addItem(greatEmptyPot, 1)
   elseif itemId == greatHealthPot then
     if (not isInArray({4, 8}, target:getVocation():getId()) or target:getLevel() < 80) and not getPlayerFlagValue(player, PlayerFlag_IgnoreSpellCheck) then
       player:say("This potion can only be consumed by knights of level 80 or higher.", TALKTYPE_MONSTER_SAY)
       return true
     end

     if not doTargetCombatHealth(0, target, COMBAT_HEALING, 425, 575, CONST_ME_MAGIC_BLUE) then
       return false
     end

     player:addCondition(exhaust)
     target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
     item:remove(1)
     player:addItem(greatEmptyPot, 1)
   elseif itemId == greatManaPot then
     if (not isInArray({1,2,5,6}, target:getVocation():getId()) or target:getLevel() < 80) and not getPlayerFlagValue(player, PlayerFlag_IgnoreSpellCheck) then
       player:say("This potion can only be consumed by sorcerers and druids of level 80 or higher.", TALKTYPE_MONSTER_SAY)
       return true
     end

     if not doTargetCombatMana(0, target, 150, 250, CONST_ME_MAGIC_BLUE) then
       return false
     end
     player:addCondition(exhaust)
     target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
     item:remove(1)
     player:addItem(greatEmptyPot, 1)
   elseif itemId == ultimateHealthPot then
     if (not isInArray({4, 8}, target:getVocation():getId()) or target:getLevel() < 130) and not getPlayerFlagValue(player, PlayerFlag_IgnoreSpellCheck) then
       player:say("This potion can only be consumed by knights of level 130 or higher.", TALKTYPE_MONSTER_SAY)
       return true
     end

     if not doTargetCombatHealth(0, target, COMBAT_HEALING, 650, 850, CONST_ME_MAGIC_BLUE) then
       return false
     end

     player:addCondition(exhaust)
     target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
     item:remove(1)
     player:addItem(greatEmptyPot, 1)
   end
   return true
end
 
You can do something like this:
Code:
local position = target:getPosition()
for _, tmpPlayer in ipairs(Game.getPlayers()) do
    if tmpPlayer:getPosition():getDistance(position) <= 1 then
        tmpPlayer:say("Aaaah...", TALKTYPE_MONSTER_SAY, false, tmpPlayer, position)
    end
end
 
You can do something like this:
Code:
local position = target:getPosition()
for _, tmpPlayer in ipairs(Game.getPlayers()) do
    if tmpPlayer:getPosition():getDistance(position) <= 1 then
        tmpPlayer:say("Aaaah...", TALKTYPE_MONSTER_SAY, false, tmpPlayer, position)
    end
end
wouldnt getSpectators with a 0 range be better? Game.getPlayers() would fetch all available players every time someone uses a potion..
 
Back
Top