![]() |
Combat System - Printable Version +- SphereCommunity (https://forum.spherecommunity.net) +-- Forum: Sphere 0.56d (/Forum-Sphere-0-56d) +--- Forum: General Help (/Forum-General-Help) +--- Thread: Combat System (/Thread-Combat-System) |
Combat System - pushim - 01-13-2015 10:01 PM Hello, I would ask if there is any tutorial to make a combat system? The only thing I found is this link on the wiki http://wiki.sphere.torfo.org/index.php/How_Combat_Works But it's not a great help, i don't know who scp edit or base myself thx! RE: Combat System - amonvangrell - 01-14-2015 07:56 AM I don't know if this might help: Code: [FUNCTION f_calc_damage] // argn1 = armor, argn2 = damage RE: Combat System - pushim - 01-14-2015 08:31 AM I am looking to build my own system, but is too hard to understand this script for me Open the spoiler Spoiler (Click to View) ON=@SpellSelect LOCAL.CastRecovery=<SRC.TAG0.FASTERCASTRECOVERY> IF (<LOCAL.CastRecovery> > 6) LOCAL.CastRecovery=6 ENDIF FLOAT.RecoveryTime=<FLOATVAL (((0.25*<dSPELLCIRCLE <ARGN1>>)-(<dLOCAL.CastRecovery>*0.25))*10)> CTAG.LASTCASTING=<EVAL <SERV.TIME>+<FEVAL <FLOAT.RecoveryTime>>> IF (<TAG0.LOWERMANACOST>) LOCAL.LOWERCOST=<TAG0.LOWERMANACOST> IF (<LOCAL.LOWERCOST> > 50) LOCAL.LOWERCOST=50 ENDIF ARGN2 -= <EVAL (<ARGN2>*<LOCAL.LOWERCOST>)/100> ENDIF ON=@SpellCast LOCAL.FASTCASTING=<SRC.TAG0.FASTERCASTING> IF (<LOCAL.FASTCASTING> > 2) && (<ACTION> != SKILL_CHIVALRY) LOCAL.FASTCASTING=2 ELIF (<LOCAL.FASTCASTING> > 4) && (<ACTION> == SKILL_CHIVALRY) LOCAL.FASTCASTING=4 ENDIF IF (<FINDID.i_rune_protection>) LOCAL.FASTCASTING -= 2 ENDIF ARGN3=<EVAL <FLOATVAL ((<ARGN3>/10)-(0.2*<dLOCAL.FASTCASTING>))>/100000> IF (<ARGN3> < 0) ARGN3=0 ENDIF ON=@HitTry IF ((<SRC.REGION.FLAGS>®ion_flag_safe) || ((<SRC.REGION.FLAGS>®ion_flag_no_pvp) && (<SRC.ISPLAYER>)) || (<SRC.FLAGS>&statf_invul) || (<SRC.FLAGS>&statf_stone) || ((<SRC.ISEVENT.e_young>) && (!(<SRC.TAG0.EVENT.ID>))) || (<SRC.NPC> == <DEF.BRAIN_HEALER>)) RETURN 1 ENDIF LOCAL.BONUSSWINGSPEEDINCREASE=<TAG0.SWINGINCREASE> IF ((<ACTION> != SKILL_WRESTLING) && (<ARGO.SPEED>)) FLOAT.FINALWEAPONSPEED=<FLOATVAL (<ARGO.SPEED>*(1+(<dLOCAL.BONUSSWINGSPEEDINCREASE>/100)))> ELSE FLOAT.FINALWEAPONSPEED=<FLOATVAL (50*(1+(<dLOCAL.BONUSSWINGSPEEDINCREASE>/100)))> ENDIF FLOAT.SWINGSPEED=<FLOATVAL ((80000/((<STAM>+100)*<FLOAT.FINALWEAPONSPEED>))/4)-0.5> ARGN1=<EVAL <FLOAT.SWINGSPEED>/100000> IF (<TAG0.DOINGDOUBLESTRIKE>) ARGN1=1 TAG.DOINGDOUBLESTRIKE= ELIF (<TAG0.FIRSTHIT> != <SRC>) && (<MEMORYFINDTYPE.MEMORY_WAR_TARG.LINK> == <SRC>) ARGN1=1 TAG.FIRSTHIT=<SRC> ELIF (<ARGN1> < 11) ARGN1=11 ELIF (<ARGN1> > 85) ARGN1=85 ENDIF LOCAL.HITCHANCEINCREASE=<TAG0.HITCHANCEINCREASE> IF (<LOCAL.HITCHANCEINCREASE> > 50) LOCAL.HITCHANCEINCREASE=50 ENDIF LOCAL.ANATOMYEVALINT=<EVAL (((<SRC.ANATOMY>+<SRC.EVALUATINGINTEL>)/10)+20)/2> FLOAT.ATTACKERABILITY=<FLOATVAL ((<I.<SERV.SKILL.<ACTION>.KEY>>+20.0)*(1+(<dLOCAL.HITCHANCEINCREASE>/100)))> REF1=<SRC.WEAPON> IF (<REF1.TAG0.USEBESTWEAPONSKILL>) LOCAL.SKILL1=<REF1.TAG0.USEBESTWEAPONSKILL> ELSE LOCAL.SKILL1=<REF1.SKILL> ENDIF LOCAL.DEFENSECHANCEINCREASE=<SRC.TAG0.HITCHANCEDECREASE> IF (<LOCAL.DEFENSECHANCEINCREASE> > 50) LOCAL.DEFENSECHANCEINCREASE=50 ENDIF IF (!(<REF1>)) IF (<EVAL <SRC.WRESTLING>/10> > <LOCAL.ANATOMYEVALINT>) FLOAT.DEFENDERABILITY=<FLOATVAL (((<SRC.WRESTLING>+20.0)*(1+(<dLOCAL.DEFENSECHANCEINCREASE>/100)))*2.0)> LOCAL.SKILLTOCOMPARE=<SRC.WRESTLING> ELSE FLOAT.DEFENDERABILITY=<FLOATVAL (((<dLOCAL.ANATOMYEVALINT>+20.0)*(1+(<dLOCAL.DEFENSECHANCEINCREASE>/100)))*2.0)> LOCAL.SKILLTOCOMPARE=<LOCAL.ANATOMYEVALINT> ENDIF ELSE FLOAT.DEFENDERABILITY=<FLOATVAL (((<SRC.<SERV.SKILL.<dLOCAL.SKILL1>.KEY>>+20.0)*(1+(<dLOCAL.DEFENSECHANCEINCREASE>/100)))*2.0)> LOCAL.SKILLTOCOMPARE=<SRC.<SERV.SKILL.<dLOCAL.SKILL1>.KEY>> ENDIF FLOAT.HITCHANCE=<FLOATVAL (<FLOAT.ATTACKERABILITY>/<FLOAT.DEFENDERABILITY>)> IF (<FLOAT.HITCHANCE> < <FLOATVAL 0.020000>) FLOAT.HITCHANCE=<FLOATVAL 0.020000> ENDIF TAG.COMBAT.SKILLTOCOMPARE=<EVAL (<LOCAL.SKILLTOCOMPARE>/10)+1> TAG.COMBAT.LASTACTION=<ACTION> IF (<FLOAT.HITCHANCE> > <RANDOMDOUBLE>) ACTDIFF=500 ELSE ACTDIFF=-500 ENDIF IF (<SRC.ISPLAYER>) IF (<SRC.FINDLAYER.2.TYPE> == T_SHIELD) LOCAL.BASEPARRYCHANCE=<EVAL (<SRC.PARRYING>/40)> IF (<LOCAL.BASEPARRYCHANCE> <= 0) LOCAL.BASEPARRYCHANCE=1 ENDIF ELIF (<SRC.FINDLAYER.1.ISWEAPON>) LOCAL.BUSHIDOGAIN=1 LOCAL.PARRYNEW=<EVAL (<SRC.PARRYING>*<SRC.BUSHIDO>)/48000> LOCAL.PARRYLEGACY=<EVAL <SRC.PARRYING>/80> IF (<LOCAL.PARRYNEW> > <LOCAL.PARRYLEGACY>) LOCAL.BASEPARRYCHANCE=<EVAL <LOCAL.PARRYNEW>+1> ELSE LOCAL.BASEPARRYCHANCE=<EVAL <LOCAL.PARRYLEGACY>+1> ENDIF ELIF (<SRC.FINDLAYER.2.ISWEAPON>) LOCAL.BUSHIDOGAIN=1 LOCAL.PARRYNEW=<EVAL (<SRC.PARRYING>*<SRC.BUSHIDO>)/41140> LOCAL.PARRYLEGACY=<EVAL <SRC.PARRYING>/80> IF (<LOCAL.PARRYNEW> > <LOCAL.PARRYLEGACY>) LOCAL.BASEPARRYCHANCE=<EVAL <LOCAL.PARRYNEW>+1> ELSE LOCAL.BASEPARRYCHANCE=<EVAL <LOCAL.PARRYLEGACY>+1> ENDIF ENDIF ENDIF IF (<LOCAL.BASEPARRYCHANCE>) SRC.SKILLGAIN Parrying <EVAL <I.<SERV.SKILL.<ACTION>.KEY>>/10> IF (<LOCAL.BUSHIDOGAIN>) SRC.SKILLGAIN bushido <EVAL <I.<SERV.SKILL.<ACTION>.KEY>>/10> ENDIF IF (<SRC.PARRYING> >= 100.0) || (<SRC.BUSHIDO> >= 100.0) LOCAL.BASEPARRYCHANCE += 5 ENDIF IF (<LOCAL.BASEPARRYCHANCE> > <R100>) ACTDIFF=-500 ENDIF ENDIF ON=@HitMiss IF (33 >= <R1,100>) IF (<dTAG0.COMBAT.SKILLTOCOMPARE> <= <EVAL (<I.<SERV.SKILL.<TAG0.COMBAT.LASTACTION>.KEY>>/10)+20> SKILLGAIN <SERV.SKILL.<TAG0.COMBAT.LASTACTION>.KEY> <dTAG0.COMBAT.SKILLTOCOMPARE> ELSE SKILLGAIN <SERV.SKILL.<TAG0.COMBAT.LASTACTION>.KEY> <EVAL (<I.<SERV.SKILL.<TAG0.COMBAT.LASTACTION>.KEY>>/10)+1> ENDIF IF (<dTAG0.COMBAT.SKILLTOCOMPARE> <= <EVAL (<I.TACTICS>/10)+20> SKILLGAIN TACTICS <dTAG0.COMBAT.SKILLTOCOMPARE> ELSE SKILLGAIN TACTICS <EVAL (<I.TACTICS>/10)+1> ENDIF SKILLGAIN ANATOMY <EVAL (<ANATOMY>/10)+1> ENDIF TAG.COMBAT.LASTACTION= TAG.COMBAT.SKILLTOCOMPARE= on=@Hit IF (<TAG0.SPECIALMOVE>) LOCAL.COMBATSKILLSUM=<EVAL <SWORDSMANSHIP>+<MACEFIGHTING>+<FENCING>+<ARCHERY>+<PARRYING>+<LUMBERJACKING>+<STEALTH>+<POISONING>+<BUSHIDO>+<NINJITSU>> IF (<LOCAL.COMBATSKILLSUM> > 300.0) LOCAL.BONUSMANA=10 ELIF (<LOCAL.COMBATSKILLSUM> > 200.0) LOCAL.BONUSMANA=5 ENDIF ENDIF IF (<dTAG0.COMBAT.SKILLTOCOMPARE> <= <EVAL (<I.<SERV.SKILL.<TAG0.COMBAT.LASTACTION>.KEY>>/10)+20> SKILLGAIN <SERV.SKILL.<TAG0.COMBAT.LASTACTION>.KEY> <dTAG0.COMBAT.SKILLTOCOMPARE> ELSE SKILLGAIN <SERV.SKILL.<TAG0.COMBAT.LASTACTION>.KEY> <EVAL (<I.<SERV.SKILL.<TAG0.COMBAT.LASTACTION>.KEY>>/10)+1> ENDIF IF (<dTAG0.COMBAT.SKILLTOCOMPARE> <= <EVAL (<I.TACTICS>/10)+20> SKILLGAIN TACTICS <dTAG0.COMBAT.SKILLTOCOMPARE> ELSE SKILLGAIN TACTICS <EVAL (<I.TACTICS>/10)+1> ENDIF SKILLGAIN ANATOMY <EVAL (<ANATOMY>/10)+1> TAG.COMBAT.LASTACTION= TAG.COMBAT.SKILLTOCOMPARE= IF (0<ARGO.UID>) LOCAL.BASEDAMAGE=<R<ARGO.DAM>> ELSE LOCAL.BASEDAMAGE=<R1,3> ENDIF IF (<LOCAL.BASEDAMAGE>) IF (<TACTICS> < 100.0) FLOAT.TACTICSBONUS=<FLOATVAL <TACTICS>/1.5> ELSE FLOAT.TACTICSBONUS=<FLOATVAL (<TACTICS>/1.5)+6.25> ENDIF FLOAT.ANATOMYBONUS=<FLOATVAL (<ANATOMY>/2)+5> IF (<ARGO.TYPE> == t_weapon_mace_sharp) IF (<LUMBERJACKING> < 100.0) FLOAT.LUMBERBONUS=<FLOATVAL <LUMBERJACKING>/5> ELSE FLOAT.LUMBERBONUS=<FLOATVAL (<LUMBERJACKING>/5)+10> ENDIF ENDIF IF (<STR> < 100) FLOAT.STRBONUS=<FLOATVAL <STR>*0.3> ELSE FLOAT.STRBONUS=<FLOATVAL (<STR>*0.3)+5> ENDIF LOCAL.ITEMDAMAGEINCREASE=<dTAG0.DAMINCREASE> IF (<LOCAL.ITEMDAMAGEINCREASE> > 125) LOCAL.ITEMDAMAGEINCREASE=125 ENDIF FLOAT.TOTALDAMAGEBONUS=<FLOATVAL <FLOAT.TACTICSBONUS>+<FLOAT.ANATOMYBONUS>+<FLOAT.LUMBERBONUS>+<FLOAT.STRBONUS>+<dLOCAL.ITEMDAMAGEINCREASE>> IF (<TAG0.SPECIALMOVE> == 4) LOCAL.MANACOST=<FEVAL <FLOATVAL ((25-<dLOCAL.BONUSMANA>)*(1-(<TAG0.LOWERMANACOST>/100)))>> IF (<MANA> >= <LOCAL.MANACOST>) SYSMESSAGELOC -1,1060090 SRC.SYSMESSAGELOC -1,1060091 IF (<LOCAL.MANACOST> > 0) MANA -= <LOCAL.MANACOST> ENDIF FLOAT.TOTALDAMAGEBONUS=<FLOATVAL <FLOAT.TOTALDAMAGEBONUS>+50.0> ELSE SYSMESSAGELOC -1,1060174,<dLOCAL.MANACOST> ENDIF ELIF (<TAG0.SPECIALMOVE> == 12) LOCAL.MANACOST=<FEVAL <FLOATVAL ((20-<dLOCAL.BONUSMANA>)*(1-(<TAG0.LOWERMANACOST>/100)))>> IF (<STEALTH> < 80.0) SYSMESSAGELOC -1,1063013,80,Stealth ELIF (<MANA> >= <LOCAL.MANACOST>) SYSMESSAGELOC -1,1060078 SRC.SYSMESSAGELOC -1,1060079 IF (<LOCAL.MANACOST> > 0) MANA -= <LOCAL.MANACOST> ENDIF FLOAT.TOTALDAMAGEBONUS=<FLOATVAL <FLOAT.TOTALDAMAGEBONUS>+25.0> WARMODE 0 FLAGS=<HVAL <FLAGS>|STATF_HIDDEN> UPDATE ELSE SYSMESSAGELOC -1,1060174,<dLOCAL.MANACOST> ENDIF ELIF (<TAG0.SPECIALMOVE> == 19) LOCAL.MANACOST=<FEVAL <FLOATVAL ((30-<dLOCAL.BONUSMANA>)*(1-(<TAG0.LOWERMANACOST>/100)))>> IF (<SRC.ISEVENT.e_talon_effect>) SYSMESSAGELOC -1,1060089 ELIF (<MANA> >= <LOCAL.MANACOST>) SYSMESSAGELOC -1,1063358 SRC.SYSMESSAGELOC -1,1063359 IF (<LOCAL.MANACOST> > 0) MANA -= <LOCAL.MANACOST> ENDIF FLOAT.TOTALDAMAGEBONUS=<FLOATVAL <FLOAT.TOTALDAMAGEBONUS>+20.0> SRC.TAG0.OVERRIDE.REGENVAL_0 -= 25 SRC.EVENTS +e_talon_effect SRC.TIMERF 10,F_CANCEL_TALONDEGEN ELSE SYSMESSAGELOC -1,1060174,<dLOCAL.MANACOST> ENDIF ENDIF FLOAT.FINALDAMAGE=<FLOATVAL <dLOCAL.BASEDAMAGE>*(1+(<FLOAT.TOTALDAMAGEBONUS>/100))> ARGN1=<EVAL <FEVAL <FLOAT.FINALDAMAGE>>+1> IF (<TAG0.SPECIALMOVE> == 13) LOCAL.MANACOST=<FEVAL <FLOATVAL ((15-<dLOCAL.BONUSMANA>)*(1-(<TAG0.LOWERMANACOST>/100)))>> IF (<MANA> >= <LOCAL.MANACOST>) F_WHIRLWIND_ATTACK <ARGN1> <SRC.UID> SOUND 673 IF (<LOCAL.MANACOST> > 0) MANA -= <LOCAL.MANACOST> ENDIF ELSE SYSMESSAGELOC -1,1060174,<dLOCAL.MANACOST> ENDIF ELIF (<TAG0.SPECIALMOVE> == 15) LOCAL.MANACOST=<FEVAL <FLOATVAL ((30-<dLOCAL.BONUSMANA>)*(1-(<TAG0.LOWERMANACOST>/100)))>> IF (<TAG0.FRENZIEDWHIRLWIND>) SYSMESSAGELOC -1,1060089 ELIF (<MANA> >= <LOCAL.MANACOST>) IF (<LOCAL.MANACOST> > 0) MANA -= <LOCAL.MANACOST> ENDIF TAG.FRENZIEDWHIRLWIND=2 F_FRENZIED_WHIRLWIND=<EVAL ((<ARGN1>/3)*2)> TIMERF 2,F_FRENZIED_WHIRLWIND=<EVAL ((<ARGN1>/3)*2)> ELSE SYSMESSAGELOC -1,1060174,<dLOCAL.MANACOST> ENDIF ELIF (<TAG0.SPECIALMOVE> == 29) LOCAL.MANACOST=<FEVAL <FLOATVAL ((40-<dLOCAL.BONUSMANA>)*(1-(<TAG0.LOWERMANACOST>/100)))>> IF (<MANA> >= <LOCAL.MANACOST>) SYSMESSAGELOC -1,1074374 SRC.SYSMESSAGELOC -1,1074375 IF (<LOCAL.MANACOST> > 0) MANA -= <LOCAL.MANACOST> ENDIF ARGN1=<FEVAL <FLOATVAL <ARGN1>*1.65>> DAMAGE <R30,45> <DEF.DAM_PHYSICAL> <SRC> ELSE SYSMESSAGELOC -1,1060174,<dLOCAL.MANACOST> ENDIF ENDIF IF (<ARGO.TAG0.VELOCITY>) IF (<ARGO.TAG0.VELOCITY> >= <R1,100>) ARGN1 += <DISTANCE> ENDIF ENDIF IF !(<SRC.ISPLAYER>) IF (!(<ISEMPTY <TAG.ENEMYOFONE.TARGET>>)) IF (<SRC.BASEID> == <TAG.ENEMYOFONE.TARGET>) ARGN1 += <EVAL <ARGN1>/2> SRC.EFFECT 3,i_fx_glow,16,20,,43 ENDIF ENDIF ENDIF IF (<ARGO.TAG0.HITDISPEL>) IF (<SRC.FLAGS>&STATF_CONJURED) IF (<ARGO.TAG0.HITDISPEL> >= <R1,100>) SRC.SPELLEFFECT S_DISPEL,100.0,<UID> ENDIF ENDIF ENDIF IF (<ARGO.TAG0.HITFIREBALL>) IF (<ARGO.TAG0.HITFIREBALL> >= <R1,100>) SRC.SPELLEFFECT S_FIREBALL,<R500,1000>,<UID> ENDIF ENDIF IF (<ARGO.TAG0.HITHARM>) IF (<ARGO.TAG0.HITHARM> >= <R1,100>) SRC.SPELLEFFECT S_HARM,<R500,1000>,<UID> ENDIF ENDIF IF (<ARGO.TAG0.HITLIGHTNING>) IF (<ARGO.TAG0.HITLIGHTNING> >= <R1,100>) SRC.SPELLEFFECT s_lightning,<R500,1000>,<UID> ENDIF ENDIF IF (<ARGO.TAG0.MAGICARROW>) IF (<ARGO.TAG0.MAGICARROW> >= <R1,100>) SRC.SPELLEFFECT s_magic_arrow,<R650,1000>,<UID> ENDIF ENDIF IF (<ARGO.TAG0.HITPOISONAREA>) IF (<ARGO.TAG0.HITPOISONAREA> >= <R1,100>) POISONDAMAGEAREA <UID> ENDIF ENDIF IF (<ARGO.TAG0.ORB.EFEITO>) LOCAL.EFEITO=<ARGO.TAG0.ORB.EFEITO> ARGN2 |= <ARGO.TAG0.ORB.EFEITO> IF (<LOCAL.EFEITO>&08) && !(<SRC.FLAGS>&statf_poisoned) SRC.SPELLEFFECT s_poison,<magery>,<uid> ENDIF IF (<LOCAL.EFEITO>&010) ARGN1 += <R1,5> ENDIF IF (<LOCAL.EFEITO>&020) ARGN1 += <R1,5> ENDIF IF (<LOCAL.EFEITO>&0200) && !(<SRC.FLAGS>&statf_freeze) SRC.SPELLEFFECT s_paralyze,<magery>,<uid> ENDIF IF (<LOCAL.EFEITO>&01000) TRYSRC <UID> DAMAGEAREA <R<ARGO.DAM>> <SRC> <ARGO.UID> ENDIF ENDIF IF (3 >= <R1,100>) && (<WEAPON>) REF1=<WEAPON> IF (<REF1.HITS>) REF1.HITS -- ELSE TRYSRC <UID> MESSAGE @,,2 1061121 REF1.MAXHITS -- IF (<REF1.MAXHITS> <= 0) REF1.REMOVE ENDIF ENDIF IF (<REF1.TAG0.SELFREPAIR>) && (!(<REF1.TAG0.JUSTREPAIRED>)) IF (<REF1.HITS> < <REF1.MAXHITS>) REF1.HITS += <REF1.TAG0.SELFREPAIR> IF (<REF1.HITS> > <REF1.MAXHITS>) REF1.HITS=<REF1.MAXHITS> ENDIF REF1.TAG0.JUSTREPAIRED=1 REF1.TIMERF 60,TAG.JUSTREPAIRED= ENDIF ENDIF REF1.RESENDTOOLTIP 1 ENDIF ENDIF IF ((<TAG0.LIFELEECH>) || (<TAG0.STAMLEECH>) || (<TAG0.MANALEECH>)) LOCAL.REALDEF=<SRC.AC> IF ((<LOCAL.REALDEF> > 80) && (!(<SRC.ISPLAYER>))) LOCAL.REALDEF=80 ELIF ((<LOCAL.REALDEF> > 70) && (<SRC.ISPLAYER>)) LOCAL.REALDEF=70 ENDIF LOCAL.DAMAGEGIVEN=<FEVAL <FLOATVAL <ARGN1>*(1-(<dLOCAL.REALDEF>/100))>> IF (<TAG0.LIFELEECH>) HITS += <R0,<FEVAL <FLOATVAL ((<dLOCAL.DAMAGEGIVEN>*0.45)*(<dTAG0.LIFELEECH>/100))>>> IF (<HITS> > <MAXHITS>) HITS=<MAXHITS> ENDIF ENDIF IF (<TAG0.STAMLEECH>) IF (<TAG0.STAMLEECH> >= <R1,100>) STAM += <dLOCAL.DAMAGEGIVEN> IF (<STAM> > <MAXSTAM>) STAM=<MAXSTAM> ENDIF ENDIF ENDIF IF (<TAG0.MANALEECH>) MANA += <R0,<FEVAL <FLOATVAL ((<dLOCAL.DAMAGEGIVEN>*0.45)*(<dTAG0.MANALEECH>/100))>>> IF (<MANA> > <MAXMANA>) MANA=<MAXMANA> ENDIF ENDIF ENDIF On=@GetHit IF (<SRC.ISPLAYER>) && (<REGION.FLAGS>®ION_FLAG_NO_PVP) RETURN 1 ENDIF IF (<ACTION> == SKILL_MAGERY) || (<ACTION> == SKILL_CHIVALRY) || (<ACTION> == SKILL_NECROMANCY) IF (!(<FINDID.i_rune_protection>)) ACTION=-1 ENDIF ENDIF IF (<SRC.TAG0.SPECIALMOVE>) LOCAL.COMBATSKILLSUM=<EVAL <SRC.SWORDSMANSHIP>+<SRC.MACEFIGHTING>+<SRC.FENCING>+<SRC.ARCHERY>+<SRC.PARRYING>+<SRC.LUMBERJACKING>+<SRC.STEALTH>+<SRC.POISONING>+<SRC.BUSHIDO>+<SRC.NINJITSU>> IF (<LOCAL.COMBATSKILLSUM> > 300.0) LOCAL.BONUSMANA=10 ELIF (<LOCAL.COMBATSKILLSUM> > 200.0) LOCAL.BONUSMANA=5 ENDIF ENDIF IF (<REGION.SAFE> == 1) RETURN 0 ENDIF IF !(<TAG0.GOTHIT>) IF (!(<AC>)) LOCAL.DEFEND=<EVAL (((<MAGICRESISTANCE>/10)-50)/3)*2> ELSE LOCAL.DEFEND=<AC> ENDIF IF (<FINDID.i_rune_protection>) LOCAL.DEFEND -= 10 ENDIF IF (!(<SRC.ISPLAYER>)) IF (<LOCAL.DEFEND> > 80) LOCAL.DEFEND=80 ENDIF ELSE IF (<LOCAL.DEFEND> > 75) LOCAL.DEFEND=75 ENDIF ENDIF IF (<FINDID.i_rune_protection>) LOCAL.DEFEND -= 5 IF (<LOCAL.DEFEND> < 0) LOCAL.DEFEND=0 ENDIF ENDIF IF (<TAG0.GOTHITBYSPELL>) IF (!(<SRC.ISPLAYER>)) IF (!(<SRC.EVALUATINGINTEL>)) SRC.EVALUATINGINTEL=<SRC.MAGERY> ENDIF ENDIF FLOAT.SPELLBASEDAMAGE=<FLOATVAL <R<SERV.SPELL.<dTAG0.GOTHITBYSPELL>.EFFECT>>> FLOAT.EVALUATEINTELBONUS=<FLOATVAL (((<SRC.EVALUATINGINTEL>*3)/100)+1)> FLOAT.SPELLDAMAGEINCREASE=<FLOATVAL <SRC.INT>/10> IF (<SRC.INSCRIPTION> >= 100.0) FLOAT.SPELLDAMAGEINCREASE=<FLOATVAL <FLOAT.SPELLDAMAGEINCREASE>+10> ENDIF IF (<SRC.TAG0.MAGICDAMINCREASE>) LOCAL.ITEMSPELLDAMAGEINCREASE=<SRC.TAG0.MAGICDAMINCREASE> IF (<LOCAL.ITEMSPELLDAMAGEINCREASE> > 15) LOCAL.ITEMSPELLDAMAGEINCREASE=15 ENDIF FLOAT.SPELLDAMAGEINCREASE=<FLOATVAL <FLOAT.SPELLDAMAGEINCREASE>+<dLOCAL.ITEMSPELLDAMAGEINCREASE>> ENDIF FLOAT.SPELLBASEDAMAGE=<FLOATVAL ((<FLOAT.SPELLBASEDAMAGE>*<FLOAT.EVALUATEINTELBONUS>)*((<FLOAT.SPELLDAMAGEINCREASE>/100)+1))> ARGN1=<FEVAL <FLOAT.SPELLBASEDAMAGE>> IF (<TAG0.GOTHITBYSPELL> == 12) //harm IF (<DISTANCE> == 2) ARGN1 /= 2 ELIF (<DISTANCE> > 2) ARGN1 /= 4 ENDIF ENDIF TAG.GOTHITBYSPELL ENDIF IF !(<ARGN2>&DAM_GOD) IF (<ARGN1> > 330) ARGN1=330 ENDIF IF (<SRC.TAG0.SPECIALMOVE> == 1) LOCAL.MANACOST=<FEVAL <FLOATVAL ((30-<dLOCAL.BONUSMANA>)*(1-(<SRC.TAG0.LOWERMANACOST>/100)))>> IF (<SRC.MANA> >= <LOCAL.MANACOST>) LOCAL.DEFEND=5 SRC.SYSMESSAGELOC -1,1060076 IF (<LOCAL.MANACOST> > 0) SRC.MANA -= <LOCAL.MANACOST> ENDIF ELSE SRC.SYSMESSAGELOC -1,1060174,<dLOCAL.MANACOST> ENDIF SRC.TAG.SPECIALMOVE SRC.F_CANCELSPECIALMOVE SRC.EVENTS -E_SPECIAL_MOVE ENDIF ARGN1=<FEVAL <FLOATVAL <ARGN1>*(1-(<dLOCAL.DEFEND>/100))>> IF (!(<SRC.ISPLAYER>)) IF (!(<ISEMPTY <TAG.ENEMYOFONE.TARGET>>)) IF (<TAG.ENEMYOFONE.TARGET> != <SRC.BASEID>) ARGN1 *= 2 ENDIF ENDIF IF ((<ARGN1> > 75) ARGN1=75 ENDIF ENDIF IF (<TAG0.DAMAGERETURN>) && (<SRC.UID> != <UID>) IF !(<R4>) && (!(<ARGN2>&DAM_MAGIC)) && (!(<ARGN2>&<DEF.dam_drain>)) && (!(<TAG0.GOTHITBYSPELL>)) LOCAL.DAMAGERETURN=<TAG0.DAMAGERETURN> IF (<LOCAL.DAMAGERETURN> > 35) LOCAL.DAMAGERETURN=35 ENDIF SRC.DAMAGE <EVAL ((<ARGN1>*<LOCAL.DAMAGERETURN>)/100)> <DEF.dam_physical> <UID> ENDIF ENDIF TAG.GOTHIT=1 IF (!(<ARGN2>&<DEF.DAM_MAGIC>)) STAM -= <EVAL <ARGN1>/3> ENDIF IF (<STAM> < 1) STAM=1 ENDIF REF1=<FINDLAYER.<DEF.layer_horse>.UID> IF (<REF1>) IF (<REF1.TAG0.BARDINGEFFECT>) LOCAL.DAMAGEREDUCTION=<EVAL (<ARGN1>*<REF1.TAG0.BARDINGEFFECT>)/100> ARGN1 -= <LOCAL.DAMAGEREDUCTION> IF (<EVAL <REF1.HITS>-<LOCAL.DAMAGEREDUCTION>> > 0) REF1.HITS -= <LOCAL.DAMAGEREDUCTION> ELSE REF1.KILL ENDIF ENDIF ENDIF IF (!(<SRC.OWNER>)) DAMAGE <ARGN1> <HVAL <ARGN2>|<DEF.DAM_GOD>> <SRC> ELSE DAMAGE <ARGN1> <HVAL <ARGN2>|<DEF.DAM_GOD>|<DEF.dam_noreveal>> <SRC.OWNER> ENDIF IF (2 > <R100>) DAMAGEARMOR ENDIF RETURN 1 ENDIF ELSE SRC.TRIGGER @GaveDamage,<def.TAT_AS_ARGN>,<ARGN1>,<ARGN2>,<UID> TAG.GOTHIT ENDIF |