Almost finish ClothSystem (Save/Load)

This commit is contained in:
VegaZ
2018-11-20 20:40:14 +01:00
parent 5cf54a7588
commit 5e7a8ac0ae
8 changed files with 274 additions and 116 deletions

View File

@@ -19,7 +19,10 @@ namespace reallife_gamemode.Server.Entities
public int UserId { get; set; }
public User User { get; set; }
public int ComponentId { get; set; }
public int? Drawable { get; set; }
public bool Duty { get; set; }
public byte SlotType { get; set; }
public int SlotId { get; set; }
public int ClothId { get; set; }
}
}

View File

@@ -1,25 +0,0 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
/**
* @overview Life of German Reallife - Entities CharacterProp CharacterProp.cs
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace reallife_gamemode.Server.Entities
{
public class CharacterProp
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("User")]
public int UserId { get; set; }
public User User { get; set; }
public int PropId { get; set; }
public int? Drawable { get; set; }
}
}

View File

@@ -1,8 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GTANetworkAPI;
using Newtonsoft.Json;
using reallife_gamemode.Model;
using reallife_gamemode.Server.Entities;
using reallife_gamemode.Server.Extensions;
using reallife_gamemode.Server.Managers;
using reallife_gamemode.Server.Saves;
@@ -58,6 +61,30 @@ namespace reallife_gamemode.Server.Events
break;
}
player.NametagColor = nameTagColor;
using (var context = new DatabaseContext())
{
List<CharacterCloth> clothes = context.CharacterClothes.ToList().FindAll(u => u.UserId == user.Id);
foreach(var cloth in clothes)
{
if(cloth.SlotType == 0)
{
player.SetClothes(cloth.SlotId, cloth.ClothId, 0);
}
else
{
if(cloth.ClothId != -1)
{
player.SetAccessories(cloth.SlotId, cloth.ClothId, 0);
}
else
{
player.ClearAccessory(cloth.SlotId);
}
}
}
}
}
else
{
@@ -65,6 +92,11 @@ namespace reallife_gamemode.Server.Events
player.SendNotification("Du bist nun ~r~außer Dienst.");
NAPI.ClientEvent.TriggerClientEventForAll("updateDutyMedics", false);
player.NametagColor = new Color(255, 255, 255);
player.ClearAccessory(0);
//Gespeicherte Props laden lassen
player.SetDefaultClothes();
//Gespeicherte Klamotten laden lassen
}
}
}
@@ -101,6 +133,7 @@ namespace reallife_gamemode.Server.Events
string[] legs;
string[] shoes;
//TODO in Datenbank auslagern
if(user.GetCharacter().Gender == false) //Wenn männlich
{
hats = new string[] { "Keinen", "5", "12", "39", "46", "123", "124", "125"};

View File

@@ -96,8 +96,9 @@ namespace reallife_gamemode.Server.Events
else
{
CharacterCreator.ApplyCharacter(player);
UpdateCharacterCloth.LoadCharacterDefaults(player);
NAPI.Player.SpawnPlayer(player, new Vector3(user.PositionX, user.PositionY, user.PositionZ), 0);
player.TriggerEvent("draw", player.Name, player.Handle.Value);
player.TriggerEvent("draw", player.Name, player.Handle.Value);
}
}
}

View File

@@ -0,0 +1,199 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GTANetworkAPI;
using Newtonsoft.Json;
using reallife_gamemode.Model;
using reallife_gamemode.Server.Entities;
using reallife_gamemode.Server.Extensions;
namespace reallife_gamemode.Server.Events
{
public class UpdateCharacterCloth : Script
{
[RemoteEvent("updateDutyProp")]
public void UpdateDutyProp(Client player, int componentId, int componentVariation)
{
if (componentId != -1)
{
player.SetAccessories(componentId, componentVariation, 0);
}
else
{
player.ClearAccessory(0);
}
}
[RemoteEvent("updateDutyCloth")]
public void UpdateDutyCloth(Client player, int componentId, int componentVariation)
{
if (componentId == 11)
{
//TODO Spezielle Duty Kleidung in Datenbank einpflegen (Ergibt bei Cop-Kleidung NULL)
using (var context = new DatabaseContext())
{
if (player.GetUser().GetCharacter().Gender == false)
{
var combination = context.MaleCombinations.FirstOrDefault(c => c.Top == componentVariation);
player.SetClothes(11, componentVariation, 0);
if (combination != null)
{
player.SetClothes(3, combination.Torso, 0);
player.SetClothes(8, combination.Undershirt, 0);
}
}
else
{
var combination = context.FemaleCombinations.FirstOrDefault(c => c.Top == componentVariation);
player.SetClothes(11, componentVariation, 0);
if (combination != null)
{
player.SetClothes(3, combination.Torso, 0);
player.SetClothes(8, combination.Undershirt, 0);
}
}
}
}
else
{
player.SetClothes(componentId, componentVariation, 0);
}
}
[RemoteEvent("saveCharacterCloth")]
public void SaveDutyCloth(Client client, string JSlotType, string JSlotId, string JClothId)
{
using (var context = new DatabaseContext())
{
int[] slotType = JsonConvert.DeserializeObject<int[]>(JSlotType);
int[] slotId = JsonConvert.DeserializeObject<int[]>(JSlotId);
int[] clothId = JsonConvert.DeserializeObject<int[]>(JClothId);
User user = client.GetUser();
user = context.Users.FirstOrDefault(u => u.Id == user.Id);
var charClothes = context.CharacterClothes.FirstOrDefault(c => c.UserId == user.Id);
if (charClothes == null)
{
for (var x = 0; x < slotType.Length; x++)
{
CharacterCloth newCloth = new CharacterCloth
{
UserId = user.Id,
Duty = true,
SlotType = (byte)slotType[x],
SlotId = slotId[x],
ClothId = clothId[x]
};
context.CharacterClothes.Add(newCloth);
}
if (user.GetCharacter().Gender == false)
{
CharacterCloth newTorso = new CharacterCloth
{
UserId = user.Id,
Duty = true,
SlotType = 0,
SlotId = 3,
ClothId = context.MaleCombinations.FirstOrDefault(c => c.Top == clothId[1]).Torso
};
CharacterCloth newUndershirt = new CharacterCloth
{
UserId = user.Id,
Duty = true,
SlotType = 0,
SlotId = 8,
ClothId = context.MaleCombinations.FirstOrDefault(c => c.Top == clothId[1]).Undershirt
};
context.CharacterClothes.Add(newTorso);
context.CharacterClothes.Add(newUndershirt);
}
else
{
CharacterCloth newTorso = new CharacterCloth
{
UserId = user.Id,
Duty = true,
SlotType = 0,
SlotId = 3,
ClothId = context.FemaleCombinations.FirstOrDefault(c => c.Top == clothId[1]).Torso
};
CharacterCloth newUndershirt = new CharacterCloth
{
UserId = user.Id,
Duty = true,
SlotType = 0,
SlotId = 8,
ClothId = context.FemaleCombinations.FirstOrDefault(c => c.Top == clothId[1]).Undershirt
};
context.CharacterClothes.Add(newTorso);
context.CharacterClothes.Add(newUndershirt);
}
}
else
{
for (var x = 0; x < slotType.Length; x++)
{
var loopCloth = context.CharacterClothes.FirstOrDefault(u => u.UserId == user.Id && u.SlotType == slotType[x] && u.SlotId == slotId[x]);
loopCloth.ClothId = clothId[x];
}
CharacterCloth torso = context.CharacterClothes.FirstOrDefault(u => u.UserId == user.Id && u.SlotType == 0 && u.SlotId == 3);
CharacterCloth undershirt = context.CharacterClothes.FirstOrDefault(u => u.UserId == user.Id && u.SlotType == 0 && u.SlotId == 8);
if (user.GetCharacter().Gender == false)
{
torso.ClothId = context.MaleCombinations.FirstOrDefault(c => c.Top == clothId[1]).Torso;
undershirt.ClothId = context.MaleCombinations.FirstOrDefault(c => c.Top == clothId[1]).Undershirt;
}
else
{
torso.ClothId = context.FemaleCombinations.FirstOrDefault(c => c.Top == clothId[1]).Torso;
undershirt.ClothId = context.FemaleCombinations.FirstOrDefault(c => c.Top == clothId[1]).Undershirt;
}
}
context.SaveChanges();
}
LoadCharacterDefaults(client);
}
[RemoteEvent("defaultCharacterCloth")]
public static void LoadCharacterDefaults(Client player)
{
User user = player.GetUser();
using (var context = new DatabaseContext())
{
List<CharacterCloth> charClothes = context.CharacterClothes.ToList().FindAll(c => c.UserId == user.Id && c.Duty == false);
foreach(var cloth in charClothes)
{
if(cloth.SlotType == 0)
{
if (cloth.ClothId == -1)
{
player.ClearAccessory(cloth.SlotId);
}
else
{
player.SetAccessories(cloth.SlotId, cloth.ClothId, 0);
}
}
else
{
player.SetClothes(cloth.SlotId, cloth.ClothId, 0);
}
}
}
}
}
}

View File

@@ -1,63 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GTANetworkAPI;
using reallife_gamemode.Model;
using reallife_gamemode.Server.Extensions;
namespace reallife_gamemode.Server.Events
{
public class UpdateCharacterComponent : Script
{
[RemoteEvent("updateDutyProp")]
public void UpdateDutyProp(Client player, int componentId, int componentVariation)
{
if(componentId != -1)
{
player.SetAccessories(componentId, componentVariation, 0);
}
else
{
player.ClearAccessory(0);
}
}
[RemoteEvent("updateDutyCloth")]
public void UpdateDutyCloth(Client player, int componentId, int componentVariation)
{
if(componentId == 11)
{
//TODO Spezielle Duty Kleidung in Datenbank einpflegen (Ergibt bei Cop-Kleidung NULL)
using (var context = new DatabaseContext())
{
if(player.GetUser().GetCharacter().Gender == false)
{
var combination = context.MaleCombinations.FirstOrDefault(c => c.Top == componentVariation);
player.SetClothes(11, componentVariation, 0);
if (combination != null)
{
player.SetClothes(3, combination.Torso, 0);
player.SetClothes(8, combination.Undershirt, 0);
}
}
else
{
var combination = context.FemaleCombinations.FirstOrDefault(c => c.Top == componentVariation);
player.SetClothes(11, componentVariation, 0);
if (combination != null)
{
player.SetClothes(3, combination.Torso, 0);
player.SetClothes(8, combination.Undershirt, 0);
}
}
}
}
else
{
player.SetClothes(componentId, componentVariation, 0);
}
}
}
}