Feature/save system
This commit is contained in:
@@ -7,6 +7,7 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
|
<script src="../Dependences/jquery-3.3.1.min.js"></script>
|
||||||
<link rel="stylesheet" href="style.css" />
|
<link rel="stylesheet" href="style.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|||||||
@@ -9,9 +9,7 @@ mp.events.add('saveBlip', () => {
|
|||||||
|
|
||||||
saveBrowser = mp.browsers.new('package://Save/save.html');
|
saveBrowser = mp.browsers.new('package://Save/save.html');
|
||||||
mp.gui.chat.activate(false);
|
mp.gui.chat.activate(false);
|
||||||
setTimeout(() => {
|
mp.gui.cursor.show(true, true);
|
||||||
mp.gui.cursor.visible = true
|
|
||||||
}, 500);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
mp.events.add('saveData', (blipSprite, blipName, blipScale, blipColor, blipAlpha, blipDrawDistance, blipShortRange, blipRotation, blipDimension) => {
|
mp.events.add('saveData', (blipSprite, blipName, blipScale, blipColor, blipAlpha, blipDrawDistance, blipShortRange, blipRotation, blipDimension) => {
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
|
<script src="../Dependences/jquery-3.3.1.min.js"></script>
|
||||||
<link rel="stylesheet" href="style.css" />
|
<link rel="stylesheet" href="style.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,14 @@
|
|||||||
* @copyright (c) 2008 - 2018 Life of German
|
* @copyright (c) 2008 - 2018 Life of German
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
require('./Login/main.js');
|
||||||
|
require('./Save/main.js');
|
||||||
|
require('./Save/save.js');
|
||||||
|
|
||||||
require('./Gui/infobox.js');
|
require('./Gui/infobox.js');
|
||||||
require('./Login/main.js');
|
require('./Login/main.js');
|
||||||
require('./Save/main.js');
|
require('./Save/main.js');
|
||||||
|
|
||||||
require('./FactionManagement/main.js');
|
require('./FactionManagement/main.js');
|
||||||
|
|
||||||
|
|||||||
@@ -36,12 +36,16 @@ namespace reallife_gamemode.Model
|
|||||||
base.OnModelCreating(modelBuilder);
|
base.OnModelCreating(modelBuilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//User
|
||||||
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.Entities.UserVehicle> UserVehicles { get; set; }
|
||||||
public DbSet<Server.Entities.UserBankAccount> BankAccounts { get; set; }
|
public DbSet<Server.Entities.UserBankAccount> BankAccounts { get; set; }
|
||||||
public DbSet<Server.Entities.Ban> Bans { get; set; }
|
public DbSet<Server.Entities.Ban> Bans { get; set; }
|
||||||
|
|
||||||
|
//Faction
|
||||||
public DbSet<Server.Entities.Faction> Factions { get; set; }
|
public DbSet<Server.Entities.Faction> Factions { get; set; }
|
||||||
public DbSet<Server.Entities.FactionRank> FactionRanks { get; set; }
|
public DbSet<Server.Entities.FactionRank> FactionRanks { get; set; }
|
||||||
|
public DbSet<Server.Entities.FactionVehicle> FactionVehicles { get; set; }
|
||||||
|
|
||||||
//Logs
|
//Logs
|
||||||
//public DbSet<Server.Logs.Ban> BanLogs { get; set; }
|
//public DbSet<Server.Logs.Ban> BanLogs { get; set; }
|
||||||
|
|||||||
@@ -567,31 +567,6 @@ namespace reallife_gamemode.Server.Commands
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Command("save", "~m~Benutzung: ~s~/save [Typ = ~g~Blip, ~r~Marker, Ped, Pickup, TextLabel, ~g~Vehicle")]
|
|
||||||
public void CmdAdminSave(Client player, string typ)
|
|
||||||
{
|
|
||||||
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
|
|
||||||
{
|
|
||||||
ChatService.NotAuthorized(player);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
switch (typ.ToLower())
|
|
||||||
{
|
|
||||||
case "blip":
|
|
||||||
player.TriggerEvent("saveBlip");
|
|
||||||
break;
|
|
||||||
case "vehicle":
|
|
||||||
if (player.IsInVehicle)
|
|
||||||
{
|
|
||||||
Vehicle vehicle = player.Vehicle;
|
|
||||||
SaveData.SaveVehicleData((VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
|
|
||||||
Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), vehicle.Locked, vehicle.EngineStatus, Convert.ToByte(vehicle.Dimension));
|
|
||||||
}
|
|
||||||
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[Command("ban", "~m~Benutzung: ~s~/ban [User] [Zeit in Minuten(0 für Permanent)] [Grund] ", GreedyArg = true)]
|
[Command("ban", "~m~Benutzung: ~s~/ban [User] [Zeit in Minuten(0 für Permanent)] [Grund] ", GreedyArg = true)]
|
||||||
public void CmdAdminBan(Client admin, string user, int mins, string reason)
|
public void CmdAdminBan(Client admin, string user, int mins, string reason)
|
||||||
{
|
{
|
||||||
@@ -612,6 +587,44 @@ namespace reallife_gamemode.Server.Commands
|
|||||||
target.GetUser().BanPlayer(admin, reason, mins);
|
target.GetUser().BanPlayer(admin, reason, mins);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Command("save", "~m~Benutzung: ~s~/save [Typ = ~g~Blip, ~r~Marker, Ped, Pickup, TextLabel, ~g~Vehicle, FVehicle")]
|
||||||
|
public void CmdAdminSave(Client player, string typ)
|
||||||
|
{
|
||||||
|
switch (typ)
|
||||||
|
{
|
||||||
|
case "Blip":
|
||||||
|
player.TriggerEvent("saveBlip");
|
||||||
|
break;
|
||||||
|
case "FVehicle":
|
||||||
|
if (player.IsInVehicle)
|
||||||
|
{
|
||||||
|
if(player.GetUser().FactionId == null)
|
||||||
|
{
|
||||||
|
player.SendChatMessage("~m~Du bist in keiner Fraktion! Invite dich erst mit ~y~/ainvite");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Vehicle vehicle = player.Vehicle;
|
||||||
|
SaveData.SaveFactionVehicleData((VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
|
||||||
|
Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), vehicle.Locked, vehicle.EngineStatus, Convert.ToByte(vehicle.Dimension), player.GetUser().FactionId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
|
||||||
|
break;
|
||||||
|
case "Vehicle":
|
||||||
|
if (player.IsInVehicle)
|
||||||
|
{
|
||||||
|
Vehicle vehicle = player.Vehicle;
|
||||||
|
SaveData.SaveVehicleData((VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
|
||||||
|
Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), vehicle.Locked, vehicle.EngineStatus, Convert.ToByte(vehicle.Dimension));
|
||||||
|
}
|
||||||
|
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Command("unban", "~m~Benutzung: ~s~/unban [Name] ", GreedyArg = true)]
|
[Command("unban", "~m~Benutzung: ~s~/unban [Name] ", GreedyArg = true)]
|
||||||
public void CmdAdminUnban(Client admin, string userName)
|
public void CmdAdminUnban(Client admin, string userName)
|
||||||
{
|
{
|
||||||
|
|||||||
41
Server/Entities/FactionVehicles.cs
Normal file
41
Server/Entities/FactionVehicles.cs
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
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 FactionVehicles (FactionVehicle.cs)
|
||||||
|
* @author VegaZ
|
||||||
|
* @copyright (c) 2008 - 2018 Life of German
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace reallife_gamemode.Server.Entities
|
||||||
|
{
|
||||||
|
public class FactionVehicle
|
||||||
|
{
|
||||||
|
[Key]
|
||||||
|
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||||
|
public int Id { get; set; }
|
||||||
|
[ForeignKey("Faction")]
|
||||||
|
public int? FactionId { get; set; }
|
||||||
|
public Faction Faction { 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; }
|
||||||
|
public bool Active { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -37,11 +37,18 @@ namespace reallife_gamemode.Server.Events
|
|||||||
{
|
{
|
||||||
var user = saveUser.Users.SingleOrDefault(u => u.Name == player.Name);
|
var user = saveUser.Users.SingleOrDefault(u => u.Name == player.Name);
|
||||||
|
|
||||||
|
if(user == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
user.PositionX = player.Position.X;
|
user.PositionX = player.Position.X;
|
||||||
user.PositionY = player.Position.Y;
|
user.PositionY = player.Position.Y;
|
||||||
user.PositionZ = player.Position.Z;
|
user.PositionZ = player.Position.Z;
|
||||||
saveUser.SaveChanges();
|
saveUser.SaveChanges();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
player.SetData("isLoggedIn", false);
|
player.SetData("isLoggedIn", false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ namespace reallife_gamemode.Server.Events
|
|||||||
player.SetData("isLoggedIn", true);
|
player.SetData("isLoggedIn", true);
|
||||||
player.SetData("spec", true);
|
player.SetData("spec", true);
|
||||||
player.TriggerEvent("draw", player.Name, player.Handle.Value);
|
player.TriggerEvent("draw", player.Name, player.Handle.Value);
|
||||||
player.Position = new Vector3(user.PositionX, user.PositionY, user.PositionZ);
|
//player.Position = new Vector3(user.PositionX, user.PositionY, user.PositionZ);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,30 @@ namespace reallife_gamemode.Server.Events
|
|||||||
saveData.SaveChanges();
|
saveData.SaveChanges();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public static void SaveFactionVehicleData(VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
|
||||||
|
string vehicleNumberPlate, byte vehiclePrimaryColor, byte vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, byte vehicleDimension, int? factionId)
|
||||||
|
{
|
||||||
|
using (var saveData = new Model.DatabaseContext())
|
||||||
|
{
|
||||||
|
var dataSet = new Entities.FactionVehicle
|
||||||
|
{
|
||||||
|
Model = vehicleModel,
|
||||||
|
FactionId = factionId,
|
||||||
|
PositionX = vehiclePosition.X,
|
||||||
|
PositionY = vehiclePosition.Y,
|
||||||
|
PositionZ = vehiclePosition.Z,
|
||||||
|
Heading = vehicleHeading,
|
||||||
|
NumberPlate = vehicleNumberPlate,
|
||||||
|
PrimaryColor = vehiclePrimaryColor,
|
||||||
|
SecondaryColor = vehicleSecondaryColor,
|
||||||
|
Locked = vehicleLocked,
|
||||||
|
Engine = vehicleEngine,
|
||||||
|
Dimension = vehicleDimension,
|
||||||
|
Active = true
|
||||||
|
};
|
||||||
|
saveData.FactionVehicles.Add(dataSet);
|
||||||
|
saveData.SaveChanges();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
34
Server/Extensions/VehicleExtension.cs
Normal file
34
Server/Extensions/VehicleExtension.cs
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
using GTANetworkAPI;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using reallife_gamemode.Model;
|
||||||
|
using reallife_gamemode.Server.Entities;
|
||||||
|
using reallife_gamemode.Server.Managers;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @overview Life of German Reallife - Vehicle Extension (VehicleExtension.cs)
|
||||||
|
* @author VegaZ
|
||||||
|
* @copyright (c) 2008 - 2018 Life of German
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace reallife_gamemode.Server.Extensions
|
||||||
|
{
|
||||||
|
public class VehicleExtension : Script
|
||||||
|
{
|
||||||
|
public static bool IsFactionVehicle(Vehicle vehicle)
|
||||||
|
{
|
||||||
|
if (LoadManager.FactionVehiclesList.Contains(vehicle) == true)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
public static int GetFaction(Vehicle vehicle)
|
||||||
|
{
|
||||||
|
return (FactionVehicle)vehicle.FactionId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,7 +20,6 @@ namespace reallife_gamemode.Server.Managers
|
|||||||
{
|
{
|
||||||
using (var loadData = new DatabaseContext())
|
using (var loadData = new DatabaseContext())
|
||||||
{
|
{
|
||||||
//LOAD ALL BLIPS
|
|
||||||
foreach (Saves.SavedBlip b in loadData.Blips)
|
foreach (Saves.SavedBlip b in loadData.Blips)
|
||||||
{
|
{
|
||||||
if(b.Active == true)
|
if(b.Active == true)
|
||||||
@@ -29,8 +28,21 @@ namespace reallife_gamemode.Server.Managers
|
|||||||
b.Color, b.Name, b.Alpha, b.DrawDistance, b.ShortRange, (short) b.Rotation, b.Dimension);
|
b.Color, b.Name, b.Alpha, b.DrawDistance, b.ShortRange, (short) b.Rotation, b.Dimension);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//LOAD ALL VEHICLES
|
}
|
||||||
foreach (Saves.SavedVehicle v in loadData.Vehicles)
|
using (var loadVehicles = new DatabaseContext())
|
||||||
|
{
|
||||||
|
foreach (Saves.SavedVehicle v in loadVehicles.Vehicles)
|
||||||
|
{
|
||||||
|
if (v.Active == true)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
using (var loadFVehicles = new DatabaseContext())
|
||||||
|
{
|
||||||
|
foreach (FactionVehicle v in loadFVehicles.FactionVehicles)
|
||||||
{
|
{
|
||||||
if (v.Active == true)
|
if (v.Active == true)
|
||||||
{
|
{
|
||||||
|
|||||||
23
build.csproj
23
build.csproj
@@ -1,23 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFramework>netcoreapp2.0</TargetFramework>
|
|
||||||
<RootNamespace>reallife_gamemode</RootNamespace>
|
|
||||||
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
|
||||||
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Content Include="meta.xml">
|
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="gtanetwork.api" Version="0.3.5" />
|
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.3" />
|
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.3" />
|
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />
|
|
||||||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.1.2" />
|
|
||||||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql.Design" Version="1.1.2" />
|
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
||||||
Reference in New Issue
Block a user