inshallah kein fehler
This commit is contained in:
@@ -1,11 +1,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
|
||||
/**
|
||||
* @overview Life of German Reallife - Managers ATMManager (ATMManager.cs)
|
||||
@@ -59,6 +57,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
LoadATMs();
|
||||
}
|
||||
}
|
||||
|
||||
public static void LoadATMs()
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
@@ -73,14 +72,17 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void EnterATMRange(ColShape colShape, Player client)
|
||||
{
|
||||
client.SetData("nearATM", colShape.GetData<int>("id"));
|
||||
}
|
||||
|
||||
public static void ExitATMRange(ColShape colShape, Player client)
|
||||
{
|
||||
client.ResetData("nearATM");
|
||||
}
|
||||
|
||||
public static void ShowAtmUi(Player player, int atmId)
|
||||
{
|
||||
player.TriggerEvent("SERVER:ShowAtmUi", atmId);
|
||||
|
||||
@@ -1,15 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Server.Business;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using ReallifeGamemode.Database;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Database.Entities.Logs;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Entities.Logs;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
|
||||
/**
|
||||
* @overview Life of German Reallife - Managers BankManager (BankManager.cs)
|
||||
|
||||
@@ -1,22 +1,21 @@
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Server.Business;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Services;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using ReallifeGamemode.Database;
|
||||
using ReallifeGamemode.Server.Types;
|
||||
using GTANetworkAPI;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Business;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Services;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
class BusinessManager : Script
|
||||
internal class BusinessManager : Script
|
||||
{
|
||||
public static List<BusinessBase> Businesses { get; private set; }
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
@@ -11,9 +11,10 @@ namespace ReallifeGamemode.Server.Managers
|
||||
[RemoteEvent("creator_GenderChange")]
|
||||
public void changeGender(Player player, int gender)
|
||||
{
|
||||
if(gender == 0) player.SetSkin(PedHash.FreemodeMale01);
|
||||
if (gender == 0) player.SetSkin(PedHash.FreemodeMale01);
|
||||
else player.SetSkin(PedHash.FreemodeFemale01);
|
||||
}
|
||||
|
||||
[RemoteEvent("creatorSave")]
|
||||
public void CreatorSave(Player player, bool gender, string parentData, string featureData, string appearanceData, string hairAndColorData)
|
||||
{
|
||||
@@ -304,7 +305,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
player.SetHeadOverlay(11, blemishes);
|
||||
player.SetHeadOverlay(12, blemishes);
|
||||
|
||||
|
||||
//Gesicht (Vererbung durch Mutter / Vater)
|
||||
HeadBlend headBlend = new HeadBlend()
|
||||
{
|
||||
@@ -326,7 +326,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
|
||||
//Augenfarbe
|
||||
NAPI.Player.SetPlayerEyeColor(player, character.EyeColor);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,20 +1,15 @@
|
||||
using GTANetworkAPI;
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Services;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using ReallifeGamemode.Database;
|
||||
using ReallifeGamemode.Server.Types;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
class CityHallManager : Script
|
||||
internal class CityHallManager : Script
|
||||
{
|
||||
private static readonly Vector3 _cityHallPosition = new Vector3(273.22, -278.14, 53.9);
|
||||
|
||||
|
||||
@@ -2,11 +2,10 @@
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using ReallifeGamemode.Database;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Types;
|
||||
|
||||
/**
|
||||
* @overview Life of German Reallife - Managers BankManager (BankManager.cs)
|
||||
* @author VegaZ
|
||||
|
||||
@@ -1,21 +1,22 @@
|
||||
using GTANetworkAPI;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Job;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Services;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using ReallifeGamemode.Database;
|
||||
using ReallifeGamemode.Services;
|
||||
using ReallifeGamemode.Server.Types;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using ReallifeGamemode.Services;
|
||||
|
||||
using ReallifeGamemode.Server.Types;
|
||||
|
||||
using System.Buffers;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using ReallifeGamemode.Server.Events;
|
||||
using System;
|
||||
|
||||
/**
|
||||
* @overview Life of German Reallife - Managers Interaction (InteractionManager.cs)
|
||||
@@ -27,9 +28,8 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class InteractionManager : Script
|
||||
{
|
||||
#region Umgebungsinteraktionen PFEILTASTE-HOCH
|
||||
#endregion
|
||||
#region Eigeninteraktionen PFEILTASTE-RUNTER
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_AcceptInvite")]
|
||||
public void InteractionMenuAcceptInvite(Player player, string type)
|
||||
{
|
||||
@@ -75,12 +75,15 @@ namespace ReallifeGamemode.Server.Managers
|
||||
default:
|
||||
player.SetSharedData("blipColor", 0);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
player.SetSharedData("blipColor", 83);
|
||||
break;
|
||||
|
||||
case 7:
|
||||
player.SetSharedData("blipColor", 52);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
player.SetSharedData("blipColor", 5);
|
||||
break;
|
||||
@@ -121,6 +124,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_EndShow")]
|
||||
public void InteractionMenuEndShow(Player client)
|
||||
{
|
||||
@@ -165,7 +169,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
licenses.Add(playerUser.FlyingLicensePlane);
|
||||
licenses.Add(playerUser.WeaponLicense);
|
||||
target.TriggerEvent("ShowLicenses", player.Name, licenses.ToArray());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -310,7 +313,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
|
||||
target.GetUser(dbContext).Group = null;
|
||||
target.GetUser(dbContext).GroupRank = GroupRank.NONE;
|
||||
|
||||
@@ -451,8 +453,8 @@ namespace ReallifeGamemode.Server.Managers
|
||||
player.SendNotification("~r~Du kannst nur zwischen 1$ und 10000$ angeben!");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_LSPD_Points3")]
|
||||
public void InteractionMenu_LSPD_Points3(Player player, string jsonNameOrId, string jsoAmount, string jsonReason)
|
||||
{
|
||||
@@ -524,7 +526,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Du hast nun ~y~{target.GetUser().Points}/8 ~x~Strafpunkten.", true);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -532,6 +533,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_Ticket")]
|
||||
public void InteractionMenuTicket(Player target, string type, int ticket_amount)
|
||||
{
|
||||
@@ -572,7 +574,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
target.ResetData("ticket_boolean");
|
||||
target.ResetData("ticket_amount");
|
||||
target.ResetData("ticket_player");
|
||||
|
||||
}
|
||||
else if (type == "Abgelehnt")
|
||||
{
|
||||
@@ -583,8 +584,11 @@ namespace ReallifeGamemode.Server.Managers
|
||||
target.ResetData("ticket_player");
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#endregion Eigeninteraktionen PFEILTASTE-RUNTER
|
||||
|
||||
#region Spielerinteraktionen PFEILTASTE-LINKS
|
||||
|
||||
[RemoteEvent("openTradeInventory")]
|
||||
public void OpenTradeInventory(Player player, string targetPlayer)
|
||||
{
|
||||
@@ -643,8 +647,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
tradeRequester.TriggerEvent("unlockTradeItems");
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region Fraktionsinteraktionen / Jobinteraktionen PFEILTASTE-RECHTS
|
||||
#endregion
|
||||
|
||||
#endregion Spielerinteraktionen PFEILTASTE-LINKS
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
using GTANetworkAPI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Timers;
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Inventory;
|
||||
using ReallifeGamemode.Server.Inventory.Interfaces;
|
||||
using ReallifeGamemode.Server.Services;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using System;
|
||||
using System.Timers;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Services;
|
||||
using ReallifeGamemode.Server.Types;
|
||||
|
||||
@@ -31,6 +31,85 @@ namespace ReallifeGamemode.Server.Managers
|
||||
private static Dictionary<int, Timer> TradeTimer { get; set; } = new Dictionary<int, Timer>();
|
||||
private static Dictionary<int, int> TradeValue { get; set; } = new Dictionary<int, int>();
|
||||
|
||||
public static Dictionary<Player, List<InventoryItem>> backpackItems { get; set; } = new Dictionary<Player, List<InventoryItem>>();
|
||||
public static Dictionary<Player, List<InventoryItem>> vehicleItems { get; set; } = new Dictionary<Player, List<InventoryItem>>();
|
||||
|
||||
public class InventoryItem
|
||||
{
|
||||
public string Name;
|
||||
public int Amount;
|
||||
public int ItemId;
|
||||
public int Weight;
|
||||
public Vehicle vehicle;
|
||||
}
|
||||
|
||||
public static void SetBackpackItems(Player player)
|
||||
{
|
||||
List<UserItem> itemList = GetUserItems(player);
|
||||
if (itemList == null) return;
|
||||
|
||||
if (!backpackItems.ContainsKey(player))
|
||||
backpackItems.Add(player, new List<InventoryItem>());
|
||||
|
||||
backpackItems[player] = new List<InventoryItem>();
|
||||
|
||||
foreach (var i in itemList)
|
||||
{
|
||||
var newItem = new InventoryItem()
|
||||
{
|
||||
Name = GetItemById(i.ItemId).Name,
|
||||
Amount = i.Amount,
|
||||
ItemId = i.ItemId,
|
||||
Weight = GetUserInventoryWeight(player),
|
||||
};
|
||||
backpackItems[player].Add(newItem);
|
||||
}
|
||||
|
||||
player.SetSharedData("backpackItems", JsonConvert.SerializeObject(backpackItems[player].ToArray()));
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:getVehicleInventory")]
|
||||
public static void SetVehicleItems(Player player)
|
||||
{
|
||||
if (player.IsInVehicle)
|
||||
{
|
||||
player.TriggerEvent("Error", "Du kannst dein Kofferraum nicht betätigen.");
|
||||
}
|
||||
Vehicle veh = NAPI.Pools.GetAllVehicles().ToList().Where(v => v.Position.DistanceTo(player.Position) <= 2).FirstOrDefault();
|
||||
if (veh == null)
|
||||
{
|
||||
player.TriggerEvent("Error", "Kein Fahrzeug in der Nähe !");
|
||||
return;
|
||||
}
|
||||
List<VehicleItem> itemList = GetVehicleItems(veh);
|
||||
|
||||
if (itemList == null)
|
||||
{
|
||||
player.TriggerEvent("Error", "Kofferraum ist leer !");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!vehicleItems.ContainsKey(player))
|
||||
vehicleItems.Add(player, new List<InventoryItem>());
|
||||
//VehicleStreaming.SetDoorState(veh, DoorID.DoorTrunk, DoorState.DoorOpen);
|
||||
|
||||
vehicleItems[player] = new List<InventoryItem>();
|
||||
|
||||
foreach (var i in itemList)
|
||||
{
|
||||
var newItem = new InventoryItem
|
||||
{
|
||||
Name = GetItemById(i.ItemId).Name,
|
||||
Amount = i.Amount,
|
||||
ItemId = i.ItemId,
|
||||
Weight = GetVehicleInventoryWeight(veh),
|
||||
vehicle = veh,
|
||||
};
|
||||
vehicleItems[player].Add(newItem);
|
||||
}
|
||||
|
||||
player.SetSharedData("vehicleItems", JsonConvert.SerializeObject(vehicleItems[player].ToArray()));
|
||||
}
|
||||
|
||||
public static void LoadItems()
|
||||
{
|
||||
@@ -79,43 +158,48 @@ namespace ReallifeGamemode.Server.Managers
|
||||
dbContext.Remove(userItem);
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
Player player = user.Player;
|
||||
|
||||
List<UserItem> itemList = GetUserItems(player);
|
||||
if (itemList == null) return;
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
public static void GetUserItems(Player player)
|
||||
public static void RemoveVehicleItem(ServerVehicle sVeh, VehicleItem item, int amount, Player player)
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
var vehicleItem = dbContext.VehicleItems.FirstOrDefault(i => i.Id == item.Id);
|
||||
|
||||
vehicleItem.Amount -= amount;
|
||||
|
||||
dbContext.SaveChanges();
|
||||
|
||||
if (vehicleItem.Amount == 0)
|
||||
{
|
||||
dbContext.Remove(vehicleItem);
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
Vehicle vehicle = sVeh.GetVehicle();
|
||||
List<VehicleItem> itemList = GetVehicleItems(vehicle);
|
||||
if (itemList == null) return;
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
public static List<VehicleItem> GetVehicleItems(Vehicle vehicle)
|
||||
{
|
||||
return new DatabaseContext().VehicleItems.ToList().FindAll(i => i.GetVehicle().GetVehicle() == vehicle);
|
||||
}
|
||||
|
||||
public static List<UserItem> GetUserItems(Player player)
|
||||
{
|
||||
var user = player.GetUser();
|
||||
var inventoryWeight = 0;
|
||||
List<string> iName = new List<string>();
|
||||
List<int> iAmount = new List<int>();
|
||||
List<int> iId = new List<int>();
|
||||
List<int> iWeight = new List<int>();
|
||||
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
List<UserItem> userItems = context.UserItems.ToList().FindAll(i => i.UserId == user.Id);
|
||||
|
||||
|
||||
foreach (var item in userItems)
|
||||
{
|
||||
IItem iItem = GetItemById(item.ItemId);
|
||||
var currentItemWeight = iItem.Gewicht * item.Amount;
|
||||
inventoryWeight += currentItemWeight;
|
||||
|
||||
iName.Add(iItem.Name);
|
||||
iAmount.Add(item.Amount);
|
||||
iId.Add(iItem.Id);
|
||||
|
||||
}
|
||||
List<Player> targetList = NAPI.Player.GetPlayersInRadiusOfPlayer(2, player);
|
||||
List<string> username = new List<string>();
|
||||
foreach (var target in targetList)
|
||||
{
|
||||
User cl = target.GetUser();
|
||||
username.Add(cl.Name);
|
||||
}
|
||||
|
||||
player.TriggerEvent("inventoryShow", inventoryWeight, iName.ToArray(), iAmount.ToArray(), iId.ToArray(), username.ToArray());
|
||||
return context.UserItems.ToList().FindAll(i => i.UserId == user.Id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -138,7 +222,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
return inventoryWeight;
|
||||
}
|
||||
|
||||
|
||||
public static int GetVehicleInventoryWeight(Vehicle veh)
|
||||
{
|
||||
var inventoryWeight = 0;
|
||||
@@ -194,318 +277,170 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
|
||||
public bool CheckOriginOfItem(Player client, string jsonItemID, string jsonItemAmount, string jsonOrigin, string jsonVehAmount)
|
||||
{
|
||||
var origin = JsonConvert.DeserializeObject<int[]>(jsonOrigin);
|
||||
var itemID = JsonConvert.DeserializeObject<int>(jsonItemID);
|
||||
var itemAmount = JsonConvert.DeserializeObject<int>(jsonItemAmount);
|
||||
var vehAmount = JsonConvert.DeserializeObject<int>(jsonVehAmount);
|
||||
var user = client.GetUser();
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
if (origin.Length < 1)
|
||||
return false;
|
||||
|
||||
|
||||
if (origin[0] == 1)
|
||||
{
|
||||
foreach (Vehicle veh in NAPI.Pools.GetAllVehicles())
|
||||
{
|
||||
if (veh.Position.DistanceTo(client.Position) < 5f)
|
||||
{
|
||||
if (VehicleStreaming.GetDoorState(veh, DoorID.DoorTrunk) == DoorState.DoorOpen || VehicleStreaming.GetDoorState(veh, DoorID.DoorRearLeft) == DoorState.DoorOpen || VehicleStreaming.GetDoorState(veh, DoorID.DoorRearRight) == DoorState.DoorOpen)
|
||||
{
|
||||
|
||||
UserItem vItem = new UserItem
|
||||
{
|
||||
Amount = vehAmount,
|
||||
ItemId = itemID,
|
||||
UserId = user.Id,
|
||||
Slot = -1
|
||||
};
|
||||
|
||||
ServerVehicle serverVehicle = VehicleManager.GetServerVehicleFromVehicle(veh, context);
|
||||
VehicleItem vehItem = context.VehicleItems.Where(v => v.VehicleId == origin[1] && v.ItemId == vItem.ItemId).FirstOrDefault();
|
||||
if (vehItem != null)
|
||||
{
|
||||
IItem iItem = GetItemById(vItem.ItemId);
|
||||
|
||||
if (GetUserInventoryWeight(client) + (iItem.Gewicht * vItem.Amount) > 40000)
|
||||
{
|
||||
for (int i = 0; i <= vItem.Amount; i++)
|
||||
{
|
||||
if (GetUserInventoryWeight(client) + (iItem.Gewicht * i) > 40000)
|
||||
{
|
||||
vItem.Amount = i - 1;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (vItem.Amount == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (itemAmount < vehItem.Amount)
|
||||
{
|
||||
UserItem uItem = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == vItem.ItemId).FirstOrDefault();
|
||||
if (uItem == null)
|
||||
{
|
||||
context.Add(vItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
uItem.Amount += vItem.Amount;
|
||||
}
|
||||
context.SaveChanges();
|
||||
return true;
|
||||
}
|
||||
else if (itemAmount == vehItem.Amount)
|
||||
{
|
||||
UserItem uItem = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == vItem.ItemId).FirstOrDefault();
|
||||
if (uItem == null)
|
||||
{
|
||||
context.Add(vItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
uItem.Amount += vItem.Amount;
|
||||
}
|
||||
context.SaveChanges();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (origin[0] == 0)
|
||||
{
|
||||
|
||||
VehicleItem cItem = new VehicleItem
|
||||
{
|
||||
Amount = vehAmount,
|
||||
ItemId = itemID,
|
||||
VehicleId = origin[1],
|
||||
Slot = -1,
|
||||
};
|
||||
|
||||
UserItem uItem = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == cItem.ItemId).FirstOrDefault();
|
||||
IItem iItem = GetItemById(cItem.ItemId);
|
||||
Vehicle veh = VehicleManager.GetVehicleFromId(cItem.VehicleId);
|
||||
if (GetVehicleInventoryWeight(veh) + (iItem.Gewicht * cItem.Amount) > 250000)
|
||||
{
|
||||
for (int i = 0; i <= cItem.Amount; i++)
|
||||
{
|
||||
if (GetVehicleInventoryWeight(veh) + (iItem.Gewicht * i) > 250000)
|
||||
{
|
||||
cItem.Amount = i - 1;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (cItem.Amount == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (iItem is IWeaponDealItem weaponDealItem)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (uItem != null)
|
||||
{
|
||||
if (vehAmount < uItem.Amount)
|
||||
{
|
||||
|
||||
VehicleItem vehItem = context.VehicleItems.Where(v => v.VehicleId == cItem.VehicleId && v.ItemId == cItem.ItemId).FirstOrDefault();
|
||||
if (vehItem == null)
|
||||
{
|
||||
context.Add(cItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
vehItem.Amount += cItem.Amount;
|
||||
}
|
||||
context.SaveChanges();
|
||||
return true;
|
||||
|
||||
|
||||
}
|
||||
else if (vehAmount == uItem.Amount)
|
||||
{
|
||||
VehicleItem vehItem = context.VehicleItems.Where(v => v.VehicleId == cItem.VehicleId && v.ItemId == cItem.ItemId).FirstOrDefault();
|
||||
if (vehItem == null)
|
||||
{
|
||||
context.Add(cItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
vehItem.Amount += cItem.Amount;
|
||||
}
|
||||
context.SaveChanges();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("saveVehicleInventory")]
|
||||
public void SaveVehicleInventory(Player player, string jsonItemID, string jsonItemAmount, string jsonGotFrom, string vehAmount)
|
||||
[RemoteEvent("transferToBackpack")]
|
||||
public void TransferToBackpack(Player player, string jsonItemID, string jsonItemAmount)
|
||||
{
|
||||
var itemID = JsonConvert.DeserializeObject<int>(jsonItemID);
|
||||
var itemAmount = JsonConvert.DeserializeObject<int>(jsonItemAmount);
|
||||
var origin = JsonConvert.DeserializeObject<int[]>(jsonGotFrom);
|
||||
|
||||
if (!CheckOriginOfItem(player, jsonItemID, jsonItemAmount, jsonGotFrom, vehAmount))
|
||||
return;
|
||||
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
if (!vehicleItems.ContainsKey(player))
|
||||
vehicleItems.Add(player, new List<InventoryItem>());
|
||||
Vehicle veh = null;
|
||||
if (vehicleItems[player].Count != 0)
|
||||
veh = vehicleItems[player].FirstOrDefault().vehicle;
|
||||
|
||||
VehicleItem vItem = new VehicleItem
|
||||
{
|
||||
Amount = itemAmount,
|
||||
ItemId = itemID,
|
||||
VehicleId = origin[1],
|
||||
Slot = -1
|
||||
};
|
||||
ServerVehicle serverVehicle = VehicleManager.GetServerVehicleFromVehicle(veh, context);
|
||||
|
||||
VehicleItem vehItem = context.VehicleItems.Where(v => v.VehicleId == vItem.VehicleId && v.ItemId == vItem.ItemId).FirstOrDefault();
|
||||
VehicleItem vehItem = context.VehicleItems.Where(v => v.VehicleId == serverVehicle.Id && v.ItemId == itemID).FirstOrDefault();
|
||||
if (vehItem == null)
|
||||
{
|
||||
context.VehicleItems.Add(vItem);
|
||||
}
|
||||
else if (vItem.Amount <= 0)
|
||||
{
|
||||
context.VehicleItems.Remove(vehItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
vehItem.Amount = vItem.Amount;
|
||||
player.TriggerEvent("Error", "Transfer nicht möglich.");
|
||||
return;
|
||||
}
|
||||
|
||||
RemoveVehicleItem(serverVehicle, vehItem, itemAmount, player);
|
||||
SetVehicleItems(player);
|
||||
|
||||
AddItemToInventory(player, itemID, itemAmount);
|
||||
|
||||
SetBackpackItems(player);
|
||||
context.SaveChanges();
|
||||
IItem iItem = GetItemById(vItem.ItemId);
|
||||
player.TriggerEvent("aproveTransfer", JsonConvert.DeserializeObject<int>(vehAmount), iItem.Name, "Rucksack");
|
||||
IItem iItem = GetItemById(vehItem.ItemId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[RemoteEvent("saveInventory")]
|
||||
public void SavePlayerInventory(Player player, string jsonItemID, string jsonItemAmount, string jsonGotFrom, string vehAmount)
|
||||
[RemoteEvent("transferToVehicle")]
|
||||
public void TransferToVehicle(Player player, string jsonItemID, string jsonItemAmount)
|
||||
{
|
||||
|
||||
var user = player.GetUser();
|
||||
var itemID = JsonConvert.DeserializeObject<int>(jsonItemID);
|
||||
var itemAmount = JsonConvert.DeserializeObject<int>(jsonItemAmount);
|
||||
var origin = JsonConvert.DeserializeObject<int[]>(jsonGotFrom);
|
||||
|
||||
if (!CheckOriginOfItem(player, jsonItemID, jsonItemAmount, jsonGotFrom, vehAmount))
|
||||
return;
|
||||
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemID && u.Amount <= itemAmount).FirstOrDefault();
|
||||
|
||||
UserItem cItem = new UserItem
|
||||
{
|
||||
Amount = itemAmount,
|
||||
ItemId = itemID,
|
||||
UserId = user.Id,
|
||||
Slot = -1,
|
||||
};
|
||||
|
||||
|
||||
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == cItem.ItemId).FirstOrDefault();
|
||||
if (item == null)
|
||||
{
|
||||
context.UserItems.Add(cItem);
|
||||
}
|
||||
else if (cItem.Amount <= 0)
|
||||
{
|
||||
context.UserItems.Remove(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
item.Amount = cItem.Amount;
|
||||
player.TriggerEvent("Error", "Transfer nicht möglich.");
|
||||
return;
|
||||
}
|
||||
|
||||
RemoveUserItem(user, item, itemAmount);
|
||||
|
||||
if (!vehicleItems.ContainsKey(player))
|
||||
{
|
||||
player.TriggerEvent("Error", "Transfer nicht möglich.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!vehicleItems.ContainsKey(player))
|
||||
vehicleItems.Add(player, new List<InventoryItem>());
|
||||
Vehicle veh = null;
|
||||
if (vehicleItems[player].Count != 0)
|
||||
veh = vehicleItems[player].FirstOrDefault().vehicle;
|
||||
|
||||
if (veh == null)
|
||||
{
|
||||
player.TriggerEvent("Error", "Transfer nicht möglich.");
|
||||
return;
|
||||
}
|
||||
|
||||
AddItemToVehicleInventory(veh, itemID, itemAmount);
|
||||
SetVehicleItems(player);
|
||||
VehicleItem vehicleItem = context.VehicleItems.Where(f => f.ItemId == itemID && f.Vehicle == VehicleManager.GetServerVehicleFromVehicle(veh, context)).FirstOrDefault();
|
||||
context.SaveChanges();
|
||||
IItem iItem = GetItemById(item.ItemId);
|
||||
player.TriggerEvent("aproveTransfer", JsonConvert.DeserializeObject<int>(vehAmount), iItem.Name, "Kofferraum");
|
||||
IItem iItem = GetItemById(itemID);
|
||||
player.TriggerEvent("aproveTransfer", vehicleItem.Amount, iItem.Name, "Kofferraum");
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddItemToInventory(Player player, UserItem item)
|
||||
public static void AddItemToInventory(Player player, int itemId, int amount)
|
||||
{
|
||||
var user = player.GetUser();
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
UserItem existingItem = context.UserItems.FirstOrDefault(i => i.ItemId == item.ItemId && i.UserId == item.UserId);
|
||||
int setAmount = 0;
|
||||
for (int i = 1; i <= amount; i++)
|
||||
{
|
||||
if (GetUserInventoryWeight(player) + (i * GetItemById(itemId).Gewicht) > 40000)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
setAmount = i;
|
||||
}
|
||||
}
|
||||
|
||||
if (setAmount == 0)
|
||||
{
|
||||
player.TriggerEvent("Error", "Du kannst nicht so viel tragen.");
|
||||
return;
|
||||
}
|
||||
|
||||
UserItem existingItem = context.UserItems.FirstOrDefault(i => i.ItemId == itemId && i.UserId == user.Id);
|
||||
if (existingItem != null)
|
||||
{
|
||||
existingItem.Amount += item.Amount;
|
||||
existingItem.Amount += setAmount;
|
||||
}
|
||||
else
|
||||
{
|
||||
List<UserItem> allItemsByUser = context.UserItems.ToList().FindAll(i => i.UserId == user.Id);
|
||||
var slotArr = Enumerable.Range(1, 20).ToList();
|
||||
allItemsByUser.ForEach(allItem =>
|
||||
var newItem = new UserItem()
|
||||
{
|
||||
if (slotArr.Contains(allItem.Slot)) slotArr.Remove(allItem.Slot);
|
||||
});
|
||||
|
||||
int newSlot = slotArr.Min();
|
||||
|
||||
item.Slot = newSlot;
|
||||
context.UserItems.Add(item);
|
||||
|
||||
IItem iItem = GetItemById(item.ItemId);
|
||||
|
||||
string[] newItem = new string[] { iItem.Name, iItem.Description, iItem.Gewicht.ToString(), item.Amount.ToString(), newSlot.ToString(), item.Id.ToString() };
|
||||
|
||||
player.TriggerEvent("addItem", JsonConvert.SerializeObject(newItem));
|
||||
ItemId = itemId,
|
||||
Amount = setAmount,
|
||||
Slot = -1,
|
||||
UserId = user.Id,
|
||||
};
|
||||
context.UserItems.Add(newItem);
|
||||
}
|
||||
context.SaveChanges();
|
||||
IItem iItem = GetItemById(itemId);
|
||||
player.TriggerEvent("aproveTransfer", setAmount, iItem.Name, "Rucksack");
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddItemToVehicleInventory(Player player, VehicleItem item, Vehicle veh)
|
||||
public static void AddItemToVehicleInventory(Vehicle veh, int itemId, int amount)
|
||||
{
|
||||
var user = player.GetUser();
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
int setAmount = 0;
|
||||
for (int i = 1; i <= amount; i++)
|
||||
{
|
||||
if (GetVehicleInventoryWeight(veh) + (i * GetItemById(itemId).Gewicht) > 200000)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
setAmount = i;
|
||||
}
|
||||
}
|
||||
|
||||
if (setAmount == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(veh);
|
||||
VehicleItem existingItem = context.VehicleItems.FirstOrDefault(i => i.ItemId == item.ItemId && i.VehicleId == sVeh.Id);
|
||||
VehicleItem existingItem = context.VehicleItems.FirstOrDefault(i => i.ItemId == itemId && i.VehicleId == sVeh.Id);
|
||||
if (existingItem != null)
|
||||
{
|
||||
existingItem.Amount += item.Amount;
|
||||
existingItem.Amount += amount;
|
||||
}
|
||||
else
|
||||
{
|
||||
List<VehicleItem> allItemsByVehicle = context.VehicleItems.ToList().FindAll(i => i.VehicleId == sVeh.Id);
|
||||
var slotArr = Enumerable.Range(1, 20).ToList();
|
||||
allItemsByVehicle.ForEach(allItem =>
|
||||
var newVehItem = new VehicleItem()
|
||||
{
|
||||
if (slotArr.Contains(allItem.Slot)) slotArr.Remove(allItem.Slot);
|
||||
});
|
||||
|
||||
int newSlot = slotArr.Min();
|
||||
|
||||
item.Slot = newSlot;
|
||||
context.VehicleItems.Add(item);
|
||||
|
||||
IItem iItem = GetItemById(item.ItemId);
|
||||
|
||||
string[] newItem = new string[] { iItem.Name, iItem.Description, iItem.Gewicht.ToString(), item.Amount.ToString(), newSlot.ToString(), item.Id.ToString() };
|
||||
ItemId = itemId,
|
||||
Amount = amount,
|
||||
Slot = -1,
|
||||
VehicleId = sVeh.Id,
|
||||
};
|
||||
context.VehicleItems.Add(newVehItem);
|
||||
}
|
||||
context.SaveChanges();
|
||||
}
|
||||
@@ -579,11 +514,13 @@ namespace ReallifeGamemode.Server.Managers
|
||||
if (iItem is IUsableItem usableItemObj)
|
||||
{
|
||||
usableItemObj.Use(fItem);
|
||||
player.TriggerEvent("removeItem", itemId, 1);
|
||||
List<InventoryItem> items = backpackItems[player];
|
||||
player.SetSharedData("backpackItems", JsonConvert.SerializeObject(items.ToArray()));
|
||||
player.TriggerEvent("aproveUse", 1, iItem.Name);
|
||||
}
|
||||
else player.TriggerEvent("Error", "Du kannst dieses Item nicht benutzen.");
|
||||
break;
|
||||
|
||||
case "drop":
|
||||
|
||||
if (iItem == null)
|
||||
@@ -604,18 +541,19 @@ namespace ReallifeGamemode.Server.Managers
|
||||
//new Vector3(player.Position.X, player.Position.Y, player.Position.Z - 0.8f);
|
||||
Random r = new Random();
|
||||
GTANetworkAPI.Object grndObject;
|
||||
Vector3 textPos = dropPosition;
|
||||
if (iItem is IWeaponDealItem obj)
|
||||
{
|
||||
dropPosition.Z -= 1.05f;
|
||||
grndObject = NAPI.Object.CreateObject(3666746839, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 0);
|
||||
grndObject = NAPI.Object.CreateObject(3666746839, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 255, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
dropPosition.Z -= 0.8f;
|
||||
grndObject = NAPI.Object.CreateObject(3777723516, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 0);
|
||||
grndObject = NAPI.Object.CreateObject(3777723516, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 255, 0);
|
||||
}
|
||||
GroundItem grndItem = new GroundItem { ItemId = iItem.Id, Amount = amount, Position = dropPosition };
|
||||
TextLabel grndTxtLbl = NAPI.TextLabel.CreateTextLabel(iItem.Name + " ~s~(~y~" + amount + "~s~)", dropPosition, 5, 0.5f, 4, new Color(255, 255, 255), false, 0);
|
||||
TextLabel grndTxtLbl = NAPI.TextLabel.CreateTextLabel(iItem.Name + " ~s~(~y~" + amount + "~s~)", textPos, 5, 0.5f, 4, new Color(255, 255, 255), false, 0);
|
||||
GroundItem.AddGroundItem(grndItem, grndObject, grndTxtLbl);
|
||||
if (fItem.Amount > amount)
|
||||
{
|
||||
@@ -625,7 +563,8 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
context.UserItems.Remove(fItem);
|
||||
}
|
||||
player.TriggerEvent("removeItem", itemId, amount);
|
||||
context.SaveChanges();
|
||||
SetBackpackItems(player);
|
||||
player.TriggerEvent("aproveThrow", amount, iItem.Name);
|
||||
}
|
||||
break;
|
||||
@@ -634,234 +573,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[RemoteEvent("tradeItem")]
|
||||
public void ServerEvent_tradeItem(Player client, int value, string jsonNameOrId, string itemIdArrStr, string itemAmountArrStr)
|
||||
{
|
||||
User user = client.GetUser();
|
||||
string nameOrId = JsonConvert.DeserializeObject<string>(jsonNameOrId);
|
||||
Player target = PlayerService.GetPlayerByNameOrId(nameOrId);
|
||||
if (target == null || !target.IsLoggedIn() || target == client)
|
||||
{
|
||||
ChatService.PlayerNotFound(client);
|
||||
return;
|
||||
}
|
||||
if (client.Position.DistanceTo(target.Position) >= 5)
|
||||
{
|
||||
ChatService.ErrorMessage(client, "Spieler ist zu weit entfernt.");
|
||||
return;
|
||||
}
|
||||
int[] itemIdArr = JsonConvert.DeserializeObject<int[]>(itemIdArrStr);
|
||||
int[] itemAmountArr = JsonConvert.DeserializeObject<int[]>(itemAmountArrStr);
|
||||
List<string> itemNameList = new List<string>();
|
||||
|
||||
|
||||
if (target.HasData("inTrade") && target.GetData<bool>("inTrade") == true)
|
||||
{
|
||||
ChatService.SendMessage(client, $"~r~[FEHLER] ~w~{target.Name} befindet sich bereits in einem Handel.");
|
||||
return;
|
||||
}
|
||||
int inventoryWeight = 0;
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
int targetInvWeight = GetUserInventoryWeight(target);
|
||||
|
||||
for (int i = 0; i < itemIdArr.Length; i++)
|
||||
{
|
||||
int itemId = itemIdArr[i];
|
||||
int itemAmount = itemAmountArr[i];
|
||||
UserItem uitem = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemId).FirstOrDefault();
|
||||
IItem iItem = GetItemById(uitem.ItemId);
|
||||
var currentItemWeight = iItem.Gewicht * itemAmount;
|
||||
inventoryWeight += currentItemWeight;
|
||||
}
|
||||
if (((targetInvWeight + inventoryWeight) / 1000) > 40)
|
||||
{
|
||||
ChatService.ErrorMessage(client, "Handel kann nicht getätigt werden.");
|
||||
return;
|
||||
}
|
||||
|
||||
for (int x = 0; x < itemIdArr.Length; x++)
|
||||
{
|
||||
int itemId = itemIdArr[x];
|
||||
int itemAmount = itemAmountArr[x];
|
||||
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemId).FirstOrDefault();
|
||||
if (item.Amount - itemAmount > 0)
|
||||
{
|
||||
item.Amount -= itemAmount;
|
||||
}
|
||||
else
|
||||
{
|
||||
context.UserItems.Remove(item);
|
||||
}
|
||||
IItem iItem = GetItemById(itemId);
|
||||
itemNameList.Add(iItem.Name);
|
||||
context.SaveChanges();
|
||||
}
|
||||
}
|
||||
ChatService.SendMessage(client, $"~b~Du hast eine Handelsanfrage an {target.Name} gesendet.");
|
||||
TradeItems[user.Id] = (itemIdArr, itemAmountArr);
|
||||
TradeValue[user.Id] = value;
|
||||
target.SetData("tradePartner", user.Id);
|
||||
target.SetData("trade", client.Name);
|
||||
SendTradeOffer(target, client);
|
||||
target.TriggerEvent("addTradeItems", itemIdArr, itemAmountArr, itemNameList.ToArray(), inventoryWeight);
|
||||
}
|
||||
|
||||
public void SendTradeOffer(Player client, Player sender)
|
||||
{
|
||||
client.SetData("inTrade", true);
|
||||
sender.SetData("inTrade", true);
|
||||
ChatService.SendMessage(client, $"~b~ Du hast eine Handelsanfrage von {sender.Name} bekommen.");
|
||||
client.SetSharedData("tradeOffer", JsonConvert.SerializeObject(1));
|
||||
User user = sender.GetUser();
|
||||
Timer tradeTimer = new Timer(30000);
|
||||
TradeTimer[user.Id] = tradeTimer;
|
||||
tradeTimer.Start();
|
||||
tradeTimer.Elapsed += (s, e) => { SendBackToSender(sender); client.SetData("inTrade", false); sender.SetData("inTrade", false); client.SetSharedData("tradeOffer", JsonConvert.SerializeObject(0)); };
|
||||
}
|
||||
|
||||
public void SendBackToSender(Player client)
|
||||
{
|
||||
User user = client.GetUser();
|
||||
ChatService.SendMessage(client, "Dein Handelspartner hat die Anfrage nicht angenommen.");
|
||||
(int[] itemIdArr, int[] itemAmountArr) = TradeItems[user.Id];
|
||||
Timer timer = TradeTimer[user.Id];
|
||||
timer.Stop();
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
for (int x = 0; x < itemIdArr.Length; x++)
|
||||
{
|
||||
int itemId = itemIdArr[x];
|
||||
int itemAmount = itemAmountArr[x];
|
||||
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemId).FirstOrDefault();
|
||||
if (item != null)
|
||||
{
|
||||
item.Amount += itemAmount;
|
||||
}
|
||||
else
|
||||
{
|
||||
var newItem = new UserItem
|
||||
{
|
||||
ItemId = itemId,
|
||||
UserId = user.Id,
|
||||
Amount = itemAmount,
|
||||
Slot = -1
|
||||
};
|
||||
|
||||
context.UserItems.Add(newItem);
|
||||
}
|
||||
context.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("declineTrade")]
|
||||
public void ServerEvent_declineTrade(Player client)
|
||||
{
|
||||
client.SetSharedData("tradeOffer", JsonConvert.SerializeObject(0));
|
||||
if (!client.GetData<bool>("inTrade"))
|
||||
{
|
||||
ChatService.ErrorMessage(client, "Das Handelsangebot ist abgelaufen.");
|
||||
return;
|
||||
}
|
||||
string name = client.GetData<string>("trade");
|
||||
Player target = PlayerService.GetPlayerByNameOrId(name);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(client);
|
||||
return;
|
||||
}
|
||||
|
||||
client.SetData("inTrade", false);
|
||||
target.SetData("inTrade", false);
|
||||
SendBackToSender(target);
|
||||
}
|
||||
|
||||
public static void OpenTradeAccept(Player client)
|
||||
{
|
||||
User user = client.GetUser();
|
||||
int id = client.GetData<int>("tradePartner");
|
||||
(int[] itemIdArr, int[] itemAmountArr) = TradeItems[id];
|
||||
Timer tradeTimer = TradeTimer[id];
|
||||
tradeTimer.Stop();
|
||||
tradeTimer.Start();
|
||||
client.TriggerEvent("openTradeWindow", TradeValue[id], itemIdArr, itemAmountArr);
|
||||
}
|
||||
|
||||
[RemoteEvent("acceptTrade")]
|
||||
public void ServerEvent_AcceptTrade(Player client)
|
||||
{
|
||||
if (!client.GetData<bool>("inTrade"))
|
||||
{
|
||||
ChatService.ErrorMessage(client, "Das Handelsangebot ist abgelaufen.");
|
||||
return;
|
||||
}
|
||||
client.SetSharedData("tradeOffer", JsonConvert.SerializeObject(0));
|
||||
client.SetData("inTrade", false);
|
||||
|
||||
User user = client.GetUser();
|
||||
int id = client.GetData<int>("tradePartner");
|
||||
(int[] itemIdArr, int[] itemAmountArr) = TradeItems[id];
|
||||
Timer tradeTimer = TradeTimer[id];
|
||||
tradeTimer.Stop();
|
||||
string name = client.GetData<string>("trade");
|
||||
Player target = PlayerService.GetPlayerByNameOrId(name);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(client);
|
||||
return;
|
||||
}
|
||||
target.SetData("inTrade", false);
|
||||
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
|
||||
int targetInvWeight = GetUserInventoryWeight(client);
|
||||
int inventoryWeight = 0;
|
||||
for (int i = 0; i < itemIdArr.Length; i++)
|
||||
{
|
||||
int itemId = itemIdArr[i];
|
||||
int itemAmount = itemAmountArr[i];
|
||||
UserItem uitem = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemId).FirstOrDefault();
|
||||
IItem iItem = GetItemById(uitem.ItemId);
|
||||
var currentItemWeight = iItem.Gewicht * itemAmount;
|
||||
inventoryWeight += currentItemWeight;
|
||||
}
|
||||
if (((targetInvWeight + inventoryWeight) / 1000) > 40)
|
||||
{
|
||||
ChatService.ErrorMessage(client, "Handel kann nicht getätigt werden.");
|
||||
return;
|
||||
}
|
||||
|
||||
for (int x = 0; x < itemIdArr.Length; x++)
|
||||
{
|
||||
int itemId = itemIdArr[x];
|
||||
int itemAmount = itemAmountArr[x];
|
||||
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemId).FirstOrDefault();
|
||||
if (item != null)
|
||||
{
|
||||
item.Amount += itemAmount;
|
||||
}
|
||||
else
|
||||
{
|
||||
var newItem = new UserItem
|
||||
{
|
||||
ItemId = itemId,
|
||||
UserId = user.Id,
|
||||
Amount = itemAmount,
|
||||
Slot = -1
|
||||
};
|
||||
|
||||
context.UserItems.Add(newItem);
|
||||
}
|
||||
context.SaveChanges();
|
||||
}
|
||||
}
|
||||
ChatService.SendMessage(target, $"{client.Name} hat deine Anfrage angenommen.");
|
||||
|
||||
}
|
||||
|
||||
[RemoteEvent("SERVER:BuyItems")]
|
||||
public void SrvEvent_BuyItem(Player client, string itemName)
|
||||
{
|
||||
@@ -897,7 +608,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
dbContext.SaveChanges();
|
||||
client.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
using GTANetworkAPI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
@@ -147,7 +151,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
//JobPoint nearJobPoint = PositionManager.JobPoints.Find(p => p.Position.DistanceTo(player.Position) <= 2);
|
||||
if (u.JobId == 2 || u.JobId == 3 || u.JobId == 4)
|
||||
@@ -531,7 +534,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[RemoteEvent("CLIENT:JobManager_TaxiJob_AcceptCall")]
|
||||
public void TaxiJobAcceptCall(Player player, string name)
|
||||
{
|
||||
|
||||
@@ -14,7 +14,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class LoadManager : Script
|
||||
{
|
||||
|
||||
[ServerEvent(Event.ResourceStart)]
|
||||
public void OnResourceStart()
|
||||
{
|
||||
|
||||
96
ReallifeGamemode.Server/Managers/PedManager.cs
Normal file
96
ReallifeGamemode.Server/Managers/PedManager.cs
Normal file
@@ -0,0 +1,96 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database.Entities.Saves;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class PedManager : Script
|
||||
{
|
||||
private List<PedData> pedDatas = new List<PedData>();
|
||||
public static List<SavedPed> serverPeds = new List<SavedPed>();
|
||||
private static Dictionary<Player, List<PedData>> dataDict = new Dictionary<Player, List<PedData>>();
|
||||
private void GetPedsFromDatabase()
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
serverPeds = dbContext.Peds.Where(x => x.HashModel != null).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
private List<PedData> FindDataThroughPlayer(Player player)
|
||||
{
|
||||
if (!dataDict.ContainsKey(player)) return null;
|
||||
return dataDict[player];
|
||||
}
|
||||
|
||||
[ServerEvent(Event.PlayerConnected)]
|
||||
public void LoadServerPedForPlayer(Player player)
|
||||
{
|
||||
if (serverPeds.Count == 0)
|
||||
GetPedsFromDatabase();
|
||||
List<Vector3> vector3s = new List<Vector3>();
|
||||
List<float> headings = new List<float>();
|
||||
List<string> hashes = new List<string>();
|
||||
List<int> dimensions = new List<int>();
|
||||
pedDatas = new List<PedData>();
|
||||
foreach (var s in serverPeds)
|
||||
{
|
||||
if (!s.Active) continue;
|
||||
Vector3 vector3 = new Vector3(s.PositionX, s.PositionY, s.PositionZ);
|
||||
pedDatas.Add(new PedData(player, (DataType)s.Type, vector3, s.Heading, s.HashModel));
|
||||
|
||||
vector3s.Add(vector3);
|
||||
headings.Add(s.Heading);
|
||||
hashes.Add(s.HashModel);
|
||||
dimensions.Add(s.Dimension);
|
||||
}
|
||||
dataDict[player] = pedDatas;
|
||||
Console.WriteLine($"[DEBUG] DATA ADDED - PED Data registered :{dataDict.Count}");
|
||||
|
||||
player.TriggerEvent("SERVER:CreateStaticPeds", JsonConvert.SerializeObject(vector3s.ToArray()), JsonConvert.SerializeObject(headings.ToArray()), JsonConvert.SerializeObject(hashes.ToArray()), JsonConvert.SerializeObject(dimensions.ToArray()));
|
||||
}
|
||||
|
||||
[ServerEvent(Event.PlayerDisconnected)]
|
||||
public void RemovePlayerPedDataOnDc(Player player, DisconnectionType type, string reason)
|
||||
{
|
||||
List<PedData> data = FindDataThroughPlayer(player);
|
||||
if (data == null) return;
|
||||
dataDict.Remove(player);
|
||||
Console.WriteLine($"[DEBUG] DATA REMOVED - PED Data left :{dataDict.Count}");
|
||||
}
|
||||
}
|
||||
|
||||
public enum DataType : int
|
||||
{
|
||||
WeponDealPed,
|
||||
DepartmentPed,
|
||||
PrisonPed
|
||||
}
|
||||
|
||||
public class PedData
|
||||
{
|
||||
private DataType type;
|
||||
public Player player;
|
||||
public Vector3 vector3;
|
||||
public float heading;
|
||||
public string HashModel;
|
||||
|
||||
public PedData(Player player, DataType type, Vector3 vector3, float heading, string HashModel)
|
||||
{
|
||||
this.player = player;
|
||||
this.type = type;
|
||||
this.vector3 = vector3;
|
||||
this.heading = heading;
|
||||
this.HashModel = HashModel;
|
||||
}
|
||||
|
||||
public DataType getType()
|
||||
{
|
||||
return type;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -214,6 +214,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
#endregion JobPoints
|
||||
|
||||
#region Shops
|
||||
|
||||
foreach (var shop in ShopManager.clotheStores)
|
||||
{
|
||||
shop.LoadClothes();
|
||||
@@ -232,7 +233,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
NAPI.TextLabel.CreateTextLabel("Kleiderladen - Dr\u00fccke ~y~E", s.Position, 7, 1, 0, new Color(255, 255, 255), false, 0);
|
||||
}
|
||||
|
||||
|
||||
foreach (var shop in ShopManager.itemShops)
|
||||
{
|
||||
shop.LoadItems();
|
||||
@@ -262,12 +262,70 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
|
||||
public static class MarkerBehinVehicle
|
||||
{
|
||||
public static List<BehindVehiclePoint> behindVehiclePoints = new List<BehindVehiclePoint>();
|
||||
|
||||
public static bool HasMarkerBehind(this Vehicle vehicle)
|
||||
{
|
||||
BehindVehiclePoint point = behindVehiclePoints.Find(v => v.vehicle == vehicle);
|
||||
if (point != null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void RemoveMarkerBehind(this Vehicle vehicle)
|
||||
{
|
||||
BehindVehiclePoint point = behindVehiclePoints.Find(v => v.vehicle == vehicle);
|
||||
point.marker.Delete();
|
||||
point.textLabel.Delete();
|
||||
behindVehiclePoints.Remove(point);
|
||||
}
|
||||
|
||||
public static void AddMarkerBehind(this Vehicle vehicle, Vector3 vector3)
|
||||
{
|
||||
Marker marker = NAPI.Marker.CreateMarker(1, vector3, new Vector3(), new Vector3(), 2, new Color(255, 255, 255, 70));
|
||||
TextLabel textLabel = NAPI.TextLabel.CreateTextLabel("Dr\u00fccke ~y~E~s~ um zu benutzen", new Vector3(vector3.X, vector3.Y, vector3.Z + 1.4), 7, 1, 0, new Color(255, 255, 255), false, 0);
|
||||
BehindVehiclePoint behindVehiclePoint = new BehindVehiclePoint(vehicle, marker, textLabel);
|
||||
behindVehiclePoints.Add(behindVehiclePoint);
|
||||
}
|
||||
}
|
||||
|
||||
public class DutyPoint
|
||||
{
|
||||
public Vector3 Position { get; set; }
|
||||
public int FactionId { get; set; }
|
||||
}
|
||||
|
||||
public class BehindVehiclePoint
|
||||
{
|
||||
public Vehicle vehicle { get; set; }
|
||||
public Marker marker { get; set; }
|
||||
public TextLabel textLabel { get; set; }
|
||||
|
||||
public BehindVehiclePoint(Vehicle vehicle, Marker marker, TextLabel textLabel)
|
||||
{
|
||||
this.vehicle = vehicle;
|
||||
this.marker = marker;
|
||||
this.textLabel = textLabel;
|
||||
}
|
||||
|
||||
public void usePoint(Player player)
|
||||
{
|
||||
if (vehicle.HasData("WeaponDealLoad") && vehicle.GetData<bool>("WeaponDealLoad") == true)
|
||||
{
|
||||
if (!player.HasAttachment("ammobox"))
|
||||
{
|
||||
player.PlayAnimation("anim@heists@box_carry@", "idle", 49);
|
||||
player.AddAttachment("ammobox", false);
|
||||
NAPI.Player.SetPlayerCurrentWeapon(player, WeaponHash.Unarmed);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class WeaponPoint
|
||||
{
|
||||
public Vector3 Position { get; set; }
|
||||
@@ -283,14 +341,12 @@ public class ClotheshopPoint
|
||||
{
|
||||
public Vector3 Position { get; set; }
|
||||
public ClotheShop clotheShop { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class ItemshopPoint
|
||||
{
|
||||
public Vector3 Position { get; set; }
|
||||
public ItemShop itemShop { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class JobPoint
|
||||
@@ -307,4 +363,3 @@ public class ElevatorPoint
|
||||
public int FactionId { get; set; }
|
||||
public string Stage { get; set; }
|
||||
}
|
||||
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Server.Business;
|
||||
using System;
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Entities.Saves;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using System;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Server.Business;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class SaveManager : Script
|
||||
{
|
||||
|
||||
[RemoteEvent("OnSaveBlipData")]
|
||||
public static void OnSaveBlipData(Player player, string blipSprite, string blipName, string blipScale, string blipColor,
|
||||
string blipAlpha, string blipDrawDistance, string blipShortRange, string blipRotation, string blipDimension)
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Database.Entities.Saves;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
@@ -12,25 +10,25 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class ShopManager
|
||||
{
|
||||
|
||||
public static List<ClotheShop> clotheStores = new List<ClotheShop>();
|
||||
public static List<ItemShop> itemShops = new List<ItemShop>();
|
||||
|
||||
public static void LoadClotheShops()
|
||||
{
|
||||
using(var dbContext = new DatabaseContext())
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
List<SavedBlip> discount = dbContext.Blips.ToList().FindAll(s => s.Name == "Binco" || s.Name == "Discount Store");
|
||||
List<SavedBlip> midclass = dbContext.Blips.ToList().FindAll(s => s.Name == "Suburban");
|
||||
List<SavedBlip> luxury = dbContext.Blips.ToList().FindAll(s => s.Name == "Ponsonbys");
|
||||
|
||||
foreach(var store in discount) {
|
||||
foreach (var store in discount)
|
||||
{
|
||||
Vector3 pos = new Vector3(store.PositionX, store.PositionY, store.PositionZ);
|
||||
ClotheShop newShop = new ClotheShop(1, pos);
|
||||
clotheStores.Add(newShop);
|
||||
NAPI.Util.ConsoleOutput($"Loading ClotheShop {store.Name}");
|
||||
}
|
||||
foreach(var store in midclass)
|
||||
foreach (var store in midclass)
|
||||
{
|
||||
Vector3 pos = new Vector3(store.PositionX, store.PositionY, store.PositionZ);
|
||||
ClotheShop newShop = new ClotheShop(2, pos);
|
||||
@@ -49,21 +47,19 @@ namespace ReallifeGamemode.Server.Managers
|
||||
|
||||
public static void LoadItemShops()
|
||||
{
|
||||
using(var dbContext = new DatabaseContext())
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
int id = 0;
|
||||
List<SavedBlip> shops = dbContext.Blips.ToList().FindAll(s => s.Name == "24/7");
|
||||
foreach(var store in shops)
|
||||
foreach (var store in shops)
|
||||
{
|
||||
Vector3 pos = new Vector3(store.PositionX, store.PositionY, store.PositionZ);
|
||||
ItemShop newShop = new ItemShop(pos, id);
|
||||
itemShops.Add(newShop);
|
||||
itemShops.Add(newShop);
|
||||
id++;
|
||||
}
|
||||
NAPI.Util.ConsoleOutput($"Loaded {itemShops.Count}x 24/7");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
using GTANetworkAPI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System;
|
||||
using System.Timers;
|
||||
using GTANetworkAPI;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
class TuningManager : Script
|
||||
internal class TuningManager : Script
|
||||
{
|
||||
private static List<ColShape> tuningGarages = new List<ColShape>();
|
||||
|
||||
@@ -21,6 +21,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fügt eine Tuning-Garage zum Spiel hinzu
|
||||
/// </summary>
|
||||
@@ -58,7 +59,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(sVeh);
|
||||
if (veh == null) return;
|
||||
|
||||
|
||||
veh.SetSharedData("mod18", false);
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
@@ -783,7 +784,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
if (sVeh == null) continue;
|
||||
|
||||
sVeh.DistanceDriven = (float)v.GetSharedData<dynamic>("drivenDistance");
|
||||
|
||||
}
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
@@ -804,6 +804,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
|
||||
_serverVehicles[serverVehicle.Id] = vehicle.Handle;
|
||||
}
|
||||
|
||||
internal static void DeleteVehicle(Vehicle veh)
|
||||
{
|
||||
ServerVehicle sVeh;
|
||||
@@ -885,8 +886,14 @@ namespace ReallifeGamemode.Server.Managers
|
||||
Vehicle newVeh = serverVehicle.Spawn(vehicle);
|
||||
newVeh.Repair();
|
||||
newVeh.Rotation = new Vector3(0, 0, serverVehicle.Heading);
|
||||
NAPI.Util.ConsoleOutput("VehicleDeath: Debug 4");
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:setMarkerBehindVehicle")]
|
||||
public void setVectorBehindVehicle(Player player, int id, string jsonX, string jsonY, string jsonZ)
|
||||
{
|
||||
Vehicle vehicle = NAPI.Pools.GetAllVehicles().Find(v => v.Id == id);
|
||||
Vector3 vector3 = new Vector3(Convert.ToSingle((double)JsonConvert.DeserializeObject(jsonX)), Convert.ToSingle((double)JsonConvert.DeserializeObject(jsonY)), Convert.ToSingle((double)JsonConvert.DeserializeObject(jsonZ)));
|
||||
vehicle.AddMarkerBehind(vector3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
using GTANetworkAPI;
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using GTANetworkAPI;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
class WeaponManager
|
||||
internal class WeaponManager
|
||||
{
|
||||
private static readonly List<string> _modWeapons = new List<string>()
|
||||
{
|
||||
@@ -336,8 +335,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{ 727643628, "Ceramic Pistol"}
|
||||
};
|
||||
|
||||
|
||||
|
||||
public static bool IsValidHash(uint hash)
|
||||
{
|
||||
foreach (WeaponHash vh in Enum.GetValues(typeof(WeaponHash)))
|
||||
|
||||
Reference in New Issue
Block a user