78 lines
2.6 KiB
C#
78 lines
2.6 KiB
C#
using GTANetworkAPI;
|
|
using ReallifeGamemode.Server.Entities;
|
|
using ReallifeGamemode.Server.Models;
|
|
using System;
|
|
using System.Linq;
|
|
|
|
/**
|
|
* @overview Life of German Reallife - Client Extension (ClientExtension.cs)
|
|
* @author hydrant
|
|
* @copyright (c) 2008 - 2018 Life of German
|
|
*/
|
|
|
|
namespace ReallifeGamemode.Server.Extensions
|
|
{
|
|
public static class ClientExtension
|
|
{
|
|
/// <summary>
|
|
/// Gibt das User-Objekt eines Client's zurück.
|
|
/// Gibt nichts zurück, wenn der Client nicht eingeloggt ist
|
|
/// </summary>
|
|
/// <param name="client">Der Client, dessen User man bekommen möchte</param>
|
|
/// <param name="context">Ein eventuell vorhandener Datenbank-Context, falls man Änderungen in der Datenbank vornehmen will</param>
|
|
/// <returns></returns>
|
|
public static User GetUser(this Client client, DatabaseContext context = null)
|
|
{
|
|
if (!client.IsLoggedIn()) return null;
|
|
if(context == null)
|
|
{
|
|
using (context = new DatabaseContext())
|
|
{
|
|
return context.Users.FirstOrDefault(u => u.Name == client.Name);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return context.Users.FirstOrDefault(u => u.Name == client.Name);
|
|
}
|
|
}
|
|
|
|
public static Character GetCharacter(this User user, DatabaseContext context = null)
|
|
{
|
|
if (context == null)
|
|
{
|
|
using (context = new DatabaseContext())
|
|
{
|
|
return context.Characters.FirstOrDefault(u => u.UserId == user.Id);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return context.Characters.FirstOrDefault(u => u.UserId == user.Id);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt zurück, ob ein Client eingeloggt ist
|
|
/// </summary>
|
|
/// <param name="player">Der Client, dessen Login-Status man bekommen möchte</param>
|
|
/// <returns></returns>
|
|
public static bool IsLoggedIn(this Client player)
|
|
{
|
|
return player.HasData("isLoggedIn") ? player.GetData("isLoggedIn") : false;
|
|
}
|
|
|
|
public static Vector3 GetPositionFromPlayer(Client player, float distance, int offset = 0)
|
|
{
|
|
var pos = player.Position;
|
|
var a = player.Heading + offset;
|
|
var rad = a * Math.PI / 180;
|
|
var newpos = new Vector3(pos.X + (distance * Math.Sin(-rad)),
|
|
pos.Y + (distance * Math.Cos(-rad)),
|
|
pos.Z);
|
|
return newpos;
|
|
}
|
|
|
|
}
|
|
}
|