diff --git a/modules/core_lib/const.lua b/modules/core_lib/const.lua index fb398199..88f0c3fb 100644 --- a/modules/core_lib/const.lua +++ b/modules/core_lib/const.lua @@ -298,3 +298,18 @@ KeyCodeDescs = { [KeyNumpad8] = 'Numpad8', [KeyNumpad9] = 'Numpad9' } + +SpeakSay = 1 +SpeakWhisper = 2 +SpeakYell = 3 +SpeakBroadcast = 4 +SpeakPrivate = 5 +SpeakPrivateRed = 6 +SpeakPrivatePlayerToNpc = 7 +SpeakPrivateNpcToPlayer = 8 +SpeakChannelYellow = 9 +SpeakChannelWhite = 10 +SpeakChannelRed = 11 +SpeakChannelOrange = 12 +SpeakMonsterSay = 13 +SpeakMonsterYell = 14 diff --git a/src/main.cpp b/src/main.cpp index cce17cb0..3dd67b25 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -31,5 +31,3 @@ int main(int argc, const char* argv[]) app.terminate(); return 0; } - -// for freenode: fk39HHDJJF \ No newline at end of file diff --git a/src/otclient/const.h b/src/otclient/const.h index f80b9eb0..775523d0 100644 --- a/src/otclient/const.h +++ b/src/otclient/const.h @@ -264,6 +264,23 @@ namespace Otc IconPzBlock = 8192, IconPz = 16384 }; + + enum SpeakType { + SpeakSay = 1, + SpeakWhisper, + SpeakYell, + SpeakBroadcast, + SpeakPrivate, + SpeakPrivateRed, + SpeakPrivatePlayerToNpc, + SpeakPrivateNpcToPlayer, + SpeakChannelYellow, + SpeakChannelWhite, + SpeakChannelRed, + SpeakChannelOrange, + SpeakMonsterSay, + SpeakMonsterYell + }; } #endif diff --git a/src/otclient/core/game.cpp b/src/otclient/core/game.cpp index 3ed0c25e..044b9a0b 100644 --- a/src/otclient/core/game.cpp +++ b/src/otclient/core/game.cpp @@ -172,9 +172,9 @@ void Game::processTextMessage(const std::string& type, const std::string& messag g_lua.callGlobalField("Game","onTextMessage", type, message); } -void Game::processCreatureSpeak(const std::string& name, int level, const std::string& type, const std::string& message, int channelId, const Position& creaturePos) +void Game::processCreatureSpeak(const std::string& name, int level, Otc::SpeakType type, const std::string& message, int channelId, const Position& creaturePos) { - if(creaturePos.isValid() && (type == "say" || type == "whisper" || type == "yell" || type == "monsterSay" || type == "monsterYell")) { + if(creaturePos.isValid() && (type == Otc::SpeakSay || type == Otc::SpeakWhisper || type == Otc::SpeakYell || type == Otc::SpeakMonsterSay || type == Otc::SpeakMonsterYell)) { StaticTextPtr staticText = StaticTextPtr(new StaticText); staticText->addMessage(name, type, message); g_map.addThing(staticText, creaturePos); @@ -461,24 +461,23 @@ int Game::getThingStackpos(const ThingPtr& thing) void Game::talk(const std::string& message) { - talkChannel("say", 0, message); + talkChannel(Otc::SpeakSay, 0, message); } -void Game::talkChannel(const std::string& speakTypeDesc, int channelId, const std::string& message) +void Game::talkChannel(Otc::SpeakType speakType, int channelId, const std::string& message) { if(!isOnline() || !checkBotProtection()) return; - m_protocolGame->sendTalk(speakTypeDesc, channelId, "", message); + m_protocolGame->sendTalk(speakType, channelId, "", message); } -void Game::talkPrivate(const std::string& speakTypeDesc, const std::string& receiver, const std::string& message) +void Game::talkPrivate(Otc::SpeakType speakType, const std::string& receiver, const std::string& message) { if(!isOnline() || !checkBotProtection()) return; - m_protocolGame->sendTalk(speakTypeDesc, 0, receiver, message); + m_protocolGame->sendTalk(speakType, 0, receiver, message); } - void Game::openPrivateChannel(const std::string& receiver) { if(!isOnline() || !checkBotProtection()) diff --git a/src/otclient/core/game.h b/src/otclient/core/game.h index c93d984b..9d83c81f 100644 --- a/src/otclient/core/game.h +++ b/src/otclient/core/game.h @@ -52,7 +52,7 @@ public: double magicLevel, double magicLevelPercent, double soul, double stamina); void processTextMessage(const std::string& type, const std::string& message); - void processCreatureSpeak(const std::string& name, int level, const std::string& type, const std::string& message, int channelId, const Position& creaturePos); + void processCreatureSpeak(const std::string& name, int level, Otc::SpeakType type, const std::string& message, int channelId, const Position& creaturePos); void processContainerAddItem(int containerId, const ItemPtr& item); void processInventoryChange(int slot, const ItemPtr& item); void processCreatureMove(const CreaturePtr& creature, const Position& oldPos, const Position& newPos); @@ -82,8 +82,8 @@ public: // talk related void talk(const std::string& message); - void talkChannel(const std::string& speakTypeDesc, int channelId, const std::string& message); - void talkPrivate(const std::string& speakTypeDesc, const std::string& receiver, const std::string& message); + void talkChannel(Otc::SpeakType speakType, int channelId, const std::string& message); + void talkPrivate(Otc::SpeakType speakType, const std::string& receiver, const std::string& message); void openPrivateChannel(const std::string& receiver); void requestChannels(); void joinChannel(int channelId); diff --git a/src/otclient/core/statictext.cpp b/src/otclient/core/statictext.cpp index ee956e90..baccf05f 100644 --- a/src/otclient/core/statictext.cpp +++ b/src/otclient/core/statictext.cpp @@ -38,13 +38,13 @@ void StaticText::draw(const Point& dest, const Rect& parentRect) boundRect.bind(parentRect); // draw only if the real center is not too far from the parent center, or its a yell - if((boundRect.center() - rect.center()).length() < parentRect.width() / 15 || m_yell) { + if((boundRect.center() - rect.center()).length() < parentRect.width() / 15 || isYell()) { //TODO: cache into a framebuffer m_font->renderText(m_text, boundRect, Fw::AlignCenter, m_color); } } -bool StaticText::addMessage(const std::string& name, const std::string& type, const std::string& message) +bool StaticText::addMessage(const std::string& name, Otc::SpeakType type, const std::string& message) { //TODO: this could be moved to lua // First message @@ -66,10 +66,6 @@ bool StaticText::addMessage(const std::string& name, const std::string& type, co self->removeMessage(); }, std::max(Otc::STATIC_DURATION_PER_CHARACTER * message.length(), Otc::MIN_STATIC_TEXT_DURATION)); - - if(type == "yell" || type == "monsterYell") - m_yell = true; - return true; } @@ -90,21 +86,21 @@ void StaticText::compose() //TODO: this could be moved to lua std::string text; - if(m_messageType == "say") { + if(m_messageType == Otc::SpeakSay) { text += m_name; text += " says:\n"; m_color = Color(239, 239, 0); - } else if(m_messageType == "whisper") { + } else if(m_messageType == Otc::SpeakWhisper) { text += m_name; text += " whispers:\n"; m_color = Color(239, 239, 0); - } else if(m_messageType == "yell") { + } else if(m_messageType == Otc::SpeakYell) { text += m_name; text += " yells:\n"; m_color = Color(239, 239, 0); - } else if(m_messageType == "monsterSay" || m_messageType == "monsterYell") { + } else if(m_messageType == Otc::SpeakMonsterSay || m_messageType == Otc::SpeakMonsterYell) { m_color = Color(254, 101, 0); - } else if(m_messageType == "npcToPlayer") { + } else if(m_messageType == Otc::SpeakPrivateNpcToPlayer) { text += m_name; text += " says:\n"; m_color = Color(95, 247, 247); diff --git a/src/otclient/core/statictext.h b/src/otclient/core/statictext.h index f812fa51..626af781 100644 --- a/src/otclient/core/statictext.h +++ b/src/otclient/core/statictext.h @@ -34,12 +34,12 @@ public: void draw(const Point& dest, const Rect& parentRect); std::string getName() { return m_name; } - std::string getMessageType() { return m_messageType; } + Otc::SpeakType getMessageType() { return m_messageType; } std::string getFirstMessage() { return m_messages[0]; } - bool isYell() { return m_yell; } + bool isYell() { return m_messageType == Otc::SpeakYell || m_messageType == Otc::SpeakMonsterYell; } - bool addMessage(const std::string& name, const std::string& type, const std::string& message); + bool addMessage(const std::string& name, Otc::SpeakType type, const std::string& message); void removeMessage(); StaticTextPtr asStaticText() { return std::static_pointer_cast(shared_from_this()); } @@ -52,7 +52,7 @@ private: Boolean m_yell; std::vector m_messages; std::string m_name, m_text; - std::string m_messageType; + Otc::SpeakType m_messageType; Color m_color; }; diff --git a/src/otclient/net/protocolcodes.h b/src/otclient/net/protocolcodes.h index 4a6b0e16..e2bcd3ac 100644 --- a/src/otclient/net/protocolcodes.h +++ b/src/otclient/net/protocolcodes.h @@ -220,47 +220,47 @@ namespace Proto { ClientGetObjectInfo = 243 }; - enum SpeakTypes { + enum ServerSpeakType { #if PROTOCOL==862 - SpeakSay = 1, - SpeakWhisper, - SpeakYell, - SpeakPrivatePlayerToNpc, - SpeakPrivateNpcToPlayer, - SpeakPrivate, - SpeakChannelYellow, - SpeakChannelWhite, - SpeakBroadcast, - SpeakChannelRed, - SpeakPrivateRed, - SpeakChannelOrange, - SpeakMonsterSay, - SpeakMonsterYell, + ServerSpeakSay = 1, + ServerSpeakWhisper, + ServerSpeakYell, + ServerSpeakPrivatePlayerToNpc, + ServerSpeakPrivateNpcToPlayer, + ServerSpeakPrivate, + ServerSpeakChannelYellow, + ServerSpeakChannelWhite, + ServerSpeakBroadcast, + ServerSpeakChannelRed, + ServerSpeakPrivateRed, + ServerSpeakChannelOrange, + ServerSpeakMonsterSay, + ServerSpeakMonsterYell, // removed - SpeakRVRChannel = 255, - SpeakRVRAnswer, - SpeakRVRContinue, - SpeakChannelRed2 + ServerSpeakRVRChannel = 255, + ServerSpeakRVRAnswer, + ServerSpeakRVRContinue, + ServerSpeakChannelRed2 #elif PROTOCOL==860 - SpeakSay = 1, - SpeakWhisper, - SpeakYell, - SpeakPrivatePlayerToNpc, - SpeakPrivateNpcToPlayer, - SpeakPrivate, - SpeakChannelYellow, - SpeakChannelWhite, - SpeakRVRChannel, - SpeakRVRAnswer, - SpeakRVRContinue, - SpeakBroadcast, - SpeakChannelRed, - SpeakPrivateRed, - SpeakChannelOrange, - SpeakChannelRed2 = 17, - SpeakMonsterSay = 19, - SpeakMonsterYell + ServerSpeakSay = 1, + ServerSpeakWhisper, + ServerSpeakYell, + ServerSpeakPrivatePlayerToNpc, + ServerSpeakPrivateNpcToPlayer, + ServerSpeakPrivate, + ServerSpeakChannelYellow, + ServerSpeakChannelWhite, + ServerSpeakRVRChannel, + ServerSpeakRVRAnswer, + ServerSpeakRVRContinue, + ServerSpeakBroadcast, + ServerSpeakChannelRed, + ServerSpeakPrivateRed, + ServerSpeakChannelOrange, + ServerSpeakChannelRed2 = 17, + ServerSpeakMonsterSay = 19, + ServerSpeakMonsterYell #endif }; @@ -299,48 +299,48 @@ namespace Proto { NpcEndId = 0xffffffff }; - inline std::string translateSpeakType(int type) { + inline Otc::SpeakType translateSpeakTypeFromServer(int type) { switch(type) { - case Proto::SpeakSay: return "say"; - case Proto::SpeakWhisper: return "whisper"; - case Proto::SpeakYell: return "yell"; - case Proto::SpeakMonsterSay: return "monsterSay"; - case Proto::SpeakMonsterYell: return "monsterYell"; - case Proto::SpeakPrivateNpcToPlayer: return "npcToPlayer"; - case Proto::SpeakChannelYellow: return "channelYellow"; - case Proto::SpeakChannelWhite: return "channelWhite"; - case Proto::SpeakChannelRed: return "channelRed"; - case Proto::SpeakChannelRed2: return "channelRed"; - case Proto::SpeakChannelOrange: return "channelOrange"; - case Proto::SpeakPrivate: return "private"; - case Proto::SpeakPrivatePlayerToNpc: return "playerToNpc"; - case Proto::SpeakBroadcast: return "broadcast"; - case Proto::SpeakPrivateRed: return "privateRed"; + case Proto::ServerSpeakSay: return Otc::SpeakSay; + case Proto::ServerSpeakWhisper: return Otc::SpeakWhisper; + case Proto::ServerSpeakYell: return Otc::SpeakYell; + case Proto::ServerSpeakMonsterSay: return Otc::SpeakMonsterSay; + case Proto::ServerSpeakMonsterYell: return Otc::SpeakMonsterYell; + case Proto::ServerSpeakPrivateNpcToPlayer: return Otc::SpeakPrivateNpcToPlayer; + case Proto::ServerSpeakChannelYellow: return Otc::SpeakChannelYellow; + case Proto::ServerSpeakChannelWhite: return Otc::SpeakChannelWhite; + case Proto::ServerSpeakChannelRed: return Otc::SpeakChannelRed; + case Proto::ServerSpeakChannelRed2: return Otc::SpeakChannelRed; + case Proto::ServerSpeakChannelOrange: return Otc::SpeakChannelOrange; + case Proto::ServerSpeakPrivate: return Otc::SpeakPrivate; + case Proto::ServerSpeakPrivatePlayerToNpc: return Otc::SpeakPrivate; + case Proto::ServerSpeakBroadcast: return Otc::SpeakBroadcast; + case Proto::ServerSpeakPrivateRed: return Otc::SpeakPrivateRed; default: logError("unknown protocol speak type ", type); - return "unknown"; + return Otc::SpeakSay; } } - inline int translateSpeakTypeDesc(const std::string& type) { - if(type == "say") return Proto::SpeakSay; - else if(type == "whisper") return Proto::SpeakWhisper; - else if(type == "yell") return Proto::SpeakYell; - else if(type == "monsterSay") return Proto::SpeakMonsterSay; - else if(type == "monsterYell") return Proto::SpeakMonsterYell; - else if(type == "npcToPlayer") return Proto::SpeakPrivateNpcToPlayer; - else if(type == "channelYellow") return Proto::SpeakChannelYellow; - else if(type == "channelWhite") return Proto::SpeakChannelWhite; - else if(type == "channelRed") return Proto::SpeakChannelRed; - else if(type == "channelRed") return Proto::SpeakChannelRed2; - else if(type == "channelOrange") return Proto::SpeakChannelOrange; - else if(type == "private") return Proto::SpeakPrivate; - else if(type == "playerToNpc") return Proto::SpeakPrivatePlayerToNpc; - else if(type == "broadcast") return Proto::SpeakBroadcast; - else if(type == "privateRed") return Proto::SpeakPrivateRed; - else { - logError("unknown protocol speak type desc ", type); - return 0; + inline Proto::ServerSpeakType translateSpeakTypeToServer(int type) { + switch(type) { + case Otc::SpeakSay: return Proto::ServerSpeakSay; + case Otc::SpeakWhisper: return Proto::ServerSpeakWhisper; + case Otc::SpeakYell: return Proto::ServerSpeakYell; + case Otc::SpeakBroadcast: return Proto::ServerSpeakBroadcast; + case Otc::SpeakPrivate: return Proto::ServerSpeakPrivate; + case Otc::SpeakPrivateRed: return Proto::ServerSpeakPrivateRed; + case Otc::SpeakPrivatePlayerToNpc: return Proto::ServerSpeakPrivatePlayerToNpc; + case Otc::SpeakPrivateNpcToPlayer: return Proto::ServerSpeakPrivateNpcToPlayer; + case Otc::SpeakChannelYellow: return Proto::ServerSpeakChannelYellow; + case Otc::SpeakChannelWhite: return Proto::ServerSpeakChannelWhite; + case Otc::SpeakChannelRed: return Proto::ServerSpeakChannelRed; + case Otc::SpeakChannelOrange: return Proto::ServerSpeakChannelOrange; + case Otc::SpeakMonsterSay: return Proto::ServerSpeakMonsterSay; + case Otc::SpeakMonsterYell: return Proto::ServerSpeakMonsterYell; + default: + logError("unknown protocol speak type desc ", type); + return Proto::ServerSpeakSay; } } diff --git a/src/otclient/net/protocolgame.h b/src/otclient/net/protocolgame.h index dcf6dab4..e97b6d13 100644 --- a/src/otclient/net/protocolgame.h +++ b/src/otclient/net/protocolgame.h @@ -73,7 +73,7 @@ public: void sendTextWindow(uint windowTextId, const std::string& text); void sendHouseWindow(int doorId, uint id, const std::string& text); void sendLookAt(const Position& position, int thingId, int stackpos); - void sendTalk(const std::string& speakTypeDesc, int channelId, const std::string& receiver, const std::string& message); + void sendTalk(Otc::SpeakType speakType, int channelId, const std::string& receiver, const std::string& message); void sendGetChannels(); void sendJoinChannel(int channelId); void sendLeaveChannel(int channelId); diff --git a/src/otclient/net/protocolgameparse.cpp b/src/otclient/net/protocolgameparse.cpp index 0987616b..cc7fa337 100644 --- a/src/otclient/net/protocolgameparse.cpp +++ b/src/otclient/net/protocolgameparse.cpp @@ -720,43 +720,43 @@ void ProtocolGame::parseCreatureSpeak(InputMessage& msg) msg.getU32(); // unkSpeak std::string name = msg.getString(); int level = msg.getU16(); - int type = msg.getU8(); + int serverType = msg.getU8(); int channelId = 0; Position creaturePos; - switch(type) { - case Proto::SpeakSay: - case Proto::SpeakWhisper: - case Proto::SpeakYell: - case Proto::SpeakMonsterSay: - case Proto::SpeakMonsterYell: - case Proto::SpeakPrivateNpcToPlayer: + switch(serverType) { + case Proto::ServerSpeakSay: + case Proto::ServerSpeakWhisper: + case Proto::ServerSpeakYell: + case Proto::ServerSpeakMonsterSay: + case Proto::ServerSpeakMonsterYell: + case Proto::ServerSpeakPrivateNpcToPlayer: creaturePos = parsePosition(msg); break; - case Proto::SpeakChannelYellow: - case Proto::SpeakChannelWhite: - case Proto::SpeakChannelRed: - case Proto::SpeakChannelRed2: - case Proto::SpeakChannelOrange: + case Proto::ServerSpeakChannelYellow: + case Proto::ServerSpeakChannelWhite: + case Proto::ServerSpeakChannelRed: + case Proto::ServerSpeakChannelRed2: + case Proto::ServerSpeakChannelOrange: channelId = msg.getU16(); break; - case Proto::SpeakPrivate: - case Proto::SpeakPrivatePlayerToNpc: - case Proto::SpeakBroadcast: - case Proto::SpeakPrivateRed: + case Proto::ServerSpeakPrivate: + case Proto::ServerSpeakPrivatePlayerToNpc: + case Proto::ServerSpeakBroadcast: + case Proto::ServerSpeakPrivateRed: break; - case Proto::SpeakRVRChannel: + case Proto::ServerSpeakRVRChannel: msg.getU32(); break; default: - logTraceError("unknown speak type ", type); + logTraceError("unknown speak type ", serverType); break; } std::string message = msg.getString(); - std::string typeDesc = Proto::translateSpeakType(type); + Otc::SpeakType type = Proto::translateSpeakTypeFromServer(serverType); - g_game.processCreatureSpeak(name, level, typeDesc, message, channelId, creaturePos); + g_game.processCreatureSpeak(name, level, type, message, channelId, creaturePos); } void ProtocolGame::parseChannelList(InputMessage& msg) diff --git a/src/otclient/net/protocolgamesend.cpp b/src/otclient/net/protocolgamesend.cpp index d12ad2a4..3ef16737 100644 --- a/src/otclient/net/protocolgamesend.cpp +++ b/src/otclient/net/protocolgamesend.cpp @@ -341,24 +341,24 @@ void ProtocolGame::sendLookAt(const Position& position, int thingId, int stackpo send(oMsg); } -void ProtocolGame::sendTalk(const std::string& speakTypeDesc, int channelId, const std::string& receiver, const std::string& message) +void ProtocolGame::sendTalk(Otc::SpeakType speakType, int channelId, const std::string& receiver, const std::string& message) { if(message.length() > 255 || message.length() <= 0) return; - int speakType = Proto::translateSpeakTypeDesc(speakTypeDesc); + int serverSpeakType = Proto::translateSpeakTypeToServer(speakType); OutputMessage oMsg; oMsg.addU8(Proto::ClientTalk); - oMsg.addU8(speakType); + oMsg.addU8(serverSpeakType); - switch(speakType) { - case Proto::SpeakPrivate: - case Proto::SpeakPrivateRed: + switch(serverSpeakType) { + case Proto::ServerSpeakPrivate: + case Proto::ServerSpeakPrivateRed: oMsg.addString(receiver); break; - case Proto::SpeakChannelYellow: - case Proto::SpeakChannelRed: + case Proto::ServerSpeakChannelYellow: + case Proto::ServerSpeakChannelRed: oMsg.addU16(channelId); break; }