sayter
Apprentice
Posts: 2
Likes Given: 0
Likes Received: 0 in 0 posts
Joined: Sep 2013
Reputation: 0
|
Hmm. Issues with this script
Hey all. I took a break a long time ago from scripting and the like.
Long story short, I broke a script and could not determine what was going on.
It worked fine, but something got screwed along the way.
It's using an older combat system, and the gist of it is this: Doing/taking damage does not seem to function properly anymore.
Im curious if anyones eyes can pick up what the error might be.
Im unsure if its @gethit, or @hit, or tied to the defense functions.
ENTIRE script is below, to make it easier in a way. Nothing will be omitted this way. Apologies for the length.
Hopefully someone can figure it out... I've run out of ideas. Damage "can" be done, but almost never. I've had a character fighting an Ogre with 100 wrestling and anatomy for about 2 hours. He's still alive.Down 80 hp, but alive. Should have taken seconds, as he is naked and unarmed with 0 wrestling.
It uses a script someone else designed, but is heavily modified.
also unsure of who's original script this is. It's heavily modified though
Code:
//**************************************************************************
//SPHERE by : Menasoft ©1997-2004
//www.sphereserver.com
// All SPHERE script files and formats are copyright Menasoft & Partners.
// This file may be freely edited for personal use, but may not be distributed
// in whole or in part, in any format without express written permission from
// Menasoft & Partners. All donations and contributions
// become the property of Menasoft & Partners.
//****************************************************************************
// FILE LAST UPDATED: Friday, August 18, 2006
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Basic AoS-Style Combat System,
//according to informations found on stratics (http://uo.stratics.com/content/arms-armor/combat.php)
//Featuring some OSI magic items' properties, Damage types and Resistances:
//
//Magic Item properties:
//To set them you only have to set the relevant tag, you can set them indifferently on weapon or on character
//Swing Speed Increase (tag.SwingSpeedIncrease): % increase attack speed
//Hit Chance Increase (tag.HitChanceIncrease): % increase hit chance
//hithcance decrease (tag.hitchancedecreat): % lower hit chance
//Defense Chance Increase (tag.DefenseChanceIncrease) note: this can be set both on shields and weapons: % decrease attacker's hit chance
//Damage Increase (tag.DamageIncrease): % increase damage
//Damage Decrease (tag.DamageDecrease): % lower damage
//added by me
//Life Leech = LIFELEECH
//Mana Leech = MANALEECH
//Stam Leech = STAMLEECH
//Dispel = TAG.HITDISPEL=1
//Fireball = TAG.HITFIREBALL=<R2,40>
//Harm = TAG.HITHARM=<R2,40>
//Lightning = TAG.HITLIGHTNING=<R2,40>
//Magic Arrow = TAG.MAGICARROW=<R2,40>
//All the others AOS property can be easily scripted as separate events, using the new triggers included in this system.
//
//New triggers:
//@Parry (shields/weapons): fires whenever the item is used to succesfully parry a blow. Setting VAR.RETURN 1 will nullify the parry. (SRC=the attacker, CONT=the player who parried, default object=the item)
//@DamageCalc (weapons and chars): fires after the damage and damage type calculation, but before any reduction. VAR.ARGN1 is the damage. Note that herein you can modify the damage type converters, accessing SRC.TAG.TEMP_xDAMAGE, where x can be one of the five damage types (PHYSICAL, FIRE, COLD, ENERGY, POISON). (SRC=the attacked, default object=the attacker or the weapon with this trigger)
//@DamageAbsorb (chars): fires after the damage absorption. VAR.ARGN1 is the damage, setting it to 0 will nullify the attack (SRC=the attacker, default=the attacked)
//For example, one could use @DamageCalc on a weapon to script the "Hit Life Leech" property using something like this:
//[TYPEDEF e_hit_life_leech]
//ON=@DamageCalc
//IF (RAND(100)<<TAG0.HIT_LIFE_LEECH>)
// CONT.HITS += <EVAL (<VAR.ARGN1>*30)/100>
//ENDIF
//
//Damage types:
//These can be set on chars and/or on weapons (if char has a weapon equipped it uses weapon's dam types, otherwise it uses char's):
//TAG.PhysicalDamage
//TAG.FireDamage
//TAG.ColdDamage
//TAG.PoisonDamage
//TAG.EnergyDamage
//Their sum should be 100, but they work fine also if their sum is greater or lower, in which case the char would deal more or less damage.
//
//Resistances:
//These must be set on chars. Every piece of armor should add its resistance to the char's total
//MODAR (that is physical resistance, since we don't have resphysical... don't care about it, since the old AR is not used in this system)
//RESFIRE
//RESCOLD
//RESPOISON
//RESENERGY
//Each resistance is capped at 70. You can easily modify this cap inside the f_cs_damageabsorption function
//
//NOTE: damage calculations are balanced for shards with aos weapon damage, if you use this combat system without editing standard sphere weapons damage expect very high damage.
//
//KNOWN ISSUES:
// - weapons and armors don't get damaged
// - poison doesn't get applied (but it's good this way, since in AoS you have to use the Infectious strike ability to poison a target)
/////////////////////////////////////////////////////////////////////////
//Support functions
[FUNCTION min]
RETURN <QVAL <ARGN1> < <ARGN2>? <ARGN1> : <ARGN2>>
[FUNCTION max]
RETURN <QVAL <ARGN2> < <ARGN1>? <ARGN1> : <ARGN2>>
[FUNCTION percent]
RETURN <EVAL (<ARGN1>*<ARGN2>)/100>
[FUNCTION IsWeapon]
IF ((<LAYER>==1) || (<LAYER>==2)) && (<DAM>)
RETURN 1
ENDIF
RETURN 0
/////////////////////////////////////////////////////////////////////////
//AosDamage function
//With this function you can easily make it so spells and other effects use the resistance system
//Usage: AOSDAMAGE <DAM> <PHYS> <FIRE> <COLD> <POIS> <ENER> <SOURCE>
//dam=the raw damage to deal, phys/fire/cold/pois/ener=the percent of this kind of damage to deal, source=the source of the damage (defaults to src)
//Example: AOSDAMAGE 100 25 0 25 40 10 <SRC.UID> (this would deal 25% physical, 25% cold, 40% poison and 10% energy damage)
//If you want to deal 100% dam of a type, you can more simply do:
//AOSDAMAGE <DAM> <DAMTYPE> <SOURCE>
//where damtype is the physical / fire / cold / poison / energy (they are defname, as you can see below)
//Example: AOSDAMAGE 50 fire <SRC.UID> (this would deal 100% fire damage)
//If you don't specify a dam type, the damage won't be reduced
//Note: this functions isn't used in the combat system
[DEFNAME aos_damtypes]
physical 0efff0000
fire 0efff0001
cold 0efff0002
poison 0efff0003
energy 0efff0004
[FUNCTION AOSDamage]
LOCAL.DAM=<STRARG <ARGS>>
ARGS=<STREAT <ARGS>>
LOCAL.PHYSICAL=<STRARG <ARGS>>
IF (<LOCAL.PHYSICAL>&0efff0000)
DOSWITCH (<LOCAL.PHYSICAL>&~0efff0000)
TAG.TEMP_PHYSICALDAM=100
TAG.TEMP_FIREDAM=100
TAG.TEMP_COLDDAM=100
TAG.TEMP_POISONDAM=100
TAG.TEMP_ENERGYDAM=100
ENDDO
ARGS=<STREAT <ARGS>>
LOCAL.SOURCE=<STRARG <ARGS>>
DAMAGE <LOCAL.DAM> 0 <LOCAL.SOURCE>
ELSE
TAG.TEMP_PHYSICALDAM=<LOCAL.PHYSICAL>
ARGS=<STREAT <ARGS>>
TAG.TEMP_FIREDAM=<STRARG <ARGS>>
ARGS=<STREAT <ARGS>>
TAG.TEMP_COLDDAM=<STRARG <ARGS>>
ARGS=<STREAT <ARGS>>
TAG.TEMP_POISONDAM=<STRARG <ARGS>>
ARGS=<STREAT <ARGS>>
TAG.TEMP_ENERGYDAM=<STRARG <ARGS>>
ARGS=<STREAT <ARGS>>
LOCAL.SOURCE=<STRARG <ARGS>>
DAMAGE <LOCAL.DAM> 0 <LOCAL.SOURCE>
ENDIF
/////////////////////////////////////////////////////////////////////////
//Combat System functions
[FUNCTION f_cs_attackspeed]
OBJ=<ARGN1>
IF (<ACTION>!=skill_wrestling) && (<OBJ.SPEED>)
LOCAL.SPEED=<EVAL (((70000/((<dex>+100)*<OBJ.SPEED>))/4)*50)-5>
ELSE
//LOCAL.SPEED=<EVAL (((80000/((<dex>+100)*50))/4)*10)-5> ************ORIGINAL CODE --> new variables slightly different
LOCAL.SPEED=<eval (((80000/((<dex>+100)*50))/4)*10)-5> //perhaps try Dex instead of Stam?
ENDIF
LOCAL.SwingSpeedIncrease=<OBJ.TAG0.SwingSpeedIncrease>+<TAG0.SwingSpeedIncrease>
IF (<LOCAL.SwingSpeedIncrease>)
LOCAL.SPEED -= <Percent <LOCAL.SwingSpeedIncrease>, <LOCAL.SPEED>>
ENDIF
//attack speed is capped at 1.0 sec originally. ive edited it to 0.4 to see what happens
RETURN <Max <LOCAL.SPEED>,0.4>
[FUNCTION f_cs_chancetohit]
LOCAL.ATKSKILL=<I.<SERV.SKILL.<ACTION>.KEY>>
IF (<SRC.ACTION>==skill_swordsmanship) || (<SRC.ACTION>==skill_macefighting) || (<SRC.ACTION>==skill_fencing)
LOCAL.DEFSKILL=<SRC.<SERV.SKILL.<SRC.ACTION>.KEY>>
ELSE
LOCAL.DEFSKILL=<SRC.WRESTLING>
ENDIF
OBJ=<ARGN1>
//both hit and def increase are capped at 100%
LOCAL.HitChanceIncrease=<OBJ.TAG0.HitChanceIncrease>+<TAG0.HitChanceIncrease>+-<tag0.hitchancedecrease>+-<obj.tag0.hitchancedecrease>
LOCAL.ATK=<EVAL (<LOCAL.ATKSKILL>+200)*(100+<Min <LOCAL.HitChanceIncrease>,100>)>
LOCAL.DefenseChanceIncrease=<SRC.FINDLAYER.1.TAG0.DefenseChanceIncrease>+<SRC.FINDLAYER.2.TAG0.DefenseChanceIncrease>+<SRC.TAG0.DefenseChanceIncrease>+-<SRC.FINDLAYER.2.TAG0.DefenseChanceDecrease>
LOCAL.DEF=<EVAL (<LOCAL.DEFSKILL>+200)*((100+<Min <LOCAL.DefenseChanceIncrease>,100>)*2)>
LOCAL.CHANCE=<Max <EVAL (<LOCAL.ATK>*1000)/<LOCAL.DEF>>,2.0>
SKILLGAIN <SERV.SKILL.<ACTION>.KEY> 1
IF (RAND(1000)<<LOCAL.CHANCE>)
RETURN 0
ELSE
RETURN -10
ENDIF
[FUNCTION f_cs_chancetoblock]
//***********************************************************
//STandard Shield Parry Chance
//***********************************************************
IF (<FINDLAYER.2.TYPE>==t_shield)
LOCAL.CHANCE=<Max <EVAL (<PARRYING>-<constitution>)/4>,2.0>
ELSE
//***********************************************************
//One Handed Weapon Parry Chance
//***********************************************************
IF (<FINDLAYER.1.ISWEAPON>) //one handed
LOCAL.NEW=(<PARRYING>*<constitution>)/48000
//***********************************************************
//2-handed Weapon Parry Chance
//***********************************************************
ELSEIF (<FINDLAYER.2.ISWEAPON>) //2 handed
LOCAL.NEW=(<PARRYING>*<constitution>)/41140
//***********************************************************
//Unarmed Parry Chance
//***********************************************************
else
if (<eval <tag0.martialartist>>==1) //***Are they a martial artist? If so, give bonus
local.new=(<parrying>*<wrestling>)/48000
else
local.new=0 //(<parrying>*100>)/48000 //general unarmed parry chance is essentially 0.
endif
ENDIF
//***********************************************************
//GM Skill gives them a higher chance to parry, in general
//***********************************************************
IF (<PARRYING>>=100.0) //|| (<constitution>>=100.0)
LOCAL.NEW += 5.0
ENDIF
LOCAL.LEGACY=<EVAL <PARRYING>/80>
//***********************************************************
//High skill gives bonuses to parry chance
//***********************************************************
IF (<PARRYING>>=100.0)
LOCAL.LEGACY += 5.0
ENDIF
LOCAL.CHANCE +=<Max <LOCAL.NEW>, <LOCAL.LEGACY>> //***now we compute the overall chance, here
ENDIF
//***********************************************************
//High dex gives bonuses. Low dex imparts a penalty to parry.
//***********************************************************
IF (<DEX><80)
LOCAL.DEXMOD=80-<DEX>
LOCAL.CHANCE -= (<LOCAL.CHANCE>*<LOCAL.DEXMOD>)/100
ENDIF
//***********************************************************
//Hunter Dancing Spear Technique
//***********************************************************
if (<findlayer.2.baseid>==i_spear) || (<findlayer.2.baseid>==i_spear_short) || (<findlayer.2.baseid>==i_pike) || (<findlayer.2.baseid>==i_staff_bladed) && (<eval <tag.talent_dancingspeartechnique>> >=1)
LOCAL.new=(<survival>*<awareness>)/48000
endif
//***********************************************************
//Hunter Bow Parry
//***********************************************************
if !(<eval <tag0.hunter>>==1) //if player is NOT primary profession "Hunter", they cannot parry with bows
IF (<findlayer.1.type>==t_weapon_xbow) || (<findlayer.1.type>==t_weapon_bow) || (<findlayer.2.type>==t_weapon_xbow) || (<findlayer.2.type>==t_weapon_bow)
LOCAL.CHANCE=0
ENDIF
endif
RETURN <LOCAL.CHANCE>
[FUNCTION f_cs_calculatedamage]
OBJ=<ARGN1>
LOCAL.TACTICS=<EVAL <TACTICS>/16>
IF (<TACTICS>>=100.0)
LOCAL.TACTICS += 6
ENDIF
LOCAL.ANATOMY=<EVAL (<ANATOMY>/2.0)+5>
SKILLGAIN anatomy 10
IF (<OBJ.TYPE>==t_weapon_axe)
LOCAL.LUMBERJACKING=<EVAL <LUMBERJACKING>/5.0>
IF (<LUMBERJACKING>>=100.0)
LOCAL.LUMBERJACKING += 10
ENDIF
ENDIF
LOCAL.STR=<EVAL (<STR>*3)/10>
IF (<STR>>=100)
LOCAL.STR += 5
ENDIF
IF (<ARGN1>)//is the target using a weapon?
LOCAL.DAMAGE=<EVAL RAND(<OBJ.DAM>)>
//***************************
// MARTIAL ARTS WEAPONS
//***************************
if !(<npc>)
if (<tag0.martialartsbonus>)
if (<eval <obj.tag.mabonus>>==1)
local.damage=<local.damage>+<eval <tag0.martialartsbonus>>
endif
endif
endif
//***************************
// SPECIALIZATION
//***************************
if (<tag0.specialize_swords>)
local.damage=<local.damage>+<eval <tag0.swordbonus>>
endif
if (<tag0.specialize_fencing>)
local.damage=<local.damage>+<eval <tag0.fencingbonus>>
endif
if (<tag0.specialize_maces>)
local.damage=<local.damage>+<eval <tag0.macebonus>>
endif
if (<tag0.specialize_axes>)
local.damage=<local.damage>+<eval <tag0.axebonus>>
endif
if (<tag0.specialize_bows>)
local.damage=<local.damage>+<eval <tag0.bowbonus>>
endif
if (<tag0.specialize_xbows>)
local.damage=<local.damage>+<eval <tag0.xbowbonus>>
endif
if (<tag0.specialize_knives>)
local.damage=<local.damage>+<eval <tag0.knivesbonus>>
endif
if (<tag0.specialize_staves>)
local.damage=<local.damage>+<eval <tag0.stavesbonus>>
endif
//**************************
//CRITICAL STRIKE
//**************************
LOCAL.CRITICALDAMAGEPOWER=<eval <str>/4>
IF (<eval <tactics>*<anatomy>/60000>) > (<R100> +- <eval <tag0.criticalstrike>>)
local.critamount=<eval <local.damage>+<eval <local.damage>/2> + <eval <r10>>>
local.damage=<local.damage>+<eval <local.critamount>>
sysmessage @098 You inflict <eval <local.critamount>> extra damage from a critical strike!
sfx 0525
healmorale 3
if (<eval <tag0.morale>> > <eval <tag0.maxmorale>>)
tag0.morale=tag0.maxmorale
endif
//**************************
//SPECIAL ATTACKS/TALENTS
//**************************
if !<ISEMPTY <tag.special>> //this only fires if the power is activated. when it runs, it deactives, so it must be
CALL <tag.special>_attack
endif
ELSE
IF (<DAM>)//or is it an NPC attacking>?
LOCAL.DAMAGE=<EVAL RAND(<DAM>)>
LOCAL.WRESTLINGBONUS=<Eval <wrestling>/200>
IF (<wrestling>>=100.0)
LOCAL.wrestling += 10
ENDIF
ELSE //or are we fighting with wrestling?
LOCAL.WRESTLINGBONUS=<Eval <wrestling>/200>
IF (<wrestling>>=100.0)
LOCAL.wrestling += 10
ENDIF
//*******************************
// MARTIAL ARTS (UNARMED) DAMAGE
//*******************************
LOCAL.DAMAGE=<EVAL RAND(1,4)>+<eval <tag0.martialartsbonus>>+<eval <tag0.wildshapeclawbonus>>+<eval <local.wrestlingbonus>/2>//add martial arts bonus to damage, so wrestling doesnt suck ass.
//**************************
//CRITICAL STRIKE
//**************************
LOCAL.CRITICALDAMAGEPOWER=<eval <str>/4>
IF (<eval <tactics>*<anatomy>/60000>) > (<R100> +- <eval <tag0.criticalstrike>>)
local.damage=<local.damage>+<local.damage>/2 + <r10> + <local.wrestlingbonus>//<local.criticaldamagepower>
sysmessage @098 You do <eval <local.damage>+<local.criticaldamagepower>> from a critical strike!
sfx 0525
healmorale 1
endif
ENDIF
//**************************
//SPECIAL ATTACK
//**************************
if !<ISEMPTY <tag.special>> //this only fires if the power is activated. when it runs, it deactives, so it must be
CALL <tag.special>_attack
endif
ENDIF
//tag.damageincrease is capped at 200%
LOCAL.DamageIncrease=<Min <EVAL <OBJ.TAG0.DamageIncrease>+<TAG0.DamageIncrease>>,200>
LOCAL.DamageDecrease=<Min <EVAL <OBJ.TAG0.DamageDecrease>+-<TAG0.DamageDecrease>>,200>
LOCAL.BONUSDAMAGE=<EVAL (<local.spearbonus>+<LOCAL.TACTICS>+<LOCAL.ANATOMY>+<LOCAL.LUMBERJACKING>+<LOCAL.STR>+<LOCAL.HORSEPOWER>+<LOCAL.DamageIncrease>+-<LOCAL.Damagedecrease>)>
LOCAL.DAMAGE += <Percent <LOCAL.BONUSDAMAGE>, <LOCAL.DAMAGE>>
LOCAL.DAMAGE +=<obj.tag0.keenedge>//keenedge is magic prop for dmg + on weapon, added on every attack with it
local.damage -=<local.spc> // Thunderclap Strike damage reduction
if (<tactics> < 1000) && !(<r6>)
SKILLGAIN tactics 1
endif
if (<anatomy> < 1000)
if !(<r4>)
SKILLGAIN anatomy 1
endif
endif
RETURN <LOCAL.DAMAGE>
[FUNCTION f_cs_damageabsorption]
IF (<TAG0.TEMP_PHYSICALDAM>)//apply CON damage soak bonus, but only for PHYSICAL damage
LOCAL.DAM += <EVAL (<ARGN1>*<TAG0.TEMP_PHYSICALDAM>*(<Max <EVAL 100-<MODAR>>,10>))/10000>
ENDIF
IF (<TAG0.TEMP_FIREDAM>)
LOCAL.DAM += <EVAL (<ARGN1>*<TAG0.TEMP_FIREDAM>*(<Max <EVAL 100-<RESFIRE>>,10>))/10000>
ENDIF
IF (<TAG0.TEMP_COLDDAM>)
LOCAL.DAM += <EVAL (<ARGN1>*<TAG0.TEMP_COLDDAM>*(<Max <EVAL 100-<RESCOLD>>,10>))/10000>
ENDIF
IF (<TAG0.TEMP_POISONDAM>)
LOCAL.DAM += <EVAL (<ARGN1>*<TAG0.TEMP_POISONDAM>*(<Max <EVAL 100-<RESPOISON>>,10>))/10000>
ENDIF
IF (<TAG0.TEMP_ENERGYDAM>)
LOCAL.DAM += <EVAL (<ARGN1>*<TAG0.TEMP_ENERGYDAM>*(<Max <EVAL 100-<RESENERGY>>,10>))/10000>
ENDIF
RETURN <LOCAL.DAM>
//ROL SPECIALS (COMBAT FUNCTIONS)
[FUNCTION f_fear]
if (<eval <src.tag0.morale>> < 1)
if !(<src.restest 1 i_fear_timer>)
serv.newitem i_fear_timer
new.more1=<eval <str>+20>//duration
new.more2=<eval <tag0.fear>*4>//effect
new.equip <uid>
endif
else
src.tag.morale=<eval <eval <src.tag0.morale>>+-<eval <tag0.fear>>>
endif
if (<eval <tag0.fear>> >=1)
src.sysmessage @033 <eval <src.tag0.morale>> / <eval <src.tag0.maxmorale>> morale
endif
[ITEMDEF i_fear_timer]
NAME=fear timer
ID=01d8c
TYPE=t_eq_script
LAYER=30
WEIGHT=0
ON=@CREATE
ATTR=04002
ON=@EQUIP
ATTR=04002
CONT.sysmessage @025,3,1 you are gripped by fear!!!
CONT.tag.hitchanceincrease=<Eval <cont.tag0.hitchanceincrease>>-<more2>
cont.tag.defensechanceincrease=<Eval <cont.tag0.defensechanceincrease>>-<more2>
TIMER=<more1>
ON=@TIMER
CONT.SYSMESSAGE @025,3,1 You are no longer afraid of your foe.
cont.tag.morale=<eval <cont.tag0.maxmorale>>/4
cont.sysmessage @033 You regain 25% of your morale.
CONT.tag.hitchanceincrease=<Eval <cont.tag0.hitchanceincrease>>+<more2>
cont.tag.defensechanceincrease=<Eval <cont.tag0.defensechanceincrease>>+<more2>
REMOVE
[FUNCTION f_counterstrike]
if (<distance> < 2)
IF (<src.tactics> > 500)
IF (<eval <src.tactics>*<src.awareness>/80000>) > (<R400> +- <eval <src.tag0.counterstrike>> +- <eval <src.luck>/100>)
damage <eval <eval <src.dex>/10>+<r1,6>+<Eval <src.tag0.talent_cheapshot>>> <def0.physical> <src.uid>
src.sysmessage @098 You counter attack for <Eval <eval <src.tag0.counterstrike>> + <eval <src.dex>/10>> damage.
src.sfx 051e
endif
endif
endif
[FUNCTION f_furioushammer]
local.hitpain=<eval <src.tag0.talent_furioushammer>>
IF (<src.ACTION>==skill_wrestling) && (<eval <src.tag.talent_furioushammer>> >=1) && (<stamina> >=10)
IF (<eval <src.dex>/10> * <eval <src.wrestling>/10> /100) > (<R170> +- <eval <src.tag0.talent_furioushammer>> +- <eval <src.luck>/100>)
stamina -=10
src.moveback <local.hitpain>
src.sysmessage @025,3,1 You have been stunned by a powerful blow.
src.sound 0144
serv.newitem i_parablow_timer
new.equip <src.uid>
forchars 1
if !(<uid>==<obj.uid>) || (<FLAGS>==<FLAGS>&02000000) || (<KILLS>>5)
damage <r1,8>,<def0.physical>,<obj.uid>
effect 3,i_Fx_smoke,15,15,15,0,0
endif
endfor
endif
endif
[FUNCTION f_ragingbull]
IF (<eval <src.tag.talent_ragingbull>> >=1) && (<stamina> >=15) && !(<restest 1 i_mem_ragingbull>)
local.hitpain=<eval <src.tag0.talent_ragingbull>>
IF (<eval <src.dex>/10> * <eval <src.wrestling>/10> /100) > (<R170> +- <eval <src.tag0.talent_tigerclaw>> +- <eval <src.luck>/100>)
stamina -=15
newitem i_mem_ragingbull
new.equip
src.sysmessage @098 You take a hit, and swiftly step into Raging Bull Style.
src.sfx 051c
return 0
endif
else
return 0
endif
[FUNCTION f_tigerclaw]
local.hitpain=<eval <src.tag0.talent_tigerclaw>+<eval <src.str>/40>>
IF (<src.ACTION>==skill_wrestling) && (<eval <src.tag.talent_tigerclaw>> >=1) && (<stamina> >=5)
IF (<eval <src.dex>/10> * <eval <src.wrestling>/10> /100) > (<R170> +- <eval <src.tag0.talent_tigerclaw>> +- <eval <src.luck>/100>)
src.stamina -= <eval <local.hitpain>>
stamina -=5
src.sysmessage @098 You strike with a tigerclaw for <eval <local.hitpain>> stamina damage.
src.sfx 051c
endif
endif
[FUNCTION f_razorfang]
if (<eval <src.tag0.talent_razorfang>> ==1)
local.hitpain=<r1,3>
endif
if (<eval <src.tag0.talent_razorfang>> ==2)
local.hitpain=<r1,4>
endif
if (<eval <src.tag0.talent_razorfang>> ==3)
local.hitpain=<r1,6>
endif
if (<eval <src.tag0.talent_razorfang>> ==4)
local.hitpain=<r1,8>
endif
if (<eval <src.tag0.talent_razorfang>> ==5)
local.hitpain=<r1,10>
endif
if (<eval <src.tag0.talent_razorfang>> ==6)
local.hitpain=<r1,12>
endif
if (<eval <src.tag0.talent_razorfang>> ==7)
local.hitpain=<r1,20>
endif
IF (<src.ACTION>==skill_wrestling) && (<eval <src.tag.talent_razorfang>> >=1)
IF (<eval <src.dex>/10> * <eval <src.wildshaping>/10> /100) > (<R170> +- <eval <src.tag0.talent_razorfang>> +- <eval <src.luck>/100>)
damage <local.hitpain> <def0.physical> <src.uid>
src.sysmessage @098 You strike with a bite for <eval <local.hitpain>> damage.
src.sfx 051c
endif
endif
[FUNCTION f_shieldbash]
local.hitpain=<eval <src.tag0.shieldbash>+<eval <src.str>/40>>
IF (<SRC.FINDLAYER.2.TYPE>==t_shield)
IF (<src.parrying> > 450) && (<src.tactics> > 450) && (<src.awareness> >250)
IF (<eval <src.str>/10> * <eval <src.parrying>/10> /100) > (<R170> +- <eval <src.tag0.shieldbash>> +- <eval <src.luck>/100>)
damage <local.hitpain> <def0.physical> <src.uid>
src.sysmessage @098 You bash with your shield for <eval <local.hitpain>> damage.
src.sfx 051c
endif
endif
endif
[FUNCTION f_dodging]
IF (<eval <dex>/10> * <eval <awareness>/10> /100) > (<R400> +- <eval <tag0.dodge>> +- <eval <luck>/100>)
sysmessage @098 You dodge the attack!
DORAND 3
sfx 0512
sfx 1317
sfx 1298
ENDDO
if (<eval <tag0.troubador>>) // Troubador Profession talent
hits=<hits>+<r1,6>
endif
f_riposte
return 1
endif
[FUNCTION f_riposte]
if (<distance> < 2) && (<eval <src.tag.talent_riposte>> >=1)
IF (<src.fencing> > 500)
IF (<eval <src.fencing>*<src.awareness>/80000>) > (<R400> +- <eval <src.tag0.talent_riposte>> +- <eval <src.luck>/100>)
damage <eval <src.tag.talent_riposte>+<r1,3>> <def0.physical> <src.uid>
src.sysmessage @098 You riposte for <Eval <eval <src.tag0.counterstrike>> + <eval <src.dex>/10>> damage.
src.sfx 051e
endif
endif
endif
/////////////////////////////////////////////////////////////////////////
//***********************************************************************
//Combat System main event - apply this to players & monsters
[EVENTS e_aos_cs]
//NPC casting Wall of Stone
ON=@SPELLCAST
if <npc>
IF (<SERV.SPELL.<ARGN1>.FLAGS> & spellflag_field)
ACTP=<SRC.P>
ENDIF
RETURN 0
endif
on=@death
FORCHARMEMORYTYPE MEMORY_FIGHT
color |= <def0.memory_harmedby>
ENDFOR
ON=@SKILLSTART //This allows regular update of true stat values. hp, etc.
IF <NPC>==0
UPDATESTATS_NEW
ENDIF
ON=@USERSTATS //This allows regular update of true stat values. hp, etc.
IF <NPC>==0
IF <VAR0.U_STATS>!=1
UPDATESTATS_NEW
ENDIF
ENDIF
on=@ITEMCLIENTTOOLTIP //This is required for the main tooltip functions
VAR.TOOLTIP=
OBJ=<ARGO.UID>
OBJ.TRIGGER @Tooltip
IF !<ISEMPTY <VAR.TOOLTIP>>
addcliloc 1042971,<VAR.TOOLTIP>
ENDIF
VAR.TOOLTIP=
//***************SPECIAL***************************
//*** Fired when a character MISSES an attack
on=@hitmiss
//remove special attack
//tag.special=
//*
if !(<r4>)
IF (<stamina>) > 1
stamina -= 1
ENDIF
endif
//* Here we apply stamina penalties, etc.
//*************************************************
ON=@hittry
if (<src.stamina>) < 0 //make sure we dont have below 0 stamina
src.stamina=0
endif
if (<src.mana>) < 0 //make sure we dont have below 0 stamina
src.mana=0
endif
if !(<src.tag0.morale>)
src.tag.morale=0
endif
if (<eval <src.tag0.morale>> < 0) //make sure morale isnt at negative values
src.tag0.morale=0
endif
//***** attack speed
ARGN1=<f_cs_attackspeed <ARGO.UID>>
ACTDIFF=<f_cs_chancetohit <ARGO.UID>>
ON=@HIT
healmorale 1
if (<eval <tag0.resting>>==1)
rest
tag0.override.regenval_2 =<eval <tag.override.regenval_2>> -2
sysmessage @044 You leave your resting state.
tag.resting=
endif
//************ Hunter Talent - Savage Might
if (<eval <tag.talent_savagemight>> >=1)
if (<findlayer.1.baseid>=i_spear) || (<findlayer.1.baseid>==i_bow) || (<findlayer.2.baseid>=i_spear) || (<findlayer.2.baseid>==i_bow)
local.spearbonus=<r1,3>+<eval <tag.talent_savagemight>>
//sysmessage @044 Savage Might Bonus Damage = <eval <local.spearbonus>>
endif
endif
//************
//***MORALE BOOST
if !(<r5>)
healmorale 1
endif
//***************
//*****PARRYING *********
// check for weapon or shield to parry attack
local.bigval=<eval <SRC.f_cs_chancetoblock>+<r10,300>>
local.smallval=<r1200>
//***BOWS can't parry unless you have the correct talent.
IF (<src.findlayer.1.type>==t_weapon_xbow) || (<src.findlayer.1.type>==t_weapon_bow) || (<src.findlayer.2.type>==t_weapon_xbow) || (<src.findlayer.2.type>==t_weapon_bow)
if !(<eval <src.tag.hunter>>)
return 1
endif
if !(<src.findlayer.1.baseid>==i_throwing_dagger) || !(<src.findlayer.1.baseid>==i_throwing_dagger_shadow) || !(<src.findlayer.1.baseid>==i_throwing_axe) && !(<eval <src.tag.talent_shadowwarrior>>)
return 1
endif
elseif (<SRC.FINDLAYER.1>) || (<SRC.FINDLAYER.2>)
IF (<local.bigval> > <local.smallval>)
IF (<SRC.FINDLAYER.2.TYPE>==t_shield) || (<SRC.FINDLAYER.2.ISWEAPON>)
SRC.TRYSRC <UID> FINDLAYER.2.TRIGGER=@Parry
ELSEIF (<SRC.FINDLAYER.1.ISWEAPON>)
SRC.TRYSRC <UID> FINDLAYER.1.TRIGGER=@Parry
ENDIF
IF !(<VAR0.RETURN>) //this can be set inside the @Parry trigger
SRC.SYSMESSAGE @092 You parry the blow.
src.SKILLGAIN parrying 10
DORAND 6
SRC.SOUND 0146
SRC.SOUND 0142
SRC.SOUND 0520
SRC.SOUND 05bd
SRC.SOUND 052f
SRC.SOUND 056
ENDDO
SRC.ANIM 30
healmorale {1,3}
SKILLGAIN tactics 10
if (<eval <src.tag0.talent_dancingspeartechnique>>==1) //Hunter bonus parry damage
aosdamage <eval <src.tag0.talent_dancingspeartechnique>> <def0.physical> <src.uid>
endif
return 1
debug
ENDIF
ENDIF
ENDIF
IF (<SRC.FINDLAYER.2.baseid>==i_spear) || (<SRC.FINDLAYER.2.baseid>==i_pike) || (<SRC.FINDLAYER.1.baseid>==i_spear) || (<SRC.FINDLAYER.1.baseid>==i_pike) && (<eval <src.tag0.hunter>>==1)
src.skillgain survival 10
endif
//***CALCULATE DAMAGE
ARGN1=<f_cs_calculatedamage <ARGO.UID>>
VAR.ARGN1=<ARGN1> //this is passed to trigger calls
//******************************
// Begin RoL specials These fire automatically, based on player abilities or circumstances
//******************************
f_counterstrike //anyone, but primarily warrior
f_shieldbash //warrior
f_tigerclaw //martial artist
f_furioushammer//martialartist
f_razorfang //wildshaper
f_fear //all characters
if (<awareness> < 1000) && !(<r6>)
skillgain awareness 10
endif
//*******************************************************************
IF (<ARGO.UID>)//use dam types from weapons or from char?
SRC.TAG.TEMP_PHYSICALDAM=<ARGO.TAG0.PhysicalDamage>
SRC.TAG.TEMP_FIREDAM=<ARGO.TAG0.FireDamage>
SRC.TAG.TEMP_COLDDAM=<ARGO.TAG0.ColdDamage>
SRC.TAG.TEMP_POISONDAM=<ARGO.TAG0.PoisonDamage>
SRC.TAG.TEMP_ENERGYDAM=<ARGO.TAG0.EnergyDamage>
TRY UID.<ARGO.UID>.TRIGGER=@DamageCalc //src = attacked, [] = weapon, cont = attacker
ELSE
SRC.TAG.TEMP_PHYSICALDAM=<TAG0.PhysicalDamage>
SRC.TAG.TEMP_FIREDAM=<TAG0.FireDamage>
SRC.TAG.TEMP_COLDDAM=<TAG0.ColdDamage>
SRC.TAG.TEMP_POISONDAM=<TAG0.PoisonDamage>
SRC.TAG.TEMP_ENERGYDAM=<TAG0.EnergyDamage>
ENDIF
TRIGGER=@DamageCalc //src = attacked, [] = attacker
ARGN1=<VAR.ARGN1> +- <eval <src.tag0.spelldamagereduction>>//Reduced dmg from spells
//*************************************************************************************
if (<eval <src.tag0.spelldamagereduction>>)
src.sysmessage You blocked <eval <src.tag0.spelldamagereduction>> damage from the hit.
endif
SKILLGAIN anatomy 10
//*********************HP/STAM/MANA LEECH
IF (RAND(100)<<TAG0.LIFELEECH>)
if (<hits> < <maxhits>)
HITS += <EVAL (<VAR.ARGN1>*30)/100>
hpvamp
endif
ENDIF
IF (RAND(100)<<TAG0.STAMLEECH>)
if (<stam> < <maxstam>)
STAM += <EVAL (<VAR.ARGN1>*30)/100>
stamvamp
endif
ENDIF
IF (RAND(100)<<TAG0.MANALEECH>)
if (<mana> < <maxmana>)
MANA += <EVAL (<VAR.ARGN1>*30)/100>
manavamp
endif
ENDIF
ON=@GETHIT
f_ragingbull
if (<eval <tag0.resting>>==1)
rest
tag0.override.regenval_2 =<eval <tag.override.regenval_2>> -2
tag.resting=
sysmessage @044 You leave your resting state.
endif
//********************************warrior damage mitigation
IF (<eval <TAG0.warrior>> >=1)
argn1 =<eval <argn1> - <eval <constitution>/120>> //max of 8ish if they get to 100%. 120 is 10.
endif
//****************************************MAGIC BARRIER
if (<eval <tag0.barrierhp>> >=1) && !(<eval <src.tag0.barrierbreak>>)//can character or attack ignore barrier? if not, the barrier protects completely.
TAG.BARRIERHP=<eval <tag0.barrierhp> +-<ARGN1>>
if (<eval <tag0.barrierhp>> <=0)
SYSMESSAGE @012,3,1 Your magic barrier was destroyed.
endif
EFFECT=3,i_reflect_dmg,6,15,1 // Sparkle effect
argn1=0
sfx 1469
return 0
endif
//********Reflect Damage
IF (<eval <TAG0.DAMAGERETURN>> >=1)
local.refvalue=<eval ((<ARGN1>*<eval <TAG0.DAMAGERETURN>>)/100)>
if (<local.refvalue> < 1)
local.refvalue=1//allways do at LEAST 1 damage, so its not useless to noobs vs weak monsters.
endif
src.DAMAGE <Eval <local.refvalue>+1> <def0.physical> <UID>
battleup2
//sysmessage You reflect <Eval <local.refvalue>+1> damage back at your attacker!
if <restest 1 i_lashing_timer> //**Are they a Shadow Warrior using Lashing Darkness talent?
src.blindfx
sfx 552
endif
ENDIF
//************************STAMINA LOSS****************************************************************
IF (<stamina>) > 1
stamina -= 1
ENDIF
if (<src.stamina>) < 0
src.stamina=0
endif
//******************REMOVE SPECIAL EFFECTS************************
//Invigorate cancels if the player gets hit.
if (<restest 1 i_invigorate_timer>)
if (<eval <tag0.invigcount>>==0)
consume 1 i_invigorate_timer
tag.invigcount=
sysmessage @077,3,1 Your heroic aura has been broken.
else
tag.invigcount=<eval <tag0.invigcount>>+-<argn1>
endif
endif
IF (<TAG0.TEMP_PHYSICALDAM>) || (<TAG0.TEMP_FIREDAM>) || (<TAG0.TEMP_COLDDAM>) || (<TAG0.TEMP_POISONDAM>) || (<TAG0.TEMP_ENERGYDAM>)
IF (<FLAGS>&04)
FINDID.i_rune_paralyze.REMOVE
FINDID.i_rune_paralyze_field.REMOVE
FLAGS &= ~04
ENDIF
ARGN1=<f_cs_damageabsorption <ARGN1>>
VAR.ARGN1=<ARGN1>
TRIGGER=@DamageAbsorb //src = attacker, [] = attacked
ELSE
ARGN1=<VAR.ARGN1>
TAG.TEMP_PHYSICALDAM
TAG.TEMP_FIREDAM
TAG.TEMP_COLDDAM
TAG.TEMP_POISONDAM
TAG.TEMP_ENERGYDAM
ARGN2=1 //set damage flags=dam_god to avoid default armor reduction
ENDIF
//**************check constitution
if (<constitution> < 1000)
SKILLGAIN constitution 10
endif
f_dodging
//**** ADD BLEEDING WHEN HIT
if !(<NPC>)
CreateDamageBlood
endif
//*****MAGIC RESISTANCE FIX SECTION*******
ON=@SPELLEFFECT
//magic reflection fix
IF (<FLAGS>&statf_reflection) && !(<SRC.UID>==<UID>)
IF (<SERV.SPELL.<ARGN1>.FLAGS>&spellflag_harm) || (<ARGN1>==41) //dispel
FLAGS &= ~statf_reflection
FINDID.i_rune_magic_reflection.REMOVE
EFFECT 3 i_fx_bless_effect, 16, 16
IF (<SRC.FLAGS>&statf_reflection) //double reflection
SRC.FLAGS &= ~statf_reflection
SRC.FINDID.i_rune_magic_reflection.REMOVE
SRC.EFFECT 3 i_fx_bless_effect, 16, 16
ELSE
SRC.SPELLEFFECT <ARGN1>, <ARGN2>
ENDIF
RETURN 1
ENDIF
ENDIF
//***************the actual resist check
IF (<SERV.SPELL.<ARGN1>.FLAGS>&spellflag_resist)
LOCAL.RESIST=<EVAL <MAGICRESISTANCE>-((<SRC.channeling>*<SpellCircle <ARGN1>>)/20)>
IF (<LOCAL.RESIST>>RAND(1000))
SYSMESSAGE You feel yourself resisting magical energy.
SRC.SYSMESSAGE <NAME> resists the spell.
ARGN3 -= RAND(<MAGICRESISTANCE>/6,<MAGICRESISTANCE>/4)
ELSE
ARGN3 -= RAND(0,<MAGICRESISTANCE>/7)
ENDIF
ENDIF
RETURN 2
[FUNCTION spellcircle] //argn1=spell number
IF (<ARGN1>>=1) && (<ARGN1><=64) //only with default (mage) spells
RETURN <EVAL ((<ARGN1>-1)/8)+1>
ELSE
RETURN 1
ENDIF
//***************************************************
//***************************************************
//***************************************************
//***************************************************
//***************************************************
//MAGIC ITEM PROPERTIES
//***************************************************
//***************************************************
//***************************************************
//***************************************************
//***************************************************
//--------------------------
// SPECIAL ABILITIES
//--------------------------
[TYPEDEF T_USEBESTWEAPONSKILL]
ON=@Equip
IF (<SRC.SWORDSMANSHIP> > <SRC.FENCING>) && (<SRC.SWORDSMANSHIP> > <SRC.MACEFIGHTING>)
TAG.OVERRIDE_SKILL=41
ELIF (<SRC.FENCING> > <SRC.SWORDSMANSHIP>) && (<SRC.FENCING> > <SRC.MACEFIGHTING>)
TAG.OVERRIDE_SKILL=43
ELIF (<SRC.MACEFIGHTING> > <SRC.SWORDSMANSHIP>) && (<SRC.MACEFIGHTING> > <SRC.FENCING>)
TAG.OVERRIDE_SKILL=42
ENDIF
[TYPEDEF T_hpmax]
ON=@Equip
if (<tag0.identified>)
IF (<tag0.maxhits>)
SRC.modhits += <eval <TAG0.maxhits>>
ENDIF
else
return 0
endif
ON=@UnEquip
if (<tag0.identified>)
IF (<tag0.maxhits>)
SRC.modhits -= <eval <TAG0.maxhits>>
ENDIF
else
return 0
endif
[TYPEDEF T_stammax]
ON=@Equip
if (<tag0.identified>)
IF (<tag0.maxstam>)
SRC.modstam += <TAG0.maxstam>
ENDIF
else
return 0
endif
ON=@UnEquip
if (<tag0.identified>)
IF (<tag0.maxstam>)
SRC.modstam -= <TAG0.maxstam>
ENDIF
else
return 0
endif
[TYPEDEF T_manamax]
ON=@Equip
if (<tag0.identified>)
IF (<tag0.maxmana>)
SRC.modmana += <TAG0.maxmana>
ENDIF
else
return 0
endif
ON=@UnEquip
if (<tag0.identified>)
IF (<tag0.maxmana>)
SRC.modmana -= <TAG0.maxmana>
ENDIF
else
return 0
endif
[TYPEDEF T_strmax]
ON=@Equip
if (<tag0.identified>)
IF (<TAG0.strup>)
SRC.modstr += <TAG0.strup>
ENDIF
else
return 0
endif
ON=@UnEquip
if (<tag0.identified>)
IF (<TAG0.strup>)
SRC.modstr -= <TAG0.strup>
ENDIF
else
return 0
endif
[TYPEDEF T_dexmax]
ON=@Equip
if (<tag0.identified>)
IF (<TAG0.dexup>)
SRC.moddex += <TAG0.dexup>
ENDIF
else
return 0
endif
ON=@UnEquip
if (<tag0.identified>)
IF (<TAG0.dexup>)
SRC.moddex -= <TAG0.dexup>
ENDIF
else
return 0
endif
[TYPEDEF T_intmax]
ON=@Equip
if (<tag0.identified>)
IF (<TAG0.intup>)
SRC.modint += <TAG0.intup>
ENDIF
else
return 0
endif
ON=@UnEquip
if (<tag0.identified>)
IF (<TAG0.intup>)
SRC.modint -= <TAG0.intup>
ENDIF
else
return 0
endif
//NOTE**************************
//tag.override.regen is regen SPEED increase
//override.regenval is regen AMOUNT increase
[TYPEDEF t_regenhp]
on=@equip
if (<tag0.identified>)
IF (<tag0.regenhp>)
src.tag.override.regenval_0=<eval <src.tag0.override.regenval_0>> + <eval <tag0.regenhp>>
src.TAG.OVERRIDE.REGENval_0 +=<tag0.regenhp>
endif
else
return 0
endif
on=@unequip
if (<tag0.identified>)
IF (<tag0.regenhp>)
src.tag.override.regenval_0=<eval <src.tag0.override.regenval_0>> - <eval <tag0.regenhp>>
src.TAG.OVERRIDE.REGENval_0 -=<tag0.regenhp>
endif
else
return 0
endif
[TYPEDEF t_regenstam]
on=@equip
if (<tag0.identified>)
src.tag.override.regenval_2=<eval <src.tag0.override.regenval_2>> + <eval <tag0.regenstam>>
IF (<tag0.regenstam>)
src.TAG.OVERRIDE.REGENval_2 +=<Eval <tag0.regenstam>>
endif
else
return 0
endif
on=@unequip
if (<tag0.identified>)
IF (<tag0.regenstam>)
src.tag.override.regenval_2=<eval <src.tag0.override.regenval_2>> - <eval <tag0.regenstam>>
src.TAG.OVERRIDE.REGENval_2 -=<eval <tag0.regenstam>>
endif
else
return 0
endif
[TYPEDEF t_regenmana]
on=@equip
if (<tag0.identified>)
IF (<tag0.regenmana>)
src.tag.override.regenval_1=<eval <src.tag0.override.regen_1>> + <eval <tag0.regenmana>>
src.TAG.OVERRIDE.REGENval_1 +=<tag0.regenmana>val
endif
else
return 0
endif
on=@unequip
if (<tag0.identified>)
IF (<tag0.regenmana>)
src.tag.override.regenval_1=<eval <src.tag0.override.regenval_1>> - <eval <tag0.regenmana>>
src.TAG.OVERRIDE.REGENval_1 -=<tag0.regenmana>
endif
else
return 0
endif
[TYPEDEF T_barrier]
ON=@dclick
if (<tag0.identified>)
if !<src.tag.barrierhp>
if <hitpoints> >=5
HITS -=<R1,8>
SRC.tag0.barrierhp += <TAG0.barrierhp>
src.events +e_barrier
src.sysmessage @036,3,1 You activate a <eval <tag0.barrierhp>> hitpoint magic barrier, sapping durability from the item.
src.update
SRC.EFFECT=3,i_FX_glow_spike,6,15,1 // Sparkle effect
return 0
else
src.sysmessage @036,3,1 That item is too damaged to enable a barrier.
return 0
endif
return 0
else
src.sysmessage @036,3,1 You already have a barrier activated.
return 0
endif
else
return 0
endif
[TYPEDEF t_shieldmastery]
on=@equip
if (<tag0.identified>)
src.parrying +=<tag0.shieldmastery>
else
return 0
endif
on=@unequip
if (<tag0.identified>)
src.parrying -=<tag0.shieldmastery>
else
return 0
endif
[TYPEDEF t_conBonus]
on=@equip
if (<tag0.identified>)
src.constitution +=<tag0.conBonus>
else
return 0
endif
on=@unequip
if (<tag0.identified>)
src.constitution -=<tag0.conBonus>
else
return 0
endif
[TYPEDEF e_slayergroupie]
on=@Equip
if (<tag0.identified>)
src.events +e_slayerhit
src.tag.slayergroup=<tag0.slayergroup>
else
return 0
endif
on=@UnEquip
if (<tag0.identified>)
src.events -e_slayerhit
src.tag.slayergroup
else
return 0
endif
[EVENTS e_slayerhit]
on=@hit
//if (<tag0.identified>)
IF !(<SRC.ISPLAYER>)
IF !(<ISEMPTY <obj.TAG0.SLAYERGROUP>>)
IF (STRMATCH(*<SRC.BASEID>*,<DEF.<obj.TAG0.SLAYERGROUP>_SLAYER>))
ARGN1 *= 2
SRC.EFFECT 3,i_fx_glow,16,20
ENDIF
ENDIF
ENDIF
//else
//return 0
//endif
[TYPEDEF e_moraleincrease]
ON=@Equip
if (<tag0.identified>)
SRC.TAG.maxmorale += <eval <TAG0.moraleincrease>>
else
return 0
endif
ON=@UnEquip
if (<tag0.identified>)
SRC.TAG.maxmorale -= <Eval <TAG0.moraleincrease>>
else
return 0
endif
[TYPEDEF e_peityincrease]
ON=@Equip
if (<tag0.identified>)
SRC.TAG.maxpeity += <eval <TAG0.peityincrease>>
SRC.TAG.peitybonus += <eval <TAG0.peitybonus>>
else
return 0
endif
ON=@UnEquip
if (<tag0.identified>)
SRC.TAG.maxpeity -= <Eval <TAG0.peityincrease>>
SRC.TAG.peitybonus -= <eval <tag0.peitybonus>>
else
return 0
endif
[TYPEDEF e_definc]
ON=@Equip
if (<tag0.identified>)
IF (<TAG0.defensechanceincrease>)
SRC.TAG0.defensechanceincrease += <TAG0.defensechanceincrease>
ENDIF
else
return 0
endif
[TYPEDEF e_defdec]
ON=@Equip
if (<tag0.identified>)
IF (<TAG0.defensechancedecrease>)
SRC.TAG0.defensechanceincrease -= <TAG0.defensechancedecrease>
ENDIF
else
return 0
endif
[TYPEDEF e_hitinc]
ON=@Equip
if (<tag0.identified>)
IF (<TAG0.hitchanceincrease>)
SRC.TAG0.hitchanceincrease += <TAG0.hitchanceincrease>
ENDIF
else
return 0
endif
[TYPEDEF e_hitdec]
ON=@Equip
if (<tag0.identified>)
IF (<TAG0.hitchancedecrease>)
SRC.TAG0.hitchanceincrease -= <TAG0.hitchancedecrease>
ENDIF
else
return 0
endif
[TYPEDEF e_dmginc]
ON=@Equip
if (<tag0.identified>)
IF (<TAG0.damageincrease>)
SRC.TAG0.damageincrease += <TAG0.hitchanceincrease>
ENDIF
else
return 0
endif
[TYPEDEF e_dmgdec]
ON=@Equip
if (<tag0.identified>)
IF (<TAG0.damagedecrease>)
SRC.TAG0.damageincrease -= <TAG0.hitchancedecrease>
ENDIF
else
return 0
endif
[TYPEDEF e_shieldbashincrease]
ON=@Equip
if (<tag0.identified>)
IF (<TAG0.shieldbashincrease>)
SRC.TAG0.shieldbash += <TAG0.shieldbashincrease>
ENDIF
else
return 0
endif
ON=@UnEquip
if (<tag0.identified>)
IF (<TAG0.shieldbashincrease>)
SRC.TAG0.shieldbash -= <TAG0.shieldbashincrease>
IF !(<SRC.TAG0.shieldbashincrease>)
SRC.TAG.shieldbashincrease
ENDIF
ENDIF
else
return 0
endif
[TYPEDEF e_keenedge] //damage calc for this is in combatsystem above
ON=@Equip
IF (<TAG0.keenedge>)
SRC.TAG0.keenedge += <TAG0.keenedge>
ENDIF
ON=@UnEquip
IF (<TAG0.keenedge>)
SRC.TAG0.keenedge -= <TAG0.keenedge>
IF !(<SRC.TAG0.keenedge>)
SRC.TAG.keenedge
ENDIF
ENDIF
[TYPEDEF e_lifeleech]
ON=@Equip
if (<tag0.identified>)
IF (<TAG0.LIFELEECH>)
SRC.TAG0.LIFELEECH += <TAG0.LIFELEECH>
ENDIF
else
return 0
endif
ON=@UnEquip
if (<tag0.identified>)
IF (<TAG0.LIFELEECH>)
SRC.TAG0.LIFELEECH -= <TAG0.LIFELEECH>
IF !(<SRC.TAG0.LIFELEECH>)
SRC.TAG.LIFELEECH
ENDIF
ENDIF
else
return 0
endif
[TYPEDEF e_manaleech]
ON=@Equip
if (<tag0.identified>)
IF (<TAG0.MANALEECH>)
SRC.TAG0.MANALEECH += <TAG0.MANALEECH>
ENDIF
else
return 0
endif
ON=@UnEquip
if (<tag0.identified>)
IF (<TAG0.MANALEECH>)
SRC.TAG0.MANALEECH -= <TAG0.MANALEECH>
IF !(<SRC.TAG0.MANALEECH>)
SRC.TAG.MANALEECH
ENDIF
ENDIF
else
return 0
endif
[TYPEDEF e_fearbonus]
ON=@Equip
if (<tag0.identified>)
IF (<TAG0.fear>)
SRC.TAG0.fear += <TAG0.fear>
ENDIF
else
return 0
endif
ON=@UnEquip
if (<tag0.identified>)
IF (<TAG0.fear>)
SRC.TAG0.fear -= <TAG0.fear>
IF !(<SRC.TAG0.fear>)
SRC.TAG.fear
ENDIF
ENDIF
else
return 0
endif
[TYPEDEF e_stammyleech]
ON=@Equip
if (<tag0.identified>)
IF (<TAG0.STAMLEECH>)
SRC.TAG0.STAMLEECH += <TAG0.STAMLEECH>
ENDIF
else
return 0
endif
ON=@UnEquip
if (<tag0.identified>)
IF (<TAG0.STAMLEECH>)
SRC.TAG0.STAMLEECH -= <TAG0.STAMLEECH>
IF !(<SRC.TAG0.STAMLEECH>)
SRC.TAG.STAMLEECH
ENDIF
ENDIF
else
return 0
endif
[TYPEDEF e_burndmg]
on=@damagecalc
if (<tag0.identified>)
IF (<R<TAG0.HITFIREBALL>> >= <R100>)
src.effect 3,i_fx_field_fire_ns,16,20
src.AOSDAMAGE <tag0.burnstr> <def0.fire> <uid>
src.sfx 857
ENDIF
else
return 0
endif
[TYPEDEF e_zapdmg]
on=@damagecalc
if (<tag0.identified>)
IF (<R<TAG0.HITLIGHTNING>> >= <R100>)
src.zappyzap
src.AOSDAMAGE <r1,3> <def0.energy> <uid>
src.sfx 1471
ENDIF
else
return 0
endif
[TYPEDEF e_colddmg]
on=@damagecalc
if (<tag0.identified>)
IF (<R<TAG0.HITCOLD>> >= <R100>)
//src.effect 3,i_fx_glow2,16,20
src.blueburst
src.AOSDAMAGE <tag0.coldstr> <def0.cold> <uid>
src.sfx 513
ENDIF
else
return 0
endif
[TYPEDEF e_harmdmg]
on=@damagecalc
if (<tag0.identified>)
IF (<R<TAG0.HITHARM>> >= <R100>)
//SRC.SPELLEFFECT S_HARM,<R200,700>,<UID>
src.AOSDAMAGE <tag0.harmstr> <def0.poison> <uid>
src.greenburst
src.sfx 497
ENDIF
else
return 0
endif
[TYPEDEF e_paralyzedmg]
on=@damagecalc
if (<tag0.identified>)
IF (<R<TAG0.HITPARALYZE>> >= <R100>)
SRC.SPELLEFFECT S_PARALYZE,1000,<UID>
src.greensparkles
src.sfx 497
ENDIF
else
return 0
endif
[TYPEDEF e_dispeldmg]
on=@damagecalc
if (<tag0.identified>)
IF (<TAG0.HITDISPEL>)
IF (<R50> >= <R100>)
SRC.SPELLEFFECT S_DISPEL,100.0,<UID>
ENDIF
ENDIF
else
return 0
endif
[TYPEDEF T_ELFS_ONLY]
ON=@EquipTest
IF (<SRC.BODY> != C_ELF_MALE) && (<SRC.BODY> != C_ELF_FEMALE) && (<SRC.ISPLAYER>)
SRC.SYSMESSAGE @946,3,1 Only elves may use this item.
RETURN 1
ENDIF
ON=@ClientToolTip
SRC.ADDCLILOC 1075086
[TYPEDEF T_DAMAGERETURN]
ON=@Equip
if (<tag0.identified>)
IF (<TAG0.DAMAGERETURN>)
SRC.TAG0.DAMAGERETURN += <TAG0.DAMAGERETURN>
ENDIF
else
return 0
endif
ON=@UnEquip
if (<tag0.identified>)
IF (<TAG0.DAMAGERETURN>)
SRC.TAG0.DAMAGERETURN -= <TAG0.DAMAGERETURN>
IF !(<SRC.TAG0.DAMAGERETURN>)
SRC.TAG.DAMAGERETURN=
ENDIF
ENDIF
else
return 0
endif
[TYPEDEF e_arrowdmg]
on=@damagecalc
if (<tag0.identified>)
IF (<TAG0.MAGICARROW>)
IF (<R<TAG0.MAGICARROW>> >= <R100>)
SRC.SPELLEFFECT s_magic_arrow,<R250,700>,<UID>
ENDIF
ENDIF
else
return 0
endif
[TYPEDEF t_nighteyes]
on=@dclick
if (<tag0.identified>)
src.SPELLEFFECT=s_night_sight 1000
//src.effect 3,i_fx_bless,16,20
src.sfx 483
more2=<more2>+-{1 3}
else
return 0
endif
[TYPEDEF t_dblstrike]
on=@equip
src.events +e_dblstrike
on=@unequip
src.events -e_dblstrike
[events e_dblstrike]
on=@hittry
events -e_dblstrike
ARGN1 = 1
[typedef t_reflectshield]
//(SRC=the attacker, CONT=the player who parried, default object=the item)
on=@parry
src.aosdamage <r1,8> <var.physical> <cont.uid>
//***Set on bows to make them drop stamina 1 per shot, as if to exhaust from drawing back the string. This is a detriment made necessary
//due to their great range and adequately painful damage ratio.
[events e_bowon]
on=@hittry
if (<stamina> >=1)
stamina -=<eval <tag0.bowdrain> +1>
endif
if (<stamina> <=0)
stamina=0
endif
[ITEMDEF i_ssarrow]
name=new arrow
id=i_arrow
NAME=special arrow%s
TYPE=T_WEAPON_ARROW
RESOURCES=1 i_arrow_shaft, 1 i_feather
REPLICATE=1
SKILLMAKE=1.0 BOWCRAFT
WEIGHT=0.1
on=@fire
TAG.OVERRIDE.AMMOTYPE
local.bonus=<eval rand(1, 10)>
argn1=<serv.itemdef(i_fire).baseid>
argn2=021
argn3=01
sysmessage You landed a critical strike on your target, causing <dlocal.bonus> extra damage!
act.damage <local.bonus> 0 <uid>
[PLEVEL 1]
torch
[function torch]
if !(<restest 1 i_torch>)
newitem i_torch
new.equip
new.dclick
endif
//<------------------------------------------------------------------------------------->
//< No Usage --------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
[FUNCTION CreateDamageBlood]
IF (RAND(2)==0) && (<BLOODCOLOR> >= 0)
SERV.NEWITEM=0122a
NEW.DispID={0122a 1 0122b 1 0122c 1 0122d 1 0122e 1 0122f 1}
NEW.P=<P>
NEW.ATTR=attr_decay
NEW.COLOR=<BLOODCOLOR>
NEW.TIMER={2 20}
ENDIF
(This post was last modified: 09-09-2013 05:40 AM by Mordaunt.)
|
|