Bug Fixes

* Fixed Group A Songs not showing their respective skill animation. (bugreport:7379)
* Fixed Cart Revolution pushing targets East rather than West. (bugreport:8806)
* Chemical Protection should not remove Strip status. (bugreport:8807)
* Concentration now casts Endure. (bugreport:4262, bugreport:8756)
* Fixed the Riding Mount icon not showing up after relogging for Dragons and Mado Gear. (bugreport:8805)
* Crescent Elbow will now knock the target back 8 cells.
* Other miscellaneous cleanups.
This commit is contained in:
aleos89 2014-03-20 12:59:18 -04:00
parent 51f26d43d2
commit 1f26499994
8 changed files with 35 additions and 32 deletions

View File

@ -180,15 +180,15 @@ EAJ_BASEMASK 0x00ff
EAJ_UPPERMASK 0x0fff
EAJ_THIRDMASK 0x4fff
EAJ_NOVICE 0x0
EAJ_SWORDMAN 0x1
EAJ_MAGE 0x2
EAJ_ARCHER 0x3
EAJ_ACOLYTE 0x4
EAJ_MERCHANT 0x5
EAJ_THIEF 0x6
EAJ_TAEKWON 0x7
EAJ_GUNSLINGER 0x9
EAJ_NOVICE 0x00
EAJ_SWORDMAN 0x01
EAJ_MAGE 0x02
EAJ_ARCHER 0x03
EAJ_ACOLYTE 0x04
EAJ_MERCHANT 0x05
EAJ_THIEF 0x06
EAJ_TAEKWON 0x07
EAJ_GUNSLINGER 0x09
EAJ_NINJA 0x0A
EAJ_GANGSI 0x0E

View File

@ -1801,11 +1801,11 @@
//===== Mercenary Skills ===================
//-- MS_MAGNUM
8202,0,0,2000,2000,10000,0
//-- KN_BOWLINGBASH
//-- MS_BOWLINGBASH
8203,700,0,0,0,0,0
//-- LK_PARRYING
//-- MS_PARRYING
8204,0,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,0,0
//-- CR_REFLECTSHIELD
//-- MS_REFLECTSHIELD
8205,0,0,0,300000,0,0
//-- MS_BERSERK
8206,0,0,0,300000,15000,0

View File

@ -1094,7 +1094,7 @@
2330,-2,6,1,-1,0x42,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0,0,weapon,0,0x0, SR_TIGERCANNON,Tiger Cannon
2331,0,6,1,0,0,0,10,0,no,0,0,0,none,0,0x0, SR_HELLGATE,Hell Gate
2332,0,6,4,-1,0x2,3,5,1,no,0,0,0,weapon,0,0x0, SR_RAMPAGEBLASTER,Rampage Blaster
2333,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_CRESCENTELBOW,Crescent Elbow //CHECK Check the autospell ID.
2333,0,6,4,0,0x1,0,5,1,no,0,0,0,none,8,0x0, SR_CRESCENTELBOW,Crescent Elbow
2334,0,6,4,0,0x3,1:1:2:2:3,5,1,no,0,0,0,none,0,0x0, SR_CURSEDCIRCLE,Cursed Circle
2335,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_LIGHTNINGWALK,Lightning Walk
2336,7:8:9:10:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,2:3:4:5:6,0x0, SR_KNUCKLEARROW,Knuckle Arrow

View File

@ -1844,11 +1844,11 @@
//===== Mercenary Skills ===================
//-- MS_MAGNUM
8202,0,1500,2000,2000,10000,0,0
//-- KN_BOWLINGBASH
//-- MS_BOWLINGBASH
8203,700,2500,0,0,0,0,0
//-- LK_PARRYING
//-- MS_PARRYING
8204,0,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,0,0,0
//-- CR_REFLECTSHIELD
//-- MS_REFLECTSHIELD
8205,0,0,0,300000,0,0,0
//-- MS_BERSERK
8206,0,0,0,300000,15000,0,0

View File

@ -1094,7 +1094,7 @@
2330,-2,6,1,-1,0x42,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0,0,weapon,0,0x0, SR_TIGERCANNON,Tiger Cannon
2331,0,6,1,0,0,0,10,0,no,0,0,0,none,0,0x0, SR_HELLGATE,Hell Gate
2332,0,6,4,-1,0x2,3,5,1,no,0,0,0,weapon,0,0x0, SR_RAMPAGEBLASTER,Rampage Blaster
2333,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_CRESCENTELBOW,Crescent Elbow //CHECK Check the autospell ID.
2333,0,6,4,0,0x1,0,5,1,no,0,0,0,none,8,0x0, SR_CRESCENTELBOW,Crescent Elbow
2334,0,6,4,0,0x3,1:1:2:2:3,5,1,no,0,0,0,none,0,0x0, SR_CURSEDCIRCLE,Cursed Circle
2335,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_LIGHTNINGWALK,Lightning Walk
2336,7:8:9:10:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,2:3:4:5:6,0x0, SR_KNUCKLEARROW,Knuckle Arrow

View File

@ -9613,8 +9613,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
if (sd->sc.option&OPTION_FALCON)
clif_status_load(&sd->bl, SI_FALCON, 1);
if (sd->sc.option&OPTION_RIDING)
else if (sd->sc.option&(OPTION_RIDING|OPTION_DRAGON|OPTION_MADOGEAR))
clif_status_load(&sd->bl, SI_RIDING, 1);
else if (sd->sc.option&OPTION_WUGRIDER)
clif_status_load(&sd->bl, SI_WUGRIDER, 1);

View File

@ -3043,7 +3043,7 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
break;
case MC_CARTREVOLUTION:
if (battle_config.cart_revo_knockback)
dir = 2; // Official servers push target to the West
dir = 6; // Official servers push target to the West
break;
}
//blown-specific handling
@ -7021,15 +7021,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case AM_CP_HELM:
{
unsigned int equip[] = {EQP_WEAPON, EQP_SHIELD, EQP_ARMOR, EQP_HEAD_TOP};
enum sc_type scid = (sc_type)(SC_STRIPWEAPON + (skill_id - AM_CP_WEAPON));
if( sd && ( bl->type != BL_PC || ( dstsd && pc_checkequip(dstsd,equip[skill_id - AM_CP_WEAPON]) < 0 ) ) ){
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
map_freeblock_unlock(); // Don't consume item requirements
return 0;
}
status_change_end(bl, scid, INVALID_TIMER);
clif_skill_nodamage(src,bl,skill_id,skill_lv,
sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
}
@ -7777,7 +7774,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
for (i = 0; i < 4; i++) {
if( bl->type != BL_PC || ( dstsd && pc_checkequip(dstsd,equip[i]) < 0 ) )
continue;
status_change_end(bl, (sc_type)(SC_STRIPWEAPON + i), INVALID_TIMER);
sc_start(src,bl,(sc_type)(SC_CP_WEAPON + i),100,skill_lv,skilltime);
s++;
}
@ -9279,13 +9275,15 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case WA_SWING_DANCE:
case WA_MOONLIT_SERENADE:
case WA_SYMPHONY_OF_LOVER:
case MI_RUSH_WINDMILL:
case MI_ECHOSONG:
if( sd == NULL || sd->status.party_id == 0 || (flag & 1) )
sc_start2(src,bl,type,100,skill_lv,((sd) ? pc_checkskill(sd,WM_LESSON) : skill_get_max(WM_LESSON)),skill_get_time(skill_id,skill_lv));
else if( sd ) { // Only shows effects on caster.
if( sd == NULL || sd->status.party_id == 0 || (flag & 1) ) {
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
sc_start2(src,bl,type,100,skill_lv,((sd) ? pc_checkskill(sd,WM_LESSON) : skill_get_max(WM_LESSON)),skill_get_time(skill_id,skill_lv));
}
break;
case MI_RUSH_WINDMILL:
if( sd ) {
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
sc_start2(src,bl,type,100,skill_lv,pc_checkskill(sd,WM_LESSON),skill_get_time(skill_id,skill_lv));
party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
}
break;

View File

@ -1312,7 +1312,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in
status_change_end(target, SC_CHASEWALK, INVALID_TIMER);
status_change_end(target, SC_CAMOUFLAGE, INVALID_TIMER);
status_change_end(target, SC_DEEPSLEEP, INVALID_TIMER);
if ((sce=sc->data[SC_ENDURE]) && !sce->val4) {
if ((sce=sc->data[SC_ENDURE]) && !sce->val4 && !sc->data[SC_CONCENTRATION]) {
/** [Skotlex]
* Endure count is only reduced by non-players on non-gvg maps.
* val4 signals infinite endure.
@ -6217,8 +6217,6 @@ static unsigned short status_calc_dmotion(struct block_list *bl, struct status_c
/// It has been confirmed on official servers that MvP mobs have no dmotion even without endure
if( sc->data[SC_ENDURE] || ( bl->type == BL_MOB && (((TBL_MOB*)bl)->status.mode&MD_BOSS) ) )
return 0;
if( sc->data[SC_CONCENTRATION] )
return 0;
if( sc->data[SC_RUN] || sc->data[SC_WUGDASH] )
return 0;
@ -7718,6 +7716,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
// Before overlapping fail, one must check for status cured.
switch (type) {
case SC_ENDURE:
if (val4)
status_change_end(bl, SC_CONCENTRATION, INVALID_TIMER);
break;
case SC_BLESSING:
// !TODO: Blessing and Agi up should do 1 damage against players on Undead Status, even on PvM
// !but cannot be plagiarized (this requires aegis investigation on packets and official behavior) [Brainstorm]
@ -8716,6 +8718,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
val2 = 5*val1; // Batk/Watk Increase
val3 = 10*val1; // Hit Increase
val4 = 5*val1; // Def reduction
sc_start(src, bl, SC_ENDURE, 100, 1, tick); // Level 1 Endure effect
break;
case SC_ANGELUS:
val2 = 5*val1; // def increase
@ -10430,6 +10433,9 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
}
break;
case SC_CONCENTRATION:
status_change_end(bl, SC_ENDURE, INVALID_TIMER);
break;
case SC_BERSERK:
case SC_SATURDAYNIGHTFEVER:
if(status->hp > 200 && sc && sc->data[SC__BLOODYLUST]) {