Fixed Berserk
git-svn-id: https://svn.code.sf.net/p/rathena/svn/athena@232 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
62574ea526
commit
e668edb2a8
@ -4,6 +4,7 @@ Date Added
|
|||||||
* Skill updates: [celest]
|
* Skill updates: [celest]
|
||||||
- Removed annoying skill fail messages from rogue's Snatcher
|
- Removed annoying skill fail messages from rogue's Snatcher
|
||||||
- Add sc_data check for firewall and fogwall
|
- Add sc_data check for firewall and fogwall
|
||||||
|
- Fixed Berserk (99% hopefully? ^_^)
|
||||||
|
|
||||||
11/16
|
11/16
|
||||||
* Fix for compiling against gcc 2.95 [MouseJstr]
|
* Fix for compiling against gcc 2.95 [MouseJstr]
|
||||||
|
@ -1068,7 +1068,7 @@ int battle_get_dmotion(struct block_list *bl)
|
|||||||
else
|
else
|
||||||
return 2000;
|
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))
|
(bl->type == BL_PC && ((struct map_session_data *)bl)->special_state.infinite_endure))
|
||||||
ret=0;
|
ret=0;
|
||||||
|
|
||||||
|
16
src/map/pc.c
16
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.max_hp = sd->status.max_hp * 3;
|
||||||
// sd->status.hp = sd->status.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
|
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
|
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){
|
if(s_class.job == 23 && sd->status.base_level >= 99){
|
||||||
sd->status.max_hp = sd->status.max_hp + 2000;
|
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]
|
if(sd->sc_data[SC_BERSERK].timer!=-1) { //All Def/MDef reduced to 0 while in Berserk [DracoRPG]
|
||||||
sd->def = sd->def2 = 0;
|
sd->def = sd->def2 = 0;
|
||||||
sd->mdef = sd->mdef2 = 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)
|
if(sd->sc_data[SC_KEEPING].timer!=-1)
|
||||||
sd->def = 100;
|
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);
|
pc_stop_walking(sd,3);
|
||||||
else if(sd->sc_data[SC_ENDURE].timer != -1 && src->type==BL_MOB) // [Celest]
|
else if(sd->sc_data[SC_ENDURE].timer != -1 && src->type==BL_MOB) // [Celest]
|
||||||
if((--sd->sc_data[SC_ENDURE].val2) <= 0)
|
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);
|
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;
|
return 0;
|
||||||
|
|
||||||
if(pc_checkoversp(sd)) {
|
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->hp_sub = sd->inchealhptick = 0;
|
||||||
sd->sp_sub = sd->inchealsptick = 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_hp(sd,skill);
|
||||||
pc_spirit_heal_sp(sd,skill);
|
pc_spirit_heal_sp(sd,skill);
|
||||||
}
|
}
|
||||||
|
@ -3061,7 +3061,7 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
|
|||||||
case LK_BERSERK: /* バ?サ?ク */
|
case LK_BERSERK: /* バ?サ?ク */
|
||||||
clif_skill_nodamage(src,bl,skillid,skilllv,1);
|
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 );
|
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;
|
break;
|
||||||
case MC_CHANGECART:
|
case MC_CHANGECART:
|
||||||
clif_skill_nodamage(src,bl,skillid,skilllv,1);
|
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: /* バ?サ?ク */
|
case SC_BERSERK: /* バ?サ?ク */
|
||||||
calc_flag = 1;
|
calc_flag = 1;
|
||||||
clif_status_change(bl,SC_INCREASEAGI,0); /* アイコン消去 */
|
clif_status_change(bl,SC_INCREASEAGI,0); /* アイコン消去 */
|
||||||
skill_status_change_end(bl,SC_ENDURE,-1);
|
|
||||||
break;
|
break;
|
||||||
case SC_DEVOTION: /* ディボ?ション */
|
case SC_DEVOTION: /* ディボ?ション */
|
||||||
{
|
{
|
||||||
@ -8353,8 +8352,8 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
|
|||||||
break;
|
break;
|
||||||
case SC_BERSERK: /* バ?サ?ク */
|
case SC_BERSERK: /* バ?サ?ク */
|
||||||
if(sd){ /* HPが100以上なら?? */
|
if(sd){ /* HPが100以上なら?? */
|
||||||
if( (sd->status.hp - sd->status.hp/100) > 100 ){ // 5% every 10 seconds [DracoRPG]
|
if( (sd->status.hp - sd->status.max_hp*5/100) > 100 ){ // 5% every 10 seconds [DracoRPG]
|
||||||
sd->status.hp -= sd->status.hp*5/100;
|
sd->status.hp -= sd->status.max_hp*5/100; // changed to max hp [celest]
|
||||||
clif_updatestatus(sd,SP_HP);
|
clif_updatestatus(sd,SP_HP);
|
||||||
sc_data[type].timer = add_timer( /* タイマ?再設定 */
|
sc_data[type].timer = add_timer( /* タイマ?再設定 */
|
||||||
10000+tick, skill_status_change_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;
|
break;
|
||||||
case SC_BERSERK: /* バ?サ?ク */
|
case SC_BERSERK: /* バ?サ?ク */
|
||||||
if(sd){
|
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_updatestatus(sd,SP_SP);
|
||||||
clif_status_change(bl,SC_INCREASEAGI,1); /* アイコン表示 */
|
clif_status_change(bl,SC_INCREASEAGI,1); /* アイコン表示 */
|
||||||
skill_status_change_start(bl,SC_ENDURE,10,0,0,0,tick,0 ); // celest
|
|
||||||
}
|
}
|
||||||
*opt3 |= 128;
|
*opt3 |= 128;
|
||||||
tick = 1000;
|
tick = 10000;
|
||||||
calc_flag = 1;
|
calc_flag = 1;
|
||||||
break;
|
break;
|
||||||
case SC_ASSUMPTIO: /* アスムプティオ */
|
case SC_ASSUMPTIO: /* アスムプティオ */
|
||||||
|
@ -332,10 +332,12 @@ enum { // struct map_session_data
|
|||||||
SC_MINDBREAKER =191,
|
SC_MINDBREAKER =191,
|
||||||
SC_SPELLBREAKER =192,
|
SC_SPELLBREAKER =192,
|
||||||
|
|
||||||
SC_EDP = 114, // [Celest]
|
// [Celest]
|
||||||
SC_MARIONETTE2 = 122, // marionette target
|
SC_EDP = 114, //
|
||||||
SC_BLEEDING = 124, // temporarily same id as headcrush
|
SC_MARIONETTE2 = 122, // Marionette target
|
||||||
SC_POISON2 = 193, // for EDP
|
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
|
// -- testing various SC effects
|
||||||
// SC_AURABLADE =81,
|
// SC_AURABLADE =81,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user