Procházet zdrojové kódy

Merge branch 'master' into refactor/StatusChangeDisplay

Jey před 7 roky
rodič
revize
a73da61129

+ 4 - 0
conf/battle/misc.conf

@@ -18,6 +18,10 @@
 //   config to adjust how this will affect players)
 pk_mode: 0
 
+// Displays a message when the player enters a pk zone.
+// Only during pk_mode (Note 1)
+pk_mode_mes: yes
+
 // Manner/karma system configuration. Specifies how does negative manner
 // (red no chat bubble) affects players (add as needed):
 //  0: No penalties.

+ 5 - 1
conf/msg_conf/map_msg.conf

@@ -423,7 +423,7 @@
 404: War of Emperium SE is currently in progress.
 405: War of Emperium SE has been ended.
 406: War of Emperium SE is currently not in progress.
-//407 free
+//407: free
 //chrif related
 408: Need disconnection to perform change-sex request...
 409: Your sex has been changed (need disconnection by the server)...
@@ -1662,5 +1662,9 @@
 1501: Spying on the %s clan.
 1502: Incorrect clan name/ID.
 
+// PK Mode msgs
+1503: You've entered a PK Zone.
+1504: You've entered a PK Zone (safe until level %d).
+
 //Custom translations
 //import: conf/msg_conf/import/map_msg_eng_conf.txt

+ 1 - 1
db/re/item_db.txt

@@ -2110,7 +2110,7 @@
 2904,Naqsh,Naqsi,4,0,,0,,0,,0,0xFFFFFFFF,63,2,136,,0,0,0,{ skill "BS_MAXIMIZE",5; skill "BS_WEAPONPERFECT",5; skill "WL_RECOGNIZEDSPELL",5; skill "ECL_SNOWFLIP",1; skill "ECL_PEONYMAMY",1; skill "ECL_SADAGUI",1; skill "ECL_SEQUOIADUST",1; bonus2 bSkillCooldown,"WL_RECOGNIZEDSPELL",-180000; bonus bDelayRate,-100; },{},{}
 2905,Super_Ora_Ora,Super Ora Ora,4,0,,1000,,0,,0,0xFFFFFFFF,63,2,136,,0,0,0,{},{},{}
 2906,Happy_Gauntlet,Happy Gauntlet,4,20,,1000,,3,,1,0xFFFFFFFF,63,2,136,,70,0,0,{ bonus bMdef,3; },{},{}
-2907,Buwaya_Tattoo,Bawaya Agimat Tattoo,4,20,,100,,0,,0,0xFFFFFFFF,63,2,136,,1,0,0,{ bonus bMatkRate,7; bonus bVariableCastrate,-7; },{},{}
+2907,Buwaya_Tattoo,Bawaya Agimat Tattoo,4,20,,100,,0,,0,0xFFFFFFFF,63,2,136,,1,0,0,{ bonus bMatkRate,7; bonus bFixedCastrate,-7; },{},{}
 2908,Light_Ring,Light Ring,4,20,,100,,0,,1,0xFFFFFFFF,63,2,136,,0,0,0,{},{},{}
 2909,Darkness_Ring,Darkness Ring,4,20,,100,,0,,1,0xFFFFFFFF,63,2,136,,0,0,0,{},{},{}
 2910,Bakonawa_Tattoo,Bakunawa Agimat Tattoo,4,20,,100,,0,,0,0xFFFFFFFF,63,2,136,,1,0,0,{ bonus2 bAddClass,Class_All,7; bonus bAspdRate,10; },{},{}

+ 9 - 1
doc/script_commands.txt

@@ -2760,6 +2760,9 @@ Valid information types are:
 REFINE_ZENY_COST       - Zeny
 REFINE_MATERIAL_ID     - Material Item ID
 
+This function will return -1 on failure. The function fails if the cost type
+is invalid or if there is no item in the equipment slot. 
+
 ---------------------------------------
 
 *getareadropitem("<map name>",<x1>,<y1>,<x2>,<y2>,<item>)
@@ -3868,10 +3871,13 @@ by default green
 
 ---------------------------------------
 
-*showscript "<message>"{,<GID>};
+*showscript "<message>"{,<GID>, <flag>};
 
 Makes attached player or GID says a message like shouting a skill name, the message
 will be seen to everyone around but not in chat window.
+flag: Specify target
+   AREA - Message is sent to players in the vicinity of the source (default).
+   SELF - Message is sent only to player attached.
 
 ---------------------------------------
 
@@ -6534,6 +6540,8 @@ The options are:
 	1 = The buy window
 	2 = The sell window
 
+Note: The <option> parameter only works on the 'shop' type NPC.
+
 A shop called with this command will trigger the labels "OnBuyItem" and "OnSellItem"
 (as long as an npcshop* command is executed from that NPC, see note below). These
 labels, if used, will replace how the shop handles the buying and selling of items,

+ 15 - 6
npc/re/merchants/shadow_refiner.txt

@@ -15,12 +15,12 @@
 	mes "Do you want to refine a shadow item? Pick yer poison!";
 	next;
 	setarray .@indices[1], EQI_SHADOW_ARMOR, EQI_SHADOW_WEAPON, EQI_SHADOW_SHIELD, EQI_SHADOW_SHOES, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L;
-	for(.@i = 1; .@i <= EQI_SHADOW_ACC_L; .@i++)
+	.@indlen = getarraysize(.@indices) - 1;
+	for(.@i = 1; .@i <= .@indlen; .@i++)
 		.@menu$ = .@menu$ + (getequipisequiped(.@indices[.@i]) ? getequipname(.@indices[.@i]) : F_getpositionname(.@indices[.@i]) +"-[Not equipped]") +":";
 	.@menu$ = .@menu$ + "Refine info";
-	.@part = .@indices[select(.@menu$)];
-
-	if (.@part == EQI_SHADOW_ACC_L + 1) { // Refine info
+	.@choice = select(.@menu$);
+	if (.@choice == .@indlen + 1) { // Refine info
 		mes "[Shadow Blacksmith]";
 		mes "When a shadow item is refined, it gains extra bonuses very much like normal items.";
 		next;
@@ -35,6 +35,15 @@
 		mes "HD ores can be used for gear that is at least refine level +7 and will prevent breaking as long as you stay talking to me.";
 		close;
 	}
+	
+	.@part = .@indices[.@choice];
+	
+	if (!getequipisequiped(.@part)) {
+		mes "[Shadow Blacksmith]";
+		mes "There's nothing here!";
+		close;
+	}
+	
 	while(1) {
 		mes "[Shadow Blacksmith]";
 		mes "I require " + callfunc("F_InsertComma", .@zeny_cost) + " zeny as a fee for EACH refine attempt.";
@@ -84,7 +93,7 @@
 		.@choose = .@material[.@option-1];
 		if (!countitem(.@choose)) {
 			mes "[Shadow Blacksmith]";
-			mes "You do not have enough "+ getitemname(.@choose) +" / "+ getitemname(.@choose) +".";
+			mes "You do not have enough "+ getitemname(.@choose) +".";
 			close;
 		}
 		if (Zeny < .@zeny_cost) {
@@ -140,4 +149,4 @@
 }
 
 //moc_paraup,45,185,5	duplicate(ShadowBlacksmith)	Shadow Blacksmith#eden1	4_F_JOB_BLACKSMITH // Commented out until it's added to the map index
-prt_in,59,54,3	duplicate(ShadowBlacksmith)	Shadow Blacksmith#itemmall	4_F_JOB_BLACKSMITH
+prt_in,61,54,3	duplicate(ShadowBlacksmith)	Shadow Blacksmith#itemmall	4_F_JOB_BLACKSMITH

+ 1 - 1
sql-files/item_db_re.sql

@@ -2142,7 +2142,7 @@ REPLACE INTO `item_db_re` VALUES (2903,'Morpheus\'s_Armlet_','Morpheus\'s Armlet
 REPLACE INTO `item_db_re` VALUES (2904,'Naqsh','Naqsi',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'0',0,0,'skill "BS_MAXIMIZE",5; skill "BS_WEAPONPERFECT",5; skill "WL_RECOGNIZEDSPELL",5; skill "ECL_SNOWFLIP",1; skill "ECL_PEONYMAMY",1; skill "ECL_SADAGUI",1; skill "ECL_SEQUOIADUST",1; bonus2 bSkillCooldown,"WL_RECOGNIZEDSPELL",-180000; bonus bDelayRate,-100;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2905,'Super_Ora_Ora','Super Ora Ora',4,0,NULL,1000,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'0',0,0,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2906,'Happy_Gauntlet','Happy Gauntlet',4,20,NULL,1000,NULL,3,NULL,1,0xFFFFFFFF,63,2,136,NULL,'70',0,0,'bonus bMdef,3;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (2907,'Buwaya_Tattoo','Bawaya Agimat Tattoo',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'1',0,0,'bonus bMatkRate,7; bonus bVariableCastrate,-7;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2907,'Buwaya_Tattoo','Bawaya Agimat Tattoo',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'1',0,0,'bonus bMatkRate,7; bonus bFixedCastrate,-7;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2908,'Light_Ring','Light Ring',4,20,NULL,100,NULL,0,NULL,1,0xFFFFFFFF,63,2,136,NULL,'0',0,0,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2909,'Darkness_Ring','Darkness Ring',4,20,NULL,100,NULL,0,NULL,1,0xFFFFFFFF,63,2,136,NULL,'0',0,0,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (2910,'Bakonawa_Tattoo','Bakunawa Agimat Tattoo',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'1',0,0,'bonus2 bAddClass,Class_All,7; bonus bAspdRate,10;',NULL,NULL);

+ 12 - 0
src/char/char.cpp

@@ -1763,9 +1763,21 @@ int char_mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
 
 	buf = WBUFP(buffer,0);
 	WBUFL(buf,0) = p->char_id;
+#if PACKETVER >= 20170830
+	WBUFQ(buf,4) = u64min((uint64)p->base_exp, INT64_MAX);
+	offset += 4;
+	buf = WBUFP(buffer, offset);
+#else
 	WBUFL(buf,4) = umin(p->base_exp, INT32_MAX);
+#endif
 	WBUFL(buf,8) = p->zeny;
+#if PACKETVER >= 20170830
+	WBUFQ(buf,12) = u64min((uint64)p->job_exp, INT64_MAX);
+	offset += 4;
+	buf = WBUFP(buffer, offset);
+#else
 	WBUFL(buf,12) = umin(p->job_exp, INT32_MAX);
+#endif
 	WBUFL(buf,16) = p->job_level;
 	WBUFL(buf,20) = 0; // probably opt1
 	WBUFL(buf,24) = 0; // probably opt2

+ 1 - 0
src/map/battle.c

@@ -8182,6 +8182,7 @@ static const struct _battle_data {
 	{ "equip_self_break_rate",              &battle_config.equip_self_break_rate,           100,    0,      INT_MAX,        },
 	{ "equip_skill_break_rate",             &battle_config.equip_skill_break_rate,          100,    0,      INT_MAX,        },
 	{ "pk_mode",                            &battle_config.pk_mode,                         0,      0,      2,              },
+	{ "pk_mode_mes",                        &battle_config.pk_mode_mes,                     1,      0,      1,              },
 	{ "pk_level_range",                     &battle_config.pk_level_range,                  0,      0,      INT_MAX,        },
 	{ "manner_system",                      &battle_config.manner_system,                   0xFFF,  0,      0xFFF,          },
 	{ "pet_equip_required",                 &battle_config.pet_equip_required,              0,      0,      1,              },

+ 1 - 0
src/map/battle.h

@@ -349,6 +349,7 @@ extern struct Battle_Config
 	int multi_level_up;
 	int max_exp_gain_rate; //Max amount of exp bar % you can get in one go.
 	int pk_mode;
+	int pk_mode_mes;
 	int pk_level_range;
 
 	int manner_system; // end additions [Valaris]

+ 70 - 9
src/map/clif.cpp

@@ -3141,6 +3141,7 @@ static int clif_hpmeter(struct map_session_data *sd)
 /// 0121 <current count>.W <max count>.W <current weight>.L <max weight>.L (ZC_NOTIFY_CARTITEM_COUNTINFO)
 /// 013a <atk range>.W (ZC_ATTACK_RANGE)
 /// 0141 <status id>.L <base status>.L <plus status>.L (ZC_COUPLESTATUS)
+/// 0acb <var id>.W <value>.Q (ZC_LONGPAR_CHANGE2)
 /// TODO: Extract individual packets.
 /// FIXME: Packet lengths from packet_len(cmd)
 void clif_updatestatus(struct map_session_data *sd,int type)
@@ -3257,6 +3258,28 @@ void clif_updatestatus(struct map_session_data *sd,int type)
 		WFIFOW(fd,0)=0xb1;
 		WFIFOL(fd,4)=sd->status.zeny;
 		break;
+#if PACKETVER >= 20170830
+	case SP_BASEEXP:
+		WFIFOW(fd,0)=0xacb;
+		WFIFOQ(fd,4)=sd->status.base_exp;
+		len = packet_len(0xacb);
+		break;
+	case SP_JOBEXP:
+		WFIFOW(fd,0)=0xacb;
+		WFIFOQ(fd,4)=sd->status.job_exp;
+		len = packet_len(0xacb);
+		break;
+	case SP_NEXTBASEEXP:
+		WFIFOW(fd,0)=0xacb;
+		WFIFOQ(fd,4)=pc_nextbaseexp(sd);
+		len = packet_len(0xacb);
+		break;
+	case SP_NEXTJOBEXP:
+		WFIFOW(fd,0)=0xacb;
+		WFIFOQ(fd,4)=pc_nextjobexp(sd);
+		len = packet_len(0xacb);
+		break;
+#else
 	case SP_BASEEXP:
 		WFIFOW(fd,0)=0xb1;
 		WFIFOL(fd,4)=sd->status.base_exp;
@@ -3273,6 +3296,7 @@ void clif_updatestatus(struct map_session_data *sd,int type)
 		WFIFOW(fd,0)=0xb1;
 		WFIFOL(fd,4)=pc_nextjobexp(sd);
 		break;
+#endif
 
 	/**
 	 * SP_U<STAT> are used to update the amount of points necessary to increase that stat
@@ -10010,6 +10034,28 @@ static bool clif_process_message(struct map_session_data* sd, bool whisperFormat
 	return true;
 }
 
+/**
+ * Displays a message if the player enters a PK Zone (during pk_mode)
+ * @param sd: Player data
+ */
+inline void clif_pk_mode_message(struct map_session_data * sd)
+{
+	if (battle_config.pk_mode && battle_config.pk_mode_mes &&
+		sd && map[sd->bl.m].flag.pvp) {
+		if( (int)sd->status.base_level < battle_config.pk_min_level ) {
+			char output[CHAT_SIZE_MAX];
+			// 1504: You've entered a PK Zone (safe until level %d).
+			safesnprintf(output, CHAT_SIZE_MAX, msg_txt(sd,1504), 
+						 battle_config.pk_min_level);
+			clif_showscript(&sd->bl, output, SELF);
+		} else {
+			// 1503: You've entered a PK Zone.
+			clif_showscript(&sd->bl, msg_txt(sd,1503), SELF);
+		}
+	}
+	return;
+}
+
 // ---------------------
 // clif_parse_wanttoconnect
 // ---------------------
@@ -10445,6 +10491,8 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
 		// Instances do not need their own channels
 		if( channel_config.map_tmpl.name != NULL && (channel_config.map_tmpl.opt&CHAN_OPT_AUTOJOIN) && !map[sd->bl.m].flag.chmautojoin && !map[sd->bl.m].instance_id )
 			channel_mjoin(sd); //join new map
+
+		clif_pk_mode_message(sd);
 	} else if (sd->guild && (battle_config.guild_notice_changemap == 2 || guild_notice))
 		clif_guild_notice(sd); // Displays at end
 
@@ -17238,8 +17286,9 @@ void clif_party_show_picker(struct map_session_data * sd, struct item * item_dat
 }
 
 
-/** Display gained exp (ZC_NOTIFY_EXP).
- * 07f6 <account id>.L <amount>.L <var id>.W <exp type>.W
+/** Display gained exp.
+ * 07f6 <account id>.L <amount>.L <var id>.W <exp type>.W (ZC_NOTIFY_EXP)
+ * 0acc <account id>.L <amount>.Q <var id>.W <exp type>.W (ZC_NOTIFY_EXP2)
  * amount: INT32_MIN ~ INT32_MAX
  * var id:
  *     SP_BASEEXP, SP_JOBEXP
@@ -17255,18 +17304,30 @@ void clif_party_show_picker(struct map_session_data * sd, struct item * item_dat
 void clif_displayexp(struct map_session_data *sd, unsigned int exp, char type, bool quest, bool lost)
 {
 	int fd;
+	int offset;
+#if PACKETVER >= 20170830
+	int cmd = 0xacc;
+#else
+	int cmd = 0x7f6;
+#endif
 
 	nullpo_retv(sd);
 
 	fd = sd->fd;
 
-	WFIFOHEAD(fd, packet_len(0x7f6));
-	WFIFOW(fd,0) = 0x7f6;
+	WFIFOHEAD(fd, packet_len(cmd));
+	WFIFOW(fd,0) = cmd;
 	WFIFOL(fd,2) = sd->bl.id;
+#if PACKETVER >= 20170830
+	WFIFOQ(fd,6) = (int64)u64min((uint64)exp, INT_MAX) * (lost ? -1 : 1);
+	offset = 4;
+#else
 	WFIFOL(fd,6) = (int)umin(exp, INT_MAX) * (lost ? -1 : 1);
-	WFIFOW(fd,10) = type;
-	WFIFOW(fd,12) = (quest && type != SP_JOBEXP) ? 1 : 0; // NOTE: Somehow JobEXP always in yellow color
-	WFIFOSET(fd,packet_len(0x7f6));
+	offset = 0;
+#endif
+	WFIFOW(fd,10+offset) = type;
+	WFIFOW(fd,12+offset) = (quest && type != SP_JOBEXP) ? 1 : 0; // NOTE: Somehow JobEXP always in yellow color
+	WFIFOSET(fd,packet_len(cmd));
 }
 
 
@@ -18738,7 +18799,7 @@ void clif_notify_bindOnEquip(struct map_session_data *sd, int n) {
 * [Ind/Hercules]
 * 08b3 <Length>.W <id>.L <message>.?B (ZC_SHOWSCRIPT)
 **/
-void clif_showscript(struct block_list* bl, const char* message) {
+void clif_showscript(struct block_list* bl, const char* message, enum send_target flag) {
 	char buf[256];
 	size_t len;
 	nullpo_retv(bl);
@@ -18757,7 +18818,7 @@ void clif_showscript(struct block_list* bl, const char* message) {
 	WBUFW(buf,2) = (uint16)(len+8);
 	WBUFL(buf,4) = bl->id;
 	safestrncpy(WBUFCP(buf,8), message, len);
-	clif_send((unsigned char *) buf, WBUFW(buf,2), bl, AREA);
+	clif_send((unsigned char *) buf, WBUFW(buf,2), bl, flag);
 }
 
 /**

+ 1 - 1
src/map/clif.h

@@ -1038,7 +1038,7 @@ void clif_update_rankingpoint(struct map_session_data *sd, int rankingtype, int
 
 void clif_crimson_marker(struct map_session_data *sd, struct block_list *bl, bool remove);
 
-void clif_showscript(struct block_list* bl, const char* message);
+void clif_showscript(struct block_list* bl, const char* message, enum send_target flag);
 void clif_party_leaderchanged(struct map_session_data *sd, int prev_leader_aid, int new_leader_aid);
 
 void clif_account_name(int fd, uint32 account_id, const char* accname);

+ 34 - 3
src/map/clif_obfuscation.h

@@ -181,17 +181,25 @@
 		packet_keys(0x3C6447A8,0x032170D7,0x6490476C);
 	#elif PACKETVER == 20151014 // 2015-10-14bRagexeRE
 		packet_keys(0x402728A8,0x5D0E309F,0x240018FD);
+	#elif PACKETVER == 20151022 // 2015-10-22aRagexeRE
+		packet_keys(0x0311104D,0x46C326D6,0x00E82720);
 	#elif PACKETVER == 20151028 // 2015-10-28cRagexeRE
 		packet_keys(0x45B945B9,0x45B945B9,0x45B945B9);
 	#elif PACKETVER == 20151029 // 2015-10-29aRagexe
 		packet_keys(0x45B945B9,0x45B945B9,0x45B945B9);
 	#elif PACKETVER == 20151104 // 2015-11-04aRagexe
 		packet_keys(0x4C17382A,0x7ED174C9,0x29961E4F);
+	#elif PACKETVER == 20151111 // 2015-11-11aRagexeRE
+		packet_keys(0x46097C77,0x5F193871,0x29140A21);
 	#elif PACKETVER == 20151118 // 2015-11-18aRagexeRE
 		packet_keys(0x734C3241,0x6E846F34,0x731C06D6);
+	#elif PACKETVER == 20151125 // 2015-11-25dRagexeRE
+		packet_keys(0x237446C0,0x5EFB343A,0x0EDF06C5);
 	#elif PACKETVER == 20151202 // 2015-12-02bRagexeRE
 		packet_keys(0x4EDE52DE,0x52DE52DE,0x52DE52DE);
-	#elif PACKETVER == 20151216 // 2015-12-16aRagexe
+	#elif PACKETVER == 20151209 // 2015-12-09aRagexeRE
+		packet_keys(0x652C5898,0x7A351FB3,0x67EA2886);
+	#elif PACKETVER == 20151216 // 2015-12-16aRagexeRE
 		packet_keys(0x25DD643D,0x61AC39DE,0x77A8206D);
 	#elif PACKETVER == 20151223 // 2015-12-23bRagexeRE
 		packet_keys(0x347D68D0,0x2C705320,0x7B4A199D);
@@ -245,7 +253,7 @@
 		packet_keys(0x062C5C26,0x6CF47E82,0x4DD53480);
 	#elif PACKETVER == 20160622 // 2016-06-22aRagexeRE
 		packet_keys(0x426548AB,0x5C0F5DD4,0x03022710);
-	#elif PACKETVER == 20160630 // 2016-06-30aRagexeRE
+	#elif PACKETVER == 20160629 || PACKETVER == 20160630 // 2016-06-29aRagexeRE or 2016-06-30aRagexeRE
 		packet_keys(0x0DF31CCC,0x54281606,0x5C4C6855);
 	#elif PACKETVER == 20160706 // 2016-07-06cRagexeRE
 		packet_keys(0x33A766D0,0x743F04F8,0x0FA0276C);
@@ -277,7 +285,7 @@
 		packet_keys(0x34882F11,0x7C870E70,0x7E61350D);
 	#elif PACKETVER == 20161026 // 2016-10-26bRagexeRE
 		packet_keys(0x2CB86AE6,0x7D12660E,0x1B004DEB);
-	#elif PACKETVER == 20161103 // 2016-11-03aRagexeRE
+	#elif PACKETVER == 20161102 || PACKETVER == 20161103 // 2016-11-02aRagexeRE or 2016-11-03aRagexeRE
 		packet_keys(0x76725C17,0x72FE4EC1,0x07A91BFD);
 	#elif PACKETVER == 20161109 // 2016-11-09bRagexeRE
 		packet_keys(0x0A5277C0,0x2DB17506,0x0E8F26DA);
@@ -345,6 +353,29 @@
 		packet_keys(0x155F34EC,0x2D943FA9,0x3D9170EB);
 	#elif PACKETVER == 20170628 // 2017-06-28bRagexeRE
 		packet_keys(0x04691C86,0x43C210E2,0x2FE277E2);
+	#elif PACKETVER == 20170705 // 2017-07-05aRagexeRE
+		packet_keys(0x7EB000AE,0x02FB1DBC,0x5CB131E6);
+	#elif PACKETVER == 20170712 // 2017-07-12bRagexeRE
+		packet_keys(0x2C3C202C,0x3F2C2F2C,0x2F2C2F2C);
+	#elif PACKETVER == 20170719 // 2017-07-19aRagexeRE
+		packet_keys(0x46465C88,0x10116F66,0x200866F9);
+	#elif PACKETVER == 20170726 // 2017-07-26cRagexeRE
+		packet_keys(0x102F23DB,0x7E767751,0x3BC172EF);
+	#elif PACKETVER == 20170801 // 2017-08-01aRagexeRE
+		packet_keys(0x26B52A7F,0x5377619D,0x4F580AC4);
+	//#elif PACKETVER == 20170809 // 2017-08-09cRagexeRE
+	#elif PACKETVER == 20170816 // 2017-08-16dRagexeRE
+		packet_keys(0x78914673,0x3F8B7634,0x55B814BC);
+	#elif PACKETVER == 20170823 // 2017-08-23aRagexeRE
+		packet_keys(0x22677205,0x393D1002,0x58DC6BB4);
+	#elif PACKETVER == 20170830 // 2017-08-30bRagexeRE
+		packet_keys(0x1D49592B,0x00970C17,0x1E640103);
+	#elif PACKETVER == 20170906 // 2017-09-06cRagexeRE
+		packet_keys(0x7DEF7677,0x351F36E6,0x52303485);
+	#elif PACKETVER == 20170913 // 2017-09-13bRagexeRE
+		packet_keys(0x7A645935,0x1DA05062,0x5A7A4C43);
+	#elif PACKETVER == 20170920 // 2017-09-20bRagexeRE
+		packet_keys(0x53024DA5,0x04EC212D,0x0BF87CD4);
 	#elif PACKETVER > 20110817
 		#error Unsupported packet version.
 	#endif

+ 6 - 0
src/map/clif_packetdb.h

@@ -2346,4 +2346,10 @@
 	packet(0x0ABD,10);
 #endif
 
+// 2017-08-30bRagexeRE
+#if PACKETVER >= 20170830
+	packet(0x0ACB,12);
+	packet(0x0ACC,18);
+#endif
+
 #endif /* _CLIF_PACKETDB_H_ */

+ 472 - 4
src/map/clif_shuffle.h

@@ -1058,6 +1058,37 @@
 	parseable_packet(0x095e,8,clif_parse_MoveToKafra,2,4);
 	parseable_packet(0x0961,6,clif_parse_GetCharNameRequest,2);
 	parseable_packet(0x0964,19,clif_parse_WantToConnection,2,6,10,14,18);
+// 2015-10-22aRagexeRE
+#elif PACKETVER == 20151022
+	parseable_packet(0x023B,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x02C4,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0361,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0362,6,clif_parse_DropItem,2,4);
+	//parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	//parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x07E4,6,clif_parse_TakeItem,2);
+	parseable_packet(0x07EC,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x086A,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x091D,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0940,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
 // 2015-10-28cRagexeRE
 #elif PACKETVER == 20151028
 	parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4);
@@ -1151,6 +1182,37 @@
 	parseable_packet(0x093A,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
 	parseable_packet(0x0940,36,clif_parse_StoragePassword,2,4,20);
 	parseable_packet(0x0964,6,clif_parse_TakeItem,2);
+// 2015-11-11aRagexeRE
+#elif PACKETVER == 20151111
+	parseable_packet(0x02C4,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0362,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	//parseable_packet(0x0802,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x085D,-1,clif_parse_ItemListWindowSelected,2,4,8,8,12);
+	parseable_packet(0x0862,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0871,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x0885,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x089C,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0942,18,clif_parse_PartyBookingRegisterReq,2,4,6);
+	parseable_packet(0x094A,6,clif_parse_TakeItem,2);
+	//parseable_packet(0x0958,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0966,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0967,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0969,36,clif_parse_StoragePassword,2,4,20);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
 // 2015-11-18aRagexeRE
 #elif PACKETVER == 20151118
 	parseable_packet(0x022d,6,clif_parse_TickSend,2);
@@ -1182,6 +1244,37 @@
 	//parseable_packet(0x0957,4,NULL,0); // CZ_GANGSI_RANK
 	parseable_packet(0x095c,18,clif_parse_PartyBookingRegisterReq,2,4,6);
 	parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2);
+// 2015-11-25dRagexeRE
+#elif PACKETVER == 20151125
+	parseable_packet(0x0361,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0365,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0366,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0368,-1,clif_parse_ItemListWindowSelected,2,4,8,8,12);
+	parseable_packet(0x0438,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0802,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0838,18,clif_parse_PartyBookingRegisterReq,2,4,6);
+	parseable_packet(0x085E,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x085F,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0863,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0883,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0884,36,clif_parse_StoragePassword,2,4,20);
+	//parseable_packet(0x0885,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x088C,6,clif_parse_TickSend,2);
+	parseable_packet(0x088D,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0899,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x089C,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x089F,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x08A9,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x08AD,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0920,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x092A,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x092E,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0939,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x093E,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x0951,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0956,26,clif_parse_PartyInvite2,2);
+	//parseable_packet(0x0957,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0959,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
 // 2015-12-02bRagexeRE
 #elif PACKETVER == 20151202
 	parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4);
@@ -1213,6 +1306,38 @@
 	parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6);
 	parseable_packet(0x0870,36,clif_parse_StoragePassword,2,4,20);
 	parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2);
+// 2015-12-09aRagexeRE
+#elif PACKETVER == 20151209
+	parseable_packet(0x0365,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0369,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x07E4,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x07EC,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0811,6,clif_parse_TickSend,2);
+	parseable_packet(0x0819,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x085B,36,clif_parse_StoragePassword,2,4,20);
+	parseable_packet(0x085D,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x085E,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0861,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0866,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0875,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x087A,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x087F,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x088E,10,clif_parse_UseSkillToId,2,4,6);
+	//parseable_packet(0x088F,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0894,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x08A1,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0920,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x092D,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0930,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0932,-1,clif_parse_ItemListWindowSelected,2,4,8,8,12);
+	parseable_packet(0x093B,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0948,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x094A,18,clif_parse_PartyBookingRegisterReq,2,4,6);
+	parseable_packet(0x0956,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	//parseable_packet(0x095C,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0961,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0964,26,clif_parse_FriendsListAdd,2);
+// 2015-12-16aRagexeRE
 #elif PACKETVER == 20151216
 	parseable_packet(0x022D,5,clif_parse_ChangeDir,2,4);
 	parseable_packet(0x0361,6,clif_parse_ReqClickBuyingStore,2);
@@ -2049,8 +2174,8 @@
 	parseable_packet(0x0959,6,clif_parse_GetCharNameRequest,2);
 	parseable_packet(0x0965,5,clif_parse_ChangeDir,2,4);
 	parseable_packet(0x0969,6,clif_parse_DropItem,2,4);
-// 2016-06-30aRagexeRE
-#elif PACKETVER == 20160630
+// 2016-06-29aRagexeRE or 2016-06-30aRagexeRE
+#elif PACKETVER == 20160629 || PACKETVER == 20160630
 	parseable_packet(0x0202,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
 	parseable_packet(0x022d,5,clif_parse_WalkToXY,2);
 	//parseable_packet(0x035f,4,NULL,0); // CZ_GANGSI_RANK
@@ -2545,8 +2670,8 @@
 	parseable_packet(0x095c,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
 	parseable_packet(0x095e,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
 	parseable_packet(0x0962,5,clif_parse_ChangeDir,2,4);
-// 2016-11-03aRagexeRE
-#elif PACKETVER == 20161103
+// 2016-11-02aRagexeRE or 2016-11-03aRagexeRE
+#elif PACKETVER == 20161102 || PACKETVER == 20161103
 	parseable_packet(0x0361,8,clif_parse_MoveFromKafra,2,4);
 	//parseable_packet(0x0367,4,NULL,0); // CZ_GANGSI_RANK
 	parseable_packet(0x0436,7,clif_parse_ActionRequest,2,6);
@@ -3599,6 +3724,349 @@
 	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
 	parseable_packet(0x0863,36,clif_parse_StoragePassword,0);
 	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+// 2017-07-05aRagexeRE
+#elif PACKETVER == 20170705
+	parseable_packet(0x0202,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x02C4,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0879,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0886,26,clif_parse_FriendsListAdd,2);
+	//parseable_packet(0x088D,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x088E,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x089A,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x089D,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x091A,5,clif_parse_ChangeDir,2,4);
+	//parseable_packet(0x092F,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0930,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x0932,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0934,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x094C,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+// 2017-07-12bRagexeRE
+#elif PACKETVER == 20170712
+	parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x022D,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x023B,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0361,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0362,6,clif_parse_DropItem,2,4);
+	//parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	//parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x07E4,6,clif_parse_TakeItem,2);
+	parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0802,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0944,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+// 2017-07-19aRagexeRE
+#elif PACKETVER == 20170719
+	parseable_packet(0x022D,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0367,2,clif_parse_ReqCloseBuyingStore,0);
+	//parseable_packet(0x0368,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0369,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x07E4,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x085A,6,clif_parse_TickSend,2);
+	parseable_packet(0x085E,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0863,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x086E,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x087D,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0881,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0882,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x0885,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x0891,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0898,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x089A,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x089D,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x08A6,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x08A8,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x091B,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x091F,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x092C,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x092E,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x092F,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x093D,5,clif_parse_WalkToXY,2);
+	//parseable_packet(0x093E,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0944,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0946,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x0966,8,clif_parse_MoveToKafra,2,4);
+// 2017-07-26cRagexeRE
+#elif PACKETVER == 20170726
+	parseable_packet(0x0363,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0364,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0366,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0369,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0438,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0838,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0873,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0874,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x0878,7,clif_parse_ActionRequest,2,6);
+	//parseable_packet(0x0881,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0888,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x088E,5,clif_parse_WalkToXY,2);
+	//parseable_packet(0x08A3,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x08A7,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x08AA,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x08AB,6,clif_parse_TakeItem,2);
+	parseable_packet(0x08AC,6,clif_parse_TickSend,2);
+	parseable_packet(0x091D,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x091E,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x091F,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0921,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0923,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0943,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x094F,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0950,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0952,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0954,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x095A,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0963,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+// 2017-08-01aRagexeRE
+#elif PACKETVER == 20170801
+	parseable_packet(0x022D,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0281,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0361,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x0362,5,clif_parse_HomMenu,2,4);
+	//parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x07E4,6,clif_parse_TakeItem,2);
+	parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0802,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x087D,36,clif_parse_StoragePassword,0);
+	//parseable_packet(0x08A6,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x094F,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x095A,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+// 2017-08-09cRagexeRE 
+//#elif PACKETVER == 20170809
+// 2017-08-16dRagexeRE
+#elif PACKETVER == 20170816
+	parseable_packet(0x022D,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x035F,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0361,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x0362,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0438,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x085A,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0862,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0864,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x087E,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0881,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0882,36,clif_parse_StoragePassword,0);
+	//parseable_packet(0x0884,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0888,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0889,6,clif_parse_TickSend,2);
+	parseable_packet(0x08A3,26,clif_parse_FriendsListAdd,2);
+	//parseable_packet(0x08A7,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x08A9,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x08AC,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x091C,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x0921,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0925,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x092C,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x093A,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x093D,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0940,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0941,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0950,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0959,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0960,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+// 2017-08-23aRagexeRE
+#elif PACKETVER == 20170823
+	parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0361,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0362,6,clif_parse_DropItem,2,4);
+	//parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	//parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x07E4,6,clif_parse_TakeItem,2);
+	parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0802,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x086C,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x086D,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x08AC,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x095B,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+// 2017-08-30bRagexeRE
+#elif PACKETVER == 20170830
+	parseable_packet(0x0281,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x02C4,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0363,18,clif_parse_PartyBookingRegisterReq,2,4);
+	//parseable_packet(0x0364,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0860,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0865,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x086A,26,clif_parse_PartyInvite2,2);
+	//parseable_packet(0x0875,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0884,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0885,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0888,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0897,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0899,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x089A,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x089E,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x08A2,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x08A8,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x091E,6,clif_parse_TickSend,2);
+	parseable_packet(0x0921,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0925,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x092E,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x0939,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x093E,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0940,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0942,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x0943,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0947,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0951,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0959,10,clif_parse_UseSkillToPos,2,4,6,8);
+// 2017-09-06cRagexeRE
+#elif PACKETVER == 20170906
+	//parseable_packet(0x0202,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0281,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x02C4,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x035F,6,clif_parse_TickSend,2);
+	parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0366,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0368,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0437,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x0802,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0860,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0866,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	//parseable_packet(0x086C,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x087B,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x08A2,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x08A3,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x08A7,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x091A,6,clif_parse_TakeItem,2);
+	parseable_packet(0x091E,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0953,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x0281,6,clif_parse_GetCharNameRequest,2);
+// 2017-09-13bRagexeRE
+#elif PACKETVER == 20170913
+	parseable_packet(0x035F,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x0437,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x07E4,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x0817,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0835,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x085A,2,clif_parse_ReqCloseBuyingStore,0);
+	parseable_packet(0x0860,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0865,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x0866,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x088C,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0890,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x0891,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x0892,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x08A6,6,clif_parse_ReqClickBuyingStore,2);
+	//parseable_packet(0x08A7,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x08AA,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x08AB,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x08AC,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x08AD,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x091B,6,clif_parse_TickSend,2);
+	parseable_packet(0x091D,6,clif_parse_DropItem,2,4);
+	//parseable_packet(0x091E,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0920,2,clif_parse_SearchStoreInfoNextPage,0);
+	parseable_packet(0x0923,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0925,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x0927,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x095A,10,clif_parse_UseSkillToPos,2,4,6,8);
+	parseable_packet(0x095C,6,clif_parse_SolveCharName,2);
+// 2017-09-20bRagexeRE
+#elif PACKETVER == 20170920
+	parseable_packet(0x0369,6,clif_parse_TakeItem,2);
+	parseable_packet(0x0436,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
+	parseable_packet(0x07EC,8,clif_parse_MoveFromKafra,2,4);
+	parseable_packet(0x085A,5,clif_parse_WalkToXY,2);
+	parseable_packet(0x0861,26,clif_parse_FriendsListAdd,2);
+	parseable_packet(0x0862,10,clif_parse_UseSkillToId,2,4,6);
+	parseable_packet(0x0864,36,clif_parse_StoragePassword,0);
+	parseable_packet(0x0865,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
+	parseable_packet(0x086A,26,clif_parse_PartyInvite2,2);
+	parseable_packet(0x086C,6,clif_parse_DropItem,2,4);
+	parseable_packet(0x0874,2,clif_parse_ReqCloseBuyingStore,0);
+	//parseable_packet(0x0875,4,NULL,0); // CZ_GANGSI_RANK
+	parseable_packet(0x0889,6,clif_parse_GetCharNameRequest,2);
+	parseable_packet(0x088E,6,clif_parse_TickSend,2);
+	parseable_packet(0x089B,7,clif_parse_ActionRequest,2,6);
+	parseable_packet(0x0919,10,clif_parse_UseSkillToPos,2,4,6,8);
+	//parseable_packet(0x091E,8,NULL,0); // CZ_JOIN_BATTLE_FIELD
+	parseable_packet(0x0921,6,clif_parse_SolveCharName,2);
+	parseable_packet(0x0923,19,clif_parse_WantToConnection,2,6,10,14,18);
+	parseable_packet(0x0926,8,clif_parse_MoveToKafra,2,4);
+	parseable_packet(0x092E,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
+	parseable_packet(0x0937,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
+	parseable_packet(0x0939,5,clif_parse_ChangeDir,2,4);
+	parseable_packet(0x0945,18,clif_parse_PartyBookingRegisterReq,2,4);
+	parseable_packet(0x094C,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15);
+	parseable_packet(0x095D,5,clif_parse_HomMenu,2,4);
+	parseable_packet(0x0961,6,clif_parse_ReqClickBuyingStore,2);
+	parseable_packet(0x0966,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
+	parseable_packet(0x096A,2,clif_parse_SearchStoreInfoNextPage,0);
 #endif
 
 #endif /* _CLIF_SHUFFLE_H_ */

+ 1 - 1
src/map/pc.c

@@ -6410,7 +6410,7 @@ int pc_follow_timer(int tid, unsigned int tick, int id, intptr_t data)
 	sd->followtimer = INVALID_TIMER;
 	tbl = map_id2bl(sd->followtarget);
 
-	if (tbl == NULL || pc_isdead(sd) || status_isdead(tbl))
+	if (tbl == NULL || pc_isdead(sd))
 	{
 		pc_stop_following(sd);
 		return 0;

+ 27 - 4
src/map/script.cpp

@@ -19718,7 +19718,7 @@ unsigned short script_instancegetid(struct script_state* st)
 		struct guild *gd = NULL;
 		struct clan *cd = NULL;
 
-		if (script_rid2sd(sd)) {
+		if ((sd = map_id2sd(st->rid))) {
 			if (sd->instance_id)
 				instance_id = sd->instance_id;
 			if (instance_id == 0 && sd->status.party_id && (pd = party_search(sd->status.party_id)) != NULL && pd->instance_id)
@@ -22083,12 +22083,16 @@ BUILDIN_FUNC(getvar) {
 
 /**
  * Display script message
- * showscript "<message>"{,<GID>};
+ * showscript "<message>"{,<GID>,<flag>};
+ * @param flag: Specify target
+ *   AREA - Message is sent to players in the vicinity of the source (default).
+ *   SELF - Message is sent only to player attached.
  **/
 BUILDIN_FUNC(showscript) {
 	struct block_list *bl = NULL;
 	const char *msg = script_getstr(st,2);
 	int id = 0;
+	send_target target = AREA;
 
 	if (script_hasdata(st,3)) {
 		id = script_getnum(st,3);
@@ -22104,7 +22108,15 @@ BUILDIN_FUNC(showscript) {
 		return SCRIPT_CMD_FAILURE;
 	}
 
-	clif_showscript(bl, msg);
+	if (script_hasdata(st, 4)) {
+		target = static_cast<send_target>(script_getnum(st, 4));
+		if (target == SELF && map_id2sd(bl->id) == NULL) {
+			ShowWarning("script: showscript: self can't be used for non-players objects.\n");
+			return SCRIPT_CMD_FAILURE;
+		}
+	}
+
+	clif_showscript(bl, msg, target);
 
 	script_pushint(st,1);
 	return SCRIPT_CMD_SUCCESS;
@@ -23565,6 +23577,7 @@ BUILDIN_FUNC(achievementupdate) {
 /**
  * Get an equipment's refine cost
  * getequiprefinecost(<equipment slot>,<type>,<information>{,<char id>})
+ * returns -1 on fail
  */
 BUILDIN_FUNC(getequiprefinecost) {
 	int i = -1, slot, type, info;
@@ -23579,9 +23592,19 @@ BUILDIN_FUNC(getequiprefinecost) {
 		return SCRIPT_CMD_FAILURE;
 	}
 
+	if (type < 0 || type >= REFINE_COST_MAX) {
+		script_pushint(st, -1);
+		return SCRIPT_CMD_SUCCESS;
+	}
+
 	if (equip_index_check(slot))
 		i = pc_checkequip(sd, equip_bitmask[slot]);
 
+	if (i < 0) {
+		script_pushint(st, -1);
+		return SCRIPT_CMD_SUCCESS;
+	}
+
 	int weapon_lv = sd->inventory_data[i]->wlv;
 	if (sd->inventory_data[i]->type == IT_SHADOWGEAR) {
 		if (sd->inventory_data[i]->equip == EQP_SHADOW_WEAPON)
@@ -24178,7 +24201,7 @@ struct script_function buildin_func[] = {
 	BUILDIN_DEF(npcshopupdate,"sii?"),
 	BUILDIN_DEF(getattachedrid,""),
 	BUILDIN_DEF(getvar,"vi"),
-	BUILDIN_DEF(showscript,"s?"),
+	BUILDIN_DEF(showscript,"s??"),
 	BUILDIN_DEF(ignoretimeout,"i?"),
 	BUILDIN_DEF(geteleminfo,"i?"),
 	BUILDIN_DEF(setquestinfo_level,"iii"),

+ 5 - 1
src/map/skill.c

@@ -2712,7 +2712,11 @@ static int skill_magic_reflect(struct block_list* src, struct block_list* bl, in
 		return 0;
 
 	// Kaite reflection - Does not bypass Boss check
-	if( sc->data[SC_KAITE] && (src->type == BL_PC || status_get_lv(src) <= 80) ) {
+	if( sc->data[SC_KAITE] && (src->type == BL_PC || status_get_lv(src) <= 80)
+#ifdef RENEWAL
+		&& type // Does not reflect AoE
+#endif
+		) {
 		// Kaite only works against non-players if they are low-level.
 		// Kyomu doesn't disable Kaite, but the "skill fail chance" part of Kyomu applies to it.
 		clif_specialeffect(bl, 438, AREA);