From f304c3637f82a5a3ab3a979c5d4b463ab26e7d72 Mon Sep 17 00:00:00 2001 From: shennetsind Date: Tue, 22 Oct 2013 04:44:30 -0200 Subject: Fixed bug with status visual effects on relog val_flag was being set only when status were being created, not loaded, moved them into its own switch so its set regardless of flag&4 being set or not. Signed-off-by: shennetsind --- src/map/status.c | 190 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 124 insertions(+), 66 deletions(-) (limited to 'src') diff --git a/src/map/status.c b/src/map/status.c index 30728a8fd..68a87b27a 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -8083,9 +8083,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val if( sd ) val1 = sd->status.job_level * pc->checkskill(sd, RK_RUNEMASTERY) / 4; //DEF/MDEF Increase break; - case SC_FIGHTINGSPIRIT: - val_flag |= 1|2; - break; case SC_ABUNDANCE: val4 = tick / 10000; tick_time = 10000; // [GodLesZ] tick time @@ -8102,16 +8099,11 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val break; case SC_VENOMIMPRESS: val2 = 10 * val1; - val_flag |= 1|2; - break; - case SC_POISONINGWEAPON: - val_flag |= 1|2|4; break; case SC_WEAPONBLOCKING: val2 = 10 + 2 * val1; // Chance val4 = tick / 3000; tick_time = 3000; // [GodLesZ] tick time - val_flag |= 1|2; break; case SC_TOXIN: val4 = tick / 10000; @@ -8134,13 +8126,9 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val val4 = tick / 3000; tick_time = 3000; // [GodLesZ] tick time break; - case SC_ROLLINGCUTTER: - val_flag |= 1; - break; case SC_CLOAKINGEXCEED: val2 = ( val1 + 1 ) / 2; // Hits val3 = 90 + val1 * 10; // Walk speed - val_flag |= 1|2|4; if (bl->type == BL_PC) val4 |= battle_config.pc_cloak_check_type&7; else @@ -8150,7 +8138,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_HALLUCINATIONWALK: val2 = 50 * val1; // Evasion rate of physical attacks. Flee val3 = 10 * val1; // Evasion rate of magical attacks. - val_flag |= 1|2|4; break; case SC_WHITEIMPRISON: status_change_end(bl, SC_BURNING, INVALID_TIMER); @@ -8179,7 +8166,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val if( val4 < 1 ) val4 = 1; tick_time = 1000; // [GodLesZ] tick time - val_flag |= 1; break; case SC_SHAPESHIFT: switch( val1 ) @@ -8211,10 +8197,9 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val if( s_sd ) s_sd->shadowform_id = bl->id; val4 = tick / 1000; - val_flag |= 1|2|4; tick_time = 1000; // [GodLesZ] tick time } - break; + break; case SC__STRIPACCESSARY: if (!sd) val2 = 20; @@ -8224,17 +8209,14 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val val3 = 20 * val1; // CRITICAL val4 = tick / 1000; tick_time = 1000; // [GodLesZ] tick time - val_flag |= 1|2; break; case SC__ENERVATION: val2 = 20 + 10 * val1; // ATK Reduction - val_flag |= 1|2; if( sd ) pc->delspiritball(sd,sd->spiritball,0); break; case SC__GROOMY: val2 = 20 + 10 * val1; //ASPD. Need to confirm if Movement Speed reduction is the same. [Jobbie] val3 = 20 * val1; //HIT - val_flag |= 1|2|4; if( sd ) { // Removes Animals if( pc_isriding(sd) ) pc->setriding(sd, 0); if( pc_isridingdragon(sd) ) pc->setoption(sd, sd->sc.option&~OPTION_DRAGON); @@ -8249,15 +8231,12 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC__LAZINESS: val2 = 10 + 10 * val1; // Cast reduction val3 = 10 * val1; // Flee Reduction - val_flag |= 1|2|4; break; case SC__UNLUCKY: val2 = 10 * val1; // Crit and Flee2 Reduction - val_flag |= 1|2|4; break; case SC__WEAKNESS: val2 = 10 * val1; - val_flag |= 1|2; // bypasses coating protection and MADO sc_start(bl,SC_NOEQUIPWEAPON,100,val1,tick); sc_start(bl,SC_NOEQUIPSHIELD,100,val1,tick); @@ -8271,7 +8250,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val val2 = 100; break; case SC_PROPERTYWALK: - val_flag |= 1|2; val3 = 0; break; case SC_WARMER: @@ -8393,7 +8371,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val val3 = 5 + (2 * val1); // Max rage counters tick = -1; //endless duration in the client tick_time = 6000; // [GodLesZ] tick time - val_flag |= 1|2|4; break; case SC_EXEEDBREAK: val1 *= 150; // 150 * skill_lv @@ -8408,16 +8385,9 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val val1 *= 15; // Defence added if( sd ) val1 += 10 * pc->checkskill(sd,CR_DEFENDER); - val_flag |= 1|2; break; case SC_BANDING: tick_time = 5000; // [GodLesZ] tick time - val_flag |= 1; - break; - case SC_SHIELDSPELL_DEF: - case SC_SHIELDSPELL_MDEF: - case SC_SHIELDSPELL_REF: - val_flag |= 1|2; break; case SC_MAGNETICFIELD: val3 = tick / 1000; @@ -8432,17 +8402,11 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val tick_time = 1000; // [GodLesZ] tick time status->change_clear_buffs(bl,3); //Remove buffs/debuffs break; - case SC_SPELLFIST: - case SC_CURSEDCIRCLE_ATKER: - val_flag |= 1|2|4; - break; case SC_CRESCENTELBOW: val2 = 94 + val1; - val_flag |= 1|2; break; case SC_LIGHTNINGWALK: // [(Job Level / 2) + (40 + 5 * Skill Level)] % val1 = (sd?sd->status.job_level:2)/2 + 40 + 5 * val1; - val_flag |= 1; break; case SC_RAISINGDRAGON: val3 = tick / 5000; @@ -8466,36 +8430,23 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val val4 = ( status_get_vit(src)/4 ) * val1; // STAT DEF increase: [(Caster VIT / 4) x Skill Level] } break; - case SC_PYROTECHNIC_OPTION: - val_flag |= 1|2|4; - break; case SC_HEATER_OPTION: val2 = 120; // Watk. TODO: Renewal (Atk2) val3 = 33; // % Increase effects. val4 = 3; // Change into fire element. - val_flag |= 1|2|4; break; case SC_TROPIC_OPTION: val2 = 180; // Watk. TODO: Renewal (Atk2) val3 = MG_FIREBOLT; break; - case SC_AQUAPLAY_OPTION: - val2 = 40; - val_flag |= 1|2|4; - break; case SC_COOLER_OPTION: val2 = 80; // % Freezing chance val3 = 33; // % increased damage val4 = 1; // Change into water elemet - val_flag |= 1|2|4; break; case SC_CHILLY_AIR_OPTION: val2 = 120; // Matk. TODO: Renewal (Matk1) val3 = MG_COLDBOLT; - val_flag |= 1|2; - break; - case SC_GUST_OPTION: - val_flag |= 1|2; break; case SC_WIND_STEP_OPTION: val2 = 50; // % Increase speed and flee. @@ -8503,30 +8454,24 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_BLAST_OPTION: val2 = 20; val3 = ELE_WIND; - val_flag |= 1|2|4; break; case SC_WILD_STORM_OPTION: val2 = MG_LIGHTNINGBOLT; - val_flag |= 1|2; break; case SC_PETROLOGY_OPTION: val2 = 5; val3 = 50; - val_flag |= 1|2|4; break; case SC_CURSED_SOIL_OPTION: val2 = 10; val3 = 33; val4 = 2; - val_flag |= 1|2|4; break; case SC_UPHEAVAL_OPTION: val2 = WZ_EARTHSPIKE; - val_flag |= 1|2; break; case SC_CIRCLE_OF_FIRE_OPTION: val2 = 300; - val_flag |= 1|2; break; case SC_FIRE_CLOAK_OPTION: case SC_WATER_DROP_OPTION: @@ -8548,7 +8493,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_WATER_BARRIER: val2 = 40; // Increasement. Mdef1 ??? val3 = 20; // Reductions. Atk2, Flee1, Matk1 ???? - val_flag |= 1|2|4; break; case SC_ZEPHYR: val2 = 22; // Flee. @@ -8680,7 +8624,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_MONSTER_TRANSFORM: if( !mob->db_checkid(val1) ) val1 = 1002; // default poring - val_flag |= 1; break; default: if( calc_flag == SCB_NONE && status->SkillChangeTable[type] == 0 && status->IconChangeTable[type] == 0 ) @@ -8704,20 +8647,135 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_KAAHI: val4 = INVALID_TIMER; break; - case SC_SUMMON1: - case SC_SUMMON2: - case SC_SUMMON3: - case SC_SUMMON4: - case SC_SUMMON5: - case SC_MONSTER_TRANSFORM: - val_flag |= 1; - break; case SC_KYOUGAKU: clif->status_change(bl, SI_ACTIVE_MONSTER_TRANSFORM, 1, 0, 1002, 0, 0); // Poring in disguise break; } } + /* values that must be set regardless of flag&4 e.g. val_flag */ + switch(type) { + case SC_FIGHTINGSPIRIT: + val_flag |= 1|2; + break; + case SC_VENOMIMPRESS: + val_flag |= 1|2; + break; + case SC_POISONINGWEAPON: + val_flag |= 1|2|4; + break; + case SC_WEAPONBLOCKING: + val_flag |= 1|2; + break; + case SC_ROLLINGCUTTER: + val_flag |= 1; + break; + case SC_CLOAKINGEXCEED: + val_flag |= 1|2|4; + break; + case SC_HALLUCINATIONWALK: + val_flag |= 1|2|4; + break; + case SC_SUMMON1: + case SC_SUMMON2: + case SC_SUMMON3: + case SC_SUMMON4: + case SC_SUMMON5: + val_flag |= 1; + break; + case SC__SHADOWFORM: + val_flag |= 1|2|4; + break; + case SC__INVISIBILITY: + val_flag |= 1|2; + break; + case SC__ENERVATION: + val_flag |= 1|2; + break; + case SC__GROOMY: + val_flag |= 1|2|4; + break; + case SC__LAZINESS: + val_flag |= 1|2|4; + break; + case SC__UNLUCKY: + val_flag |= 1|2|4; + break; + case SC__WEAKNESS: + val_flag |= 1|2; + break; + case SC_PROPERTYWALK: + val_flag |= 1|2; + break; + case SC_FORCEOFVANGUARD: + val_flag |= 1|2|4; + break; + case SC_PRESTIGE: + val_flag |= 1|2; + break; + case SC_BANDING: + val_flag |= 1; + break; + case SC_SHIELDSPELL_DEF: + case SC_SHIELDSPELL_MDEF: + case SC_SHIELDSPELL_REF: + val_flag |= 1|2; + break; + case SC_SPELLFIST: + case SC_CURSEDCIRCLE_ATKER: + val_flag |= 1|2|4; + break; + case SC_CRESCENTELBOW: + val2 = 94 + val1; + val_flag |= 1|2; + break; + case SC_LIGHTNINGWALK: + val_flag |= 1; + break; + case SC_PYROTECHNIC_OPTION: + val_flag |= 1|2|4; + break; + case SC_HEATER_OPTION: + val_flag |= 1|2|4; + break; + case SC_AQUAPLAY_OPTION: + val_flag |= 1|2|4; + break; + case SC_COOLER_OPTION: + val_flag |= 1|2|4; + break; + case SC_CHILLY_AIR_OPTION: + val_flag |= 1|2; + break; + case SC_GUST_OPTION: + val_flag |= 1|2; + break; + case SC_BLAST_OPTION: + val_flag |= 1|2|4; + break; + case SC_WILD_STORM_OPTION: + val_flag |= 1|2; + break; + case SC_PETROLOGY_OPTION: + val_flag |= 1|2|4; + break; + case SC_CURSED_SOIL_OPTION: + val_flag |= 1|2|4; + break; + case SC_UPHEAVAL_OPTION: + val_flag |= 1|2; + break; + case SC_CIRCLE_OF_FIRE_OPTION: + val_flag |= 1|2; + break; + case SC_WATER_BARRIER: + val_flag |= 1|2|4; + break; + case SC_MONSTER_TRANSFORM: + val_flag |= 1; + break; + } + /* [Ind/Hercules] */ if( sd && status->DisplayType[type] ) { int dval1 = 0, dval2 = 0, dval3 = 0; -- cgit v1.2.3-70-g09d2