Просмотр исходного кода

- Added NK value 0x80: ignore target's cards (0x8 will now only ignore attacker's cards).
- Corrected the NK values of skills (0x08 -> 0x80): Self Destruction, Smoking, Pressure, Fling, Zeny Nage, BioExplosion
- Soul Burn & Gravitation got NK 0x80 (previously hardcoded)
- Corrected Soul Breaker ignoring target's cards instead of the caster's.


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9967 54d463be-8e91-2dee-dedb-b68131a5f0ec

skotlex 18 лет назад
Родитель
Сommit
0c7ca5de82
5 измененных файлов с 36 добавлено и 23 удалено
  1. 4 0
      Changelog-Trunk.txt
  2. 3 0
      db/Changelog.txt
  3. 11 10
      db/skill_db.txt
  4. 16 12
      src/map/battle.c
  5. 2 1
      src/map/skill.h

+ 4 - 0
Changelog-Trunk.txt

@@ -4,6 +4,10 @@ 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.
 
 2007/03/06
+	* Added NK value 0x80: ignore target's cards (0x8 will now only ignore
+	  attacker's cards).
+	* Corrected Soul Breaker ignoring target's cards instead of the caster's.
+	  [Skotlex]
 	* Fixed an infinite loop if script name contains a single ':' [Toms]
 	* Simplified the Utsusemi/Bunsinjyutsu check to only block weapon skills
 	  that do not ignore offensive cards. [Skotlex]

+ 3 - 0
db/Changelog.txt

@@ -20,6 +20,9 @@
 
 ========================
 03/06
+	* Corrected the NK values of skills (0x08 -> 0x80): Self Destruction,
+	  Smoking, Pressure, Fling, Zeny Nage, BioExplosion
+	* Soul Burn & Gravitation got NK 0x80 (previously hardcoded) [Skotlex]
 	* Added various new headgears thanks to Argatlahm [Playtester]
 	- some headgears might not be fully official, feel free to report bugs if you find any
 	- also updated item_db.sql

+ 11 - 10
db/skill_db.txt

@@ -6,14 +6,15 @@
 // 04 inf (0- passive, 1- enemy, 2- place, 4- self, 16- friend, 32- trap)
 // 05 pl attributes (0- neutral, 1- water, 2- earth, 3- fire, 4- wind,
 //    5- poison, 6- saint, 7- darkness, 8- sense, 9- immortality)
-// 06 nk (
+// 06 nk (skill damage properties):
 //    0x01 - No damage skill
 //    0x02 - Has splash area
 //    0x04 - Damage should be split among targets
-//    0x08 - Skill ignores caster's % damage cards
+//    0x08 - Skill ignores caster's % damage cards (misc type always ignores)
 //    0x10 - Skill ignores elemental adjustments
 //    0x20 - Skill ignores target's defense (misc type always ignores)
 //    0x40 - Skill ignores target's flee (magic type always ignores)
+//    0x80 - Skill ignores target's def cards
 // 07 splash/effect range (-1 for screen-wide)
 // 08 MaxLv
 // 09 Number of hits (when positive, damage is increased by hits, 
@@ -210,7 +211,7 @@
 170,-1,6,1,-1,0x20,0,10,1,no,0,0x2,0,weapon,0	//NPC_CRITICALSLASH#Defense disregard attack#
 171,-1,8,1,-1,0,0,10,2:3:4:5:6:7:8:9:10:11,no,0,0x2,0,weapon,0	//NPC_COMBOATTACK#Multi-stage Attack#
 172,-1,6,1,-1,0x40,0,10,1,no,0,0x2,0,weapon,0	//NPC_GUIDEATTACK#On-target Impact Attack#
-173,5,6,4,3,0x5A,5,10,1,no,0,0x2,0,misc,3	//NPC_SELFDESTRUCTION#Suicide bombing#
+173,5,6,4,3,0xD2,5,10,1,no,0,0x2,0,misc,3	//NPC_SELFDESTRUCTION#Suicide bombing#
 174,-1,6,1,-1,0x2,3,1,1,no,0,0x2,0,weapon,0	//NPC_SPLASHATTACK#Splash attack#
 175,0,0,4,0,0x41,0,10,1,no,0,0x2,0,misc,0	//NPC_SUICIDE#Suicide#
 176,-1,6,1,-1,0,0,5,1,no,0,0x2,0,weapon,0	//NPC_POISON#Poison Attack#
@@ -232,7 +233,7 @@
 192,-1,6,1,-1,0,0,10,1,no,0,0x2,0,weapon,0	//NPC_MAGICALATTACK#Demon Shock Attack#
 193,0,0,4,0,0x1,0,10,1,no,0,0x2,0,none,0	//NPC_METAMORPHOSIS#Metamorphosis#
 194,0,0,4,0,0x1,0,10,1,no,0,0x2,0,none,0	//NPC_PROVOCATION#Provocation#
-195,0,6,4,0,0x58,0,10,1,no,0,0x2,0,misc,0	//NPC_SMOKING#Smoking#
+195,0,6,4,0,0xD0,0,10,1,no,0,0x2,0,misc,0	//NPC_SMOKING#Smoking#
 196,0,0,4,0,0x1,0,10,1,no,0,0x2,0,magic,0	//NPC_SUMMONSLAVE#Follower Summons#
 197,0,0,4,0,0x1,0,10,1,no,0,0x2,0,none,0	//NPC_EMOTION#Emotion#
 198,0,0,4,0,0x1,0,10,1,no,0,0x2,0,magic,0	//NPC_TRANSFORMATION#Transformation#
@@ -404,7 +405,7 @@
 364,0,0,0,0,0,0,10,1,no,0,0,0,magic,0	//HW_SOULDRAIN#Soul Drain#
 365,9,8,1,-1,0,0,1,1,yes,0,0,0,weapon,0	//HW_MAGICCRASHER#Stave Crasher#
 366,0,6,4,0,0x1,0,10,1,no,0,0,0,magic,0	//HW_MAGICPOWER#Mystical Amplification#
-367,9,8,1,0,0x58,0,5,1,no,0,0,0,misc,0	//PA_PRESSURE#Gloria Domini#
+367,9,8,1,0,0xD0,0,5,1,no,0,0,0,misc,0	//PA_PRESSURE#Gloria Domini#
 368,0,6,4,0,0x61,0,5,1,yes,0,0,0,weapon,0	//PA_SACRIFICE# Martyr's Reckoning#
 369,0,6,4,0,0x41,0,10,1,yes,0,0,0,misc,0	//PA_GOSPEL#Battle Chant#
 370,-2,6,1,-1,0,0,5,1,yes,0,0,0,weapon,3	//CH_PALMSTRIKE#Raging Palm Strike#
@@ -412,7 +413,7 @@
 372,-2,8,4,-1,0,0,10,-1:-1:-2:-2:-3:-3:-4:-4:-5:-5,no,0,0x200,0,weapon,0	//CH_CHAINCRUSH#Chain Crush Combo#
 373,0,6,4,0,0x1,0,5,1,no,0,0,0,magic,0	//PF_HPCONVERSION#Health Conversion#
 374,9,6,16,0,0x1,0,1,1,yes,0,0x1E00,0,none,0	//PF_SOULCHANGE#Soul Exhale#
-375,9,6,1,0,0x18,0,5,1,yes,0,0,0,magic,0	//PF_SOULBURN#Soul Siphon#
+375,9,6,1,0,0x98,0,5,1,yes,0,0,0,magic,0	//PF_SOULBURN#Soul Siphon#
 376,0,0,0,0,0x1,0,5,1,no,0,0,0,weapon,0	//ASC_KATAR#Advanced Katar Mastery#
 //377,0,0,4,0,0x1,0,10,1,no,0,0,0,misc,0	//ASC_HALLUCINATION#Hallucination Walk#
 378,0,6,4,5,0x1,0,5,1,no,0,0,0,weapon,0	//ASC_EDP#Deadly Poison Enchantment#
@@ -521,7 +522,7 @@
 481,0,0,0,0,0,0,5,0,no,0,0,0,none,0	//HP_MANARECHARGE#Mana Recharge#
 482,0,6,4,0,0x1,0,5,1,no,0,0,0,magic,0	//PF_DOUBLECASTING#Double Casting#
 483,9,6,2,0,0x1,1,1,1,no,0,0,0,none,0	//HW_GANBANTEIN#Ganbantein#
-484,9,6,2,2,0x31,0,5,1,yes,0,0,0,magic,0	//HW_GRAVITATION#Gravity Field#
+484,9,6,2,2,0xB1,0,5,1,yes,0,0,0,magic,0	//HW_GRAVITATION#Gravity Field#
 485,-2,6,1,-1,0x8,0,10,1,no,0,0,0,weapon,0	//WS_CARTTERMINATION#Cart Termination#
 486,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0	//WS_OVERTHRUSTMAX#Maximum Power Thrust#
 487,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0	//CG_LONGINGFREEDOM#Longing for Freedom#
@@ -538,7 +539,7 @@
 498,0,6,4,0,0x1,0,1,0,no,0,0x8,0,none,0	//AM_TWILIGHT3#Twilight Alchemy 3#
 499,-9,8,4,-1,0,0,1,2,no,0,0x208,0,weapon,0	//HT_POWER#Beast Strafing#
 500,0,6,4,0,0x40,0,5,1,no,0,0,0,misc,0	//GS_GLITTERING#Flip the Coin#
-501,9,6,1,-1,0x58,0,1,1,no,0,0,0,misc,0	//GS_FLING#Fling#
+501,9,6,1,-1,0xD0,0,1,1,no,0,0,0,misc,0	//GS_FLING#Fling#
 502,-9,8,1,-1,0,0,1,3,no,0,0,0,weapon,0	//GS_TRIPLEACTION#Triple Action#
 503,-9,6,1,-1,0x8,0,1,1,no,0,0,0,weapon,0	//GS_BULLSEYE#Bulls Eye#
 504,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0	//GS_MADNESSCANCEL#Madness Canceler#
@@ -563,7 +564,7 @@
 523,9,6,1,-1,0x40,0,10,1,no,0,0,0,weapon,0	//NJ_SYURIKEN#NJ_SYURIKEN#
 524,9,8,1,-1,0x40,0,5,3,no,0,0,0,weapon,0	//NJ_KUNAI#NJ_KUNAI#
 525,9,8,1,-1,0x6,1,5,-3:-3:-4:-4:-5,yes,0,0,0,weapon,0	//NJ_HUUMA#NJ_HUUMA#
-526,9,6,1,0,0x58,0,10,1,no,0,0,0,misc,0	//NJ_ZENYNAGE#NJ_ZENYNAGE#
+526,9,6,1,0,0xD0,0,10,1,no,0,0,0,misc,0	//NJ_ZENYNAGE#NJ_ZENYNAGE#
 527,0,6,4,-1,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,7:9:11:13:15,6,2,0,0x1,0,5,1,no,0,0,0,none,0	//NJ_SHADOWJUMP#NJ_SHADOWJUMP#
@@ -618,7 +619,7 @@
 8013,9,6,1,0,0,0,5,1:2:3:4:5,no,0,0,0,magic,0	//HVAN_CAPRICE
 8014,0,6,4,0,0x1,0,5,0,no,0,0,0,none,0	//HVAN_CHAOTIC
 8015,0,0,0,0,0x1,0,5,0,no,0,0,0,none,0	//HVAN_INSTRUCT
-8016,4,6,4,-1,0x5A,4,3,1,no,0,0,0,misc,0	//HVAN_EXPLOSION
+8016,4,6,4,-1,0xD2,4,3,1,no,0,0,0,misc,0	//HVAN_EXPLOSION
 
 10000,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0	//GD_APPROVAL#Approval#
 10001,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0	//GD_KAFRACONTRACT#Kafra Contract#

+ 16 - 12
src/map/battle.c

@@ -307,7 +307,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
 		}
 	
 		if(sc->data[SC_AUTOGUARD].timer != -1 && flag&BF_WEAPON &&
-			!(skill_get_nk(skill_num)&NK_NO_CARDFIX) &&
+			!(skill_get_nk(skill_num)&NK_NO_CARDFIX_ATK) &&
 			rand()%100 < sc->data[SC_AUTOGUARD].val2) {
 			int delay;
 			clif_skill_nodamage(bl,bl,CR_AUTOGUARD,sc->data[SC_AUTOGUARD].val1,1);
@@ -363,7 +363,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
 
 		if ((sc->data[SC_UTSUSEMI].timer != -1 || sc->data[SC_BUNSINJYUTSU].timer != -1)
 		&& 
-			flag&BF_WEAPON && !(skill_get_nk(skill_num)&NK_NO_CARDFIX))
+			flag&BF_WEAPON && !(skill_get_nk(skill_num)&NK_NO_CARDFIX_ATK))
 		{
 			if (sc->data[SC_UTSUSEMI].timer != -1) {
 				clif_specialeffect(bl, 462, AREA);
@@ -1845,7 +1845,7 @@ static struct Damage battle_calc_weapon_attack(
 		}
 
 		//Card Fix, sd side
-		if ((wd.damage || wd.damage2) && !(nk&NK_NO_CARDFIX))
+		if ((wd.damage || wd.damage2) && !(nk&NK_NO_CARDFIX_ATK))
 		{
 			short cardfix = 1000, cardfix_ = 1000;
 			short t_race2 = status_get_race2(target);	
@@ -1918,17 +1918,21 @@ static struct Damage battle_calc_weapon_attack(
 		}
 	} //if (sd)
 
-	//Card Fix, tsd side - Cards always apply on the target. [Skotlex]
-	if (tsd) {
+	//Card Fix, tsd sid
+	if (tsd && !(nk&NK_NO_CARDFIX_DEF))
+	{
 		short s_race2,s_class;
 		short cardfix=1000;
 
 		s_race2 = status_get_race2(src);
 		s_class = status_get_class(src);
 
-		cardfix=cardfix*(100-tsd->subele[s_ele])/100;
-		if (flag.lh && s_ele_ != s_ele)
-			cardfix=cardfix*(100-tsd->subele[s_ele_])/100;
+		if (!(nk&NK_NO_ELEFIX))
+		{
+			cardfix=cardfix*(100-tsd->subele[s_ele])/100;
+			if (flag.lh && s_ele_ != s_ele)
+				cardfix=cardfix*(100-tsd->subele[s_ele_])/100;
+		}
 		cardfix=cardfix*(100-tsd->subsize[sstatus->size])/100;
  		cardfix=cardfix*(100-tsd->subrace2[s_race2])/100;
 		cardfix=cardfix*(100-tsd->subrace[sstatus->race])/100;
@@ -2364,7 +2368,7 @@ struct Damage battle_calc_magic_attack(
 		if (!(nk&NK_NO_ELEFIX))
 			ad.damage=battle_attr_fix(src, target, ad.damage, s_ele, tstatus->def_ele, tstatus->ele_lv);
 
-		if (sd && !(nk&NK_NO_CARDFIX)) {
+		if (sd && !(nk&NK_NO_CARDFIX_ATK)) {
 			short t_class = status_get_class(target);
 			short cardfix=1000;
 
@@ -2383,8 +2387,8 @@ struct Damage battle_calc_magic_attack(
 				MATK_RATE(cardfix/10);
 		}
 
-		if (tsd && skill_num != HW_GRAVITATION && skill_num != PF_SOULBURN)
-	  	{ //Card fixes always apply on the target side. [Skotlex]
+		if (tsd && !(nk&NK_NO_CARDFIX_DEF))
+	  	{	//Target cards.
 			short s_race2=status_get_race2(src);
 			short s_class= status_get_class(src);
 			short cardfix=1000;
@@ -2605,7 +2609,7 @@ struct Damage  battle_calc_misc_attack(
 		}
 	}
 
-	if(md.damage && tsd && !(nk&NK_NO_CARDFIX)){
+	if(md.damage && tsd && !(nk&NK_NO_CARDFIX_DEF)){
 		int cardfix = 10000;
 		int race2 = status_get_race2(src);
 		if (!(nk&NK_NO_ELEFIX))

+ 2 - 1
src/map/skill.h

@@ -26,10 +26,11 @@
 #define NK_NO_DAMAGE 0x01
 #define NK_SPLASH (0x02|0x04) // 0x4 = splash & split
 #define NK_SPLASHSPLIT 0x04
-#define NK_NO_CARDFIX 0x08
+#define NK_NO_CARDFIX_ATK 0x08
 #define NK_NO_ELEFIX 0x10
 #define NK_IGNORE_DEF 0x20
 #define NK_IGNORE_FLEE 0x40
+#define NK_NO_CARDFIX_DEF 0x08
 
 //A skill with 3 would be no damage + splash: area of effect.
 //Constants to identify a skill's inf2 value.