Ver Fonte

more skill fix.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@5524 54d463be-8e91-2dee-dedb-b68131a5f0ec
Vicious há 19 anos atrás
pai
commit
a3d320f902
5 ficheiros alterados com 92 adições e 21 exclusões
  1. 5 5
      db/skill_db.txt
  2. 3 0
      db/skill_unit_db.txt
  3. 25 0
      src/map/battle.c
  4. 56 16
      src/map/skill.c
  5. 3 0
      src/map/skill.h

+ 5 - 5
db/skill_db.txt

@@ -522,9 +522,9 @@
 501,-5,6,1,-1,0,0,1,1,no,0,0,0,weapon,0	//GS_FLING#Fling#
 502,-5,8,1,-1,0,0,1,3,no,0,0,0,weapon,0	//GS_TRIPLEACTION#Triple Action#
 503,-5,6,1,-1,0,0,1,1,no,0,0,0,weapon,0	//GS_BULLSEYE#Bulls Eye#
-504,-5,6,1,-1,0,0,1,1,no,0,0,0,weapon,0	//GS_MADNESSCANCEL#Madness Canceler#
-505,-5,6,1,-1,0,0,1,1,no,0,0,0,weapon,0	//GS_ADJUSTMENT#AdJustment#
-506,-5,6,1,-1,0,0,1,1,no,0,0,0,weapon,0	//GS_INCREASING#Increasing Accuracy#
+504,0,6,4,0,1,0,5,1,no,0,0,0,weapon,0	//GS_MADNESSCANCEL#Madness Canceler#
+505,0,6,4,0,1,0,5,1,no,0,0,0,weapon,0	//GS_ADJUSTMENT#AdJustment#
+506,0,6,4,0,1,0,5,1,no,0,0,0,weapon,0	//GS_INCREASING#Increasing Accuracy#
 507,-5,6,1,-1,0,0,1,1,no,0,0,0,weapon,0	//GS_MAGICALBULLET#Magical Bullet#
 508,-5,6,1,-1,0,0,1,1,no,0,0,0,weapon,0	//GS_CRACKER#Cracker#
 509,0,0,0,0,0,0,10,0,no,0,0,0,none,0	//GS_SINGLEACTION#Single Action#
@@ -535,7 +535,7 @@
 514,-5,6,1,-1,0,0,10,1,no,0,0,0,weapon,0	//GS_PIERCINGSHOT#Piercing Shot#
 515,-5,8,1,-1,0,0,10,5,no,0,0,0,weapon,0	//GS_RAPIDSHOWER#Rapid Shower#
 516,-5,6,1,-1,0,0,10,1,no,0,0,0,weapon,0	//GS_DESPERADO#Desperado#
-517,-5,6,1,-1,0,0,10,1,no,0,0,0,weapon,0	//GS_GATLINGFEVER#Gatling Fever#
+517,0,6,4,0,1,0,5,1,no,0,0,0,weapon,0	//GS_GATLINGFEVER#Gatling Fever#
 518,-5,6,1,-1,0,0,10,1,no,0,0,0,weapon,0	//GS_DUST#Dust#
 519,-5,6,1,-1,0,0,5,1,no,0,0,0,weapon,0	//GS_FULLBUSTER#Full Buster#
 520,-5,6,1,-1,0,0,10,1,no,0,0,0,weapon,0	//GS_SPREADATTACK#Spread Attack#
@@ -544,7 +544,7 @@
 523,9,6,1,-1,0,0,10,1,no,0,0,0,weapon,0	//NJ_SYURIKEN#NJ_SYURIKEN#
 524,9,8,1,-1,0,0,5,3,no,0,0,0,weapon,0	//NJ_KUNAI#NJ_KUNAI#
 525,9,8,1,-1,2,2,5,1:2:3:4:5,no,0,0,0,weapon,0	//NJ_HUUMA#NJ_HUUMA#
-526,9,6,1,0,0,0,10,1,no,0,0,0,weapon,0	//NJ_ZENYNAGE#NJ_ZENYNAGE#
+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,0	//NJ_TATAMIGAESHI#NJ_TATAMIGAESHI#
 528,1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0	//NJ_KASUMIKIRI#NJ_KASUMIKIRI#
 529,1,6,4,0,1,0,5,1,no,0,0,0,none,0	//NJ_SHADOWJUMP#NJ_SHADOWJUMP#

+ 3 - 0
db/skill_unit_db.txt

@@ -80,3 +80,6 @@
 405,0xb7,    ,  0, 1,1000,enemy, 0x000	//PF_SPIDERWEB#ƒXƒpƒCƒ_�[ƒEƒFƒbƒu
 484,0xb8,    ,  2, 0,1000,enemy, 0x808	//HW_GRAVITATION
 488,0xb9,    ,  3, 0,  -1,all,   0x000	//CG_HERMODE
+535,0xba,    ,  2, 0,1000,enemy, 0x008	//NJ_KAENSIN#NJ_KAENSIN#
+539,0x86,    ,  3, 0,1000,enemy, 0x008	//NJ_HYOUSYOURAKU#NJ_HYOUSYOURAKU#
+541,0x86,    ,  2:2:3:3:4, 0,1000,enemy, 0x008	//NJ_RAIGEKISAI#NJ_RAIGEKISAI#

+ 25 - 0
src/map/battle.c

@@ -911,6 +911,16 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int
 			}
 			break;
 		}
+		case 0x11: // Place holder for guns
+			break;
+		case 0x12: // place holder for shrikens
+		{
+			if((skill = pc_checkskill(sd,NJ_TOBIDOUGU)) > 0) {
+				//Advanced Katar Research by zanetheinsane
+				damage += (skill * 3);
+			}
+			break;
+		}
 	}
 	return (damage);
 }
@@ -2234,12 +2244,21 @@ static struct Damage battle_calc_weapon_attack(
 	{	//Check for double attack.
 		if(( (skill_lv = 5*pc_checkskill(sd,TF_DOUBLE)) > 0 && sd->weapontype1 == 0x01) ||
 			sd->double_rate > 0) //Success chance is not added, the higher one is used? [Skotlex]
+		{
 			if (rand()%100 < (skill_lv>sd->double_rate?skill_lv:sd->double_rate))
 			{
 				wd.damage *=2;
 				wd.div_=skill_get_num(TF_DOUBLE,skill_lv?skill_lv:1);
 				wd.type = 0x08;
 			}
+		} else if (( (skill_lv = 5*pc_checkskill(sd,GS_CHAINACTION)) > 0 && sd->weapontype1 == 0x01) ||
+			sd->double_rate > 0) // Copied double attack
+			if (rand()%100 < (skill_lv>sd->double_rate?skill_lv:sd->double_rate))
+			{
+				wd.damage *=2;
+				wd.div_=skill_get_num(GS_CHAINACTION,skill_lv?skill_lv:1);
+				wd.type = 0x08;
+			}
 	}
 
 	if(!flag.rh || wd.damage<1)
@@ -2909,6 +2928,12 @@ struct Damage  battle_calc_misc_attack(
 		if (tsd) damage/=2;
 		aflag = (aflag&~BF_RANGEMASK)|BF_LONG;
 		break;
+	case NJ_ZENYNAGE:
+		damage=1000*skill_lv;
+		if(skill_lv == 0) damage -= 1;
+		if(map_flag_vs(bl->m) || is_boss(bl))
+				damage=damage/2; //temp value
+		break;
 	}
 
 	if(damagefix){

+ 56 - 16
src/map/skill.c

@@ -1246,7 +1246,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
 			sc_start(bl,SC_COMA,0.1,skilllv,skill_get_time(skillid,skilllv));
 		break;
 	case GS_CRACKER:
-		sc_start(bl,SC_STUN,10*skilllv,skilllv,skill_get_time(skillid,skilllv)); //Temp stun rate
+		sc_start(bl,SC_STUN,(100 - 10*distance_bl(&sd->bl, bl)),skilllv,skill_get_time(skillid,skilllv)); //Temp stun rate
 		break;
 	case GS_PIERCINGSHOT:
 		sc_start(bl,SC_BLEEDING,(skilllv*3),skilllv,skill_get_time(skillid,skilllv));
@@ -1891,6 +1891,7 @@ int skill_attack( int attack_type, struct block_list* src, struct block_list *ds
 	case KN_AUTOCOUNTER: //Skills that need be passed as a normal attack for the client to display correctly.
 	case SN_SHARPSHOOTING:
 	case TF_DOUBLE:
+	case GS_CHAINACTION:
 		clif_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,dmg.type,dmg.damage2);
 		break;
 	default:
@@ -3093,21 +3094,34 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s
 		break;
 
 	//Until they're at right position - gs_damage- [Vicious]
-	case GS_BULLSEYE:
+	case GS_TRIPLEACTION:
 	case GS_CRACKER:
 	case GS_TRACKING:
 	case GS_PIERCINGSHOT:
 	case GS_RAPIDSHOWER:
 	case GS_DUST:
+	case GS_FULLBUSTER:
 	case GS_SPREADATTACK:
 	case NJ_SYURIKEN:
 	case NJ_KUNAI:
 	case NJ_HUUMA:
 		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
 		break;
+	case GS_BULLSEYE:
+		//race check
+				skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+		break;
 	case NJ_ZENYNAGE:
 		skill_attack(BF_MISC,src,src,bl,skillid,skilllv,tick,flag);
 		break;
+	case NJ_KASUMIKIRI:
+		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+		sc_start(bl,SC_HIDING,100,skilllv,skill_get_time(skillid,skilllv));
+		break;
+	case NJ_KIRIKAGE:
+		status_change_end(src, SC_HIDING, -1);	// ƒnƒCƒfƒBƒ“ƒO‰ð?œ
+		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+		break;
 	case NJ_KOUENKA:
 	case NJ_BAKUENRYU:
 	case NJ_HYOUSENSOU:
@@ -3118,6 +3132,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s
 		break;
 	//Not implemented yet [Vicious]
 	case GS_FLING:
+	//case GS_TRIPLEACTION:
 	//case GS_BULLSEYE:
 	case GS_MAGICALBULLET:
 	//case GS_CRACKER:
@@ -3127,6 +3142,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s
 	//case GS_RAPIDSHOWER:
 	case GS_DESPERADO:
 	//case GS_DUST:
+	//case GS_FULLBUSTER:
 	//case GS_SPREADATTACK:
 	case GS_GROUNDDRIFT:
 	
@@ -3135,9 +3151,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s
 	//case NJ_HUUMA:
 	//case NJ_ZENYNAGE:
 	case NJ_TATAMIGAESHI:
-	case NJ_KIRIKAGE:
-		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-		break;
+	//case NJ_KASUMIKIRI:
+	//case NJ_KIRIKAGE:
 	//case NJ_KOUENKA:
 	case NJ_KAENSIN:
 	//case NJ_BAKUENRYU:
@@ -3255,6 +3270,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 		case NPC_GRANDDARKNESS:
 			//These two are actually ground placed.
 			return skill_castend_pos2(src,src->x,src->y,skillid,skilllv,tick,0);
+		//Until they're at right position - gs_ground- [Vicious]
+		case NJ_KAENSIN:
+		case NJ_HYOUSYOURAKU:
+		case NJ_RAIGEKISAI:
+			return skill_castend_pos2(src,src->x,src->y,skillid,skilllv,tick,0);
 	}
 	tsc = status_get_sc(bl);
 
@@ -5665,7 +5685,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 	case GS_GLITTERING:
 	if(sd) {
 			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			if(rand()%100 < 50+10*skilllv )
+			if(rand()%100 < (50+10*skilllv) )
 				pc_addspiritball(sd,skill_get_time(skillid,skilllv),skilllv);
 		}
 		break;
@@ -6227,6 +6247,13 @@ int skill_castend_pos2( struct block_list *src, int x,int y,int skillid,int skil
 			}
 		}
 		break;
+	
+	//Until they're at right position - gs_unit- [Vicious]
+	case NJ_KAENSIN:
+	case NJ_HYOUSYOURAKU:
+	case NJ_RAIGEKISAI:
+		skill_unitsetting(src,skillid,skilllv,x,y,0);
+		break;
 	}
 
 	if (sc && sc->data[SC_MAGICPOWER].timer != -1)
@@ -8135,7 +8162,7 @@ int skill_check_condition(struct map_session_data *sd,int type)
 			return 0;
 		}
 		break;
-		
+
 	//Until they're at right position - gs_skillcheck- [Vicious]
 	case GS_GLITTERING:
 		if(sd->spiritball >= 10) {
@@ -8153,12 +8180,20 @@ int skill_check_condition(struct map_session_data *sd,int type)
 		}
 		if (skill != GS_MAGICALBULLET)
 			arrow_flag = 1;
+		if(sd->equip_index[10] < 0) {
+			clif_arrow_fail(sd,0);
+			return 0;
+		}
 		break;
 	case GS_BULLSEYE:
 		if(sd->spiritball < 5) {
 			clif_skill_fail(sd,skill,0,0);
 			return 0;
 		}
+		if(sd->equip_index[10] < 0) {
+			clif_arrow_fail(sd,0);
+			return 0;
+		}
 		break;
 	case GS_MADNESSCANCEL:
 		if(sd->spiritball < 4) {
@@ -8179,12 +8214,25 @@ int skill_check_condition(struct map_session_data *sd,int type)
 	case GS_RAPIDSHOWER:
 	case GS_DESPERADO:
 	case GS_DUST:
+	case GS_FULLBUSTER:
 	case GS_SPREADATTACK:
 	case GS_GROUNDDRIFT:
 	case NJ_SYURIKEN:
 	case NJ_KUNAI:
 	case NJ_HUUMA:
 		arrow_flag = 1;
+		if(sd->equip_index[10] < 0) {
+			clif_arrow_fail(sd,0);
+			return 0;
+		}
+		break;
+	case NJ_KAENSIN:
+	case NJ_BAKUENRYU:
+	case NJ_SUITON:
+	case NJ_HYOUSYOURAKU:
+	case NJ_RAIGEKISAI:
+	case NJ_KAMAITACHI:
+		//delitem_flag = 0; <- don't need?
 		break;
 
 	//Not implemented yet [Vicious]
@@ -8193,15 +8241,7 @@ int skill_check_condition(struct map_session_data *sd,int type)
 	case NJ_KIRIKAGE:
 	case NJ_UTSUSEMI:
 	case NJ_BUNSINJYUTSU:
-	case NJ_KOUENKA:
-	case NJ_KAENSIN:
-	case NJ_BAKUENRYU:
-	case NJ_HYOUSENSOU:
-	case NJ_SUITON:
-	case NJ_HYOUSYOURAKU:
-	case NJ_HUUJIN:
-	case NJ_RAIGEKISAI:
-	case NJ_KAMAITACHI:
+	
 	case NJ_NEN:
 	case NJ_ISSEN:
 		break;

+ 3 - 0
src/map/skill.h

@@ -926,6 +926,9 @@ enum {
 	UNT_SPIDERWEB,
 	UNT_GRAVITATION,
 	UNT_HERMODE,
+
+	UNT_KAENSIN,
+	
 };
 
 #endif