summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
authorDastgir <dastgirpojee@rocketmail.com>2015-08-27 20:47:23 +0530
committerDastgir <dastgirpojee@rocketmail.com>2015-08-27 21:16:42 +0530
commit2b4b33b06a964e83bf5df9f7f0b795ddf76f9dd0 (patch)
treef9357ef349422c260e09237e5f6e9811d38e15d7 /src/map
parentbcf51fa5a12d07fe80975bc921ccce3e4f6bf35d (diff)
downloadhercules-2b4b33b06a964e83bf5df9f7f0b795ddf76f9dd0.tar.gz
hercules-2b4b33b06a964e83bf5df9f7f0b795ddf76f9dd0.tar.bz2
hercules-2b4b33b06a964e83bf5df9f7f0b795ddf76f9dd0.tar.xz
hercules-2b4b33b06a964e83bf5df9f7f0b795ddf76f9dd0.zip
Hotkey Rotate Packet Implemented
Diffstat (limited to 'src/map')
-rw-r--r--src/map/clif.c33
-rw-r--r--src/map/clif.h1
-rw-r--r--src/map/packets.h1
-rw-r--r--src/map/packets_struct.h19
4 files changed, 37 insertions, 17 deletions
diff --git a/src/map/clif.c b/src/map/clif.c
index 26cf4faac..12565de3c 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -9430,31 +9430,29 @@ void clif_parse_TickSend(int fd, struct map_session_data *sd)
/// 02b9 { <is skill>.B <id>.L <count>.W }*27 (ZC_SHORTCUT_KEY_LIST)
/// 07d9 { <is skill>.B <id>.L <count>.W }*36 (ZC_SHORTCUT_KEY_LIST_V2, PACKETVER >= 20090603)
/// 07d9 { <is skill>.B <id>.L <count>.W }*38 (ZC_SHORTCUT_KEY_LIST_V2, PACKETVER >= 20090617)
+/// 0a00 <rotate>.B { <is skill>.B <id>.L <count>.W }*38 (ZC_SHORTCUT_KEY_LIST_V3, PACKETVER >= 20141022)
void clif_hotkeys_send(struct map_session_data *sd) {
#ifdef HOTKEY_SAVING
- const int fd = sd->fd;
+ struct packet_hotkey p;
int i;
- int offset = 2;
-#if PACKETVER < 20090603
- const int cmd = 0x2b9;
-#elif PACKETVER < 20141022
- const int cmd = 0x7d9;
-#else
- const int cmd = 0xa00;
- offset = 3;
+ p.PacketType = hotkeyType;
+#if PACKETVER >= 20141022
+ p.Rotate = sd->status.hotkey_rowshift;
#endif
- if (!fd) return;
- WFIFOHEAD(fd, offset+MAX_HOTKEYS*7);
- WFIFOW(fd, 0) = cmd;
- for(i = 0; i < MAX_HOTKEYS; i++) {
- WFIFOB(fd, offset + 0 + i * 7) = sd->status.hotkeys[i].type; // type: 0: item, 1: skill
- WFIFOL(fd, offset + 1 + i * 7) = sd->status.hotkeys[i].id; // item or skill ID
- WFIFOW(fd, offset + 5 + i * 7) = sd->status.hotkeys[i].lv; // item qty or skill level
+ for(i = 0; i < ARRAYLENGTH(p.hotkey); i++) {
+ p.hotkey[i].isSkill = sd->status.hotkeys[i].type;
+ p.hotkey[i].ID = sd->status.hotkeys[i].id;
+ p.hotkey[i].count = sd->status.hotkeys[i].lv;
}
- WFIFOSET(fd, packet_len(cmd));
+ clif->send(&p, sizeof(p), &sd->bl, SELF);
#endif
}
+void clif_parse_HotkeyRowShift(int fd, struct map_session_data *sd)
+{
+ int cmd = RFIFOW(fd, 0);
+ sd->status.hotkey_rowshift = RFIFOB(fd, packet_db[cmd].pos[0]);
+}
/// Request to update a position on the hotkey bar (CZ_SHORTCUT_KEY_CHANGE).
/// 02ba <index>.W <is skill>.B <id>.L <count>.W
@@ -19333,4 +19331,5 @@ void clif_defaults(void) {
clif->pNPCMarketPurchase = clif_parse_NPCMarketPurchase;
/* */
clif->add_random_options = clif_add_random_options;
+ clif->pHotkeyRowShift = clif_parse_HotkeyRowShift;
}
diff --git a/src/map/clif.h b/src/map/clif.h
index 3f0d043f7..fdcc929e3 100644
--- a/src/map/clif.h
+++ b/src/map/clif.h
@@ -1317,6 +1317,7 @@ struct clif_interface {
void (*pNPCMarketPurchase) (int fd, struct map_session_data *sd);
/* */
void (*add_random_options) (unsigned char* buf, struct item* item);
+ void (*pHotkeyRowShift) (int fd, struct map_session_data *sd);
};
#ifdef HERCULES_CORE
diff --git a/src/map/packets.h b/src/map/packets.h
index e84607aaf..1f465b833 100644
--- a/src/map/packets.h
+++ b/src/map/packets.h
@@ -2850,6 +2850,7 @@ packet(0x96e,-1,clif->ackmergeitems);
packet(0x091A,26,clif->pFriendsListAdd,2);
packet(0x0899,5,clif->pHomMenu,2,4);
packet(0x0438,36,clif->pStoragePassword,0);
+ packet(0x0A01,3,clif->pHotkeyRowShift,2);
#endif
#if PACKETVER >= 20150226
diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h
index daf77c134..8f9747747 100644
--- a/src/map/packets_struct.h
+++ b/src/map/packets_struct.h
@@ -18,6 +18,13 @@ enum packet_headers {
banking_checkType = 0x9a6,
cart_additem_ackType = 0x12c,
sc_notickType = 0x196,
+#if PACKETVER >= 20141022
+ hotkeyType = 0xa00,
+#elif PACKETVER >= 20090603
+ hotkeyType = 0x7d9,
+#else
+ hotkeyType = 0x2b9,
+#endif
#if PACKETVER >= 20150226
cartaddType = 0xa0b,
#elif PACKETVER >= 5
@@ -1082,6 +1089,18 @@ struct packet_party_leader_changed {
unsigned int new_leader_aid;
} __attribute__((packed));
+struct packet_hotkey {
+ short PacketType;
+#if PACKETVER >= 20141022
+ char Rotate;
+#endif
+ struct {
+ char isSkill; // 0: Item, 1:Skill
+ unsigned int ID; // Item/Skill ID
+ short count; // Item Quantity/Skill Level
+ } hotkey[MAX_HOTKEYS];
+} __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