Initial Commit for user-backend, preparing several systems

This commit is contained in:
VegaZ
2018-09-23 20:24:45 +02:00
parent 5ed81d4d1e
commit f231c7214b
8 changed files with 207 additions and 5 deletions

View File

@@ -37,6 +37,7 @@ namespace reallife_gamemode.Model
} }
public DbSet<Server.Entities.User> Users { get; set; } public DbSet<Server.Entities.User> Users { get; set; }
public DbSet<Server.Entities.UserVehicle> UserVehicles { get; set; }
public DbSet<Server.Saves.SavedBlip> Blips { get; set; } public DbSet<Server.Saves.SavedBlip> Blips { get; set; }
public DbSet<Server.Saves.SavedMarker> Markers { get; set; } public DbSet<Server.Saves.SavedMarker> Markers { get; set; }

View File

@@ -1,11 +1,15 @@
using System; using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Text; using System.Text;
using GTANetworkAPI; using GTANetworkAPI;
using reallife_gamemode.Server.Events; using reallife_gamemode.Server.Events;
using reallife_gamemode.Server.Extensions; using reallife_gamemode.Server.Extensions;
using reallife_gamemode.Server.Services; using reallife_gamemode.Server.Services;
using reallife_gamemode.Server.Util; using reallife_gamemode.Server.Util;
using reallife_gamemode.Model;
/** /**
* @overview Life of German Reallife - Admin Commands (Admin.cs) * @overview Life of German Reallife - Admin Commands (Admin.cs)
@@ -277,5 +281,99 @@ namespace reallife_gamemode.Server.Commands
} }
} }
//TEST COMMAND
[Command("own")]
public void CmdAdminOwn(Client player)
{
if (ClientExtension.IsLoggedIn(player) == false)
{
ChatService.PlayerNotLoggedIn(player);
return;
}
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
if (player.IsInVehicle)
{
Vehicle playerVehicle = player.Vehicle;
using (var saveVehicle = new Model.DatabaseContext())
{
var dataSet = new Entities.UserVehicle
{
UserId = ClientExtension.GetUser(player).Id,
Model = (VehicleHash) playerVehicle.Model,
PositionX = playerVehicle.Position.X,
PositionY = playerVehicle.Position.Y,
PositionZ = playerVehicle.Position.Z,
Heading = playerVehicle.Heading,
NumberPlate = playerVehicle.NumberPlate,
PrimaryColor = Convert.ToByte(playerVehicle.PrimaryColor),
SecondaryColor = Convert.ToByte(playerVehicle.SecondaryColor),
Locked = playerVehicle.Locked,
Engine = playerVehicle.EngineStatus,
Dimension = Convert.ToByte(playerVehicle.Dimension),
};
saveVehicle.UserVehicles.Add(dataSet);
saveVehicle.SaveChanges();
}
}
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
}
//TEST COMMAND
[Command("myvehicles")]
public void CmdAdminMyVehicles(Client player)
{
if (ClientExtension.IsLoggedIn(player) == false)
{
ChatService.PlayerNotLoggedIn(player);
return;
}
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
player.SendChatMessage("Deine Fahrzeuge: ");
using (var loadData = new DatabaseContext())
{
foreach (Entities.UserVehicle v in loadData.UserVehicles)
{
if (v.UserId == ClientExtension.GetUser(player).Id)
{
player.SendChatMessage("~b~" + NAPI.Vehicle.GetVehicleDisplayName(v.Model));
}
}
}
}
/*
[Command("restart")]
public void CmdAdminRestart(Client player)
{
if (ClientExtension.IsLoggedIn(player) == false)
{
ChatService.PlayerNotLoggedIn(player);
return;
}
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
var users = NAPI.Pools.GetAllPlayers();
foreach(Client user in users)
{
user.SendChatMessage("~r~Server startet neu.~s~ Bitte verbinde dich über ~y~F1~s~ neu.");
user.Kick();
}
NAPI.Resource.StopResource("reallife-gamemode");
}*/
} }
} }

View File

@@ -1,4 +1,5 @@
using reallife_gamemode.Server.Util; using GTANetworkAPI;
using reallife_gamemode.Server.Util;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
@@ -31,6 +32,9 @@ namespace reallife_gamemode.Server.Entities
[StringLength(64)] [StringLength(64)]
public string Email { get; set; } public string Email { get; set; }
public AdminLevel AdminLevel { get; set; } public AdminLevel AdminLevel { get; set; }
public float PositionX { get; set; }
public float PositionY { get; set; }
public float PositionZ { get; set; }
public bool IsAdmin(AdminLevel level) => AdminLevel >= level; public bool IsAdmin(AdminLevel level) => AdminLevel >= level;
} }

View File

@@ -0,0 +1,38 @@
using GTANetworkAPI;
using reallife_gamemode.Server.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
/**
* @overview Life of German Reallife - Entities UserVehicle (UserVehicle.cs)
* @author VegaZ, hydrant
* @copyright (c) 2008 - 2018 Life of German
*/
namespace reallife_gamemode.Server.Entities
{
public class UserVehicle
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("User")]
public int UserId { get; set; }
public VehicleHash Model { get; set; }
public float PositionX { get; set; }
public float PositionY { get; set; }
public float PositionZ { get; set; }
public float Heading { get; set; }
[StringLength(8)]
public string NumberPlate { get; set; }
public byte Alpha { get; set; }
public byte PrimaryColor { get; set; }
public byte SecondaryColor { get; set; }
public bool Locked { get; set; }
public bool Engine { get; set; }
public byte Dimension { get; set; }
}
}

View File

@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Text;
using GTANetworkAPI; using GTANetworkAPI;
@@ -11,13 +12,34 @@ using GTANetworkAPI;
namespace reallife_gamemode.Server.Events namespace reallife_gamemode.Server.Events
{ {
class Disconnect : Script public class Disconnect : Script
{ {
[ServerEvent(Event.PlayerDisconnected)] [ServerEvent(Event.PlayerDisconnected)]
public void OnPlayerDisconnected(Client player) public void OnPlayerDisconnected(Client player, DisconnectionType type, string reason)
{ {
if (type == DisconnectionType.Left)
{
NAPI.Util.ConsoleOutput(player.Name + " left");
}
if (type == DisconnectionType.Kicked)
{
NAPI.Util.ConsoleOutput(player.Name + " kicked");
}
if (type == DisconnectionType.Timeout)
{
NAPI.Util.ConsoleOutput(player.Name + " Timeoutet");
}
/*
using (var saveUser = new Model.DatabaseContext())
{
var user = saveUser.Users.SingleOrDefault(u => u.Name == player.Name);
user.PositionX = player.Position.X;
user.PositionY = player.Position.Y;
user.PositionZ = player.Position.Z;
saveUser.SaveChanges();
}*/
player.SetData("isLoggedIn", false); player.SetData("isLoggedIn", false);
} }
} }
} }

View File

@@ -44,6 +44,7 @@ namespace reallife_gamemode.Server.Events
player.SetData("isLoggedIn", true); player.SetData("isLoggedIn", true);
player.TriggerEvent("draw"); player.TriggerEvent("draw");
player.Position = new Vector3(user.PositionX, user.PositionY, user.PositionZ);
} }
} }
} }

View File

@@ -0,0 +1,38 @@
using GTANetworkAPI;
using GTANetworkMethods;
using reallife_gamemode.Server.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/**
* @overview Life of German Reallife - Event ResourceStop (ResourceStop.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace reallife_gamemode.Server.Events
{
public class ResourceStop : Script
{
[ServerEvent(Event.ResourceStop)]
public void OnResourceStop()
{
var users = NAPI.Pools.GetAllPlayers();
foreach(Client user in users)
{
using (var saveUsers = new Model.DatabaseContext())
{
var saveUser = saveUsers.Users.SingleOrDefault(u => u.Name == user.Name);
saveUser.PositionX = user.Position.X;
saveUser.PositionY = user.Position.Y;
saveUser.PositionZ = user.Position.Z;
saveUsers.SaveChanges();
}
}
}
}
}

View File

@@ -34,7 +34,7 @@ namespace reallife_gamemode.Server.Managers
{ {
if (v.Active == true) if (v.Active == true)
{ {
NAPI.Vehicle.CreateVehicle((uint)v.Model, new Vector3(v.PositionX, v.PositionY, v.PositionZ), v.Heading, (int)(v.PrimaryColor), NAPI.Vehicle.CreateVehicle((uint)v.Model, new Vector3(v.PositionX, v.PositionY, v.PositionZ), v.Heading, (v.PrimaryColor),
v.SecondaryColor, v.NumberPlate, v.Alpha, v.Locked, v.Engine = false, v.Dimension); v.SecondaryColor, v.NumberPlate, v.Alpha, v.Locked, v.Engine = false, v.Dimension);
} }
} }