• 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 Monk train skill to everybody around

caquinha

Member
Joined
Aug 8, 2016
Messages
248
Solutions
1
Reaction score
24
I saw a idea on forum to monks train shield for all around it...

I tryed to help the guys and make it to mee too xD
But not work...
Show me this error when start the server:
Code:
[6:30:13.889] [Warning - Monsters::deserializeSpell] Monk - Unknown shootEffect: physical
[6:30:13.889] [Warning - Monsters::deserializeSpell] Monk - Unknown areaEffect: 14

Anyone could help me to fix it?

Monk.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<monster name="Monk" nameDescription="a monk" race="blood" experience="200" speed="200" manacost="600">
   <health now="240" max="240"/>
   <look type="57" corpse="6080"/>
   <targetchange interval="4000" chance="10"/>
   <flags>
       <flag summonable="1"/>
       <flag attackable="1"/>
       <flag hostile="1"/>
       <flag illusionable="1"/>
       <flag convinceable="0"/>
       <flag pushable="0"/>
       <flag canpushitems="1"/>
       <flag canpushcreatures="1"/>
       <flag targetdistance="1"/>
       <flag staticattack="90"/>
       <flag runonhealth="0"/>
   </flags>
   <attacks>
       <attack name="melee" interval="2000" skill="5" attack="10"/>
       <attack name="physical" interval="2000" chance="50" range="1" radius="2" target="1" min="0" max="0">
           <attribute key="shootEffect" value="physical"/>
           <attribute key="areaEffect" value="14"/>
       </attack>
   </attacks>
   <defenses armor="30" defense="30">
       <defense name="healing" interval="500" chance="15" min="30" max="50">
           <attribute key="areaEffect" value="blueshimmer"/>
       </defense>
       <defense name="speed" interval="2000" chance="15" speedchange="300" duration="5000">
           <attribute key="areaEffect" value="redshimmer"/>
       </defense>
   </defenses>
   <elements>
       <element holyPercent="50"/>
       <element deathPercent="50"/>
       <element physicalPercent="-10"/>
   </elements>
   <immunities>
       <immunity invisible="1"/>
   </immunities>
   <voices interval="5000" chance="10">
       <voice sentence="Repent Heretic!"/>
       <voice sentence="A prayer to the almighty one!"/>
       <voice sentence="I will punish the sinners!"/>
   </voices>
   <loot>
       <item id="2148" countmax="18" chance="15000"/><!-- gold coin -->
       <item id="2689" chance="20000"/><!-- bread -->
       <item id="1949" chance="2000"/><!-- scroll -->
       <item id="2044" chance="880"/><!-- lamp -->
       <item id="10563" chance="4930"/><!-- Book of Prayers -->
       <item id="2015" chance="820"/><!-- brown flask -->
       <item id="12448" chance="2950"/><!-- rope belt -->
       <item id="12449" chance="1001"/><!-- safety pins -->
       <item id="2401" chance="440"/><!-- staff -->
       <item id="2177" chance="1002"/><!-- life crystal -->
       <item id="2193" chance="2240"/><!-- ankh -->
       <item id="2166" chance="100"/><!-- power ring -->
   </loot>
</monster>
 
here the list of possible types of areaEffect and shootEffect
Code:
CONST_ME_DRAWBLOOD
CONST_ME_LOSEENERGY
CONST_ME_POFF
CONST_ME_BLOCKHIT
CONST_ME_EXPLOSIONAREA
CONST_ME_EXPLOSIONHIT
CONST_ME_FIREAREA
CONST_ME_YELLOW_RINGS
CONST_ME_GREEN_RINGS
CONST_ME_HITAREA
CONST_ME_TELEPORT
CONST_ME_ENERGYHIT
CONST_ME_MAGIC_BLUE
CONST_ME_MAGIC_RED
CONST_ME_MAGIC_GREEN
CONST_ME_HITBYFIRE
CONST_ME_HITBYPOISON
CONST_ME_MORTAREA
CONST_ME_SOUND_GREEN
CONST_ME_SOUND_RED
CONST_ME_POISONAREA
CONST_ME_SOUND_YELLOW
CONST_ME_SOUND_PURPLE
CONST_ME_SOUND_BLUE
CONST_ME_SOUND_WHITE
CONST_ME_BUBBLES
CONST_ME_CRAPS
CONST_ME_GIFT_WRAPS
CONST_ME_FIREWORK_YELLOW
CONST_ME_FIREWORK_RED
CONST_ME_FIREWORK_BLUE
CONST_ME_STUN
CONST_ME_SLEEP
CONST_ME_WATERCREATURE
CONST_ME_GROUNDSHAKER
CONST_ME_HEARTS
CONST_ME_FIREATTACK
CONST_ME_ENERGYAREA
CONST_ME_SMALLCLOUDS
CONST_ME_HOLYDAMAGE
CONST_ME_BIGCLOUDS
CONST_ME_ICEAREA
CONST_ME_ICETORNADO
CONST_ME_ICEATTACK
CONST_ME_STONES
CONST_ME_SMALLPLANTS
CONST_ME_CARNIPHILA
CONST_ME_PURPLEENERGY
CONST_ME_YELLOWENERGY
CONST_ME_HOLYAREA
CONST_ME_BIGPLANTS
CONST_ME_CAKE
CONST_ME_GIANTICE
CONST_ME_WATERSPLASH
CONST_ME_PLANTATTACK
CONST_ME_TUTORIALARROW
CONST_ME_TUTORIALSQUARE
CONST_ME_MIRRORHORIZONTAL
CONST_ME_MIRRORVERTICAL
CONST_ME_SKULLHORIZONTAL
CONST_ME_SKULLVERTICAL
CONST_ME_ASSASSIN
CONST_ME_STEPSHORIZONTAL
CONST_ME_BLOODYSTEPS
CONST_ME_STEPSVERTICAL
CONST_ME_YALAHARIGHOST
CONST_ME_BATS
CONST_ME_SMOKE
CONST_ME_INSECTS
CONST_ME_DRAGONHEAD
CONST_ME_ORCSHAMAN
CONST_ME_ORCSHAMAN_FIRE
CONST_ME_THUNDER
CONST_ME_FERUMBRAS
CONST_ME_CONFETTI_HORIZONTAL
CONST_ME_CONFETTI_VERTICAL
CONST_ME_BLACKSMOKE
Code:
CONST_ANI_SPEAR
CONST_ANI_BOLT
CONST_ANI_ARROW
CONST_ANI_FIRE
CONST_ANI_ENERGY
CONST_ANI_POISONARROW
CONST_ANI_BURSTARROW
CONST_ANI_THROWINGSTAR
CONST_ANI_THROWINGKNIFE
CONST_ANI_SMALLSTONE
CONST_ANI_DEATH
CONST_ANI_LARGEROCK
CONST_ANI_SNOWBALL
CONST_ANI_POWERBOLT
CONST_ANI_POISON
CONST_ANI_INFERNALBOLT
CONST_ANI_HUNTINGSPEAR
CONST_ANI_ENCHANTEDSPEAR
CONST_ANI_REDSTAR
CONST_ANI_GREENSTAR
CONST_ANI_ROYALSPEAR
CONST_ANI_SNIPERARROW
CONST_ANI_ONYXARROW
CONST_ANI_PIERCINGBOLT
CONST_ANI_WHIRLWINDSWORD
CONST_ANI_WHIRLWINDAXE
CONST_ANI_WHIRLWINDCLUB
CONST_ANI_ETHEREALSPEAR
CONST_ANI_ICE
CONST_ANI_EARTH
CONST_ANI_HOLY
CONST_ANI_SUDDENDEATH
CONST_ANI_FLASHARROW
CONST_ANI_FLAMMINGARROW
CONST_ANI_SHIVERARROW
CONST_ANI_ENERGYBALL
CONST_ANI_SMALLICE
CONST_ANI_SMALLHOLY
CONST_ANI_SMALLEARTH
CONST_ANI_EARTHARROW
CONST_ANI_EXPLOSION
CONST_ANI_CAKE
CONST_ANI_TARSALARROW
CONST_ANI_VORTEXBOLT
CONST_ANI_PRISMATICBOLT
CONST_ANI_CRYSTALLINEARROW
CONST_ANI_DRILLBOLT
CONST_ANI_ENVENOMEDARROW
CONST_ANI_WEAPONTYPE
to use it you need put it in lower case and delete the CONST_ME_ or CONST_ANI_
exemple:
Code:
<attribute key="areaEffect" value="fire"/>
shootEffect
Code:
<attribute key="shootEffect" value="tarsalarrow"/>
also the names of "CONST_ME_MAGIC_BLUE, // RED // GREEN" is different than the describled
Code:
CONST_ME_MAGIC_BLUE = blushimmer
CONST_ME_MAGIC_RED = redshimmer
CONST_ME_MAGIC_GREEN = greenshimmer
 
Use this, instead of your attacks:
Code:
   <attacks>
       <attack name="physical" interval="1000" chance="100" range="7" radius="3" target="0" min="-1" max="-20"/>
   </attacks>
 
Ty u all guys, it is almost done...
It's work if my mage attack my knight training...

How to make it work without need my mage attack...
Like heal, happen everytime?

Code:
<?xml version="1.0" encoding="UTF-8"?>
<monster name="Monk" nameDescription="a monk" race="blood" experience="200" speed="200" manacost="600">
   <health now="240" max="240"/>
   <look type="57" corpse="6080"/>
   <targetchange interval="4000" chance="10"/>
   <flags>
       <flag summonable="1"/>
       <flag attackable="1"/>
       <flag hostile="1"/>
       <flag illusionable="1"/>
       <flag convinceable="0"/>
       <flag pushable="1"/>
       <flag canpushitems="0"/>
       <flag canpushcreatures="0"/>
       <flag targetdistance="1"/>
       <flag staticattack="90"/>
       <flag runonhealth="0"/>
   </flags>
   <attacks>
       <attack name="melee" interval="2000" skill="5" attack="10"/>
       <attack name="physical" interval="1000" chance="100" range="7" radius="4" target="0" min="0" max="0">
           <attribute key="shootEffect" value="smallstone"/>
           <attribute key="areaEffect" value="poff"/>
       </attack>
   </attacks>
   <defenses armor="30" defense="30">
       <defense name="healing" interval="500" chance="15" min="30" max="50">
           <attribute key="areaEffect" value="blueshimmer"/>
       </defense>
       <defense name="speed" interval="2000" chance="15" speedchange="300" duration="5000">
           <attribute key="areaEffect" value="redshimmer"/>
       </defense>
   </defenses>
   <elements>
       <element holyPercent="50"/>
       <element deathPercent="50"/>
       <element physicalPercent="-10"/>
   </elements>
   <immunities>
       <immunity invisible="1"/>
   </immunities>
   <voices interval="5000" chance="10">
       <voice sentence="Repent Heretic!"/>
       <voice sentence="A prayer to the almighty one!"/>
       <voice sentence="I will punish the sinners!"/>
   </voices>
   <loot>
       <item id="2148" countmax="18" chance="15000"/><!-- gold coin -->
       <item id="2689" chance="20000"/><!-- bread -->
       <item id="1949" chance="2000"/><!-- scroll -->
       <item id="2044" chance="880"/><!-- lamp -->
       <item id="10563" chance="4930"/><!-- Book of Prayers -->
       <item id="2015" chance="820"/><!-- brown flask -->
       <item id="12448" chance="2950"/><!-- rope belt -->
       <item id="12449" chance="1001"/><!-- safety pins -->
       <item id="2401" chance="440"/><!-- staff -->
       <item id="2177" chance="1002"/><!-- life crystal -->
       <item id="2193" chance="2240"/><!-- ankh -->
       <item id="2166" chance="100"/><!-- power ring -->
   </loot>
</monster>
 
Code:
<defense type="instant" name="berserk" interval="1000" chance="100"/>

This code will make your monster cast a Berserk (exori) spell every 1 second. Your Berserk spell is in data/spells/scripts/attack/berserk.lua.

You can add a new spell to your spells.xml, like berserk2 and make a new lua file with spell's code.

To set damage to be flat you can use this formula:
Code:
setCombatFormula(combat1, COMBAT_FORMULA_DAMAGE, -100, 0, -200, 0)
This will make your new berserk2 spell do damage between 100-200.
 
Code:
<defense type="instant" name="berserk" interval="1000" chance="100"/>

This code will make your monster cast a Berserk (exori) spell every 1 second. Your Berserk spell is in data/spells/scripts/attack/berserk.lua.

You can add a new spell to your spells.xml, like berserk2 and make a new lua file with spell's code.

To set damage to be flat you can use this formula:
Code:
setCombatFormula(combat1, COMBAT_FORMULA_DAMAGE, -100, 0, -200, 0)
This will make your new berserk2 spell do damage between 100-200.

What is wrong?
Code:
[10:33:54.281] [Error - Spell Interface]
[10:33:54.281] data/spells/scripts/monsters/MonkTrainShield.lua
[10:33:54.281] Description:
[10:33:54.281] (luaSetCombatArea) Area not found

Code:
    <instant name="MonkTrainShield" words="!MonkTrainShield" exhaustion="2000" needlearn="1" event="script" value="monsters/MonkTrainShield.lua" />

Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 3)
setCombatParam(combat, COMBAT_PARAM_USECHARGES, true)

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

function onGetFormulaValues(cid, level, maglevel)
    min = 0
    max = 0
    return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

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

Code:
<?xml version="1.0" encoding="UTF-8"?>
<monster name="Monk" nameDescription="a monk" race="blood" experience="200" speed="200" manacost="600">
   <health now="240" max="240"/>
   <look type="57" corpse="6080"/>
   <targetchange interval="4000" chance="10"/>
   <flags>
       <flag summonable="1"/>
       <flag attackable="1"/>
       <flag hostile="1"/>
       <flag illusionable="1"/>
       <flag convinceable="0"/>
       <flag pushable="1"/>
       <flag canpushitems="0"/>
       <flag canpushcreatures="0"/>
       <flag targetdistance="1"/>
       <flag staticattack="90"/>
       <flag runonhealth="0"/>
   </flags>
   <attacks>
       <attack name="melee" interval="2000" skill="5" attack="10"/>
       <!-- <attack name="physical" interval="1000" chance="100" range="7" radius="4" target="0" min="0" max="0">
           <attribute key="shootEffect" value="smallstone"/>
           <attribute key="areaEffect" value="poff"/>
       </attack> -->
   </attacks>
   <defenses armor="30" defense="30">
       <defense name="healing" interval="500" chance="15" min="30" max="50">
           <attribute key="areaEffect" value="blueshimmer"/>
       </defense>
       <defense name="speed" interval="2000" chance="15" speedchange="300" duration="5000">
           <attribute key="areaEffect" value="redshimmer"/>
       </defense>
       <defense type="instant" name="MonkTrainShield" interval="500" chance="100"/>
   </defenses>
   <elements>
       <element holyPercent="50"/>
       <element deathPercent="50"/>
       <element physicalPercent="-10"/>
   </elements>
   <immunities>
       <immunity invisible="1"/>
   </immunities>
   <voices interval="5000" chance="10">
       <voice sentence="Repent Heretic!"/>
       <voice sentence="A prayer to the almighty one!"/>
       <voice sentence="I will punish the sinners!"/>
   </voices>
   <loot>
       <item id="2148" countmax="18" chance="15000"/><!-- gold coin -->
       <item id="2689" chance="20000"/><!-- bread -->
       <item id="1949" chance="2000"/><!-- scroll -->
       <item id="2044" chance="880"/><!-- lamp -->
       <item id="10563" chance="4930"/><!-- Book of Prayers -->
       <item id="2015" chance="820"/><!-- brown flask -->
       <item id="12448" chance="2950"/><!-- rope belt -->
       <item id="12449" chance="1001"/><!-- safety pins -->
       <item id="2401" chance="440"/><!-- staff -->
       <item id="2177" chance="1002"/><!-- life crystal -->
       <item id="2193" chance="2240"/><!-- ankh -->
       <item id="2166" chance="100"/><!-- power ring -->
   </loot>
</monster>
 
Here you are:
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, TRUE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
setCombatFormula(combat, COMBAT_FORMULA_DAMAGE, -100, 0, -200, 0)

local area = createCombatArea({
{0, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 3, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 0}
})
setCombatArea(combat, area)

function onCastSpell(cid, var)
    return doCombat(cid, combat, var)
end
 
Ty you so much!

Got only last problem...
If i'm a mage and i summon to my friend train, everybody who enter in area make me be a PK, and can make me take red skull..

There is a way to
IF monster is summoned - spell affect you only if u be in party with monks owner
ELSEIF monster is summoned - show you one msg ('you need to join party with monks owner to train shield')

ELSEIF if monster is not summoned - spell affect u normal

Idk if it will work, but i search on web and got this scripts to party members, and it's work in my 0.4
But idk how to make changes in my server:

Code:
    <!-- Party Spells -->
   <instant name="Train Party" words="utito mas sio" lvl="32" mana="60" prem="1" aggressive="0" selftarget="1" exhaustion="1000" needlearn="0" event="script" value="party/train.lua">
       <vocation id="8"/>
   </instant>
   <instant name="Protect Party" words="utamo mas sio" lvl="32" mana="90" prem="1" aggressive="0" selftarget="1" exhaustion="1000" needlearn="0" event="script" value="party/protect.lua">
       <vocation id="7"/>
   </instant>
   <instant name="Heal Party" words="utura mas sio" lvl="32" mana="120" prem="1" aggressive="0" selftarget="1" exhaustion="1000" needlearn="0" event="script" value="party/heal.lua">
       <vocation id="6"/>
   </instant>
   <instant name="Enchant Party" words="utori mas sio" lvl="32" mana="120" prem="1" aggressive="0" selftarget="1" exhaustion="1000" needlearn="0" event="script" value="party/enchant.lua">
       <vocation id="5"/>
   </instant>

enchant.lua
Code:
local combat = createCombatObject()
local area = createCombatArea(AREA_CROSS5X5)
setCombatArea(combat, area)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)

local condition = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition, CONDITION_PARAM_SUBID, 3)
setConditionParam(condition, CONDITION_PARAM_BUFF, true)
setConditionParam(condition, CONDITION_PARAM_TICKS, 2 * 60 * 1000)
setConditionParam(condition, CONDITION_PARAM_STAT_MAGICLEVEL, 1)

local config = {
   baseMana = 120,
   hardcoreManaSpent = getConfigValue("addManaSpentInPvPZone")
}

function onCastSpell(cid, var)
   local pos, membersList = getCreaturePosition(cid), getPartyMembers(cid)
   if(membersList == nil or type(membersList) ~= 'table' or table.maxn(membersList) <= 1) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOPARTYMEMBERSINRANGE)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   local affectedList = {}
   for _, pid in ipairs(membersList) do
       if(getDistanceBetween(getCreaturePosition(pid), pos) <= 36) then
           table.insert(affectedList, pid)
       end
   end

   local tmp = table.maxn(affectedList)
   if(tmp <= 1) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOPARTYMEMBERSINRANGE)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   local mana = math.ceil((0.9 ^ (tmp - 1) * config.baseMana) * tmp)
   if(getCreatureMana(cid) < mana) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   if(not doCombat(cid, combat, var)) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   doCreatureAddMana(cid, -(mana - config.baseMana), false)
   if(not getPlayerFlagValue(cid, PlayerFlag_NotGainMana) and (not getTileInfo(getThingPosition(cid)).hardcore or config.hardcoreManaSpent)) then
       doPlayerAddSpentMana(cid, (mana - config.baseMana))
   end

   for _, pid in ipairs(affectedList) do
       doAddCondition(pid, condition)
   end

   return true
end

train.lua
Code:
local combat = createCombatObject()
local area = createCombatArea(AREA_CROSS5X5)
setCombatArea(combat, area)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)

local condition = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition, CONDITION_PARAM_SUBID, 1)
setConditionParam(condition, CONDITION_PARAM_BUFF, true)
setConditionParam(condition, CONDITION_PARAM_TICKS, 2 * 60 * 1000)
setConditionParam(condition, CONDITION_PARAM_SKILL_MELEE, 3)
setConditionParam(condition, CONDITION_PARAM_SKILL_DISTANCE, 3)

local config = {
   baseMana = 60,
   hardcoreManaSpent = getConfigValue("addManaSpentInPvPZone")
}

function onCastSpell(cid, var)
   local pos, membersList = getCreaturePosition(cid), getPartyMembers(cid)
   if(membersList == nil or type(membersList) ~= 'table' or table.maxn(membersList) <= 1) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOPARTYMEMBERSINRANGE)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   local affectedList = {}
   for _, pid in ipairs(membersList) do
       if(getDistanceBetween(getCreaturePosition(pid), pos) <= 36) then
           table.insert(affectedList, pid)
       end
   end

   local tmp = table.maxn(affectedList)
   if(tmp <= 1) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOPARTYMEMBERSINRANGE)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   local mana = math.ceil((0.9 ^ (tmp - 1) * config.baseMana) * tmp)
   if(getCreatureMana(cid) < mana) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   if(not doCombat(cid, combat, var)) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   doCreatureAddMana(cid, -(mana - config.baseMana), false)
   if(not getPlayerFlagValue(cid, PlayerFlag_NotGainMana) and (not getTileInfo(getThingPosition(cid)).hardcore or config.hardcoreManaSpent)) then
       doPlayerAddSpentMana(cid, (mana - config.baseMana))
   end

   for _, pid in ipairs(affectedList) do
       doAddCondition(pid, condition)
   end

   return true
end

protect.lua
Code:
local combat = createCombatObject()
local area = createCombatArea(AREA_CROSS5X5)
setCombatArea(combat, area)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)

local condition = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition, CONDITION_PARAM_SUBID, 2)
setConditionParam(condition, CONDITION_PARAM_BUFF, true)
setConditionParam(condition, CONDITION_PARAM_TICKS, 2 * 60 * 1000)
setConditionParam(condition, CONDITION_PARAM_SKILL_SHIELD, 2)

local config = {
   baseMana = 90,
   hardcoreManaSpent = getConfigValue("addManaSpentInPvPZone")
}

function onCastSpell(cid, var)
   local pos, membersList = getCreaturePosition(cid), getPartyMembers(cid)
   if(membersList == nil or type(membersList) ~= 'table' or table.maxn(membersList) <= 1) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOPARTYMEMBERSINRANGE)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   local affectedList = {}
   for _, pid in ipairs(membersList) do
       if(getDistanceBetween(getCreaturePosition(pid), pos) <= 36) then
           table.insert(affectedList, pid)
       end
   end

   local tmp = table.maxn(affectedList)
   if(tmp <= 1) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOPARTYMEMBERSINRANGE)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   local mana = math.ceil((0.9 ^ (tmp - 1) * config.baseMana) * tmp)
   if(getCreatureMana(cid) < mana) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   if(not doCombat(cid, combat, var)) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   doCreatureAddMana(cid, -(mana - config.baseMana), false)
   if(not getPlayerFlagValue(cid, PlayerFlag_NotGainMana) and (not getTileInfo(getThingPosition(cid)).hardcore or config.hardcoreManaSpent)) then
       doPlayerAddSpentMana(cid, (mana - config.baseMana))
   end

   for _, pid in ipairs(affectedList) do
       doAddCondition(pid, condition)
   end

   return true
end

heal.lua
Code:
local combat = createCombatObject()
local area = createCombatArea(AREA_CROSS5X5)
setCombatArea(combat, area)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)

local condition = createConditionObject(CONDITION_REGENERATION)
setConditionParam(condition, CONDITION_PARAM_SUBID, 1)
setConditionParam(condition, CONDITION_PARAM_BUFF, true)
setConditionParam(condition, CONDITION_PARAM_TICKS, 2 * 60 * 1000)
setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, 20)
setConditionParam(condition, CONDITION_PARAM_HEALTHTICKS, 2000)

local config = {
   baseMana = 120,
   hardcoreManaSpent = getConfigValue("addManaSpentInPvPZone")
}

function onCastSpell(cid, var)
   local pos, membersList = getCreaturePosition(cid), getPartyMembers(cid)
   if(membersList == nil or type(membersList) ~= 'table' or table.maxn(membersList) <= 1) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOPARTYMEMBERSINRANGE)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   local affectedList = {}
   for _, pid in ipairs(membersList) do
       if(getDistanceBetween(getCreaturePosition(pid), pos) <= 36) then
           table.insert(affectedList, pid)
       end
   end

   local tmp = table.maxn(affectedList)
   if(tmp <= 1) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOPARTYMEMBERSINRANGE)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   local mana = math.ceil((0.9 ^ (tmp - 1) * config.baseMana) * tmp)
   if(getCreatureMana(cid) < mana) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   if(not doCombat(cid, combat, var)) then
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
       doSendMagicEffect(pos, CONST_ME_POFF)
       return false
   end

   doCreatureAddMana(cid, -(mana - config.baseMana), false)
   if(not getPlayerFlagValue(cid, PlayerFlag_NotGainMana) and (not getTileInfo(getThingPosition(cid)).hardcore or config.hardcoreManaSpent)) then
       doPlayerAddSpentMana(cid, (mana - config.baseMana))
   end

   for _, pid in ipairs(affectedList) do
       doAddCondition(pid, condition)
   end

   return true
end
 
I removed aoe effect but it will still works. Just replace it with berserk2.
Code:
local config = {
    range = 2 -- 1 means square 3x3 like exori, 2 means square 5x5, 3 means square 7x7
}

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, TRUE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
setCombatFormula(combat, COMBAT_FORMULA_DAMAGE, -100, 0, -200, 0)

function onCastSpell(cid, var)
    local owner = getCreatureMaster(cid)
    if owner == nil then
        owner = cid
    end
    local targets = getSpectators(getCreaturePosition(cid), config.range, config.range, false)
    if targets ~= nil then
        for i = 1, #targets do
            if isPlayer(targets[i]) == true then
                if getPartyLeader(owner) == getPartyLeader(targets[i]) then
                    doCombat(cid, combat, numberToVariant(targets[i]))
                end
            end
        end
    end
    return true
end

Now your monster will cast this spell only if is summoned by a player. It wont cast spell if is summoned by GM with /m command or respawned on map. Only players in the same party as summon's master will be afected by this attack.
 
Amazing bro, ty you a lot, but its not work \/
Its attacking everybody... Even if isnt in the party, make the mage take PK
Code:
local config = {
    range = 2 -- 1 means square 3x3 like exori, 2 means square 5x5, 3 means square 7x7
}

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, TRUE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 0)
setCombatFormula(combat, COMBAT_FORMULA_DAMAGE, 0, 0, 0, 0)

function onCastSpell(cid, var)
    local owner = getCreatureMaster(cid)
    if owner == nil then
        owner = cid
    end
    local targets = getSpectators(getCreaturePosition(cid), config.range, config.range, false)
    if targets ~= nil then
        for i = 1, #targets do
            if isPlayer(targets[i]) == true then
                if getPartyLeader(owner) == getPartyLeader(targets[i]) then
                    doCombat(cid, combat, numberToVariant(targets[i]))
                else
                   doPlayerSendTextMessage(targets[i], 20, "You need to join a party with owner of Monk to train shield.")
                end
            end
        end
    end
    return true
end
 
change
Code:
doCombat(cid, combat, numberToVariant(targets[i]))
with
Code:
doCombat(0, combat, numberToVariant(targets[i]))

if this doesnt solve the problem
use this, instead:
Code:
doPlayerAddSkillTry(targets[i], 5, 1)
 
change
Code:
doCombat(cid, combat, numberToVariant(targets[i]))
with
Code:
doCombat(0, combat, numberToVariant(targets[i]))

if this doesnt solve the problem
use this, instead:
Code:
doPlayerAddSkillTry(targets[i], 5, 1)

I think the problem are here:
Code:
            if isPlayer(targets[i]) == true then
                if getPartyLeader(owner) == getPartyLeader(targets[i]) then

Because the spell work fine, but never enter on this ELSE
Code:
                else
                   doPlayerSendTextMessage(targets[i], 20, "You need to join a party with owner of Monk to train shield.")
                end
 
Found!
Code:
if isPlayer(targets[i]) == true then
     if getPartyLeader(owner) ~= nil then
          if getPartyLeader(owner) == getPartyLeader(targets[i]) then

Forgot 0.4 TFS doesn't return cid if there's no party at all.
 
Ty you a lot guys

But not working yet,
when i invite party show me this:
Code:
doPlayerSendTextMessage(targets[i], 20, "You need to join a party with owner of Monk to train shield.")

Else, nothing happen
 
Back
Top