Bug Fixes
* Fixed #119 - Corrected Flash Combo weapon ATK and to cancel skill cast when target is more than 2 cells away. * Fixed #148 - Corrected Kings Grace to only cast on guild members in versus type maps and added missing effects. Updated cooldown from 60 to 90 seconds. * Fixed #341 - Offertorium and Magnificat now cancel each other out (Mimics Kyrie Eleison and Assumptio). * Follow up to 5a0f8dc. Added missing monster transformation bonuses. * Updated the Status Icon list with newer icons.
This commit is contained in:
parent
17213cabe3
commit
231710c0fa
@ -1410,7 +1410,7 @@
|
||||
2325,2000,2000,0,30000:45000:60000:75000:90000,0,540000:480000:420000:360000:300000
|
||||
|
||||
//-- LG_KINGS_GRACE
|
||||
5013,1000,0,0,5000,0,60000
|
||||
5013,0,1000,0,5000,0,90000
|
||||
//==========================================
|
||||
|
||||
//===== Sura Skills ========================
|
||||
|
@ -1319,7 +1319,7 @@
|
||||
5010,0,6,2,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SC_ESCAPE,Emergency Escape
|
||||
5011,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, AB_OFFERTORIUM,Offertorium
|
||||
5012,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, WL_TELEKINESIS_INTENSE,Intense Telekinesis
|
||||
5013,0,6,4,0,0x3,5,5,1,no,0,0,0,none,0,0x0, LG_KINGS_GRACE,King's Grace
|
||||
5013,0,6,4,0,0x3,0,5,1,no,0,0,0,none,0,0x0, LG_KINGS_GRACE,King's Grace
|
||||
5014,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, ALL_FULL_THROTTLE,Full Throttle
|
||||
5015,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO_ATK_STEP1,Flash Combo Attack Step 1
|
||||
5016,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO_ATK_STEP2,Flash Combo Attack Step 2
|
||||
|
@ -171,6 +171,7 @@
|
||||
5006,0x101, , 0, 3,2000,enemy, 0x018 //NC_MAGMA_ERUPTION
|
||||
5008,0x85, , 0, 0, -1,all, 0x003 //SO_ELEMENTAL_SHIELD
|
||||
5010,0xfe, , 0, 2, -1,enemy, 0x000 //SC_ESCAPE
|
||||
5013,0x102, , 3, 0, -1,all, 0x2002 //LG_KINGS_GRACE
|
||||
|
||||
8020,0xf5, , 3, 0,2300:2100:1900:1700:1500,enemy, 0x018 //MH_POISON_MIST
|
||||
8033,0x7e, , 0, 0, -1,all, 0x003 //MH_STEINWAND
|
||||
|
@ -5804,10 +5804,10 @@
|
||||
11588,Fresh_Strawberries,Fresh Strawberries,0,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(32,56),rand(16,28); },{},{}
|
||||
11589,Iceflake,Cold Snow Cone,0,20,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 5,5; },{},{}
|
||||
11590,Meat_Skewer5,Skewer No.5,0,5000,,300,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(760,810),10; },{},{}
|
||||
11592,Trans-Red_Candy,Trans-Red Candy,0,20,,30,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal 45,0; transform "1507",600000,SC_NONE; sc_start SC_INCMHP,600000,1000; },{},{}
|
||||
11593,Trans-Blue_Candy,Trans-Blue Candy,0,20,,30,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal 45,0; transform "1102",600000,SC_NONE; sc_start SC_INCMSP,600000,100; },{},{}
|
||||
11594,Trans-Yellow_Candy,Trans-Yellow Candy,0,20,,30,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal 45,0; transform "1130",600000,SC_NONE; autobonus "{ bonus2 bAddItemHealRate,535,2000; }",10000,600000; },{},{}
|
||||
11595,Trans-Green_Candy,Trans-Green Candy,0,20,,30,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal 45,0; transform "1508",600000,SC_NONE; autobonus "{ bonus bHit,10; bonus bFlee,20; }",10000,600000; },{},{}
|
||||
11592,Trans_Candy_Red,Trans Candy Red,0,20,,30,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal 45,0; transform 1507,600000,SC_MTF_MHP,1000; },{},{}
|
||||
11593,Trans_Candy_Blue,Trans Candy Blue,0,20,,30,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal 45,0; transform 1102,600000,SC_MTF_MSP,100; },{},{}
|
||||
11594,Trans_Candy_Yellow,Trans Candy Yellow,0,20,,30,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal 45,0; transform 1130,600000,SC_MTF_PUMPKIN,2000; },{},{}
|
||||
11595,Trans_Candy_Green,Trans Candy Green,0,20,,30,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal 45,0; transform 1508,600000,SC_MTF_HITFLEE,10,20; },{},{}
|
||||
11596,Blood_In_Skull,Blood In Skull,0,20,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(600,800),0; },{},{}
|
||||
11597,Iron_Worm,Iron Worm,0,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{},{},{}
|
||||
11598,Bitter_Cacao_Bean,Bitter Cacao Bean,0,10,,0,,,,0,0xFFFFFFFF,63,2,,,,,,{},{},{}
|
||||
@ -6479,13 +6479,13 @@
|
||||
12655,Brain_Powder,Brain Powder,2,2000,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
|
||||
12656,Magical_Powder,Magical Powder,2,3000,,200,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
|
||||
12657,Madness_Powder,Madness Powder,2,4000,,300,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
|
||||
12658,Trans_Scroll_Devi,Transformation Scroll(Deviruchi),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform "Deviruchi",1200000,SC_MTF_ASPD; },{},{}
|
||||
12659,Trans_Scroll_Ray_Arch,Transformation Scroll(Raydric),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform "Raydric Archer",1200000,SC_MTF_RANGEATK; },{},{}
|
||||
12660,Trans_Scroll_Mavka,Transformation Scroll(Mavka),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform "Mavka",1200000,SC_MTF_RANGEATK; },{},{}
|
||||
12661,Trans_Scroll_Marduk,Transformation Scroll(Marduk),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform "Marduk",1200000,SC_MTF_MATK; },{},{}
|
||||
12662,Trans_Scroll_Banshee,Transformation Scroll(Banshee),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform "Banshee",1200000,SC_MTF_MATK; },{},{}
|
||||
12663,Trans_Scroll_Poring,Transformation Scroll(Poring),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform "Poring",1200000,SC_MTF_CRIDAMAGE; },{},{}
|
||||
12664,Trans_Scroll_Golem,Transformation Scroll(Golem),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform "Golem",1200000,SC_MTF_MLEATKED; },{},{}
|
||||
12658,Trans_Scroll_Devi,Transformation Scroll(Deviruchi),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1109,1200000,SC_MTF_ASPD; },{},{}
|
||||
12659,Trans_Scroll_Ray_Arch,Transformation Scroll(Raydric),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1276,1200000,SC_MTF_RANGEATK; },{},{}
|
||||
12660,Trans_Scroll_Mavka,Transformation Scroll(Mavka),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1884,1200000,SC_MTF_RANGEATK; },{},{}
|
||||
12661,Trans_Scroll_Marduk,Transformation Scroll(Marduk),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1140,1200000,SC_MTF_MATK; },{},{}
|
||||
12662,Trans_Scroll_Banshee,Transformation Scroll(Banshee),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1867,1200000,SC_MTF_MATK; },{},{}
|
||||
12663,Trans_Scroll_Poring,Transformation Scroll(Poring),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1002,1200000,SC_MTF_CRIDAMAGE; },{},{}
|
||||
12664,Trans_Scroll_Golem,Transformation Scroll(Golem),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1040,1200000,SC_MTF_MLEATKED; },{},{}
|
||||
12665,Grovel_Buff,Grovel Buff,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
|
||||
12666,Thai_Perfume_MATK,Thai Perfume MATK,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_MAGICALATTHIT; bonus_script "{ bonus bMatk,24; }",600,0,0,SI_SKF_MATK; },{},{}
|
||||
12667,Thai_Perfume_ATK,Thai Perfume ATK,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_MAGICALATTHIT; bonus_script "{ bonus bBaseAtk,24; }",600,0,0,SI_SKF_ATK; },{},{}
|
||||
@ -6678,7 +6678,7 @@
|
||||
12853,Patron_Scroll,Patron Scroll,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_Patron_Scroll); },{},{}
|
||||
12860,Mommy_Day_Cake,Mommy Day Cake,2,0,,200,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 50,50; skilleffect "HP_ASSUMPTIO",0; sc_start SC_ASSUMPTIO,100000,5; },{},{}
|
||||
12863,Treasure_Chest_Summoned_II,Treasure Chest Summoned II,3,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ monster "this",-1,-1,"--ja--",rand(1324,1363),1,""; },{},{}
|
||||
12883,Almighty,Almighty,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_BASH3D; sc_start SC_INCALLSTATUS,1800000,10; /* SetBuff "EFST_2011RWC_SCROLL" 1800 1800 */ },{},{}
|
||||
12883,Almighty,Almighty,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_BASH3D; sc_start SC_2011RWC_SCROLL,1800000,10; },{},{}
|
||||
12884,Infinite_Concentration_Potion,Infinite Concentration Potion,11,10,,0,,,,0,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_ASPDPOTION0,1800000,4; },{},{}
|
||||
12885,Infinite_Awakening_Potion,Infinite Awakening Potion,11,10,,0,,,,0,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_ASPDPOTION1,1800000,6; },{},{}
|
||||
12886,Infinite_Berserk_Potion,Infinite Berserk Potion,11,10,,0,,,,0,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_ASPDPOTION2,1800000,9; },{},{}
|
||||
@ -9803,7 +9803,7 @@
|
||||
22618,Clear_Box_A,Clear Box A,18,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{},{},{}
|
||||
22619,Ghost_Summon_Scroll,Ghost Scroll,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ /* mercenary_create M_E_DEVILING,1800000; */ },{},{}
|
||||
22620,Memorial_Box,Box Of Memories,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ /* TODO */ },{},{}
|
||||
22621,Squid_Bbq,Barbecued Squid,2,5000,,250,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_EXIT; /* SetBuff "EFST_JP_EVENT04" 300000 1 */ percentheal 5,5; },{},{}
|
||||
22621,Squid_Bbq,Barbecued Squid,2,5000,,250,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_EXIT; sc_start SC_JP_EVENT04,300000,25; percentheal 5,5; },{},{}
|
||||
22623,New_Start_Box,New Start Box,18,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ getitem 12803,1; getitem 12802,1; getitem 12809,1; },{},{}
|
||||
22624,Riesen_Bretzel,Riesen Bretzel,0,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 100,0; },{},{}
|
||||
22625,Oktoberfest_Bag,Oktoberfest Bag,2,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_OKTOBERFEST,600000,0; },{},{}
|
||||
@ -9860,12 +9860,12 @@
|
||||
22747,Dengeki_Shot_Cartridge,Dengeki Shot Cartridge,18,10,,250,,,,0,0xFFFFFFFF,63,2,,,,,,{ getitem 13218,500; },{},{}
|
||||
22748,Hearthstone_Shot_Cartridge,Hearthstone Shot Cartridge,18,10,,250,,,,0,0xFFFFFFFF,63,2,,,,,,{ getitem 13219,500; },{},{}
|
||||
22749,Purification_Shot_Cartridge,Purification Shot Cartridge,18,10,,250,,,,0,0xFFFFFFFF,63,2,,,,,,{ getitem 13220,500; },{},{}
|
||||
22750,Trans_Scroll_Horn_Scaraba,Transformation Scroll(Horn Scaraba),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ transform "2161",1200000,SC_NONE; /*ASPD + 2, HIT + 10*/ },{},{}
|
||||
22751,Trans_Scroll_Wanderer,Transformation Scroll(Wanderer),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ transform "1208",1200000,SC_NONE; /*ASPD + 2, HIT + 10*/ },{},{}
|
||||
22752,Trans_Scroll_Gazeti,Transformation Scroll(Gazeti),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ transform "1778",1200000,SC_NONE; /*Ranged Attack +30%*/ },{},{}
|
||||
22753,Trans_Scroll_Kobold_Archer,Transformation Scroll(Kobold Archer),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ transform "1282",1200000,SC_NONE; /*Ranged Attack +30%*/ },{},{}
|
||||
22754,Trans_Scroll_Necromancer,Transformation Scroll(Necromancer),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ transform "1870",1200000,SC_NONE; /*Ranged Attack +30%*/ },{},{}
|
||||
22755,Trans_Scroll_Wind_Ghost,Transformation Scroll(Wind Ghost),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ transform "1263",1200000,SC_NONE; /*MATK + 50*/ },{},{}
|
||||
22750,Trans_Scroll_Horn_Scaraba,Transformation Scroll(Horn Scaraba),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ transform 2161,1200000,SC_MTF_ASPD2; },{},{}
|
||||
22751,Trans_Scroll_Wanderer,Transformation Scroll(Wanderer),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ transform 1208,1200000,SC_MTF_ASPD2; },{},{}
|
||||
22752,Trans_Scroll_Gazeti,Transformation Scroll(Gazeti),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ transform 1778,1200000,SC_MTF_RANGEATK2; },{},{}
|
||||
22753,Trans_Scroll_Kobold_Archer,Transformation Scroll(Kobold Archer),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ transform 1282,1200000,SC_MTF_RANGEATK2; },{},{}
|
||||
22754,Trans_Scroll_Necromancer,Transformation Scroll(Necromancer),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ transform 1870,1200000,SC_MTF_RANGEATK2; },{},{}
|
||||
22755,Trans_Scroll_Wind_Ghost,Transformation Scroll(Wind Ghost),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ transform 1263,1200000,SC_MTF_MATK2; },{},{}
|
||||
22757,Collection_Of_Scrolls_Magical_Transformation,Collection Of Scrolls Magical Transformation,18,10,,200,,,,0,0xFFFFFFFF,63,2,,,,,,{ getitem 22755,1; getitem 22754,1; },{},{}
|
||||
22758,Collection_Of_Scrolls_Shooting_Transformation,Collection Of Scrolls Shooting Transformation,18,10,,200,,,,0,0xFFFFFFFF,63,2,,,,,,{ getitem 22753,1; getitem 22752,1; },{},{}
|
||||
22759,Collection_Of_Scrolls_Attack_Speed_Transformation,Collection Of Scrolls Attack Speed Transformation,18,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 22751,1; getitem 22750,1; },{},{}
|
||||
|
@ -1411,7 +1411,7 @@
|
||||
//-- LG_INSPIRATION
|
||||
2325,2000,2000,0,30000:45000:60000:75000:90000,0,540000:480000:420000:360000:300000,1000
|
||||
//-- LG_KINGS_GRACE
|
||||
5013,1000,0,0,5000,0,60000,-1
|
||||
5013,0,1000,0,5000,0,90000,-1
|
||||
//==========================================
|
||||
|
||||
//===== Sura Skills ========================
|
||||
|
@ -1322,7 +1322,7 @@
|
||||
5010,0,6,2,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SC_ESCAPE,Emergency Escape
|
||||
5011,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, AB_OFFERTORIUM,Offertorium
|
||||
5012,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, WL_TELEKINESIS_INTENSE,Intense Telekinesis
|
||||
5013,0,6,4,0,0x3,5,5,1,no,0,0,0,none,0,0x0, LG_KINGS_GRACE,King's Grace
|
||||
5013,0,6,4,0,0x3,0,5,1,no,0,0,0,none,0,0x0, LG_KINGS_GRACE,King's Grace
|
||||
5014,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, ALL_FULL_THROTTLE,Full Throttle
|
||||
5015,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO_ATK_STEP1,Flash Combo Attack Step 1
|
||||
5016,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO_ATK_STEP2,Flash Combo Attack Step 2
|
||||
|
@ -173,6 +173,7 @@
|
||||
5006,0x101, , 0, 3,2000,enemy, 0x018 //NC_MAGMA_ERUPTION
|
||||
5008,0x85, , 0, 0, -1,all, 0x003 //SO_ELEMENTAL_SHIELD
|
||||
5010,0xfe, , 0, 2, -1,enemy, 0x000 //SC_ESCAPE
|
||||
5013,0x102, , 3, 0, -1,all, 0x2002 //LG_KINGS_GRACE
|
||||
|
||||
8020,0xf5, , 3, 0,2300:2100:1900:1700:1500,enemy, 0x018 //MH_POISON_MIST
|
||||
8033,0x7e, , 0, 0, -1,all, 0x003 //MH_STEINWAND
|
||||
|
@ -5458,11 +5458,13 @@ undisguise; // Return to normal character sprite.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*transform <monster name/ID>,<duration>,<sc type>{,<val1>,<val2>,<val3>,<val4>};
|
||||
*transform <monster ID>,<duration>,<sc type>{,<val1>,<val2>,<val3>,<val4>};
|
||||
*transform "<monster name>",<duration>,<sc type>{,<val1>,<val2>,<val3>,<val4>};
|
||||
|
||||
This command will turn a player into a monster for a given duration and grants an
|
||||
SC attribute effect while transformed. Note that players cannot be transformed
|
||||
during War of Emperium or if already disguised.
|
||||
Can only be removed when you die or the duration ends.
|
||||
|
||||
---------------------------------------
|
||||
\\
|
||||
|
@ -892,7 +892,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
status_change_end(bl, SC_SAFETYWALL, INVALID_TIMER);
|
||||
}
|
||||
|
||||
if (sc->data[SC__MANHOLE]) {
|
||||
if (sc->data[SC__MANHOLE] || (src->type == BL_PC && sc->data[SC_KINGS_GRACE])) {
|
||||
d->dmg_lv = ATK_BLOCK;
|
||||
return 0;
|
||||
}
|
||||
@ -2391,8 +2391,12 @@ static bool is_attack_hitting(struct Damage wd, struct block_list *src, struct b
|
||||
hitrate += 3 * skill;
|
||||
}
|
||||
|
||||
if(sc && sc->data[SC_MTF_ASPD])
|
||||
hitrate += 5;
|
||||
if (sc) {
|
||||
if (sc->data[SC_MTF_ASPD])
|
||||
hitrate += 5;
|
||||
if (sc->data[SC_MTF_ASPD2])
|
||||
hitrate += 10;
|
||||
}
|
||||
|
||||
hitrate = cap_value(hitrate, battle_config.min_hitrate, battle_config.max_hitrate);
|
||||
return (rnd()%100 < hitrate);
|
||||
@ -4135,7 +4139,7 @@ static int battle_calc_skill_constant_addition(struct Damage wd, struct block_li
|
||||
* Initial refactoring by Baalberith
|
||||
* Refined and optimized by helvetica
|
||||
*/
|
||||
struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, struct block_list *target, uint16 skill_id)
|
||||
struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, struct block_list *target, uint16 skill_id, uint16 skill_lv)
|
||||
{
|
||||
struct map_session_data *sd = BL_CAST(BL_PC, src);
|
||||
struct status_change *sc = status_get_sc(src);
|
||||
@ -4269,15 +4273,19 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(sc->data[SC_FLASHCOMBO]) {
|
||||
ATK_ADD(wd.damage, wd.damage2, sc->data[SC_FLASHCOMBO]->val2);
|
||||
#ifdef RENEWAL
|
||||
ATK_ADD(wd.equipAtk, wd.equipAtk2, sc->data[SC_FLASHCOMBO]->val2);
|
||||
#endif
|
||||
}
|
||||
if(sc->data[SC_MTF_RANGEATK] && (wd.flag&(BF_LONG|BF_MAGIC)) == BF_LONG) { // Monster Transformation bonus
|
||||
ATK_ADDRATE(wd.damage, wd.damage2, 25);
|
||||
RE_ALLATK_ADDRATE(wd, 25);
|
||||
if((wd.flag&(BF_LONG|BF_MAGIC)) == BF_LONG) { // Monster Transformation bonus
|
||||
if (sc->data[SC_MTF_RANGEATK]) {
|
||||
ATK_ADDRATE(wd.damage, wd.damage2, 25);
|
||||
RE_ALLATK_ADDRATE(wd, 25);
|
||||
}
|
||||
if (sc->data[SC_MTF_RANGEATK2]) {
|
||||
ATK_ADDRATE(wd.damage, wd.damage2, 30);
|
||||
RE_ALLATK_ADDRATE(wd, 30);
|
||||
}
|
||||
if (sc->data[SC_MTF_CRIDAMAGE] && is_attack_critical(wd, src, target, skill_id, skill_lv, false)) {
|
||||
ATK_ADDRATE(wd.damage, wd.damage2, 25);
|
||||
RE_ALLATK_ADDRATE(wd, 25); //Temporary it should be 'bonus.crit_atk_rate'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -5033,7 +5041,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
|
||||
}
|
||||
|
||||
// final attack bonuses that aren't affected by cards
|
||||
wd = battle_attack_sc_bonus(wd, src, target, skill_id);
|
||||
wd = battle_attack_sc_bonus(wd, src, target, skill_id, skill_lv);
|
||||
|
||||
if (sd) { //monsters, homuns and pets have their damage computed directly
|
||||
wd.damage = wd.statusAtk + wd.weaponAtk + wd.equipAtk + wd.masteryAtk;
|
||||
@ -5045,7 +5053,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
|
||||
}
|
||||
#else
|
||||
// final attack bonuses that aren't affected by cards
|
||||
wd = battle_attack_sc_bonus(wd, src, target, skill_id);
|
||||
wd = battle_attack_sc_bonus(wd, src, target, skill_id, skill_lv);
|
||||
#endif
|
||||
|
||||
if (wd.damage + wd.damage2) { //Check if attack ignores DEF
|
||||
@ -6216,7 +6224,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
|
||||
break;
|
||||
case HVAN_EXPLOSION: //[orn]
|
||||
md.damage = (int64)sstatus->max_hp * (50 + 50 * skill_lv) / 100;
|
||||
break ;
|
||||
break;
|
||||
case ASC_BREAKER:
|
||||
#ifdef RENEWAL
|
||||
// Official Renewal formula [helvetica]
|
||||
@ -7258,15 +7266,18 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
|
||||
return 0;
|
||||
} //end switch actual target
|
||||
|
||||
switch( t_bl->type )
|
||||
{ //Checks on target master
|
||||
case BL_PC:
|
||||
{
|
||||
switch( t_bl->type ) { //Checks on target master
|
||||
case BL_PC: {
|
||||
struct map_session_data *sd;
|
||||
if( t_bl == s_bl ) break;
|
||||
sd = BL_CAST(BL_PC, t_bl);
|
||||
struct status_change *sc = NULL;
|
||||
|
||||
if( sd->state.monster_ignore && flag&BCT_ENEMY )
|
||||
if( t_bl == s_bl )
|
||||
break;
|
||||
|
||||
sd = BL_CAST(BL_PC, t_bl);
|
||||
sc = status_get_sc(t_bl);
|
||||
|
||||
if( (sd->state.monster_ignore || (sc->data[SC_KINGS_GRACE] && s_bl->type != BL_PC)) && flag&BCT_ENEMY )
|
||||
return 0; // Global immunity only to Attacks
|
||||
if( sd->status.karma && s_bl->type == BL_PC && ((TBL_PC*)s_bl)->status.karma )
|
||||
state |= BCT_ENEMY; // Characters with bad karma may fight amongst them
|
||||
|
@ -40,6 +40,7 @@ enum item_itemid
|
||||
ITEMID_WHITE_POTION = 504,
|
||||
ITEMID_BLUE_POTION = 505,
|
||||
ITEMID_HOLY_WATER = 523,
|
||||
ITEMID_PUMPKIN = 535,
|
||||
ITEMID_RED_SLIM_POTION = 545,
|
||||
ITEMID_YELLOW_SLIM_POTION = 546,
|
||||
ITEMID_WHITE_SLIM_POTION = 547,
|
||||
|
@ -7943,6 +7943,9 @@ int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp)
|
||||
// Recovery Potion
|
||||
if( sd->sc.data[SC_INCHEALRATE] )
|
||||
hp += (int)(hp * sd->sc.data[SC_INCHEALRATE]->val1/100.);
|
||||
// 2014 Halloween Event : Pumpkin Bonus
|
||||
if(sd->sc.data[SC_MTF_PUMPKIN] && itemid == ITEMID_PUMPKIN)
|
||||
hp += (int)(hp * sd->sc.data[SC_MTF_PUMPKIN]->val1 / 100.);
|
||||
}
|
||||
if(sp) {
|
||||
bonus = 100 + (sd->battle_status.int_<<1)
|
||||
|
@ -10442,23 +10442,34 @@ BUILDIN_FUNC(sc_end)
|
||||
if (!bl)
|
||||
return 0;
|
||||
|
||||
if (type >= 0 && type < SC_MAX)
|
||||
{
|
||||
if (type >= 0 && type < SC_MAX) {
|
||||
struct status_change *sc = status_get_sc(bl);
|
||||
struct status_change_entry *sce = sc ? sc->data[type] : NULL;
|
||||
|
||||
if (!sce)
|
||||
return 0;
|
||||
|
||||
|
||||
switch (type)
|
||||
{
|
||||
switch (type) {
|
||||
case SC_WEIGHT50:
|
||||
case SC_WEIGHT90:
|
||||
case SC_NOCHAT:
|
||||
case SC_PUSH_CART:
|
||||
case SC_ALL_RIDING:
|
||||
case SC_STYLE_CHANGE:
|
||||
case SC_MONSTER_TRANSFORM:
|
||||
case SC_MTF_ASPD:
|
||||
case SC_MTF_RANGEATK:
|
||||
case SC_MTF_MATK:
|
||||
case SC_MTF_MLEATKED:
|
||||
case SC_MTF_CRIDAMAGE:
|
||||
case SC_MTF_ASPD2:
|
||||
case SC_MTF_RANGEATK2:
|
||||
case SC_MTF_MATK2:
|
||||
case SC_MTF_MHP:
|
||||
case SC_MTF_MSP:
|
||||
case SC_MTF_PUMPKIN:
|
||||
case SC_MTF_HITFLEE:
|
||||
return 0;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -10466,8 +10477,7 @@ BUILDIN_FUNC(sc_end)
|
||||
//This should help status_change_end force disabling the SC in case it has no limit.
|
||||
sce->val1 = sce->val2 = sce->val3 = sce->val4 = 0;
|
||||
status_change_end(bl, (sc_type)type, INVALID_TIMER);
|
||||
}
|
||||
else
|
||||
} else
|
||||
status_change_clear(bl, 3); // remove all effects
|
||||
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
|
377
src/map/skill.c
377
src/map/skill.c
@ -1624,12 +1624,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
|
||||
if (bl->type != BL_PC)
|
||||
sc_start(src,bl,SC_STUN,10 * skill_lv + rnd()%50,skill_lv,skill_get_time2(skill_id,skill_lv)); //(custom)
|
||||
break;
|
||||
case RL_BANISHING_BUSTER:
|
||||
{
|
||||
//kRO update 2014-02-12. 100% chance to remove random buff(s) (1/2/3/4/5)
|
||||
//TODO:
|
||||
//- Confirm the removeable buffs. I'm using SA_DISPEL behavior
|
||||
//- Make this removes 'random' buffs
|
||||
case RL_BANISHING_BUSTER: {
|
||||
uint16 i, n = skill_lv;
|
||||
|
||||
if (!tsc || !tsc->count)
|
||||
@ -1656,7 +1651,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
|
||||
case SC_INTFOOD: case SC_DEXFOOD: case SC_LUKFOOD:
|
||||
case SC_HITFOOD: case SC_FLEEFOOD: case SC_BATKFOOD:
|
||||
case SC_WATKFOOD: case SC_MATKFOOD: case SC_DANCING:
|
||||
case SC_EDP: case SC_AUTOBERSERK:
|
||||
case SC_SPIRIT: case SC_AUTOBERSERK:
|
||||
case SC_CARTBOOST: case SC_MELTDOWN: case SC_SAFETYWALL:
|
||||
case SC_SMA: case SC_SPEEDUP0: case SC_NOCHAT:
|
||||
case SC_ANKLE: case SC_SPIDERWEB: case SC_JAILED:
|
||||
@ -1665,7 +1660,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
|
||||
case SC_INCHITRATE: case SC_INCATKRATE: case SC_NEN:
|
||||
case SC_READYSTORM: case SC_READYDOWN: case SC_READYTURN:
|
||||
case SC_READYCOUNTER: case SC_DODGE: case SC_WARM:
|
||||
case SC_SPEEDUP1: case SC_AUTOTRADE: case SC_CRITICALWOUND:
|
||||
/*case SC_SPEEDUP1:*/ case SC_AUTOTRADE: case SC_CRITICALWOUND:
|
||||
case SC_JEXPBOOST: case SC_INVINCIBLE: case SC_INVINCIBLEOFF:
|
||||
case SC_HELLPOWER: case SC_MANU_ATK: case SC_MANU_DEF:
|
||||
case SC_SPL_ATK: case SC_SPL_DEF: case SC_MANU_MATK:
|
||||
@ -1673,33 +1668,35 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
|
||||
case SC_DRUMBATTLE: case SC_NIBELUNGEN: case SC_ROKISWEIL:
|
||||
case SC_INTOABYSS: case SC_SIEGFRIED: case SC_FOOD_STR_CASH:
|
||||
case SC_FOOD_AGI_CASH: case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH:
|
||||
case SC_FOOD_INT_CASH: case SC_FOOD_LUK_CASH: case SC_SEVENWIND:
|
||||
case SC_MIRACLE: case SC_S_LIFEPOTION: case SC_L_LIFEPOTION:
|
||||
case SC_INCHEALRATE: case SC_ELECTRICSHOCKER: case SC__STRIPACCESSORY:
|
||||
case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD: case SC_MINOR_BBQ:
|
||||
case SC_SIROMA_ICE_TEA: case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES:
|
||||
case SC_NEUTRALBARRIER_MASTER: case SC_NEUTRALBARRIER: case SC_STEALTHFIELD_MASTER:
|
||||
case SC_STEALTHFIELD: case SC_GIANTGROWTH: case SC_MILLENNIUMSHIELD:
|
||||
case SC_REFRESH: case SC_STONEHARDSKIN: case SC_VITALITYACTIVATION:
|
||||
case SC_FIGHTINGSPIRIT: case SC_ABUNDANCE: case SC__SHADOWFORM:
|
||||
case SC_LEADERSHIP: case SC_GLORYWOUNDS: case SC_SOULCOLD:
|
||||
case SC_HAWKEYES: case SC_PUSH_CART:
|
||||
case SC_RAISINGDRAGON: case SC_GT_ENERGYGAIN: case SC_GT_CHANGE:
|
||||
case SC_GT_REVITALIZE: case SC_REFLECTDAMAGE: case SC_INSPIRATION:
|
||||
case SC_EXEEDBREAK: case SC_FORCEOFVANGUARD: case SC_BANDING:
|
||||
case SC_DUPLELIGHT: case SC_EXPIATIO: case SC_LAUDAAGNUS:
|
||||
case SC_LAUDARAMUS: case SC_GATLINGFEVER: case SC_INCREASING:
|
||||
case SC_ADJUSTMENT: case SC_MADNESSCANCEL:
|
||||
case SC_ANGEL_PROTECT: case SC_MONSTER_TRANSFORM: case SC_FULL_THROTTLE:
|
||||
case SC_REBOUND: case SC_TELEKINESIS_INTENSE:
|
||||
case SC_HEAT_BARREL: case SC_HEAT_BARREL_AFTER: case SC_P_ALTER:
|
||||
case SC_E_CHAIN: case SC_C_MARKER: case SC_B_TRAP:
|
||||
case SC_H_MINE: case SC_RECOGNIZEDSPELL: case SC_CHASEWALK2:
|
||||
case SC_MTF_ASPD: case SC_MTF_RANGEATK: case SC_MTF_MATK:
|
||||
case SC_MTF_MLEATKED: case SC_MTF_CRIDAMAGE: case SC_GN_CARTBOOST:
|
||||
case SC_FOOD_INT_CASH: case SC_FOOD_LUK_CASH: case SC_ELECTRICSHOCKER:
|
||||
case SC__STRIPACCESSORY: case SC__ENERVATION: case SC__GROOMY:
|
||||
case SC__IGNORANCE: case SC__LAZINESS: case SC__UNLUCKY:
|
||||
case SC__WEAKNESS: case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD:
|
||||
case SC_MAGNETICFIELD: case SC_MINOR_BBQ: case SC_SIROMA_ICE_TEA:
|
||||
case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES: case SC_NEUTRALBARRIER_MASTER:
|
||||
case SC_NEUTRALBARRIER: case SC_STEALTHFIELD_MASTER: case SC_STEALTHFIELD:
|
||||
case SC_LEADERSHIP: case SC_GLORYWOUNDS: case SC_SOULCOLD:
|
||||
case SC_HAWKEYES: case SC_REGENERATION: case SC_SEVENWIND:
|
||||
case SC_MIRACLE: case SC_S_LIFEPOTION: case SC_L_LIFEPOTION:
|
||||
case SC_INCHEALRATE: case SC_PUSH_CART: case SC_PARTYFLEE:
|
||||
case SC_RAISINGDRAGON: case SC_GT_REVITALIZE: case SC_GT_ENERGYGAIN:
|
||||
case SC_GT_CHANGE: case SC_ANGEL_PROTECT: case SC_MONSTER_TRANSFORM:
|
||||
case SC_FULL_THROTTLE: case SC_REBOUND: case SC_TELEKINESIS_INTENSE:
|
||||
case SC_MOONSTAR: case SC_SUPER_STAR: case SC_ALL_RIDING:
|
||||
case SC_MTF_ASPD: case SC_MTF_RANGEATK: case SC_MTF_MATK:
|
||||
case SC_MTF_MLEATKED: case SC_MTF_CRIDAMAGE: case SC_HEAT_BARREL:
|
||||
case SC_HEAT_BARREL_AFTER: case SC_P_ALTER: case SC_E_CHAIN:
|
||||
case SC_C_MARKER: case SC_B_TRAP: case SC_H_MINE:
|
||||
case SC_STRANGELIGHTS: case SC_DECORATION_OF_MUSIC: case SC_GN_CARTBOOST:
|
||||
case SC_RECOGNIZEDSPELL: case SC_CHASEWALK2: case SC_BITE:
|
||||
#ifdef RENEWAL
|
||||
case SC_EXTREMITYFIST2:
|
||||
#endif
|
||||
case SC_HIDING: case SC_CLOAKING: case SC_CHASEWALK:
|
||||
case SC_CLOAKINGEXCEED: case SC__INVISIBILITY: case SC_UTSUSEMI:
|
||||
case SC_MTF_ASPD2: case SC_MTF_RANGEATK2: case SC_MTF_MATK2:
|
||||
case SC_2011RWC_SCROLL: case SC_JP_EVENT04: case SC_MTF_MHP:
|
||||
case SC_MTF_MSP: case SC_MTF_PUMPKIN: case SC_MTF_HITFLEE:
|
||||
continue;
|
||||
case SC_WHISTLE: case SC_ASSNCROS: case SC_POEMBRAGI:
|
||||
case SC_APPLEIDUN: case SC_HUMMING: case SC_DONTFORGETME:
|
||||
@ -1712,8 +1709,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
if (i == SC_BERSERK) tsc->data[i]->val2=0; //Mark a dispelled berserk to avoid setting hp to 100 by setting hp penalty to 0.
|
||||
status_change_end(bl, (sc_type)i, INVALID_TIMER);
|
||||
if( i == SC_BERSERK || i == SC_SATURDAYNIGHTFEVER )
|
||||
tsc->data[i]->val2 = 0;
|
||||
status_change_end(bl,(sc_type)i,INVALID_TIMER);
|
||||
n--;
|
||||
}
|
||||
//Remove bonus_script by Banishing Buster
|
||||
@ -3749,10 +3747,11 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
|
||||
case WL_TETRAVORTEX_WATER:
|
||||
case WL_TETRAVORTEX_WIND:
|
||||
case WL_TETRAVORTEX_GROUND:
|
||||
case SR_FLASHCOMBO_ATK_STEP1:
|
||||
case SR_FLASHCOMBO_ATK_STEP2:
|
||||
case SR_FLASHCOMBO_ATK_STEP3:
|
||||
case SR_FLASHCOMBO_ATK_STEP4:
|
||||
// For SR_FLASHCOMBO
|
||||
case SR_DRAGONCOMBO:
|
||||
case SR_FALLENEMPIRE:
|
||||
case SR_TIGERCANNON:
|
||||
case SR_SKYNETBLOW:
|
||||
break; // Exceptions
|
||||
default:
|
||||
continue; // Caster is Dead
|
||||
@ -3901,17 +3900,15 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
|
||||
skill_attack(skl->type,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag);
|
||||
break;
|
||||
}
|
||||
case SR_FLASHCOMBO_ATK_STEP1:
|
||||
case SR_FLASHCOMBO_ATK_STEP2:
|
||||
case SR_FLASHCOMBO_ATK_STEP3:
|
||||
case SR_FLASHCOMBO_ATK_STEP4:
|
||||
// For SR_FLASHCOMBO
|
||||
case SR_DRAGONCOMBO:
|
||||
case SR_FALLENEMPIRE:
|
||||
case SR_TIGERCANNON:
|
||||
case SR_SKYNETBLOW:
|
||||
if( src->type == BL_PC ) {
|
||||
TBL_PC *sd = NULL;
|
||||
const enum e_skill combos[] = {SR_DRAGONCOMBO, SR_FALLENEMPIRE, SR_TIGERCANNON, SR_SKYNETBLOW};
|
||||
if( (sd = BL_CAST(BL_PC,src)) ) {
|
||||
uint16 cid = combos[skl->skill_id - SR_FLASHCOMBO_ATK_STEP1];
|
||||
skill_castend_damage_id(src, target, cid, pc_checkskill(sd, cid), tick, 0);
|
||||
}
|
||||
if( distance_xy(src->x, src->y, target->x, target->y) >= 3 )
|
||||
break;
|
||||
skill_castend_damage_id(src, target, skl->skill_id, pc_checkskill(((TBL_PC *)src), skl->skill_id), tick, 0);
|
||||
}
|
||||
break;
|
||||
case SC_ESCAPE:
|
||||
@ -4028,10 +4025,11 @@ int skill_cleartimerskill (struct block_list *src)
|
||||
case WL_TETRAVORTEX_WATER:
|
||||
case WL_TETRAVORTEX_WIND:
|
||||
case WL_TETRAVORTEX_GROUND:
|
||||
case SR_FLASHCOMBO_ATK_STEP1:
|
||||
case SR_FLASHCOMBO_ATK_STEP2:
|
||||
case SR_FLASHCOMBO_ATK_STEP3:
|
||||
case SR_FLASHCOMBO_ATK_STEP4:
|
||||
// For SR_FLASHCOMBO
|
||||
case SR_DRAGONCOMBO:
|
||||
case SR_FALLENEMPIRE:
|
||||
case SR_TIGERCANNON:
|
||||
case SR_SKYNETBLOW:
|
||||
continue;
|
||||
}
|
||||
delete_timer(ud->skilltimerskill[i]->timer, skill_timerskill);
|
||||
@ -7367,68 +7365,74 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
if (!tsc->data[i])
|
||||
continue;
|
||||
switch (i) {
|
||||
case SC_WEIGHT50: case SC_WEIGHT90: case SC_HALLUCINATION:
|
||||
case SC_STRIPWEAPON: case SC_STRIPSHIELD: case SC_STRIPARMOR:
|
||||
case SC_STRIPHELM: case SC_CP_WEAPON: case SC_CP_SHIELD:
|
||||
case SC_CP_ARMOR: case SC_CP_HELM: case SC_COMBO:
|
||||
case SC_STRFOOD: case SC_AGIFOOD: case SC_VITFOOD:
|
||||
case SC_INTFOOD: case SC_DEXFOOD: case SC_LUKFOOD:
|
||||
case SC_HITFOOD: case SC_FLEEFOOD: case SC_BATKFOOD:
|
||||
case SC_WATKFOOD: case SC_MATKFOOD: case SC_DANCING:
|
||||
case SC_EDP: case SC_AUTOBERSERK:
|
||||
case SC_CARTBOOST: case SC_MELTDOWN: case SC_SAFETYWALL:
|
||||
case SC_SMA: case SC_SPEEDUP0: case SC_NOCHAT:
|
||||
case SC_ANKLE: case SC_SPIDERWEB: case SC_JAILED:
|
||||
case SC_ITEMBOOST: case SC_EXPBOOST: case SC_LIFEINSURANCE:
|
||||
case SC_BOSSMAPINFO: case SC_PNEUMA: case SC_AUTOSPELL:
|
||||
case SC_INCHITRATE: case SC_INCATKRATE: case SC_NEN:
|
||||
case SC_READYSTORM: case SC_READYDOWN: case SC_READYTURN:
|
||||
case SC_READYCOUNTER: case SC_DODGE: case SC_WARM:
|
||||
case SC_SPEEDUP1: case SC_AUTOTRADE: case SC_CRITICALWOUND:
|
||||
case SC_JEXPBOOST: case SC_INVINCIBLE: case SC_INVINCIBLEOFF:
|
||||
case SC_HELLPOWER: case SC_MANU_ATK: case SC_MANU_DEF:
|
||||
case SC_SPL_ATK: case SC_SPL_DEF: case SC_MANU_MATK:
|
||||
case SC_SPL_MATK: case SC_RICHMANKIM: case SC_ETERNALCHAOS:
|
||||
case SC_DRUMBATTLE: case SC_NIBELUNGEN: case SC_ROKISWEIL:
|
||||
case SC_INTOABYSS: case SC_SIEGFRIED: case SC_FOOD_STR_CASH:
|
||||
case SC_FOOD_AGI_CASH: case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH:
|
||||
case SC_FOOD_INT_CASH: case SC_FOOD_LUK_CASH: case SC_SEVENWIND:
|
||||
case SC_MIRACLE: case SC_S_LIFEPOTION: case SC_L_LIFEPOTION:
|
||||
case SC_INCHEALRATE: case SC_ELECTRICSHOCKER: case SC__STRIPACCESSORY:
|
||||
case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD: case SC_MINOR_BBQ:
|
||||
case SC_SIROMA_ICE_TEA: case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES:
|
||||
case SC_NEUTRALBARRIER_MASTER: case SC_NEUTRALBARRIER: case SC_STEALTHFIELD_MASTER:
|
||||
case SC_STEALTHFIELD: case SC_GIANTGROWTH: case SC_MILLENNIUMSHIELD:
|
||||
case SC_REFRESH: case SC_STONEHARDSKIN: case SC_VITALITYACTIVATION:
|
||||
case SC_FIGHTINGSPIRIT: case SC_ABUNDANCE: case SC__SHADOWFORM:
|
||||
case SC_LEADERSHIP: case SC_GLORYWOUNDS: case SC_SOULCOLD:
|
||||
case SC_HAWKEYES: case SC_PUSH_CART:
|
||||
case SC_RAISINGDRAGON: case SC_GT_ENERGYGAIN: case SC_GT_CHANGE:
|
||||
case SC_GT_REVITALIZE: case SC_REFLECTDAMAGE: case SC_INSPIRATION:
|
||||
case SC_EXEEDBREAK: case SC_FORCEOFVANGUARD: case SC_BANDING:
|
||||
case SC_DUPLELIGHT: case SC_EXPIATIO: case SC_LAUDAAGNUS:
|
||||
case SC_LAUDARAMUS: case SC_GATLINGFEVER: case SC_INCREASING:
|
||||
case SC_ADJUSTMENT: case SC_MADNESSCANCEL:
|
||||
case SC_ANGEL_PROTECT: case SC_MONSTER_TRANSFORM: case SC_FULL_THROTTLE:
|
||||
case SC_REBOUND: case SC_TELEKINESIS_INTENSE:
|
||||
case SC_HEAT_BARREL: case SC_HEAT_BARREL_AFTER: case SC_P_ALTER:
|
||||
case SC_E_CHAIN: case SC_C_MARKER: case SC_B_TRAP:
|
||||
case SC_H_MINE: case SC_RECOGNIZEDSPELL:
|
||||
case SC_MTF_ASPD: case SC_MTF_RANGEATK: case SC_MTF_MATK:
|
||||
case SC_MTF_MLEATKED: case SC_MTF_CRIDAMAGE: case SC_GN_CARTBOOST:
|
||||
case SC_WEIGHT50: case SC_WEIGHT90: case SC_HALLUCINATION:
|
||||
case SC_STRIPWEAPON: case SC_STRIPSHIELD: case SC_STRIPARMOR:
|
||||
case SC_STRIPHELM: case SC_CP_WEAPON: case SC_CP_SHIELD:
|
||||
case SC_CP_ARMOR: case SC_CP_HELM: case SC_COMBO:
|
||||
case SC_STRFOOD: case SC_AGIFOOD: case SC_VITFOOD:
|
||||
case SC_INTFOOD: case SC_DEXFOOD: case SC_LUKFOOD:
|
||||
case SC_HITFOOD: case SC_FLEEFOOD: case SC_BATKFOOD:
|
||||
case SC_WATKFOOD: case SC_MATKFOOD: case SC_DANCING:
|
||||
case SC_EDP: case SC_AUTOBERSERK:
|
||||
case SC_CARTBOOST: case SC_MELTDOWN: case SC_SAFETYWALL:
|
||||
case SC_SMA: case SC_SPEEDUP0: case SC_NOCHAT:
|
||||
case SC_ANKLE: case SC_SPIDERWEB: case SC_JAILED:
|
||||
case SC_ITEMBOOST: case SC_EXPBOOST: case SC_LIFEINSURANCE:
|
||||
case SC_BOSSMAPINFO: case SC_PNEUMA: case SC_AUTOSPELL:
|
||||
case SC_INCHITRATE: case SC_INCATKRATE: case SC_NEN:
|
||||
case SC_READYSTORM: case SC_READYDOWN: case SC_READYTURN:
|
||||
case SC_READYCOUNTER: case SC_DODGE: case SC_WARM:
|
||||
/*case SC_SPEEDUP1:*/ case SC_AUTOTRADE: case SC_CRITICALWOUND:
|
||||
case SC_JEXPBOOST: case SC_INVINCIBLE: case SC_INVINCIBLEOFF:
|
||||
case SC_HELLPOWER: case SC_MANU_ATK: case SC_MANU_DEF:
|
||||
case SC_SPL_ATK: case SC_SPL_DEF: case SC_MANU_MATK:
|
||||
case SC_SPL_MATK: case SC_RICHMANKIM: case SC_ETERNALCHAOS:
|
||||
case SC_DRUMBATTLE: case SC_NIBELUNGEN: case SC_ROKISWEIL:
|
||||
case SC_INTOABYSS: case SC_SIEGFRIED: case SC_FOOD_STR_CASH:
|
||||
case SC_FOOD_AGI_CASH: case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH:
|
||||
case SC_FOOD_INT_CASH: case SC_FOOD_LUK_CASH: case SC_SEVENWIND:
|
||||
case SC_MIRACLE: case SC_S_LIFEPOTION: case SC_L_LIFEPOTION:
|
||||
case SC_INCHEALRATE: case SC_ELECTRICSHOCKER: case SC__STRIPACCESSORY:
|
||||
case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD: case SC_MINOR_BBQ:
|
||||
case SC_SIROMA_ICE_TEA: case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES:
|
||||
case SC_NEUTRALBARRIER_MASTER: case SC_NEUTRALBARRIER: case SC_STEALTHFIELD_MASTER:
|
||||
case SC_STEALTHFIELD: case SC_GIANTGROWTH: case SC_MILLENNIUMSHIELD:
|
||||
case SC_REFRESH: case SC_STONEHARDSKIN: case SC_VITALITYACTIVATION:
|
||||
case SC_FIGHTINGSPIRIT: case SC_ABUNDANCE: case SC__SHADOWFORM:
|
||||
case SC_RECOGNIZEDSPELL:case SC_LEADERSHIP: case SC_GLORYWOUNDS:
|
||||
case SC_SOULCOLD: case SC_HAWKEYES: case SC_REGENERATION:
|
||||
case SC_PUSH_CART: case SC_RAISINGDRAGON: case SC_GT_ENERGYGAIN:
|
||||
case SC_GT_CHANGE: case SC_GT_REVITALIZE: case SC_REFLECTDAMAGE:
|
||||
case SC_INSPIRATION: case SC_EXEEDBREAK: case SC_FORCEOFVANGUARD:
|
||||
case SC_BANDING: case SC_DUPLELIGHT: case SC_EXPIATIO:
|
||||
case SC_LAUDAAGNUS: case SC_LAUDARAMUS: case SC_GATLINGFEVER:
|
||||
case SC_INCREASING: case SC_ADJUSTMENT: case SC_MADNESSCANCEL:
|
||||
case SC_ANGEL_PROTECT: case SC_MONSTER_TRANSFORM: case SC_FULL_THROTTLE:
|
||||
case SC_REBOUND: case SC_TELEKINESIS_INTENSE: case SC_MOONSTAR:
|
||||
case SC_SUPER_STAR: case SC_ALL_RIDING: case SC_MTF_ASPD:
|
||||
case SC_MTF_RANGEATK: case SC_MTF_MATK: case SC_MTF_MLEATKED:
|
||||
case SC_MTF_CRIDAMAGE: case SC_HEAT_BARREL: case SC_HEAT_BARREL_AFTER:
|
||||
case SC_P_ALTER: case SC_E_CHAIN: case SC_C_MARKER:
|
||||
case SC_B_TRAP: case SC_H_MINE: case SC_STRANGELIGHTS:
|
||||
case SC_DECORATION_OF_MUSIC: case SC_GN_CARTBOOST: case SC_CHASEWALK2:
|
||||
#ifdef RENEWAL
|
||||
case SC_EXTREMITYFIST2:
|
||||
case SC_EXTREMITYFIST2:
|
||||
#endif
|
||||
continue;
|
||||
// bugreport:4888 these songs may only be dispelled if you're not in their song area anymore
|
||||
case SC_WHISTLE:
|
||||
case SC_ASSNCROS:
|
||||
case SC_POEMBRAGI:
|
||||
case SC_APPLEIDUN:
|
||||
case SC_HUMMING:
|
||||
case SC_DONTFORGETME:
|
||||
case SC_FORTUNE:
|
||||
case SC_SERVICE4U:
|
||||
case SC_HIDING: case SC_CLOAKING: case SC_CHASEWALK:
|
||||
case SC_CLOAKINGEXCEED: case SC__INVISIBILITY: case SC_UTSUSEMI:
|
||||
case SC_MTF_ASPD2: case SC_MTF_RANGEATK2: case SC_MTF_MATK2:
|
||||
case SC_2011RWC_SCROLL: case SC_JP_EVENT04: case SC_MTF_MHP:
|
||||
case SC_MTF_MSP: case SC_MTF_PUMPKIN: case SC_MTF_HITFLEE:
|
||||
continue;
|
||||
//bugreport:4888 these songs may only be dispelled if you're not in their song area anymore
|
||||
case SC_WHISTLE:
|
||||
case SC_ASSNCROS:
|
||||
case SC_POEMBRAGI:
|
||||
case SC_APPLEIDUN:
|
||||
case SC_HUMMING:
|
||||
case SC_DONTFORGETME:
|
||||
case SC_FORTUNE:
|
||||
case SC_SERVICE4U:
|
||||
if(tsc->data[i]->val4==0)
|
||||
continue; //if in song-area don't end it
|
||||
break;
|
||||
@ -8845,56 +8849,63 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
if (!tsc->data[i])
|
||||
continue;
|
||||
switch (i) {
|
||||
case SC_WEIGHT50: case SC_WEIGHT90: case SC_HALLUCINATION:
|
||||
case SC_STRIPWEAPON: case SC_STRIPSHIELD: case SC_STRIPARMOR:
|
||||
case SC_STRIPHELM: case SC_CP_WEAPON: case SC_CP_SHIELD:
|
||||
case SC_CP_ARMOR: case SC_CP_HELM: case SC_COMBO:
|
||||
case SC_STRFOOD: case SC_AGIFOOD: case SC_VITFOOD:
|
||||
case SC_INTFOOD: case SC_DEXFOOD: case SC_LUKFOOD:
|
||||
case SC_HITFOOD: case SC_FLEEFOOD: case SC_BATKFOOD:
|
||||
case SC_WATKFOOD: case SC_MATKFOOD: case SC_DANCING:
|
||||
case SC_SPIRIT: case SC_AUTOBERSERK:
|
||||
case SC_CARTBOOST: case SC_MELTDOWN: case SC_SAFETYWALL:
|
||||
case SC_SMA: case SC_SPEEDUP0: case SC_NOCHAT:
|
||||
case SC_ANKLE: case SC_SPIDERWEB: case SC_JAILED:
|
||||
case SC_ITEMBOOST: case SC_EXPBOOST: case SC_LIFEINSURANCE:
|
||||
case SC_BOSSMAPINFO: case SC_PNEUMA: case SC_AUTOSPELL:
|
||||
case SC_INCHITRATE: case SC_INCATKRATE: case SC_NEN:
|
||||
case SC_READYSTORM: case SC_READYDOWN: case SC_READYTURN:
|
||||
case SC_READYCOUNTER:case SC_DODGE: case SC_WARM:
|
||||
case SC_SPEEDUP1: case SC_AUTOTRADE: case SC_CRITICALWOUND:
|
||||
case SC_JEXPBOOST: case SC_INVINCIBLE: case SC_INVINCIBLEOFF:
|
||||
case SC_HELLPOWER: case SC_MANU_ATK: case SC_MANU_DEF:
|
||||
case SC_SPL_ATK: case SC_SPL_DEF: case SC_MANU_MATK:
|
||||
case SC_SPL_MATK: case SC_RICHMANKIM: case SC_ETERNALCHAOS:
|
||||
case SC_DRUMBATTLE: case SC_NIBELUNGEN: case SC_ROKISWEIL:
|
||||
case SC_INTOABYSS: case SC_SIEGFRIED: case SC_WHISTLE:
|
||||
case SC_ASSNCROS: case SC_POEMBRAGI: case SC_APPLEIDUN:
|
||||
case SC_HUMMING: case SC_DONTFORGETME: case SC_FORTUNE:
|
||||
case SC_SERVICE4U: case SC_FOOD_STR_CASH: case SC_FOOD_AGI_CASH:
|
||||
case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH: case SC_FOOD_INT_CASH:
|
||||
case SC_FOOD_LUK_CASH: case SC_ELECTRICSHOCKER: case SC_BITE:
|
||||
case SC__STRIPACCESSORY: case SC__ENERVATION: case SC__GROOMY:
|
||||
case SC__IGNORANCE: case SC__LAZINESS: case SC__UNLUCKY:
|
||||
case SC__WEAKNESS: case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD:
|
||||
case SC_MAGNETICFIELD: case SC_MINOR_BBQ: case SC_SIROMA_ICE_TEA:
|
||||
case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES:
|
||||
case SC_NEUTRALBARRIER_MASTER: case SC_NEUTRALBARRIER:
|
||||
case SC_STEALTHFIELD_MASTER: case SC_STEALTHFIELD:
|
||||
case SC_LEADERSHIP: case SC_GLORYWOUNDS: case SC_SOULCOLD:
|
||||
case SC_HAWKEYES: case SC_PUSH_CART:
|
||||
case SC_PARTYFLEE: case SC_GT_REVITALIZE:
|
||||
case SC_RAISINGDRAGON: case SC_GT_ENERGYGAIN: case SC_GT_CHANGE:
|
||||
case SC_ANGEL_PROTECT: case SC_MONSTER_TRANSFORM:
|
||||
case SC_FULL_THROTTLE: case SC_REBOUND: case SC_TELEKINESIS_INTENSE:
|
||||
case SC_HEAT_BARREL: case SC_HEAT_BARREL_AFTER: case SC_P_ALTER:
|
||||
case SC_E_CHAIN: case SC_C_MARKER: case SC_B_TRAP:
|
||||
case SC_H_MINE: case SC_RECOGNIZEDSPELL:
|
||||
case SC_MTF_ASPD: case SC_MTF_RANGEATK: case SC_MTF_MATK:
|
||||
case SC_MTF_MLEATKED: case SC_MTF_CRIDAMAGE: case SC_GN_CARTBOOST:
|
||||
case SC_WEIGHT50: case SC_WEIGHT90: case SC_HALLUCINATION:
|
||||
case SC_STRIPWEAPON: case SC_STRIPSHIELD: case SC_STRIPARMOR:
|
||||
case SC_STRIPHELM: case SC_CP_WEAPON: case SC_CP_SHIELD:
|
||||
case SC_CP_ARMOR: case SC_CP_HELM: case SC_COMBO:
|
||||
case SC_STRFOOD: case SC_AGIFOOD: case SC_VITFOOD:
|
||||
case SC_INTFOOD: case SC_DEXFOOD: case SC_LUKFOOD:
|
||||
case SC_HITFOOD: case SC_FLEEFOOD: case SC_BATKFOOD:
|
||||
case SC_WATKFOOD: case SC_MATKFOOD: case SC_DANCING:
|
||||
case SC_SPIRIT: case SC_AUTOBERSERK:
|
||||
case SC_CARTBOOST: case SC_MELTDOWN: case SC_SAFETYWALL:
|
||||
case SC_SMA: case SC_SPEEDUP0: case SC_NOCHAT:
|
||||
case SC_ANKLE: case SC_SPIDERWEB: case SC_JAILED:
|
||||
case SC_ITEMBOOST: case SC_EXPBOOST: case SC_LIFEINSURANCE:
|
||||
case SC_BOSSMAPINFO: case SC_PNEUMA: case SC_AUTOSPELL:
|
||||
case SC_INCHITRATE: case SC_INCATKRATE: case SC_NEN:
|
||||
case SC_READYSTORM: case SC_READYDOWN: case SC_READYTURN:
|
||||
case SC_READYCOUNTER: case SC_DODGE: case SC_WARM:
|
||||
/*case SC_SPEEDUP1:*/ case SC_AUTOTRADE: case SC_CRITICALWOUND:
|
||||
case SC_JEXPBOOST: case SC_INVINCIBLE: case SC_INVINCIBLEOFF:
|
||||
case SC_HELLPOWER: case SC_MANU_ATK: case SC_MANU_DEF:
|
||||
case SC_SPL_ATK: case SC_SPL_DEF: case SC_MANU_MATK:
|
||||
case SC_SPL_MATK: case SC_RICHMANKIM: case SC_ETERNALCHAOS:
|
||||
case SC_DRUMBATTLE: case SC_NIBELUNGEN: case SC_ROKISWEIL:
|
||||
case SC_INTOABYSS: case SC_SIEGFRIED: case SC_WHISTLE:
|
||||
case SC_ASSNCROS: case SC_POEMBRAGI: case SC_APPLEIDUN:
|
||||
case SC_HUMMING: case SC_DONTFORGETME: case SC_FORTUNE:
|
||||
case SC_SERVICE4U: case SC_FOOD_STR_CASH: case SC_FOOD_AGI_CASH:
|
||||
case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH: case SC_FOOD_INT_CASH:
|
||||
case SC_FOOD_LUK_CASH: case SC_ELECTRICSHOCKER: case SC_BITE:
|
||||
case SC__STRIPACCESSORY: case SC__ENERVATION: case SC__GROOMY:
|
||||
case SC__IGNORANCE: case SC__LAZINESS: case SC__UNLUCKY:
|
||||
case SC__WEAKNESS: case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD:
|
||||
case SC_MAGNETICFIELD: case SC_MINOR_BBQ: case SC_SIROMA_ICE_TEA:
|
||||
case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES: case SC_NEUTRALBARRIER_MASTER:
|
||||
case SC_NEUTRALBARRIER: case SC_STEALTHFIELD_MASTER: case SC_STEALTHFIELD:
|
||||
case SC_LEADERSHIP: case SC_GLORYWOUNDS: case SC_SOULCOLD:
|
||||
case SC_HAWKEYES: case SC_REGENERATION: case SC_SEVENWIND:
|
||||
case SC_MIRACLE: case SC_S_LIFEPOTION: case SC_L_LIFEPOTION:
|
||||
case SC_INCHEALRATE: case SC_PUSH_CART: case SC_PARTYFLEE:
|
||||
case SC_RAISINGDRAGON: case SC_GT_REVITALIZE: case SC_GT_ENERGYGAIN:
|
||||
case SC_GT_CHANGE: case SC_ANGEL_PROTECT: case SC_MONSTER_TRANSFORM:
|
||||
case SC_FULL_THROTTLE: case SC_REBOUND: case SC_TELEKINESIS_INTENSE:
|
||||
case SC_MOONSTAR: case SC_SUPER_STAR: case SC_ALL_RIDING:
|
||||
case SC_MTF_ASPD: case SC_MTF_RANGEATK: case SC_MTF_MATK:
|
||||
case SC_MTF_MLEATKED: case SC_MTF_CRIDAMAGE: case SC_HEAT_BARREL:
|
||||
case SC_HEAT_BARREL_AFTER: case SC_P_ALTER: case SC_E_CHAIN:
|
||||
case SC_C_MARKER: case SC_B_TRAP: case SC_H_MINE:
|
||||
case SC_STRANGELIGHTS: case SC_DECORATION_OF_MUSIC: case SC_GN_CARTBOOST:
|
||||
case SC_RECOGNIZEDSPELL: case SC_CHASEWALK2:
|
||||
#ifdef RENEWAL
|
||||
case SC_EXTREMITYFIST2:
|
||||
case SC_EXTREMITYFIST2:
|
||||
#endif
|
||||
case SC_HIDING: case SC_CLOAKING: case SC_CHASEWALK:
|
||||
case SC_CLOAKINGEXCEED: case SC__INVISIBILITY: case SC_UTSUSEMI:
|
||||
case SC_MTF_ASPD2: case SC_MTF_RANGEATK2: case SC_MTF_MATK2:
|
||||
case SC_2011RWC_SCROLL: case SC_JP_EVENT04: case SC_MTF_MHP:
|
||||
case SC_MTF_MSP: case SC_MTF_PUMPKIN: case SC_MTF_HITFLEE:
|
||||
continue;
|
||||
case SC_ASSUMPTIO:
|
||||
if( bl->type == BL_MOB )
|
||||
@ -8942,24 +8953,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
}
|
||||
break;
|
||||
|
||||
case LG_KINGS_GRACE:
|
||||
if( flag&1 ) {
|
||||
int sc_toend[] = { SC_POISON, SC_BLIND, SC_FREEZE, SC_STONE, SC_STUN, SC_SLEEP, SC_BLEEDING, SC_CURSE,
|
||||
SC_CONFUSION, SC_HALLUCINATION, SC_SILENCE, SC_BURNING, SC_CRYSTALIZE, SC_FREEZING,
|
||||
SC_DEEPSLEEP, SC_FEAR, SC_MANDRAGORA};
|
||||
for( i = 0; i < ARRAYLENGTH(sc_toend); i++) {
|
||||
status_change_end(bl, (sc_type)sc_toend[i], INVALID_TIMER);
|
||||
}
|
||||
sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
||||
} else {
|
||||
skill_area_temp[2] = 0;
|
||||
if( !map_flag_vs(src->m) && !map_flag_gvg(src->m) )
|
||||
flag |= BCT_GUILD;
|
||||
map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_PC, src, skill_id, skill_lv, tick, flag|SD_PREAMBLE|BCT_PARTY|BCT_SELF|1, skill_castend_nodamage_id);
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case WL_WHITEIMPRISON:
|
||||
if( (src == bl || battle_check_target(src, bl, BCT_ENEMY)>0) && !is_boss(bl) )// Should not work with bosses.
|
||||
{
|
||||
@ -9523,14 +9516,17 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
clif_skill_nodamage(src,bl,skill_id,skill_lv,
|
||||
sc_start2(src,bl,type,100,skill_lv,bl->id,skill_get_time(skill_id,skill_lv)));
|
||||
break;
|
||||
case SR_FLASHCOMBO:
|
||||
if( sd )
|
||||
case SR_FLASHCOMBO: {
|
||||
const int combo[] = { SR_DRAGONCOMBO, SR_FALLENEMPIRE, SR_TIGERCANNON, SR_SKYNETBLOW };
|
||||
|
||||
if (sd)
|
||||
sd->ud.attackabletime = sd->canuseitem_tick = sd->ud.canact_tick;
|
||||
clif_skill_nodamage(src,bl,skill_id,skill_lv,
|
||||
sc_start(src,src,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
|
||||
for( i = SR_FLASHCOMBO_ATK_STEP1; i <= SR_FLASHCOMBO_ATK_STEP4; i++ )
|
||||
skill_addtimerskill(src,tick + 500 * (i - SR_FLASHCOMBO_ATK_STEP1),bl->id,0,0,i,skill_lv,BF_WEAPON,flag|SD_LEVEL);
|
||||
break;
|
||||
sc_start2(src,bl,type,100,skill_lv,bl->id,skill_get_time(skill_id,skill_lv)));
|
||||
for (i = 0; i < ARRAYLENGTH(combo); i++)
|
||||
skill_addtimerskill(src,tick + 500 * i,bl->id,0,0,combo[i],skill_lv,BF_WEAPON,flag|SD_LEVEL);
|
||||
}
|
||||
break;
|
||||
|
||||
case WA_SWING_DANCE:
|
||||
case WA_MOONLIT_SERENADE:
|
||||
@ -11130,6 +11126,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
|
||||
case MH_STEINWAND:
|
||||
case MH_XENO_SLASHER:
|
||||
case NC_MAGMA_ERUPTION:
|
||||
case LG_KINGS_GRACE:
|
||||
case SO_ELEMENTAL_SHIELD:
|
||||
case RL_B_TRAP:
|
||||
flag|=1;//Set flag to 1 to prevent deleting ammo (it will be deleted on group-delete).
|
||||
@ -12701,6 +12698,17 @@ static int skill_unit_onplace(struct skill_unit *unit, struct block_list *bl, un
|
||||
sc_start(ss, bl, SC_ASH, 100, sg->skill_lv, skill_get_time(MH_VOLCANIC_ASH, sg->skill_lv));
|
||||
break;
|
||||
|
||||
case UNT_KINGS_GRACE:
|
||||
if (!sce) {
|
||||
int state = 0;
|
||||
|
||||
if (!map_flag_vs(ss->m) && !map_flag_gvg2(ss->m))
|
||||
state |= BCT_GUILD;
|
||||
if (battle_check_target(&unit->bl, bl, BCT_SELF|BCT_PARTY|state) > 0)
|
||||
sc_start4(ss, bl, type, 100, sg->skill_lv, 0, ss->id, 0, sg->limit);
|
||||
}
|
||||
break;
|
||||
|
||||
case UNT_GD_LEADERSHIP:
|
||||
case UNT_GD_GLORYWOUNDS:
|
||||
case UNT_GD_SOULCOLD:
|
||||
@ -13617,6 +13625,7 @@ int skill_unit_onleft(uint16 skill_id, struct block_list *bl, unsigned int tick)
|
||||
case SC_BLOODYLUST:
|
||||
case GN_FIRE_EXPANSION_SMOKE_POWDER:
|
||||
case GN_FIRE_EXPANSION_TEAR_GAS:
|
||||
case LG_KINGS_GRACE:
|
||||
case SO_ELEMENTAL_SHIELD:
|
||||
if (sce)
|
||||
status_change_end(bl, type, INVALID_TIMER);
|
||||
|
162
src/map/status.c
162
src/map/status.c
@ -709,7 +709,7 @@ void initChangeTables(void)
|
||||
set_sc( SR_GENTLETOUCH_ENERGYGAIN , SC_GT_ENERGYGAIN , SI_GENTLETOUCH_ENERGYGAIN , SCB_NONE );
|
||||
set_sc( SR_GENTLETOUCH_CHANGE , SC_GT_CHANGE , SI_GENTLETOUCH_CHANGE , SCB_WATK|SCB_MDEF|SCB_ASPD|SCB_MAXHP );
|
||||
set_sc( SR_GENTLETOUCH_REVITALIZE , SC_GT_REVITALIZE , SI_GENTLETOUCH_REVITALIZE , SCB_MAXHP|SCB_REGEN );
|
||||
add_sc( SR_FLASHCOMBO , SC_FLASHCOMBO );
|
||||
set_sc( SR_FLASHCOMBO , SC_FLASHCOMBO , SI_FLASHCOMBO , SCB_WATK );
|
||||
|
||||
/* Wanderer / Minstrel */
|
||||
set_sc( WA_SWING_DANCE , SC_SWINGDANCE , SI_SWINGDANCE , SCB_SPEED|SCB_ASPD );
|
||||
@ -977,6 +977,8 @@ void initChangeTables(void)
|
||||
StatusIconChangeTable[SC_UPHEAVAL] = SI_UPHEAVAL;
|
||||
|
||||
StatusIconChangeTable[SC_REBOUND] = SI_REBOUND;
|
||||
StatusIconChangeTable[SC_DEFSET] = SI_SET_NUM_DEF;
|
||||
StatusIconChangeTable[SC_MDEFSET] = SI_SET_NUM_MDEF;
|
||||
StatusIconChangeTable[SC_MONSTER_TRANSFORM] = SI_MONSTER_TRANSFORM;
|
||||
StatusIconChangeTable[SC_ALL_RIDING] = SI_ALL_RIDING;
|
||||
StatusIconChangeTable[SC_PUSH_CART] = SI_ON_PUSH_CART;
|
||||
@ -994,16 +996,25 @@ void initChangeTables(void)
|
||||
StatusIconChangeTable[SC_QUEST_BUFF1] = SI_QUEST_BUFF1;
|
||||
StatusIconChangeTable[SC_QUEST_BUFF2] = SI_QUEST_BUFF2;
|
||||
StatusIconChangeTable[SC_QUEST_BUFF3] = SI_QUEST_BUFF3;
|
||||
StatusIconChangeTable[SC_MTF_ASPD2] = SI_MTF_ASPD2;
|
||||
StatusIconChangeTable[SC_MTF_RANGEATK2] = SI_MTF_RANGEATK2;
|
||||
StatusIconChangeTable[SC_MTF_MATK2] = SI_MTF_MATK2;
|
||||
StatusIconChangeTable[SC_2011RWC_SCROLL] = SI_2011RWC_SCROLL;
|
||||
StatusIconChangeTable[SC_JP_EVENT04] = SI_JP_EVENT04;
|
||||
StatusIconChangeTable[SC_MTF_HITFLEE] = SI_MTF_HITFLEE;
|
||||
StatusIconChangeTable[SC_MTF_MHP] = SI_MTF_MHP;
|
||||
StatusIconChangeTable[SC_MTF_MSP] = SI_MTF_MSP;
|
||||
StatusIconChangeTable[SC_MTF_PUMPKIN] = SI_MTF_PUMPKIN;
|
||||
|
||||
/* Other SC which are not necessarily associated to skills */
|
||||
StatusChangeFlagTable[SC_ASPDPOTION0] = SCB_ASPD;
|
||||
StatusChangeFlagTable[SC_ASPDPOTION1] = SCB_ASPD;
|
||||
StatusChangeFlagTable[SC_ASPDPOTION2] = SCB_ASPD;
|
||||
StatusChangeFlagTable[SC_ASPDPOTION3] = SCB_ASPD;
|
||||
StatusChangeFlagTable[SC_SPEEDUP0] = SCB_SPEED;
|
||||
StatusChangeFlagTable[SC_SPEEDUP1] = SCB_SPEED;
|
||||
StatusChangeFlagTable[SC_ATKPOTION] = SCB_BATK;
|
||||
StatusChangeFlagTable[SC_MATKPOTION] = SCB_MATK;
|
||||
StatusChangeFlagTable[SC_ASPDPOTION0] |= SCB_ASPD;
|
||||
StatusChangeFlagTable[SC_ASPDPOTION1] |= SCB_ASPD;
|
||||
StatusChangeFlagTable[SC_ASPDPOTION2] |= SCB_ASPD;
|
||||
StatusChangeFlagTable[SC_ASPDPOTION3] |= SCB_ASPD;
|
||||
StatusChangeFlagTable[SC_SPEEDUP0] |= SCB_SPEED;
|
||||
StatusChangeFlagTable[SC_SPEEDUP1] |= SCB_SPEED;
|
||||
StatusChangeFlagTable[SC_ATKPOTION] |= SCB_BATK;
|
||||
StatusChangeFlagTable[SC_MATKPOTION] |= SCB_MATK;
|
||||
StatusChangeFlagTable[SC_INCALLSTATUS] |= SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK;
|
||||
StatusChangeFlagTable[SC_INCSTR] |= SCB_STR;
|
||||
StatusChangeFlagTable[SC_INCAGI] |= SCB_AGI;
|
||||
@ -1045,12 +1056,12 @@ void initChangeTables(void)
|
||||
StatusChangeFlagTable[SC_CHASEWALK2] |= SCB_STR;
|
||||
|
||||
/* Cash Items */
|
||||
StatusChangeFlagTable[SC_FOOD_STR_CASH] = SCB_STR;
|
||||
StatusChangeFlagTable[SC_FOOD_AGI_CASH] = SCB_AGI;
|
||||
StatusChangeFlagTable[SC_FOOD_VIT_CASH] = SCB_VIT;
|
||||
StatusChangeFlagTable[SC_FOOD_DEX_CASH] = SCB_DEX;
|
||||
StatusChangeFlagTable[SC_FOOD_INT_CASH] = SCB_INT;
|
||||
StatusChangeFlagTable[SC_FOOD_LUK_CASH] = SCB_LUK;
|
||||
StatusChangeFlagTable[SC_FOOD_STR_CASH] |= SCB_STR;
|
||||
StatusChangeFlagTable[SC_FOOD_AGI_CASH] |= SCB_AGI;
|
||||
StatusChangeFlagTable[SC_FOOD_VIT_CASH] |= SCB_VIT;
|
||||
StatusChangeFlagTable[SC_FOOD_DEX_CASH] |= SCB_DEX;
|
||||
StatusChangeFlagTable[SC_FOOD_INT_CASH] |= SCB_INT;
|
||||
StatusChangeFlagTable[SC_FOOD_LUK_CASH] |= SCB_LUK;
|
||||
|
||||
/* Mercenary Bonus Effects */
|
||||
StatusChangeFlagTable[SC_MERC_FLEEUP] |= SCB_FLEE;
|
||||
@ -1104,6 +1115,12 @@ void initChangeTables(void)
|
||||
StatusChangeFlagTable[SC_QUEST_BUFF1] |= SCB_BATK|SCB_MATK;
|
||||
StatusChangeFlagTable[SC_QUEST_BUFF2] |= SCB_BATK|SCB_MATK;
|
||||
StatusChangeFlagTable[SC_QUEST_BUFF3] |= SCB_BATK|SCB_MATK;
|
||||
StatusChangeFlagTable[SC_MTF_ASPD2] |= SCB_ASPD|SCB_HIT;
|
||||
StatusChangeFlagTable[SC_MTF_MATK2] |= SCB_MATK;
|
||||
StatusChangeFlagTable[SC_2011RWC_SCROLL] |= SCB_BATK|SCB_MATK|SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK;
|
||||
StatusChangeFlagTable[SC_MTF_HITFLEE] |= SCB_HIT|SCB_FLEE;
|
||||
StatusChangeFlagTable[SC_MTF_MHP] |= SCB_MAXHP;
|
||||
StatusChangeFlagTable[SC_MTF_MSP] |= SCB_MAXSP;
|
||||
|
||||
#ifdef RENEWAL
|
||||
// renewal EDP increases your weapon atk
|
||||
@ -1183,6 +1200,7 @@ void initChangeTables(void)
|
||||
StatusChangeStateTable[SC_KAGEHUMI] |= SCS_NOMOVE;
|
||||
StatusChangeStateTable[SC_KYOUGAKU] |= SCS_NOMOVE;
|
||||
StatusChangeStateTable[SC_PARALYSIS] |= SCS_NOMOVE;
|
||||
StatusChangeStateTable[SC_KINGS_GRACE] |= SCS_NOMOVE;
|
||||
|
||||
/* StatusChangeState (SCS_) NOPICKUPITEMS */
|
||||
StatusChangeStateTable[SC_HIDING] |= SCS_NOPICKITEM;
|
||||
@ -2628,6 +2646,8 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) {
|
||||
bonus += (600 * sc->data[SC_INSPIRATION]->val1);
|
||||
if(sc->data[SC_SOLID_SKIN_OPTION])
|
||||
bonus += 2000;
|
||||
if(sc->data[SC_MTF_MHP])
|
||||
bonus += sc->data[SC_MTF_MHP]->val1;
|
||||
if(sc->data[SC_MARIONETTE])
|
||||
bonus -= 1000;
|
||||
}
|
||||
@ -2734,9 +2754,11 @@ static int status_get_spbonus(struct block_list *bl, enum e_status_bonus type) {
|
||||
//Bonus by SC
|
||||
if (sc) {
|
||||
if(sc->data[SC_INCMSP])
|
||||
bonus += (sc->data[SC_INCMSP]->val1);
|
||||
bonus += sc->data[SC_INCMSP]->val1;
|
||||
if(sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 3)
|
||||
bonus += 50;
|
||||
if(sc->data[SC_MTF_MSP])
|
||||
bonus += sc->data[SC_MTF_MSP]->val1;
|
||||
}
|
||||
} else if (type == STATUS_BONUS_RATE) {
|
||||
struct status_change *sc = status_get_sc(bl);
|
||||
@ -4855,6 +4877,8 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang
|
||||
str += sc->data[SC_SAVAGE_STEAK]->val1;
|
||||
if(sc->data[SC_INSPIRATION])
|
||||
str += sc->data[SC_INSPIRATION]->val3;
|
||||
if(sc->data[SC_2011RWC_SCROLL])
|
||||
str += sc->data[SC_2011RWC_SCROLL]->val1;
|
||||
if(sc->data[SC_STOMACHACHE])
|
||||
str -= sc->data[SC_STOMACHACHE]->val1;
|
||||
if(sc->data[SC_KYOUGAKU])
|
||||
@ -4899,6 +4923,8 @@ static unsigned short status_calc_agi(struct block_list *bl, struct status_chang
|
||||
agi += sc->data[SC_INCREASEAGI]->val2;
|
||||
if(sc->data[SC_INCREASING])
|
||||
agi += 4; // Added based on skill updates [Reddozen]
|
||||
if(sc->data[SC_2011RWC_SCROLL])
|
||||
agi += sc->data[SC_2011RWC_SCROLL]->val1;
|
||||
if(sc->data[SC_DECREASEAGI])
|
||||
agi -= sc->data[SC_DECREASEAGI]->val2;
|
||||
if(sc->data[SC_QUAGMIRE])
|
||||
@ -4971,6 +4997,8 @@ static unsigned short status_calc_vit(struct block_list *bl, struct status_chang
|
||||
vit += sc->data[SC_MINOR_BBQ]->val1;
|
||||
if(sc->data[SC_INSPIRATION])
|
||||
vit += sc->data[SC_INSPIRATION]->val3;
|
||||
if(sc->data[SC_2011RWC_SCROLL])
|
||||
vit += sc->data[SC_2011RWC_SCROLL]->val1;
|
||||
if(sc->data[SC_STOMACHACHE])
|
||||
vit -= sc->data[SC_STOMACHACHE]->val1;
|
||||
if(sc->data[SC_KYOUGAKU])
|
||||
@ -5027,6 +5055,8 @@ static unsigned short status_calc_int(struct block_list *bl, struct status_chang
|
||||
int_ += sc->data[SC_NEN]->val1;
|
||||
if(sc->data[SC_MARIONETTE])
|
||||
int_ -= ((sc->data[SC_MARIONETTE]->val4)>>16)&0xFF;
|
||||
if(sc->data[SC_2011RWC_SCROLL])
|
||||
int_ += sc->data[SC_2011RWC_SCROLL]->val1;
|
||||
if(sc->data[SC_MARIONETTE2])
|
||||
int_ += ((sc->data[SC_MARIONETTE2]->val4)>>16)&0xFF;
|
||||
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH)
|
||||
@ -5100,6 +5130,8 @@ static unsigned short status_calc_dex(struct block_list *bl, struct status_chang
|
||||
dex += 4; // Added based on skill updates [Reddozen]
|
||||
if(sc->data[SC_MARIONETTE])
|
||||
dex -= ((sc->data[SC_MARIONETTE]->val4)>>8)&0xFF;
|
||||
if(sc->data[SC_2011RWC_SCROLL])
|
||||
dex += sc->data[SC_2011RWC_SCROLL]->val1;
|
||||
if(sc->data[SC_MARIONETTE2])
|
||||
dex += ((sc->data[SC_MARIONETTE2]->val4)>>8)&0xFF;
|
||||
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH)
|
||||
@ -5169,7 +5201,8 @@ static unsigned short status_calc_luk(struct block_list *bl, struct status_chang
|
||||
luk -= sc->data[SC_KYOUGAKU]->val2;
|
||||
if(sc->data[SC_LAUDARAMUS])
|
||||
luk += 4 + sc->data[SC_LAUDARAMUS]->val1;
|
||||
|
||||
if(sc->data[SC_2011RWC_SCROLL])
|
||||
luk += sc->data[SC_2011RWC_SCROLL]->val1;
|
||||
if(sc->data[SC__STRIPACCESSORY] && bl->type != BL_PC)
|
||||
luk -= luk * sc->data[SC__STRIPACCESSORY]->val2 / 100;
|
||||
if(sc->data[SC_BANANA_BOMB])
|
||||
@ -5219,7 +5252,8 @@ static unsigned short status_calc_batk(struct block_list *bl, struct status_chan
|
||||
batk += sc->data[SC_PYROCLASTIC]->val2;
|
||||
if (sc->data[SC_ANGRIFFS_MODUS])
|
||||
batk += sc->data[SC_ANGRIFFS_MODUS]->val2;
|
||||
|
||||
if(sc->data[SC_2011RWC_SCROLL])
|
||||
batk += 30;
|
||||
if(sc->data[SC_INCATKRATE])
|
||||
batk += batk * sc->data[SC_INCATKRATE]->val1/100;
|
||||
if(sc->data[SC_PROVOKE])
|
||||
@ -5345,6 +5379,8 @@ static unsigned short status_calc_watk(struct block_list *bl, struct status_chan
|
||||
watk += sc->data[SC_PYROCLASTIC]->val2;
|
||||
if(sc->data[SC_ANGRIFFS_MODUS])
|
||||
watk += watk * sc->data[SC_ANGRIFFS_MODUS]->val2/100;
|
||||
if( sc->data[SC_FLASHCOMBO] )
|
||||
watk += sc->data[SC_FLASHCOMBO]->val2;
|
||||
if(sc->data[SC_ODINS_POWER])
|
||||
watk += 40 + 30 * sc->data[SC_ODINS_POWER]->val1;
|
||||
|
||||
@ -5394,6 +5430,10 @@ static unsigned short status_calc_ematk(struct block_list *bl, struct status_cha
|
||||
matk += sc->data[SC_QUEST_BUFF2]->val1;
|
||||
if(sc->data[SC_QUEST_BUFF3])
|
||||
matk += sc->data[SC_QUEST_BUFF3]->val1;
|
||||
if(sc->data[SC_MTF_MATK2])
|
||||
matk += 50;
|
||||
if(sc->data[SC_2011RWC_SCROLL])
|
||||
matk += 30;
|
||||
|
||||
return (unsigned short)cap_value(matk,0,USHRT_MAX);
|
||||
}
|
||||
@ -5432,6 +5472,10 @@ static unsigned short status_calc_matk(struct block_list *bl, struct status_chan
|
||||
matk += 40 + 30 * sc->data[SC_ODINS_POWER]->val1; // 70 lvl1, 100lvl2
|
||||
if (sc->data[SC_IZAYOI])
|
||||
matk += 25 * sc->data[SC_IZAYOI]->val1;
|
||||
if (sc->data[SC_MTF_MATK2])
|
||||
matk += 50;
|
||||
if (sc->data[SC_2011RWC_SCROLL])
|
||||
matk += 30;
|
||||
#endif
|
||||
if (sc->data[SC_ZANGETSU])
|
||||
matk += sc->data[SC_ZANGETSU]->val3;
|
||||
@ -5451,6 +5495,8 @@ static unsigned short status_calc_matk(struct block_list *bl, struct status_chan
|
||||
matk += sc->data[SC_MOONLITSERENADE]->val3/100;
|
||||
if (sc->data[SC_MTF_MATK])
|
||||
matk += matk * 25 / 100;
|
||||
if(sc->data[SC_2011RWC_SCROLL])
|
||||
matk += 30;
|
||||
|
||||
return (unsigned short)cap_value(matk,0,USHRT_MAX);
|
||||
}
|
||||
@ -5523,7 +5569,8 @@ static signed short status_calc_hit(struct block_list *bl, struct status_change
|
||||
hit += 20; // RockmanEXE; changed based on updated [Reddozen]
|
||||
if(sc->data[SC_MERC_HITUP])
|
||||
hit += sc->data[SC_MERC_HITUP]->val2;
|
||||
|
||||
if(sc->data[SC_MTF_HITFLEE])
|
||||
hit += sc->data[SC_MTF_HITFLEE]->val1;
|
||||
if(sc->data[SC_INCHITRATE])
|
||||
hit += hit * sc->data[SC_INCHITRATE]->val1/100;
|
||||
if(sc->data[SC_BLIND])
|
||||
@ -5538,8 +5585,6 @@ static signed short status_calc_hit(struct block_list *bl, struct status_change
|
||||
hit -= hit * 50 / 100;
|
||||
if(sc->data[SC_ILLUSIONDOPING])
|
||||
hit -= 50;
|
||||
if (sc->data[SC_MTF_ASPD])
|
||||
hit += 5;
|
||||
|
||||
return (short)cap_value(hit,1,SHRT_MAX);
|
||||
}
|
||||
@ -5596,6 +5641,8 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change
|
||||
flee += sc->data[SC_MERC_FLEEUP]->val2;
|
||||
if( sc->data[SC_HALLUCINATIONWALK] )
|
||||
flee += sc->data[SC_HALLUCINATIONWALK]->val2;
|
||||
if(sc->data[SC_MTF_HITFLEE])
|
||||
flee += sc->data[SC_MTF_HITFLEE]->val2;
|
||||
if( sc->data[SC_WATER_BARRIER] )
|
||||
flee -= sc->data[SC_WATER_BARRIER]->val3;
|
||||
if( sc->data[SC_C_MARKER] )
|
||||
@ -6265,6 +6312,8 @@ static short status_calc_fix_aspd(struct block_list *bl, struct status_change *s
|
||||
aspd -= sc->data[SC_FIGHTINGSPIRIT]->val2;
|
||||
if (sc->data[SC_MTF_ASPD])
|
||||
aspd -= 10;
|
||||
if (sc->data[SC_MTF_ASPD2])
|
||||
aspd -= 20;
|
||||
|
||||
return cap_value(aspd, 0, 2000); // Will be recap for proper bl anyway
|
||||
}
|
||||
@ -7744,11 +7793,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
return 0;
|
||||
break;
|
||||
case SC_MAGNIFICAT:
|
||||
if( sc->data[SC_OFFERTORIUM] || sc->option&OPTION_MADOGEAR ) // Mado is immune to magnificat
|
||||
return 0;
|
||||
break;
|
||||
case SC_OFFERTORIUM:
|
||||
if(sc->data[SC_MAGNIFICAT])
|
||||
if( sc->option&OPTION_MADOGEAR ) // Mado is immune to magnificat
|
||||
return 0;
|
||||
break;
|
||||
case SC_ONEHAND:
|
||||
@ -7890,27 +7935,27 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
return 0;
|
||||
break;
|
||||
case SC_FOOD_STR_CASH:
|
||||
if (sc->data[SC_STRFOOD] && sc->data[SC_STRFOOD]->val1 > val1)
|
||||
if ((sc->data[SC_STRFOOD] && sc->data[SC_STRFOOD]->val1 > val1) || sc->data[SC_2011RWC_SCROLL])
|
||||
return 0;
|
||||
break;
|
||||
case SC_FOOD_AGI_CASH:
|
||||
if (sc->data[SC_AGIFOOD] && sc->data[SC_AGIFOOD]->val1 > val1)
|
||||
if ((sc->data[SC_AGIFOOD] && sc->data[SC_AGIFOOD]->val1 > val1) || sc->data[SC_2011RWC_SCROLL])
|
||||
return 0;
|
||||
break;
|
||||
case SC_FOOD_VIT_CASH:
|
||||
if (sc->data[SC_VITFOOD] && sc->data[SC_VITFOOD]->val1 > val1)
|
||||
if ((sc->data[SC_VITFOOD] && sc->data[SC_VITFOOD]->val1 > val1) || sc->data[SC_2011RWC_SCROLL])
|
||||
return 0;
|
||||
break;
|
||||
case SC_FOOD_INT_CASH:
|
||||
if (sc->data[SC_INTFOOD] && sc->data[SC_INTFOOD]->val1 > val1)
|
||||
if ((sc->data[SC_INTFOOD] && sc->data[SC_INTFOOD]->val1 > val1) || sc->data[SC_2011RWC_SCROLL])
|
||||
return 0;
|
||||
break;
|
||||
case SC_FOOD_DEX_CASH:
|
||||
if (sc->data[SC_DEXFOOD] && sc->data[SC_DEXFOOD]->val1 > val1)
|
||||
if ((sc->data[SC_DEXFOOD] && sc->data[SC_DEXFOOD]->val1 > val1) || sc->data[SC_2011RWC_SCROLL])
|
||||
return 0;
|
||||
break;
|
||||
case SC_FOOD_LUK_CASH:
|
||||
if (sc->data[SC_LUKFOOD] && sc->data[SC_LUKFOOD]->val1 > val1)
|
||||
if ((sc->data[SC_LUKFOOD] && sc->data[SC_LUKFOOD]->val1 > val1) || sc->data[SC_2011RWC_SCROLL])
|
||||
return 0;
|
||||
break;
|
||||
case SC_CAMOUFLAGE:
|
||||
@ -7971,6 +8016,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
if (sc->data[SC_P_ALTER] || sc->data[SC_HEAT_BARREL])
|
||||
return 0;
|
||||
break;
|
||||
case SC_KINGS_GRACE:
|
||||
if (sc->data[SC_DEVOTION] || sc->data[SC_WHITEIMPRISON])
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case SC_WEDDING:
|
||||
case SC_XMAS:
|
||||
@ -8086,6 +8135,12 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
// Cancels Normal Overthrust. [Skotlex]
|
||||
status_change_end(bl, SC_OVERTHRUST, INVALID_TIMER);
|
||||
break;
|
||||
case SC_MAGNIFICAT:
|
||||
status_change_end(bl,SC_OFFERTORIUM,INVALID_TIMER);
|
||||
break;
|
||||
case SC_OFFERTORIUM:
|
||||
status_change_end(bl,SC_MAGNIFICAT,INVALID_TIMER);
|
||||
break;
|
||||
case SC_KYRIE:
|
||||
// Cancels Assumptio
|
||||
status_change_end(bl, SC_ASSUMPTIO, INVALID_TIMER);
|
||||
@ -8298,6 +8353,33 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
case SC_FREEZING:
|
||||
status_change_end(bl, SC_BURNING, INVALID_TIMER);
|
||||
break;
|
||||
case SC_KINGS_GRACE:
|
||||
status_change_end(bl,SC_POISON,INVALID_TIMER);
|
||||
status_change_end(bl,SC_BLIND,INVALID_TIMER);
|
||||
status_change_end(bl,SC_FREEZE,INVALID_TIMER);
|
||||
status_change_end(bl,SC_STONE,INVALID_TIMER);
|
||||
status_change_end(bl,SC_STUN,INVALID_TIMER);
|
||||
status_change_end(bl,SC_SLEEP,INVALID_TIMER);
|
||||
status_change_end(bl,SC_BLEEDING,INVALID_TIMER);
|
||||
status_change_end(bl,SC_CURSE,INVALID_TIMER);
|
||||
status_change_end(bl,SC_CONFUSION,INVALID_TIMER);
|
||||
status_change_end(bl,SC_HALLUCINATION,INVALID_TIMER);
|
||||
status_change_end(bl,SC_SILENCE,INVALID_TIMER);
|
||||
status_change_end(bl,SC_BURNING,INVALID_TIMER);
|
||||
status_change_end(bl,SC_CRYSTALIZE,INVALID_TIMER);
|
||||
status_change_end(bl,SC_FREEZING,INVALID_TIMER);
|
||||
status_change_end(bl,SC_DEEPSLEEP,INVALID_TIMER);
|
||||
status_change_end(bl,SC_FEAR,INVALID_TIMER);
|
||||
status_change_end(bl,SC_MANDRAGORA,INVALID_TIMER);
|
||||
break;
|
||||
case SC_2011RWC_SCROLL:
|
||||
status_change_end(bl,SC_FOOD_STR_CASH,INVALID_TIMER);
|
||||
status_change_end(bl,SC_FOOD_AGI_CASH,INVALID_TIMER);
|
||||
status_change_end(bl,SC_FOOD_VIT_CASH,INVALID_TIMER);
|
||||
status_change_end(bl,SC_FOOD_INT_CASH,INVALID_TIMER);
|
||||
status_change_end(bl,SC_FOOD_DEX_CASH,INVALID_TIMER);
|
||||
status_change_end(bl,SC_FOOD_LUK_CASH,INVALID_TIMER);
|
||||
break;
|
||||
case SC_EQC:
|
||||
status_change_end(bl,SC_TINDER_BREAKER2,INVALID_TIMER);
|
||||
break;
|
||||
@ -9231,6 +9313,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
break;
|
||||
case SC_EXPBOOST:
|
||||
case SC_JEXPBOOST:
|
||||
case SC_JP_EVENT04:
|
||||
if (val1 < 0)
|
||||
val1 = 0;
|
||||
break;
|
||||
@ -10031,6 +10114,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
case SC_EXPBOOST:
|
||||
case SC_JEXPBOOST:
|
||||
case SC_ITEMBOOST:
|
||||
case SC_JP_EVENT04:
|
||||
val_flag |= 1;
|
||||
break;
|
||||
// Start |1|2 val_flag setting
|
||||
@ -10480,7 +10564,7 @@ int status_change_clear(struct block_list* bl, int type)
|
||||
if(!sc->data[i])
|
||||
continue;
|
||||
|
||||
if(type == 0)
|
||||
if(type == 0) {
|
||||
switch (i) { // Type 0: PC killed -> Place here statuses that do not dispel on death.
|
||||
case SC_ELEMENTALCHANGE: // Only when its Holy or Dark that it doesn't dispell on death
|
||||
if( sc->data[i]->val2 != ELE_HOLY && sc->data[i]->val2 != ELE_DARK )
|
||||
@ -10549,7 +10633,10 @@ int status_change_clear(struct block_list* bl, int type)
|
||||
case SC_QUEST_BUFF1:
|
||||
case SC_QUEST_BUFF2:
|
||||
case SC_QUEST_BUFF3:
|
||||
case SC_2011RWC_SCROLL:
|
||||
case SC_JP_EVENT04:
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if( type == 3 ) {
|
||||
@ -12398,6 +12485,15 @@ void status_change_clear_buffs (struct block_list* bl, int type)
|
||||
case SC_QUEST_BUFF1:
|
||||
case SC_QUEST_BUFF2:
|
||||
case SC_QUEST_BUFF3:
|
||||
case SC_MTF_ASPD2:
|
||||
case SC_MTF_RANGEATK2:
|
||||
case SC_MTF_MATK2:
|
||||
case SC_2011RWC_SCROLL:
|
||||
case SC_JP_EVENT04:
|
||||
case SC_MTF_MHP:
|
||||
case SC_MTF_MSP:
|
||||
case SC_MTF_PUMPKIN:
|
||||
case SC_MTF_HITFLEE:
|
||||
continue;
|
||||
|
||||
// Debuffs that can be removed.
|
||||
|
@ -703,6 +703,18 @@ typedef enum sc_type {
|
||||
SC_ELEMENTAL_SHIELD,
|
||||
SC_CHASEWALK2,
|
||||
|
||||
SC_MTF_ASPD2,
|
||||
SC_MTF_RANGEATK2,
|
||||
SC_MTF_MATK2,
|
||||
SC_2011RWC_SCROLL,
|
||||
SC_JP_EVENT04,
|
||||
|
||||
// 2014 Halloween Event
|
||||
SC_MTF_MHP,
|
||||
SC_MTF_MSP,
|
||||
SC_MTF_PUMPKIN,
|
||||
SC_MTF_HITFLEE,
|
||||
|
||||
#ifdef RENEWAL
|
||||
SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled
|
||||
#endif
|
||||
@ -1520,7 +1532,52 @@ enum si_type {
|
||||
SI_GET_MAILBOX = 814,
|
||||
SI_JUMPINGCLAN = 815,
|
||||
SI_JP_OTP = 816,
|
||||
|
||||
SI_HANDICAPTOLERANCE_LEVELGAP = 817,
|
||||
SI_MTF_RANGEATK2 = 818,
|
||||
SI_MTF_ASPD2 = 819,
|
||||
SI_MTF_MATK2 = 820,
|
||||
SI_SHOW_NPCHPBAR = 821,
|
||||
SI_FLOWERSMOKE = 822,
|
||||
SI_FSTONE = 823,
|
||||
SI_DAILYSENDMAILCNT = 824,
|
||||
SI_QSCARABA = 825,
|
||||
SI_LJOSALFAR = 826,
|
||||
SI_PAD_READER_KNIGHT = 827,
|
||||
SI_PAD_READER_CRUSADER = 828,
|
||||
SI_PAD_READER_BLACKSMITH = 829,
|
||||
SI_PAD_READER_ALCHEMIST = 830,
|
||||
SI_PAD_READER_ASSASSIN = 831,
|
||||
SI_PAD_READER_ROGUE = 832,
|
||||
SI_PAD_READER_WIZARD = 833,
|
||||
SI_PAD_READER_SAGE = 834,
|
||||
SI_PAD_READER_PRIEST = 835,
|
||||
SI_PAD_READER_MONK = 836,
|
||||
SI_PAD_READER_HUNTER = 837,
|
||||
SI_PAD_READER_BARD = 838,
|
||||
SI_PAD_READER_DANCER = 839,
|
||||
SI_PAD_READER_TAEKWON = 840,
|
||||
SI_PAD_READER_NINJA = 841,
|
||||
SI_PAD_READER_GUNSLINGER = 842,
|
||||
SI_PAD_READER_SUPERNOVICE = 843,
|
||||
SI_ESSENCE_OF_TIME = 844,
|
||||
SI_MINIGAME_ROULETTE = 845,
|
||||
SI_MINIGAME_GOLD_POINT = 846,
|
||||
SI_MINIGAME_SILVER_POINT = 847,
|
||||
SI_MINIGAME_BRONZE_POINT = 848,
|
||||
SI_HAPPINESS_STAR = 849,
|
||||
SI_SUMMEREVENT01 = 850,
|
||||
SI_SUMMEREVENT02 = 851,
|
||||
SI_SUMMEREVENT03 = 852,
|
||||
SI_SUMMEREVENT04 = 853,
|
||||
SI_SUMMEREVENT05 = 854,
|
||||
SI_MINIGAME_ROULETTE_BONUS_ITEM = 855,
|
||||
SI_DRESS_UP = 856,
|
||||
SI_MAPLE_FALLS = 857,
|
||||
SI_ALL_NIFLHEIM_RECALL = 858,
|
||||
SI_DRACULA_CARD = 865,
|
||||
SI_LIMIT_POWER_BOOSTER = 867,
|
||||
SI_TIME_ACCESSORY = 872,
|
||||
SI_EP16_DEF = 873,
|
||||
SI_MAX,
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user