Explorar o código

Added some packets for party booking system - Topic tid:82724 (Thanks Brynner)
Added LG_BANISHINGPOINT hitrate increase - Fixes bugreport:7535
Fixed pc.c compile warning when not using Renewal Drop Rate (Lighta) - Fixes bugreport:7704
Fixed an issue where a non-player failing to freeze another with Frost Diver causes map crash (Lighta)
Added SCS_NOCHAT for easier character mute management
Some status.c and status.h standardizing (spaces suck)

--Hercules Merges
- Merged 9fe16cc : MC_IDENTIFY shouldn't take SP when no items found
- Merged 31f9100 : SC_DEEPSLEEP causes character to be unable to talk
- Merged cb9b70e : Cash Shop support for 2011-11-22 clients - Topic tid:82791

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

akinari1087 %!s(int64=12) %!d(string=hai) anos
pai
achega
9942072257
Modificáronse 10 ficheiros con 532 adicións e 481 borrados
  1. 6 2
      db/packet_db.txt
  2. 8 16
      src/map/atcommand.c
  3. 6 3
      src/map/battle.c
  4. 35 15
      src/map/clif.c
  5. 1 1
      src/map/guild.c
  6. 1 0
      src/map/homunculus.c
  7. 8 5
      src/map/pc.c
  8. 23 10
      src/map/skill.c
  9. 300 287
      src/map/status.c
  10. 144 142
      src/map/status.h

+ 6 - 2
db/packet_db.txt

@@ -1647,6 +1647,7 @@ packet_ver: 27
 0x0439,8,useitem,2:4
 0x08d2,10
 0x08d1,7
+0x846,4,cashshopreqtab,2 //2011-07-18
 
 // 2011-11-02aRagexe
 packet_ver: 28
@@ -1689,7 +1690,7 @@ packet_ver:29
 0x0885,7,actionrequest,2:6
 0x0889,10,useskilltoid,2:4:6
 0x0870,-1,itemlistwindowselected,2:4:8
-0x0926,18,bookingregreq,2:4:6
+//0x0926,18,bookingregreq,2:4:6
 0x0815,-1,reqopenbuyingstore,2:4:8:9:89
 0x0817,2,reqclosebuyingstore,0
 0x0360,6,reqclickbuyingstore,2
@@ -1698,6 +1699,7 @@ packet_ver:29
 0x0835,2,searchstoreinfonextpage,0
 0x0838,12,searchstoreinfolistitemclick,2:6:10
 0x0439,8,useitem,2:4
+0x0365,18,bookingregreq,2:4:6
 
 //2012-04-10aRagexeRE
 packet_ver: 30
@@ -1730,7 +1732,6 @@ packet_ver: 30
 0x0366,90,useskilltoposinfo,2:4:6:8:10
 0x0889,6,getcharnamerequest,2
 0x0884,6,solvecharname,2
-0x08E5,41,bookingregreq,2:4	//Added to prevent disconnections
 0x08E6,4
 0x08E7,10,bookingsearchreq,2
 0x08E8,-1
@@ -1759,6 +1760,7 @@ packet_ver: 30
 0x08CF,10 //Amulet spirits
 0x0977,14 //Monster HP Bar
 0x0916,26,guildinvite2,2
+0x091D,18,bookingregreq,2:4:6
 
 //2012-04-18aRagexeRE [Special Thanks to Judas!]
 packet_ver:31
@@ -1782,6 +1784,7 @@ packet_ver:31
 //2012-06-18
 packet_ver: 32
 0x0983,29
+0x0861,18,bookingregreq,2:4:6 //actually 05-03
 
 //2012-07-02aRagexeRE (unstable)
 packet_ver: 33
@@ -1799,6 +1802,7 @@ packet_ver: 33
 0x094a,6,getcharnamerequest,2
 0x0953,5,walktoxy,2
 0x0960,5,changedir,2:4
+0x0879,18,bookingregreq,2:4:6
 
 //2013-03-20Ragexe (Judas)
 packet_ver: 34

+ 8 - 16
src/map/atcommand.c

@@ -6167,10 +6167,8 @@ ACMD_FUNC(npctalk)
 	bool ifcolor=(*(command + 8) != 'c' && *(command + 8) != 'C')?0:1;
 	unsigned long color=0;
 
-	if (sd->sc.count && //no "chatting" while muted.
-		(sd->sc.data[SC_BERSERK] || sd->sc.data[SC__BLOODYLUST] ||
-		(sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT)))
-		return -1;
+	if (sd->sc.cant.chat)
+		return -1; //no "chatting" while muted.
 
 	if(!ifcolor) {
 		if (!message || !*message || sscanf(message, "%23[^,], %99[^\n]", name, mes) < 2) {
@@ -6218,10 +6216,8 @@ ACMD_FUNC(pettalk)
 		return -1;
 	}
 
-	if (sd->sc.count && //no "chatting" while muted.
-		(sd->sc.data[SC_BERSERK] || sd->sc.data[SC__BLOODYLUST] ||
-		(sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT)))
-		return -1;
+	if (sd->sc.cant.chat)
+		return -1; //no "chatting" while muted.
 
 	if (!message || !*message || sscanf(message, "%99[^\n]", mes) < 1) {
 		clif_displaymessage(fd, msg_txt(sd,1224)); // Please enter a message (usage: @pettalk <message>).
@@ -7052,10 +7048,8 @@ ACMD_FUNC(homtalk)
 		sd->cantalk_tick = gettick() + battle_config.min_chat_delay;
 	}
 
-	if (sd->sc.count && //no "chatting" while muted.
-		(sd->sc.data[SC_BERSERK] || sd->sc.data[SC__BLOODYLUST] ||
-		(sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT)))
-		return -1;
+	if (sd->sc.cant.chat)
+		return -1; //no "chatting" while muted.
 
 	if ( !merc_is_hom_active(sd->hd) ) {
 		clif_displaymessage(fd, msg_txt(sd,1254)); // You do not have a homunculus.
@@ -7439,10 +7433,8 @@ ACMD_FUNC(me)
 	memset(tempmes, '\0', sizeof(tempmes));
 	memset(atcmd_output, '\0', sizeof(atcmd_output));
 
-	if (sd->sc.count && //no "chatting" while muted.
-		(sd->sc.data[SC_BERSERK] || sd->sc.data[SC__BLOODYLUST] ||
-		(sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT)))
-		return -1;
+	if (sd->sc.cant.chat)
+		return -1; //no "chatting" while muted.
 
 	if (!message || !*message || sscanf(message, "%199[^\n]", tempmes) < 0) {
 		clif_displaymessage(fd, msg_txt(sd,1302)); // Please enter a message (usage: @me <message>).

+ 6 - 3
src/map/battle.c

@@ -2040,6 +2040,9 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 				if( sd && pc_checkskill(sd, GN_REMODELING_CART) )
 					hitrate += pc_checkskill(sd, GN_REMODELING_CART) * 4;
 				break;
+			case LG_BANISHINGPOINT:
+				hitrate += 3 * skill_lv;
+				break;
 			case GC_VENOMPRESSURE:
 				hitrate += 10 + 4 * skill_lv;
 				break;
@@ -3640,8 +3643,8 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 	short s_ele = 0;
 	unsigned int skillratio = 100;	//Skill dmg modifiers.
 
-    TBL_PC *sd;
-//    TBL_PC *tsd;
+	TBL_PC *sd;
+//	TBL_PC *tsd;
 	struct status_change *sc, *tsc;
 	struct Damage ad;
 	struct status_data *sstatus = status_get_status_data(src);
@@ -3671,7 +3674,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 	flag.imdef = nk&NK_IGNORE_DEF?1:0;
 
 	sd = BL_CAST(BL_PC, src);
-//    tsd = BL_CAST(BL_PC, target);
+//	tsd = BL_CAST(BL_PC, target);
 	sc = status_get_sc(src);
 	tsc = status_get_sc(target);
 

+ 35 - 15
src/map/clif.c

@@ -6598,7 +6598,7 @@ void clif_party_message(struct party_data* p, int account_id, const char* mes, i
 		WBUFW(buf,0)=0x109;
 		WBUFW(buf,2)=len+8;
 		WBUFL(buf,4)=account_id;
-        safestrncpy((char *)WBUFP(buf,8), mes, len);
+		safestrncpy((char *)WBUFP(buf,8), mes, len);
 		clif_send(buf,len+8,&sd->bl,PARTY);
 	}
 }
@@ -9673,8 +9673,8 @@ void clif_parse_GlobalMessage(int fd, struct map_session_data* sd)
 	if( is_atcommand(fd, sd, message, 1)  )
 		return;
 
-	if( sd->sc.data[SC_BERSERK] || sd->sc.data[SC__BLOODYLUST] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) )
-		return;
+	if (sd->sc.cant.chat)
+		return; //no "chatting" while muted.
 
 	if( battle_config.min_chat_delay ) { //[Skotlex]
 		if (DIFF_TICK(sd->cantalk_tick, gettick()) > 0)
@@ -9994,8 +9994,8 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd)
 	if ( is_atcommand(fd, sd, message, 1) )
 		return;
 
-	if (sd->sc.data[SC_BERSERK] || sd->sc.data[SC__BLOODYLUST] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT))
-		return;
+	if (sd->sc.cant.chat)
+		return; //no "chatting" while muted.
 
 	if (battle_config.min_chat_delay) { //[Skotlex]
 		if (DIFF_TICK(sd->cantalk_tick, gettick()) > 0) {
@@ -10151,9 +10151,6 @@ void clif_parse_TakeItem(int fd, struct map_session_data *sd)
 		if (fitem == NULL || fitem->bl.type != BL_ITEM || fitem->bl.m != sd->bl.m)
 			break;
 
-		if( sd->sc.cant.pickup )
-			break;
-
 		if (pc_cant_act(sd))
 			break;
 
@@ -11668,8 +11665,8 @@ void clif_parse_PartyMessage(int fd, struct map_session_data* sd)
 	if( is_atcommand(fd, sd, message, 1)  )
 		return;
 
-	if( sd->sc.data[SC_BERSERK] || sd->sc.data[SC__BLOODYLUST] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) )
-		return;
+	if (sd->sc.cant.chat)
+		return; //no "chatting" while muted.
 
 	if( battle_config.min_chat_delay )
 	{	//[Skotlex]
@@ -12213,8 +12210,8 @@ void clif_parse_GuildMessage(int fd, struct map_session_data* sd)
 	if( is_atcommand(fd, sd, message, 1) )
 		return;
 
-	if( sd->sc.data[SC_BERSERK] || sd->sc.data[SC__BLOODYLUST] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) )
-		return;
+	if (sd->sc.cant.chat)
+		return; //no "chatting" while muted.
 
 	if( battle_config.min_chat_delay )
 	{	//[Skotlex]
@@ -14443,7 +14440,6 @@ void clif_parse_cashshop_buy(int fd, struct map_session_data *sd){
 }
 #endif
 
-
 /// Adoption System
 ///
 
@@ -15078,8 +15074,8 @@ void clif_parse_BattleChat(int fd, struct map_session_data* sd)
 	if( is_atcommand(fd, sd, message, 1) )
 		return;
 
-	if( sd->sc.data[SC_BERSERK] || sd->sc.data[SC__BLOODYLUST] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) )
-		return;
+	if (sd->sc.cant.chat)
+		return; //no "chatting" while muted.
 
 	if( battle_config.min_chat_delay ) {
 		if( DIFF_TICK(sd->cantalk_tick, gettick()) > 0 )
@@ -16348,6 +16344,29 @@ void clif_parse_cashshop_close( int fd, struct map_session_data* sd ){
 	// No need to do anything here
 }
 
+//08c0 <len>.W <openIdentity>.L <itemcount>.W (ZC_ACK_SE_CASH_ITEM_LIST2)
+void clif_parse_CashShopReqTab(int fd, struct map_session_data *sd) {
+	short tab = RFIFOW(fd, 2);
+	int j;
+
+	if( tab < 0 || tab > CASHSHOP_TAB_SEARCH )
+		return;
+
+	WFIFOHEAD(fd, 10 + ( cash_shop_items[tab].count * 6 ) );
+	WFIFOW(fd, 0) = 0x8c0;
+	WFIFOW(fd, 2) = 10 + ( cash_shop_items[tab].count * 6 );
+	WFIFOL(fd, 4) = tab;
+	WFIFOW(fd, 8) = cash_shop_items[tab].count;
+
+	for( j = 0; j < cash_shop_items[tab].count; j++ ) {
+		WFIFOW(fd, 10 + ( 6 * j ) ) = cash_shop_items[tab].item[j]->nameid;
+		WFIFOL(fd, 12 + ( 6 * j ) ) = cash_shop_items[tab].item[j]->price;
+	}
+
+	WFIFOSET(fd, 10 + ( cash_shop_items[tab].count * 6 ));
+}
+
+//08ca <len>.W <itemcount> W <tabcode>.W (ZC_ACK_SCHEDULER_CASHITEM)
 void clif_cashshop_list( int fd ){
 	int tab;
 
@@ -17056,6 +17075,7 @@ void packetdb_readdb(void)
 		{ clif_parse_cashshop_close, "cashshopclose" },
 		{ clif_parse_cashshop_list_request, "cashshopitemlist" },
 		{ clif_parse_cashshop_buy, "cashshopbuy" },
+		{ clif_parse_CashShopReqTab, "cashshopreqtab"},
 		/* */
 		{ clif_parse_MoveItem , "moveitem" },
 		{ clif_parse_GuildInvite2 , "guildinvite2" },

+ 1 - 1
src/map/guild.c

@@ -82,7 +82,7 @@ static TBL_PC* guild_sd_check(int guild_id, int account_id, int char_id)
 
 	if (sd->status.guild_id != guild_id)
 	{	//If player belongs to a different guild, kick him out.
- 		intif_guild_leave(guild_id,account_id,char_id,0,"** Guild Mismatch **");
+		intif_guild_leave(guild_id,account_id,char_id,0,"** Guild Mismatch **");
 		return NULL;
 	}
 

+ 1 - 0
src/map/homunculus.c

@@ -807,6 +807,7 @@ void merc_hom_init_timers(struct homun_data * hd)
 	if (hd->hungry_timer == INVALID_TIMER)
 		hd->hungry_timer = add_timer(gettick()+hd->homunculusDB->hungryDelay,merc_hom_hungry,hd->master->bl.id,0);
 	hd->regen.state.block = 0; //Restore HP/SP block.
+	hd->masterteleport_timer = INVALID_TIMER;
 }
 
 int merc_call_homunculus(struct map_session_data *sd)

+ 8 - 5
src/map/pc.c

@@ -4044,11 +4044,14 @@ int pc_takeitem(struct map_session_data *sd,struct flooritem_data *fitem)
 	if(!check_distance_bl(&fitem->bl, &sd->bl, 2) && sd->ud.skill_id!=BS_GREED)
 		return 0;	// Distance is too far
 
+	if( sd->sc.cant.pickup )
+		return 0;
+
 	if (sd->status.party_id)
 		p = party_search(sd->status.party_id);
 
 	if(fitem->first_get_charid > 0 && fitem->first_get_charid != sd->status.char_id)
-  	{
+	{
 		first_sd = map_charid2sd(fitem->first_get_charid);
 		if(DIFF_TICK(tick,fitem->first_get_tick) < 0) {
 			if (!(p && p->party.item&1 &&
@@ -4069,7 +4072,7 @@ int pc_takeitem(struct map_session_data *sd,struct flooritem_data *fitem)
 			}
 			else
 			if(fitem->third_get_charid > 0 && fitem->third_get_charid != sd->status.char_id)
-		  	{
+			{
 				third_sd = map_charid2sd(fitem->third_get_charid);
 				if(DIFF_TICK(tick,fitem->third_get_tick) < 0) {
 					if(!(p && p->party.item&1 &&
@@ -7916,7 +7919,7 @@ int pc_candrop(struct map_session_data *sd, struct item *item)
 {
 	if( item && (item->expire_time || (item->bound && !pc_can_give_bounded_items(sd))) )
 		return 0;
-	if( !pc_can_give_items(sd) ) //check if this GM level can drop items
+	if( !pc_can_give_items(sd) || sd->sc.cant.drop) //check if this GM level can drop items
 		return 0;
 	return (itemdb_isdropable(item, pc_get_group_level(sd)));
 }
@@ -9659,7 +9662,7 @@ static bool pc_readdb_levelpenalty(char* fields[], int columns, int current)
  *------------------------------------------*/
 int pc_readdb(void)
 {
-	int i,j,k,tmp=0;
+	int i,j,k;
 	FILE *fp;
 	char line[24000],*p;
 
@@ -9756,7 +9759,7 @@ int pc_readdb(void)
 	sv_readdb(db_path, "re/level_penalty.txt", ',', 4, 4, -1, &pc_readdb_levelpenalty);
 	for( k=1; k < 3; k++ ){ // fill in the blanks
 		for( j = 0; j < RC_MAX; j++ ){
-			tmp = 0;
+			int tmp = 0;
 			for( i = 0; i < MAX_LEVEL*2; i++ ){
 				if( i == MAX_LEVEL+1 )
 					tmp = level_penalty[k][j][0];// reset

+ 23 - 10
src/map/skill.c

@@ -905,7 +905,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint
 	case TF_POISON:
 	case AS_SPLASHER:
 		if(!sc_start2(src,bl,SC_POISON,(4*skill_lv+10),skill_lv,src->id,skill_get_time2(skill_id,skill_lv))
-			&&	sd && skill_id==TF_POISON
+			&& sd && skill_id==TF_POISON
 		)
 			clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
 		break;
@@ -919,7 +919,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint
 		break;
 
 	case MG_FROSTDIVER:
-		if(!sc_start(src,bl,SC_FREEZE,skill_lv*3+35,skill_lv,skill_get_time2(skill_id,skill_lv)))
+		if(!sc_start(src,bl,SC_FREEZE,skill_lv*3+35,skill_lv,skill_get_time2(skill_id,skill_lv)) && sd)
 			clif_skill_fail(sd,skill_id,0,0);
 		break;
 
@@ -6205,8 +6205,15 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 		break;
 
 	case MC_IDENTIFY:
-		if(sd)
+		if(sd) {
 			clif_item_identify_list(sd);
+			if( sd->menuskill_id != MC_IDENTIFY ) {/* failed, dont consume anything, return */
+				clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
+				map_freeblock_unlock();
+				return 1;
+			}
+			status_zap(src,0,skill_db[skill_get_index(skill_id)].sp[skill_lv]); // consume sp only if succeeded
+		}
 		break;
 
 	// Weapon Refining [Celest]
@@ -11799,7 +11806,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
 			break;
 		}
 
- 		case UNT_TATAMIGAESHI:
+		case UNT_TATAMIGAESHI:
 		case UNT_DEMONSTRATION:
 			skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
 			break;
@@ -13684,10 +13691,17 @@ int skill_consume_requirement( struct map_session_data *sd, uint16 skill_id, uin
 
 	req = skill_get_requirement(sd,skill_id,skill_lv);
 
-	if( type&1 )
-	{
-		if( skill_id == CG_TAROTCARD || sd->state.autocast )
-			req.sp = 0; // TarotCard will consume sp in skill_cast_nodamage_id [Inkfish]
+	if( type&1 ) {
+		switch( skill_id ) {
+			case CG_TAROTCARD: // TarotCard will consume sp in skill_cast_nodamage_id [Inkfish]
+			case MC_IDENTIFY:
+				req.sp = 0;
+				break;
+			default:
+				if(sd->state.autocast)
+					req.sp = 0;
+			break;
+		}
 		if(req.hp || req.sp)
 			status_zap(&sd->bl, req.hp, req.sp);
 
@@ -13704,8 +13718,7 @@ int skill_consume_requirement( struct map_session_data *sd, uint16 skill_id, uin
 		}
 	}
 
-	if( type&2 )
-	{
+	if( type&2 ) {
 		struct status_change *sc = &sd->sc;
 		int n,i;
 

+ 300 - 287
src/map/status.c

@@ -492,281 +492,281 @@ void initChangeTables(void) {
 	set_sc( HAMI_BLOODLUST       , SC_BLOODLUST       , SI_BLANK           , SCB_BATK|SCB_WATK );
 
 	// Homunculus S
-	add_sc(MH_STAHL_HORN, SC_STUN);
-	set_sc(MH_ANGRIFFS_MODUS, SC_ANGRIFFS_MODUS, SI_ANGRIFFS_MODUS, SCB_BATK | SCB_DEF | SCB_FLEE | SCB_MAXHP);
-	set_sc(MH_GOLDENE_FERSE, SC_GOLDENE_FERSE, SI_GOLDENE_FERSE,  SCB_ASPD|SCB_FLEE);
-	add_sc( MH_STEINWAND, SC_SAFETYWALL );
-	set_sc(MH_OVERED_BOOST, SC_OVERED_BOOST, SI_BLANK, SCB_FLEE|SCB_ASPD);
-	add_sc(MH_LIGHT_OF_REGENE, SC_LIGHT_OF_REGENE);
-	set_sc(MH_VOLCANIC_ASH, SC_ASH, SI_VOLCANIC_ASH, SCB_DEF|SCB_DEF2|SCB_HIT|SCB_BATK|SCB_FLEE);
-	set_sc(MH_GRANITIC_ARMOR, SC_GRANITIC_ARMOR, SI_GRANITIC_ARMOR, SCB_NONE);
-	set_sc(MH_MAGMA_FLOW, SC_MAGMA_FLOW, SI_MAGMA_FLOW, SCB_NONE);
-	set_sc(MH_PYROCLASTIC, SC_PYROCLASTIC, SI_PYROCLASTIC, SCB_BATK|SCB_ATK_ELE);
-	add_sc(MH_LAVA_SLIDE, SC_BURNING);
-	set_sc(MH_NEEDLE_OF_PARALYZE, SC_PARALYSIS, SI_NEEDLE_OF_PARALYZE, SCB_DEF2);
-	add_sc(MH_POISON_MIST, SC_BLIND);
-	set_sc(MH_PAIN_KILLER, SC_PAIN_KILLER, SI_PAIN_KILLER, SCB_ASPD);
-
-	add_sc(MH_STYLE_CHANGE, SC_STYLE_CHANGE);
-	set_sc(MH_TINDER_BREAKER, SC_TINDER_BREAKER2, SI_TINDER_BREAKER, SCB_FLEE);
-	set_sc(MH_TINDER_BREAKER, SC_TINDER_BREAKER, SI_TINDER_BREAKER_POSTDELAY, SCB_FLEE);
-	set_sc(MH_CBC, SC_CBC, SI_CBC, SCB_FLEE);
-	set_sc(MH_EQC, SC_EQC, SI_EQC, SCB_DEF2|SCB_BATK|SCB_MAXHP);
-
-	add_sc( MER_CRASH            , SC_STUN            );
-	set_sc( MER_PROVOKE          , SC_PROVOKE         , SI_PROVOKE         , SCB_DEF|SCB_DEF2|SCB_BATK|SCB_WATK );
-	add_sc( MS_MAGNUM            , SC_WATK_ELEMENT    );
-	add_sc( MER_SIGHT            , SC_SIGHT           );
-	set_sc( MER_DECAGI           , SC_DECREASEAGI     , SI_DECREASEAGI     , SCB_AGI|SCB_SPEED );
-	set_sc( MER_MAGNIFICAT       , SC_MAGNIFICAT      , SI_MAGNIFICAT      , SCB_REGEN );
-	add_sc( MER_LEXDIVINA        , SC_SILENCE         );
-	add_sc( MA_LANDMINE          , SC_STUN            );
-	add_sc( MA_SANDMAN           , SC_SLEEP           );
-	add_sc( MA_FREEZINGTRAP      , SC_FREEZE          );
-	set_sc( MER_AUTOBERSERK      , SC_AUTOBERSERK     , SI_AUTOBERSERK     , SCB_NONE );
-	set_sc( ML_AUTOGUARD         , SC_AUTOGUARD       , SI_AUTOGUARD       , SCB_NONE );
-	set_sc( MS_REFLECTSHIELD     , SC_REFLECTSHIELD   , SI_REFLECTSHIELD   , SCB_NONE );
-	set_sc( ML_DEFENDER          , SC_DEFENDER        , SI_DEFENDER        , SCB_SPEED|SCB_ASPD );
-	set_sc( MS_PARRYING          , SC_PARRYING        , SI_PARRYING        , SCB_NONE );
-	set_sc( MS_BERSERK           , SC_BERSERK         , SI_BERSERK         , SCB_DEF|SCB_DEF2|SCB_MDEF|SCB_MDEF2|SCB_FLEE|SCB_SPEED|SCB_ASPD|SCB_MAXHP|SCB_REGEN );
-	add_sc( ML_SPIRALPIERCE      , SC_STOP            );
-	set_sc( MER_QUICKEN          , SC_MERC_QUICKEN    , SI_BLANK           , SCB_ASPD );
-	add_sc( ML_DEVOTION          , SC_DEVOTION        );
-	set_sc( MER_KYRIE            , SC_KYRIE           , SI_KYRIE           , SCB_NONE );
-	set_sc( MER_BLESSING         , SC_BLESSING        , SI_BLESSING        , SCB_STR|SCB_INT|SCB_DEX );
-	set_sc( MER_INCAGI           , SC_INCREASEAGI     , SI_INCREASEAGI     , SCB_AGI|SCB_SPEED );
-
-	set_sc( GD_LEADERSHIP        , SC_LEADERSHIP      , SI_BLANK           , SCB_STR );
-	set_sc( GD_GLORYWOUNDS       , SC_GLORYWOUNDS     , SI_BLANK           , SCB_VIT );
-	set_sc( GD_SOULCOLD          , SC_SOULCOLD        , SI_BLANK           , SCB_AGI );
-	set_sc( GD_HAWKEYES          , SC_HAWKEYES        , SI_BLANK           , SCB_DEX );
-
-	set_sc( GD_BATTLEORDER       , SC_BATTLEORDERS    , SI_BLANK           , SCB_STR|SCB_INT|SCB_DEX );
-	set_sc( GD_REGENERATION      , SC_REGENERATION    , SI_BLANK           , SCB_REGEN );
+	add_sc(MH_STAHL_HORN		, SC_STUN		);
+	set_sc(MH_ANGRIFFS_MODUS	, SC_ANGRIFFS_MODUS	, SI_ANGRIFFS_MODUS	, SCB_BATK|SCB_DEF|SCB_FLEE|SCB_MAXHP );
+	set_sc(MH_GOLDENE_FERSE		, SC_GOLDENE_FERSE	, SI_GOLDENE_FERSE	, SCB_ASPD|SCB_FLEE );
+	add_sc(MH_STEINWAND		, SC_SAFETYWALL		);
+	set_sc(MH_OVERED_BOOST		, SC_OVERED_BOOST	, SI_BLANK		, SCB_FLEE|SCB_ASPD );
+	add_sc(MH_LIGHT_OF_REGENE	, SC_LIGHT_OF_REGENE	);
+	set_sc(MH_VOLCANIC_ASH		, SC_ASH		, SI_VOLCANIC_ASH	, SCB_DEF|SCB_DEF2|SCB_HIT|SCB_BATK|SCB_FLEE );
+	set_sc(MH_GRANITIC_ARMOR	, SC_GRANITIC_ARMOR	, SI_GRANITIC_ARMOR	, SCB_NONE );
+	set_sc(MH_MAGMA_FLOW		, SC_MAGMA_FLOW		, SI_MAGMA_FLOW		, SCB_NONE );
+	set_sc(MH_PYROCLASTIC		, SC_PYROCLASTIC	, SI_PYROCLASTIC	, SCB_BATK|SCB_ATK_ELE );
+	add_sc(MH_LAVA_SLIDE		, SC_BURNING		);
+	set_sc(MH_NEEDLE_OF_PARALYZE	, SC_PARALYSIS		, SI_NEEDLE_OF_PARALYZE	, SCB_DEF2 );
+	add_sc(MH_POISON_MIST		, SC_BLIND		);
+	set_sc(MH_PAIN_KILLER		, SC_PAIN_KILLER	, SI_PAIN_KILLER	, SCB_ASPD );
+
+	add_sc(MH_STYLE_CHANGE		, SC_STYLE_CHANGE	);
+	set_sc(MH_TINDER_BREAKER	, SC_TINDER_BREAKER2	, SI_TINDER_BREAKER, SCB_FLEE );
+	set_sc(MH_TINDER_BREAKER	, SC_TINDER_BREAKER	, SI_TINDER_BREAKER_POSTDELAY, SCB_FLEE );
+	set_sc(MH_CBC			, SC_CBC, SI_CBC	, SCB_FLEE );
+	set_sc(MH_EQC			, SC_EQC, SI_EQC	, SCB_DEF2|SCB_BATK|SCB_MAXHP );
+
+	add_sc( MER_CRASH		, SC_STUN		);
+	set_sc( MER_PROVOKE		, SC_PROVOKE		, SI_PROVOKE		, SCB_DEF|SCB_DEF2|SCB_BATK|SCB_WATK );
+	add_sc( MS_MAGNUM		, SC_WATK_ELEMENT	);
+	add_sc( MER_SIGHT		, SC_SIGHT		);
+	set_sc( MER_DECAGI		, SC_DECREASEAGI	, SI_DECREASEAGI	, SCB_AGI|SCB_SPEED );
+	set_sc( MER_MAGNIFICAT		, SC_MAGNIFICAT		, SI_MAGNIFICAT		, SCB_REGEN );
+	add_sc( MER_LEXDIVINA		, SC_SILENCE		);
+	add_sc( MA_LANDMINE		, SC_STUN		);
+	add_sc( MA_SANDMAN		, SC_SLEEP		);
+	add_sc( MA_FREEZINGTRAP		, SC_FREEZE		);
+	set_sc( MER_AUTOBERSERK		, SC_AUTOBERSERK	, SI_AUTOBERSERK	, SCB_NONE );
+	set_sc( ML_AUTOGUARD		, SC_AUTOGUARD		, SI_AUTOGUARD		, SCB_NONE );
+	set_sc( MS_REFLECTSHIELD	, SC_REFLECTSHIELD	, SI_REFLECTSHIELD	, SCB_NONE );
+	set_sc( ML_DEFENDER		, SC_DEFENDER		, SI_DEFENDER		, SCB_SPEED|SCB_ASPD );
+	set_sc( MS_PARRYING		, SC_PARRYING		, SI_PARRYING		, SCB_NONE );
+	set_sc( MS_BERSERK		, SC_BERSERK		, SI_BERSERK		, SCB_DEF|SCB_DEF2|SCB_MDEF|SCB_MDEF2|SCB_FLEE|SCB_SPEED|SCB_ASPD|SCB_MAXHP|SCB_REGEN );
+	add_sc( ML_SPIRALPIERCE		, SC_STOP		);
+	set_sc( MER_QUICKEN		, SC_MERC_QUICKEN	, SI_BLANK		, SCB_ASPD );
+	add_sc( ML_DEVOTION		, SC_DEVOTION		);
+	set_sc( MER_KYRIE		, SC_KYRIE		, SI_KYRIE		, SCB_NONE );
+	set_sc( MER_BLESSING		, SC_BLESSING		, SI_BLESSING		, SCB_STR|SCB_INT|SCB_DEX );
+	set_sc( MER_INCAGI		, SC_INCREASEAGI	, SI_INCREASEAGI	, SCB_AGI|SCB_SPEED );
+
+	set_sc( GD_LEADERSHIP		, SC_LEADERSHIP		, SI_BLANK		, SCB_STR );
+	set_sc( GD_GLORYWOUNDS		, SC_GLORYWOUNDS	, SI_BLANK		, SCB_VIT );
+	set_sc( GD_SOULCOLD		, SC_SOULCOLD		, SI_BLANK		, SCB_AGI );
+	set_sc( GD_HAWKEYES		, SC_HAWKEYES		, SI_BLANK		, SCB_DEX );
+
+	set_sc( GD_BATTLEORDER		, SC_BATTLEORDERS	, SI_BLANK		, SCB_STR|SCB_INT|SCB_DEX );
+	set_sc( GD_REGENERATION		, SC_REGENERATION	, SI_BLANK		, SCB_REGEN );
 
 	/**
 	 * Rune Knight
 	 **/
-	set_sc( RK_ENCHANTBLADE      , SC_ENCHANTBLADE      , SI_ENCHANTBLADE      , SCB_NONE );
-	set_sc( RK_DRAGONHOWLING     , SC_FEAR              , SI_BLANK             , SCB_FLEE|SCB_HIT );
-	set_sc( RK_DEATHBOUND        , SC_DEATHBOUND        , SI_DEATHBOUND        , SCB_NONE );
-	set_sc( RK_WINDCUTTER        , SC_FEAR              , SI_BLANK             , SCB_FLEE|SCB_HIT );
-	add_sc( RK_DRAGONBREATH      , SC_BURNING           );
-	set_sc( RK_MILLENNIUMSHIELD  , SC_MILLENNIUMSHIELD  , SI_REUSE_MILLENNIUMSHIELD  , SCB_NONE );
-	set_sc( RK_REFRESH           , SC_REFRESH           , SI_REFRESH           , SCB_NONE );
-	set_sc( RK_GIANTGROWTH       , SC_GIANTGROWTH       , SI_GIANTGROWTH       , SCB_STR );
-	set_sc( RK_STONEHARDSKIN     , SC_STONEHARDSKIN     , SI_STONEHARDSKIN     , SCB_DEF|SCB_MDEF );
-	set_sc( RK_VITALITYACTIVATION, SC_VITALITYACTIVATION, SI_VITALITYACTIVATION, SCB_REGEN );
-	set_sc( RK_FIGHTINGSPIRIT    , SC_FIGHTINGSPIRIT    , SI_FIGHTINGSPIRIT    , SCB_WATK|SCB_ASPD );
-	set_sc( RK_ABUNDANCE         , SC_ABUNDANCE         , SI_ABUNDANCE         , SCB_NONE );
-	set_sc( RK_CRUSHSTRIKE		 , SC_CRUSHSTRIKE		, SI_CRUSHSTRIKE	   , SCB_NONE );
+	set_sc( RK_ENCHANTBLADE		, SC_ENCHANTBLADE	, SI_ENCHANTBLADE		, SCB_NONE );
+	set_sc( RK_DRAGONHOWLING	, SC_FEAR		, SI_BLANK			, SCB_FLEE|SCB_HIT );
+	set_sc( RK_DEATHBOUND		, SC_DEATHBOUND		, SI_DEATHBOUND			, SCB_NONE );
+	set_sc( RK_WINDCUTTER		, SC_FEAR		, SI_BLANK			, SCB_FLEE|SCB_HIT );
+	add_sc( RK_DRAGONBREATH		, SC_BURNING		);
+	set_sc( RK_MILLENNIUMSHIELD	, SC_MILLENNIUMSHIELD 	, SI_REUSE_MILLENNIUMSHIELD	, SCB_NONE );
+	set_sc( RK_REFRESH		, SC_REFRESH		, SI_REFRESH			, SCB_NONE );
+	set_sc( RK_GIANTGROWTH		, SC_GIANTGROWTH	, SI_GIANTGROWTH		, SCB_STR );
+	set_sc( RK_STONEHARDSKIN	, SC_STONEHARDSKIN	, SI_STONEHARDSKIN		, SCB_DEF|SCB_MDEF );
+	set_sc( RK_VITALITYACTIVATION	, SC_VITALITYACTIVATION	, SI_VITALITYACTIVATION		, SCB_REGEN );
+	set_sc( RK_FIGHTINGSPIRIT	, SC_FIGHTINGSPIRIT	, SI_FIGHTINGSPIRIT		, SCB_WATK|SCB_ASPD );
+	set_sc( RK_ABUNDANCE		, SC_ABUNDANCE		, SI_ABUNDANCE			, SCB_NONE );
+	set_sc( RK_CRUSHSTRIKE		, SC_CRUSHSTRIKE	, SI_CRUSHSTRIKE		, SCB_NONE );
 	/**
 	 * GC Guillotine Cross
 	 **/
-	set_sc_with_vfx( GC_VENOMIMPRESS      , SC_VENOMIMPRESS     , SI_VENOMIMPRESS     , SCB_NONE );
-	set_sc( GC_POISONINGWEAPON   , SC_POISONINGWEAPON  , SI_POISONINGWEAPON  , SCB_NONE );
-	set_sc( GC_WEAPONBLOCKING    , SC_WEAPONBLOCKING   , SI_WEAPONBLOCKING   , SCB_NONE );
-	set_sc( GC_CLOAKINGEXCEED    , SC_CLOAKINGEXCEED   , SI_CLOAKINGEXCEED   , SCB_SPEED );
-	set_sc( GC_HALLUCINATIONWALK , SC_HALLUCINATIONWALK, SI_HALLUCINATIONWALK, SCB_FLEE );
-	set_sc( GC_ROLLINGCUTTER     , SC_ROLLINGCUTTER    , SI_ROLLINGCUTTER    , SCB_NONE );
+	set_sc_with_vfx( GC_VENOMIMPRESS	, SC_VENOMIMPRESS	, SI_VENOMIMPRESS	, SCB_NONE );
+	set_sc( GC_POISONINGWEAPON		, SC_POISONINGWEAPON	, SI_POISONINGWEAPON	, SCB_NONE );
+	set_sc( GC_WEAPONBLOCKING		, SC_WEAPONBLOCKING	, SI_WEAPONBLOCKING	, SCB_NONE );
+	set_sc( GC_CLOAKINGEXCEED		, SC_CLOAKINGEXCEED	, SI_CLOAKINGEXCEED	, SCB_SPEED );
+	set_sc( GC_HALLUCINATIONWALK		, SC_HALLUCINATIONWALK	, SI_HALLUCINATIONWALK	, SCB_FLEE );
+	set_sc( GC_ROLLINGCUTTER		, SC_ROLLINGCUTTER	, SI_ROLLINGCUTTER	, SCB_NONE );
 	/**
 	 * Arch Bishop
 	 **/
-	set_sc( AB_ADORAMUS          , SC_ADORAMUS        , SI_ADORAMUS        , SCB_AGI|SCB_SPEED );
-	add_sc( AB_CLEMENTIA         , SC_BLESSING );
-	add_sc( AB_CANTO             , SC_INCREASEAGI );
-	set_sc( AB_EPICLESIS         , SC_EPICLESIS       , SI_EPICLESIS       , SCB_MAXHP );
-	add_sc( AB_PRAEFATIO         , SC_KYRIE );
-	set_sc_with_vfx( AB_ORATIO            , SC_ORATIO          , SI_ORATIO          , SCB_NONE );
-	set_sc( AB_LAUDAAGNUS        , SC_LAUDAAGNUS      , SI_LAUDAAGNUS      , SCB_VIT );
-	set_sc( AB_LAUDARAMUS        , SC_LAUDARAMUS      , SI_LAUDARAMUS      , SCB_LUK );
-	set_sc( AB_RENOVATIO         , SC_RENOVATIO       , SI_RENOVATIO       , SCB_REGEN );
-	set_sc( AB_EXPIATIO          , SC_EXPIATIO        , SI_EXPIATIO        , SCB_ATK_ELE );
-	set_sc( AB_DUPLELIGHT        , SC_DUPLELIGHT      , SI_DUPLELIGHT      , SCB_NONE );
-	set_sc( AB_SECRAMENT         , SC_SECRAMENT       , SI_SECRAMENT       , SCB_NONE );
+	set_sc( AB_ADORAMUS		, SC_ADORAMUS		, SI_ADORAMUS		, SCB_AGI|SCB_SPEED );
+	add_sc( AB_CLEMENTIA		, SC_BLESSING		);
+	add_sc( AB_CANTO		, SC_INCREASEAGI	);
+	set_sc( AB_EPICLESIS		, SC_EPICLESIS		, SI_EPICLESIS		, SCB_MAXHP );
+	add_sc( AB_PRAEFATIO		, SC_KYRIE		);
+	set_sc_with_vfx( AB_ORATIO	, SC_ORATIO		, SI_ORATIO		, SCB_NONE );
+	set_sc( AB_LAUDAAGNUS		, SC_LAUDAAGNUS		, SI_LAUDAAGNUS		, SCB_VIT );
+	set_sc( AB_LAUDARAMUS		, SC_LAUDARAMUS		, SI_LAUDARAMUS		, SCB_LUK );
+	set_sc( AB_RENOVATIO		, SC_RENOVATIO		, SI_RENOVATIO		, SCB_REGEN );
+	set_sc( AB_EXPIATIO		, SC_EXPIATIO		, SI_EXPIATIO		, SCB_ATK_ELE );
+	set_sc( AB_DUPLELIGHT		, SC_DUPLELIGHT		, SI_DUPLELIGHT		, SCB_NONE );
+	set_sc( AB_SECRAMENT		, SC_SECRAMENT		, SI_SECRAMENT		, SCB_NONE );
 	/**
 	 * Warlock
 	 **/
-	add_sc( WL_WHITEIMPRISON     , SC_WHITEIMPRISON );
-	set_sc_with_vfx( WL_FROSTMISTY        , SC_FREEZING        , SI_FROSTMISTY      , SCB_ASPD|SCB_SPEED|SCB_DEF|SCB_DEF2 );
-	set_sc( WL_MARSHOFABYSS      , SC_MARSHOFABYSS    , SI_MARSHOFABYSS    , SCB_SPEED|SCB_FLEE|SCB_DEF|SCB_MDEF );
-	set_sc(WL_RECOGNIZEDSPELL   , SC_RECOGNIZEDSPELL , SI_RECOGNIZEDSPELL , SCB_MATK);
-	set_sc( WL_STASIS            , SC_STASIS          , SI_STASIS          , SCB_NONE );
+	add_sc( WL_WHITEIMPRISON	, SC_WHITEIMPRISON	);
+	set_sc_with_vfx( WL_FROSTMISTY	, SC_FREEZING		, SI_FROSTMISTY		, SCB_ASPD|SCB_SPEED|SCB_DEF|SCB_DEF2 );
+	set_sc( WL_MARSHOFABYSS		, SC_MARSHOFABYSS	, SI_MARSHOFABYSS	, SCB_SPEED|SCB_FLEE|SCB_DEF|SCB_MDEF );
+	set_sc(WL_RECOGNIZEDSPELL	, SC_RECOGNIZEDSPELL	, SI_RECOGNIZEDSPELL	, SCB_MATK);
+	set_sc( WL_STASIS		, SC_STASIS		, SI_STASIS		, SCB_NONE );
 	/**
 	 * Ranger
 	 **/
-	set_sc( RA_FEARBREEZE        , SC_FEARBREEZE      , SI_FEARBREEZE      , SCB_NONE );
-	set_sc( RA_ELECTRICSHOCKER   , SC_ELECTRICSHOCKER , SI_ELECTRICSHOCKER , SCB_NONE );
-	set_sc( RA_WUGDASH           , SC_WUGDASH         , SI_WUGDASH         , SCB_SPEED );
-	set_sc( RA_CAMOUFLAGE        , SC_CAMOUFLAGE      , SI_CAMOUFLAGE      , SCB_SPEED );
-	add_sc( RA_MAGENTATRAP       , SC_ELEMENTALCHANGE );
-	add_sc( RA_COBALTTRAP        , SC_ELEMENTALCHANGE );
-	add_sc( RA_MAIZETRAP         , SC_ELEMENTALCHANGE );
-	add_sc( RA_VERDURETRAP       , SC_ELEMENTALCHANGE );
-	add_sc( RA_FIRINGTRAP        , SC_BURNING         );
-	set_sc_with_vfx( RA_ICEBOUNDTRAP      , SC_FREEZING        , SI_FROSTMISTY      , SCB_NONE );
+	set_sc( RA_FEARBREEZE			, SC_FEARBREEZE		, SI_FEARBREEZE		, SCB_NONE );
+	set_sc( RA_ELECTRICSHOCKER		, SC_ELECTRICSHOCKER	, SI_ELECTRICSHOCKER	, SCB_NONE );
+	set_sc( RA_WUGDASH			, SC_WUGDASH		, SI_WUGDASH		, SCB_SPEED );
+	set_sc( RA_CAMOUFLAGE			, SC_CAMOUFLAGE		, SI_CAMOUFLAGE		, SCB_SPEED );
+	add_sc( RA_MAGENTATRAP			, SC_ELEMENTALCHANGE	);
+	add_sc( RA_COBALTTRAP			, SC_ELEMENTALCHANGE	);
+	add_sc( RA_MAIZETRAP			, SC_ELEMENTALCHANGE	);
+	add_sc( RA_VERDURETRAP			, SC_ELEMENTALCHANGE	);
+	add_sc( RA_FIRINGTRAP			, SC_BURNING		);
+	set_sc_with_vfx( RA_ICEBOUNDTRAP	, SC_FREEZING		, SI_FROSTMISTY		, SCB_NONE );
 	/**
 	 * Mechanic
 	 **/
-	set_sc( NC_ACCELERATION      , SC_ACCELERATION    , SI_ACCELERATION    , SCB_SPEED );
-	set_sc( NC_HOVERING          , SC_HOVERING        , SI_HOVERING        , SCB_SPEED );
-	set_sc( NC_SHAPESHIFT        , SC_SHAPESHIFT      , SI_SHAPESHIFT      , SCB_DEF_ELE );
-	set_sc( NC_INFRAREDSCAN      , SC_INFRAREDSCAN    , SI_INFRAREDSCAN    , SCB_FLEE );
-	set_sc( NC_ANALYZE           , SC_ANALYZE         , SI_ANALYZE         , SCB_DEF|SCB_DEF2|SCB_MDEF|SCB_MDEF2 );
-	set_sc( NC_MAGNETICFIELD     , SC_MAGNETICFIELD   , SI_MAGNETICFIELD   , SCB_NONE );
-	set_sc( NC_NEUTRALBARRIER    , SC_NEUTRALBARRIER  , SI_NEUTRALBARRIER  , SCB_NONE );
-	set_sc( NC_STEALTHFIELD      , SC_STEALTHFIELD    , SI_STEALTHFIELD    , SCB_NONE );
+	set_sc( NC_ACCELERATION		, SC_ACCELERATION	, SI_ACCELERATION	, SCB_SPEED );
+	set_sc( NC_HOVERING		, SC_HOVERING		, SI_HOVERING		, SCB_SPEED );
+	set_sc( NC_SHAPESHIFT		, SC_SHAPESHIFT		, SI_SHAPESHIFT		, SCB_DEF_ELE );
+	set_sc( NC_INFRAREDSCAN		, SC_INFRAREDSCAN	, SI_INFRAREDSCAN	, SCB_FLEE );
+	set_sc( NC_ANALYZE		, SC_ANALYZE		, SI_ANALYZE		, SCB_DEF|SCB_DEF2|SCB_MDEF|SCB_MDEF2 );
+	set_sc( NC_MAGNETICFIELD	, SC_MAGNETICFIELD	, SI_MAGNETICFIELD	, SCB_NONE );
+	set_sc( NC_NEUTRALBARRIER	, SC_NEUTRALBARRIER	, SI_NEUTRALBARRIER	, SCB_NONE );
+	set_sc( NC_STEALTHFIELD		, SC_STEALTHFIELD	, SI_STEALTHFIELD	, SCB_NONE );
 	/**
 	 * Royal Guard
 	 **/
-	set_sc( LG_REFLECTDAMAGE     , SC_REFLECTDAMAGE   , SI_LG_REFLECTDAMAGE, SCB_NONE );
-	set_sc( LG_FORCEOFVANGUARD   , SC_FORCEOFVANGUARD , SI_FORCEOFVANGUARD , SCB_MAXHP|SCB_DEF );
-	set_sc( LG_EXEEDBREAK        , SC_EXEEDBREAK      , SI_EXEEDBREAK      , SCB_NONE );
-	set_sc( LG_PRESTIGE          , SC_PRESTIGE        , SI_PRESTIGE        , SCB_DEF );
-	set_sc( LG_BANDING           , SC_BANDING         , SI_BANDING         , SCB_DEF2|SCB_WATK );// Renewal: atk2 & def2
-	set_sc( LG_PIETY             , SC_BENEDICTIO      , SI_BENEDICTIO      , SCB_DEF_ELE );
-	set_sc( LG_EARTHDRIVE        , SC_EARTHDRIVE      , SI_EARTHDRIVE      , SCB_DEF|SCB_ASPD );
-	set_sc( LG_INSPIRATION       , SC_INSPIRATION     , SI_INSPIRATION     , SCB_MAXHP|SCB_WATK|SCB_HIT|SCB_VIT|SCB_AGI|SCB_STR|SCB_DEX|SCB_INT|SCB_LUK);
-	set_sc( LG_SHIELDSPELL       , SC_SHIELDSPELL_DEF , SI_SHIELDSPELL_DEF , SCB_WATK );
-	set_sc( LG_SHIELDSPELL       , SC_SHIELDSPELL_REF , SI_SHIELDSPELL_REF , SCB_DEF );
+	set_sc( LG_REFLECTDAMAGE	, SC_REFLECTDAMAGE	, SI_LG_REFLECTDAMAGE	, SCB_NONE );
+	set_sc( LG_FORCEOFVANGUARD	, SC_FORCEOFVANGUARD	, SI_FORCEOFVANGUARD	, SCB_MAXHP|SCB_DEF );
+	set_sc( LG_EXEEDBREAK		, SC_EXEEDBREAK		, SI_EXEEDBREAK		, SCB_NONE );
+	set_sc( LG_PRESTIGE		, SC_PRESTIGE		, SI_PRESTIGE		, SCB_DEF );
+	set_sc( LG_BANDING		, SC_BANDING		, SI_BANDING		, SCB_DEF2|SCB_WATK );// Renewal: atk2 & def2
+	set_sc( LG_PIETY		, SC_BENEDICTIO		, SI_BENEDICTIO		, SCB_DEF_ELE );
+	set_sc( LG_EARTHDRIVE		, SC_EARTHDRIVE		, SI_EARTHDRIVE		, SCB_DEF|SCB_ASPD );
+	set_sc( LG_INSPIRATION		, SC_INSPIRATION	, SI_INSPIRATION	, SCB_MAXHP|SCB_WATK|SCB_HIT|SCB_VIT|SCB_AGI|SCB_STR|SCB_DEX|SCB_INT|SCB_LUK);
+	set_sc( LG_SHIELDSPELL		, SC_SHIELDSPELL_DEF	, SI_SHIELDSPELL_DEF	, SCB_WATK );
+	set_sc( LG_SHIELDSPELL		, SC_SHIELDSPELL_REF	, SI_SHIELDSPELL_REF	, SCB_DEF );
 	/**
 	 * Shadow Chaser
 	 **/
-	set_sc( SC_REPRODUCE         , SC__REPRODUCE      , SI_REPRODUCE       , SCB_NONE );
-	set_sc( SC_AUTOSHADOWSPELL   , SC__AUTOSHADOWSPELL, SI_AUTOSHADOWSPELL , SCB_NONE );
-	set_sc( SC_SHADOWFORM        , SC__SHADOWFORM     , SI_SHADOWFORM      , SCB_NONE );
-	set_sc( SC_BODYPAINT         , SC__BODYPAINT      , SI_BODYPAINT       , SCB_ASPD );
-	set_sc( SC_INVISIBILITY      , SC__INVISIBILITY   , SI_INVISIBILITY    , SCB_ASPD|SCB_CRI|SCB_ATK_ELE );
-	set_sc( SC_DEADLYINFECT      , SC__DEADLYINFECT   , SI_DEADLYINFECT    , SCB_NONE );
-	set_sc( SC_ENERVATION        , SC__ENERVATION     , SI_ENERVATION      , SCB_BATK  );
-	set_sc( SC_GROOMY            , SC__GROOMY         , SI_GROOMY          , SCB_ASPD|SCB_HIT|SCB_SPEED );
-	set_sc( SC_IGNORANCE         , SC__IGNORANCE      , SI_IGNORANCE       , SCB_NONE );
-	set_sc( SC_LAZINESS          , SC__LAZINESS       , SI_LAZINESS        , SCB_FLEE );
-	set_sc( SC_UNLUCKY           , SC__UNLUCKY        , SI_UNLUCKY         , SCB_CRI|SCB_FLEE2 );
-	set_sc( SC_WEAKNESS          , SC__WEAKNESS       , SI_WEAKNESS        , SCB_FLEE2|SCB_MAXHP );
-	set_sc( SC_STRIPACCESSARY    , SC__STRIPACCESSORY , SI_STRIPACCESSARY  , SCB_DEX|SCB_INT|SCB_LUK );
-	set_sc_with_vfx( SC_MANHOLE           , SC__MANHOLE        , SI_MANHOLE         , SCB_NONE );
-	add_sc( SC_CHAOSPANIC        , SC_CONFUSION );
-	set_sc_with_vfx( SC_BLOODYLUST        , SC__BLOODYLUST     , SI_BERSERK      , SCB_DEF | SCB_DEF2 | SCB_MDEF | SCB_MDEF2 | SCB_FLEE | SCB_SPEED | SCB_ASPD | SCB_MAXHP | SCB_REGEN );
+	set_sc( SC_REPRODUCE		, SC__REPRODUCE		, SI_REPRODUCE		, SCB_NONE );
+	set_sc( SC_AUTOSHADOWSPELL	, SC__AUTOSHADOWSPELL	, SI_AUTOSHADOWSPELL	, SCB_NONE );
+	set_sc( SC_SHADOWFORM		, SC__SHADOWFORM	, SI_SHADOWFORM		, SCB_NONE );
+	set_sc( SC_BODYPAINT		, SC__BODYPAINT		, SI_BODYPAINT		, SCB_ASPD );
+	set_sc( SC_INVISIBILITY		, SC__INVISIBILITY	, SI_INVISIBILITY	, SCB_ASPD|SCB_CRI|SCB_ATK_ELE );
+	set_sc( SC_DEADLYINFECT		, SC__DEADLYINFECT	, SI_DEADLYINFECT	, SCB_NONE );
+	set_sc( SC_ENERVATION		, SC__ENERVATION	, SI_ENERVATION		, SCB_BATK  );
+	set_sc( SC_GROOMY		, SC__GROOMY		, SI_GROOMY		, SCB_ASPD|SCB_HIT|SCB_SPEED );
+	set_sc( SC_IGNORANCE		, SC__IGNORANCE		, SI_IGNORANCE		, SCB_NONE );
+	set_sc( SC_LAZINESS		, SC__LAZINESS		, SI_LAZINESS		, SCB_FLEE );
+	set_sc( SC_UNLUCKY		, SC__UNLUCKY		, SI_UNLUCKY		, SCB_CRI|SCB_FLEE2 );
+	set_sc( SC_WEAKNESS		, SC__WEAKNESS		, SI_WEAKNESS		, SCB_FLEE2|SCB_MAXHP );
+	set_sc( SC_STRIPACCESSARY	, SC__STRIPACCESSORY	, SI_STRIPACCESSARY	, SCB_DEX|SCB_INT|SCB_LUK );
+	set_sc_with_vfx( SC_MANHOLE	, SC__MANHOLE		, SI_MANHOLE		, SCB_NONE );
+	add_sc( SC_CHAOSPANIC		, SC_CONFUSION		);
+	set_sc_with_vfx( SC_BLOODYLUST	, SC__BLOODYLUST	, SI_BERSERK		, SCB_DEF | SCB_DEF2 | SCB_MDEF | SCB_MDEF2 | SCB_FLEE | SCB_SPEED | SCB_ASPD | SCB_MAXHP | SCB_REGEN );
 	/**
 	 * Sura
 	 **/
-	add_sc( SR_DRAGONCOMBO           , SC_STUN            );
-	add_sc( SR_EARTHSHAKER           , SC_STUN            );
-	set_sc( SR_CRESCENTELBOW         , SC_CRESCENTELBOW      , SI_CRESCENTELBOW         , SCB_NONE );
-	set_sc_with_vfx( SR_CURSEDCIRCLE          , SC_CURSEDCIRCLE_TARGET, SI_CURSEDCIRCLE_TARGET   , SCB_NONE );
-	set_sc( SR_LIGHTNINGWALK         , SC_LIGHTNINGWALK      , SI_LIGHTNINGWALK         , SCB_NONE );
-	set_sc( SR_RAISINGDRAGON         , SC_RAISINGDRAGON      , SI_RAISINGDRAGON         , SCB_REGEN|SCB_MAXHP|SCB_MAXSP );
-	set_sc( SR_GENTLETOUCH_ENERGYGAIN, SC_GT_ENERGYGAIN      , SI_GENTLETOUCH_ENERGYGAIN, SCB_NONE );
-	set_sc( SR_GENTLETOUCH_CHANGE    , SC_GT_CHANGE          , SI_GENTLETOUCH_CHANGE    , SCB_ASPD|SCB_MDEF|SCB_MAXHP );
-	set_sc( SR_GENTLETOUCH_REVITALIZE, SC_GT_REVITALIZE      , SI_GENTLETOUCH_REVITALIZE, SCB_MAXHP|SCB_REGEN );
+	add_sc( SR_DRAGONCOMBO			, SC_STUN		);
+	add_sc( SR_EARTHSHAKER			, SC_STUN		);
+	set_sc( SR_CRESCENTELBOW		, SC_CRESCENTELBOW	, SI_CRESCENTELBOW		, SCB_NONE );
+	set_sc_with_vfx( SR_CURSEDCIRCLE	, SC_CURSEDCIRCLE_TARGET, SI_CURSEDCIRCLE_TARGET	, SCB_NONE );
+	set_sc( SR_LIGHTNINGWALK		, SC_LIGHTNINGWALK	, SI_LIGHTNINGWALK		, SCB_NONE );
+	set_sc( SR_RAISINGDRAGON		, SC_RAISINGDRAGON	, SI_RAISINGDRAGON		, SCB_REGEN|SCB_MAXHP|SCB_MAXSP );
+	set_sc( SR_GENTLETOUCH_ENERGYGAIN	, SC_GT_ENERGYGAIN	, SI_GENTLETOUCH_ENERGYGAIN	, SCB_NONE );
+	set_sc( SR_GENTLETOUCH_CHANGE		, SC_GT_CHANGE		, SI_GENTLETOUCH_CHANGE		, SCB_ASPD|SCB_MDEF|SCB_MAXHP );
+	set_sc( SR_GENTLETOUCH_REVITALIZE	, SC_GT_REVITALIZE	, SI_GENTLETOUCH_REVITALIZE	, SCB_MAXHP|SCB_REGEN );
 	/**
 	 * Wanderer / Minstrel
 	 **/
-	set_sc( WA_SWING_DANCE            , SC_SWINGDANCE           , SI_SWINGDANCE           , SCB_SPEED|SCB_ASPD );
-	set_sc( WA_SYMPHONY_OF_LOVER      , SC_SYMPHONYOFLOVER      , SI_SYMPHONYOFLOVERS     , SCB_MDEF );
-	set_sc( WA_MOONLIT_SERENADE       , SC_MOONLITSERENADE      , SI_MOONLITSERENADE      , SCB_MATK );
-	set_sc( MI_RUSH_WINDMILL          , SC_RUSHWINDMILL         , SI_RUSHWINDMILL         , SCB_BATK  );
-	set_sc( MI_ECHOSONG               , SC_ECHOSONG             , SI_ECHOSONG             , SCB_DEF2  );
-	set_sc( MI_HARMONIZE              , SC_HARMONIZE            , SI_HARMONIZE            , SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK );
-	set_sc_with_vfx( WM_POEMOFNETHERWORLD      , SC_NETHERWORLD          , SI_NETHERWORLD          , SCB_NONE );
-	set_sc_with_vfx( WM_VOICEOFSIREN           , SC_VOICEOFSIREN         , SI_VOICEOFSIREN         , SCB_NONE );
-	set_sc_with_vfx( WM_LULLABY_DEEPSLEEP      , SC_DEEPSLEEP            , SI_DEEPSLEEP            , SCB_NONE );
-	set_sc( WM_SIRCLEOFNATURE         , SC_SIRCLEOFNATURE       , SI_SIRCLEOFNATURE       , SCB_NONE );
-	set_sc( WM_GLOOMYDAY              , SC_GLOOMYDAY            , SI_GLOOMYDAY            , SCB_FLEE|SCB_ASPD );
-	set_sc( WM_SONG_OF_MANA           , SC_SONGOFMANA           , SI_SONGOFMANA           , SCB_NONE );
-	set_sc( WM_DANCE_WITH_WUG         , SC_DANCEWITHWUG         , SI_DANCEWITHWUG         , SCB_ASPD );
-	set_sc( WM_SATURDAY_NIGHT_FEVER   , SC_SATURDAYNIGHTFEVER   , SI_SATURDAYNIGHTFEVER   , SCB_BATK|SCB_DEF|SCB_FLEE|SCB_REGEN );
-	set_sc( WM_LERADS_DEW             , SC_LERADSDEW            , SI_LERADSDEW            , SCB_MAXHP );
-	set_sc( WM_MELODYOFSINK           , SC_MELODYOFSINK         , SI_MELODYOFSINK         , SCB_BATK|SCB_MATK );
-	set_sc( WM_BEYOND_OF_WARCRY       , SC_BEYONDOFWARCRY       , SI_WARCRYOFBEYOND       , SCB_BATK|SCB_MATK );
-	set_sc( WM_UNLIMITED_HUMMING_VOICE, SC_UNLIMITEDHUMMINGVOICE, SI_UNLIMITEDHUMMINGVOICE, SCB_NONE );
+	set_sc( WA_SWING_DANCE			, SC_SWINGDANCE			, SI_SWINGDANCE			, SCB_SPEED|SCB_ASPD );
+	set_sc( WA_SYMPHONY_OF_LOVER		, SC_SYMPHONYOFLOVER		, SI_SYMPHONYOFLOVERS		, SCB_MDEF );
+	set_sc( WA_MOONLIT_SERENADE		, SC_MOONLITSERENADE		, SI_MOONLITSERENADE		, SCB_MATK );
+	set_sc( MI_RUSH_WINDMILL		, SC_RUSHWINDMILL		, SI_RUSHWINDMILL		, SCB_BATK  );
+	set_sc( MI_ECHOSONG			, SC_ECHOSONG			, SI_ECHOSONG			, SCB_DEF2  );
+	set_sc( MI_HARMONIZE			, SC_HARMONIZE			, SI_HARMONIZE			, SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK );
+	set_sc_with_vfx( WM_POEMOFNETHERWORLD	, SC_NETHERWORLD		, SI_NETHERWORLD		, SCB_NONE );
+	set_sc_with_vfx( WM_VOICEOFSIREN	, SC_VOICEOFSIREN		, SI_VOICEOFSIREN		, SCB_NONE );
+	set_sc_with_vfx( WM_LULLABY_DEEPSLEEP	, SC_DEEPSLEEP			, SI_DEEPSLEEP			, SCB_NONE );
+	set_sc( WM_SIRCLEOFNATURE		, SC_SIRCLEOFNATURE		, SI_SIRCLEOFNATURE		, SCB_NONE );
+	set_sc( WM_GLOOMYDAY			, SC_GLOOMYDAY			, SI_GLOOMYDAY			, SCB_FLEE|SCB_ASPD );
+	set_sc( WM_SONG_OF_MANA			, SC_SONGOFMANA			, SI_SONGOFMANA			, SCB_NONE );
+	set_sc( WM_DANCE_WITH_WUG		, SC_DANCEWITHWUG		, SI_DANCEWITHWUG		, SCB_ASPD );
+	set_sc( WM_SATURDAY_NIGHT_FEVER		, SC_SATURDAYNIGHTFEVER		, SI_SATURDAYNIGHTFEVER		, SCB_BATK|SCB_DEF|SCB_FLEE|SCB_REGEN );
+	set_sc( WM_LERADS_DEW			, SC_LERADSDEW			, SI_LERADSDEW			, SCB_MAXHP );
+	set_sc( WM_MELODYOFSINK			, SC_MELODYOFSINK		, SI_MELODYOFSINK		, SCB_BATK|SCB_MATK );
+	set_sc( WM_BEYOND_OF_WARCRY		, SC_BEYONDOFWARCRY		, SI_WARCRYOFBEYOND		, SCB_BATK|SCB_MATK );
+	set_sc( WM_UNLIMITED_HUMMING_VOICE	, SC_UNLIMITEDHUMMINGVOICE	, SI_UNLIMITEDHUMMINGVOICE	, SCB_NONE );
 	/**
 	 * Sorcerer
 	 **/
-	set_sc( SO_FIREWALK          , SC_PROPERTYWALK    , SI_PROPERTYWALK    , SCB_NONE );
-	set_sc( SO_ELECTRICWALK      , SC_PROPERTYWALK    , SI_PROPERTYWALK    , SCB_NONE );
-	set_sc( SO_SPELLFIST         , SC_SPELLFIST       , SI_SPELLFIST       , SCB_NONE );
-	set_sc_with_vfx( SO_DIAMONDDUST       , SC_CRYSTALIZE      , SI_COLD   , SCB_NONE ); // it does show the snow icon on mobs but doesn't affect it.
-	add_sc( SO_CLOUD_KILL		 , SC_POISON );
-	set_sc( SO_STRIKING          , SC_STRIKING        , SI_STRIKING        , SCB_WATK|SCB_CRI );
-	set_sc( SO_WARMER            , SC_WARMER          , SI_WARMER          , SCB_NONE );
-	set_sc( SO_VACUUM_EXTREME    , SC_VACUUM_EXTREME  , SI_VACUUM_EXTREME  , SCB_NONE );
-	set_sc( SO_ARRULLO           , SC_DEEPSLEEP       , SI_DEEPSLEEP       , SCB_NONE );
-	set_sc( SO_FIRE_INSIGNIA     , SC_FIRE_INSIGNIA   , SI_FIRE_INSIGNIA   , SCB_MATK | SCB_BATK | SCB_WATK | SCB_ATK_ELE | SCB_REGEN );
-	set_sc( SO_WATER_INSIGNIA    , SC_WATER_INSIGNIA  , SI_WATER_INSIGNIA  , SCB_WATK | SCB_ATK_ELE | SCB_REGEN );
-	set_sc( SO_WIND_INSIGNIA     , SC_WIND_INSIGNIA   , SI_WIND_INSIGNIA   , SCB_WATK | SCB_ATK_ELE | SCB_REGEN );
-	set_sc( SO_EARTH_INSIGNIA    , SC_EARTH_INSIGNIA  , SI_EARTH_INSIGNIA  , SCB_MDEF|SCB_DEF|SCB_MAXHP|SCB_MAXSP|SCB_WATK | SCB_ATK_ELE | SCB_REGEN );
+	set_sc( SO_FIREWALK		, SC_PROPERTYWALK	, SI_PROPERTYWALK	, SCB_NONE );
+	set_sc( SO_ELECTRICWALK		, SC_PROPERTYWALK	, SI_PROPERTYWALK	, SCB_NONE );
+	set_sc( SO_SPELLFIST		, SC_SPELLFIST		, SI_SPELLFIST		, SCB_NONE );
+	set_sc_with_vfx( SO_DIAMONDDUST	, SC_CRYSTALIZE		, SI_COLD		, SCB_NONE ); // it does show the snow icon on mobs but doesn't affect it.
+	add_sc( SO_CLOUD_KILL		, SC_POISON		);
+	set_sc( SO_STRIKING		, SC_STRIKING		, SI_STRIKING		, SCB_WATK|SCB_CRI );
+	set_sc( SO_WARMER		, SC_WARMER		, SI_WARMER		, SCB_NONE );
+	set_sc( SO_VACUUM_EXTREME	, SC_VACUUM_EXTREME	, SI_VACUUM_EXTREME	, SCB_NONE );
+	set_sc( SO_ARRULLO		, SC_DEEPSLEEP		, SI_DEEPSLEEP		, SCB_NONE );
+	set_sc( SO_FIRE_INSIGNIA	, SC_FIRE_INSIGNIA	, SI_FIRE_INSIGNIA	, SCB_MATK | SCB_BATK | SCB_WATK | SCB_ATK_ELE | SCB_REGEN );
+	set_sc( SO_WATER_INSIGNIA	, SC_WATER_INSIGNIA	, SI_WATER_INSIGNIA	, SCB_WATK | SCB_ATK_ELE | SCB_REGEN );
+	set_sc( SO_WIND_INSIGNIA	, SC_WIND_INSIGNIA	, SI_WIND_INSIGNIA	, SCB_WATK | SCB_ATK_ELE | SCB_REGEN );
+	set_sc( SO_EARTH_INSIGNIA	, SC_EARTH_INSIGNIA	, SI_EARTH_INSIGNIA	, SCB_MDEF|SCB_DEF|SCB_MAXHP|SCB_MAXSP|SCB_WATK | SCB_ATK_ELE | SCB_REGEN );
 	/**
 	 * Genetic
 	 **/
-	set_sc( GN_CARTBOOST                  , SC_GN_CARTBOOST, SI_CARTSBOOST                 , SCB_SPEED );
-	set_sc( GN_THORNS_TRAP                , SC_THORNSTRAP  , SI_THORNTRAP                  , SCB_NONE );
-	set_sc_with_vfx( GN_BLOOD_SUCKER      , SC_BLOODSUCKER , SI_BLOODSUCKER                , SCB_NONE );
-	set_sc( GN_WALLOFTHORN                , SC_STOP        , SI_BLANK                      , SCB_NONE );
-	set_sc( GN_FIRE_EXPANSION_SMOKE_POWDER, SC_SMOKEPOWDER , SI_FIRE_EXPANSION_SMOKE_POWDER, SCB_NONE );
-	set_sc( GN_FIRE_EXPANSION_TEAR_GAS    , SC_TEARGAS     , SI_FIRE_EXPANSION_TEAR_GAS    , SCB_NONE );
-	set_sc( GN_MANDRAGORA                 , SC_MANDRAGORA  , SI_MANDRAGORA                 , SCB_INT );
+	set_sc( GN_CARTBOOST			, SC_GN_CARTBOOST	, SI_CARTSBOOST			, SCB_SPEED );
+	set_sc( GN_THORNS_TRAP			, SC_THORNSTRAP		, SI_THORNTRAP			, SCB_NONE );
+	set_sc_with_vfx( GN_BLOOD_SUCKER	, SC_BLOODSUCKER	, SI_BLOODSUCKER		, SCB_NONE );
+	set_sc( GN_WALLOFTHORN			, SC_STOP		, SI_BLANK			, SCB_NONE );
+	set_sc( GN_FIRE_EXPANSION_SMOKE_POWDER	, SC_SMOKEPOWDER	, SI_FIRE_EXPANSION_SMOKE_POWDER, SCB_NONE );
+	set_sc( GN_FIRE_EXPANSION_TEAR_GAS	, SC_TEARGAS		, SI_FIRE_EXPANSION_TEAR_GAS	, SCB_NONE );
+	set_sc( GN_MANDRAGORA			, SC_MANDRAGORA		, SI_MANDRAGORA			, SCB_INT );
 
 	// Elemental Spirit summoner's 'side' status changes.
-	set_sc( EL_CIRCLE_OF_FIRE  , SC_CIRCLE_OF_FIRE_OPTION, SI_CIRCLE_OF_FIRE_OPTION, SCB_NONE );
-	set_sc( EL_FIRE_CLOAK      , SC_FIRE_CLOAK_OPTION    , SI_FIRE_CLOAK_OPTION    , SCB_ALL );
-	set_sc( EL_WATER_SCREEN    , SC_WATER_SCREEN_OPTION  , SI_WATER_SCREEN_OPTION  , SCB_NONE );
-	set_sc( EL_WATER_DROP      , SC_WATER_DROP_OPTION    , SI_WATER_DROP_OPTION    , SCB_ALL );
-	set_sc( EL_WATER_BARRIER   , SC_WATER_BARRIER        , SI_WATER_BARRIER        , SCB_MDEF|SCB_WATK|SCB_MATK|SCB_FLEE );
-	set_sc( EL_WIND_STEP       , SC_WIND_STEP_OPTION     , SI_WIND_STEP_OPTION     , SCB_SPEED|SCB_FLEE );
-	set_sc( EL_WIND_CURTAIN    , SC_WIND_CURTAIN_OPTION  , SI_WIND_CURTAIN_OPTION  , SCB_ALL );
-	set_sc( EL_ZEPHYR          , SC_ZEPHYR               , SI_ZEPHYR               , SCB_FLEE );
-	set_sc( EL_SOLID_SKIN      , SC_SOLID_SKIN_OPTION    , SI_SOLID_SKIN_OPTION    , SCB_DEF|SCB_MAXHP );
-	set_sc( EL_STONE_SHIELD    , SC_STONE_SHIELD_OPTION  , SI_STONE_SHIELD_OPTION  , SCB_ALL );
-	set_sc( EL_POWER_OF_GAIA   , SC_POWER_OF_GAIA        , SI_POWER_OF_GAIA        , SCB_MAXHP|SCB_DEF|SCB_SPEED );
-	set_sc( EL_PYROTECHNIC     , SC_PYROTECHNIC_OPTION   , SI_PYROTECHNIC_OPTION   , SCB_WATK );
-	set_sc( EL_HEATER          , SC_HEATER_OPTION        , SI_HEATER_OPTION        , SCB_WATK );
-	set_sc( EL_TROPIC          , SC_TROPIC_OPTION        , SI_TROPIC_OPTION        , SCB_WATK );
-	set_sc( EL_AQUAPLAY        , SC_AQUAPLAY_OPTION      , SI_AQUAPLAY_OPTION      , SCB_MATK );
-	set_sc( EL_COOLER          , SC_COOLER_OPTION        , SI_COOLER_OPTION        , SCB_MATK );
-	set_sc( EL_CHILLY_AIR      , SC_CHILLY_AIR_OPTION    , SI_CHILLY_AIR_OPTION    , SCB_MATK );
-	set_sc( EL_GUST            , SC_GUST_OPTION          , SI_GUST_OPTION          , SCB_ASPD );
-	set_sc( EL_BLAST           , SC_BLAST_OPTION         , SI_BLAST_OPTION         , SCB_ASPD );
-	set_sc( EL_WILD_STORM      , SC_WILD_STORM_OPTION    , SI_WILD_STORM_OPTION    , SCB_ASPD );
-	set_sc( EL_PETROLOGY       , SC_PETROLOGY_OPTION     , SI_PETROLOGY_OPTION     , SCB_MAXHP );
-	set_sc( EL_CURSED_SOIL     , SC_CURSED_SOIL_OPTION   , SI_CURSED_SOIL_OPTION   , SCB_NONE );
-	set_sc( EL_UPHEAVAL        , SC_UPHEAVAL_OPTION      , SI_UPHEAVAL_OPTION      , SCB_NONE );
-	set_sc( EL_TIDAL_WEAPON    , SC_TIDAL_WEAPON_OPTION  , SI_TIDAL_WEAPON_OPTION  , SCB_ALL );
-	set_sc( EL_ROCK_CRUSHER    , SC_ROCK_CRUSHER         , SI_ROCK_CRUSHER         , SCB_DEF );
-	set_sc( EL_ROCK_CRUSHER_ATK, SC_ROCK_CRUSHER_ATK     , SI_ROCK_CRUSHER_ATK     , SCB_SPEED );
-
-	add_sc( KO_YAMIKUMO			, SC_HIDING		  );
-	set_sc_with_vfx( KO_JYUMONJIKIRI		, SC_JYUMONJIKIRI		 , SI_KO_JYUMONJIKIRI	   , SCB_NONE );
-	add_sc( KO_MAKIBISHI	    , SC_STUN		  );
-	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 );
-	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 );
-	set_sc( KG_KYOMU			, SC_KYOMU				 , SI_KYOMU				   , SCB_NONE );
-	set_sc( KG_KAGEMUSYA		, SC_KAGEMUSYA			 , SI_KAGEMUSYA			   , SCB_NONE );
-	set_sc( KG_KAGEHUMI			, SC_KAGEHUMI			 , SI_KG_KAGEHUMI		   , SCB_NONE );
-	set_sc( OB_ZANGETSU			, SC_ZANGETSU			 , SI_ZANGETSU			   , SCB_MATK|SCB_BATK );
-	set_sc_with_vfx( OB_AKAITSUKI		, SC_AKAITSUKI			 , SI_AKAITSUKI			   , SCB_NONE );
-	set_sc( OB_OBOROGENSOU		, SC_GENSOU				 , SI_GENSOU			   , SCB_NONE );
+	set_sc( EL_CIRCLE_OF_FIRE	, SC_CIRCLE_OF_FIRE_OPTION	, SI_CIRCLE_OF_FIRE_OPTION	, SCB_NONE );
+	set_sc( EL_FIRE_CLOAK		, SC_FIRE_CLOAK_OPTION		, SI_FIRE_CLOAK_OPTION		, SCB_ALL );
+	set_sc( EL_WATER_SCREEN		, SC_WATER_SCREEN_OPTION	, SI_WATER_SCREEN_OPTION	, SCB_NONE );
+	set_sc( EL_WATER_DROP		, SC_WATER_DROP_OPTION		, SI_WATER_DROP_OPTION		, SCB_ALL );
+	set_sc( EL_WATER_BARRIER	, SC_WATER_BARRIER		, SI_WATER_BARRIER		, SCB_MDEF|SCB_WATK|SCB_MATK|SCB_FLEE );
+	set_sc( EL_WIND_STEP		, SC_WIND_STEP_OPTION		, SI_WIND_STEP_OPTION		, SCB_SPEED|SCB_FLEE );
+	set_sc( EL_WIND_CURTAIN		, SC_WIND_CURTAIN_OPTION	, SI_WIND_CURTAIN_OPTION	, SCB_ALL );
+	set_sc( EL_ZEPHYR		, SC_ZEPHYR			, SI_ZEPHYR			, SCB_FLEE );
+	set_sc( EL_SOLID_SKIN		, SC_SOLID_SKIN_OPTION		, SI_SOLID_SKIN_OPTION		, SCB_DEF|SCB_MAXHP );
+	set_sc( EL_STONE_SHIELD		, SC_STONE_SHIELD_OPTION	, SI_STONE_SHIELD_OPTION	, SCB_ALL );
+	set_sc( EL_POWER_OF_GAIA	, SC_POWER_OF_GAIA		, SI_POWER_OF_GAIA		, SCB_MAXHP|SCB_DEF|SCB_SPEED );
+	set_sc( EL_PYROTECHNIC		, SC_PYROTECHNIC_OPTION		, SI_PYROTECHNIC_OPTION		, SCB_WATK );
+	set_sc( EL_HEATER		, SC_HEATER_OPTION		, SI_HEATER_OPTION		, SCB_WATK );
+	set_sc( EL_TROPIC		, SC_TROPIC_OPTION		, SI_TROPIC_OPTION		, SCB_WATK );
+	set_sc( EL_AQUAPLAY		, SC_AQUAPLAY_OPTION		, SI_AQUAPLAY_OPTION		, SCB_MATK );
+	set_sc( EL_COOLER		, SC_COOLER_OPTION		, SI_COOLER_OPTION		, SCB_MATK );
+	set_sc( EL_CHILLY_AIR		, SC_CHILLY_AIR_OPTION		, SI_CHILLY_AIR_OPTION		, SCB_MATK );
+	set_sc( EL_GUST			, SC_GUST_OPTION		, SI_GUST_OPTION		, SCB_ASPD );
+	set_sc( EL_BLAST		, SC_BLAST_OPTION		, SI_BLAST_OPTION		, SCB_ASPD );
+	set_sc( EL_WILD_STORM		, SC_WILD_STORM_OPTION		, SI_WILD_STORM_OPTION		, SCB_ASPD );
+	set_sc( EL_PETROLOGY		, SC_PETROLOGY_OPTION		, SI_PETROLOGY_OPTION		, SCB_MAXHP );
+	set_sc( EL_CURSED_SOIL		, SC_CURSED_SOIL_OPTION		, SI_CURSED_SOIL_OPTION		, SCB_NONE );
+	set_sc( EL_UPHEAVAL		, SC_UPHEAVAL_OPTION		, SI_UPHEAVAL_OPTION		, SCB_NONE );
+	set_sc( EL_TIDAL_WEAPON		, SC_TIDAL_WEAPON_OPTION	, SI_TIDAL_WEAPON_OPTION	, SCB_ALL );
+	set_sc( EL_ROCK_CRUSHER		, SC_ROCK_CRUSHER		, SI_ROCK_CRUSHER		, SCB_DEF );
+	set_sc( EL_ROCK_CRUSHER_ATK	, SC_ROCK_CRUSHER_ATK		, SI_ROCK_CRUSHER_ATK		, SCB_SPEED );
+
+	add_sc( KO_YAMIKUMO			, SC_HIDING		);
+	set_sc_with_vfx( KO_JYUMONJIKIRI	, SC_JYUMONJIKIRI	, SI_KO_JYUMONJIKIRI	, SCB_NONE );
+	add_sc( KO_MAKIBISHI			, SC_STUN		);
+	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 );
+	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 );
+	set_sc( KG_KYOMU			, SC_KYOMU		, SI_KYOMU		, SCB_NONE );
+	set_sc( KG_KAGEMUSYA			, SC_KAGEMUSYA		, SI_KAGEMUSYA		, SCB_NONE );
+	set_sc( KG_KAGEHUMI			, SC_KAGEHUMI		, SI_KG_KAGEHUMI	, SCB_NONE );
+	set_sc( OB_ZANGETSU			, SC_ZANGETSU		, SI_ZANGETSU		, SCB_MATK|SCB_BATK );
+	set_sc_with_vfx( OB_AKAITSUKI		, SC_AKAITSUKI		, SI_AKAITSUKI		, SCB_NONE );
+	set_sc( OB_OBOROGENSOU			, SC_GENSOU		, SI_GENSOU		, SCB_NONE );
 
 	// Storing the target job rather than simply SC_SPIRIT simplifies code later on.
-	SkillStatusChangeTable[SL_ALCHEMIST]   = (sc_type)MAPID_ALCHEMIST,
-	SkillStatusChangeTable[SL_MONK]        = (sc_type)MAPID_MONK,
-	SkillStatusChangeTable[SL_STAR]        = (sc_type)MAPID_STAR_GLADIATOR,
-	SkillStatusChangeTable[SL_SAGE]        = (sc_type)MAPID_SAGE,
-	SkillStatusChangeTable[SL_CRUSADER]    = (sc_type)MAPID_CRUSADER,
-	SkillStatusChangeTable[SL_SUPERNOVICE] = (sc_type)MAPID_SUPER_NOVICE,
-	SkillStatusChangeTable[SL_KNIGHT]      = (sc_type)MAPID_KNIGHT,
-	SkillStatusChangeTable[SL_WIZARD]      = (sc_type)MAPID_WIZARD,
-	SkillStatusChangeTable[SL_PRIEST]      = (sc_type)MAPID_PRIEST,
-	SkillStatusChangeTable[SL_BARDDANCER]  = (sc_type)MAPID_BARDDANCER,
-	SkillStatusChangeTable[SL_ROGUE]       = (sc_type)MAPID_ROGUE,
-	SkillStatusChangeTable[SL_ASSASIN]     = (sc_type)MAPID_ASSASSIN,
-	SkillStatusChangeTable[SL_BLACKSMITH]  = (sc_type)MAPID_BLACKSMITH,
-	SkillStatusChangeTable[SL_HUNTER]      = (sc_type)MAPID_HUNTER,
-	SkillStatusChangeTable[SL_SOULLINKER]  = (sc_type)MAPID_SOUL_LINKER,
+	SkillStatusChangeTable[SL_ALCHEMIST]	= (sc_type)MAPID_ALCHEMIST,
+	SkillStatusChangeTable[SL_MONK]		= (sc_type)MAPID_MONK,
+	SkillStatusChangeTable[SL_STAR]		= (sc_type)MAPID_STAR_GLADIATOR,
+	SkillStatusChangeTable[SL_SAGE]		= (sc_type)MAPID_SAGE,
+	SkillStatusChangeTable[SL_CRUSADER]	= (sc_type)MAPID_CRUSADER,
+	SkillStatusChangeTable[SL_SUPERNOVICE]	= (sc_type)MAPID_SUPER_NOVICE,
+	SkillStatusChangeTable[SL_KNIGHT]	= (sc_type)MAPID_KNIGHT,
+	SkillStatusChangeTable[SL_WIZARD]	= (sc_type)MAPID_WIZARD,
+	SkillStatusChangeTable[SL_PRIEST]	= (sc_type)MAPID_PRIEST,
+	SkillStatusChangeTable[SL_BARDDANCER]	= (sc_type)MAPID_BARDDANCER,
+	SkillStatusChangeTable[SL_ROGUE]	= (sc_type)MAPID_ROGUE,
+	SkillStatusChangeTable[SL_ASSASIN]	= (sc_type)MAPID_ASSASSIN,
+	SkillStatusChangeTable[SL_BLACKSMITH]	= (sc_type)MAPID_BLACKSMITH,
+	SkillStatusChangeTable[SL_HUNTER]	= (sc_type)MAPID_HUNTER,
+	SkillStatusChangeTable[SL_SOULLINKER]	= (sc_type)MAPID_SOUL_LINKER,
 
 	//Status that don't have a skill associated.
 	StatusIconChangeTable[SC_WEIGHT50] = SI_WEIGHT50;
@@ -998,65 +998,70 @@ void initChangeTables(void) {
 		StatusIconChangeTable[SC_HALLUCINATION] = SI_BLANK;
 
 	/* StatusChangeState (SCS_) NOMOVE */
-	StatusChangeStateTable[SC_ANKLE]               |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_AUTOCOUNTER]         |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_TRICKDEAD]           |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_BLADESTOP]           |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_BLADESTOP_WAIT]      |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_GOSPEL]              |= SCS_NOMOVE|SCS_NOMOVECOND;
-	StatusChangeStateTable[SC_BASILICA]            |= SCS_NOMOVE|SCS_NOMOVECOND;
-	StatusChangeStateTable[SC_STOP]                |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_CLOSECONFINE]        |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_CLOSECONFINE2]       |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_TINDER_BREAKER]     |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_TINDER_BREAKER2]     |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_MADNESSCANCEL]       |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_GRAVITATION]         |= SCS_NOMOVE|SCS_NOMOVECOND;
-	StatusChangeStateTable[SC_WHITEIMPRISON]       |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_ELECTRICSHOCKER]     |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_BITE]                |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_THORNSTRAP]          |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_MAGNETICFIELD]       |= SCS_NOMOVE;
-	StatusChangeStateTable[SC__MANHOLE]            |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_CURSEDCIRCLE_ATKER]  |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_CURSEDCIRCLE_TARGET] |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_CRYSTALIZE]          |= SCS_NOMOVE|SCS_NOMOVECOND;
-	StatusChangeStateTable[SC_NETHERWORLD]         |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_CAMOUFLAGE]          |= SCS_NOMOVE|SCS_NOMOVECOND;
-	StatusChangeStateTable[SC_MEIKYOUSISUI]        |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_KAGEHUMI]            |= SCS_NOMOVE;
-	StatusChangeStateTable[SC_KYOUGAKU]            |= SCS_NOMOVE;
+	StatusChangeStateTable[SC_ANKLE]		|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_AUTOCOUNTER]		|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_TRICKDEAD]		|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_BLADESTOP]		|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_BLADESTOP_WAIT]	|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_GOSPEL]		|= SCS_NOMOVE|SCS_NOMOVECOND;
+	StatusChangeStateTable[SC_BASILICA]		|= SCS_NOMOVE|SCS_NOMOVECOND;
+	StatusChangeStateTable[SC_STOP]			|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_CLOSECONFINE]		|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_CLOSECONFINE2]	|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_TINDER_BREAKER]	|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_TINDER_BREAKER2]	|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_MADNESSCANCEL]	|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_GRAVITATION]		|= SCS_NOMOVE|SCS_NOMOVECOND;
+	StatusChangeStateTable[SC_WHITEIMPRISON]	|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_ELECTRICSHOCKER]	|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_BITE]			|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_THORNSTRAP]		|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_MAGNETICFIELD]	|= SCS_NOMOVE;
+	StatusChangeStateTable[SC__MANHOLE]		|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_CURSEDCIRCLE_ATKER]	|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_CURSEDCIRCLE_TARGET]	|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_CRYSTALIZE]		|= SCS_NOMOVE|SCS_NOMOVECOND;
+	StatusChangeStateTable[SC_NETHERWORLD]		|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_CAMOUFLAGE]		|= SCS_NOMOVE|SCS_NOMOVECOND;
+	StatusChangeStateTable[SC_MEIKYOUSISUI]		|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_KAGEHUMI]		|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_KYOUGAKU]		|= SCS_NOMOVE;
+	StatusChangeStateTable[SC_PARALYSIS]		|= SCS_NOMOVE;
 
 	/* StatusChangeState (SCS_) NOPICKUPITEMS */
-	StatusChangeStateTable[SC_HIDING]              |= SCS_NOPICKITEM;
-	StatusChangeStateTable[SC_CLOAKING]            |= SCS_NOPICKITEM;
-	StatusChangeStateTable[SC_TRICKDEAD]           |= SCS_NOPICKITEM;
-	StatusChangeStateTable[SC_BLADESTOP]           |= SCS_NOPICKITEM;
-	StatusChangeStateTable[SC_CLOAKINGEXCEED]      |= SCS_NOPICKITEM;
-	StatusChangeStateTable[SC_NOCHAT]              |= SCS_NOPICKITEM|SCS_NOPICKITEMCOND;
+	StatusChangeStateTable[SC_HIDING]		|= SCS_NOPICKITEM;
+	StatusChangeStateTable[SC_CLOAKING]		|= SCS_NOPICKITEM;
+	StatusChangeStateTable[SC_TRICKDEAD]		|= SCS_NOPICKITEM;
+	StatusChangeStateTable[SC_BLADESTOP]		|= SCS_NOPICKITEM;
+	StatusChangeStateTable[SC_CLOAKINGEXCEED]	|= SCS_NOPICKITEM;
+	StatusChangeStateTable[SC_NOCHAT]		|= SCS_NOPICKITEM|SCS_NOPICKITEMCOND;
 
 	/* StatusChangeState (SCS_) NODROPITEMS */
-	StatusChangeStateTable[SC_AUTOCOUNTER]         |= SCS_NODROPITEM;
-	StatusChangeStateTable[SC_BLADESTOP]           |= SCS_NODROPITEM;
-	StatusChangeStateTable[SC_NOCHAT]              |= SCS_NODROPITEM|SCS_NODROPITEMCOND;
+	StatusChangeStateTable[SC_AUTOCOUNTER]		|= SCS_NODROPITEM;
+	StatusChangeStateTable[SC_BLADESTOP]		|= SCS_NODROPITEM;
+	StatusChangeStateTable[SC_NOCHAT]		|= SCS_NODROPITEM|SCS_NODROPITEMCOND;
 
 	/* StatusChangeState (SCS_) NOCAST (skills) */
-	StatusChangeStateTable[SC_SILENCE]             |= SCS_NOCAST;
-	StatusChangeStateTable[SC_STEELBODY]           |= SCS_NOCAST;
-	StatusChangeStateTable[SC_BERSERK]             |= SCS_NOCAST;
-	StatusChangeStateTable[SC__BLOODYLUST]         |= SCS_NOCAST;
-	StatusChangeStateTable[SC_OBLIVIONCURSE]       |= SCS_NOCAST;
-	StatusChangeStateTable[SC_WHITEIMPRISON]       |= SCS_NOCAST;
-	StatusChangeStateTable[SC__INVISIBILITY]       |= SCS_NOCAST;
-	StatusChangeStateTable[SC_CRYSTALIZE]          |= SCS_NOCAST|SCS_NOCASTCOND;
-	StatusChangeStateTable[SC__IGNORANCE]          |= SCS_NOCAST;
-	StatusChangeStateTable[SC_DEEPSLEEP]           |= SCS_NOCAST;
-	StatusChangeStateTable[SC_SATURDAYNIGHTFEVER]  |= SCS_NOCAST;
-	StatusChangeStateTable[SC_CURSEDCIRCLE_TARGET] |= SCS_NOCAST;
-	StatusChangeStateTable[SC_SILENCE]             |= SCS_NOCAST;
-
-	//Homon S
-	StatusChangeStateTable[SC_PARALYSIS]               |= SCS_NOMOVE;
+	StatusChangeStateTable[SC_SILENCE]		|= SCS_NOCAST;
+	StatusChangeStateTable[SC_STEELBODY]		|= SCS_NOCAST;
+	StatusChangeStateTable[SC_BERSERK]		|= SCS_NOCAST;
+	StatusChangeStateTable[SC__BLOODYLUST]		|= SCS_NOCAST;
+	StatusChangeStateTable[SC_OBLIVIONCURSE]	|= SCS_NOCAST;
+	StatusChangeStateTable[SC_WHITEIMPRISON]	|= SCS_NOCAST;
+	StatusChangeStateTable[SC__INVISIBILITY]	|= SCS_NOCAST;
+	StatusChangeStateTable[SC_CRYSTALIZE]		|= SCS_NOCAST|SCS_NOCASTCOND;
+	StatusChangeStateTable[SC__IGNORANCE]		|= SCS_NOCAST;
+	StatusChangeStateTable[SC_DEEPSLEEP]		|= SCS_NOCAST;
+	StatusChangeStateTable[SC_SATURDAYNIGHTFEVER]	|= SCS_NOCAST;
+	StatusChangeStateTable[SC_CURSEDCIRCLE_TARGET]	|= SCS_NOCAST;
+	StatusChangeStateTable[SC_SILENCE]		|= SCS_NOCAST;
+
+	/* StatusChangeState (SCS_) NOCHAT (skills) */
+	StatusChangeStateTable[SC_BERSERK]		|= SCS_NOCHAT;
+	StatusChangeStateTable[SC_SATURDAYNIGHTFEVER]	|= SCS_NOCHAT;
+	StatusChangeStateTable[SC_DEEPSLEEP]		|= SCS_NOCHAT;
+	StatusChangeStateTable[SC__BLOODYLUST]		|= SCS_NOCHAT;
+	StatusChangeStateTable[SC_NOCHAT]		|= SCS_NOCHAT|SCS_NOCHATCOND;
 
 }
 
@@ -3589,6 +3594,14 @@ void status_calc_state( struct block_list *bl, struct status_change *sc, enum sc
 		}
 	}
 
+	/* can't chat */
+	if( flag&SCS_NOCHAT ) {
+		if( !(flag&SCS_NOCHATCOND) ) {
+			sc->cant.chat += ( start ? 1 : -1 );
+		} else if(sc->data[SC_NOCHAT] && sc->data[SC_NOCHAT]->val1&MANNER_NOCHAT)
+			sc->cant.chat += ( start ? 1 : -1 );
+	}
+
 	/* player-only states */
 	if( bl->type == BL_PC ) {
 

+ 144 - 142
src/map/status.h

@@ -22,13 +22,12 @@ struct status_change;
 #endif
 
 enum refine_type {
-	REFINE_TYPE_ARMOR   = 0,
-	REFINE_TYPE_WEAPON1 = 1,
-	REFINE_TYPE_WEAPON2 = 2,
-	REFINE_TYPE_WEAPON3 = 3,
-	REFINE_TYPE_WEAPON4 = 4,
-
-	REFINE_TYPE_MAX     = 5
+	REFINE_TYPE_ARMOR	= 0,
+	REFINE_TYPE_WEAPON1	= 1,
+	REFINE_TYPE_WEAPON2	= 2,
+	REFINE_TYPE_WEAPON3	= 3,
+	REFINE_TYPE_WEAPON4	= 4,
+	REFINE_TYPE_MAX		= 5
 };
 
 int status_get_refine_chance(enum refine_type wlv, int refine);
@@ -1396,13 +1395,13 @@ enum si_type {
 // JOINTBEAT stackable ailments
 enum e_joint_break
 {
-	BREAK_ANKLE    = 0x01, // MoveSpeed reduced by 50%
-	BREAK_WRIST    = 0x02, // ASPD reduced by 25%
-	BREAK_KNEE     = 0x04, // MoveSpeed reduced by 30%, ASPD reduced by 10%
-	BREAK_SHOULDER = 0x08, // DEF reduced by 50%
-	BREAK_WAIST    = 0x10, // DEF reduced by 25%, ATK reduced by 25%
-	BREAK_NECK     = 0x20, // current attack does 2x damage, inflicts 'bleeding' for 30 seconds
-	BREAK_FLAGS    = BREAK_ANKLE | BREAK_WRIST | BREAK_KNEE | BREAK_SHOULDER | BREAK_WAIST | BREAK_NECK,
+	BREAK_ANKLE	= 0x01, // MoveSpeed reduced by 50%
+	BREAK_WRIST	= 0x02, // ASPD reduced by 25%
+	BREAK_KNEE	= 0x04, // MoveSpeed reduced by 30%, ASPD reduced by 10%
+	BREAK_SHOULDER	= 0x08, // DEF reduced by 50%
+	BREAK_WAIST	= 0x10, // DEF reduced by 25%, ATK reduced by 25%
+	BREAK_NECK	= 0x20, // current attack does 2x damage, inflicts 'bleeding' for 30 seconds
+	BREAK_FLAGS	= BREAK_ANKLE | BREAK_WRIST | BREAK_KNEE | BREAK_SHOULDER | BREAK_WAIST | BREAK_NECK,
 };
 
 extern int current_equip_item_index;
@@ -1411,27 +1410,27 @@ extern int current_equip_card_id;
 //Mode definitions to clear up code reading. [Skotlex]
 enum e_mode
 {
-	MD_CANMOVE            = 0x000001,
-	MD_LOOTER             = 0x000002,
-	MD_AGGRESSIVE         = 0x000004,
-	MD_ASSIST             = 0x000008,
-	MD_CASTSENSOR_IDLE    = 0x000010,
-	MD_BOSS               = 0x000020,
-	MD_PLANT              = 0x000040,
-	MD_CANATTACK          = 0x000080,
-	MD_DETECTOR           = 0x000100,
-	MD_CASTSENSOR_CHASE   = 0x000200,
-	MD_CHANGECHASE        = 0x000400,
-	MD_ANGRY              = 0x000800,
-	MD_CHANGETARGET_MELEE = 0x001000,
-	MD_CHANGETARGET_CHASE = 0x002000,
-	MD_TARGETWEAK         = 0x004000,
-	MD_IGNOREMELEE        = 0x010000, //takes 1 HP damage from melee physical attacks
-	MD_IGNOREMAGIC        = 0x020000, //takes 1 HP damage from magic
-	MD_IGNORERANGED       = 0x040000, //takes 1 HP damage from ranged physical attacks
-	MD_MVP                = 0x080000, //MVP - instant kill / coma-like skills don't work
-	MD_IGNOREMISC         = 0x100000, //takes 1 HP damage from "none" attack type
-	MD_KNOCKBACK_IMMUNE   = 0x200000, //can't be knocked back
+	MD_CANMOVE		= 0x000001,
+	MD_LOOTER		= 0x000002,
+	MD_AGGRESSIVE		= 0x000004,
+	MD_ASSIST		= 0x000008,
+	MD_CASTSENSOR_IDLE	= 0x000010,
+	MD_BOSS			= 0x000020,
+	MD_PLANT		= 0x000040,
+	MD_CANATTACK		= 0x000080,
+	MD_DETECTOR		= 0x000100,
+	MD_CASTSENSOR_CHASE	= 0x000200,
+	MD_CHANGECHASE		= 0x000400,
+	MD_ANGRY		= 0x000800,
+	MD_CHANGETARGET_MELEE	= 0x001000,
+	MD_CHANGETARGET_CHASE	= 0x002000,
+	MD_TARGETWEAK		= 0x004000,
+	MD_IGNOREMELEE		= 0x010000, //takes 1 HP damage from melee physical attacks
+	MD_IGNOREMAGIC		= 0x020000, //takes 1 HP damage from magic
+	MD_IGNORERANGED		= 0x040000, //takes 1 HP damage from ranged physical attacks
+	MD_MVP			= 0x080000, //MVP - instant kill / coma-like skills don't work
+	MD_IGNOREMISC		= 0x100000, //takes 1 HP damage from "none" attack type
+	MD_KNOCKBACK_IMMUNE	= 0x200000, //can't be knocked back
 };
 #define MD_MASK 0x00FFFF
 #define ATR_MASK 0xFF0000
@@ -1454,142 +1453,144 @@ enum {
 
 //opt2: Stackable status changes.
 enum {
-	OPT2_POISON       = 0x0001,
-	OPT2_CURSE        = 0x0002,
-	OPT2_SILENCE      = 0x0004,
-	OPT2_SIGNUMCRUCIS = 0x0008,
-	OPT2_BLIND        = 0x0010,
-	OPT2_ANGELUS      = 0x0020,
-	OPT2_BLEEDING     = 0x0040,
-	OPT2_DPOISON      = 0x0080,
-	OPT2_FEAR         = 0x0100,
+	OPT2_POISON		= 0x0001,
+	OPT2_CURSE		= 0x0002,
+	OPT2_SILENCE		= 0x0004,
+	OPT2_SIGNUMCRUCIS	= 0x0008,
+	OPT2_BLIND		= 0x0010,
+	OPT2_ANGELUS		= 0x0020,
+	OPT2_BLEEDING		= 0x0040,
+	OPT2_DPOISON		= 0x0080,
+	OPT2_FEAR		= 0x0100,
 };
 
 //opt3: (SHOW_EFST_*)
 enum {
-	OPT3_NORMAL           = 0x00000000,
-	OPT3_QUICKEN          = 0x00000001,
-	OPT3_OVERTHRUST       = 0x00000002,
-	OPT3_ENERGYCOAT       = 0x00000004,
-	OPT3_EXPLOSIONSPIRITS = 0x00000008,
-	OPT3_STEELBODY        = 0x00000010,
-	OPT3_BLADESTOP        = 0x00000020,
-	OPT3_AURABLADE        = 0x00000040,
-	OPT3_BERSERK          = 0x00000080,
-	OPT3_LIGHTBLADE       = 0x00000100,
-	OPT3_MOONLIT          = 0x00000200,
-	OPT3_MARIONETTE       = 0x00000400,
-	OPT3_ASSUMPTIO        = 0x00000800,
-	OPT3_WARM             = 0x00001000,
-	OPT3_KAITE            = 0x00002000,
-	OPT3_BUNSIN           = 0x00004000,
-	OPT3_SOULLINK         = 0x00008000,
-	OPT3_UNDEAD           = 0x00010000,
-	OPT3_CONTRACT         = 0x00020000,
+	OPT3_NORMAL		= 0x00000000,
+	OPT3_QUICKEN		= 0x00000001,
+	OPT3_OVERTHRUST		= 0x00000002,
+	OPT3_ENERGYCOAT		= 0x00000004,
+	OPT3_EXPLOSIONSPIRITS	= 0x00000008,
+	OPT3_STEELBODY		= 0x00000010,
+	OPT3_BLADESTOP		= 0x00000020,
+	OPT3_AURABLADE		= 0x00000040,
+	OPT3_BERSERK		= 0x00000080,
+	OPT3_LIGHTBLADE		= 0x00000100,
+	OPT3_MOONLIT		= 0x00000200,
+	OPT3_MARIONETTE		= 0x00000400,
+	OPT3_ASSUMPTIO		= 0x00000800,
+	OPT3_WARM		= 0x00001000,
+	OPT3_KAITE		= 0x00002000,
+	OPT3_BUNSIN		= 0x00004000,
+	OPT3_SOULLINK		= 0x00008000,
+	OPT3_UNDEAD		= 0x00010000,
+	OPT3_CONTRACT		= 0x00020000,
 };
 
 enum {
-	OPTION_NOTHING   = 0x00000000,
-	OPTION_SIGHT     = 0x00000001,
-	OPTION_HIDE      = 0x00000002,
-	OPTION_CLOAK     = 0x00000004,
-	OPTION_FALCON    = 0x00000010,
-	OPTION_RIDING    = 0x00000020,
-	OPTION_INVISIBLE = 0x00000040,
-	OPTION_ORCISH    = 0x00000800,
-	OPTION_WEDDING   = 0x00001000,
-	OPTION_RUWACH    = 0x00002000,
-	OPTION_CHASEWALK = 0x00004000,
-	OPTION_FLYING    = 0x00008000, //Note that clientside Flying and Xmas are 0x8000 for clients prior to 2007.
-	OPTION_XMAS      = 0x00010000,
-	OPTION_TRANSFORM = 0x00020000,
-	OPTION_SUMMER    = 0x00040000,
-	OPTION_DRAGON1   = 0x00080000,
-	OPTION_WUG       = 0x00100000,
-	OPTION_WUGRIDER  = 0x00200000,
-	OPTION_MADOGEAR  = 0x00400000,
-	OPTION_DRAGON2   = 0x00800000,
-	OPTION_DRAGON3   = 0x01000000,
-	OPTION_DRAGON4   = 0x02000000,
-	OPTION_DRAGON5   = 0x04000000,
-	OPTION_HANBOK    = 0x08000000,
-	OPTION_MOUNTING  = 0x10000000,
+	OPTION_NOTHING		= 0x00000000,
+	OPTION_SIGHT		= 0x00000001,
+	OPTION_HIDE		= 0x00000002,
+	OPTION_CLOAK		= 0x00000004,
+	OPTION_FALCON		= 0x00000010,
+	OPTION_RIDING		= 0x00000020,
+	OPTION_INVISIBLE	= 0x00000040,
+	OPTION_ORCISH		= 0x00000800,
+	OPTION_WEDDING		= 0x00001000,
+	OPTION_RUWACH		= 0x00002000,
+	OPTION_CHASEWALK	= 0x00004000,
+	OPTION_FLYING		= 0x00008000, //Note that clientside Flying and Xmas are 0x8000 for clients prior to 2007.
+	OPTION_XMAS		= 0x00010000,
+	OPTION_TRANSFORM	= 0x00020000,
+	OPTION_SUMMER		= 0x00040000,
+	OPTION_DRAGON1		= 0x00080000,
+	OPTION_WUG		= 0x00100000,
+	OPTION_WUGRIDER		= 0x00200000,
+	OPTION_MADOGEAR		= 0x00400000,
+	OPTION_DRAGON2		= 0x00800000,
+	OPTION_DRAGON3		= 0x01000000,
+	OPTION_DRAGON4		= 0x02000000,
+	OPTION_DRAGON5		= 0x04000000,
+	OPTION_HANBOK		= 0x08000000,
+	OPTION_MOUNTING		= 0x10000000,
 
 #ifndef NEW_CARTS
-	OPTION_CART1     = 0x00000008,
-	OPTION_CART2     = 0x00000080,
-	OPTION_CART3     = 0x00000100,
-	OPTION_CART4     = 0x00000200,
-	OPTION_CART5     = 0x00000400,
+	OPTION_CART1	= 0x00000008,
+	OPTION_CART2	= 0x00000080,
+	OPTION_CART3	= 0x00000100,
+	OPTION_CART4	= 0x00000200,
+	OPTION_CART5	= 0x00000400,
 
 	/*  compound constant for older carts */
-	OPTION_CART      = OPTION_CART1|OPTION_CART2|OPTION_CART3|OPTION_CART4|OPTION_CART5,
+	OPTION_CART	= OPTION_CART1|OPTION_CART2|OPTION_CART3|OPTION_CART4|OPTION_CART5,
 #endif
 
 	// compound constants
-	OPTION_DRAGON    = OPTION_DRAGON1|OPTION_DRAGON2|OPTION_DRAGON3|OPTION_DRAGON4|OPTION_DRAGON5,
+	OPTION_DRAGON	= OPTION_DRAGON1|OPTION_DRAGON2|OPTION_DRAGON3|OPTION_DRAGON4|OPTION_DRAGON5,
 };
 
 //Defines for the manner system [Skotlex]
 enum manner_flags
 {
-	MANNER_NOCHAT    = 0x01,
-	MANNER_NOSKILL   = 0x02,
-	MANNER_NOCOMMAND = 0x04,
-	MANNER_NOITEM    = 0x08,
-	MANNER_NOROOM    = 0x10,
+	MANNER_NOCHAT		= 0x01,
+	MANNER_NOSKILL		= 0x02,
+	MANNER_NOCOMMAND	= 0x04,
+	MANNER_NOITEM		= 0x08,
+	MANNER_NOROOM		= 0x10,
 };
 
 /* Status Change State Flags */
 enum scs_flag {
-	SCS_NOMOVECOND      = 0x00000001, /* cond flag for nomove */
-	SCS_NOMOVE          = 0x00000002, /* unit unable to move */
-	SCS_NOPICKITEMCOND  = 0x00000004, /* cond flag for nopickitem */
-	SCS_NOPICKITEM      = 0x00000008, /* player unable to pick up items */
-	SCS_NODROPITEMCOND  = 0x00000010, /* cond flag for nodropitem */
-	SCS_NODROPITEM      = 0x00000020, /* player unable to drop items */
-	SCS_NOCASTCOND      = 0x00000040, /* cond flag for nocast */
-	SCS_NOCAST          = 0x00000080, /* unit unable to cast skills */
+	SCS_NOMOVECOND		= 0x00000001, /* cond flag for nomove */
+	SCS_NOMOVE		= 0x00000002, /* unit unable to move */
+	SCS_NOPICKITEMCOND	= 0x00000004, /* cond flag for nopickitem */
+	SCS_NOPICKITEM		= 0x00000008, /* player unable to pick up items */
+	SCS_NODROPITEMCOND	= 0x00000010, /* cond flag for nodropitem */
+	SCS_NODROPITEM		= 0x00000020, /* player unable to drop items */
+	SCS_NOCASTCOND		= 0x00000040, /* cond flag for nocast */
+	SCS_NOCAST		= 0x00000080, /* unit unable to cast skills */
+	SCS_NOCHAT		= 0x00000100, /* unit can't talk */
+	SCS_NOCHATCOND		= 0x00000200, /* cond flag for notalk */
 };
 
 //Define flags for the status_calc_bl function. [Skotlex]
 enum scb_flag
 {
-	SCB_NONE    = 0x00000000,
-	SCB_BASE    = 0x00000001,
-	SCB_MAXHP   = 0x00000002,
-	SCB_MAXSP   = 0x00000004,
-	SCB_STR     = 0x00000008,
-	SCB_AGI     = 0x00000010,
-	SCB_VIT     = 0x00000020,
-	SCB_INT     = 0x00000040,
-	SCB_DEX     = 0x00000080,
-	SCB_LUK     = 0x00000100,
-	SCB_BATK    = 0x00000200,
-	SCB_WATK    = 0x00000400,
-	SCB_MATK    = 0x00000800,
-	SCB_HIT     = 0x00001000,
-	SCB_FLEE    = 0x00002000,
-	SCB_DEF     = 0x00004000,
-	SCB_DEF2    = 0x00008000,
-	SCB_MDEF    = 0x00010000,
-	SCB_MDEF2   = 0x00020000,
-	SCB_SPEED   = 0x00040000,
-	SCB_ASPD    = 0x00080000,
-	SCB_DSPD    = 0x00100000,
-	SCB_CRI     = 0x00200000,
-	SCB_FLEE2   = 0x00400000,
-	SCB_ATK_ELE = 0x00800000,
-	SCB_DEF_ELE = 0x01000000,
-	SCB_MODE    = 0x02000000,
-	SCB_SIZE    = 0x04000000,
-	SCB_RACE    = 0x08000000,
-	SCB_RANGE   = 0x10000000,
-	SCB_REGEN   = 0x20000000,
-	SCB_DYE     = 0x40000000, // force cloth-dye change to 0 to avoid client crashes.
+	SCB_NONE	= 0x00000000,
+	SCB_BASE	= 0x00000001,
+	SCB_MAXHP	= 0x00000002,
+	SCB_MAXSP	= 0x00000004,
+	SCB_STR		= 0x00000008,
+	SCB_AGI		= 0x00000010,
+	SCB_VIT		= 0x00000020,
+	SCB_INT		= 0x00000040,
+	SCB_DEX		= 0x00000080,
+	SCB_LUK		= 0x00000100,
+	SCB_BATK	= 0x00000200,
+	SCB_WATK	= 0x00000400,
+	SCB_MATK	= 0x00000800,
+	SCB_HIT		= 0x00001000,
+	SCB_FLEE	= 0x00002000,
+	SCB_DEF		= 0x00004000,
+	SCB_DEF2	= 0x00008000,
+	SCB_MDEF	= 0x00010000,
+	SCB_MDEF2	= 0x00020000,
+	SCB_SPEED	= 0x00040000,
+	SCB_ASPD	= 0x00080000,
+	SCB_DSPD	= 0x00100000,
+	SCB_CRI		= 0x00200000,
+	SCB_FLEE2	= 0x00400000,
+	SCB_ATK_ELE	= 0x00800000,
+	SCB_DEF_ELE	= 0x01000000,
+	SCB_MODE	= 0x02000000,
+	SCB_SIZE	= 0x04000000,
+	SCB_RACE	= 0x08000000,
+	SCB_RANGE	= 0x10000000,
+	SCB_REGEN	= 0x20000000,
+	SCB_DYE		= 0x40000000, // force cloth-dye change to 0 to avoid client crashes.
 
-	SCB_BATTLE  = 0x3FFFFFFE,
-	SCB_ALL     = 0x3FFFFFFF
+	SCB_BATTLE	= 0x3FFFFFFE,
+	SCB_ALL		= 0x3FFFFFFF
 };
 
 //Define to determine who gets HP/SP consumed on doing skills/etc. [Skotlex]
@@ -1706,6 +1707,7 @@ struct status_change {
 		unsigned char pickup;
 		unsigned char drop;
 		unsigned char cast;
+		unsigned char chat;
 	} cant;/* status change state flags */
 	//int sg_id; //ID of the previous Storm gust that hit you
 	short comet_x, comet_y; // Point where src casted Comet - required to calculate damage from this point