summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAsheraf <acheraf1998@gmail.com>2018-07-19 03:25:45 +0100
committerAsheraf <acheraf1998@gmail.com>2018-07-19 05:37:49 +0100
commitb4a5462cb762d03273b054708fe3378f6d82ede3 (patch)
tree53f652ef56a27ac305c4b9fce9bd9b609de163f3 /src
parent15fa09b8754c3c77b636a4f1466cb8fca0e690f1 (diff)
downloadhercules-b4a5462cb762d03273b054708fe3378f6d82ede3.tar.gz
hercules-b4a5462cb762d03273b054708fe3378f6d82ede3.tar.bz2
hercules-b4a5462cb762d03273b054708fe3378f6d82ede3.tar.xz
hercules-b4a5462cb762d03273b054708fe3378f6d82ede3.zip
Add support for bodystyle in stylist shop ui
Diffstat (limited to 'src')
-rw-r--r--src/map/clif.c12
-rw-r--r--src/map/packets.h4
-rw-r--r--src/map/packets_struct.h3
-rw-r--r--src/map/pc.c10
-rw-r--r--src/map/pc.h1
5 files changed, 25 insertions, 5 deletions
diff --git a/src/map/clif.c b/src/map/clif.c
index c4a401fa7..5d8e84a74 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -21189,7 +21189,7 @@ static bool clif_stylist_read_db_libconfig_sub(struct config_setting_t *it, int
ShowWarning("clif_stylist_read_db_libconfig_sub: Invalid or missing Type (%d) in \"%s\", entry #%d, skipping.\n", type, source, idx);
return false;
}
- if (!itemdb->lookup_const(it, "Id", &i32) || i32 <= 0) {
+ if (!itemdb->lookup_const(it, "Id", &i32) || i32 < 0) {
ShowWarning("clif_stylist_read_db_libconfig_sub: Invalid or missing Id (%d) in \"%s\", entry #%d, skipping.\n", i32, source, idx);
return false;
}
@@ -21226,7 +21226,7 @@ static bool clif_style_change_validate_requirements(struct map_session_data *sd,
entry = &VECTOR_INDEX(stylist_data[type], idx);
- if (entry->id != 0) {
+ if (entry->id >= 0) {
if (entry->zeny != 0) {
if (sd->status.zeny < entry->zeny)
return false;
@@ -21284,7 +21284,13 @@ static void clif_parse_cz_req_style_change(int fd, struct map_session_data *sd)
clif->cz_req_style_change_sub(sd, LOOK_HEAD_MID, p->MidAccessory, true);
if (p->BottomAccessory > 0)
clif->cz_req_style_change_sub(sd, LOOK_HEAD_BOTTOM, p->BottomAccessory, true);
-
+#if PACKETVER_RE_NUM >= 20180718
+ if (p->BodyStyle > 0) {
+ if (pc->has_second_costume(sd)) {
+ clif->cz_req_style_change_sub(sd, LOOK_BODY2, p->BodyStyle, false);
+ }
+ }
+#endif
clif->style_change_response(sd, STYLIST_SHOP_SUCCESS);
return;
}
diff --git a/src/map/packets.h b/src/map/packets.h
index d4f87f5a0..8ef011d08 100644
--- a/src/map/packets.h
+++ b/src/map/packets.h
@@ -4121,7 +4121,7 @@ packet(0x96e,-1,clif->ackmergeitems);
// 2018-05-16cRagexe, 2018-05-16cRagexeRE
#if PACKETVER >= 20180516
// new packets
- packet(0x0afc,16,clif->pDull/*,XXX*/);
+ packet(0x0afc,16,clif->pReqStyleChange);
// changed packet sizes
#endif
#endif // PACKETVER_ZERO
@@ -4130,7 +4130,7 @@ packet(0x96e,-1,clif->ackmergeitems);
// 2018-05-23aRagexe_zero
#if PACKETVER >= 20180523
// new packets
- packet(0x0afc,16,clif->pDull/*,XXX*/);
+ packet(0x0afc,16,clif->pReqStyleChange);
// changed packet sizes
#endif
#endif // PACKETVER_ZERO
diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h
index 27c099a9e..b8950589e 100644
--- a/src/map/packets_struct.h
+++ b/src/map/packets_struct.h
@@ -1864,6 +1864,9 @@ struct PACKET_CZ_REQ_STYLE_CHANGE {
int16 TopAccessory;
int16 MidAccessory;
int16 BottomAccessory;
+#if PACKETVER_RE_NUM >= 20180718
+ int16 BodyStyle;
+#endif
} __attribute__((packed));
struct PACKET_ZC_STYLE_CHANGE_RES {
diff --git a/src/map/pc.c b/src/map/pc.c
index cd49a6dbf..89d414263 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -12272,6 +12272,15 @@ static void pc_init_exp_groups(void)
}
}
+static bool pc_has_second_costume(struct map_session_data *sd)
+{
+ nullpo_retr(false, sd);
+
+ if ((sd->job & JOBL_THIRD) != 0)
+ return true;
+ return false;
+}
+
static void do_final_pc(void)
{
@@ -12673,4 +12682,5 @@ void pc_defaults(void)
pc->check_basicskill = pc_check_basicskill;
pc->isDeathPenaltyJob = pc_isDeathPenaltyJob;
+ pc->has_second_costume = pc_has_second_costume;
}
diff --git a/src/map/pc.h b/src/map/pc.h
index f998c799d..9bad3a135 100644
--- a/src/map/pc.h
+++ b/src/map/pc.h
@@ -1177,6 +1177,7 @@ END_ZEROED_BLOCK; /* End */
void (*check_supernovice_call) (struct map_session_data *sd, const char *message);
bool (*check_basicskill) (struct map_session_data *sd, int level);
bool (*isDeathPenaltyJob) (uint16 job);
+ bool (*has_second_costume) (struct map_session_data *sd);
};
#ifdef HERCULES_CORE