Fixed SC_CRYSTALIZE where it stacks with other opt and ignore SC_WARMER.
Fixed weapon check in dual wielding where it doesn't function properly specially in checking with the dual-wield constants. Added some Kagerou/Oboro skills. (KO_KAIHOU,KO_ZENKAI,KO_GENWAKU,KO_IZAYOI) git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16539 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
		
							parent
							
								
									a8793a1637
								
							
						
					
					
						commit
						a6a61dba4d
					
				| @ -1673,6 +1673,14 @@ | |||||||
| 3017,500,0,0,300000,0,0,0 | 3017,500,0,0,300000,0,0,0 | ||||||
| //-- KO_DOHU_KOUKAI | //-- KO_DOHU_KOUKAI | ||||||
| 3018,500,0,0,300000,0,0,0 | 3018,500,0,0,300000,0,0,0 | ||||||
|  | //-- KO_KAIHOU | ||||||
|  | 3019,1000,0,0,0,0,0,0 | ||||||
|  | //-- KO_ZENKAI | ||||||
|  | 3020,1000,0,0,10000,10000,0,0 | ||||||
|  | //-- KO_GENWAKU | ||||||
|  | 3021,500,0,0,5000,0,0,0 | ||||||
|  | //-- KO_IZAYOI | ||||||
|  | 3022,0,0,0,30000:45000:60000:75000:90000,0,60000,0 | ||||||
| //========================================== | //========================================== | ||||||
| 
 | 
 | ||||||
| //===== Homunculus Skills ================== | //===== Homunculus Skills ================== | ||||||
|  | |||||||
| @ -1027,6 +1027,10 @@ | |||||||
| 3016,0,6,4,1,0x1,0,1,1,no,0,0,0,none,0,		KO_HYOUHU_HUBUKI,Hyouhu Hubuki | 3016,0,6,4,1,0x1,0,1,1,no,0,0,0,none,0,		KO_HYOUHU_HUBUKI,Hyouhu Hubuki | ||||||
| 3017,0,6,4,4,0x1,0,1,1,no,0,0,0,none,0,		KO_KAZEHU_SEIRAN,Kazehu Seiran | 3017,0,6,4,4,0x1,0,1,1,no,0,0,0,none,0,		KO_KAZEHU_SEIRAN,Kazehu Seiran | ||||||
| 3018,0,6,4,2,0x1,0,1,1,no,0,0,0,none,0,		KO_DOHU_KOUKAI,Dohu Koukai	 | 3018,0,6,4,2,0x1,0,1,1,no,0,0,0,none,0,		KO_DOHU_KOUKAI,Dohu Koukai	 | ||||||
|  | 3019,11,6,1,0,0,0,5,0,no,0,0,0,weapon,0,	KO_KAIHOU,Technique Kaihou | ||||||
|  | 3020,7,6,2,0,0,0,1,3,yes,0,0,0,magic,0,		KO_ZENKAI,Zenkai | ||||||
|  | 3021,5:6:7:8:9,6,16,0,0x1,0,5,1,no,0,0,0,none,0,	KO_GENWAKU,Genwaku | ||||||
|  | 3022,0,6,4,0,0x1,0,5,0,no,0,0,0,none,0,		KO_IZAYOI,Izayoi | ||||||
| 
 | 
 | ||||||
| 8001,9,6,4,0,0x1,0,5,1,no,0,0,0,magic,0,	HLIF_HEAL,Healing Touch | 8001,9,6,4,0,0x1,0,5,1,no,0,0,0,magic,0,	HLIF_HEAL,Healing Touch | ||||||
| 8002,0,6,4,0,0x3,-1,5,1,no,0,0,0,none,0,	HLIF_AVOID,Avoid | 8002,0,6,4,0,0x3,-1,5,1,no,0,0,0,none,0,	HLIF_AVOID,Avoid | ||||||
|  | |||||||
| @ -788,7 +788,7 @@ | |||||||
| //**** | //**** | ||||||
| // Kagerou/Oboro | // Kagerou/Oboro | ||||||
| 3001,0,0,10,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	//KO_YAMIKUMO#Yamikumo# | 3001,0,0,10,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	//KO_YAMIKUMO#Yamikumo# | ||||||
| 3004,0,0,10:12:14:16:18,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	//KO_JYUMONJIKIRI#Cross Strike# | 3004,0,0,10:12:14:16:18,0,0,0,25:26:28,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_JYUMONJIKIRI#Cross Strike# | ||||||
| 3005,0,0,12:16:20:24: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	//KO_SETSUDAN#Soul Sever# | 3005,0,0,12:16:20:24: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	//KO_SETSUDAN#Soul Sever# | ||||||
| 3006,0,0,5:6:7:8:9,0,0,0,99,0,0,none,0,13294,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_BAKURETSU#Bakuretsu Kunai# | 3006,0,0,5:6:7:8:9,0,0,0,99,0,0,none,0,13294,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_BAKURETSU#Bakuretsu Kunai# | ||||||
| 3007,0,0,8:9:10:11:12,0,0,0,99,7,8,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_HAPPOKUNAI#Happo Kunai# | 3007,0,0,8:9:10:11:12,0,0,0,99,7,8,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_HAPPOKUNAI#Happo Kunai# | ||||||
| @ -803,6 +803,10 @@ | |||||||
| 3016,0,0,20,0,0,0,99,0,0,none,0,6513,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_HYOUHU_HUBUKI#Hyouhu Hubuki# | 3016,0,0,20,0,0,0,99,0,0,none,0,6513,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_HYOUHU_HUBUKI#Hyouhu Hubuki# | ||||||
| 3017,0,0,20,0,0,0,99,0,0,none,0,6514,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_KAZEHU_SEIRAN#Kazehu Seiran# | 3017,0,0,20,0,0,0,99,0,0,none,0,6514,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_KAZEHU_SEIRAN#Kazehu Seiran# | ||||||
| 3018,0,0,20,0,0,0,99,0,0,none,0,6515,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_DOHU_KOUKAI#Dohu Koukai# | 3018,0,0,20,0,0,0,99,0,0,none,0,6515,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_DOHU_KOUKAI#Dohu Koukai# | ||||||
|  | 3019,0,0,10,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	//KO_KAIHOU#Technique Kaihou# | ||||||
|  | 3020,0,0,30,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	//KO_ZENKAI#Zenkai# | ||||||
|  | 3021,0,0,40:44:48:52:56,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	//KO_GENWAKU#Genwaku# | ||||||
|  | 3022,0,0,70:75:80:85:90,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	//KO_IZAYOI#Izayoi# | ||||||
| 
 | 
 | ||||||
| 10010,0,0,1,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	//GD_BATTLEORDER## | 10010,0,0,1,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	//GD_BATTLEORDER## | ||||||
| 10011,0,0,1,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	//GD_REGENERATION## | 10011,0,0,1,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	//GD_REGENERATION## | ||||||
|  | |||||||
| @ -151,6 +151,7 @@ | |||||||
| 3006,0x86,    ,  0, 2, 100,enemy, 0x018	//KO_BAKURETSU | 3006,0x86,    ,  0, 2, 100,enemy, 0x018	//KO_BAKURETSU | ||||||
| 3008,0x86,    ,  0, 2, 100,enemy, 0x018	//KO_MUCHANAGE | 3008,0x86,    ,  0, 2, 100,enemy, 0x018	//KO_MUCHANAGE | ||||||
| 3009,0x86,    ,  0, 3, 500,enemy, 0x018	//KO_HUUMARANKA | 3009,0x86,    ,  0, 3, 500,enemy, 0x018	//KO_HUUMARANKA | ||||||
|  | 3020,0xf8,    ,  0, 3, 100,all, 0x018	//KO_ZENKAI | ||||||
| //3010,0xfc,    ,  0, 2,1000,enemy, 0x022	//KO_MAKIBISHI | //3010,0xfc,    ,  0, 2,1000,enemy, 0x022	//KO_MAKIBISHI | ||||||
| 
 | 
 | ||||||
| 8208,0x86,    ,  0, 2,1000,enemy, 0x080	//MA_SHOWER | 8208,0x86,    ,  0, 2,1000,enemy, 0x080	//MA_SHOWER | ||||||
|  | |||||||
| @ -1673,6 +1673,14 @@ | |||||||
| 3017,500,0,0,300000,0,0,0 | 3017,500,0,0,300000,0,0,0 | ||||||
| //-- KO_DOHU_KOUKAI | //-- KO_DOHU_KOUKAI | ||||||
| 3018,500,0,0,300000,0,0,0 | 3018,500,0,0,300000,0,0,0 | ||||||
|  | //-- KO_KAIHOU | ||||||
|  | 3019,1000,0,0,0,0,0,0 | ||||||
|  | //-- KO_ZENKAI | ||||||
|  | 3020,1000,0,0,10000,10000,0,0 | ||||||
|  | //-- KO_GENWAKU | ||||||
|  | 3021,500,0,0,5000,0,0,0 | ||||||
|  | //-- KO_IZAYOI | ||||||
|  | 3022,0,0,0,30000:45000:60000:75000:90000,0,60000,0 | ||||||
| //========================================== | //========================================== | ||||||
| 
 | 
 | ||||||
| //===== Homunculus Skills ================== | //===== Homunculus Skills ================== | ||||||
|  | |||||||
| @ -1028,6 +1028,10 @@ | |||||||
| 3016,0,6,4,1,0x1,0,1,1,no,0,0,0,none,0,		KO_HYOUHU_HUBUKI,Hyouhu Hubuki | 3016,0,6,4,1,0x1,0,1,1,no,0,0,0,none,0,		KO_HYOUHU_HUBUKI,Hyouhu Hubuki | ||||||
| 3017,0,6,4,4,0x1,0,1,1,no,0,0,0,none,0,		KO_KAZEHU_SEIRAN,Kazehu Seiran | 3017,0,6,4,4,0x1,0,1,1,no,0,0,0,none,0,		KO_KAZEHU_SEIRAN,Kazehu Seiran | ||||||
| 3018,0,6,4,2,0x1,0,1,1,no,0,0,0,none,0,		KO_DOHU_KOUKAI,Dohu Koukai	 | 3018,0,6,4,2,0x1,0,1,1,no,0,0,0,none,0,		KO_DOHU_KOUKAI,Dohu Koukai	 | ||||||
|  | 3019,11,6,1,0,0,0,5,0,no,0,0,0,weapon,0,	KO_KAIHOU,Technique Kaihou | ||||||
|  | 3020,7,6,2,0,0,0,1,3,yes,0,0,0,magic,0,		KO_ZENKAI,Zenkai | ||||||
|  | 3021,5:6:7:8:9,6,16,0,0x1,0,5,1,no,0,0,0,none,0,	KO_GENWAKU,Genwaku | ||||||
|  | 3022,0,6,4,0,0x1,0,5,0,no,0,0,0,none,0,		KO_IZAYOI,Izayoi | ||||||
| 
 | 
 | ||||||
| 8001,9,6,4,0,0x1,0,5,1,no,0,0,0,magic,0,	HLIF_HEAL,Healing Touch | 8001,9,6,4,0,0x1,0,5,1,no,0,0,0,magic,0,	HLIF_HEAL,Healing Touch | ||||||
| 8002,0,6,4,0,0x3,-1,5,1,no,0,0,0,none,0,	HLIF_AVOID,Avoid | 8002,0,6,4,0,0x3,-1,5,1,no,0,0,0,none,0,	HLIF_AVOID,Avoid | ||||||
|  | |||||||
| @ -790,7 +790,7 @@ | |||||||
| //**** | //**** | ||||||
| // Kagerou/Oboro | // Kagerou/Oboro | ||||||
| 3001,0,0,10,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	//KO_YAMIKUMO#Yamikumo# | 3001,0,0,10,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	//KO_YAMIKUMO#Yamikumo# | ||||||
| 3004,0,0,10:12:14:16:18,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	//KO_JYUMONJIKIRI#Cross Strike# | 3004,0,0,10:12:14:16:18,0,0,0,25:26:28,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_JYUMONJIKIRI#Cross Strike# | ||||||
| 3005,0,0,12:16:20:24: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	//KO_SETSUDAN#Soul Sever# | 3005,0,0,12:16:20:24: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	//KO_SETSUDAN#Soul Sever# | ||||||
| 3006,0,0,5:6:7:8:9,0,0,0,99,0,0,none,0,13294,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_BAKURETSU#Bakuretsu Kunai# | 3006,0,0,5:6:7:8:9,0,0,0,99,0,0,none,0,13294,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_BAKURETSU#Bakuretsu Kunai# | ||||||
| 3007,0,0,8:9:10:11:12,0,0,0,99,7,8,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_HAPPOKUNAI#Happo Kunai# | 3007,0,0,8:9:10:11:12,0,0,0,99,7,8,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_HAPPOKUNAI#Happo Kunai# | ||||||
| @ -805,6 +805,10 @@ | |||||||
| 3016,0,0,20,0,0,0,99,0,0,none,0,6513,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_HYOUHU_HUBUKI#Hyouhu Hubuki# | 3016,0,0,20,0,0,0,99,0,0,none,0,6513,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_HYOUHU_HUBUKI#Hyouhu Hubuki# | ||||||
| 3017,0,0,20,0,0,0,99,0,0,none,0,6514,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_KAZEHU_SEIRAN#Kazehu Seiran# | 3017,0,0,20,0,0,0,99,0,0,none,0,6514,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_KAZEHU_SEIRAN#Kazehu Seiran# | ||||||
| 3018,0,0,20,0,0,0,99,0,0,none,0,6515,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_DOHU_KOUKAI#Dohu Koukai# | 3018,0,0,20,0,0,0,99,0,0,none,0,6515,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KO_DOHU_KOUKAI#Dohu Koukai# | ||||||
|  | 3019,0,0,10,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	//KO_KAIHOU#Technique Kaihou# | ||||||
|  | 3020,0,0,30,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	//KO_ZENKAI#Zenkai# | ||||||
|  | 3021,0,0,40:44:48:52:56,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	//KO_GENWAKU#Genwaku# | ||||||
|  | 3022,0,0,70:75:80:85:90,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	//KO_IZAYOI#Izayoi# | ||||||
| 
 | 
 | ||||||
| 10010,0,0,1,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	//GD_BATTLEORDER## | 10010,0,0,1,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	//GD_BATTLEORDER## | ||||||
| 10011,0,0,1,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	//GD_REGENERATION## | 10011,0,0,1,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	//GD_REGENERATION## | ||||||
|  | |||||||
| @ -153,6 +153,7 @@ | |||||||
| 3006,0x86,    ,  0, 2, 100,enemy, 0x018	//KO_BAKURETSU | 3006,0x86,    ,  0, 2, 100,enemy, 0x018	//KO_BAKURETSU | ||||||
| 3008,0x86,    ,  0, 2, 100,enemy, 0x018	//KO_MUCHANAGE | 3008,0x86,    ,  0, 2, 100,enemy, 0x018	//KO_MUCHANAGE | ||||||
| 3009,0x86,    ,  0, 3, 500,enemy, 0x018	//KO_HUUMARANKA | 3009,0x86,    ,  0, 3, 500,enemy, 0x018	//KO_HUUMARANKA | ||||||
|  | 3020,0xf8,    ,  0, 3, 100,all, 0x018	//KO_ZENKAI | ||||||
| //3010,0xfc,    ,  0, 2,1000,enemy, 0x022	//KO_MAKIBISHI | //3010,0xfc,    ,  0, 2,1000,enemy, 0x022	//KO_MAKIBISHI | ||||||
| 
 | 
 | ||||||
| 8020,0xf5,    ,  0, 3,2300:2100:1900:1700:1500,enemy,   0x018	//MH_POISON_MIST | 8020,0xf5,    ,  0, 3,2300:2100:1900:1700:1500,enemy,   0x018	//MH_POISON_MIST | ||||||
|  | |||||||
| @ -1422,7 +1422,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo | |||||||
| 		s_ele_ = sstatus->lhw.ele; | 		s_ele_ = sstatus->lhw.ele; | ||||||
| 		if( sd ){ //Summoning 10 talisman will endow your weapon.
 | 		if( sd ){ //Summoning 10 talisman will endow your weapon.
 | ||||||
| 			ARR_FIND(1, 6, i, sd->talisman[i] >= 10); | 			ARR_FIND(1, 6, i, sd->talisman[i] >= 10); | ||||||
| 			if( i < 5) s_ele = s_ele_ = i; | 			if( i < 5 ) s_ele = s_ele_ = i; | ||||||
| 		} | 		} | ||||||
| 		if( flag.arrow && sd && sd->bonus.arrow_ele ) | 		if( flag.arrow && sd && sd->bonus.arrow_ele ) | ||||||
| 			s_ele = sd->bonus.arrow_ele; | 			s_ele = sd->bonus.arrow_ele; | ||||||
| @ -1778,6 +1778,8 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo | |||||||
| 				skillratio += sc->data[SC_MAXOVERTHRUST]->val2; | 				skillratio += sc->data[SC_MAXOVERTHRUST]->val2; | ||||||
| 			if(sc->data[SC_BERSERK]) | 			if(sc->data[SC_BERSERK]) | ||||||
| 				skillratio += 100; | 				skillratio += 100; | ||||||
|  | 			if(sc->data[SC_ZENKAI] && sstatus->rhw.ele == sc->data[SC_ZENKAI]->val2 ) | ||||||
|  | 				skillratio += sc->data[SC_ZENKAI]->val1 * 2; | ||||||
| 		} | 		} | ||||||
| 		if( !skill_num ) | 		if( !skill_num ) | ||||||
| 		{ | 		{ | ||||||
| @ -2599,6 +2601,16 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo | |||||||
| 						status_change_end(target,SC_SPIRIT,INVALID_TIMER); | 						status_change_end(target,SC_SPIRIT,INVALID_TIMER); | ||||||
| 					} | 					} | ||||||
| 					break; | 					break; | ||||||
|  | 				case KO_KAIHOU: | ||||||
|  | 					if( sd ){ | ||||||
|  | 						ARR_FIND(1, 6, i, sd->talisman[i] > 0); | ||||||
|  | 						if( i < 5 ){ | ||||||
|  | 							s_ele = i; | ||||||
|  | 							ATK_ADDRATE(100 * sd->talisman[i]);// +100% custom value.
 | ||||||
|  | 							pc_del_talisman(sd, sd->talisman[i], i); | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 					break; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		//Div fix.
 | 		//Div fix.
 | ||||||
| @ -3339,8 +3351,8 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list | |||||||
| 		if (s_ele == -1){ // pl=-1 : the skill takes the weapon's element
 | 		if (s_ele == -1){ // pl=-1 : the skill takes the weapon's element
 | ||||||
| 			s_ele = sstatus->rhw.ele; | 			s_ele = sstatus->rhw.ele; | ||||||
| 			if( sd ){ //Summoning 10 talisman will endow your weapon
 | 			if( sd ){ //Summoning 10 talisman will endow your weapon
 | ||||||
| 				ARR_FIND(1, 6, i, sd->talisman[i] > 0); | 				ARR_FIND(1, 6, i, sd->talisman[i] >= 10); | ||||||
| 				if( i < 5) s_ele = i; | 				if( i < 5 ) s_ele = i; | ||||||
| 			} | 			} | ||||||
| 		}else if (s_ele == -2) //Use status element
 | 		}else if (s_ele == -2) //Use status element
 | ||||||
| 			s_ele = status_get_attack_sc_element(src,status_get_sc(src)); | 			s_ele = status_get_attack_sc_element(src,status_get_sc(src)); | ||||||
|  | |||||||
| @ -643,7 +643,7 @@ enum e_pc_permission { | |||||||
| 
 | 
 | ||||||
| //Weapon check considering dual wielding.
 | //Weapon check considering dual wielding.
 | ||||||
| #define pc_check_weapontype(sd, type) ((type)&((sd)->status.weapon < MAX_WEAPON_TYPE? \ | #define pc_check_weapontype(sd, type) ((type)&((sd)->status.weapon < MAX_WEAPON_TYPE? \ | ||||||
| 	1<<(sd)->status.weapon:(1<<(sd)->weapontype1)|(1<<(sd)->weapontype2))) | 	1<<(sd)->status.weapon:(1<<(sd)->weapontype1)|(1<<(sd)->weapontype2)|(1<<(sd)->status.weapon))) | ||||||
| //Checks if the given class value corresponds to a player class. [Skotlex]
 | //Checks if the given class value corresponds to a player class. [Skotlex]
 | ||||||
| //JOB_NOVICE isn't checked for class_ is supposed to be unsigned
 | //JOB_NOVICE isn't checked for class_ is supposed to be unsigned
 | ||||||
| #define pcdb_checkid_sub(class_) \ | #define pcdb_checkid_sub(class_) \ | ||||||
|  | |||||||
| @ -3437,6 +3437,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int | |||||||
| 	case MH_STAHL_HORN: | 	case MH_STAHL_HORN: | ||||||
| 	case KO_JYUMONJIKIRI: | 	case KO_JYUMONJIKIRI: | ||||||
| 	case KO_SETSUDAN: | 	case KO_SETSUDAN: | ||||||
|  | 	case KO_KAIHOU: | ||||||
| 		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); | 		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); | ||||||
| 	break; | 	break; | ||||||
| 
 | 
 | ||||||
| @ -8721,6 +8722,29 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in | |||||||
| 			clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0); | 			clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0); | ||||||
| 		break; | 		break; | ||||||
| 
 | 
 | ||||||
|  | 	case KO_GENWAKU: | ||||||
|  | 		{ | ||||||
|  | 			int x = src->x, y = src->y; | ||||||
|  | 			if (unit_movepos(src,bl->x,bl->y,0,0)) { | ||||||
|  | 				clif_skill_nodamage(src,src,skillid,skilllv,1); | ||||||
|  | 				clif_slide(src,bl->x,bl->y) ; | ||||||
|  | 				sc_start(src,SC_CONFUSION,80,skilllv,skill_get_time(skillid,skilllv)); | ||||||
|  | 				if (unit_movepos(bl,x,y,0,0)) | ||||||
|  | 				{ | ||||||
|  | 					clif_skill_damage(bl,bl,tick, status_get_amotion(src), 0, -30000, 1, skillid, -1, 6); | ||||||
|  | 					clif_slide(bl,x,y) ; | ||||||
|  | 					sc_start(bl,SC_CONFUSION,80,skilllv,skill_get_time(skillid,skilllv)); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		break; | ||||||
|  | 
 | ||||||
|  | 	case KO_IZAYOI: | ||||||
|  | 		clif_skill_nodamage(src,bl,skillid,skilllv, | ||||||
|  | 			sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); | ||||||
|  | 		clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skillid, skilllv, 6); | ||||||
|  | 		break; | ||||||
|  | 
 | ||||||
| 	default: | 	default: | ||||||
| 		if( skillid >= HM_SKILLBASE && skillid <= HM_SKILLBASE + MAX_HOMUNSKILL ) { | 		if( skillid >= HM_SKILLBASE && skillid <= HM_SKILLBASE + MAX_HOMUNSKILL ) { | ||||||
| 			if( src->type == BL_HOM && ((TBL_HOM*)src)->master->fd ) | 			if( src->type == BL_HOM && ((TBL_HOM*)src)->master->fd ) | ||||||
| @ -9443,6 +9467,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk | |||||||
| 	case KO_HUUMARANKA: | 	case KO_HUUMARANKA: | ||||||
| 	case KO_MUCHANAGE: | 	case KO_MUCHANAGE: | ||||||
| 	case KO_BAKURETSU: | 	case KO_BAKURETSU: | ||||||
|  | 	case KO_ZENKAI: | ||||||
| 	//case KO_MAKIBISHI:
 | 	//case KO_MAKIBISHI:
 | ||||||
| 		flag|=1;//Set flag to 1 to prevent deleting ammo (it will be deleted on group-delete).
 | 		flag|=1;//Set flag to 1 to prevent deleting ammo (it will be deleted on group-delete).
 | ||||||
| 	case GS_GROUNDDRIFT: //Ammo should be deleted right away.
 | 	case GS_GROUNDDRIFT: //Ammo should be deleted right away.
 | ||||||
| @ -10482,6 +10507,18 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, short skilli | |||||||
| 			limit = 3000; | 			limit = 3000; | ||||||
| 		val3 = (x<<16)|y; | 		val3 = (x<<16)|y; | ||||||
| 		break;	 | 		break;	 | ||||||
|  | 	case KO_ZENKAI: | ||||||
|  | 		if( sd ){ | ||||||
|  | 			ARR_FIND(1, 6, i, sd->talisman[i] > 0); | ||||||
|  | 			if( i < 5 ){ | ||||||
|  | 				val1 = sd->talisman[i]; // no. of aura
 | ||||||
|  | 				val2 = i; // aura type
 | ||||||
|  | 				limit += val1 * 1000; | ||||||
|  | 				subunt = i - 1; | ||||||
|  | 				pc_del_talisman(sd, sd->talisman[i], i); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		break; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	nullpo_retr(NULL, group=skill_initunitgroup(src,layout->count,skillid,skilllv,skill_get_unit_id(skillid,flag&1)+subunt, limit, interval)); | 	nullpo_retr(NULL, group=skill_initunitgroup(src,layout->count,skillid,skilllv,skill_get_unit_id(skillid,flag&1)+subunt, limit, interval)); | ||||||
| @ -11461,6 +11498,34 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns | |||||||
| 				skill_attack(BF_MAGIC,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0); | 				skill_attack(BF_MAGIC,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0); | ||||||
| 			break;	 | 			break;	 | ||||||
| 
 | 
 | ||||||
|  | 		case UNT_ZENKAI_WATER: | ||||||
|  | 		case UNT_ZENKAI_GROUND: | ||||||
|  | 		case UNT_ZENKAI_FIRE: | ||||||
|  | 		case UNT_ZENKAI_WIND: | ||||||
|  | 			if( battle_check_target(&src->bl,bl,BCT_ENEMY) > 0 ){ | ||||||
|  | 				switch( sg->unit_id ){ | ||||||
|  | 					case UNT_ZENKAI_WATER: | ||||||
|  | 						sc_start(bl, SC_CRYSTALIZE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));  | ||||||
|  | 						sc_start(bl, SC_FREEZE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));  | ||||||
|  | 						sc_start(bl, SC_FREEZING, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));  | ||||||
|  | 						break; | ||||||
|  | 					case UNT_ZENKAI_GROUND: | ||||||
|  | 						sc_start(bl, SC_STONE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));  | ||||||
|  | 						sc_start(bl, SC_POISON, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));  | ||||||
|  | 						break; | ||||||
|  | 					case UNT_ZENKAI_FIRE: | ||||||
|  | 						sc_start(bl, SC_BURNING, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));  | ||||||
|  | 						break; | ||||||
|  | 					case UNT_ZENKAI_WIND: | ||||||
|  | 						sc_start(bl, SC_SILENCE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));  | ||||||
|  | 						sc_start(bl, SC_SLEEP, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));  | ||||||
|  | 						sc_start(bl, SC_DEEPSLEEP, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));  | ||||||
|  | 						break; | ||||||
|  | 				} | ||||||
|  | 			}else | ||||||
|  | 				sc_start2(bl,type,100,sg->val1,sg->val2,skill_get_time2(sg->skill_id, sg->skill_lv)); | ||||||
|  | 			break; | ||||||
|  | 	 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (bl->type == BL_MOB && ss != bl) | 	if (bl->type == BL_MOB && ss != bl) | ||||||
| @ -12534,6 +12599,14 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh | |||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 			break; | 			break; | ||||||
|  | 		case KO_KAIHOU: | ||||||
|  | 		case KO_ZENKAI: | ||||||
|  | 			ARR_FIND(1, 6, i, sd->talisman[i] > 0); | ||||||
|  | 			if( i > 4 ) {  | ||||||
|  | 				clif_skill_fail(sd,skill,USESKILL_FAIL_LEVEL,0); | ||||||
|  | 				return 0; | ||||||
|  | 			} | ||||||
|  | 			break; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	switch(require.state) { | 	switch(require.state) { | ||||||
| @ -13244,6 +13317,8 @@ int skill_castfix_sc (struct block_list *bl, int time, int skill_id, int skill_l | |||||||
| 		} | 		} | ||||||
| 		if (sc->data[SC_POEMBRAGI]) | 		if (sc->data[SC_POEMBRAGI]) | ||||||
| 			time -= time * sc->data[SC_POEMBRAGI]->val2 / 100; | 			time -= time * sc->data[SC_POEMBRAGI]->val2 / 100; | ||||||
|  | 		if (sc->data[SC_IZAYOI]) | ||||||
|  | 			time -= time * 50 / 100; | ||||||
| #ifdef RENEWAL_CAST | #ifdef RENEWAL_CAST | ||||||
| 		if( sc->data[SC__LAZINESS] ) | 		if( sc->data[SC__LAZINESS] ) | ||||||
| 			fixed += fixed * sc->data[SC__LAZINESS]->val2 / 100; | 			fixed += fixed * sc->data[SC__LAZINESS]->val2 / 100; | ||||||
| @ -13254,6 +13329,8 @@ int skill_castfix_sc (struct block_list *bl, int time, int skill_id, int skill_l | |||||||
| 			fixed -= fixed * sc->data[SC_SECRAMENT]->val2 / 100; | 			fixed -= fixed * sc->data[SC_SECRAMENT]->val2 / 100; | ||||||
| 		if( sc->data[SC_MANDRAGORA] && (skill_id >= SM_BASH && skill_id <= RETURN_TO_ELDICASTES) ) | 		if( sc->data[SC_MANDRAGORA] && (skill_id >= SM_BASH && skill_id <= RETURN_TO_ELDICASTES) ) | ||||||
| 			fixed += 2000; | 			fixed += 2000; | ||||||
|  | 		if (sc->data[SC_IZAYOI]  && (skill_id >= NJ_TOBIDOUGU && skill_id <= NJ_ISSEN)) | ||||||
|  | 			fixed = 0; | ||||||
| #endif | #endif | ||||||
| 	} | 	} | ||||||
| #ifdef RENEWAL_CAST | #ifdef RENEWAL_CAST | ||||||
|  | |||||||
| @ -716,6 +716,8 @@ void initChangeTables(void) { | |||||||
| 	set_sc( KO_MEIKYOUSISUI		, SC_MEIKYOUSISUI		 , SI_MEIKYOUSISUI		   , SCB_NONE ); | 	set_sc( KO_MEIKYOUSISUI		, SC_MEIKYOUSISUI		 , SI_MEIKYOUSISUI		   , SCB_NONE ); | ||||||
| 	set_sc( KO_KYOUGAKU			, SC_KYOUGAKU			 , SI_KYOUGAKU			   , SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK ); | 	set_sc( KO_KYOUGAKU			, SC_KYOUGAKU			 , SI_KYOUGAKU			   , SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK ); | ||||||
| 	add_sc( KO_JYUSATSU			, SC_CURSE		  ); | 	add_sc( KO_JYUSATSU			, SC_CURSE		  ); | ||||||
|  | 	set_sc( KO_ZENKAI			, SC_ZENKAI				 , SI_ZENKAI			   , SCB_NONE ); | ||||||
|  | 	set_sc( KO_IZAYOI			, SC_IZAYOI				 , SI_IZAYOI			   , SCB_MATK ); | ||||||
| 	 | 	 | ||||||
| 	add_sc( MH_STAHL_HORN		 , SC_STUN            ); | 	add_sc( MH_STAHL_HORN		 , SC_STUN            ); | ||||||
| 	set_sc( MH_ANGRIFFS_MODUS	 , SC_ANGRIFFS_MODUS  , SI_ANGRIFFS_MODUS	, SCB_BATK|SCB_WATK|SCB_DEF|SCB_FLEE ); | 	set_sc( MH_ANGRIFFS_MODUS	 , SC_ANGRIFFS_MODUS  , SI_ANGRIFFS_MODUS	, SCB_BATK|SCB_WATK|SCB_DEF|SCB_FLEE ); | ||||||
| @ -4502,6 +4504,8 @@ static unsigned short status_calc_matk(struct block_list *bl, struct status_chan | |||||||
| 		matk += 50;	 | 		matk += 50;	 | ||||||
| 	if(sc->data[SC_ODINS_POWER]) | 	if(sc->data[SC_ODINS_POWER]) | ||||||
| 		matk += 70;	 | 		matk += 70;	 | ||||||
|  | 	if(sc->data[SC_IZAYOI]) | ||||||
|  | 		matk += 50 * sc->data[SC_IZAYOI]->val1; | ||||||
| 
 | 
 | ||||||
| 	return (unsigned short)cap_value(matk,0,USHRT_MAX); | 	return (unsigned short)cap_value(matk,0,USHRT_MAX); | ||||||
| } | } | ||||||
| @ -6291,9 +6295,10 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val | |||||||
| 	case SC_SLEEP: | 	case SC_SLEEP: | ||||||
| 	case SC_STUN: | 	case SC_STUN: | ||||||
| 	case SC_FREEZING: | 	case SC_FREEZING: | ||||||
|  | 	case SC_CRYSTALIZE: | ||||||
| 		if (sc->opt1) | 		if (sc->opt1) | ||||||
| 			return 0; //Cannot override other opt1 status changes. [Skotlex]
 | 			return 0; //Cannot override other opt1 status changes. [Skotlex]
 | ||||||
| 		if((type == SC_FREEZE || type == SC_FREEZING) && sc->data[SC_WARMER]) | 		if((type == SC_FREEZE || type == SC_FREEZING || type == SC_CRYSTALIZE) && sc->data[SC_WARMER]) | ||||||
| 			return 0; //Immune to Frozen and Freezing status if under Warmer status. [Jobbie]
 | 			return 0; //Immune to Frozen and Freezing status if under Warmer status. [Jobbie]
 | ||||||
| 	break; | 	break; | ||||||
| 		 | 		 | ||||||
| @ -8263,7 +8268,10 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val | |||||||
| 			val2 = 2*val1 + rand()%val1; | 			val2 = 2*val1 + rand()%val1; | ||||||
| 			clif_status_change(bl,SI_ACTIVE_MONSTER_TRANSFORM,1,0,1002,0,0); // Temporarily shows Poring need official [malufett]
 | 			clif_status_change(bl,SI_ACTIVE_MONSTER_TRANSFORM,1,0,1002,0,0); // Temporarily shows Poring need official [malufett]
 | ||||||
| 			break; | 			break; | ||||||
| 
 | 		case SC_IZAYOI: | ||||||
|  | 			val2 = tick/1000; | ||||||
|  | 			tick_time = 1000; | ||||||
|  | 			break; | ||||||
| 		default: | 		default: | ||||||
| 			if( calc_flag == SCB_NONE && StatusSkillChangeTable[type] == 0 && StatusIconChangeTable[type] == 0 ) | 			if( calc_flag == SCB_NONE && StatusSkillChangeTable[type] == 0 && StatusIconChangeTable[type] == 0 ) | ||||||
| 			{	//Status change with no calc, no icon, and no skill associated...? 
 | 			{	//Status change with no calc, no icon, and no skill associated...? 
 | ||||||
| @ -10199,6 +10207,16 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data) | |||||||
| 			return 0; | 			return 0; | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
|  | 	case SC_IZAYOI: | ||||||
|  | 	case SC_KAGEMUSYA: | ||||||
|  | 		if( --(sce->val2) > 0 ) | ||||||
|  | 		{  | ||||||
|  | 			if(!status_charge(bl, 0, 1)) | ||||||
|  | 				break; | ||||||
|  | 			sc_timer_next(1000+tick, status_change_timer, bl->id, data); | ||||||
|  | 			return 0; | ||||||
|  | 		} | ||||||
|  | 		break; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// default for all non-handled control paths is to end the status
 | 	// default for all non-handled control paths is to end the status
 | ||||||
|  | |||||||
| @ -628,6 +628,7 @@ typedef enum sc_type { | |||||||
| 	SC_JYUMONJIKIRI, | 	SC_JYUMONJIKIRI, | ||||||
| 	SC_KYOUGAKU, | 	SC_KYOUGAKU, | ||||||
| 	SC_IZAYOI, | 	SC_IZAYOI, | ||||||
|  | 	SC_ZENKAI, | ||||||
| 	SC_KAGEHUMI, | 	SC_KAGEHUMI, | ||||||
| 	SC_KYOMU, | 	SC_KYOMU, | ||||||
| 	SC_KAGEMUSYA, | 	SC_KAGEMUSYA, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 rud0lp20
						rud0lp20