Parcourir la source

Merged mpeg's fix on ninja skills

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8012 54d463be-8e91-2dee-dedb-b68131a5f0ec
toms il y a 19 ans
Parent
commit
5e47973166
9 fichiers modifiés avec 35 ajouts et 22 suppressions
  1. 1 0
      Changelog-Trunk.txt
  2. 8 8
      db/skill_cast_db.txt
  3. 3 3
      db/skill_db.txt
  4. 2 2
      db/skill_require_db.txt
  5. 4 1
      src/map/battle.c
  6. 3 3
      src/map/clif.c
  7. 1 1
      src/map/clif.h
  8. 11 2
      src/map/skill.c
  9. 2 2
      src/map/unit.c

+ 1 - 0
Changelog-Trunk.txt

@@ -4,6 +4,7 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2006/07/31
+	* Merged mpeg's fix on ninja skills [Toms]
 	* Corrected a status_get_race call which should be status_get_race2 in misc
 	  attacks. [Skotlex]
 	* Moved the Devotion code to the top of the SC list in status_damage,

+ 8 - 8
db/skill_cast_db.txt

@@ -887,21 +887,21 @@
 526,0,5000,0,0,0
 //-- NJ_TATAMIGAESHI
 527,0,0,0,3000,3000
-//-- NJ_KASUMIKIRI
+//-- NJ_KASUMIKIRI // Delay unknown (if there is one)
 528,0,0,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0
-//-- NJ_SHADOWJUMP
+//-- NJ_SHADOWJUMP // Delay unknown (if there is one)
 529,0,0,0,0,0
-//-- NJ_KIRIKAGE
+//-- NJ_KIRIKAGE // Seems to have no delay (English Translation Project)
 530,0,0,0,0,0
-//-- NJ_UTSUSEMI
+//-- NJ_UTSUSEMI // Cast and Delay unknown
 531,0,0,0,20000:30000:40000:50000:60000,0
-//-- NJ_BUNSINJYUTSU
+//-- NJ_BUNSINJYUTSU // Cast and Delay unknown
 532,0,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0
 
 //-- NJ_KOUENKA
 534,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,0
 //-- NJ_KAENSIN
-535,6000:5500:5000:4500:4000:3500:3000:2500:2000:1500,0,0,20000,0,
+535,6000:5500:5000:4500:4000:3500:3000:2500:2000:1500,1000,0,20000,0,
 //-- NJ_BAKUENRYU
 536,3000,2000,0,0,0
 //-- NJ_HYOUSENSOU
@@ -909,7 +909,7 @@
 //-- NJ_SUITON
 538,3300:3200:3100:3000:2900:2800:2700:2600:2500:2400,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000
 //-- NJ_HYOUSYOURAKU
-539,3700:3400:3100:2800:2500,0,0,0,0 // cast and delay unknown, I put the same as Raigekisai (same type of attack)
+539,3700:3400:3100:2800:2500,0,0,0,0 // cast and delay unknown, I put the same as Raigekisai as temp value (same type of attack)
 //-- NJ_HUUJIN
 540,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0
 //-- NJ_RAIGEKISAI
@@ -918,7 +918,7 @@
 542,3000,2000,0,0,0 // cast and delay unknown. temp values (I put the same as bakuenryu)
 //-- NJ_NEN
 543,5000:4000:3000:2000:1000,0,0,30000:45000:60000:75000:90000,30000:45000:60000:75000:90000
-//-- NJ_ISSEN // cast and delay unknown. temp values (same as Extremity Fist)
+//-- NJ_ISSEN // cast and delay unknown. temp values (same as MO_EXTREMITYFIST)
 544,4000:3500:3000:2500:2000:3000:2500:2000:1500:1000,0,0,0,0
 //==========================================
 

+ 3 - 3
db/skill_db.txt

@@ -549,8 +549,8 @@
 525,9,8,1,-1,0,1,5,-1:-2:-3:-4:-5,yes,0,0,0,weapon,0	//NJ_HUUMA#NJ_HUUMA#
 526,9,6,1,0,0,0,10,1,no,0,0,0,misc,0	//NJ_ZENYNAGE#NJ_ZENYNAGE#
 527,0,6,4,3,0,0,5,1,no,0,0,0,weapon,3	//NJ_TATAMIGAESHI#NJ_TATAMIGAESHI#
-528,1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0	//NJ_KASUMIKIRI#NJ_KASUMIKIRI#
-529,5:6:7:8:9,6,2,0,1,0,5,1,no,0,0,0,none,0	//NJ_SHADOWJUMP#NJ_SHADOWJUMP#
+528,-1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0	//NJ_KASUMIKIRI#NJ_KASUMIKIRI#
+529,7:9:11:13:15,6,2,0,1,0,5,1,no,0,0,0,none,0	//NJ_SHADOWJUMP#NJ_SHADOWJUMP#
 530,-1,6,1,-1,0,0,5,1,no,0,0,0,weapon,0	//NJ_KIRIKAGE#NJ_KIRIKAGE#
 531,0,6,4,0,1,0,5,1,no,0,0,0,none,0	//NJ_UTSUSEMI#NJ_UTSUSEMI#
 532,0,6,4,0,1,0,10,1,no,0,0,0,none,0	//NJ_BUNSINJYUTSU#NJ_BUNSINJYUTSU#
@@ -561,7 +561,7 @@
 537,9,8,1,1,0,0,10,3:4:5:6:7:8:9:10:11:12,yes,0,0,0,magic,0	//NJ_HYOUSENSOU#NJ_HYOUSENSOU#
 538,9,6,2,0,1,0,10,1,yes,0,0,0,magic,0	//NJ_SUITON#NJ_SUITON#
 539,0,6,4,1,1,0,5,1,yes,0,0,0,magic,0	//NJ_HYOUSYOURAKU#NJ_HYOUSYOURAKU#
-540,9,8,1,4,0,0,10,1:2:2:3:3:4:4:5:5:6,yes,0,0,0,magic,0	//NJ_HUUJIN#NJ_HUUJIN#
+540,9,8,1,4,0,0,10,-1:-2:-2:-3:-3:-4:-4:-5:-5:-6,yes,0,0,0,magic,0	//NJ_HUUJIN#NJ_HUUJIN#
 541,9,6,4,4,1,0,5,1,yes,0,0,0,magic,0	//NJ_RAIGEKISAI#NJ_RAIGEKISAI#
 542,5:6:7:8:9,8,1,4,0,2,5,1,yes,0,0,0,magic,0	//NJ_KAMAITACHI#NJ_KAMAITACHI#
 543,0,6,4,0,1,0,5,1,no,0,0,0,none,0	//NJ_NEN#NJ_NEN#

+ 2 - 2
db/skill_require_db.txt

@@ -417,9 +417,9 @@
 524,0,0,30:25:20:15:10,0,0,0,99,7,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_KUNAI
 525,0,0,20:25:30:35:40,0,0,0,22,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_HUUMA
 526,0,0,50,0,0,500:1000:1500:2000:2500:3000:3500:4000:4500:5000,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_ZENYNAGE
-527,0,0,40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_TATAMIGAESHI
+527,0,0,15,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_TATAMIGAESHI
 528,0,0,10:12:14:16:18:20:22:24:26:28,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_KASUMIKIRI
-529,0,0,40,0,0,0,99,0,0,hiding,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_SHADOWJUMP
+529,0,0,10,0,0,0,99,0,0,hiding,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_SHADOWJUMP
 530,0,0,14:16:18:20:22,0,0,0,99,0,0,hiding,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_KIRIKAGE
 531,0,0,12:15:18:21:24,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_UTSUSEMI
 532,0,0,30:32:34:36:38:40:42:44:46:48,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_BUNSINJYUTSU

+ 4 - 1
src/map/battle.c

@@ -2206,7 +2206,7 @@ struct Damage battle_calc_magic_attack(
 //Adds an absolute value to damage. 100 = +100 damage
 #define MATK_ADD( a ) { ad.damage+= a; }
 
-		sc= status_get_sc(src);
+		sc= status_get_sc(target); // used for NJ_SUITON increasing NJ_HYOUSENSOU damages
 
 		switch (skill_num)
 		{	//Calc base damage according to skill
@@ -2322,6 +2322,9 @@ struct Damage battle_calc_magic_attack(
 					case NJ_KOUENKA:
 						skillratio -= 10;
 						break;
+					case NJ_HUUJIN:
+						skillratio += 50 + 50*skill_lv; // extrapolation from a vid (unsure)
+						break;
 					case NJ_BAKUENRYU:
 						skillratio += 150 + 150*skill_lv; // It has to be MATK +(150+150*SkillLV)% so 1000% at lvl 5, not 900%. Damage is not increased by hits.
 						break;

+ 3 - 3
src/map/clif.c

@@ -8753,7 +8753,7 @@ void clif_parse_MapMove(int fd, struct map_session_data *sd) {
  *
  *------------------------------------------
  */
-void clif_changed_dir(struct block_list *bl) {
+void clif_changed_dir(struct block_list *bl, int type) {
 	unsigned char buf[64];
 
 	WBUFW(buf,0) = 0x9c;
@@ -8761,7 +8761,7 @@ void clif_changed_dir(struct block_list *bl) {
 	WBUFW(buf,6) = bl->type==BL_PC?((TBL_PC*)bl)->head_dir:0;
 	WBUFB(buf,8) = unit_getdir(bl);
 
-	clif_send(buf, packet_len_table[0x9c], bl, AREA_WOS);
+	clif_send(buf, packet_len_table[0x9c], bl, type);
 	if (disguised(bl)) {
 		WBUFL(buf,2) = -bl->id;
 		WBUFW(buf,6) = 0;
@@ -8783,7 +8783,7 @@ void clif_parse_ChangeDir(int fd, struct map_session_data *sd) {
 	dir = RFIFOB(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[1]);
 	pc_setdir(sd, dir, headdir);
 
-	clif_changed_dir(&sd->bl);
+	clif_changed_dir(&sd->bl, AREA_WOS);
 	return;
 }
 

+ 1 - 1
src/map/clif.h

@@ -237,7 +237,7 @@ int clif_item_skill(struct map_session_data *sd,int skillid,int skilllv,const ch
 int clif_mvp_effect(struct map_session_data *sd);
 int clif_mvp_item(struct map_session_data *sd,int nameid);
 int clif_mvp_exp(struct map_session_data *sd,unsigned long exp);
-void clif_changed_dir(struct block_list *bl);
+void clif_changed_dir(struct block_list *bl, int area);
 
 // vending
 int clif_openvendingreq(struct map_session_data *sd,int num);

+ 11 - 2
src/map/skill.c

@@ -2734,7 +2734,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 			BF_WEAPON, src, src, skillid, skilllv, tick, flag, BCT_ENEMY);	
 		break;
 
-	case NJ_SHADOWJUMP:	//[blackhole89]
 	case TK_JUMPKICK:
 		if (skillid == TK_JUMPKICK)
 			skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
@@ -2766,7 +2765,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 				skill_attack(BF_WEAPON, src, src, bl, skillid, skilllv, tick, flag);
 				dir = dir < 4 ? dir+4 : dir-4; // change direction [Celest]
 				unit_setdir(bl,dir);
-				clif_changed_dir(bl);
+				//clif_changed_dir(bl); Already done by unit_setdir
 			}
 			else if (sd)
 				clif_skill_fail(sd,skillid,0,0);
@@ -6143,6 +6142,16 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid, int s
 			if (sd) skill_blockpc_start (sd, MO_EXTREMITYFIST, 2000);
 		}
 		break;
+	case NJ_SHADOWJUMP:
+	{
+		unit_movepos(src, x, y, 1, 0);
+		unit_setdir(src, (unit_getdir(src) + 4)%8);
+		clif_slide(src,x,y);
+
+		if (sc && sc->data[SC_HIDING].timer != -1)
+			status_change_end(src, SC_HIDING, -1);
+	}
+		break;
 	case AM_SPHEREMINE:
 	case AM_CANNIBALIZE:
 		if(sd) {

+ 2 - 2
src/map/unit.c

@@ -466,7 +466,7 @@ int unit_setdir(struct block_list *bl,unsigned char dir)
 	ud->dir = dir;
 	if (bl->type == BL_PC) 
 		((TBL_PC *)bl)->head_dir = dir;
-	clif_changed_dir(bl);
+	clif_changed_dir(bl, AREA);
 	return 0;
 }
 
@@ -1006,7 +1006,7 @@ int unit_skilluse_pos2( struct block_list *src, int skill_x, int skill_y, int sk
 	bl.m = src->m;
 	bl.x = skill_x;
 	bl.y = skill_y;
-	if(skill_num != TK_HIGHJUMP &&
+	if(skill_num != TK_HIGHJUMP && skill_num != NJ_SHADOWJUMP &&
 		!battle_check_range(src,&bl,skill_get_range2(src, skill_num,skill_lv)+1))
 		return 0;