From afd58bbb4553b9757d3a85c841246202d1b54539 Mon Sep 17 00:00:00 2001 From: playtester Date: Fri, 22 Mar 2013 22:27:45 +0000 Subject: [PATCH] - 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 --- db/pre-re/item_db.txt | 8 ++-- db/re/item_db.txt | 6 +-- db/re/skill_db.txt | 2 +- src/map/skill.c | 4 +- src/map/status.c | 87 +++++++++++++++++++++++++++++-------------- 5 files changed, 69 insertions(+), 38 deletions(-) diff --git a/db/pre-re/item_db.txt b/db/pre-re/item_db.txt index 469cec6a14..736c77de45 100644 --- a/db/pre-re/item_db.txt +++ b/db/pre-re/item_db.txt @@ -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; },{},{} diff --git a/db/re/item_db.txt b/db/re/item_db.txt index 2cbe45c274..9ad9680845 100644 --- a/db/re/item_db.txt +++ b/db/re/item_db.txt @@ -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; },{},{} diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index a760a534cd..0e2e170fb6 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -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 diff --git a/src/map/skill.c b/src/map/skill.c index 44e5c04fda..87038d868a 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -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 diff --git a/src/map/status.c b/src/map/status.c index cc80480c08..2e0941ad83 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -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: