Moved chat json creating to the CompositeChat class.
This commit is contained in:
parent
b462416e1f
commit
f323955099
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
#include "CompositeChat.h"
|
#include "CompositeChat.h"
|
||||||
|
#include "ClientHandle.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -399,6 +400,183 @@ void cCompositeChat::AddStyle(AString & a_Style, const AString & a_AddStyle)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AString cCompositeChat::CreateJsonString(bool a_ShouldUseChatPrefixes) const
|
||||||
|
{
|
||||||
|
Json::Value msg;
|
||||||
|
msg["text"] = cClientHandle::FormatMessageType(a_ShouldUseChatPrefixes, GetMessageType(), GetAdditionalMessageTypeData()); // The client crashes without this field being present
|
||||||
|
const cCompositeChat::cParts & Parts = GetParts();
|
||||||
|
for (cCompositeChat::cParts::const_iterator itr = Parts.begin(), end = Parts.end(); itr != end; ++itr)
|
||||||
|
{
|
||||||
|
Json::Value Part;
|
||||||
|
switch ((*itr)->m_PartType)
|
||||||
|
{
|
||||||
|
case cCompositeChat::ptText:
|
||||||
|
{
|
||||||
|
Part["text"] = (*itr)->m_Text;
|
||||||
|
AddChatPartStyle(Part, (*itr)->m_Style);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case cCompositeChat::ptClientTranslated:
|
||||||
|
{
|
||||||
|
const cCompositeChat::cClientTranslatedPart & p = (const cCompositeChat::cClientTranslatedPart &)**itr;
|
||||||
|
Part["translate"] = p.m_Text;
|
||||||
|
Json::Value With;
|
||||||
|
for (AStringVector::const_iterator itrW = p.m_Parameters.begin(), endW = p.m_Parameters.end(); itrW != endW; ++itr)
|
||||||
|
{
|
||||||
|
With.append(*itrW);
|
||||||
|
}
|
||||||
|
if (!p.m_Parameters.empty())
|
||||||
|
{
|
||||||
|
Part["with"] = With;
|
||||||
|
}
|
||||||
|
AddChatPartStyle(Part, p.m_Style);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case cCompositeChat::ptUrl:
|
||||||
|
{
|
||||||
|
const cCompositeChat::cUrlPart & p = (const cCompositeChat::cUrlPart &)**itr;
|
||||||
|
Part["text"] = p.m_Text;
|
||||||
|
Json::Value Url;
|
||||||
|
Url["action"] = "open_url";
|
||||||
|
Url["value"] = p.m_Url;
|
||||||
|
Part["clickEvent"] = Url;
|
||||||
|
AddChatPartStyle(Part, p.m_Style);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case cCompositeChat::ptSuggestCommand:
|
||||||
|
case cCompositeChat::ptRunCommand:
|
||||||
|
{
|
||||||
|
const cCompositeChat::cCommandPart & p = (const cCompositeChat::cCommandPart &)**itr;
|
||||||
|
Part["text"] = p.m_Text;
|
||||||
|
Json::Value Cmd;
|
||||||
|
Cmd["action"] = (p.m_PartType == cCompositeChat::ptRunCommand) ? "run_command" : "suggest_command";
|
||||||
|
Cmd["value"] = p.m_Command;
|
||||||
|
Part["clickEvent"] = Cmd;
|
||||||
|
AddChatPartStyle(Part, p.m_Style);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case cCompositeChat::ptShowAchievement:
|
||||||
|
{
|
||||||
|
const cCompositeChat::cShowAchievementPart & p = (const cCompositeChat::cShowAchievementPart &)**itr;
|
||||||
|
Part["translate"] = "chat.type.achievement";
|
||||||
|
|
||||||
|
Json::Value Ach;
|
||||||
|
Ach["action"] = "show_achievement";
|
||||||
|
Ach["value"] = p.m_Text;
|
||||||
|
|
||||||
|
Json::Value AchColourAndName;
|
||||||
|
AchColourAndName["color"] = "green";
|
||||||
|
AchColourAndName["translate"] = p.m_Text;
|
||||||
|
AchColourAndName["hoverEvent"] = Ach;
|
||||||
|
|
||||||
|
Json::Value Extra;
|
||||||
|
Extra.append(AchColourAndName);
|
||||||
|
|
||||||
|
Json::Value Name;
|
||||||
|
Name["text"] = p.m_PlayerName;
|
||||||
|
|
||||||
|
Json::Value With;
|
||||||
|
With.append(Name);
|
||||||
|
With.append(Extra);
|
||||||
|
|
||||||
|
Part["with"] = With;
|
||||||
|
AddChatPartStyle(Part, p.m_Style);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
msg["extra"].append(Part);
|
||||||
|
} // for itr - Parts[]
|
||||||
|
|
||||||
|
return msg.toStyledString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cCompositeChat::AddChatPartStyle(Json::Value & a_Value, const AString & a_PartStyle) const
|
||||||
|
{
|
||||||
|
size_t len = a_PartStyle.length();
|
||||||
|
for (size_t i = 0; i < len; i++)
|
||||||
|
{
|
||||||
|
switch (a_PartStyle[i])
|
||||||
|
{
|
||||||
|
case 'b':
|
||||||
|
{
|
||||||
|
// bold
|
||||||
|
a_Value["bold"] = Json::Value(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'i':
|
||||||
|
{
|
||||||
|
// italic
|
||||||
|
a_Value["italic"] = Json::Value(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'u':
|
||||||
|
{
|
||||||
|
// Underlined
|
||||||
|
a_Value["underlined"] = Json::Value(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 's':
|
||||||
|
{
|
||||||
|
// strikethrough
|
||||||
|
a_Value["strikethrough"] = Json::Value(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'o':
|
||||||
|
{
|
||||||
|
// obfuscated
|
||||||
|
a_Value["obfuscated"] = Json::Value(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case '@':
|
||||||
|
{
|
||||||
|
// Color, specified by the next char:
|
||||||
|
i++;
|
||||||
|
if (i >= len)
|
||||||
|
{
|
||||||
|
// String too short, didn't contain a color
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (a_PartStyle[i])
|
||||||
|
{
|
||||||
|
case '0': a_Value["color"] = Json::Value("black"); break;
|
||||||
|
case '1': a_Value["color"] = Json::Value("dark_blue"); break;
|
||||||
|
case '2': a_Value["color"] = Json::Value("dark_green"); break;
|
||||||
|
case '3': a_Value["color"] = Json::Value("dark_aqua"); break;
|
||||||
|
case '4': a_Value["color"] = Json::Value("dark_red"); break;
|
||||||
|
case '5': a_Value["color"] = Json::Value("dark_purple"); break;
|
||||||
|
case '6': a_Value["color"] = Json::Value("gold"); break;
|
||||||
|
case '7': a_Value["color"] = Json::Value("gray"); break;
|
||||||
|
case '8': a_Value["color"] = Json::Value("dark_gray"); break;
|
||||||
|
case '9': a_Value["color"] = Json::Value("blue"); break;
|
||||||
|
case 'a': a_Value["color"] = Json::Value("green"); break;
|
||||||
|
case 'b': a_Value["color"] = Json::Value("aqua"); break;
|
||||||
|
case 'c': a_Value["color"] = Json::Value("red"); break;
|
||||||
|
case 'd': a_Value["color"] = Json::Value("light_purple"); break;
|
||||||
|
case 'e': a_Value["color"] = Json::Value("yellow"); break;
|
||||||
|
case 'f': a_Value["color"] = Json::Value("white"); break;
|
||||||
|
} // switch (color)
|
||||||
|
} // case '@'
|
||||||
|
} // switch (Style[i])
|
||||||
|
} // for i - a_PartStyle[]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// cCompositeChat::cBasePart:
|
// cCompositeChat::cBasePart:
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
// Declares the cCompositeChat class used to wrap a chat message with multiple parts (text, url, cmd)
|
// Declares the cCompositeChat class used to wrap a chat message with multiple parts (text, url, cmd)
|
||||||
|
|
||||||
#include "Defines.h"
|
#include "Defines.h"
|
||||||
|
#include "json/json.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -190,6 +191,8 @@ public:
|
|||||||
and for console-logging. */
|
and for console-logging. */
|
||||||
AString ExtractText(void) const;
|
AString ExtractText(void) const;
|
||||||
|
|
||||||
|
AString CreateJsonString(bool a_ShouldUseChatPrefixes = true) const;
|
||||||
|
|
||||||
// tolua_end
|
// tolua_end
|
||||||
|
|
||||||
const cParts & GetParts(void) const { return m_Parts; }
|
const cParts & GetParts(void) const { return m_Parts; }
|
||||||
@ -198,6 +201,9 @@ public:
|
|||||||
Used by the logging bindings when logging a cCompositeChat object. */
|
Used by the logging bindings when logging a cCompositeChat object. */
|
||||||
static cLogger::eLogLevel MessageTypeToLogLevel(eMessageType a_MessageType);
|
static cLogger::eLogLevel MessageTypeToLogLevel(eMessageType a_MessageType);
|
||||||
|
|
||||||
|
/** Adds the chat part's style (represented by the part's stylestring) into the Json object. */
|
||||||
|
void AddChatPartStyle(Json::Value & a_Value, const AString & a_PartStyle) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** All the parts that */
|
/** All the parts that */
|
||||||
cParts m_Parts;
|
cParts m_Parts;
|
||||||
|
@ -240,100 +240,12 @@ void cProtocol172::SendChat(const cCompositeChat & a_Message)
|
|||||||
{
|
{
|
||||||
ASSERT(m_State == 3); // In game mode?
|
ASSERT(m_State == 3); // In game mode?
|
||||||
|
|
||||||
// Compose the complete Json string to send:
|
|
||||||
Json::Value msg;
|
|
||||||
cWorld * World = m_Client->GetPlayer()->GetWorld();
|
cWorld * World = m_Client->GetPlayer()->GetWorld();
|
||||||
msg["text"] = cClientHandle::FormatMessageType((World == NULL) ? false : World->ShouldUseChatPrefixes(), a_Message.GetMessageType(), a_Message.GetAdditionalMessageTypeData()); // The client crashes without this field being present
|
bool ShouldUseChatPrefixes = (World == NULL) ? false : World->ShouldUseChatPrefixes();
|
||||||
const cCompositeChat::cParts & Parts = a_Message.GetParts();
|
|
||||||
for (cCompositeChat::cParts::const_iterator itr = Parts.begin(), end = Parts.end(); itr != end; ++itr)
|
|
||||||
{
|
|
||||||
Json::Value Part;
|
|
||||||
switch ((*itr)->m_PartType)
|
|
||||||
{
|
|
||||||
case cCompositeChat::ptText:
|
|
||||||
{
|
|
||||||
Part["text"] = (*itr)->m_Text;
|
|
||||||
AddChatPartStyle(Part, (*itr)->m_Style);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case cCompositeChat::ptClientTranslated:
|
|
||||||
{
|
|
||||||
const cCompositeChat::cClientTranslatedPart & p = (const cCompositeChat::cClientTranslatedPart &)**itr;
|
|
||||||
Part["translate"] = p.m_Text;
|
|
||||||
Json::Value With;
|
|
||||||
for (AStringVector::const_iterator itrW = p.m_Parameters.begin(), endW = p.m_Parameters.end(); itrW != endW; ++itr)
|
|
||||||
{
|
|
||||||
With.append(*itrW);
|
|
||||||
}
|
|
||||||
if (!p.m_Parameters.empty())
|
|
||||||
{
|
|
||||||
Part["with"] = With;
|
|
||||||
}
|
|
||||||
AddChatPartStyle(Part, p.m_Style);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case cCompositeChat::ptUrl:
|
|
||||||
{
|
|
||||||
const cCompositeChat::cUrlPart & p = (const cCompositeChat::cUrlPart &)**itr;
|
|
||||||
Part["text"] = p.m_Text;
|
|
||||||
Json::Value Url;
|
|
||||||
Url["action"] = "open_url";
|
|
||||||
Url["value"] = p.m_Url;
|
|
||||||
Part["clickEvent"] = Url;
|
|
||||||
AddChatPartStyle(Part, p.m_Style);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case cCompositeChat::ptSuggestCommand:
|
|
||||||
case cCompositeChat::ptRunCommand:
|
|
||||||
{
|
|
||||||
const cCompositeChat::cCommandPart & p = (const cCompositeChat::cCommandPart &)**itr;
|
|
||||||
Part["text"] = p.m_Text;
|
|
||||||
Json::Value Cmd;
|
|
||||||
Cmd["action"] = (p.m_PartType == cCompositeChat::ptRunCommand) ? "run_command" : "suggest_command";
|
|
||||||
Cmd["value"] = p.m_Command;
|
|
||||||
Part["clickEvent"] = Cmd;
|
|
||||||
AddChatPartStyle(Part, p.m_Style);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case cCompositeChat::ptShowAchievement:
|
|
||||||
{
|
|
||||||
const cCompositeChat::cShowAchievementPart & p = (const cCompositeChat::cShowAchievementPart &)**itr;
|
|
||||||
Part["translate"] = "chat.type.achievement";
|
|
||||||
|
|
||||||
Json::Value Ach;
|
|
||||||
Ach["action"] = "show_achievement";
|
|
||||||
Ach["value"] = p.m_Text;
|
|
||||||
|
|
||||||
Json::Value AchColourAndName;
|
|
||||||
AchColourAndName["color"] = "green";
|
|
||||||
AchColourAndName["translate"] = p.m_Text;
|
|
||||||
AchColourAndName["hoverEvent"] = Ach;
|
|
||||||
|
|
||||||
Json::Value Extra;
|
|
||||||
Extra.append(AchColourAndName);
|
|
||||||
|
|
||||||
Json::Value Name;
|
|
||||||
Name["text"] = p.m_PlayerName;
|
|
||||||
|
|
||||||
Json::Value With;
|
|
||||||
With.append(Name);
|
|
||||||
With.append(Extra);
|
|
||||||
|
|
||||||
Part["with"] = With;
|
|
||||||
AddChatPartStyle(Part, p.m_Style);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
msg["extra"].append(Part);
|
|
||||||
} // for itr - Parts[]
|
|
||||||
|
|
||||||
// Send the message to the client:
|
// Send the message to the client:
|
||||||
cPacketizer Pkt(*this, 0x02);
|
cPacketizer Pkt(*this, 0x02);
|
||||||
Pkt.WriteString(msg.toStyledString());
|
Pkt.WriteString(a_Message.CreateJsonString(ShouldUseChatPrefixes));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2427,85 +2339,6 @@ void cProtocol172::StartEncryption(const Byte * a_Key)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cProtocol172::AddChatPartStyle(Json::Value & a_Value, const AString & a_PartStyle)
|
|
||||||
{
|
|
||||||
size_t len = a_PartStyle.length();
|
|
||||||
for (size_t i = 0; i < len; i++)
|
|
||||||
{
|
|
||||||
switch (a_PartStyle[i])
|
|
||||||
{
|
|
||||||
case 'b':
|
|
||||||
{
|
|
||||||
// bold
|
|
||||||
a_Value["bold"] = Json::Value(true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case 'i':
|
|
||||||
{
|
|
||||||
// italic
|
|
||||||
a_Value["italic"] = Json::Value(true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case 'u':
|
|
||||||
{
|
|
||||||
// Underlined
|
|
||||||
a_Value["underlined"] = Json::Value(true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case 's':
|
|
||||||
{
|
|
||||||
// strikethrough
|
|
||||||
a_Value["strikethrough"] = Json::Value(true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case 'o':
|
|
||||||
{
|
|
||||||
// obfuscated
|
|
||||||
a_Value["obfuscated"] = Json::Value(true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case '@':
|
|
||||||
{
|
|
||||||
// Color, specified by the next char:
|
|
||||||
i++;
|
|
||||||
if (i >= len)
|
|
||||||
{
|
|
||||||
// String too short, didn't contain a color
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
switch (a_PartStyle[i])
|
|
||||||
{
|
|
||||||
case '0': a_Value["color"] = Json::Value("black"); break;
|
|
||||||
case '1': a_Value["color"] = Json::Value("dark_blue"); break;
|
|
||||||
case '2': a_Value["color"] = Json::Value("dark_green"); break;
|
|
||||||
case '3': a_Value["color"] = Json::Value("dark_aqua"); break;
|
|
||||||
case '4': a_Value["color"] = Json::Value("dark_red"); break;
|
|
||||||
case '5': a_Value["color"] = Json::Value("dark_purple"); break;
|
|
||||||
case '6': a_Value["color"] = Json::Value("gold"); break;
|
|
||||||
case '7': a_Value["color"] = Json::Value("gray"); break;
|
|
||||||
case '8': a_Value["color"] = Json::Value("dark_gray"); break;
|
|
||||||
case '9': a_Value["color"] = Json::Value("blue"); break;
|
|
||||||
case 'a': a_Value["color"] = Json::Value("green"); break;
|
|
||||||
case 'b': a_Value["color"] = Json::Value("aqua"); break;
|
|
||||||
case 'c': a_Value["color"] = Json::Value("red"); break;
|
|
||||||
case 'd': a_Value["color"] = Json::Value("light_purple"); break;
|
|
||||||
case 'e': a_Value["color"] = Json::Value("yellow"); break;
|
|
||||||
case 'f': a_Value["color"] = Json::Value("white"); break;
|
|
||||||
} // switch (color)
|
|
||||||
} // case '@'
|
|
||||||
} // switch (Style[i])
|
|
||||||
} // for i - a_PartStyle[]
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// cProtocol172::cPacketizer:
|
// cProtocol172::cPacketizer:
|
||||||
|
|
||||||
|
@ -308,8 +308,6 @@ protected:
|
|||||||
|
|
||||||
void StartEncryption(const Byte * a_Key);
|
void StartEncryption(const Byte * a_Key);
|
||||||
|
|
||||||
/** Adds the chat part's style (represented by the part's stylestring) into the Json object. */
|
|
||||||
void AddChatPartStyle(Json::Value & a_Value, const AString & a_PartStyle);
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
@ -232,100 +232,12 @@ void cProtocol180::SendChat(const cCompositeChat & a_Message)
|
|||||||
{
|
{
|
||||||
ASSERT(m_State == 3); // In game mode?
|
ASSERT(m_State == 3); // In game mode?
|
||||||
|
|
||||||
// Compose the complete Json string to send:
|
|
||||||
Json::Value msg;
|
|
||||||
cWorld * World = m_Client->GetPlayer()->GetWorld();
|
cWorld * World = m_Client->GetPlayer()->GetWorld();
|
||||||
msg["text"] = cClientHandle::FormatMessageType((World == NULL) ? false : World->ShouldUseChatPrefixes(), a_Message.GetMessageType(), a_Message.GetAdditionalMessageTypeData()); // The client crashes without this field being present
|
bool ShouldUseChatPrefixes = (World == NULL) ? false : World->ShouldUseChatPrefixes();
|
||||||
const cCompositeChat::cParts & Parts = a_Message.GetParts();
|
|
||||||
for (cCompositeChat::cParts::const_iterator itr = Parts.begin(), end = Parts.end(); itr != end; ++itr)
|
|
||||||
{
|
|
||||||
Json::Value Part;
|
|
||||||
switch ((*itr)->m_PartType)
|
|
||||||
{
|
|
||||||
case cCompositeChat::ptText:
|
|
||||||
{
|
|
||||||
Part["text"] = (*itr)->m_Text;
|
|
||||||
AddChatPartStyle(Part, (*itr)->m_Style);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case cCompositeChat::ptClientTranslated:
|
|
||||||
{
|
|
||||||
const cCompositeChat::cClientTranslatedPart & p = (const cCompositeChat::cClientTranslatedPart &)**itr;
|
|
||||||
Part["translate"] = p.m_Text;
|
|
||||||
Json::Value With;
|
|
||||||
for (AStringVector::const_iterator itrW = p.m_Parameters.begin(), endW = p.m_Parameters.end(); itrW != endW; ++itr)
|
|
||||||
{
|
|
||||||
With.append(*itrW);
|
|
||||||
}
|
|
||||||
if (!p.m_Parameters.empty())
|
|
||||||
{
|
|
||||||
Part["with"] = With;
|
|
||||||
}
|
|
||||||
AddChatPartStyle(Part, p.m_Style);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case cCompositeChat::ptUrl:
|
|
||||||
{
|
|
||||||
const cCompositeChat::cUrlPart & p = (const cCompositeChat::cUrlPart &)**itr;
|
|
||||||
Part["text"] = p.m_Text;
|
|
||||||
Json::Value Url;
|
|
||||||
Url["action"] = "open_url";
|
|
||||||
Url["value"] = p.m_Url;
|
|
||||||
Part["clickEvent"] = Url;
|
|
||||||
AddChatPartStyle(Part, p.m_Style);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case cCompositeChat::ptSuggestCommand:
|
|
||||||
case cCompositeChat::ptRunCommand:
|
|
||||||
{
|
|
||||||
const cCompositeChat::cCommandPart & p = (const cCompositeChat::cCommandPart &)**itr;
|
|
||||||
Part["text"] = p.m_Text;
|
|
||||||
Json::Value Cmd;
|
|
||||||
Cmd["action"] = (p.m_PartType == cCompositeChat::ptRunCommand) ? "run_command" : "suggest_command";
|
|
||||||
Cmd["value"] = p.m_Command;
|
|
||||||
Part["clickEvent"] = Cmd;
|
|
||||||
AddChatPartStyle(Part, p.m_Style);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case cCompositeChat::ptShowAchievement:
|
|
||||||
{
|
|
||||||
const cCompositeChat::cShowAchievementPart & p = (const cCompositeChat::cShowAchievementPart &)**itr;
|
|
||||||
Part["translate"] = "chat.type.achievement";
|
|
||||||
|
|
||||||
Json::Value Ach;
|
|
||||||
Ach["action"] = "show_achievement";
|
|
||||||
Ach["value"] = p.m_Text;
|
|
||||||
|
|
||||||
Json::Value AchColourAndName;
|
|
||||||
AchColourAndName["color"] = "green";
|
|
||||||
AchColourAndName["translate"] = p.m_Text;
|
|
||||||
AchColourAndName["hoverEvent"] = Ach;
|
|
||||||
|
|
||||||
Json::Value Extra;
|
|
||||||
Extra.append(AchColourAndName);
|
|
||||||
|
|
||||||
Json::Value Name;
|
|
||||||
Name["text"] = p.m_PlayerName;
|
|
||||||
|
|
||||||
Json::Value With;
|
|
||||||
With.append(Name);
|
|
||||||
With.append(Extra);
|
|
||||||
|
|
||||||
Part["with"] = With;
|
|
||||||
AddChatPartStyle(Part, p.m_Style);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
msg["extra"].append(Part);
|
|
||||||
} // for itr - Parts[]
|
|
||||||
|
|
||||||
// Send the message to the client:
|
// Send the message to the client:
|
||||||
cPacketizer Pkt(*this, 0x02);
|
cPacketizer Pkt(*this, 0x02);
|
||||||
Pkt.WriteString(msg.toStyledString());
|
Pkt.WriteString(a_Message.CreateJsonString(ShouldUseChatPrefixes));
|
||||||
Pkt.WriteChar(0);
|
Pkt.WriteChar(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2693,85 +2605,6 @@ void cProtocol180::StartEncryption(const Byte * a_Key)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cProtocol180::AddChatPartStyle(Json::Value & a_Value, const AString & a_PartStyle)
|
|
||||||
{
|
|
||||||
size_t len = a_PartStyle.length();
|
|
||||||
for (size_t i = 0; i < len; i++)
|
|
||||||
{
|
|
||||||
switch (a_PartStyle[i])
|
|
||||||
{
|
|
||||||
case 'b':
|
|
||||||
{
|
|
||||||
// bold
|
|
||||||
a_Value["bold"] = Json::Value(true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case 'i':
|
|
||||||
{
|
|
||||||
// italic
|
|
||||||
a_Value["italic"] = Json::Value(true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case 'u':
|
|
||||||
{
|
|
||||||
// Underlined
|
|
||||||
a_Value["underlined"] = Json::Value(true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case 's':
|
|
||||||
{
|
|
||||||
// strikethrough
|
|
||||||
a_Value["strikethrough"] = Json::Value(true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case 'o':
|
|
||||||
{
|
|
||||||
// obfuscated
|
|
||||||
a_Value["obfuscated"] = Json::Value(true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case '@':
|
|
||||||
{
|
|
||||||
// Color, specified by the next char:
|
|
||||||
i++;
|
|
||||||
if (i >= len)
|
|
||||||
{
|
|
||||||
// String too short, didn't contain a color
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
switch (a_PartStyle[i])
|
|
||||||
{
|
|
||||||
case '0': a_Value["color"] = Json::Value("black"); break;
|
|
||||||
case '1': a_Value["color"] = Json::Value("dark_blue"); break;
|
|
||||||
case '2': a_Value["color"] = Json::Value("dark_green"); break;
|
|
||||||
case '3': a_Value["color"] = Json::Value("dark_aqua"); break;
|
|
||||||
case '4': a_Value["color"] = Json::Value("dark_red"); break;
|
|
||||||
case '5': a_Value["color"] = Json::Value("dark_purple"); break;
|
|
||||||
case '6': a_Value["color"] = Json::Value("gold"); break;
|
|
||||||
case '7': a_Value["color"] = Json::Value("gray"); break;
|
|
||||||
case '8': a_Value["color"] = Json::Value("dark_gray"); break;
|
|
||||||
case '9': a_Value["color"] = Json::Value("blue"); break;
|
|
||||||
case 'a': a_Value["color"] = Json::Value("green"); break;
|
|
||||||
case 'b': a_Value["color"] = Json::Value("aqua"); break;
|
|
||||||
case 'c': a_Value["color"] = Json::Value("red"); break;
|
|
||||||
case 'd': a_Value["color"] = Json::Value("light_purple"); break;
|
|
||||||
case 'e': a_Value["color"] = Json::Value("yellow"); break;
|
|
||||||
case 'f': a_Value["color"] = Json::Value("white"); break;
|
|
||||||
} // switch (color)
|
|
||||||
} // case '@'
|
|
||||||
} // switch (Style[i])
|
|
||||||
} // for i - a_PartStyle[]
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// cProtocol180::cPacketizer:
|
// cProtocol180::cPacketizer:
|
||||||
|
|
||||||
|
@ -325,8 +325,6 @@ protected:
|
|||||||
|
|
||||||
void StartEncryption(const Byte * a_Key);
|
void StartEncryption(const Byte * a_Key);
|
||||||
|
|
||||||
/** Adds the chat part's style (represented by the part's stylestring) into the Json object. */
|
|
||||||
void AddChatPartStyle(Json::Value & a_Value, const AString & a_PartStyle);
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user