summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/char/pincode.c5
-rw-r--r--src/common/HPMDataCheck.h2
-rw-r--r--src/common/grfio.c4
-rw-r--r--src/common/sysinfo.c2
-rw-r--r--src/common/utils.c2
-rw-r--r--src/map/atcommand.c10
-rw-r--r--src/map/clif.c63
-rw-r--r--src/map/clif.h15
-rw-r--r--src/map/map.c14
-rw-r--r--src/map/map.h4
-rw-r--r--src/map/npc.c4
-rw-r--r--src/map/packets.h23
-rw-r--r--src/map/packets_keys_main.h6
-rw-r--r--src/map/packets_keys_zero.h5
-rw-r--r--src/map/packets_shuffle_main.h6
-rw-r--r--src/map/packets_shuffle_zero.h5
-rw-r--r--src/map/packets_struct.h11
-rw-r--r--src/map/script.c34
-rw-r--r--src/map/script.h4
-rw-r--r--src/plugins/HPMHooking/HPMHooking.Defs.inc6
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc12
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc3
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.Hooks.inc78
23 files changed, 280 insertions, 38 deletions
diff --git a/src/char/pincode.c b/src/char/pincode.c
index 01c1f482c..73d9809fa 100644
--- a/src/char/pincode.c
+++ b/src/char/pincode.c
@@ -82,6 +82,7 @@ void pincode_check(int fd, struct char_session_data* sd)
return;
safestrncpy(pin, RFIFOP(fd, 6), sizeof(pin));
+ pincode->decrypt(sd->pincode_seed, pin);
if (pincode->check_blacklist && pincode->isBlacklisted(pin)) {
pincode->loginstate(fd, sd, PINCODE_LOGIN_RESTRICT_PW);
@@ -205,7 +206,7 @@ void pincode_makestate(int fd, struct char_session_data *sd, enum pincode_make_r
WFIFOHEAD(fd, 8);
WFIFOW(fd, 0) = 0x8bb;
WFIFOW(fd, 2) = state;
- WFIFOW(fd, 4) = 0;
+ WFIFOL(fd, 4) = sd->pincode_seed;
WFIFOSET(fd, 8);
}
@@ -223,7 +224,7 @@ void pincode_editstate(int fd, struct char_session_data *sd, enum pincode_edit_r
WFIFOHEAD(fd, 8);
WFIFOW(fd, 0) = 0x8bf;
WFIFOW(fd, 2) = state;
- WFIFOW(fd, 4) = sd->pincode_seed = rnd() % 0xFFFF;
+ WFIFOL(fd, 4) = sd->pincode_seed = rnd() % 0xFFFF;
WFIFOSET(fd, 8);
}
diff --git a/src/common/HPMDataCheck.h b/src/common/HPMDataCheck.h
index f8a55218e..0a54038b5 100644
--- a/src/common/HPMDataCheck.h
+++ b/src/common/HPMDataCheck.h
@@ -587,6 +587,7 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "PACKET_CZ_ADD_ITEM_TO_MAIL", sizeof(struct PACKET_CZ_ADD_ITEM_TO_MAIL), SERVER_TYPE_MAP },
{ "PACKET_CZ_CHECKNAME", sizeof(struct PACKET_CZ_CHECKNAME), SERVER_TYPE_MAP },
{ "PACKET_CZ_OPEN_UI", sizeof(struct PACKET_CZ_OPEN_UI), SERVER_TYPE_MAP },
+ { "PACKET_CZ_PRIVATE_AIRSHIP_REQUEST", sizeof(struct PACKET_CZ_PRIVATE_AIRSHIP_REQUEST), SERVER_TYPE_MAP },
{ "PACKET_CZ_REQ_DELETE_MAIL", sizeof(struct PACKET_CZ_REQ_DELETE_MAIL), SERVER_TYPE_MAP },
{ "PACKET_CZ_REQ_ITEM_FROM_MAIL", sizeof(struct PACKET_CZ_REQ_ITEM_FROM_MAIL), SERVER_TYPE_MAP },
{ "PACKET_CZ_REQ_NEXT_MAIL_LIST", sizeof(struct PACKET_CZ_REQ_NEXT_MAIL_LIST), SERVER_TYPE_MAP },
@@ -616,6 +617,7 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "PACKET_ZC_NOTIFY_CLAN_CONNECTINFO", sizeof(struct PACKET_ZC_NOTIFY_CLAN_CONNECTINFO), SERVER_TYPE_MAP },
{ "PACKET_ZC_NOTIFY_UNREADMAIL", sizeof(struct PACKET_ZC_NOTIFY_UNREADMAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_OPEN_UI", sizeof(struct PACKET_ZC_OPEN_UI), SERVER_TYPE_MAP },
+ { "PACKET_ZC_PRIVATE_AIRSHIP_RESPONSE", sizeof(struct PACKET_ZC_PRIVATE_AIRSHIP_RESPONSE), SERVER_TYPE_MAP },
{ "PACKET_ZC_READ_MAIL", sizeof(struct PACKET_ZC_READ_MAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_SKILL_SCALE", sizeof(struct PACKET_ZC_SKILL_SCALE), SERVER_TYPE_MAP },
{ "PACKET_ZC_UI_ACTION", sizeof(struct PACKET_ZC_UI_ACTION), SERVER_TYPE_MAP },
diff --git a/src/common/grfio.c b/src/common/grfio.c
index fba3dda86..d328f9c68 100644
--- a/src/common/grfio.c
+++ b/src/common/grfio.c
@@ -786,8 +786,8 @@ static bool grfio_parse_restable_row(const char *row)
if (strstr(w2, ".gat") == NULL && strstr(w2, ".rsw") == NULL)
return false; // we only need the maps' GAT and RSW files
- sprintf(src, "data\\%s", w1);
- sprintf(dst, "data\\%s", w2);
+ safesnprintf(src, 256, "data\\%s", w1);
+ safesnprintf(dst, 256, "data\\%s", w2);
entry = grfio_filelist_find(dst);
if (entry != NULL) {
diff --git a/src/common/sysinfo.c b/src/common/sysinfo.c
index 3c7e25a0c..0056aee1e 100644
--- a/src/common/sysinfo.c
+++ b/src/common/sysinfo.c
@@ -321,7 +321,7 @@ bool sysinfo_git_get_revision(char **out)
while (*ref) {
FILE *fp;
- snprintf(filepath, sizeof(filepath), ".git/%s", ref);
+ safesnprintf(filepath, sizeof(filepath), ".git/%s", ref);
if ((fp = fopen(filepath, "r")) != NULL) {
if (fgets(line, sizeof(line)-1, fp) == NULL) {
fclose(fp);
diff --git a/src/common/utils.c b/src/common/utils.c
index 0d76a885e..74c44d147 100644
--- a/src/common/utils.c
+++ b/src/common/utils.c
@@ -216,7 +216,7 @@ void findfile(const char *p, const char *pat, void (func)(const char*))
if (strcmp(entry->d_name, "..") == 0)
continue;
- sprintf(tmppath,"%s%c%s",path, PATHSEP, entry->d_name);
+ safesnprintf(tmppath, sizeof(tmppath), "%s%c%s", path, PATHSEP, entry->d_name);
// check if the pattern matches.
if (strstr(entry->d_name, pattern)) {
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 990761137..aa8c9375b 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -3956,6 +3956,10 @@ ACMD(mapinfo)
strcat(atcmd_output, msg_fd(fd, 1063)); // NoAutoloot |
if (map->list[m_id].flag.noviewid != EQP_NONE)
strcat(atcmd_output, msg_fd(fd,1079)); // NoViewID |
+ if (map->list[m_id].flag.pairship_startable)
+ strcat(atcmd_output, msg_fd(fd, 1292)); // PrivateAirshipStartable |
+ if (map->list[m_id].flag.pairship_endable)
+ strcat(atcmd_output, msg_fd(fd, 1293)); // PrivateAirshipEndable |
clif->message(fd, atcmd_output);
switch (list) {
@@ -6193,7 +6197,7 @@ ACMD(cleanarea) {
*------------------------------------------*/
ACMD(npctalk)
{
- char name[NAME_LENGTH],mes[100],temp[100];
+ char name[NAME_LENGTH], mes[100], temp[200];
struct npc_data *nd;
bool ifcolor=(*(info->command + 7) != 'c' && *(info->command + 7) != 'C')?0:1;
unsigned int color = 0;
@@ -6230,7 +6234,7 @@ ACMD(npctalk)
ACMD(pettalk)
{
- char mes[100],temp[100];
+ char mes[100], temp[200];
struct pet_data *pd;
if (battle_config.min_chat_delay) {
@@ -7036,7 +7040,7 @@ ACMD(homhungry)
*------------------------------------------*/
ACMD(homtalk)
{
- char mes[100],temp[100];
+ char mes[100], temp[200];
if (battle_config.min_chat_delay) {
if (DIFF_TICK(sd->cantalk_tick, timer->gettick()) > 0)
diff --git a/src/map/clif.c b/src/map/clif.c
index 47d5a1586..06f054ff2 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -19990,9 +19990,9 @@ void clif_rodex_send_maillist(int fd, struct map_session_data *sd, int8 open_typ
}
inner->Titlelength = (int16)strlen(msg->title) + 1;
if (open_type != RODEX_OPENTYPE_RETURN) {
- strncpy(inner->SenderName, msg->sender_name, sizeof(msg->sender_name));
+ strncpy(inner->SenderName, msg->sender_name, sizeof(inner->SenderName));
} else {
- strncpy(inner->SenderName, msg->receiver_name, sizeof(msg->receiver_name));
+ strncpy(inner->SenderName, msg->receiver_name, sizeof(inner->SenderName));
}
strncpy(inner->title, msg->title, inner->Titlelength);
size += sizeof(*inner) + inner->Titlelength;
@@ -20051,9 +20051,9 @@ void clif_rodex_send_mails_all(int fd, struct map_session_data *sd, int64 mail_i
}
inner->Titlelength = (int16)strlen(msg->title) + 1;
if (msg->opentype != RODEX_OPENTYPE_RETURN) {
- strncpy(inner->SenderName, msg->sender_name, sizeof(msg->sender_name));
+ strncpy(inner->SenderName, msg->sender_name, sizeof(inner->SenderName));
} else {
- strncpy(inner->SenderName, msg->receiver_name, sizeof(msg->receiver_name));
+ strncpy(inner->SenderName, msg->receiver_name, sizeof(inner->SenderName));
}
strncpy(inner->title, msg->title, inner->Titlelength);
size += sizeof(*inner) + inner->Titlelength;
@@ -20122,9 +20122,9 @@ void clif_rodex_send_refresh(int fd, struct map_session_data *sd, int8 open_type
}
inner->Titlelength = (int16)strlen(msg->title) + 1;
if (open_type != RODEX_OPENTYPE_RETURN) {
- strncpy(inner->SenderName, msg->sender_name, sizeof(msg->sender_name));
+ strncpy(inner->SenderName, msg->sender_name, sizeof(inner->SenderName));
} else {
- strncpy(inner->SenderName, msg->receiver_name, sizeof(msg->receiver_name));
+ strncpy(inner->SenderName, msg->receiver_name, sizeof(inner->SenderName));
}
strncpy(inner->title, msg->title, inner->Titlelength);
size += sizeof(*inner) + inner->Titlelength;
@@ -20597,6 +20597,11 @@ void clif_parse_attendance_reward_request(int fd, struct map_session_data *sd)
#endif
}
+void clif_parse_cz_blocking_play_cancel(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
+void clif_parse_cz_blocking_play_cancel(int fd, struct map_session_data *sd)
+{
+}
+
void clif_ui_action(struct map_session_data *sd, int32 UIType, int32 data)
{
@@ -20610,6 +20615,49 @@ void clif_ui_action(struct map_session_data *sd, int32 UIType, int32 data)
clif->send(&p, sizeof(p), &sd->bl, SELF);
}
+
+void clif_parse_private_airship_request(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
+void clif_parse_private_airship_request(int fd, struct map_session_data *sd)
+{
+#if defined(PACKETVER_RE) && PACKETVER >= 20180321
+ char evname[EVENT_NAME_LENGTH];
+ struct event_data *ev = NULL;
+ const struct PACKET_CZ_PRIVATE_AIRSHIP_REQUEST *p = RP2PTR(fd);
+
+ safestrncpy(evname, "private_airship::OnAirShipRequest", EVENT_NAME_LENGTH);
+ if ((ev = strdb_get(npc->ev_db, evname))) {
+ pc->setregstr(sd, script->add_str("@mapname$"), p->mapName);
+ pc->setreg(sd, script->add_str("@itemid"), p->ItemID);
+ script->run_npc(ev->nd->u.scr.script, ev->pos, sd->bl.id, ev->nd->bl.id);
+ } else {
+ ShowError("clif_parse_private_airship_request: event '%s' not found, operation failed\n", evname);
+ }
+#else
+ ShowWarning("clif_parse_private_airship_request: private airship is not supported in this client version, possible packet manipulation.");
+#endif
+}
+
+void clif_private_airship_response(struct map_session_data *sd, uint32 flag)
+{
+#if defined(PACKETVER_RE) && PACKETVER >= 20180321
+ struct PACKET_ZC_PRIVATE_AIRSHIP_RESPONSE p;
+
+ nullpo_retv(sd);
+
+ if (flag > P_AIRSHIP_ITEM_INVALID) {
+ ShowError("clif_private_airship_response: invalid flag given '%d', defaulting to 0.\n", flag);
+ flag = 0;
+ }
+
+ p.PacketType = 0xA4A;
+ p.flag = flag;
+
+ clif->send(&p, sizeof(p), &sd->bl, SELF);
+#else
+ ShowWarning("clif_private_airship_response: private airship works only for clients >= 20180321.");
+#endif
+}
+
/*==========================================
* Main client packet processing function
*------------------------------------------*/
@@ -21623,6 +21671,7 @@ void clif_defaults(void) {
clif->pDebug = clif_parse_debug;
clif->pSkillSelectMenu = clif_parse_SkillSelectMenu;
clif->pMoveItem = clif_parse_MoveItem;
+ clif->p_cz_blocking_play_cancel = clif_parse_cz_blocking_play_cancel;
/* dull */
clif->pDull = clif_parse_dull;
/* BGQueue */
@@ -21715,4 +21764,6 @@ void clif_defaults(void) {
clif->open_ui = clif_open_ui;
clif->pAttendanceRewardRequest = clif_parse_attendance_reward_request;
clif->ui_action = clif_ui_action;
+ clif->pPrivateAirshipRequest = clif_parse_private_airship_request;
+ clif->PrivateAirshipResponse = clif_private_airship_response;
}
diff --git a/src/map/clif.h b/src/map/clif.h
index f0eaaf6eb..58eb6b357 100644
--- a/src/map/clif.h
+++ b/src/map/clif.h
@@ -589,6 +589,18 @@ enum ui_types {
ATTENDANCE_UI
};
/**
+* Private Airship Responds
+**/
+enum private_airship {
+ P_AIRSHIP_NONE,
+ P_AIRSHIP_RETRY,
+ P_AIRSHIP_INVALID_START_MAP,
+ P_AIRSHIP_INVALID_END_MAP,
+ P_AIRSHIP_ITEM_NOT_ENOUGH,
+ P_AIRSHIP_ITEM_INVALID
+};
+
+/**
* Structures
**/
typedef void (*pFunc)(int, struct map_session_data *); //cant help but put it first
@@ -1356,6 +1368,7 @@ struct clif_interface {
void (*pSkillSelectMenu) (int fd, struct map_session_data *sd);
void (*pMoveItem) (int fd, struct map_session_data *sd);
void (*pDull) (int fd, struct map_session_data *sd);
+ void (*p_cz_blocking_play_cancel) (int fd, struct map_session_data *sd);
/* BGQueue */
void (*pBGQueueRegister) (int fd, struct map_session_data *sd);
void (*pBGQueueCheckState) (int fd, struct map_session_data *sd);
@@ -1450,6 +1463,8 @@ struct clif_interface {
void (*open_ui) (struct map_session_data *sd, int8 UIType);
void (*pAttendanceRewardRequest) (int fd, struct map_session_data *sd);
void (*ui_action) (struct map_session_data *sd, int32 UIType, int32 data);
+ void (*pPrivateAirshipRequest) (int fd, struct map_session_data *sd);
+ void (*PrivateAirshipResponse) (struct map_session_data *sd, uint32 flag);
};
#ifdef HERCULES_CORE
diff --git a/src/map/map.c b/src/map/map.c
index 90b304865..8386b3c3d 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -5119,11 +5119,12 @@ bool map_zone_mf_cache(int m, char *flag, char *params) {
}
} else if (!strcmpi(flag,"adjust_unit_duration")) {
int skill_id, k;
- char skill_name[MAP_ZONE_MAPFLAG_LENGTH], modifier[MAP_ZONE_MAPFLAG_LENGTH];
- size_t len = strlen(params);
+ char skill_name[MAX_SKILL_NAME_LENGTH], modifier[MAP_ZONE_MAPFLAG_LENGTH];
+ size_t len;
modifier[0] = '\0';
- memcpy(skill_name, params, MAP_ZONE_MAPFLAG_LENGTH);
+ safestrncpy(skill_name, params, MAX_SKILL_NAME_LENGTH);
+ len = strlen(skill_name);
for(k = 0; k < len; k++) {
if( skill_name[k] == '\t' ) {
@@ -5152,11 +5153,12 @@ bool map_zone_mf_cache(int m, char *flag, char *params) {
}
} else if (!strcmpi(flag,"adjust_skill_damage")) {
int skill_id, k;
- char skill_name[MAP_ZONE_MAPFLAG_LENGTH], modifier[MAP_ZONE_MAPFLAG_LENGTH];
- size_t len = strlen(params);
+ char skill_name[MAX_SKILL_NAME_LENGTH], modifier[MAP_ZONE_MAPFLAG_LENGTH];
+ size_t len;
modifier[0] = '\0';
- memcpy(skill_name, params, MAP_ZONE_MAPFLAG_LENGTH);
+ safestrncpy(skill_name, params, MAX_SKILL_NAME_LENGTH);
+ len = strlen(skill_name);
for(k = 0; k < len; k++) {
if( skill_name[k] == '\t' ) {
diff --git a/src/map/map.h b/src/map/map.h
index d6afdc160..b77b68813 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -740,7 +740,7 @@ enum map_zone_merge_type {
#define MAP_ZONE_BG_NAME "Battlegrounds"
#define MAP_ZONE_CVC_NAME "CvC"
#define MAP_ZONE_PK_NAME "PK Mode"
-#define MAP_ZONE_MAPFLAG_LENGTH 50
+#define MAP_ZONE_MAPFLAG_LENGTH 65
struct map_zone_data {
char name[MAP_ZONE_NAME_LENGTH];/* 20'd */
@@ -857,6 +857,8 @@ struct map_data {
unsigned notomb : 1;
unsigned nocashshop : 1;
unsigned noautoloot : 1;
+ unsigned pairship_startable : 1;
+ unsigned pairship_endable : 1;
uint32 noviewid; ///< noviewid (bitmask - @see enum equip_pos)
} flag;
struct point save;
diff --git a/src/map/npc.c b/src/map/npc.c
index b72cc06cc..f256cbd7d 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -4517,6 +4517,10 @@ const char *npc_parse_mapflag(const char *w1, const char *w2, const char *w3, co
map->list[m].flag.nocashshop = (state) ? 1 : 0;
} else if (!strcmpi(w3,"noviewid")) {
map->list[m].flag.noviewid = (state) ? atoi(w4) : 0;
+ } else if (!strcmpi(w3, "pairship_startable")) {
+ map->list[m].flag.pairship_startable = (state) ? 1 : 0;
+ } else if (!strcmpi(w3, "pairship_endable")) {
+ map->list[m].flag.pairship_endable = (state) ? 1 : 0;
} else {
npc->parse_unknown_mapflag(mapname, w3, w4, start, buffer, filepath, retval);
}
diff --git a/src/map/packets.h b/src/map/packets.h
index a723463b4..29a0e0090 100644
--- a/src/map/packets.h
+++ b/src/map/packets.h
@@ -1534,7 +1534,12 @@ packet(0x96e,-1,clif->ackmergeitems);
//packet(0x07d4,4);
//packet(0x07d5,4);
//packet(0x07d6,4);
- //packet(0x0447,2);
+#endif
+
+// 2009-05-20aRagexe, 2009-05-20aRagexeRE
+#if PACKETVER >= 20090520
+// new packets
+ packet(0x0447,2,clif->p_cz_blocking_play_cancel); // PACKET_CZ_BLOCKING_PLAY_CANCEL
#endif
//2009-06-03aRagexeRE
@@ -2310,7 +2315,6 @@ packet(0x96e,-1,clif->ackmergeitems);
// Shuffle End
// New Packets (wrong version or packet not exists)
- packet(0x0447,2); // PACKET_CZ_BLOCKING_PLAY_CANCEL
packet(0x099f,24);
// New Packets End
#endif
@@ -3823,7 +3827,7 @@ packet(0x96e,-1,clif->ackmergeitems);
// changed packet sizes
packet(0x006d,157); // HC_ACCEPT_MAKECHAR
packet(0x08e3,157); // HC_UPDATE_CHARINFO
- packet(0x0a49,20);
+ packet(0x0a49, 20, clif->pPrivateAirshipRequest);
#endif
// 2017-09-06cRagexeRE
@@ -3993,7 +3997,7 @@ packet(0x96e,-1,clif->ackmergeitems);
// new packets
packet(0x0af2,40,clif->pDull/*,XXX*/);
packet(0x0af3,-1,clif->pDull/*,XXX*/);
- packet(0x0af4,11,clif->pDull/*,XXX*/);
+ packet(0x0af4,11,clif->pUseSkillToPos,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND
// changed packet sizes
packet(0x0ae6,10,clif->pDull/*,XXX*/);
#endif
@@ -4017,7 +4021,7 @@ packet(0x96e,-1,clif->ackmergeitems);
// 2018-02-07bRagexeRE, 2018-02-07bRagexe
#if PACKETVER >= 20180207
// new packets
- packet(0x0af4,11);
+ packet(0x0af4,11,clif->pUseSkillToPos,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND
packet(0x0af5,3);
packet(0x0af6,88);
packet(0x0af7,32);
@@ -4096,4 +4100,13 @@ packet(0x96e,-1,clif->ackmergeitems);
#endif
#endif
+#ifdef PACKETVER_ZERO
+// 2018-04-25_3aRagexe_zero
+#if PACKETVER >= 20180425
+// new packets
+ packet(0x0afb,-1,clif->pDull/*,XXX*/);
+// changed packet sizes
+#endif
+#endif // PACKETVER_ZERO
+
#endif /* MAP_PACKETS_H */
diff --git a/src/map/packets_keys_main.h b/src/map/packets_keys_main.h
index 1f6a3ca6d..5890377d6 100644
--- a/src/map/packets_keys_main.h
+++ b/src/map/packets_keys_main.h
@@ -874,7 +874,7 @@
packetKeys(0x6A596301,0x76866D0E,0x32294A45);
#endif
-// 2013-12-23aRagexeRE, 2014-05-08aRagexe, 2014-05-08aRagexeRE, 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-21aRagexeRE, 2018-03-28bRagexe, 2018-03-28bRagexeRE, 2018-04-04bRagexe, 2018-04-04cRagexeRE, 2018-04-18aRagexe, 2018-04-18bRagexeRE
+// 2013-12-23aRagexeRE, 2014-05-08aRagexe, 2014-05-08aRagexeRE, 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-21aRagexeRE, 2018-03-28bRagexe, 2018-03-28bRagexeRE, 2018-04-04bRagexe, 2018-04-04cRagexeRE, 2018-04-18aRagexe, 2018-04-18bRagexeRE, 2018-04-25cRagexe, 2018-04-25cRagexeRE, 2018-05-02bRagexe, 2018-05-02bRagexeRE
#if PACKETVER == 20131223 || \
PACKETVER == 20140508 || \
PACKETVER == 20140611 || \
@@ -883,7 +883,9 @@
PACKETVER == 20180321 || \
PACKETVER == 20180328 || \
PACKETVER == 20180404 || \
- PACKETVER >= 20180418
+ PACKETVER == 20180418 || \
+ PACKETVER == 20180425 || \
+ PACKETVER >= 20180502
packetKeys(0x00000000,0x00000000,0x00000000);
#endif
diff --git a/src/map/packets_keys_zero.h b/src/map/packets_keys_zero.h
index d9625f716..8540ff5a5 100644
--- a/src/map/packets_keys_zero.h
+++ b/src/map/packets_keys_zero.h
@@ -29,7 +29,7 @@
/* This file is autogenerated, please do not commit manual changes */
-// 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero, 2018-03-15aRagexe_zero, 2018-03-21aRagexe_zero, 2018-03-21bRagexe_zero, 2018-03-28_1aRagexe_zero, 2018-03-28cRagexe_zero, 2018-04-11aRagexe_zero
+// 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero, 2018-03-15aRagexe_zero, 2018-03-21aRagexe_zero, 2018-03-21bRagexe_zero, 2018-03-28_1aRagexe_zero, 2018-03-28cRagexe_zero, 2018-04-11aRagexe_zero, 2018-04-25_3aRagexe_zero
#if PACKETVER == 20171019 || \
PACKETVER == 20171023 || \
PACKETVER == 20171024 || \
@@ -42,7 +42,8 @@
PACKETVER == 20180315 || \
PACKETVER == 20180321 || \
PACKETVER == 20180328 || \
- PACKETVER >= 20180411
+ PACKETVER == 20180411 || \
+ PACKETVER >= 20180425
packetKeys(0x00000000,0x00000000,0x00000000);
#endif
diff --git a/src/map/packets_shuffle_main.h b/src/map/packets_shuffle_main.h
index 4bb998652..6ef63aae9 100644
--- a/src/map/packets_shuffle_main.h
+++ b/src/map/packets_shuffle_main.h
@@ -3345,14 +3345,16 @@
packet(0x0969,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
#endif
-// 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-21aRagexeRE, 2018-03-28bRagexe, 2018-03-28bRagexeRE, 2018-04-04bRagexe, 2018-04-04cRagexeRE, 2018-04-18aRagexe, 2018-04-18bRagexeRE
+// 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-21aRagexeRE, 2018-03-28bRagexe, 2018-03-28bRagexeRE, 2018-04-04bRagexe, 2018-04-04cRagexeRE, 2018-04-18aRagexe, 2018-04-18bRagexeRE, 2018-04-25cRagexe, 2018-04-25cRagexeRE, 2018-05-02bRagexe, 2018-05-02bRagexeRE
#if PACKETVER == 20140611 || \
PACKETVER == 20150225 || \
PACKETVER == 20180315 || \
PACKETVER == 20180321 || \
PACKETVER == 20180328 || \
PACKETVER == 20180404 || \
- PACKETVER >= 20180418
+ PACKETVER == 20180418 || \
+ PACKETVER == 20180425 || \
+ PACKETVER >= 20180502
packet(0x0202,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
packet(0x022d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x023b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
diff --git a/src/map/packets_shuffle_zero.h b/src/map/packets_shuffle_zero.h
index 087eb119f..e7083e200 100644
--- a/src/map/packets_shuffle_zero.h
+++ b/src/map/packets_shuffle_zero.h
@@ -36,7 +36,7 @@
/* This file is autogenerated, please do not commit manual changes */
-// 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero, 2018-03-15aRagexe_zero, 2018-03-21aRagexe_zero, 2018-03-21bRagexe_zero, 2018-03-28_1aRagexe_zero, 2018-03-28cRagexe_zero, 2018-04-11aRagexe_zero
+// 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero, 2018-03-15aRagexe_zero, 2018-03-21aRagexe_zero, 2018-03-21bRagexe_zero, 2018-03-28_1aRagexe_zero, 2018-03-28cRagexe_zero, 2018-04-11aRagexe_zero, 2018-04-25_3aRagexe_zero
#if PACKETVER == 20171019 || \
PACKETVER == 20171023 || \
PACKETVER == 20171024 || \
@@ -49,7 +49,8 @@
PACKETVER == 20180315 || \
PACKETVER == 20180321 || \
PACKETVER == 20180328 || \
- PACKETVER >= 20180411
+ PACKETVER == 20180411 || \
+ PACKETVER >= 20180425
packet(0x0202,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
packet(0x022d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x023b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h
index 5b9a4344a..cae794e92 100644
--- a/src/map/packets_struct.h
+++ b/src/map/packets_struct.h
@@ -1729,6 +1729,17 @@ struct PACKET_ZC_UI_ACTION {
int32 data;
} __attribute__((packed));
+struct PACKET_CZ_PRIVATE_AIRSHIP_REQUEST {
+ int16 PacketType;
+ char mapName[MAP_NAME_LENGTH_EXT];
+ uint16 ItemID;
+} __attribute__((packed));
+
+struct PACKET_ZC_PRIVATE_AIRSHIP_RESPONSE {
+ int16 PacketType;
+ uint32 flag;
+} __attribute__((packed));
+
#if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
#pragma pack(pop)
#endif // not NetBSD < 6 / Solaris
diff --git a/src/map/script.c b/src/map/script.c
index 8e6ad5dcf..67dd4214c 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -12937,7 +12937,9 @@ BUILDIN(getmapflag)
case MF_NOTOMB: script_pushint(st,map->list[m].flag.notomb); break;
case MF_NOCASHSHOP: script_pushint(st,map->list[m].flag.nocashshop); break;
case MF_NOAUTOLOOT: script_pushint(st, map->list[m].flag.noautoloot); break;
- case MF_NOVIEWID: script_pushint(st,map->list[m].flag.noviewid); break;
+ case MF_NOVIEWID: script_pushint(st, map->list[m].flag.noviewid); break;
+ case MF_PAIRSHIP_STARTABLE: script_pushint(st, map->list[m].flag.pairship_startable); break;
+ case MF_PAIRSHIP_ENDABLE: script_pushint(st, map->list[m].flag.pairship_endable); break;
}
}
@@ -13063,6 +13065,8 @@ BUILDIN(setmapflag) {
case MF_NOCASHSHOP: map->list[m].flag.nocashshop = 1; break;
case MF_NOAUTOLOOT: map->list[m].flag.noautoloot = 1; break;
case MF_NOVIEWID: map->list[m].flag.noviewid = (val <= 0) ? EQP_NONE : val; break;
+ case MF_PAIRSHIP_STARTABLE: map->list[m].flag.pairship_startable = 1; break;
+ case MF_PAIRSHIP_ENDABLE: map->list[m].flag.pairship_endable = 1; break;
}
}
@@ -19674,7 +19678,7 @@ BUILDIN(getunitdata)
#undef getunitdata_sub
- return false;
+ return true;
}
/**
@@ -23970,6 +23974,23 @@ BUILDIN(clan_master)
return true;
}
+BUILDIN(airship_respond)
+{
+ struct map_session_data *sd = map->id2sd(st->rid);
+ int32 flag = script_getnum(st, 2);
+
+ if (sd == NULL)
+ return false;
+
+ if (flag < P_AIRSHIP_NONE || flag > P_AIRSHIP_ITEM_INVALID) {
+ ShowWarning("buildin_airship_respond: invalid flag %d has been given.", flag);
+ return false;
+ }
+
+ clif->PrivateAirshipResponse(sd, flag);
+ return true;
+}
+
/**
* hateffect(EffectID, Enable_State)
*/
@@ -24719,6 +24740,7 @@ void script_parse_builtin(void) {
BUILDIN_DEF2(rodex_sendmail, "rodex_sendmail_acc", "isss???????????"),
BUILDIN_DEF(rodex_sendmail2, "isss?????????????????????????????????????????"),
BUILDIN_DEF2(rodex_sendmail2, "rodex_sendmail_acc2", "isss?????????????????????????????????????????"),
+ BUILDIN_DEF(airship_respond, "i"),
BUILDIN_DEF(_,"s"),
BUILDIN_DEF2(_, "_$", "s"),
@@ -25094,6 +25116,14 @@ void script_hardcoded_constants(void)
script->set_constant("MST_AROUND4", MST_AROUND4, false, false);
script->set_constant("MST_AROUND", MST_AROUND , false, false);
+ script->constdb_comment("private airship responds");
+ script->set_constant("P_AIRSHIP_NONE", P_AIRSHIP_NONE, false, false);
+ script->set_constant("P_AIRSHIP_RETRY", P_AIRSHIP_RETRY, false, false);
+ script->set_constant("P_AIRSHIP_INVALID_START_MAP", P_AIRSHIP_INVALID_START_MAP, false, false);
+ script->set_constant("P_AIRSHIP_INVALID_END_MAP", P_AIRSHIP_INVALID_END_MAP, false, false);
+ script->set_constant("P_AIRSHIP_ITEM_NOT_ENOUGH", P_AIRSHIP_ITEM_NOT_ENOUGH, false, false);
+ script->set_constant("P_AIRSHIP_ITEM_INVALID", P_AIRSHIP_ITEM_INVALID, false, false);
+
script->constdb_comment("Renewal");
#ifdef RENEWAL
script->set_constant("RENEWAL", 1, false, false);
diff --git a/src/map/script.h b/src/map/script.h
index ede786481..0eaf5c539 100644
--- a/src/map/script.h
+++ b/src/map/script.h
@@ -337,7 +337,9 @@ enum {
MF_NOTOMB,
MF_NOCASHSHOP,
MF_NOAUTOLOOT,
- MF_NOVIEWID
+ MF_NOVIEWID,
+ MF_PAIRSHIP_STARTABLE,
+ MF_PAIRSHIP_ENDABLE
};
enum navigation_service {
diff --git a/src/plugins/HPMHooking/HPMHooking.Defs.inc b/src/plugins/HPMHooking/HPMHooking.Defs.inc
index 90d6945c2..5044dd45a 100644
--- a/src/plugins/HPMHooking/HPMHooking.Defs.inc
+++ b/src/plugins/HPMHooking/HPMHooking.Defs.inc
@@ -2268,6 +2268,8 @@ typedef void (*HPMHOOK_pre_clif_pMoveItem) (int *fd, struct map_session_data **s
typedef void (*HPMHOOK_post_clif_pMoveItem) (int fd, struct map_session_data *sd);
typedef void (*HPMHOOK_pre_clif_pDull) (int *fd, struct map_session_data **sd);
typedef void (*HPMHOOK_post_clif_pDull) (int fd, struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_p_cz_blocking_play_cancel) (int *fd, struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_p_cz_blocking_play_cancel) (int fd, struct map_session_data *sd);
typedef void (*HPMHOOK_pre_clif_pBGQueueRegister) (int *fd, struct map_session_data **sd);
typedef void (*HPMHOOK_post_clif_pBGQueueRegister) (int fd, struct map_session_data *sd);
typedef void (*HPMHOOK_pre_clif_pBGQueueCheckState) (int *fd, struct map_session_data **sd);
@@ -2426,6 +2428,10 @@ typedef void (*HPMHOOK_pre_clif_pAttendanceRewardRequest) (int *fd, struct map_s
typedef void (*HPMHOOK_post_clif_pAttendanceRewardRequest) (int fd, struct map_session_data *sd);
typedef void (*HPMHOOK_pre_clif_ui_action) (struct map_session_data **sd, int32 *UIType, int32 *data);
typedef void (*HPMHOOK_post_clif_ui_action) (struct map_session_data *sd, int32 UIType, int32 data);
+typedef void (*HPMHOOK_pre_clif_pPrivateAirshipRequest) (int *fd, struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_pPrivateAirshipRequest) (int fd, struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_PrivateAirshipResponse) (struct map_session_data **sd, uint32 *flag);
+typedef void (*HPMHOOK_post_clif_PrivateAirshipResponse) (struct map_session_data *sd, uint32 flag);
#endif // MAP_CLIF_H
#ifdef COMMON_CORE_H /* cmdline */
typedef void (*HPMHOOK_pre_cmdline_init) (void);
diff --git a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
index d07c83187..747ec357e 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
@@ -1864,6 +1864,8 @@ struct {
struct HPMHookPoint *HP_clif_pMoveItem_post;
struct HPMHookPoint *HP_clif_pDull_pre;
struct HPMHookPoint *HP_clif_pDull_post;
+ struct HPMHookPoint *HP_clif_p_cz_blocking_play_cancel_pre;
+ struct HPMHookPoint *HP_clif_p_cz_blocking_play_cancel_post;
struct HPMHookPoint *HP_clif_pBGQueueRegister_pre;
struct HPMHookPoint *HP_clif_pBGQueueRegister_post;
struct HPMHookPoint *HP_clif_pBGQueueCheckState_pre;
@@ -2022,6 +2024,10 @@ struct {
struct HPMHookPoint *HP_clif_pAttendanceRewardRequest_post;
struct HPMHookPoint *HP_clif_ui_action_pre;
struct HPMHookPoint *HP_clif_ui_action_post;
+ struct HPMHookPoint *HP_clif_pPrivateAirshipRequest_pre;
+ struct HPMHookPoint *HP_clif_pPrivateAirshipRequest_post;
+ struct HPMHookPoint *HP_clif_PrivateAirshipResponse_pre;
+ struct HPMHookPoint *HP_clif_PrivateAirshipResponse_post;
struct HPMHookPoint *HP_cmdline_init_pre;
struct HPMHookPoint *HP_cmdline_init_post;
struct HPMHookPoint *HP_cmdline_final_pre;
@@ -8203,6 +8209,8 @@ struct {
int HP_clif_pMoveItem_post;
int HP_clif_pDull_pre;
int HP_clif_pDull_post;
+ int HP_clif_p_cz_blocking_play_cancel_pre;
+ int HP_clif_p_cz_blocking_play_cancel_post;
int HP_clif_pBGQueueRegister_pre;
int HP_clif_pBGQueueRegister_post;
int HP_clif_pBGQueueCheckState_pre;
@@ -8361,6 +8369,10 @@ struct {
int HP_clif_pAttendanceRewardRequest_post;
int HP_clif_ui_action_pre;
int HP_clif_ui_action_post;
+ int HP_clif_pPrivateAirshipRequest_pre;
+ int HP_clif_pPrivateAirshipRequest_post;
+ int HP_clif_PrivateAirshipResponse_pre;
+ int HP_clif_PrivateAirshipResponse_post;
int HP_cmdline_init_pre;
int HP_cmdline_init_post;
int HP_cmdline_final_pre;
diff --git a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
index 488792200..06c1b2c88 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
@@ -955,6 +955,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->pSkillSelectMenu, HP_clif_pSkillSelectMenu) },
{ HP_POP(clif->pMoveItem, HP_clif_pMoveItem) },
{ HP_POP(clif->pDull, HP_clif_pDull) },
+ { HP_POP(clif->p_cz_blocking_play_cancel, HP_clif_p_cz_blocking_play_cancel) },
{ HP_POP(clif->pBGQueueRegister, HP_clif_pBGQueueRegister) },
{ HP_POP(clif->pBGQueueCheckState, HP_clif_pBGQueueCheckState) },
{ HP_POP(clif->pBGQueueRevokeReq, HP_clif_pBGQueueRevokeReq) },
@@ -1034,6 +1035,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->open_ui, HP_clif_open_ui) },
{ HP_POP(clif->pAttendanceRewardRequest, HP_clif_pAttendanceRewardRequest) },
{ HP_POP(clif->ui_action, HP_clif_ui_action) },
+ { HP_POP(clif->pPrivateAirshipRequest, HP_clif_pPrivateAirshipRequest) },
+ { HP_POP(clif->PrivateAirshipResponse, HP_clif_PrivateAirshipResponse) },
/* cmdline_interface */
{ HP_POP(cmdline->init, HP_cmdline_init) },
{ HP_POP(cmdline->final, HP_cmdline_final) },
diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
index 718aa77d7..dae598218 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
@@ -24274,6 +24274,32 @@ void HP_clif_pDull(int fd, struct map_session_data *sd) {
}
return;
}
+void HP_clif_p_cz_blocking_play_cancel(int fd, struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_p_cz_blocking_play_cancel_pre > 0) {
+ void (*preHookFunc) (int *fd, struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_p_cz_blocking_play_cancel_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_p_cz_blocking_play_cancel_pre[hIndex].func;
+ preHookFunc(&fd, &sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.p_cz_blocking_play_cancel(fd, sd);
+ }
+ if (HPMHooks.count.HP_clif_p_cz_blocking_play_cancel_post > 0) {
+ void (*postHookFunc) (int fd, struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_p_cz_blocking_play_cancel_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_p_cz_blocking_play_cancel_post[hIndex].func;
+ postHookFunc(fd, sd);
+ }
+ }
+ return;
+}
void HP_clif_pBGQueueRegister(int fd, struct map_session_data *sd) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_pBGQueueRegister_pre > 0) {
@@ -26334,6 +26360,58 @@ void HP_clif_ui_action(struct map_session_data *sd, int32 UIType, int32 data) {
}
return;
}
+void HP_clif_pPrivateAirshipRequest(int fd, struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_pPrivateAirshipRequest_pre > 0) {
+ void (*preHookFunc) (int *fd, struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pPrivateAirshipRequest_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_pPrivateAirshipRequest_pre[hIndex].func;
+ preHookFunc(&fd, &sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.pPrivateAirshipRequest(fd, sd);
+ }
+ if (HPMHooks.count.HP_clif_pPrivateAirshipRequest_post > 0) {
+ void (*postHookFunc) (int fd, struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pPrivateAirshipRequest_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_pPrivateAirshipRequest_post[hIndex].func;
+ postHookFunc(fd, sd);
+ }
+ }
+ return;
+}
+void HP_clif_PrivateAirshipResponse(struct map_session_data *sd, uint32 flag) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_PrivateAirshipResponse_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, uint32 *flag);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_PrivateAirshipResponse_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_PrivateAirshipResponse_pre[hIndex].func;
+ preHookFunc(&sd, &flag);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.PrivateAirshipResponse(sd, flag);
+ }
+ if (HPMHooks.count.HP_clif_PrivateAirshipResponse_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, uint32 flag);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_PrivateAirshipResponse_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_PrivateAirshipResponse_post[hIndex].func;
+ postHookFunc(sd, flag);
+ }
+ }
+ return;
+}
/* cmdline_interface */
void HP_cmdline_init(void) {
int hIndex = 0;