//EDIT
Is this even possible without having to compile the source or so?
I remember few years ago I had made this spell work properly on my TFS 0.3.6? crying damson without editing my C++, source or anything
Hello. I am trying to make a "reflection spell" work on my server. I haven't found a working script for my system so id like to ask you what i have done wrong
I have added these things as the script creator has written:
I haven't added the first part because he says:
LUA Setup (If you use MOD you don't need these!)
when i try to cast the spell, my server gives me this error :
could anyone help me please?
I'm using TFS 1.3 Nekiro 8.6 server
Is this even possible without having to compile the source or so?
I remember few years ago I had made this spell work properly on my TFS 0.3.6? crying damson without editing my C++, source or anything
Hello. I am trying to make a "reflection spell" work on my server. I haven't found a working script for my system so id like to ask you what i have done wrong
I have added these things as the script creator has written:
LUA Setup (If you use MOD you don't need these!)
> data/creaturescripts/creaturescripts.xml
Lua:<event type="statschange" name="shield" event="script" value="shield.lua"/>
> data/creaturescripts/scripts/login.lua
Lua:registerCreatureEvent(cid, "shield")
> data/creaturescripts/scripts/shield.lua
Lua:--[[ * *\ /* *\ *_____* *________* *|* *________* *\_____*/ ****** Mirror && Ultimate Shields ******/ ** ** SP Edition by Cybermaster ** **/ ****** * | * ******/ * *|* */ **/ \**/ *****/ * ]]-- local energy = createConditionObject(CONDITION_ENERGY) setConditionParam(energy, CONDITION_PARAM_DELAYED, 1) addDamageCondition(energy, 5, 2000, -10) local poison = createConditionObject(CONDITION_POISON) setConditionParam(poison, CONDITION_PARAM_DELAYED, 1) addDamageCondition(poison, 5, 2000, -10) local fire = createConditionObject(CONDITION_FIRE) setConditionParam(fire, CONDITION_PARAM_DELAYED, 1) addDamageCondition(fire, 5, 2000, -10) local freezing = createConditionObject(CONDITION_FREEZING) setConditionParam(freezing, CONDITION_PARAM_DELAYED, 1) addDamageCondition(freezing, 5, 2000, -10) local dazzled = createConditionObject(CONDITION_DAZZLED) setConditionParam(dazzled, CONDITION_PARAM_DELAYED, 1) addDamageCondition(dazzled, 5, 2000, -10) local cursed = createConditionObject(CONDITION_CURSED) setConditionParam(cursed, CONDITION_PARAM_DELAYED, 1) addDamageCondition(cursed, 5, 2000, -10) local mirrorCounterAttack = 'damage' --OPTIONS: 'condition'/'damage'/'both' local e,d,k = { --combat type and distance shoot effect, and storages [COMBAT_ENERGYDAMAGE] = {35,energy }, [COMBAT_EARTHDAMAGE] = {29,poison }, [COMBAT_POISONDAMAGE] = {14,poison }, [COMBAT_FIREDAMAGE] = {3, fire }, [COMBAT_ICEDAMAGE] = {28,freezing}, [COMBAT_HOLYDAMAGE] = {30,dazzled }, [COMBAT_DEATHDAMAGE] = {31,cursed } }, 1361, --druid 1362 --kina function doKinaShield(p, effect) local pos = { --do not modify {x=p.x+1,y=p.y,z=p.z }, {x=p.x+1,y=p.y+1,z=p.z}, {x=p.x,y=p.y+1,z=p.z }, {x=p.x-1,y=p.y+1,z=p.z}, {x=p.x-1,y=p.y,z=p.z }, {x=p.x-1,y=p.y-1,z=p.z}, {x=p.x,y=p.y-1,z=p.z }, {x=p.x+1,y=p.y-1,z=p.z} } for i = 1, #pos do doSendDistanceShoot(p, pos[i], effect) end end function onStatsChange(cid, attacker, type, combat, value) if isDruid(cid) and isCreature(attacker) and e[combat] and getCreatureStorage(cid, d) > 0 then doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_RED) doCreatureSetStorage(cid, d, getCreatureStorage(cid, d)-1) doSendDistanceShoot(getThingPos(cid), getThingPos(attacker), e[combat][1]) doPlayerSendCancel(cid, 'Your mirror shield has '.. (getCreatureStorage(cid,d) > 0 and getCreatureStorage(cid,d) or 'no') ..' charges left.') if mirrorCounterAttack == 'condition' then doTargetCombatCondition(cid, attacker, e[combat][2], CONST_ME_MAGIC_RED) elseif mirrorCounterAttack == 'damage' then doTargetCombatHealth(cid, attacker, combat, -value, -value, CONST_ME_MAGIC_RED) elseif mirrorCounterAttack == 'both' then doTargetCombatCondition(cid, attacker, e[combat][2], CONST_ME_MAGIC_RED) doTargetCombatHealth(cid, attacker, combat, -value, -value, CONST_ME_MAGIC_RED) end return false elseif isKnight(cid) and isCreature(attacker) and e[combat] and getCreatureStorage(cid, k) > 0 then doKinaShield(getThingPos(cid), e[combat][1]) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_RED) doCreatureSetStorage(cid, k, getCreatureStorage(cid, k)-1) doPlayerSendCancel(cid, 'Your ultimate shield has '.. (getCreatureStorage(cid,k) > 0 and getCreatureStorage(cid,k) or 'no') ..' charges left.') return false end return true end
> data/spells/scripts/mageshield.lua
Lua:--storage to store the charges of druid's mirror shield & charges by magic level local storage, d = 1361, {{20, 1},{60, 2},{100, 3}} function getShieldCharges(cid) table.sort(d, function(a, b) return a[1] > b[1] end) for _, t in ipairs(d) do if getPlayerMagLevel(cid) >= t[1] then return t[2] end end return d[1][2] end function onCastSpell(cid, var) if getCreatureStorage(cid, storage) > 0 then doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) doPlayerSendCancel(cid,'Your mirror shield still has '.. getCreatureStorage(cid, storage) ..' charges.') return false end doCreatureSetStorage(cid, storage, getShieldCharges(cid)) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_GREEN) doPlayerSendCancel(cid,'You have just enabled your mirror shield with '.. getCreatureStorage(cid, storage) ..' charges.') return true end
> data/spells/scripts/kinashield.lua
Lua:--storage to store the charges of knight's ultimate shield & charges by magic level local storage, d = 1362, {{2, 1},{6, 2},{10, 3}} function getShieldCharges(cid) table.sort(d, function(a, b) return a[1] > b[1] end) for _, t in ipairs(d) do if getPlayerMagLevel(cid) >= t[1] then return t[2] end end return d[1][2] end function onCastSpell(cid, var) if getCreatureStorage(cid, storage) > 0 then doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) doPlayerSendCancel(cid,'Your ultimate shield still has '.. getCreatureStorage(cid, storage) ..' charges.') return false end doCreatureSetStorage(cid, storage, getShieldCharges(cid)) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_GREEN) doPlayerSendCancel(cid,'You have just enabled your ultimate shield with '.. getCreatureStorage(cid, storage) ..' charges.') return true end
> data/spells/spells.xml
Lua:<instant name="Ultimate Shield" words="utamo max" lvl="60" mana="200" prem="0" exhaustion="2000" needlearn="0" script="kinashield.lua"> <vocation id="4"/> <vocation id="8"/> </instant> <instant name="Mirror Shield" words="utamo gran" lvl="60" mana="600" prem="0" exhaustion="2000" needlearn="0" script="mageshield.lua"> <vocation id="2"/> <vocation id="6"/> </instant>
I haven't added the first part because he says:
LUA Setup (If you use MOD you don't need these!)
Mirror && Ultimate Shields: SP Edition with 3 counterattacks+MOD
Energy | Earth | Poison | Fire | Ice | Holy | Death
* \ / *\
_____ ________ | ________ \_____/
****** Mirror && Ultimate Shields ******/
** ** SP Edition by Cybermaster ** **/
****** * | * ******/
* | */
/ \/
*****/
*
Author: Cybermaster
Storages:
1361 > Used to count the charges of the druid´s shield.
1362 > Used to count the charges of the knight´s shield.
Description:
These are the Mirror and Absolute shields which protect the player from any elemental-based attacks, no matter they are direct or area-based, this defense nullifies any elemental attack. Both shields have charges, and can be recharged when the user casts the spell.
The first shield, which is for druids, reflects elemental attacks to the attacker, working as a mirror shield. The attack of the reflected attack depends of caster´s ML. The higher the druid´s ML is, more charges the druid gets. You can choose between these three counterattacks:
-'damage' : counterattacks with the same value of damage to attacker, and same element.
-'condition' : counterattacks adding a condition depending of the element-based attack by the target. The condition consists of 5 rounds of 2 seconds with -10 of damage. Burned, dazzled, poisoned, frozen, energy or cursed.
-'both' : both counterattacks just mentioned(damage and condition)
The other shield for knights just nullifies the attack. The higher the knight´s magic level is, more charges the knight gets.
MOD: mods/shield.xml
Lua:<?xml version="1.0" encoding="UTF-8"?> <mod name="Shield" tfs="0.3.6pl1" author="Cybermaster" web="otland.net" enabled="yes"> <config name="shield_setup"><![CDATA[ --[[ * *\ /* *\ *_____* *________* *|* *________* *\_____*/ ****** Mirror && Ultimate Shields ******/ ** ** SP Edition by Cybermaster ** **/ ****** *MOD* ******/ * *|* */ **/ \**/ *****/ * ]]-- energy = createConditionObject(CONDITION_ENERGY) setConditionParam(energy, CONDITION_PARAM_DELAYED, 1) addDamageCondition(energy, 5, 2000, -10) poison = createConditionObject(CONDITION_POISON) setConditionParam(poison, CONDITION_PARAM_DELAYED, 1) addDamageCondition(poison, 5, 2000, -10) fire = createConditionObject(CONDITION_FIRE) setConditionParam(fire, CONDITION_PARAM_DELAYED, 1) addDamageCondition(fire, 5, 2000, -10) freezing = createConditionObject(CONDITION_FREEZING) setConditionParam(freezing, CONDITION_PARAM_DELAYED, 1) addDamageCondition(freezing, 5, 2000, -10) dazzled = createConditionObject(CONDITION_DAZZLED) setConditionParam(dazzled, CONDITION_PARAM_DELAYED, 1) addDamageCondition(dazzled, 5, 2000, -10) cursed = createConditionObject(CONDITION_CURSED) setConditionParam(cursed, CONDITION_PARAM_DELAYED, 1) addDamageCondition(cursed, 5, 2000, -10) --[[ AVAILABLE OPTIONS FOR MIRROR SHIELD'S COUNTERATTACK: 'damage' : counterattacks with the same value of damage to attacker, and same element. 'condition' : counterattacks adding a condition depending of the element-based attack by the target. The condition consists of 5 rounds of 2 seconds with -10 of damage. Burned, dazzled, poisoned, frozen, energy or cursed. 'both' : both counterattacks just mentioned(damage and condition) ]]-- mirrorCounterAttack = 'condition' e,d,k = { --combat type and distance shoot effect, and condition [COMBAT_ENERGYDAMAGE] = {35,energy }, [COMBAT_EARTHDAMAGE] = {29,poison }, [COMBAT_POISONDAMAGE] = {14,poison }, [COMBAT_FIREDAMAGE] = {3, fire }, [COMBAT_ICEDAMAGE] = {28,freezing}, [COMBAT_HOLYDAMAGE] = {30,dazzled }, [COMBAT_DEATHDAMAGE] = {31,cursed } }, 1361, --storage to store druid's shield charges 1362 --storage to store knight's shield charges --array of the shields charges (Magic Level, Charges) kina_array = { {2, 1}, {6, 2}, {10, 3} } mage_array = { {20, 1}, {60, 2}, {100, 3} } function doKnightShield(p, effect) local pos = { --do not modify {x=p.x+1,y=p.y,z=p.z }, {x=p.x+1,y=p.y+1,z=p.z}, {x=p.x,y=p.y+1,z=p.z }, {x=p.x-1,y=p.y+1,z=p.z}, {x=p.x-1,y=p.y,z=p.z }, {x=p.x-1,y=p.y-1,z=p.z}, {x=p.x,y=p.y-1,z=p.z }, {x=p.x+1,y=p.y-1,z=p.z} } for i = 1, #pos do doSendDistanceShoot(p, pos[i], effect) end end function getShieldCharges(cid, array) table.sort(array, function(a, b) return a[1] > b[1] end) for _, t in ipairs(array) do if getPlayerMagLevel(cid) >= t[1] then return t[2] end end return array[1][2] end ]]></config> <event type="login" name="shield_register" event="script"><![CDATA[ function onLogin(cid) registerCreatureEvent(cid,'shield') return true end]]> </event> <event type="statschange" name="shield" event="script"><![CDATA[ domodlib('shield_setup') function onStatsChange(cid, attacker, type, combat, value) if isDruid(cid) and isCreature(attacker) and e[combat] and getCreatureStorage(cid, d) > 0 then doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_RED) doCreatureSetStorage(cid, d, getCreatureStorage(cid, d)-1) doSendDistanceShoot(getThingPos(cid), getThingPos(attacker), e[combat][1]) doPlayerSendCancel(cid, 'Your mirror shield has '.. (getCreatureStorage(cid,d) > 0 and getCreatureStorage(cid,d) or 'no') ..' charges left.') if mirrorCounterAttack == 'condition' then doTargetCombatCondition(cid, attacker, e[combat][2], CONST_ME_MAGIC_RED) elseif mirrorCounterAttack == 'damage' then doTargetCombatHealth(cid, attacker, combat, -value, -value, CONST_ME_MAGIC_RED) elseif mirrorCounterAttack == 'both' then doTargetCombatCondition(cid, attacker, e[combat][2], CONST_ME_MAGIC_RED) doTargetCombatHealth(cid, attacker, combat, -value, -value, CONST_ME_MAGIC_RED) end return false elseif isKnight(cid) and isCreature(attacker) and e[combat] and getCreatureStorage(cid, k) > 0 then doKnightShield(getThingPos(cid), e[combat][1]) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_RED) doCreatureSetStorage(cid, k, getCreatureStorage(cid, k)-1) doPlayerSendCancel(cid, 'Your ultimate shield has '.. (getCreatureStorage(cid,k) > 0 and getCreatureStorage(cid,k) or 'no') ..' charges left.') return false end return true end]]> </event> <instant name="Ultimate Shield" words="utamo max" lvl="60" mana="100" soul="3" exhaustion="2000" event="script"> <text><![CDATA[ domodlib('shield_setup') function onCastSpell(cid, var) if getCreatureStorage(cid, k) > 0 then doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) doPlayerSendCancel(cid,'Your ultimate shield still has '.. getCreatureStorage(cid, k) ..' charges.') return false end doCreatureSetStorage(cid, k, getShieldCharges(cid, kina_array)) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_GREEN) doPlayerSendCancel(cid,'You have just enabled your ultimate shield with '.. getCreatureStorage(cid, k) ..' charges.') return true end]]> </text><vocation id="4;8"/> </instant> <instant name="Mirror Shield" words="utamo gran" lvl="60" mana="300" soul="3" exhaustion="2000" event="script"><text> <![CDATA[ domodlib('shield_setup') function onCastSpell(cid, var) if getCreatureStorage(cid, d) > 0 then doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) doPlayerSendCancel(cid,'Your mirror shield still has '.. getCreatureStorage(cid, d) ..' charges.') return false end doCreatureSetStorage(cid, d, getShieldCharges(cid, mage_array)) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_GREEN) doPlayerSendCancel(cid,'You have just enabled your mirror shield with '.. getCreatureStorage(cid, d) ..' charges.') return true end]]> </text><vocation id="2;6"/> </instant> </mod>
when i try to cast the spell, my server gives me this error :
Lua:
Lua Script Error: [Spell Interface]
data/spells/scripts/support/mageshield.lua:onCastSpell
data/spells/scripts/support/mageshield.lua:15: attempt to call global 'getCreatureStorage' (a nil value)
stack traceback:
[C]: in function 'getCreatureStorage'
data/spells/scripts/support/mageshield.lua:15: in function <data/spells/scripts/support/mageshield.lua:14>
could anyone help me please?
I'm using TFS 1.3 Nekiro 8.6 server
Last edited: