Console logging supports cCompositeChat as its parameters.
This commit is contained in:
parent
55d0db1606
commit
8126d9e66e
@ -75,6 +75,15 @@ function Initialize(Plugin)
|
||||
-- TestPluginCalls();
|
||||
|
||||
TestBlockAreasString()
|
||||
|
||||
--[[
|
||||
-- Test cCompositeChat usage in console-logging:
|
||||
LOGINFO(cCompositeChat("This is a simple message with some @2 color formatting @4 and http://links.to .")
|
||||
:AddSuggestCommandPart("(Suggested command)", "cmd")
|
||||
:AddRunCommandPart("(Run command)", "cmd")
|
||||
:SetMessageType(mtInfo)
|
||||
)
|
||||
--]]
|
||||
|
||||
return true
|
||||
end;
|
||||
|
@ -115,10 +115,35 @@ static int tolua_StringSplitAndTrim(lua_State * tolua_S)
|
||||
|
||||
|
||||
|
||||
static int tolua_LOG(lua_State* tolua_S)
|
||||
/** Retrieves the log message from the first param on the Lua stack.
|
||||
Can take either a string or a cCompositeChat.
|
||||
*/
|
||||
static AString GetLogMessage(lua_State * tolua_S)
|
||||
{
|
||||
const char* str = tolua_tocppstring(tolua_S,1,0);
|
||||
cMCLogger::GetInstance()->LogSimple( str, 0 );
|
||||
tolua_Error err;
|
||||
if (tolua_isusertype(tolua_S, 1, "cCompositeChat", false, &err))
|
||||
{
|
||||
return ((cCompositeChat *)tolua_tousertype(tolua_S, 1, NULL))->ExtractText();
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t len = 0;
|
||||
const char * str = lua_tolstring(tolua_S, 1, &len);
|
||||
if (str != NULL)
|
||||
{
|
||||
return AString(str, len);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static int tolua_LOG(lua_State * tolua_S)
|
||||
{
|
||||
cMCLogger::GetInstance()->LogSimple(GetLogMessage(tolua_S).c_str(), 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -126,10 +151,9 @@ static int tolua_LOG(lua_State* tolua_S)
|
||||
|
||||
|
||||
|
||||
static int tolua_LOGINFO(lua_State* tolua_S)
|
||||
static int tolua_LOGINFO(lua_State * tolua_S)
|
||||
{
|
||||
const char* str = tolua_tocppstring(tolua_S,1,0);
|
||||
cMCLogger::GetInstance()->LogSimple( str, 1 );
|
||||
cMCLogger::GetInstance()->LogSimple(GetLogMessage(tolua_S).c_str(), 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -137,10 +161,9 @@ static int tolua_LOGINFO(lua_State* tolua_S)
|
||||
|
||||
|
||||
|
||||
static int tolua_LOGWARN(lua_State* tolua_S)
|
||||
static int tolua_LOGWARN(lua_State * tolua_S)
|
||||
{
|
||||
const char* str = tolua_tocppstring(tolua_S,1,0);
|
||||
cMCLogger::GetInstance()->LogSimple( str, 2 );
|
||||
cMCLogger::GetInstance()->LogSimple(GetLogMessage(tolua_S).c_str(), 2);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -148,10 +171,9 @@ static int tolua_LOGWARN(lua_State* tolua_S)
|
||||
|
||||
|
||||
|
||||
static int tolua_LOGERROR(lua_State* tolua_S)
|
||||
static int tolua_LOGERROR(lua_State * tolua_S)
|
||||
{
|
||||
const char* str = tolua_tocppstring(tolua_S,1,0);
|
||||
cMCLogger::GetInstance()->LogSimple( str, 3 );
|
||||
cMCLogger::GetInstance()->LogSimple(GetLogMessage(tolua_S).c_str(), 3);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -314,6 +314,35 @@ void cCompositeChat::UnderlineUrls(void)
|
||||
|
||||
|
||||
|
||||
AString cCompositeChat::ExtractText(void) const
|
||||
{
|
||||
AString Msg;
|
||||
for (cParts::const_iterator itr = m_Parts.begin(), end = m_Parts.end(); itr != end; ++itr)
|
||||
{
|
||||
switch ((*itr)->m_PartType)
|
||||
{
|
||||
case ptText:
|
||||
case ptClientTranslated:
|
||||
case ptRunCommand:
|
||||
case ptSuggestCommand:
|
||||
{
|
||||
Msg.append((*itr)->m_Text);
|
||||
break;
|
||||
}
|
||||
case ptUrl:
|
||||
{
|
||||
Msg.append(((cUrlPart *)(*itr))->m_Url);
|
||||
break;
|
||||
}
|
||||
} // switch (PartType)
|
||||
} // for itr - m_Parts[]
|
||||
return Msg;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cCompositeChat::AddStyle(AString & a_Style, const AString & a_AddStyle)
|
||||
{
|
||||
if (a_AddStyle.empty())
|
||||
|
@ -164,6 +164,11 @@ public:
|
||||
/** Returns the message type set previously by SetMessageType(). */
|
||||
eMessageType GetMessageType(void) const { return m_MessageType; }
|
||||
|
||||
/** Returns the text from the parts that comprises the human-readable data.
|
||||
Used for older protocols that don't support composite chat
|
||||
and for console-logging. */
|
||||
AString ExtractText(void) const;
|
||||
|
||||
// tolua_end
|
||||
|
||||
const cParts & GetParts(void) const { return m_Parts; }
|
||||
|
@ -239,32 +239,11 @@ void cProtocol125::SendChat(const AString & a_Message)
|
||||
void cProtocol125::SendChat(const cCompositeChat & a_Message)
|
||||
{
|
||||
// This version doesn't support composite messages, just extract each part's text and use it:
|
||||
AString Msg;
|
||||
const cCompositeChat::cParts & Parts = a_Message.GetParts();
|
||||
for (cCompositeChat::cParts::const_iterator itr = Parts.begin(), end = Parts.end(); itr != end; ++itr)
|
||||
{
|
||||
switch ((*itr)->m_PartType)
|
||||
{
|
||||
case cCompositeChat::ptText:
|
||||
case cCompositeChat::ptClientTranslated:
|
||||
case cCompositeChat::ptRunCommand:
|
||||
case cCompositeChat::ptSuggestCommand:
|
||||
{
|
||||
Msg.append((*itr)->m_Text);
|
||||
break;
|
||||
}
|
||||
case cCompositeChat::ptUrl:
|
||||
{
|
||||
Msg.append(((cCompositeChat::cUrlPart *)(*itr))->m_Url);
|
||||
break;
|
||||
}
|
||||
} // switch (PartType)
|
||||
} // for itr - Parts[]
|
||||
|
||||
// Send the message:
|
||||
cCSLock Lock(m_CSPacket);
|
||||
WriteByte (PACKET_CHAT);
|
||||
WriteString(Msg);
|
||||
WriteString(a_Message.ExtractText());
|
||||
Flush();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user