From 32eac40dc34fcab873a8c4ad8e5490ba2c831d6d Mon Sep 17 00:00:00 2001 From: celest Date: Wed, 17 Nov 2004 15:20:33 +0000 Subject: Fixed Berserk git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/athena@232 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog.txt | 1 + src/map/battle.c | 2 +- src/map/pc.c | 16 ++++++++++------ src/map/skill.c | 16 ++++++++-------- src/map/skill.h | 10 ++++++---- 5 files changed, 26 insertions(+), 19 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index adf0c799c..88edac72e 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -4,6 +4,7 @@ Date Added * Skill updates: [celest] - Removed annoying skill fail messages from rogue's Snatcher - Add sc_data check for firewall and fogwall + - Fixed Berserk (99% hopefully? ^_^) 11/16 * Fix for compiling against gcc 2.95 [MouseJstr] diff --git a/src/map/battle.c b/src/map/battle.c index c0ba107e6..e1367cbc0 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1068,7 +1068,7 @@ int battle_get_dmotion(struct block_list *bl) else return 2000; - if((sc_data && sc_data[SC_ENDURE].timer!=-1) || + if((sc_data && (sc_data[SC_ENDURE].timer!=-1 || sc_data[SC_BERSERK].timer!=-1)) || (bl->type == BL_PC && ((struct map_session_data *)bl)->special_state.infinite_endure)) ret=0; diff --git a/src/map/pc.c b/src/map/pc.c index 00832d944..8f126e101 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1626,9 +1626,9 @@ int pc_calcstatus(struct map_session_data* sd,int first) sd->status.max_hp = sd->status.max_hp * 3; // sd->status.hp = sd->status.hp * 3; if(sd->status.max_hp > battle_config.max_hp) // removed negative max hp bug by Valaris - sd->status.max_hp = battle_config.max_hp; + sd->status.max_hp = battle_config.max_hp; if(sd->status.hp > battle_config.max_hp) // removed negative max hp bug by Valaris - sd->status.hp = battle_config.max_hp; + sd->status.hp = battle_config.max_hp; } if(s_class.job == 23 && sd->status.base_level >= 99){ sd->status.max_hp = sd->status.max_hp + 2000; @@ -1923,7 +1923,9 @@ int pc_calcstatus(struct map_session_data* sd,int first) if(sd->sc_data[SC_BERSERK].timer!=-1) { //All Def/MDef reduced to 0 while in Berserk [DracoRPG] sd->def = sd->def2 = 0; sd->mdef = sd->mdef2 = 0; - sd->flee -= sd->flee*50/100; + sd->flee -= sd->flee*50/100; + aspd_rate -= 30; + sd->base_atk *= 3; } if(sd->sc_data[SC_KEEPING].timer!=-1) sd->def = 100; @@ -4976,7 +4978,7 @@ int pc_damage(struct block_list *src,struct map_session_data *sd,int damage) } // 歩 いていたら足を止める - if(sd->sc_data[SC_ENDURE].timer == -1 && !sd->special_state.infinite_endure) + if(sd->sc_data[SC_ENDURE].timer == -1 && sd->sc_data[SC_BERSERK].timer && !sd->special_state.infinite_endure) pc_stop_walking(sd,3); else if(sd->sc_data[SC_ENDURE].timer != -1 && src->type==BL_MOB) // [Celest] if((--sd->sc_data[SC_ENDURE].val2) <= 0) @@ -6845,7 +6847,8 @@ static int pc_natural_heal_sp(struct map_session_data *sd) nullpo_retr(0, sd); - if (sd->sc_data[SC_TRICKDEAD].timer != -1) // Modified by RoVeRT + if (sd->sc_data[SC_TRICKDEAD].timer != -1 || // Modified by RoVeRT + sd->sc_data[SC_BERSERK].timer != -1) return 0; if(pc_checkoversp(sd)) { @@ -7010,7 +7013,8 @@ static int pc_natural_heal_sub(struct map_session_data *sd,va_list ap) { sd->hp_sub = sd->inchealhptick = 0; sd->sp_sub = sd->inchealsptick = 0; } - if((skill = pc_checkskill(sd,MO_SPIRITSRECOVERY)) > 0 && !pc_ishiding(sd) && sd->sc_data[SC_POISON].timer == -1 && sd->sc_data[SC_BERSERK].timer == -1){ + if((skill = pc_checkskill(sd,MO_SPIRITSRECOVERY)) > 0 && !pc_ishiding(sd) && + sd->sc_data[SC_POISON].timer == -1 && sd->sc_data[SC_BERSERK].timer == -1){ pc_spirit_heal_hp(sd,skill); pc_spirit_heal_sp(sd,skill); } diff --git a/src/map/skill.c b/src/map/skill.c index b47fe14c7..24e207fed 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3061,7 +3061,7 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int case LK_BERSERK: /* バ?サ?ク */ clif_skill_nodamage(src,bl,skillid,skilllv,1); skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 ); - sd->status.hp = sd->status.max_hp * 3; + //sd->status.hp = sd->status.max_hp * 3; break; case MC_CHANGECART: clif_skill_nodamage(src,bl,skillid,skilllv,1); @@ -7852,7 +7852,6 @@ int skill_status_change_end(struct block_list* bl, int type, int tid) case SC_BERSERK: /* バ?サ?ク */ calc_flag = 1; clif_status_change(bl,SC_INCREASEAGI,0); /* アイコン消去 */ - skill_status_change_end(bl,SC_ENDURE,-1); break; case SC_DEVOTION: /* ディボ?ション */ { @@ -8353,8 +8352,8 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data) break; case SC_BERSERK: /* バ?サ?ク */ if(sd){ /* HPが100以上なら?? */ - if( (sd->status.hp - sd->status.hp/100) > 100 ){ // 5% every 10 seconds [DracoRPG] - sd->status.hp -= sd->status.hp*5/100; + if( (sd->status.hp - sd->status.max_hp*5/100) > 100 ){ // 5% every 10 seconds [DracoRPG] + sd->status.hp -= sd->status.max_hp*5/100; // changed to max hp [celest] clif_updatestatus(sd,SP_HP); sc_data[type].timer = add_timer( /* タイマ?再設定 */ 10000+tick, skill_status_change_timer, @@ -9076,13 +9075,14 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val break; case SC_BERSERK: /* バ?サ?ク */ if(sd){ - sd->status.sp = 0; + sd->status.hp = sd->status.max_hp * 3; + sd->status.sp = 0; + clif_updatestatus(sd,SP_HP); clif_updatestatus(sd,SP_SP); - clif_status_change(bl,SC_INCREASEAGI,1); /* アイコン表示 */ - skill_status_change_start(bl,SC_ENDURE,10,0,0,0,tick,0 ); // celest + clif_status_change(bl,SC_INCREASEAGI,1); /* アイコン表示 */ } *opt3 |= 128; - tick = 1000; + tick = 10000; calc_flag = 1; break; case SC_ASSUMPTIO: /* アスムプティオ */ diff --git a/src/map/skill.h b/src/map/skill.h index 6b77b4fa3..a9d0129f0 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -332,10 +332,12 @@ enum { // struct map_session_data SC_MINDBREAKER =191, SC_SPELLBREAKER =192, - SC_EDP = 114, // [Celest] - SC_MARIONETTE2 = 122, // marionette target - SC_BLEEDING = 124, // temporarily same id as headcrush - SC_POISON2 = 193, // for EDP +// [Celest] + SC_EDP = 114, // + SC_MARIONETTE2 = 122, // Marionette target + SC_BLEEDING = 124, // Temporarily same id as headcrush + SC_POISON2 = 193, // for EDP -- notes: Not implemented since damage unknown yet + SC_GRIMTOOTH = 194, // for grimtooth's slowdown // -- testing various SC effects // SC_AURABLADE =81, -- cgit v1.2.3-60-g2f50