• 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!

UE lock from x players on the screen TFS 0.4 8.6

Daniel Kopeć

Member
Joined
Dec 8, 2018
Messages
125
Solutions
4
Reaction score
12
Location
Poland
How to make an UE spell lock from x players on the screen?
For example, you cannot use an EU spell if there are 10 players or more on the screen.
 
The only way I can think of doing it would be by using getSpectators but this wouldn't be good performance wise.
 
Try;
Haven't tested.

Lua:
function onCastSpell(creature, variant)

    -- check for spectators before executing spell
    local pos = getCreaturePosition(creature)
    local spectators = getSpectators(pos, 7, 5)

    -- count players in area (ignores monsters)
    local counter = 0;
    for _, spectator in pairs(spectators) do
        if isPlayer(spectator) then
            counter = counter + 1
        end
    end

    if counter >= 10 then
        doPlayerSendCancel(cid, "You cannot cast UE.")
        doSendMagicEffect(pos, CONST_ME_POFF)
        return true
    end

    return combat:execute(creature, variant)
end
 
Try;
Haven't tested.

Lua:
function onCastSpell(creature, variant)

    -- check for spectators before executing spell
    local pos = getCreaturePosition(creature)
    local spectators = getSpectators(pos, 7, 5)

    -- count players in area (ignores monsters)
    local counter = 0;
    for _, spectator in pairs(spectators) do
        if isPlayer(spectator) then
            counter = counter + 1
        end
    end

    if counter >= 10 then
        doPlayerSendCancel(cid, "You cannot cast UE.")
        doSendMagicEffect(pos, CONST_ME_POFF)
        return true
    end

    return combat:execute(creature, variant)
end
What folder should I paste this into?
 
What folder should I paste this into?
Whichever UE spell you need to block;
put these lines before spell execution:

Lua:
    -- check for spectators before executing spell
    local pos = getCreaturePosition(creature)
    local spectators = getSpectators(pos, 7, 5)

    -- count players in area (ignores monsters)
    local counter = 0;
    for _, spectator in pairs(spectators) do
        if isPlayer(spectator) then
            counter = counter + 1
        end
    end

    if counter >= 10 then
        doPlayerSendCancel(cid, "You cannot cast UE.")
        doSendMagicEffect(pos, CONST_ME_POFF)
        return true
    end
 
Whichever UE spell you need to block;
put these lines before spell execution:

Lua:
    -- check for spectators before executing spell
    local pos = getCreaturePosition(creature)
    local spectators = getSpectators(pos, 7, 5)

    -- count players in area (ignores monsters)
    local counter = 0;
    for _, spectator in pairs(spectators) do
        if isPlayer(spectator) then
            counter = counter + 1
        end
    end

    if counter >= 10 then
        doPlayerSendCancel(cid, "You cannot cast UE.")
        doSendMagicEffect(pos, CONST_ME_POFF)
        return true
    end

Lua:
-- SpellCreator generated.

-- =============== COMBAT VARS ===============
-- Areas/Combat for 0ms
local combat0_Brush = createCombatObject()
setCombatParam(combat0_Brush, COMBAT_PARAM_EFFECT, 30)
setCombatParam(combat0_Brush, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
setCombatArea(combat0_Brush,createCombatArea({{0, 0, 0, 0, 1, 0, 0, 0, 0},
{0, 0, 1, 0, 1, 0, 1, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 1, 1, 1, 1, 0, 0},
{1, 1, 1, 1, 3, 1, 1, 1, 1},
{0, 0, 1, 1, 1, 1, 1, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 0, 1, 0, 1, 0, 0},
{0, 0, 0, 0, 1, 0, 0, 0, 0}}))
function getDmg_Brush(cid, level, maglevel)
    return (120+level*4+maglevel*1)*-1,(140+level*5+maglevel*1.3)*-1
end
setCombatCallback(combat0_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush")

-- Areas/Combat for 200ms
local combat2_Brush_2 = createCombatObject()
setCombatParam(combat2_Brush_2, COMBAT_PARAM_EFFECT, 1)
setCombatParam(combat2_Brush_2, COMBAT_PARAM_TYPE, COMBAT_NONE)
setCombatArea(combat2_Brush_2,createCombatArea({{0, 0, 0, 0, 1, 0, 0, 0, 0},
{0, 0, 1, 0, 1, 0, 1, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 0, 1, 0, 1, 0, 0},
{1, 1, 1, 1, 2, 1, 1, 1, 1},
{0, 0, 1, 0, 1, 0, 1, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 0, 1, 0, 1, 0, 0},
{0, 0, 0, 0, 1, 0, 0, 0, 0}}))
function getDmg_Brush_2(cid, level, maglevel)
    return (10)*-1,(20)*-1
end
setCombatCallback(combat2_Brush_2, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush_2")

-- =============== CORE FUNCTIONS ===============
local function RunPart(c,cid,var,dirList,dirEmitPos) -- Part
    if (isCreature(cid)) then
        doCombat(cid, c, var)
        if (dirList ~= nil) then -- Emit distance effects
            local i = 2;
            while (i < #dirList) do
                doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList[i],y=dirEmitPos.y-dirList[i+1],z=dirEmitPos.z},dirList[1])
                i = i + 2
            end      
        end
    end
end

function onCastSpell(cid, var)
    local startPos = getCreaturePosition(cid)
    RunPart(combat0_Brush,cid,var)
    addEvent(RunPart,200,combat2_Brush_2,cid,var)
    return true
end


Where exactly should I paste it ? because it tries and the spell doesn't work for me at all.
Post automatically merged:

The only way I can think of doing it would be by using getSpectators but this wouldn't be good performance wise.
Why?
 
Where exactly should I paste it ?
Lua:
function onCastSpell(cid, var)
    local startPos = getCreaturePosition(cid)

    -- check for spectators before executing spell
    local spectators = getSpectators(startPos, 7, 5)

    -- count players in area (ignores monsters)
    local counter = 0;
    for _, spectator in pairs(spectators) do
        if isPlayer(spectator) then
            counter = counter + 1
        end
    end

    if counter >= 10 then
        doPlayerSendCancel(cid, "You cannot cast UE.")
        doSendMagicEffect(startPos, CONST_ME_POFF)
        return true
    end

    RunPart(combat0_Brush,cid,var)
    addEvent(RunPart,200,combat2_Brush_2,cid,var)
    return true
end
 
Lua:
function onCastSpell(cid, var)
    local startPos = getCreaturePosition(cid)

    -- check for spectators before executing spell
    local spectators = getSpectators(startPos, 7, 5)

    -- count players in area (ignores monsters)
    local counter = 0;
    for _, spectator in pairs(spectators) do
        if isPlayer(spectator) then
            counter = counter + 1
        end
    end

    if counter >= 10 then
        doPlayerSendCancel(cid, "You cannot cast UE.")
        doSendMagicEffect(startPos, CONST_ME_POFF)
        return true
    end

    RunPart(combat0_Brush,cid,var)
    addEvent(RunPart,200,combat2_Brush_2,cid,var)
    return true
end

Thx it works but in this spell not
Lua:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 31)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FLAMMINGARROW)
function onGetFormulaValues(cid, level, maglevel)
min = -(level * 1.8 + maglevel * 2.0) * 1.2
max = -(level * 2.0 + maglevel * 2.2) * 1.3
    return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local area = createCombatArea(AREA_CIRCLE3X3)
setCombatArea(combat, area)

function onCastSpell(cid, var)
    return doCombat(cid, combat, var)
end

Where exactly should I paste it in this script? /\
 
add:
Lua:
if not spectators then
    return true
end
after:
Lua:
local spectators = getSpectators(startPos, 7, 5)
Post automatically merged:


edit:
Dont do the above. instead do the following:
Lua:
if spectators then -- add this
    -- count players in area (ignores monsters)
    local counter = 0;
    for _, spectator in pairs(spectators) do
        if isPlayer(spectator) then
            counter = counter + 1
        end
    end

    if counter >= 10 then
        doPlayerSendCancel(cid, "You cannot cast UE.")
        doSendMagicEffect(startPos, CONST_ME_POFF)
        return true
    end
end  -- and this

show the script
 
add:
Lua:
if not spectators then
    return true
end
after:
Lua:
local spectators = getSpectators(startPos, 7, 5)
Post automatically merged:


edit:
Dont do the above. instead do the following:
Lua:
if spectators then -- add this
    -- count players in area (ignores monsters)
    local counter = 0;
    for _, spectator in pairs(spectators) do
        if isPlayer(spectator) then
            counter = counter + 1
        end
    end

    if counter >= 10 then
        doPlayerSendCancel(cid, "You cannot cast UE.")
        doSendMagicEffect(startPos, CONST_ME_POFF)
        return true
    end
end  -- and this


show the script
Unfortunately, something is not working

This is my spell script \/

Lua:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 31)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FLAMMINGARROW)
function onGetFormulaValues(cid, level, maglevel)
min = -(level * 1.8 + maglevel * 2.0) * 1.2
max = -(level * 2.0 + maglevel * 2.2) * 1.3
    return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local area = createCombatArea(AREA_CIRCLE3X3)
setCombatArea(combat, area)

function onCastSpell(cid, var)
    return doCombat(cid, combat, var)
end
 
Unfortunately, something is not working

This is my spell script \/

Lua:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 31)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FLAMMINGARROW)
function onGetFormulaValues(cid, level, maglevel)
min = -(level * 1.8 + maglevel * 2.0) * 1.2
max = -(level * 2.0 + maglevel * 2.2) * 1.3
    return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local area = createCombatArea(AREA_CIRCLE3X3)
setCombatArea(combat, area)

function onCastSpell(cid, var)
    return doCombat(cid, combat, var)
end


Lua:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 31)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FLAMMINGARROW)

function onGetFormulaValues(cid, level, maglevel)
    local min = -(level * 1.8 + maglevel * 2.0) * 1.2
    local max = -(level * 2.0 + maglevel * 2.2) * 1.3
    return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local area = createCombatArea(AREA_CIRCLE3X3)
setCombatArea(combat, area)

function onCastSpell(cid, var)
    local startPos = getCreaturePosition(cid)

    -- check for spectators before executing spell
    local spectators = getSpectators(startPos, 7, 5)
    if not spectators then
        return doCombat(cid, combat, var)
    end

    -- count players in area (ignores monsters)
    local counter = 0;
    for _, spectator in pairs(spectators) do
        if isPlayer(spectator) then
            counter = counter + 1
        end
    end

    if counter >= 10 then
        doPlayerSendCancel(cid, "You cannot cast UE.")
        doSendMagicEffect(startPos, CONST_ME_POFF)
        return true
    end

    return doCombat(cid, combat, var)
end
 
Lua:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 31)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FLAMMINGARROW)

function onGetFormulaValues(cid, level, maglevel)
    local min = -(level * 1.8 + maglevel * 2.0) * 1.2
    local max = -(level * 2.0 + maglevel * 2.2) * 1.3
    return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local area = createCombatArea(AREA_CIRCLE3X3)
setCombatArea(combat, area)

function onCastSpell(cid, var)
    local startPos = getCreaturePosition(cid)

    -- check for spectators before executing spell
    local spectators = getSpectators(startPos, 7, 5)
    if not spectators then
        return doCombat(cid, combat, var)
    end

    -- count players in area (ignores monsters)
    local counter = 0;
    for _, spectator in pairs(spectators) do
        if isPlayer(spectator) then
            counter = counter + 1
        end
    end

    if counter >= 10 then
        doPlayerSendCancel(cid, "You cannot cast UE.")
        doSendMagicEffect(startPos, CONST_ME_POFF)
        return true
    end

    return doCombat(cid, combat, var)
end
Now it is working. Thank you very much Snavy :)
Post automatically merged:

Lua:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 31)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FLAMMINGARROW)

function onGetFormulaValues(cid, level, maglevel)
    local min = -(level * 1.8 + maglevel * 2.0) * 1.2
    local max = -(level * 2.0 + maglevel * 2.2) * 1.3
    return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local area = createCombatArea(AREA_CIRCLE3X3)
setCombatArea(combat, area)

function onCastSpell(cid, var)
    local startPos = getCreaturePosition(cid)

    -- check for spectators before executing spell
    local spectators = getSpectators(startPos, 7, 5)
    if not spectators then
        return doCombat(cid, combat, var)
    end

    -- count players in area (ignores monsters)
    local counter = 0;
    for _, spectator in pairs(spectators) do
        if isPlayer(spectator) then
            counter = counter + 1
        end
    end

    if counter >= 10 then
        doPlayerSendCancel(cid, "You cannot cast UE.")
        doSendMagicEffect(startPos, CONST_ME_POFF)
        return true
    end

    return doCombat(cid, combat, var)
end
That's exactly what I did at the beginning, but I had to enter something wrong :)
 
Back
Top