Преглед изворни кода

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.

aleos89 пре 11 година
родитељ
комит
1f26499994
8 измењених фајлова са 34 додато и 31 уклоњено
  1. 9 9
      db/const.txt
  2. 3 3
      db/pre-re/skill_cast_db.txt
  3. 1 1
      db/pre-re/skill_db.txt
  4. 3 3
      db/re/skill_cast_db.txt
  5. 1 1
      db/re/skill_db.txt
  6. 1 2
      src/map/clif.c
  7. 7 9
      src/map/skill.c
  8. 9 3
      src/map/status.c

+ 9 - 9
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
 

+ 3 - 3
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

+ 1 - 1
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

+ 3 - 3
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

+ 1 - 1
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

+ 1 - 2
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);

+ 7 - 9
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) )
+		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));
-		else if( sd ) {	// Only shows effects on caster.
+		}
+		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;

+ 9 - 3
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]) {