diff --git a/Client/Login/login.html b/Client/Login/login.html
index 5306cfdd..9b848994 100644
--- a/Client/Login/login.html
+++ b/Client/Login/login.html
@@ -7,6 +7,7 @@
+
diff --git a/Client/Save/main.js b/Client/Save/main.js
index ab26a4b6..b40e649f 100644
--- a/Client/Save/main.js
+++ b/Client/Save/main.js
@@ -9,9 +9,7 @@ mp.events.add('saveBlip', () => {
saveBrowser = mp.browsers.new('package://Save/save.html');
mp.gui.chat.activate(false);
- setTimeout(() => {
- mp.gui.cursor.visible = true
- }, 500);
+ mp.gui.cursor.show(true, true);
});
mp.events.add('saveData', (blipSprite, blipName, blipScale, blipColor, blipAlpha, blipDrawDistance, blipShortRange, blipRotation, blipDimension) => {
diff --git a/Client/Save/save.html b/Client/Save/save.html
index 7f0538b7..b6122bcb 100644
--- a/Client/Save/save.html
+++ b/Client/Save/save.html
@@ -7,6 +7,7 @@
+
diff --git a/Client/index.js b/Client/index.js
index a0b043e1..7a6e6771 100644
--- a/Client/index.js
+++ b/Client/index.js
@@ -4,8 +4,14 @@
* @copyright (c) 2008 - 2018 Life of German
*/
+
+require('./Login/main.js');
+require('./Save/main.js');
+require('./Save/save.js');
+
require('./Gui/infobox.js');
require('./Login/main.js');
require('./Save/main.js');
require('./FactionManagement/main.js');
+
diff --git a/Model/DatabaseContext.cs b/Model/DatabaseContext.cs
index f3f1e4d9..f4b77eb8 100644
--- a/Model/DatabaseContext.cs
+++ b/Model/DatabaseContext.cs
@@ -36,12 +36,16 @@ namespace reallife_gamemode.Model
base.OnModelCreating(modelBuilder);
}
+ //User
public DbSet Users { get; set; }
public DbSet UserVehicles { get; set; }
public DbSet BankAccounts { get; set; }
public DbSet Bans { get; set; }
+
+ //Faction
public DbSet Factions { get; set; }
public DbSet FactionRanks { get; set; }
+ public DbSet FactionVehicles { get; set; }
//Logs
//public DbSet BanLogs { get; set; }
diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs
index 853018f2..e7ac6c70 100644
--- a/Server/Commands/Admin.cs
+++ b/Server/Commands/Admin.cs
@@ -56,7 +56,6 @@ namespace reallife_gamemode.Server.Commands
if (!uint.TryParse(hash, out uint vehHash))
{
- Debug.WriteLine("couldnt parse");
if (!Enum.TryParse(hash, true, out VehicleHash realHash))
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Fahrzeug existiert nicht.");
@@ -567,31 +566,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)]
public void CmdAdminBan(Client admin, string user, int mins, string reason)
{
@@ -612,6 +586,44 @@ namespace reallife_gamemode.Server.Commands
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)]
public void CmdAdminUnban(Client admin, string userName)
{
diff --git a/Server/Entities/FactionVehicles.cs b/Server/Entities/FactionVehicles.cs
new file mode 100644
index 00000000..3e67d3cc
--- /dev/null
+++ b/Server/Entities/FactionVehicles.cs
@@ -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; }
+ }
+}
diff --git a/Server/Events/Disconnect.cs b/Server/Events/Disconnect.cs
index bbcd959f..d923476f 100644
--- a/Server/Events/Disconnect.cs
+++ b/Server/Events/Disconnect.cs
@@ -35,12 +35,19 @@ namespace reallife_gamemode.Server.Events
using (var saveUser = new Model.DatabaseContext())
{
- var user = saveUser.Users.SingleOrDefault(u => u.Name == player.Name);
+ var user = player.GetUser(saveUser);
- user.PositionX = player.Position.X;
- user.PositionY = player.Position.Y;
- user.PositionZ = player.Position.Z;
- saveUser.SaveChanges();
+ if(user == null)
+ {
+ return;
+ }
+ else
+ {
+ user.PositionX = player.Position.X;
+ user.PositionY = player.Position.Y;
+ user.PositionZ = player.Position.Z;
+ saveUser.SaveChanges();
+ }
}
player.SetData("isLoggedIn", false);
}
diff --git a/Server/Events/Login.cs b/Server/Events/Login.cs
index 032b9b55..293d598f 100644
--- a/Server/Events/Login.cs
+++ b/Server/Events/Login.cs
@@ -42,12 +42,12 @@ namespace reallife_gamemode.Server.Events
else
{
player.TriggerEvent("loginSuccess");
- NAPI.Player.SpawnPlayer(player, Main.DEFAULT_SPAWN_POSITION, Main.DEFAULT_SPAWN_HEADING);
+ NAPI.Player.SpawnPlayer(player, new Vector3(user.PositionX, user.PositionY, user.PositionZ), 0);
player.SetData("isLoggedIn", true);
player.SetData("spec", true);
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);
}
}
}
diff --git a/Server/Events/SaveData.cs b/Server/Events/SaveData.cs
index 01d32054..667dc6b9 100644
--- a/Server/Events/SaveData.cs
+++ b/Server/Events/SaveData.cs
@@ -73,6 +73,30 @@ namespace reallife_gamemode.Server.Events
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();
+ }
+ }
}
}
diff --git a/Server/Managers/LoadManager.cs b/Server/Managers/LoadManager.cs
index 0ca49ad9..1686b3d9 100644
--- a/Server/Managers/LoadManager.cs
+++ b/Server/Managers/LoadManager.cs
@@ -17,10 +17,9 @@ namespace reallife_gamemode.Server.Managers
{
[ServerEvent(Event.ResourceStart)]
public void OnResourceStart()
- {
+ {
using (var loadData = new DatabaseContext())
{
- //LOAD ALL BLIPS
foreach (Saves.SavedBlip b in loadData.Blips)
{
if(b.Active == true)
@@ -29,7 +28,6 @@ namespace reallife_gamemode.Server.Managers
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)
{
if (v.Active == true)
@@ -38,6 +36,14 @@ namespace reallife_gamemode.Server.Managers
v.SecondaryColor, v.NumberPlate, v.Alpha, v.Locked, v.Engine = false, v.Dimension);
}
}
+ foreach (FactionVehicle v in loadData.FactionVehicles)
+ {
+ 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);
+ }
+ }
}
}
}