IW4M-Admin/SharedLibrary/Event.cs
RaidMax 7dfc2bbc1b I apparently initialized the commands for each server, which result in 114 commands being added. That is now fixed.
Hopefully this is the final fix for chat remaining on empty servers. (order matters!)
Configuration setting to allow multiple owners.
Fixed setlevel issues.
Organized Server class variables
2017-06-19 13:58:01 -04:00

154 lines
3.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace SharedLibrary
{
[Serializable]
public class Chat
{
public Chat(string O, String M, DateTime D)
{
Name = O;
Message = M;
Time = D;
}
public String Message { get; private set; }
public DateTime Time { get; private set; }
public string Name;
}
[Serializable]
public struct RestEvent
{
public RestEvent(EventType Ty, EventVersion V, string M, string T, string O, string Ta)
{
Type = Ty;
Version = V;
Message = M;
Title = T;
Origin = O;
Target = Ta;
ID = Math.Abs(DateTime.Now.GetHashCode());
}
public enum EventType
{
NOTIFICATION,
STATUS,
ALERT,
}
public enum EventVersion
{
IW4MAdmin
}
public EventType Type;
public EventVersion Version;
public string Message;
public string Title;
public string Origin;
public string Target;
public int ID;
}
public class Event
{
public enum GType
{
//FROM SERVER
Start,
Stop,
Connect,
Disconnect,
Say,
Kill,
Death,
MapChange,
MapEnd,
//FROM ADMIN
Broadcast,
Tell,
Kick,
Ban,
Remote,
Unknown,
//FROM PLAYER
Report,
Flag
}
public Event(GType t, string d, Player O, Player T, Server S)
{
Type = t;
Data = d;
Origin = O;
Target = T;
Owner = S;
}
public static Event ParseEventString(String[] line, Server SV)
{
#if DEBUG == false
try
#endif
{
String eventType = line[0].Substring(line[0].Length - 1);
eventType = eventType.Trim();
if (eventType == "K")
{
StringBuilder Data = new StringBuilder();
if (line.Length > 9)
{
for (int i = 9; i < line.Length; i++)
Data.Append(line[i] + ";");
}
return new Event(GType.Kill, Data.ToString(), SV.ParseClientFromString(line, 6), SV.ParseClientFromString(line, 2), SV);
}
if (line[0].Substring(line[0].Length - 3).Trim() == "say")
{
Regex rgx = new Regex("[^a-zA-Z0-9 -! -_]");
string message = rgx.Replace(line[4], "");
return new Event(GType.Say, Utilities.StripIllegalCharacters(message).StripColors(), SV.ParseClientFromString(line, 2), null, SV) { Message = Utilities.StripIllegalCharacters(message).StripColors() };
}
if (eventType == ":")
return new Event(GType.MapEnd, line[0], new Player("WORLD", "WORLD", 0, 0), null, SV);
if (line[0].Contains("InitGame"))
return new Event(GType.MapChange, line[0], new Player("WORLD", "WORLD", 0, 0), null, SV);
return null;
}
#if DEBUG == false
catch (Exception E)
{
SV.Manager.GetLogger().WriteError("Error requesting event " + E.Message);
return null;
}
#endif
}
public GType Type;
public string Data; // Data is usually the message sent by player
public string Message;
public Player Origin;
public Player Target;
public Server Owner;
public Boolean Remote = false;
}
}