Merge branch 'master' into refactor/StatusChangeDisplay

This commit is contained in:
Jey 2017-09-29 02:16:51 +02:00
commit a73da61129
17 changed files with 665 additions and 33 deletions

View File

@ -18,6 +18,10 @@
// config to adjust how this will affect players) // config to adjust how this will affect players)
pk_mode: 0 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 // Manner/karma system configuration. Specifies how does negative manner
// (red no chat bubble) affects players (add as needed): // (red no chat bubble) affects players (add as needed):
// 0: No penalties. // 0: No penalties.

View File

@ -423,7 +423,7 @@
404: War of Emperium SE is currently in progress. 404: War of Emperium SE is currently in progress.
405: War of Emperium SE has been ended. 405: War of Emperium SE has been ended.
406: War of Emperium SE is currently not in progress. 406: War of Emperium SE is currently not in progress.
//407 free //407: free
//chrif related //chrif related
408: Need disconnection to perform change-sex request... 408: Need disconnection to perform change-sex request...
409: Your sex has been changed (need disconnection by the server)... 409: Your sex has been changed (need disconnection by the server)...
@ -1662,5 +1662,9 @@
1501: Spying on the %s clan. 1501: Spying on the %s clan.
1502: Incorrect clan name/ID. 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 //Custom translations
//import: conf/msg_conf/import/map_msg_eng_conf.txt //import: conf/msg_conf/import/map_msg_eng_conf.txt

View File

@ -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; },{},{} 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,{},{},{} 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; },{},{} 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,{},{},{} 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,{},{},{} 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; },{},{} 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; },{},{}

View File

@ -2760,6 +2760,9 @@ Valid information types are:
REFINE_ZENY_COST - Zeny REFINE_ZENY_COST - Zeny
REFINE_MATERIAL_ID - Material Item ID 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>) *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 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. 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 1 = The buy window
2 = The sell 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" 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 (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, labels, if used, will replace how the shop handles the buying and selling of items,

View File

@ -15,12 +15,12 @@
mes "Do you want to refine a shadow item? Pick yer poison!"; mes "Do you want to refine a shadow item? Pick yer poison!";
next; next;
setarray .@indices[1], EQI_SHADOW_ARMOR, EQI_SHADOW_WEAPON, EQI_SHADOW_SHIELD, EQI_SHADOW_SHOES, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L; 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$ + (getequipisequiped(.@indices[.@i]) ? getequipname(.@indices[.@i]) : F_getpositionname(.@indices[.@i]) +"-[Not equipped]") +":";
.@menu$ = .@menu$ + "Refine info"; .@menu$ = .@menu$ + "Refine info";
.@part = .@indices[select(.@menu$)]; .@choice = select(.@menu$);
if (.@choice == .@indlen + 1) { // Refine info
if (.@part == EQI_SHADOW_ACC_L + 1) { // Refine info
mes "[Shadow Blacksmith]"; mes "[Shadow Blacksmith]";
mes "When a shadow item is refined, it gains extra bonuses very much like normal items."; mes "When a shadow item is refined, it gains extra bonuses very much like normal items.";
next; 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."; 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; close;
} }
.@part = .@indices[.@choice];
if (!getequipisequiped(.@part)) {
mes "[Shadow Blacksmith]";
mes "There's nothing here!";
close;
}
while(1) { while(1) {
mes "[Shadow Blacksmith]"; mes "[Shadow Blacksmith]";
mes "I require " + callfunc("F_InsertComma", .@zeny_cost) + " zeny as a fee for EACH refine attempt."; mes "I require " + callfunc("F_InsertComma", .@zeny_cost) + " zeny as a fee for EACH refine attempt.";
@ -84,7 +93,7 @@
.@choose = .@material[.@option-1]; .@choose = .@material[.@option-1];
if (!countitem(.@choose)) { if (!countitem(.@choose)) {
mes "[Shadow Blacksmith]"; mes "[Shadow Blacksmith]";
mes "You do not have enough "+ getitemname(.@choose) +" / "+ getitemname(.@choose) +"."; mes "You do not have enough "+ getitemname(.@choose) +".";
close; close;
} }
if (Zeny < .@zeny_cost) { 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 //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

View File

@ -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 (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 (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 (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 (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 (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); 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);

View File

@ -1763,9 +1763,21 @@ int char_mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
buf = WBUFP(buffer,0); buf = WBUFP(buffer,0);
WBUFL(buf,0) = p->char_id; 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); WBUFL(buf,4) = umin(p->base_exp, INT32_MAX);
#endif
WBUFL(buf,8) = p->zeny; 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); WBUFL(buf,12) = umin(p->job_exp, INT32_MAX);
#endif
WBUFL(buf,16) = p->job_level; WBUFL(buf,16) = p->job_level;
WBUFL(buf,20) = 0; // probably opt1 WBUFL(buf,20) = 0; // probably opt1
WBUFL(buf,24) = 0; // probably opt2 WBUFL(buf,24) = 0; // probably opt2

View File

@ -8182,6 +8182,7 @@ static const struct _battle_data {
{ "equip_self_break_rate", &battle_config.equip_self_break_rate, 100, 0, INT_MAX, }, { "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, }, { "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", &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, }, { "pk_level_range", &battle_config.pk_level_range, 0, 0, INT_MAX, },
{ "manner_system", &battle_config.manner_system, 0xFFF, 0, 0xFFF, }, { "manner_system", &battle_config.manner_system, 0xFFF, 0, 0xFFF, },
{ "pet_equip_required", &battle_config.pet_equip_required, 0, 0, 1, }, { "pet_equip_required", &battle_config.pet_equip_required, 0, 0, 1, },

View File

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

View File

@ -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) /// 0121 <current count>.W <max count>.W <current weight>.L <max weight>.L (ZC_NOTIFY_CARTITEM_COUNTINFO)
/// 013a <atk range>.W (ZC_ATTACK_RANGE) /// 013a <atk range>.W (ZC_ATTACK_RANGE)
/// 0141 <status id>.L <base status>.L <plus status>.L (ZC_COUPLESTATUS) /// 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. /// TODO: Extract individual packets.
/// FIXME: Packet lengths from packet_len(cmd) /// FIXME: Packet lengths from packet_len(cmd)
void clif_updatestatus(struct map_session_data *sd,int type) 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; WFIFOW(fd,0)=0xb1;
WFIFOL(fd,4)=sd->status.zeny; WFIFOL(fd,4)=sd->status.zeny;
break; 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: case SP_BASEEXP:
WFIFOW(fd,0)=0xb1; WFIFOW(fd,0)=0xb1;
WFIFOL(fd,4)=sd->status.base_exp; 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; WFIFOW(fd,0)=0xb1;
WFIFOL(fd,4)=pc_nextjobexp(sd); WFIFOL(fd,4)=pc_nextjobexp(sd);
break; break;
#endif
/** /**
* SP_U<STAT> are used to update the amount of points necessary to increase that stat * 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; 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 // 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 // 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 ) 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 channel_mjoin(sd); //join new map
clif_pk_mode_message(sd);
} else if (sd->guild && (battle_config.guild_notice_changemap == 2 || guild_notice)) } else if (sd->guild && (battle_config.guild_notice_changemap == 2 || guild_notice))
clif_guild_notice(sd); // Displays at end 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). /** Display gained exp.
* 07f6 <account id>.L <amount>.L <var id>.W <exp type>.W * 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 * amount: INT32_MIN ~ INT32_MAX
* var id: * var id:
* SP_BASEEXP, SP_JOBEXP * 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) void clif_displayexp(struct map_session_data *sd, unsigned int exp, char type, bool quest, bool lost)
{ {
int fd; int fd;
int offset;
#if PACKETVER >= 20170830
int cmd = 0xacc;
#else
int cmd = 0x7f6;
#endif
nullpo_retv(sd); nullpo_retv(sd);
fd = sd->fd; fd = sd->fd;
WFIFOHEAD(fd, packet_len(0x7f6)); WFIFOHEAD(fd, packet_len(cmd));
WFIFOW(fd,0) = 0x7f6; WFIFOW(fd,0) = cmd;
WFIFOL(fd,2) = sd->bl.id; 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); WFIFOL(fd,6) = (int)umin(exp, INT_MAX) * (lost ? -1 : 1);
WFIFOW(fd,10) = type; offset = 0;
WFIFOW(fd,12) = (quest && type != SP_JOBEXP) ? 1 : 0; // NOTE: Somehow JobEXP always in yellow color #endif
WFIFOSET(fd,packet_len(0x7f6)); 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] * [Ind/Hercules]
* 08b3 <Length>.W <id>.L <message>.?B (ZC_SHOWSCRIPT) * 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]; char buf[256];
size_t len; size_t len;
nullpo_retv(bl); nullpo_retv(bl);
@ -18757,7 +18818,7 @@ void clif_showscript(struct block_list* bl, const char* message) {
WBUFW(buf,2) = (uint16)(len+8); WBUFW(buf,2) = (uint16)(len+8);
WBUFL(buf,4) = bl->id; WBUFL(buf,4) = bl->id;
safestrncpy(WBUFCP(buf,8), message, len); 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);
} }
/** /**

View File

@ -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_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_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); void clif_account_name(int fd, uint32 account_id, const char* accname);

View File

@ -181,17 +181,25 @@
packet_keys(0x3C6447A8,0x032170D7,0x6490476C); packet_keys(0x3C6447A8,0x032170D7,0x6490476C);
#elif PACKETVER == 20151014 // 2015-10-14bRagexeRE #elif PACKETVER == 20151014 // 2015-10-14bRagexeRE
packet_keys(0x402728A8,0x5D0E309F,0x240018FD); packet_keys(0x402728A8,0x5D0E309F,0x240018FD);
#elif PACKETVER == 20151022 // 2015-10-22aRagexeRE
packet_keys(0x0311104D,0x46C326D6,0x00E82720);
#elif PACKETVER == 20151028 // 2015-10-28cRagexeRE #elif PACKETVER == 20151028 // 2015-10-28cRagexeRE
packet_keys(0x45B945B9,0x45B945B9,0x45B945B9); packet_keys(0x45B945B9,0x45B945B9,0x45B945B9);
#elif PACKETVER == 20151029 // 2015-10-29aRagexe #elif PACKETVER == 20151029 // 2015-10-29aRagexe
packet_keys(0x45B945B9,0x45B945B9,0x45B945B9); packet_keys(0x45B945B9,0x45B945B9,0x45B945B9);
#elif PACKETVER == 20151104 // 2015-11-04aRagexe #elif PACKETVER == 20151104 // 2015-11-04aRagexe
packet_keys(0x4C17382A,0x7ED174C9,0x29961E4F); packet_keys(0x4C17382A,0x7ED174C9,0x29961E4F);
#elif PACKETVER == 20151111 // 2015-11-11aRagexeRE
packet_keys(0x46097C77,0x5F193871,0x29140A21);
#elif PACKETVER == 20151118 // 2015-11-18aRagexeRE #elif PACKETVER == 20151118 // 2015-11-18aRagexeRE
packet_keys(0x734C3241,0x6E846F34,0x731C06D6); packet_keys(0x734C3241,0x6E846F34,0x731C06D6);
#elif PACKETVER == 20151125 // 2015-11-25dRagexeRE
packet_keys(0x237446C0,0x5EFB343A,0x0EDF06C5);
#elif PACKETVER == 20151202 // 2015-12-02bRagexeRE #elif PACKETVER == 20151202 // 2015-12-02bRagexeRE
packet_keys(0x4EDE52DE,0x52DE52DE,0x52DE52DE); 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); packet_keys(0x25DD643D,0x61AC39DE,0x77A8206D);
#elif PACKETVER == 20151223 // 2015-12-23bRagexeRE #elif PACKETVER == 20151223 // 2015-12-23bRagexeRE
packet_keys(0x347D68D0,0x2C705320,0x7B4A199D); packet_keys(0x347D68D0,0x2C705320,0x7B4A199D);
@ -245,7 +253,7 @@
packet_keys(0x062C5C26,0x6CF47E82,0x4DD53480); packet_keys(0x062C5C26,0x6CF47E82,0x4DD53480);
#elif PACKETVER == 20160622 // 2016-06-22aRagexeRE #elif PACKETVER == 20160622 // 2016-06-22aRagexeRE
packet_keys(0x426548AB,0x5C0F5DD4,0x03022710); 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); packet_keys(0x0DF31CCC,0x54281606,0x5C4C6855);
#elif PACKETVER == 20160706 // 2016-07-06cRagexeRE #elif PACKETVER == 20160706 // 2016-07-06cRagexeRE
packet_keys(0x33A766D0,0x743F04F8,0x0FA0276C); packet_keys(0x33A766D0,0x743F04F8,0x0FA0276C);
@ -277,7 +285,7 @@
packet_keys(0x34882F11,0x7C870E70,0x7E61350D); packet_keys(0x34882F11,0x7C870E70,0x7E61350D);
#elif PACKETVER == 20161026 // 2016-10-26bRagexeRE #elif PACKETVER == 20161026 // 2016-10-26bRagexeRE
packet_keys(0x2CB86AE6,0x7D12660E,0x1B004DEB); 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); packet_keys(0x76725C17,0x72FE4EC1,0x07A91BFD);
#elif PACKETVER == 20161109 // 2016-11-09bRagexeRE #elif PACKETVER == 20161109 // 2016-11-09bRagexeRE
packet_keys(0x0A5277C0,0x2DB17506,0x0E8F26DA); packet_keys(0x0A5277C0,0x2DB17506,0x0E8F26DA);
@ -345,6 +353,29 @@
packet_keys(0x155F34EC,0x2D943FA9,0x3D9170EB); packet_keys(0x155F34EC,0x2D943FA9,0x3D9170EB);
#elif PACKETVER == 20170628 // 2017-06-28bRagexeRE #elif PACKETVER == 20170628 // 2017-06-28bRagexeRE
packet_keys(0x04691C86,0x43C210E2,0x2FE277E2); 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 #elif PACKETVER > 20110817
#error Unsupported packet version. #error Unsupported packet version.
#endif #endif

View File

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

View File

@ -1058,6 +1058,37 @@
parseable_packet(0x095e,8,clif_parse_MoveToKafra,2,4); parseable_packet(0x095e,8,clif_parse_MoveToKafra,2,4);
parseable_packet(0x0961,6,clif_parse_GetCharNameRequest,2); parseable_packet(0x0961,6,clif_parse_GetCharNameRequest,2);
parseable_packet(0x0964,19,clif_parse_WantToConnection,2,6,10,14,18); 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 // 2015-10-28cRagexeRE
#elif PACKETVER == 20151028 #elif PACKETVER == 20151028
parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); 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(0x093A,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
parseable_packet(0x0940,36,clif_parse_StoragePassword,2,4,20); parseable_packet(0x0940,36,clif_parse_StoragePassword,2,4,20);
parseable_packet(0x0964,6,clif_parse_TakeItem,2); 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 // 2015-11-18aRagexeRE
#elif PACKETVER == 20151118 #elif PACKETVER == 20151118
parseable_packet(0x022d,6,clif_parse_TickSend,2); parseable_packet(0x022d,6,clif_parse_TickSend,2);
@ -1182,6 +1244,37 @@
//parseable_packet(0x0957,4,NULL,0); // CZ_GANGSI_RANK //parseable_packet(0x0957,4,NULL,0); // CZ_GANGSI_RANK
parseable_packet(0x095c,18,clif_parse_PartyBookingRegisterReq,2,4,6); parseable_packet(0x095c,18,clif_parse_PartyBookingRegisterReq,2,4,6);
parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); 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 // 2015-12-02bRagexeRE
#elif PACKETVER == 20151202 #elif PACKETVER == 20151202
parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); 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(0x083c,10,clif_parse_UseSkillToId,2,4,6);
parseable_packet(0x0870,36,clif_parse_StoragePassword,2,4,20); parseable_packet(0x0870,36,clif_parse_StoragePassword,2,4,20);
parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); 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 #elif PACKETVER == 20151216
parseable_packet(0x022D,5,clif_parse_ChangeDir,2,4); parseable_packet(0x022D,5,clif_parse_ChangeDir,2,4);
parseable_packet(0x0361,6,clif_parse_ReqClickBuyingStore,2); parseable_packet(0x0361,6,clif_parse_ReqClickBuyingStore,2);
@ -2049,8 +2174,8 @@
parseable_packet(0x0959,6,clif_parse_GetCharNameRequest,2); parseable_packet(0x0959,6,clif_parse_GetCharNameRequest,2);
parseable_packet(0x0965,5,clif_parse_ChangeDir,2,4); parseable_packet(0x0965,5,clif_parse_ChangeDir,2,4);
parseable_packet(0x0969,6,clif_parse_DropItem,2,4); parseable_packet(0x0969,6,clif_parse_DropItem,2,4);
// 2016-06-30aRagexeRE // 2016-06-29aRagexeRE or 2016-06-30aRagexeRE
#elif PACKETVER == 20160630 #elif PACKETVER == 20160629 || PACKETVER == 20160630
parseable_packet(0x0202,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); parseable_packet(0x0202,12,clif_parse_SearchStoreInfoListItemClick,2,6,10);
parseable_packet(0x022d,5,clif_parse_WalkToXY,2); parseable_packet(0x022d,5,clif_parse_WalkToXY,2);
//parseable_packet(0x035f,4,NULL,0); // CZ_GANGSI_RANK //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(0x095c,-1,clif_parse_ItemListWindowSelected,2,4,8,12);
parseable_packet(0x095e,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); parseable_packet(0x095e,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
parseable_packet(0x0962,5,clif_parse_ChangeDir,2,4); parseable_packet(0x0962,5,clif_parse_ChangeDir,2,4);
// 2016-11-03aRagexeRE // 2016-11-02aRagexeRE or 2016-11-03aRagexeRE
#elif PACKETVER == 20161103 #elif PACKETVER == 20161102 || PACKETVER == 20161103
parseable_packet(0x0361,8,clif_parse_MoveFromKafra,2,4); parseable_packet(0x0361,8,clif_parse_MoveFromKafra,2,4);
//parseable_packet(0x0367,4,NULL,0); // CZ_GANGSI_RANK //parseable_packet(0x0367,4,NULL,0); // CZ_GANGSI_RANK
parseable_packet(0x0436,7,clif_parse_ActionRequest,2,6); 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(0x083C,10,clif_parse_UseSkillToId,2,4,6);
parseable_packet(0x0863,36,clif_parse_StoragePassword,0); parseable_packet(0x0863,36,clif_parse_StoragePassword,0);
parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2); 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
#endif /* _CLIF_SHUFFLE_H_ */ #endif /* _CLIF_SHUFFLE_H_ */

View File

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

View File

@ -19718,7 +19718,7 @@ unsigned short script_instancegetid(struct script_state* st)
struct guild *gd = NULL; struct guild *gd = NULL;
struct clan *cd = NULL; struct clan *cd = NULL;
if (script_rid2sd(sd)) { if ((sd = map_id2sd(st->rid))) {
if (sd->instance_id) if (sd->instance_id)
instance_id = 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) 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 * 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) { BUILDIN_FUNC(showscript) {
struct block_list *bl = NULL; struct block_list *bl = NULL;
const char *msg = script_getstr(st,2); const char *msg = script_getstr(st,2);
int id = 0; int id = 0;
send_target target = AREA;
if (script_hasdata(st,3)) { if (script_hasdata(st,3)) {
id = script_getnum(st,3); id = script_getnum(st,3);
@ -22104,7 +22108,15 @@ BUILDIN_FUNC(showscript) {
return SCRIPT_CMD_FAILURE; 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); script_pushint(st,1);
return SCRIPT_CMD_SUCCESS; return SCRIPT_CMD_SUCCESS;
@ -23565,6 +23577,7 @@ BUILDIN_FUNC(achievementupdate) {
/** /**
* Get an equipment's refine cost * Get an equipment's refine cost
* getequiprefinecost(<equipment slot>,<type>,<information>{,<char id>}) * getequiprefinecost(<equipment slot>,<type>,<information>{,<char id>})
* returns -1 on fail
*/ */
BUILDIN_FUNC(getequiprefinecost) { BUILDIN_FUNC(getequiprefinecost) {
int i = -1, slot, type, info; int i = -1, slot, type, info;
@ -23579,9 +23592,19 @@ BUILDIN_FUNC(getequiprefinecost) {
return SCRIPT_CMD_FAILURE; return SCRIPT_CMD_FAILURE;
} }
if (type < 0 || type >= REFINE_COST_MAX) {
script_pushint(st, -1);
return SCRIPT_CMD_SUCCESS;
}
if (equip_index_check(slot)) if (equip_index_check(slot))
i = pc_checkequip(sd, equip_bitmask[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; int weapon_lv = sd->inventory_data[i]->wlv;
if (sd->inventory_data[i]->type == IT_SHADOWGEAR) { if (sd->inventory_data[i]->type == IT_SHADOWGEAR) {
if (sd->inventory_data[i]->equip == EQP_SHADOW_WEAPON) if (sd->inventory_data[i]->equip == EQP_SHADOW_WEAPON)
@ -24178,7 +24201,7 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(npcshopupdate,"sii?"), BUILDIN_DEF(npcshopupdate,"sii?"),
BUILDIN_DEF(getattachedrid,""), BUILDIN_DEF(getattachedrid,""),
BUILDIN_DEF(getvar,"vi"), BUILDIN_DEF(getvar,"vi"),
BUILDIN_DEF(showscript,"s?"), BUILDIN_DEF(showscript,"s??"),
BUILDIN_DEF(ignoretimeout,"i?"), BUILDIN_DEF(ignoretimeout,"i?"),
BUILDIN_DEF(geteleminfo,"i?"), BUILDIN_DEF(geteleminfo,"i?"),
BUILDIN_DEF(setquestinfo_level,"iii"), BUILDIN_DEF(setquestinfo_level,"iii"),

View File

@ -2712,7 +2712,11 @@ static int skill_magic_reflect(struct block_list* src, struct block_list* bl, in
return 0; return 0;
// Kaite reflection - Does not bypass Boss check // 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. // 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. // Kyomu doesn't disable Kaite, but the "skill fail chance" part of Kyomu applies to it.
clif_specialeffect(bl, 438, AREA); clif_specialeffect(bl, 438, AREA);