private int HandleChatEvent(int ChatMode, string ChatText, uint SenderObjectId)
{
string CookedText;
string Start;
TELL_TYPE TellType;
if (GetIsPC(SenderObjectId) != TRUE)
return FALSE;
if (ChatText.Length < 1 || (ChatText[0] != '#' && ChatText[0] != '!' && ChatText[0] != '.'))
return FALSE;
//
// Check for a supported internal command.
//
CookedText = ChatText.Substring(1);
if (CookedText.StartsWith("t "))
{
Start = CookedText.Substring(2);
TellType = TELL_TYPE.ToChar;
}
else if (CookedText.StartsWith("tp "))
{
Start = CookedText.Substring(3);
TellType = TELL_TYPE.ToPlayer;
}
else if (CookedText.StartsWith("o "))
{
Start = CookedText.Substring(2);
TellType = TELL_TYPE.ToCharFirstName;
}
else if (CookedText.StartsWith("re "))
{
SendTellReply(SenderObjectId, CookedText.Substring(3), false);
return TRUE;
}
else if (CookedText.StartsWith("r "))
{
SendTellReply(SenderObjectId, CookedText.Substring(2), false);
return TRUE;
}
else if (CookedText.StartsWith("rt ") || CookedText.StartsWith("rw" ))
{
SendTellReply(SenderObjectId, CookedText.Substring(3), true);
return TRUE;
}
else if (CookedText.Equals("users", StringComparison.InvariantCultureIgnoreCase) ||
CookedText.Equals("who", StringComparison.InvariantCultureIgnoreCase))
{
ListOnlineUsers(SenderObjectId);
return TRUE;
}
else if (CookedText.Equals("servers"))
{
ListOnlineServers(SenderObjectId);
return TRUE;
}
#if DEBUG_MODE
else if (CookedText.Equals("showstate", StringComparison.InvariantCultureIgnoreCase))
{
ShowInternalState(SenderObjectId);
return TRUE;
}
#endif
else if (CookedText.Equals("version"))
{
SendMessageToPC(SenderObjectId, "ACR version: " + GetDatabase().ACR_GetVersion());
SendMessageToPC(SenderObjectId, "IPC subsystem version: " + Assembly.GetExecutingAssembly().GetName().Version.ToString());
SendMessageToPC(SenderObjectId, "HAK build date: " + GetDatabase().ACR_GetHAKBuildDate());
SendMessageToPC(SenderObjectId, "Module build date: " + GetDatabase().ACR_GetBuildDate());
return TRUE;
}
else if (CookedText.Equals("notify off"))
{
SendMessageToPC(SenderObjectId, "Cross-server event notifications disabled.");
SetCrossServerNotificationsEnabled(SenderObjectId, false);
return TRUE;
}
else if (CookedText.Equals("notify on"))
{
SendMessageToPC(SenderObjectId, "Cross-server event notifications enabled.");
SetCrossServerNotificationsEnabled(SenderObjectId, true);
return TRUE;
}
else if (CookedText.Equals("hideremoteplayers on"))
{
PlayerState Player = TryGetPlayerState(SenderObjectId);
if (Player == null)
return TRUE;
GetDatabase().ACR_IncrementStatistic("SET_HIDE_REMOTE_PLAYERS");
SendMessageToPC(SenderObjectId, "Remote players are now hidden in the chat select window (when collapsed).");
Player.Flags |= PlayerStateFlags.ChatSelectShowLocalPlayersOnlyWhenCollapsed;
return TRUE;
}
else if (CookedText.Equals("hideremoteplayers off"))
{
PlayerState Player = TryGetPlayerState(SenderObjectId);
if (Player == null)
return TRUE;
GetDatabase().ACR_IncrementStatistic("SET_HIDE_REMOTE_PLAYERS");
SendMessageToPC(SenderObjectId, "Remote players are now shown in the chat select window (when collapsed).");
Player.Flags &= ~(PlayerStateFlags.ChatSelectShowLocalPlayersOnlyWhenCollapsed);
return TRUE;
}
else if (CookedText.Equals("notify chatlog"))
{
SendMessageToPC(SenderObjectId, "Cross-server join/part events are now being delivered to the chat log.");
GetDatabase().ACR_IncrementStatistic("SET_NOTIFY_TO_CHATLOG");
GetPlayerState(SenderObjectId).Flags &= ~(PlayerStateFlags.SendCrossServerNotificationsToCombatLog);
return TRUE;
}
else if (CookedText.Equals("notify combatlog"))
{
SendMessageToPC(SenderObjectId, "Cross-server join/part events are now being delivered to the combat log.");
GetDatabase().ACR_IncrementStatistic("SET_NOTIFY_TO_CHATLOG");
GetPlayerState(SenderObjectId).Flags |= PlayerStateFlags.SendCrossServerNotificationsToCombatLog;
return TRUE;
}
else if (CookedText.Equals("serverlatency") || CookedText.Equals("ping"))
{
ShowServerLatency(SenderObjectId);
return TRUE;
}
else if (CookedText.StartsWith("pingsrv "))
{
try
{
int ServerId = int.Parse(CookedText.Substring(8).TrimStart());
if (!IsServerOnline(ServerId))
{
SendFeedbackError(SenderObjectId, "Requested server is offline or not present.");
return TRUE;
}
ServerLatencyMeasurer.SendPingToServer(SenderObjectId, ServerId, this);
return TRUE;
}
catch (Exception e)
{
SendFeedbackError(SenderObjectId, String.Format("Internal error, exception: {0}", e));
}
return TRUE;
}
else if (CookedText.Equals("uptime"))
{
ShowServerUptime(SenderObjectId);
return TRUE;
}
else if (CookedText.StartsWith("seen "))
{
ShowLastLoginTime(SenderObjectId, CookedText.Substring(5));
return TRUE;
}
else if (CookedText.StartsWith("recorddata "))
{
ShowRecordData(SenderObjectId, CookedText.Substring(11));
return TRUE;
}
else if (CookedText.StartsWith("irc "))
{
string Recipient = WorldManager.Configuration.DefaultIrcRecipient;
if (String.IsNullOrEmpty(Recipient))
{
SendFeedbackError(SenderObjectId, "Default recipient not set in config table in the database. Contact the tech department.");
return TRUE;
}
SendIrcMessage(WorldManager.Configuration.DefaultIrcGatewayId,
Recipient,
SenderObjectId,
CookedText.Substring(4));
return TRUE;
}
else if (CookedText.StartsWith("ircmsg "))
{
ParseSendIrcMessage(CookedText.Substring(7), SenderObjectId);
return TRUE;
}
else if (CookedText.Equals("help"))
{
ShowHelp(SenderObjectId);
return TRUE;
}
else
{
return FALSE;
}
ProcessTellCommand(Start, SenderObjectId, TellType);
return TRUE;
}