diff --git a/db/const.txt b/db/const.txt index b0779d5a69..f6aa1e7328 100644 --- a/db/const.txt +++ b/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 diff --git a/db/pre-re/skill_cast_db.txt b/db/pre-re/skill_cast_db.txt index b8914b52e8..b2324acf63 100644 --- a/db/pre-re/skill_cast_db.txt +++ b/db/pre-re/skill_cast_db.txt @@ -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 diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt index cb0f500495..51146b81fa 100644 --- a/db/pre-re/skill_db.txt +++ b/db/pre-re/skill_db.txt @@ -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 diff --git a/db/re/skill_cast_db.txt b/db/re/skill_cast_db.txt index e74d5a9591..415faf0b3d 100644 --- a/db/re/skill_cast_db.txt +++ b/db/re/skill_cast_db.txt @@ -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 diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index b7ddabdd35..4326bfa12d 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -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 diff --git a/src/map/clif.c b/src/map/clif.c index c5901abbe1..85bb934c4d 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -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); diff --git a/src/map/skill.c b/src/map/skill.c index c5b4b5d6b5..d5f96f8a96 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -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; diff --git a/src/map/status.c b/src/map/status.c index 9ba248c3f5..6aa0987b4f 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -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]) {