protocolcodes.cpp

main 197 lines · 10 KB Raw
Alex Alex Commit Client Upload Part 2 19/10/2026 00:06
1/*
2 * Copyright (c) 2010-2017 OTClient <https://github.com/edubart/otclient>
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 * THE SOFTWARE.
21 */
22
23#include "protocolcodes.h"
24
25namespace Proto {
26
27std::map<uint8, uint8> messageModesMap;
28
29void buildMessageModesMap(int version) {
30 messageModesMap.clear();
31
32 if(version >= 1094) {
33 messageModesMap[Otc::MessageMana] = 43;
34 }
35
36 if(version >= 1055) { // might be 1054
37 messageModesMap[Otc::MessageNone] = 0;
38 messageModesMap[Otc::MessageSay] = 1;
39 messageModesMap[Otc::MessageWhisper] = 2;
40 messageModesMap[Otc::MessageYell] = 3;
41 messageModesMap[Otc::MessagePrivateFrom] = 4;
42 messageModesMap[Otc::MessagePrivateTo] = 5;
43 messageModesMap[Otc::MessageChannelManagement] = 6;
44 messageModesMap[Otc::MessageChannel] = 7;
45 messageModesMap[Otc::MessageChannelHighlight] = 8;
46 messageModesMap[Otc::MessageSpell] = 9;
47 messageModesMap[Otc::MessageNpcFromStartBlock] = 10;
48 messageModesMap[Otc::MessageNpcFrom] = 11;
49 messageModesMap[Otc::MessageNpcTo] = 12;
50 messageModesMap[Otc::MessageGamemasterBroadcast] = 13;
51 messageModesMap[Otc::MessageGamemasterChannel] = 14;
52 messageModesMap[Otc::MessageGamemasterPrivateFrom] = 15;
53 messageModesMap[Otc::MessageGamemasterPrivateTo] = 16;
54 messageModesMap[Otc::MessageLogin] = 17;
55 messageModesMap[Otc::MessageWarning] = 18; // Admin
56 messageModesMap[Otc::MessageGame] = 19;
57 messageModesMap[Otc::MessageGameHighlight] = 20;
58 messageModesMap[Otc::MessageFailure] = 21;
59 messageModesMap[Otc::MessageLook] = 22;
60 messageModesMap[Otc::MessageDamageDealed] = 23;
61 messageModesMap[Otc::MessageDamageReceived] = 24;
62 messageModesMap[Otc::MessageHeal] = 25;
63 messageModesMap[Otc::MessageExp] = 26;
64 messageModesMap[Otc::MessageDamageOthers] = 27;
65 messageModesMap[Otc::MessageHealOthers] = 28;
66 messageModesMap[Otc::MessageExpOthers] = 29;
67 messageModesMap[Otc::MessageStatus] = 30;
68 messageModesMap[Otc::MessageLoot] = 31;
69 messageModesMap[Otc::MessageTradeNpc] = 32;
70 messageModesMap[Otc::MessageGuild] = 33;
71 messageModesMap[Otc::MessagePartyManagement] = 34;
72 messageModesMap[Otc::MessageParty] = 35;
73 messageModesMap[Otc::MessageBarkLow] = 36;
74 messageModesMap[Otc::MessageBarkLoud] = 37;
75 messageModesMap[Otc::MessageReport] = 38;
76 messageModesMap[Otc::MessageHotkeyUse] = 39;
77 messageModesMap[Otc::MessageTutorialHint] = 40;
78 messageModesMap[Otc::MessageThankyou] = 41;
79 messageModesMap[Otc::MessageMarket] = 42;
80 } else if(version >= 1036) {
81 for(int i = Otc::MessageNone; i <= Otc::MessageBeyondLast; ++i) {
82 if(i >= Otc::MessageNpcTo)
83 messageModesMap[i] = i + 1;
84 else
85 messageModesMap[i] = i;
86 }
87 } else if(version >= 900) {
88 for(int i = Otc::MessageNone; i <= Otc::MessageBeyondLast; ++i)
89 messageModesMap[i] = i;
90 messageModesMap[Otc::MessageNpcFromStartBlock] = 10;
91 messageModesMap[Otc::MessageNpcFrom] = 11;
92 } else if(version >= 861) {
93 messageModesMap[Otc::MessageNone] = 0;
94 messageModesMap[Otc::MessageSay] = 1;
95 messageModesMap[Otc::MessageWhisper] = 2;
96 messageModesMap[Otc::MessageYell] = 3;
97 messageModesMap[Otc::MessageNpcTo] = 4;
98 messageModesMap[Otc::MessageNpcFromStartBlock] = 5;
99 messageModesMap[Otc::MessagePrivateFrom] = 6;
100 messageModesMap[Otc::MessagePrivateTo] = 6;
101 messageModesMap[Otc::MessageChannel] = 7;
102 messageModesMap[Otc::MessageChannelManagement] = 8;
103 messageModesMap[Otc::MessageGamemasterBroadcast] = 9;
104 messageModesMap[Otc::MessageGamemasterChannel] = 10;
105 messageModesMap[Otc::MessageGamemasterPrivateFrom] = 11;
106 messageModesMap[Otc::MessageGamemasterPrivateTo] = 11;
107 messageModesMap[Otc::MessageChannelHighlight] = 12;
108 messageModesMap[Otc::MessageMonsterSay] = 13;
109 messageModesMap[Otc::MessageMonsterYell] = 14;
110 messageModesMap[Otc::MessageWarning] = 15;
111 messageModesMap[Otc::MessageGame] = 16;
112 messageModesMap[Otc::MessageLogin] = 17;
113 messageModesMap[Otc::MessageStatus] = 18;
114 messageModesMap[Otc::MessageLook] = 19;
115 messageModesMap[Otc::MessageFailure] = 20;
116 messageModesMap[Otc::MessageBlue] = 21;
117 messageModesMap[Otc::MessageRed] = 22;
118 } else if(version >= 840) {
119 messageModesMap[Otc::MessageNone] = 0;
120 messageModesMap[Otc::MessageSay] = 1;
121 messageModesMap[Otc::MessageWhisper] = 2;
122 messageModesMap[Otc::MessageYell] = 3;
123 messageModesMap[Otc::MessageNpcTo] = 4;
124 messageModesMap[Otc::MessageNpcFromStartBlock] = 5;
125 messageModesMap[Otc::MessagePrivateFrom] = 6;
126 messageModesMap[Otc::MessagePrivateTo] = 6;
127 messageModesMap[Otc::MessageChannel] = 7;
128 messageModesMap[Otc::MessageChannelManagement] = 8;
129 messageModesMap[Otc::MessageRVRChannel] = 9;
130 messageModesMap[Otc::MessageRVRAnswer] = 10;
131 messageModesMap[Otc::MessageRVRContinue] = 11;
132 messageModesMap[Otc::MessageGamemasterBroadcast] = 12;
133 messageModesMap[Otc::MessageGamemasterChannel] = 13;
134 messageModesMap[Otc::MessageGamemasterPrivateFrom] = 14;
135 messageModesMap[Otc::MessageGamemasterPrivateTo] = 14;
136 messageModesMap[Otc::MessageChannelHighlight] = 15;
137 // 16, 17 ??
138 messageModesMap[Otc::MessageRed] = 18;
139 messageModesMap[Otc::MessageMonsterSay] = 19;
140 messageModesMap[Otc::MessageMonsterYell] = 20;
141 messageModesMap[Otc::MessageWarning] = 21;
142 messageModesMap[Otc::MessageGame] = 22;
143 messageModesMap[Otc::MessageLogin] = 23;
144 messageModesMap[Otc::MessageStatus] = 24;
145 messageModesMap[Otc::MessageLook] = 25;
146 messageModesMap[Otc::MessageFailure] = 26;
147 messageModesMap[Otc::MessageBlue] = 27;
148 } else if(version >= 760) {
149 messageModesMap[Otc::MessageNone] = 0;
150 messageModesMap[Otc::MessageSay] = 1;
151 messageModesMap[Otc::MessageWhisper] = 2;
152 messageModesMap[Otc::MessageYell] = 3;
153 messageModesMap[Otc::MessagePrivateFrom] = 4;
154 messageModesMap[Otc::MessagePrivateTo] = 4;
155 messageModesMap[Otc::MessageChannel] = 5;
156 messageModesMap[Otc::MessageRVRChannel] = 6;
157 messageModesMap[Otc::MessageRVRAnswer] = 7;
158 messageModesMap[Otc::MessageRVRContinue] = 8;
159 messageModesMap[Otc::MessageGamemasterBroadcast] = 9;
160 messageModesMap[Otc::MessageGamemasterChannel] = 10;
161 messageModesMap[Otc::MessageGamemasterPrivateFrom] = 11;
162 messageModesMap[Otc::MessageGamemasterPrivateTo] = 11;
163 messageModesMap[Otc::MessageChannelHighlight] = 12;
164 // 13, 14, 15 ??
165 messageModesMap[Otc::MessageMonsterSay] = 16;
166 messageModesMap[Otc::MessageMonsterYell] = 17;
167 messageModesMap[Otc::MessageWarning] = 18;
168 messageModesMap[Otc::MessageGame] = 19;
169 messageModesMap[Otc::MessageLogin] = 20;
170 messageModesMap[Otc::MessageStatus] = 21;
171 messageModesMap[Otc::MessageLook] = 22;
172 messageModesMap[Otc::MessageFailure] = 23;
173 messageModesMap[Otc::MessageBlue] = 24;
174 messageModesMap[Otc::MessageRed] = 25;
175 }
176}
177
178Otc::MessageMode translateMessageModeFromServer(uint8 mode)
179{
180 auto it = std::find_if(messageModesMap.begin(), messageModesMap.end(), [=] (const std::pair<uint8, uint8>& p) { return p.second == mode; });
181 if(it != messageModesMap.end())
182 return (Otc::MessageMode)it->first;
183 return Otc::MessageInvalid;
184}
185
186uint8 translateMessageModeToServer(Otc::MessageMode mode)
187{
188 if(mode < 0 || mode >= Otc::LastMessage)
189 return Otc::MessageInvalid;
190 auto it = messageModesMap.find(mode);
191 if(it != messageModesMap.end())
192 return it->second;
193 return Otc::MessageInvalid;
194}
195
196}
197
Top