1
0
mirror of https://github.com/RaidMax/IW4M-Admin.git synced 2025-06-10 07:13:58 -05:00

lots of fixes :)

This commit is contained in:
RaidMax
2018-05-10 00:34:29 -05:00
parent 5d0d57bbd2
commit 27233e3069
21 changed files with 291 additions and 248 deletions

View File

@ -689,7 +689,6 @@ namespace SharedLibraryCore.Commands
public override async Task ExecuteAsync(GameEvent E)
{
// todo: move unflag to seperate command
if (E.Target.Level >= E.Origin.Level)
{
await E.Origin.Tell($"{Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_FLAG_FAIL"]} ^5{E.Target.Name}");

View File

@ -33,8 +33,8 @@ namespace SharedLibraryCore
Command,
// FROM GAME
Script,
ScriptDamage,
ScriptKill,
Kill,
Damage,
Death,
@ -49,35 +49,19 @@ namespace SharedLibraryCore
Owner = S;
OnProcessed = new ManualResetEventSlim();
Time = DateTime.UtcNow;
CurrentEventId++;
Id = CurrentEventId;
}
public GameEvent()
{
OnProcessed = new ManualResetEventSlim();
Time = DateTime.UtcNow;
CurrentEventId++;
Id = CurrentEventId;
}
public static GameEvent TransferWaiter(EventType newType, GameEvent e)
{
var newEvent = new GameEvent()
{
Data = e.Data,
Extra = e.Extra,
Message = e.Message,
OnProcessed = e.OnProcessed,
Origin = e.Origin,
Owner = e.Owner,
Remote = e.Remote,
Target = e.Target,
Type = newType,
};
// hack: prevent the previous event from completing until this one is done
e.OnProcessed = new ManualResetEventSlim();
newEvent.Time = e.Time;
return newEvent;
}
private static long CurrentEventId;
public EventType Type;
public string Data; // Data is usually the message sent by player
@ -89,5 +73,6 @@ namespace SharedLibraryCore
public object Extra { get; set; }
public ManualResetEventSlim OnProcessed { get; set; }
public DateTime Time { get; private set; }
public long Id { get; private set; }
}
}

View File

@ -48,16 +48,41 @@ namespace SharedLibraryCore.Helpers
{
double deltaX = Math.Abs(b.X -a.X);
double deltaY = Math.Abs(b.Y - a.Y);
// double deltaZ = Math.Abs(b.Z - a.Z);
double deltaZ = Math.Abs(b.Z - a.Z);
// this 'fixes' the roll-over angles
double dx = deltaX < 360.0 / 2 ? deltaX : 360.0 - deltaX;
double dy = deltaY < 360.0 / 2 ? deltaY : 360.0 - deltaY;
// double dz = deltaZ < 360.0 / 2 ? deltaZ : 360.0 - deltaZ;
double dz = deltaZ < 360.0 / 2 ? deltaZ : 360.0 - deltaZ;
return Math.Sqrt((dx * dx) + (dy * dy) /*+ (dz * dz)*/);
}
public static double ViewAngleDistance(Vector3 a, Vector3 b, Vector3 c)
{
double dabX = Math.Abs(a.X - b.X);
dabX = dabX < 360.0 / 2 ? dabX : 360.0 - dabX;
double dabY = Math.Abs(a.Y - b.Y);
dabY = dabY < 360.0 / 2 ? dabY : 360.0 - dabY;
double dacX = Math.Abs(a.X - c.X);
dacX = dacX < 360.0 / 2 ? dacX : 360.0 - dacX;
double dacY = Math.Abs(a.Y - c.Y);
dacY = dacY < 360.0 / 2 ? dacY : 360.0 - dacY;
double dbcX = Math.Abs(b.X - c.X);
dbcX = dbcX < 360.0 / 2 ? dbcX : 360.0 - dbcX;
double dbcY = Math.Abs(b.Y - c.Y);
dbcY = dbcY < 360.0 / 2 ? dbcY : 360.0 - dbcY;
double deltaX = (dabX - dacX - dbcX) / 2.0;
deltaX = deltaX < 360.0 / 2 ? deltaX : 360.0 - deltaX;
double deltaY = (dabY - dacY - dbcY) / 2.0;
deltaY = deltaY < 360.0 / 2 ? deltaY : 360.0 - deltaY;
return Math.Round(Math.Sqrt((deltaX * deltaX) + (deltaY * deltaY)), 4);
}
public static Vector3 Subtract(Vector3 a, Vector3 b) => new Vector3(b.X - a.X, b.Y - a.Y, b.Z - a.Z);
public double DotProduct(Vector3 a) => (a.X * this.X) + (a.Y * this.Y) + (a.Z * this.Z);

View File

@ -40,20 +40,25 @@ namespace SharedLibraryCore.Objects
public async Task Tell(String Message)
{
// await CurrentServer.Tell(Message, this);
var e = new GameEvent()
// this is console or remote so send immediately
if (ClientNumber < 0)
{
Message = Message,
Target = this,
Owner = CurrentServer,
Type = GameEvent.EventType.Tell,
Data = Message
};
await CurrentServer.Tell(Message, this);
}
CurrentServer.Manager.GetEventHandler().AddEvent(e);
// this ensures the output it sent before returning
await Task.Run(() => e.OnProcessed.Wait());
else
{
var e = new GameEvent()
{
Message = Message,
Target = this,
Owner = CurrentServer,
Type = GameEvent.EventType.Tell,
Data = Message
};
CurrentServer.Manager.GetEventHandler().AddEvent(e);
}
}
public async Task Kick(String Message, Player Sender)

View File

@ -56,8 +56,6 @@ namespace SharedLibraryCore.RCon
{
public IPEndPoint Endpoint { get; private set; }
public string RConPassword { get; private set; }
public ConcurrentQueue<ManualResetEventSlim> ResponseQueue;
//Socket ServerConnection;
ILogger Log;
int FailedSends;
int FailedReceives;
@ -79,13 +77,6 @@ namespace SharedLibraryCore.RCon
OnReceived = new ManualResetEvent(false);
}
~Connection()
{
/*ServerConnection.Shutdown(SocketShutdown.Both);
ServerConnection.Close();
ServerConnection.Dispose();*/
}
private void OnConnectedCallback(IAsyncResult ar)
{
var serverSocket = (Socket)ar.AsyncState;
@ -144,12 +135,12 @@ namespace SharedLibraryCore.RCon
if (!connectionState.Buffer.Take(4).ToArray().SequenceEqual(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF }))
throw new NetworkException("Unexpected packet received");
if (FailedReceives == 0 && serverConnection.Available > 0)
{
serverConnection.BeginReceive(connectionState.Buffer, 0, connectionState.Buffer.Length, 0,
new AsyncCallback(OnReceivedCallback), connectionState);
}
else
/* if (FailedReceives == 0 && serverConnection.Available > 0)
{
serverConnection.BeginReceive(connectionState.Buffer, 0, connectionState.Buffer.Length, 0,
new AsyncCallback(OnReceivedCallback), connectionState);
}
else*/
{
response = connectionState.ResponseString.ToString();
OnReceived.Set();
@ -169,7 +160,7 @@ namespace SharedLibraryCore.RCon
catch (ObjectDisposedException)
{
Log.WriteWarning($"Tried to check for more available bytes for disposed socket on {Endpoint}");
// Log.WriteWarning($"Tried to check for more available bytes for disposed socket on {Endpoint}");
}
}
@ -211,7 +202,9 @@ namespace SharedLibraryCore.RCon
retrySend:
try
{
#if DEBUG
Console.WriteLine($"Sending Command {parameters}");
#endif
if (!OnConnected.WaitOne(StaticHelpers.SocketTimeout))
throw new SocketException((int)SocketError.TimedOut);

View File

@ -41,7 +41,6 @@ namespace SharedLibraryCore
PlayerHistory = new Queue<PlayerHistory>();
ChatHistory = new List<ChatInfo>();
NextMessage = 0;
OnEvent = new ManualResetEventSlim();
CustomSayEnabled = Manager.GetApplicationSettings().Configuration().EnableCustomSayName;
CustomSayName = Manager.GetApplicationSettings().Configuration().CustomSayName;
InitializeTokens();
@ -128,7 +127,7 @@ namespace SharedLibraryCore
#if !DEBUG
string formattedMessage = String.Format(RconParser.GetCommandPrefixes().Say, Message);
var e = new GameEvent()
var e = new GameEvent()
{
Message = formattedMessage,
Data = formattedMessage,
@ -139,8 +138,8 @@ namespace SharedLibraryCore
Manager.GetEventHandler().AddEvent(e);
#else
Logger.WriteVerbose(Message.StripColors());
await Task.CompletedTask;
#endif
await Task.CompletedTask;
}
/// <summary>
@ -162,18 +161,21 @@ namespace SharedLibraryCore
if (Target.Level == Player.Permission.Console)
{
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine(Utilities.StripColors(Message));
Console.WriteLine(Message.StripColors());
Console.ForegroundColor = ConsoleColor.Gray;
}
if (CommandResult.Count > 15)
CommandResult.RemoveAt(0);
CommandResult.Add(new CommandResponseInfo()
if (Target.ClientNumber < 0)
{
Response = Utilities.StripColors(Message),
ClientId = Target.ClientId
});
CommandResult.Add(new CommandResponseInfo()
{
Response = Message.StripColors(),
ClientId = Target.ClientId
});
}
}
/// <summary>
@ -261,7 +263,7 @@ namespace SharedLibraryCore
{
BroadcastMessages = new List<String>();
if(ServerConfig.AutoMessages != null)
if (ServerConfig.AutoMessages != null)
BroadcastMessages.AddRange(ServerConfig.AutoMessages);
BroadcastMessages.AddRange(Manager.GetApplicationSettings().Configuration().AutoMessages);
}
@ -315,7 +317,6 @@ namespace SharedLibraryCore
public RCon.Connection RemoteConnection { get; protected set; }
public IRConParser RconParser { get; protected set; }
public IEventParser EventParser { get; set; }
public ManualResetEventSlim OnEvent { get; private set; }
// Internal
protected string IP;
@ -327,6 +328,7 @@ namespace SharedLibraryCore
protected TimeSpan LastMessage;
protected IFile LogFile;
protected DateTime LastPoll;
protected ManualResetEventSlim OnRemoteCommandResponse;
// only here for performance
private bool CustomSayEnabled;

View File

@ -407,15 +407,15 @@ namespace SharedLibraryCore
public static Task SetDvarAsync(this Server server, string dvarName, object dvarValue) => server.RconParser.SetDvarAsync(server.RemoteConnection, dvarName, dvarValue);
public static Task<string[]> ExecuteCommandAsync(this Server server, string commandName) => server.RconParser.ExecuteCommandAsync(server.RemoteConnection, commandName);
public static async Task<string[]> ExecuteCommandAsync(this Server server, string commandName) => await server.RconParser.ExecuteCommandAsync(server.RemoteConnection, commandName);
public static Task<List<Player>> GetStatusAsync(this Server server) => server.RconParser.GetStatusAsync(server.RemoteConnection);
public static async Task<Dictionary<string, string>> GetInfoAsync(this Server server)
{
var response = await server.RemoteConnection.SendQueryAsync(RCon.StaticHelpers.QueryType.GET_INFO);
return response.FirstOrDefault(r => r[0] == '\\')?.DictionaryFromKeyValue();
}
}
}
}