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:
parent
51f26d43d2
commit
1f26499994
18
db/const.txt
18
db/const.txt
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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]) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user