- Fixed chances for inflicting status changes on Spectral Spear (self), Ivory Lance and Pagdayaw
- Fixed Raid to deal damage in a 7x7 area in renewal (bugreport:7381) - Fixed success chance of Storm Gust's freeze status change in pre-renewal, iROwiki says 150% and feedback from official server players confirmed that it is indeed 150% - Second phase of the big status resistance update: * Created a structure to consider status change source (we are still missing the information and use a copy of target instead right now, lighta is working on a solution) * Entered the fully official formulas of all status changes based on an Aegis leak (since source is not in right now the level difference will always give "0") * As tick_def2 is never equal to sc_def2, it will not use it by default anymore * Applied Deep Sleep's kRO balance update, duration can now be reduced by 50ms for each int and each base level, minimum duration is 5000ms * The final chance for the status change will now consider Aegis accuracy (everything between 0.01% and 0.09% should actually be 0.1%, etc.) git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17206 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
263aa1fc7f
commit
afd58bbb45
@ -748,13 +748,13 @@
|
||||
1474,Gae_Bolg,Gae Bolg,4,20,,2000,160,,3,0,0x00004082,7,2,34,4,60,1,5,{ bonus bIgnoreDefRace,RC_Dragon; bonus2 bAddRace,RC_Boss,10; },{},{}
|
||||
1475,Horseback_Lance,Equestrian's Spear,4,20,,3700,200,,4,0,0x00004082,7,2,34,4,75,1,5,{},{},{}
|
||||
1476,Crescent_Scythe_,Crescent Scythe,4,20,,2500,180,,3,1,0x00004082,7,2,34,4,48,1,5,{ bonus bCritical,30; bonus bHit,10; },{},{}
|
||||
1477,Spectral_Spear,Spectral Spear,4,20,,2000,170,,3,0,0x00004082,7,2,34,4,75,1,5,{ bonus2 bAddEle,Ele_Dark,20; bonus2 bAddRace,RC_Demon,20; bonus2 bAddRace,RC_Undead,20; bonus2 bSubEle,Ele_Dark,10; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; bonus3 bAddEff,Eff_Confusion,10000,ATF_SELF|ATF_SHORT; bonus bHPGainValue,50; },{},{}
|
||||
1477,Spectral_Spear,Spectral Spear,4,20,,2000,170,,3,0,0x00004082,7,2,34,4,75,1,5,{ bonus2 bAddEle,Ele_Dark,20; bonus2 bAddRace,RC_Demon,20; bonus2 bAddRace,RC_Undead,20; bonus2 bSubEle,Ele_Dark,10; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; bonus2 bAddEff2,Eff_Confusion,1000; bonus bHPGainValue,50; },{},{}
|
||||
1478,Ahlspiess,Ahlspiess,4,20,,1000,120,,3,0,0x00004080,7,2,34,4,65,1,5,{ bonus bIgnoreDefRace,RC_NonBoss; bonus bIgnoreDefRace,RC_Boss; bonus2 bAddRace,RC_DemiHuman,10; bonus3 bAutoSpell,"KN_PIERCE",5,30; },{},{}
|
||||
1479,Spectral_Spear_,Spectral Spear,4,20,,2000,170,,3,1,0x00004082,7,2,34,4,75,1,5,{ bonus2 bAddEle,Ele_Dark,20; bonus2 bAddRace,RC_Demon,20; bonus2 bAddRace,RC_Undead,20; bonus2 bSubEle,Ele_Dark,10; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; bonus3 bAddEff,Eff_Confusion,10000,ATF_SELF|ATF_SHORT; bonus bHPGainValue,50; },{},{}
|
||||
1479,Spectral_Spear_,Spectral Spear,4,20,,2000,170,,3,1,0x00004082,7,2,34,4,75,1,5,{ bonus2 bAddEle,Ele_Dark,20; bonus2 bAddRace,RC_Demon,20; bonus2 bAddRace,RC_Undead,20; bonus2 bSubEle,Ele_Dark,10; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; bonus2 bAddEff2,Eff_Confusion,1000; bonus bHPGainValue,50; },{},{}
|
||||
1480,Gae_Bolg_,Gae Bolg,4,20,,2000,160,,3,2,0x00004082,7,2,34,4,60,1,5,{ bonus bIgnoreDefRace,RC_Dragon; bonus2 bAddRace,RC_Boss,10; },{},{}
|
||||
1481,Zephyrus_,Zephyrus,4,20,,2000,170,,3,3,0x00004082,7,2,34,4,48,1,5,{ bonus bAtkEle,Ele_Wind; bonus2 bAddEff,Eff_Silence,200; bonus3 bAutoSpell,"MG_THUNDERSTORM",3,100; },{},{}
|
||||
1482,BF_Lance1,Assaulter Lance,4,,,0,160,,3,0,0x00004082,7,2,34,3,80,1,5,{ bonus bStr,2; bonus2 bAddRace,RC_DemiHuman,25; bonus bIgnoreDefRace,RC_DemiHuman; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1483,Ivory_Lance,Ivory Lance,4,20,,1000,160,,3,1,0x00004082,2,2,34,3,50,1,5,{ bonus bAgi,2; bonus bAspdRate,3; bonus2 bAddEff,Eff_Bleeding,100; bonus3 bAutoSpell,"LK_JOINTBEAT",1,100; skill "KN_SPEARSTAB",5; },{},{}
|
||||
1483,Ivory_Lance,Ivory Lance,4,20,,1000,160,,3,1,0x00004082,2,2,34,3,50,1,5,{ bonus bAgi,2; bonus bAspdRate,3; bonus2 bAddEff,Eff_Bleeding,300; bonus3 bAutoSpell,"LK_JOINTBEAT",1,100; skill "KN_SPEARSTAB",5; },{},{}
|
||||
1484,Cardo,Cardo,4,20,,5600,150,,3,1,0x00000080,2,2,34,4,70,1,5,{ bonus bAspdRate,-10; bonus bDef,getrefine()/2; },{},{}
|
||||
1485,Battle_Fork,Battle Fork,4,20,,700,112,,3,4,0x00004082,2,2,34,2,50,1,5,{},{},{}
|
||||
1486,Krieger_Twohand_Spear1,Glorious Lance,4,20,,0,220,,3,0,0x00004082,7,2,34,4,80,1,5,{ bonus2 bAddRace,RC_DemiHuman,70; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) { if(BaseJob==Job_Knight) bonus4 bAutoSpellOnSkill,"KN_PIERCE","NPC_CRITICALWOUND",2,200; else if(BaseJob==Job_Crusader) bonus3 bAutoSpell,"PA_PRESSURE",5,200; } },{},{}
|
||||
@ -2430,7 +2430,7 @@
|
||||
5260,Cookie_Hat,Cookie Hat,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,0,1,217,{ bonus bAgi,1; bonus bFlee2,5; bonus bCritAtkRate,5; },{},{}
|
||||
5261,Silver_Tiara_,Silver Tiara,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,0,1,218,{ bonus bInt,2; if(BaseClass==Job_Mage) bonus bMatkRate,(JobLevel/20); if(Baseclass==Job_Acolyte) bonus bUseSPrate,-(JobLevel/10); if(BaseClass==Job_Archer) bonus bMaxSP,(JobLevel*2); },{},{}
|
||||
5262,Gold_Tiara_,Golden Tiara,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,0,1,232,{ bonus bStr,2; bonus bUnbreakableHelm,0; if((readparam(bDex)<56)&&(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief)) bonus bDex,JobLevel/7; },{},{}
|
||||
5263,Ati_Atihan_Hat,Pagdayaw,5,20,,100,,1,,0,0xFFFFFFFE,7,2,769,,20,1,303,{ bonus2 bSubEle,Ele_Water,1; bonus2 bSubEle,Ele_Earth,1; bonus2 bSubEle,Ele_Fire,1; bonus2 bSubEle,Ele_Wind,1; bonus2 bAddEff,Eff_Curse,3; },{},{}
|
||||
5263,Ati_Atihan_Hat,Pagdayaw,5,20,,100,,1,,0,0xFFFFFFFE,7,2,769,,20,1,303,{ bonus2 bSubEle,Ele_Water,1; bonus2 bSubEle,Ele_Earth,1; bonus2 bSubEle,Ele_Fire,1; bonus2 bSubEle,Ele_Wind,1; bonus2 bAddEff,Eff_Curse,300; },{},{}
|
||||
5264,Aussie_Flag_Hat,Australian Flag Hat,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,0,1,304,{ bonus bAllStats,2; },{},{}
|
||||
5265,Apple_Of_Archer_C,Apple of Archer,5,1,,0,,7,,0,0xFFFFFFFE,7,2,256,,1,0,72,{ bonus bDex,4; },{},{}
|
||||
5266,Bunny_Band_C,Bunny Band,5,1,,0,,9,,0,0xFFFFFFFF,7,2,256,,1,0,15,{ bonus bMdef,5; bonus2 bSubRace,RC_DemiHuman,10; },{},{}
|
||||
|
@ -780,9 +780,9 @@
|
||||
1474,Gae_Bolg,Gae Bolg,4,20,,2000,160,,3,0,0x00004082,7,2,34,4,60,1,5,{ bonus bIgnoreDefRace,RC_Dragon; bonus2 bAddRace,RC_Boss,10; },{},{}
|
||||
1475,Horseback_Lance,Equestrian's Spear,4,20,,3700,200,,4,0,0x00004082,7,2,34,4,75,1,5,{},{},{}
|
||||
1476,Crescent_Scythe_,Crescent Scythe,4,20,,2500,180,,3,1,0x00004082,7,2,34,4,48,1,5,{ bonus bCritical,30; bonus bHit,10; },{},{}
|
||||
1477,Spectral_Spear,Spectral Spear,4,20,,2000,170,,3,0,0x00004082,7,2,34,4,75,1,5,{ bonus2 bAddEle,Ele_Dark,20; bonus2 bAddRace,RC_Demon,20; bonus2 bAddRace,RC_Undead,20; bonus2 bSubEle,Ele_Dark,10; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; bonus3 bAddEff,Eff_Confusion,10000,ATF_SELF|ATF_SHORT; bonus bHPGainValue,50; },{},{}
|
||||
1477,Spectral_Spear,Spectral Spear,4,20,,2000,170,,3,0,0x00004082,7,2,34,4,75,1,5,{ bonus2 bAddEle,Ele_Dark,20; bonus2 bAddRace,RC_Demon,20; bonus2 bAddRace,RC_Undead,20; bonus2 bSubEle,Ele_Dark,10; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; bonus2 bAddEff2,Eff_Confusion,1000; bonus bHPGainValue,50; },{},{}
|
||||
1478,Ahlspiess,Ahlspiess,4,20,,1000,120,,3,0,0x00004080,7,2,34,4,65,1,5,{ bonus bIgnoreDefRace,RC_NonBoss; bonus bIgnoreDefRace,RC_Boss; bonus2 bAddRace,RC_DemiHuman,10; bonus3 bAutoSpell,"KN_PIERCE",5,30; },{},{}
|
||||
1479,Spectral_Spear_,Spectral Spear,4,20,,2000,170,,3,1,0x00004082,7,2,34,4,75,1,5,{ bonus2 bAddEle,Ele_Dark,20; bonus2 bAddRace,RC_Demon,20; bonus2 bAddRace,RC_Undead,20; bonus2 bSubEle,Ele_Dark,10; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; bonus3 bAddEff,Eff_Confusion,10000,ATF_SELF|ATF_SHORT; bonus bHPGainValue,50; },{},{}
|
||||
1479,Spectral_Spear_,Spectral Spear,4,20,,2000,170,,3,1,0x00004082,7,2,34,4,75,1,5,{ bonus2 bAddEle,Ele_Dark,20; bonus2 bAddRace,RC_Demon,20; bonus2 bAddRace,RC_Undead,20; bonus2 bSubEle,Ele_Dark,10; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; bonus2 bAddEff2,Eff_Confusion,1000; bonus bHPGainValue,50; },{},{}
|
||||
1480,Gae_Bolg_,Gae Bolg,4,20,,2000,160,,3,2,0x00004082,7,2,34,4,60,1,5,{ bonus bIgnoreDefRace,RC_Dragon; bonus2 bAddRace,RC_Boss,10; },{},{}
|
||||
1481,Zephyrus_,Zephyrus,4,20,,2000,170,,3,3,0x00004082,7,2,34,4,48,1,5,{ bonus bAtkEle,Ele_Wind; bonus2 bAddEff,Eff_Silence,200; bonus3 bAutoSpell,"MG_THUNDERSTORM",3,100; },{},{}
|
||||
1482,BF_Lance1,Assaulter Lance,4,,,0,160,,3,0,0x00004082,7,2,34,3,80,1,5,{ bonus bStr,2; bonus2 bAddRace,RC_DemiHuman,25; bonus bIgnoreDefRace,RC_DemiHuman; bonus bUnbreakableWeapon,0; },{},{}
|
||||
@ -2886,7 +2886,7 @@
|
||||
5260,Cookie_Hat,Cookie Hat,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,0,1,217,{ bonus bAgi,1; bonus bFlee2,5; bonus bCritAtkRate,5; },{},{}
|
||||
5261,Silver_Tiara_,Silver Tiara,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,0,1,218,{ bonus bInt,2; if(BaseClass==Job_Mage) bonus bMatkRate,(JobLevel/20); if(Baseclass==Job_Acolyte) bonus bUseSPrate,-(JobLevel/10); if(BaseClass==Job_Archer) bonus bMaxSP,(JobLevel*2); },{},{}
|
||||
5262,Gold_Tiara_,Golden Tiara,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,0,1,232,{ bonus bStr,2; bonus bUnbreakableHelm,0; if((readparam(bDex)<56)&&(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief)) bonus bDex,JobLevel/7; },{},{}
|
||||
5263,Ati_Atihan_Hat,Pagdayaw,5,20,,100,,1,,0,0xFFFFFFFE,7,2,769,,20,1,303,{ bonus2 bSubEle,Ele_Water,1; bonus2 bSubEle,Ele_Earth,1; bonus2 bSubEle,Ele_Fire,1; bonus2 bSubEle,Ele_Wind,1; bonus2 bAddEff,Eff_Curse,3; },{},{}
|
||||
5263,Ati_Atihan_Hat,Pagdayaw,5,20,,100,,1,,0,0xFFFFFFFE,7,2,769,,20,1,303,{ bonus2 bSubEle,Ele_Water,1; bonus2 bSubEle,Ele_Earth,1; bonus2 bSubEle,Ele_Fire,1; bonus2 bSubEle,Ele_Wind,1; bonus2 bAddEff,Eff_Curse,300; },{},{}
|
||||
5264,Aussie_Flag_Hat,Australian Flag Hat,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,0,1,304,{ bonus bAllStats,2; },{},{}
|
||||
5265,Apple_Of_Archer_C,Apple of Archer,5,1,,0,,7,,0,0xFFFFFFFE,7,2,256,,1,0,72,{ bonus bDex,4; },{},{}
|
||||
5266,Bunny_Band_C,Bunny Band,5,1,,0,,9,,0,0xFFFFFFFF,7,2,256,,1,0,15,{ bonus bMdef,5; bonus2 bSubRace,RC_DemiHuman,10; },{},{}
|
||||
|
@ -257,7 +257,7 @@
|
||||
211,1,6,1,0,0x1,0,10,1,no,0,0,0,weapon,0, RG_STEALCOIN,Mug
|
||||
212,-1,6,1,-1,0x40,0,10,1,no,0,0,0,weapon,0, RG_BACKSTAP,Back Stab
|
||||
213,0,0,0,0,0,0,5,0,no,0,0,0,none,0, RG_TUNNELDRIVE,Stalk
|
||||
214,0,6,4,-1,0x2,1,5,1,no,0,0,0,weapon,0, RG_RAID,Sightless Mind
|
||||
214,0,6,4,-1,0x2,3,5,1,no,0,0,0,weapon,0, RG_RAID,Sightless Mind
|
||||
215,1,6,1,0,0x1,0,5,1,no,0,0,0,weapon,0, RG_STRIPWEAPON,Divest Weapon
|
||||
216,1,6,1,0,0x1,0,5,1,no,0,0,0,weapon,0, RG_STRIPSHIELD,Divest Shield
|
||||
217,1,6,1,0,0x1,0,5,1,no,0,0,0,weapon,0, RG_STRIPARMOR,Divest Armor
|
||||
|
@ -1001,9 +1001,9 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint
|
||||
#ifdef RENEWAL
|
||||
sc_start(bl,SC_FREEZE,65-(5*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv));
|
||||
#else
|
||||
//Tharis pointed out that this is normal freeze chance with a base of 300%
|
||||
//On third hit, there is a 150% to freeze the target
|
||||
if(tsc->sg_counter >= 3 &&
|
||||
sc_start(bl,SC_FREEZE,300,skill_lv,skill_get_time2(skill_id,skill_lv)))
|
||||
sc_start(bl,SC_FREEZE,150,skill_lv,skill_get_time2(skill_id,skill_lv)))
|
||||
tsc->sg_counter = 0;
|
||||
/**
|
||||
* being it only resets on success it'd keep stacking and eventually overflowing on mvps, so we reset at a high value
|
||||
|
@ -6195,17 +6195,22 @@ void status_change_init(struct block_list *bl)
|
||||
//the flag values are the same as in status_change_start.
|
||||
int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int tick, int flag)
|
||||
{
|
||||
//Temporary to simulate *src which lighta will add [Playtester]
|
||||
struct block_list *src = bl;
|
||||
|
||||
//Percentual resistance: 10000 = 100% Resist
|
||||
//Example: 50% -> sc_def=5000 -> 25%; 5000ms -> tick_def=5000 -> 2500ms
|
||||
int sc_def = 0, tick_def = -1; //-1 = use sc_def
|
||||
//Linear resistance substracted from rate and tick after percentual resistance was applied
|
||||
//Example: 25% -> sc_def2=2000 -> 5%; 2500ms -> tick_def2=2000 -> 500ms
|
||||
int sc_def2 = 0, tick_def2 = -1; //-1 = use sc_def2
|
||||
struct status_data* status;
|
||||
struct status_change* sc;
|
||||
int sc_def2 = 0, tick_def2 = 0;
|
||||
|
||||
struct status_data *status, *status_src;
|
||||
struct status_change *sc;
|
||||
struct map_session_data *sd;
|
||||
|
||||
nullpo_ret(bl);
|
||||
nullpo_retr(src, tick?tick:1); //If no source, it can't be resisted (NPC given)
|
||||
|
||||
//Status that are blocked by Golden Thief Bug card or Wand of Hermod
|
||||
if (status_isimmune(bl))
|
||||
@ -6245,68 +6250,93 @@ int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int ti
|
||||
|
||||
sd = BL_CAST(BL_PC,bl);
|
||||
status = status_get_status_data(bl);
|
||||
status_src = status_get_status_data(src);
|
||||
sc = status_get_sc(bl);
|
||||
if( sc && !sc->count )
|
||||
sc = NULL;
|
||||
switch (type) {
|
||||
case SC_STUN:
|
||||
case SC_POISON:
|
||||
if( sc && sc->data[SC__UNLUCKY] )
|
||||
return tick;
|
||||
case SC_DPOISON:
|
||||
sc_def = status->vit*100;
|
||||
sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10;
|
||||
if (sd) {
|
||||
//For players: 60000 - 450*vit - 100*luk
|
||||
tick_def = status->vit*75;
|
||||
tick_def2 = status->luk*100;
|
||||
} else {
|
||||
//For monsters: 30000 - 200*vit
|
||||
tick>>=1;
|
||||
tick_def = (status->vit*200)/3;
|
||||
}
|
||||
break;
|
||||
case SC_STUN:
|
||||
if( sc && sc->data[SC__UNLUCKY] )
|
||||
return tick;
|
||||
case SC_SILENCE:
|
||||
case SC_BLEEDING:
|
||||
sc_def = status->vit*100;
|
||||
sc_def2 = status->luk*10;
|
||||
sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10;
|
||||
tick_def2 = status->luk*10;
|
||||
break;
|
||||
case SC_SLEEP:
|
||||
sc_def = status->int_*100;
|
||||
sc_def2 = status->luk*10;
|
||||
sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10;
|
||||
tick_def2 = status->luk*10;
|
||||
break;
|
||||
case SC_DEEPSLEEP:
|
||||
sc_def = status->int_*50;
|
||||
tick_def = status->int_*10 + status_get_lv(bl) * 65 / 10; //Seems to be -1 sec every 10 int and -5% chance every 10 int.
|
||||
break;
|
||||
case SC_DECREASEAGI:
|
||||
case SC_ADORAMUS: //Arch Bishop
|
||||
if (sd) tick>>=1; //Half duration for players.
|
||||
case SC_STONE:
|
||||
//Impossible to reduce duration with stats
|
||||
tick_def = 0;
|
||||
tick_def2 = 0;
|
||||
sc_def = status->mdef*100;
|
||||
sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10;
|
||||
tick_def = 0; //No duration reduction
|
||||
break;
|
||||
case SC_FREEZE:
|
||||
sc_def = status->mdef*100;
|
||||
sc_def2 = status->luk*10;
|
||||
sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10;
|
||||
tick_def2 = status_src->luk*-10; //Caster can increase final duration with luk
|
||||
break;
|
||||
case SC_CURSE:
|
||||
//Special property: inmunity when luk is greater than level or zero
|
||||
if (status->luk > status_get_lv(bl) || status->luk == 0)
|
||||
//Special property: immunity when luk is zero
|
||||
if (status->luk == 0)
|
||||
return 0;
|
||||
sc_def = status->luk*100;
|
||||
sc_def2 = status->luk*10;
|
||||
sc_def2 = status->luk*10 - status_get_lv(src)*10; //Curse only has a level penalty and no resistance
|
||||
tick_def = status->vit*100;
|
||||
tick_def2 = status->luk*10;
|
||||
break;
|
||||
case SC_BLIND:
|
||||
if( sc && sc->data[SC__UNLUCKY] )
|
||||
return tick;
|
||||
sc_def = (status->vit + status->int_)*50;
|
||||
sc_def2 = status->luk*10;
|
||||
sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10;
|
||||
tick_def2 = status->luk*10;
|
||||
break;
|
||||
case SC_CONFUSION:
|
||||
sc_def = (status->str + status->int_)*50;
|
||||
sc_def2 = status->luk*10;
|
||||
sc_def2 = status_get_lv(src)*10 - status_get_lv(bl)*10 - status->luk*10; //Reversed sc_def2
|
||||
tick_def2 = status->luk*10;
|
||||
break;
|
||||
case SC_DECREASEAGI:
|
||||
case SC_ADORAMUS: //Arch Bishop
|
||||
if (sd) tick>>=1; //Half duration for players.
|
||||
sc_def = status->mdef*100;
|
||||
tick_def = 0; //No duration reduction
|
||||
break;
|
||||
case SC_ANKLE:
|
||||
if(status->mode&MD_BOSS) // Lasts 5 times less on bosses
|
||||
tick /= 5;
|
||||
sc_def = status->agi*50;
|
||||
break;
|
||||
case SC_DEEPSLEEP:
|
||||
sc_def = status->int_*50;
|
||||
tick_def = 0; //Linear reduction instead
|
||||
tick_def2 = (status->int_ + status_get_lv(bl))*50; //kRO balance update lists this formula
|
||||
break;
|
||||
case SC_MAGICMIRROR:
|
||||
case SC_ARMORCHANGE:
|
||||
if (sd) //Duration greatly reduced for players.
|
||||
tick /= 15;
|
||||
sc_def2 = status_get_lv(bl)*20 + status->vit*25 + status->agi*10; // Lineal Reduction of Rate
|
||||
tick_def2 = 0; //No duration reduction
|
||||
break;
|
||||
case SC_MARSHOFABYSS:
|
||||
//5 second (Fixed) + 25 second - {( INT + LUK ) / 20 second }
|
||||
@ -6337,7 +6367,6 @@ int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int ti
|
||||
break;
|
||||
case SC_BITE: // {(Base Success chance) - (Target's AGI / 4)}
|
||||
sc_def2 = status->agi*25;
|
||||
tick_def2 = 0; //No duration reduction
|
||||
break;
|
||||
case SC_ELECTRICSHOCKER:
|
||||
if( bl->type == BL_MOB )
|
||||
@ -6399,11 +6428,9 @@ int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int ti
|
||||
sc_def += sc->data[SC_SIEGFRIED]->val3*100; //Status resistance.
|
||||
}
|
||||
|
||||
//When no tick def, reduction is the same for both.
|
||||
if(tick_def < 0)
|
||||
//When tick def not set, reduction is the same for both.
|
||||
if(tick_def == -1)
|
||||
tick_def = sc_def;
|
||||
if(tick_def2 < 0)
|
||||
tick_def2 = sc_def2;
|
||||
|
||||
//Natural resistance
|
||||
if (!(flag&8)) {
|
||||
@ -6425,6 +6452,9 @@ int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int ti
|
||||
if( sd->sc.data[SC_COMMONSC_RESIST] )
|
||||
rate -= rate*sd->sc.data[SC_COMMONSC_RESIST]->val1/100;
|
||||
}
|
||||
|
||||
//Aegis accuracy
|
||||
if(rate > 0 && rate%10 != 0) rate += (10 - rate%10);
|
||||
}
|
||||
|
||||
if (!(rnd()%10000 < rate))
|
||||
@ -6445,6 +6475,7 @@ int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int ti
|
||||
case SC_ANKLE:
|
||||
case SC_MARSHOFABYSS:
|
||||
case SC_STASIS:
|
||||
case SC_DEEPSLEEP:
|
||||
tick = max(tick, 5000); //Minimum duration 5s
|
||||
break;
|
||||
case SC_BURNING:
|
||||
|
Loading…
x
Reference in New Issue
Block a user