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

Solved function onCastSpell(cid, var) - is it possible to get target?

Status
Not open for further replies.

okurde

New Member
Joined
Jan 28, 2009
Messages
134
Reaction score
1
Hello, there is heal friend script:
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)
setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
setHealingFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 10, 14)

function onCastSpell(cid, var)
        return doRemoveCondition(cid, CONDITION_PARALYZE), doCombat(cid, combat, var)
end
Is there any way to get a target (player who is healed) and allow to heal only player with level lower than 80?
 
You didn't say the server version.

#edit:
I'm not much into TFS lower than 1.0(don't know much functions :p), but try this.
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)
setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
setHealingFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 10, 14)

function onCastSpell(cid, var)
    local target = Player(stringToVariant(var))
    if target and getPlayerLevel(target) <= 80 then
        return doRemoveCondition(cid, CONDITION_PARALYZE), doCombat(cid, combat, var)
    else
        doPlayerSendCancel(cid, "You can only heal players with level 80 or below.")
    end
end
@okurde
 
Last edited:
Maybe it will work i have no idea, but it is a start..
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)
setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
setHealingFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 10, 14)

local function doHealPlayer(cid, pos)
    local getPos = pos
    getPos.stackpos = STACKPOS_TOP_CREATURE

    local target = getThingFromPos(getPos)
    if target.uid ~= 0 then
        if isPlayer(target.uid) then
            if getPlayerLevel(target.uid) < 80 then
                doSendMagicEffect(pos, CONST_ME_MAGIC_BLUE)
                return doCombat(cid, combat, var)
            end
        end
    end
  
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    return false
end

function onCastSpell(cid, var)
    local pos = variantToPosition(var)
    if(pos.x ~= 0 and pos.y ~= 0) then
        return doHealPlayer(cid, pos)
    end
    return false
end
 
here, easy as eating a pie
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)
setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
setHealingFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 10, 14)

function onCastSpell(cid, var)
    if getPlayerLevel(var.number) >= 80 then      
        return false, doPlayerSendCancel(cid, "Sorry, you may only cast this on players below level 80.")
    end
  
    return doCombat(cid, combat, var)
end
 
Okay thanks, it almost works :p How can I get position of target?

Well, I did:
Code:
local target = getPlayerByNameWildcard(var)

Code:
if getPlayerLevel(target) < 80        -- works
if getTilePzInfo(getPlayerPosition(target)) -- does not work
data/spells/scripts/healing/heal friend.lua:eek:nCastSpell
Description:
data/lib/100-shortcut.lua:304: attempt to index a boolean value
stack traceback:
data/lib/100-shortcut.lua:304: in function 'getTilePzInfo'



I tried:
Code:
local target = getPlayerByNameWildcard(var) 
local posTarget = variantToPosition(var)
but
Code:
getTilePzInfo(getPlayerPosition(posTarget)) -- still does not work




@cbrm
Awseom! Is is possible to get position in such simple way?
 
var is a table that contains the values type and number in the case of that spell
number is the target's creature id so you don't need to get or define it again

You can get the position of target with:
Code:
getThingPosition(var.number)
 
exura gran mas res
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)
setCombatParam(combat, COMBAT_PARAM_TARGETPLAYERSORSUMMONS, true)

local _combat = createCombatObject()
setCombatParam(_combat, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(_combat, COMBAT_PARAM_AGGRESSIVE, false)
setCombatParam(_combat, COMBAT_PARAM_TARGETPLAYERSORSUMMONS, true)
setCombatParam(_combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
setHealingFormula(_combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 10, 12)

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

function onTargetCreature(cid, target)
    if getPlayerLevel(target) < 80 then
        doCombat(cid, _combat, numberToVariant(target))
    end   
    return true
end
setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")


function onCastSpell(cid, var)
    return doCombat(cid, combat, var)
end
 
Status
Not open for further replies.
Back
Top