Merge branch 'develop' of ssh://development.life-of-german.org:451/log-gtav/reallife-gamemode into develop

This commit is contained in:
Michael
2019-10-30 19:27:24 +01:00
41 changed files with 3682 additions and 138 deletions

View File

@@ -2492,9 +2492,9 @@ namespace ReallifeGamemode.Server.Commands
option1 = option1.ToString();
if (option1 != "add" && option1 != "remove" && option1 != "setenterposition" && option1 != "setexitposition")
if (option1 != "add" && option1 != "remove" && option1 != "setenter" && option1 != "setexit")
{
ChatService.SendMessage(player, "~m~Benutzung: ~s~/interior [Add / Remove / SetEnter / SetExit] [Name]");
ChatService.SendMessage(player, "~m~Benutzung: ~s~/interior [Add / Remove / SetEnter / SetExit] [Name / ID]");
return;
}

View File

@@ -68,13 +68,13 @@ namespace ReallifeGamemode.Server.DrivingSchool
public static void Setup()
{
informationLabel = NAPI.TextLabel.CreateTextLabel("Fahrschule", new Vector3(-815.8334, -1346.405, 5.150263), 20.0f, 1.3f, 0, new Color(255, 255, 255));
marker = NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, new Vector3(-815.8334, -1346.405, 4.150263), new Vector3(), new Vector3(), 1f, new Color(255, 255, 255));
informationLabel = NAPI.TextLabel.CreateTextLabel("Fahrschule", new Vector3(-813.17, -1354.5, 5.14), 20.0f, 1.3f, 0, new Color(255, 255, 255));
marker = NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, new Vector3(-813.17, -1354.5, 4.14), new Vector3(), new Vector3(), 1f, new Color(255, 255, 255));
_colShape = NAPI.ColShape.CreateSphereColShape(new Vector3(-815.8334, -1346.405, 5.150263), 3f);
_colShape = NAPI.ColShape.CreateSphereColShape(new Vector3(-813.17, -1354.5, 5.14), 3f);
_colShape.OnEntityEnterColShape += EntityEnterBusinessColShape;
_colShape.OnEntityExitColShape += EntityExitBusinessColShape;
NAPI.Blip.CreateBlip(545, new Vector3(-815.8334, -1346.405, 5.150263), 1.0f, 4, "Fahrschule", shortRange: true);
NAPI.Blip.CreateBlip(545, new Vector3(-813.17, -1354.5, 5.14), 1.0f, 4, "Fahrschule", shortRange: true);
}
private static void EntityEnterBusinessColShape(ColShape colShape, Client client)

View File

@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Text;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Util;
using ReallifeGamemode.Server.WeaponDeal;
namespace ReallifeGamemode.Server.Events
{
public class EnterVehicle : Script
{
[ServerEvent(Event.PlayerEnterVehicle)]
public void OnPlayerEnterVehicle(Client client, GTANetworkAPI.Vehicle vehicle, sbyte seat)
{
if (seat != -1)
return;
Console.WriteLine("inVEhicle");
if (vehicle.GetServerVehicle() is FactionVehicle veh)
{
if (client.GetUser().FactionId != null && (veh.FactionId == client.GetUser().FactionId) && (veh.Model == VehicleHash.Burrito3) && vehicle.HasData("weaponDeal") && vehicle.GetData("weaponDeal") == true)
{
Vector3 vector = WeaponDealPoints.getRndWD_Route(client.GetUser().FactionId.Value);
if (vector == null)
return;
List<Vector3> dealPoint = new List<Vector3>();
dealPoint.Add(vector);
CheckPointHandle.StartCheckPointRoute(client, dealPoint, 5000, 1, "loadWeaponTransport");
}
}
}
}
}

View File

@@ -4,6 +4,7 @@ using System.Text;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.WeaponDeal;
namespace ReallifeGamemode.Server.Events
{
@@ -25,6 +26,11 @@ namespace ReallifeGamemode.Server.Events
{
if (veh.FactionId != player.GetUser().FactionId)
{
if ((VehicleHash)vehicle.Model == VehicleHash.Burrito3)
{
if (WeaponDealManager.checkWeaponDbyVehicle(vehicle))
return;
}
player.StopAnimation();
player.SendNotification("~r~Du darfst dieses Fahrzeug nicht benutzen!", true);
return;

View File

@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Text;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Util;
using ReallifeGamemode.Server.WeaponDeal;
namespace ReallifeGamemode.Server.Events
{
public class ExitVehicle:Script
{
[ServerEvent(Event.PlayerExitVehicleAttempt)]
public void OnPlayerExitVehicle(Client client, GTANetworkAPI.Vehicle vehicle)
{
if (client.VehicleSeat != -1)
return;
if (vehicle.GetServerVehicle() is FactionVehicle veh)
{
if ((client.GetUser().FactionId != null) && (veh.FactionId == client.GetUser().FactionId) && ((VehicleHash)vehicle.Model == VehicleHash.Burrito3) && vehicle.HasData("weaponDeal") && vehicle.GetData("weaponDeal") == true)
{
CheckPointHandle.RemovePlayerHandlerFromList(client);
client.TriggerEvent("destroyCP");
}
}
}
}
}

View File

@@ -9,6 +9,7 @@ using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Inventory.Interfaces;
using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Util;
using Newtonsoft.Json;
namespace ReallifeGamemode.Server.Events
{
@@ -18,53 +19,62 @@ namespace ReallifeGamemode.Server.Events
public void SrvEvent_GetNearVehicles(Client client)
{
var user = client.GetUser();
var inventoryWeight = 0;
List<VehicleInventory> vehicleInventory = new List<VehicleInventory>();
if (!client.IsInVehicle)
{
using (var context = new DatabaseContext())
{
foreach (GTANetworkAPI.Vehicle veh in NAPI.Pools.GetAllVehicles())
{
List<string> iName = new List<string>();
List<int> iAmount = new List<int>();
List<int> iId = new List<int>();
inventoryWeight = 0;
if (veh.Position.DistanceTo(client.Position) < 2.5f)
List<VehicleInventory> vehicleInventory = new List<VehicleInventory>();
if (veh.Position.DistanceTo(client.Position) < 5f)
{
if (VehicleStreaming.GetDoorState(veh, DoorID.DoorTrunk) == DoorState.DoorOpen)
if (VehicleStreaming.GetDoorState(veh, DoorID.DoorTrunk) == DoorState.DoorOpen || VehicleStreaming.GetDoorState(veh, DoorID.DoorRearLeft) == DoorState.DoorOpen || VehicleStreaming.GetDoorState(veh, DoorID.DoorRearRight) == DoorState.DoorOpen)
{
ServerVehicle serverVehicle = VehicleManager.GetServerVehicleFromVehicle(veh, context);
List<VehicleItem> vehicleItems = context.VehicleItems.ToList().FindAll(i => i.VehicleId == serverVehicle.Id);
foreach (var vehItem in vehicleItems)
{
IItem iItem = InventoryManager.GetItemById(vehItem.ItemId);
var currentItemWeight = iItem.Gewicht * vehItem.Amount;
inventoryWeight += currentItemWeight;
iName.Add(iItem.Name);
iAmount.Add(vehItem.Amount);
iId.Add(iItem.Id);
}
var vehInv = new VehicleInventory
{
ID = serverVehicle.Id,
currentWeight = inventoryWeight,
totalWeight = 250,
ivehName = iName.ToArray(),
ivehAmount = iAmount.ToArray(),
ivehId = iId.ToArray()
};
vehicleInventory.Add(vehInv);
vehicleInventory = getVehItem(veh);
}
client.TriggerEvent("setVehiclesInventory", vehicleInventory.ToArray());
client.TriggerEvent("setVehiclesInventory", vehicleInventory.ToArray());
return;
}
}
}
}
}
public List<VehicleInventory> getVehItem(GTANetworkAPI.Vehicle veh)
{
List<string> iName = new List<string>();
List<int> iAmount = new List<int>();
List<int> iId = new List<int>();
List<VehicleInventory> vehicleInventory = new List<VehicleInventory>();
var inventoryWeight = 0;
using (var context = new DatabaseContext())
{
ServerVehicle serverVehicle = VehicleManager.GetServerVehicleFromVehicle(veh, context);
List<VehicleItem> vehicleItems = context.VehicleItems.ToList().FindAll(i => i.VehicleId == serverVehicle.Id);
foreach (var vehItem in vehicleItems)
{
IItem iItem = InventoryManager.GetItemById(vehItem.ItemId);
var currentItemWeight = iItem.Gewicht * vehItem.Amount;
inventoryWeight += currentItemWeight;
iName.Add(iItem.Name);
iAmount.Add(vehItem.Amount);
iId.Add(iItem.Id);
}
var vehInv = new VehicleInventory
{
ID = serverVehicle.Id,
currentWeight = inventoryWeight,
totalWeight = 250,
ivehName = iName.ToArray(),
ivehAmount = iAmount.ToArray(),
ivehId = iId.ToArray()
};
vehicleInventory.Add(vehInv);
}
return vehicleInventory;
}
}
}

View File

@@ -13,6 +13,7 @@ using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Database;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Util;
using ReallifeGamemode.Server.Inventory.Interfaces;
/**
* @overview Life of German Reallife - Event Key (Key.cs)
* @author VegaZ
@@ -229,17 +230,47 @@ namespace ReallifeGamemode.Server.Events
List<string> secondarys = new List<string>();
List<string> melees = new List<string>();
List<string> specials = new List<string>();
List<string> timer = new List<string>();
string dealTime = "Starten";
primarys.Add("Keine");
secondarys.Add("Keine");
melees.Add("Keine");
specials.Add("Keine");
using (var context = new DatabaseContext())
{
List<UserItem> fItem = context.UserItems.Where(u => u.UserId == user.Id).ToList();
foreach(var item in fItem)
{
IItem iItem = InventoryManager.GetItemById(item.ItemId);
if(iItem is IWeaponDealItem obj)
{
FactionWeapon weapon = context.FactionWeapons.Where(w => w.FactionId == user.FactionId && w.WeaponModel == iItem.Name).FirstOrDefault();
if (weapon == null)
continue;
weapon.Ammount += item.Amount;
ChatService.SendMessage(player, item.Amount + " " + iItem.Name + " wurden im Waffenlager hinzugefürgt.");
context.Remove(item);
}
}
context.SaveChanges();
List<FactionWeapon> weapons = context.FactionWeapons.Where(w => w.FactionId == user.FactionId).ToList();
Database.Entities.Faction faction = context.Factions.Where(fac => fac.Id == user.FactionId).FirstOrDefault();
if (faction.WeaponDealTime > 0)
dealTime = "noch " + faction.WeaponDealTime.ToString()+" min. übrig";
timer.Add(dealTime);
foreach (var weapon in weapons)
{
if (weapon.Ammount <= 0)
continue;
switch (weapon.SlotID)
{
case 1:
@@ -262,7 +293,7 @@ namespace ReallifeGamemode.Server.Events
}
}
player.TriggerEvent("showWeaponMenu", primarys.ToArray(), secondarys.ToArray(), melees.ToArray(), specials.ToArray());
player.TriggerEvent("showWeaponMenu", primarys.ToArray(), secondarys.ToArray(), melees.ToArray(), specials.ToArray(), JsonConvert.SerializeObject(timer.ToArray()));
}
if (nearestJailReleasePoint != null)
{

View File

@@ -1,4 +1,9 @@
using GTANetworkAPI;
using System.Collections.Generic;
using System.Linq;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions;
namespace ReallifeGamemode.Server.Events
{
@@ -63,10 +68,10 @@ namespace ReallifeGamemode.Server.Events
if (meleeModel.Contains("mk2") && !meleeModel.Contains("_mk2")) meleeModel = meleeModel.Replace("mk2", "_mk2");
melee = NAPI.Util.GetHashKey($"weapon_{meleeModel}");
}
client.GiveWeapon((WeaponHash)primary, 150);
client.GiveWeapon((WeaponHash)secondary, 600);
client.GiveWeapon((WeaponHash)primary, 50);
client.GiveWeapon((WeaponHash)secondary, 150);
client.GiveWeapon((WeaponHash)melee, 1);
if(specialModel != "Schutzweste")
{
@@ -77,9 +82,29 @@ namespace ReallifeGamemode.Server.Events
special = NAPI.Util.GetHashKey($"weapon_{specialModel}");
}
client.GiveWeapon((WeaponHash)special, 50);
return;
}
client.Armor = 100;
else
{
client.Armor = 50;
}
using(var context = new DatabaseContext())
{
User user = client.GetUser();
FactionWeapon slot1 = context.FactionWeapons.Where(w => w.FactionId == user.FactionId && w.WeaponModel == primaryModel).FirstOrDefault();
if (slot1 != null)
slot1.Ammount -= 1;
FactionWeapon slot2 = context.FactionWeapons.Where(w => w.FactionId == user.FactionId && w.WeaponModel == secondaryModel).FirstOrDefault();
if (slot2 != null)
slot2.Ammount -= 1;
FactionWeapon slot3 = context.FactionWeapons.Where(w => w.FactionId == user.FactionId && w.WeaponModel == meleeModel).FirstOrDefault();
if (slot3 != null)
slot3.Ammount -= 1;
FactionWeapon slot4 = context.FactionWeapons.Where(w => w.FactionId == user.FactionId && w.WeaponModel == specialModel).FirstOrDefault();
if (slot4 != null)
slot4.Ammount -= 1;
context.SaveChanges();
}
}
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Text;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
namespace ReallifeGamemode.Server.Inventory.Interfaces
{
public interface IWeaponDealItem : IItem, IDroppableItem
{
bool noTransfer(Client client, UserItem uItem, FactionVehicle fVeh);
}
}

View File

@@ -0,0 +1,23 @@
using ReallifeGamemode.Server.Inventory.Interfaces;
using System;
using System.Collections.Generic;
using System.Text;
/**
* @overview Life of German Reallife - Inventory Items Hamburger (Hamburger.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace ReallifeGamemode.Server.Inventory.Items
{
public class CarbineRifle : WeaponDealItem
{
public override int Id => 13;
public override string Name => "CarbineRifle";
public override string Description => "Waffe";
public override int Gewicht => 4000;
public override string Einheit => "g";
public override uint Object => 3666746839; //3061944032
}
}

View File

@@ -0,0 +1,23 @@
using ReallifeGamemode.Server.Inventory.Interfaces;
using System;
using System.Collections.Generic;
using System.Text;
/**
* @overview Life of German Reallife - Inventory Items Hamburger (Hamburger.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace ReallifeGamemode.Server.Inventory.Items
{
public class Pistol50 : WeaponDealItem
{
public override int Id => 11;
public override string Name => "Pistol50";
public override string Description => "Waffe";
public override int Gewicht => 1180;
public override string Einheit => "g";
public override uint Object => 3666746839; //3061944032
}
}

View File

@@ -0,0 +1,23 @@
using ReallifeGamemode.Server.Inventory.Interfaces;
using System;
using System.Collections.Generic;
using System.Text;
/**
* @overview Life of German Reallife - Inventory Items Hamburger (Hamburger.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace ReallifeGamemode.Server.Inventory.Items
{
public class PumpShotgun : WeaponDealItem
{
public override int Id => 14;
public override string Name => "PumpShotgun";
public override string Description => "Waffe";
public override int Gewicht => 3600;
public override string Einheit => "g";
public override uint Object => 3666746839; //3061944032
}
}

View File

@@ -0,0 +1,23 @@
using ReallifeGamemode.Server.Inventory.Interfaces;
using System;
using System.Collections.Generic;
using System.Text;
/**
* @overview Life of German Reallife - Inventory Items Hamburger (Hamburger.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace ReallifeGamemode.Server.Inventory.Items
{
public class SMG : WeaponDealItem
{
public override int Id => 12;
public override string Name => "SMG";
public override string Description => "Waffe";
public override int Gewicht => 3080;
public override string Einheit => "g";
public override uint Object => 3666746839; //3061944032
}
}

View File

@@ -0,0 +1,23 @@
using ReallifeGamemode.Server.Inventory.Interfaces;
using System;
using System.Collections.Generic;
using System.Text;
/**
* @overview Life of German Reallife - Inventory Items Hamburger (Hamburger.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace ReallifeGamemode.Server.Inventory.Items
{
public class Schutzweste : WeaponDealItem
{
public override int Id => 16;
public override string Name => "Schutzweste";
public override string Description => "Waffe";
public override int Gewicht => 3000;
public override string Einheit => "g";
public override uint Object => 3666746839; //3061944032
}
}

View File

@@ -0,0 +1,23 @@
using ReallifeGamemode.Server.Inventory.Interfaces;
using System;
using System.Collections.Generic;
using System.Text;
/**
* @overview Life of German Reallife - Inventory Items Hamburger (Hamburger.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace ReallifeGamemode.Server.Inventory.Items
{
public class SniperRifle : WeaponDealItem
{
public override int Id => 15;
public override string Name => "SniperRifle";
public override string Description => "Waffe";
public override int Gewicht => 12900;
public override string Einheit => "g";
public override uint Object => 3666746839; //3061944032
}
}

View File

@@ -0,0 +1,31 @@
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Inventory.Interfaces;
using ReallifeGamemode.Server.Managers;
using System;
using System.Collections.Generic;
using System.Text;
namespace ReallifeGamemode.Server.Inventory.Items
{
public abstract class WeaponDealItem : IWeaponDealItem
{
public abstract int Id { get; }
public abstract string Name { get; }
public abstract string Description { get; }
public abstract int Gewicht { get; }
public abstract string Einheit { get; }
public abstract uint Object { get; }
public bool noTransfer(Client client, UserItem uItem, FactionVehicle fVeh)
{
if (fVeh.FactionId != client.GetUser().FactionId)
return false;
if (fVeh.Model != VehicleHash.Burrito3)
return false;
return true;
}
}
}

View File

@@ -7,6 +7,7 @@ using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Util;
using ReallifeGamemode.Server.Wanted;
using ReallifeGamemode.Server.DrivingSchool;
using ReallifeGamemode.Server.WeaponDeal;
/**
* @overview Life of German Reallife - Main Class (Main.cs)
@@ -77,6 +78,7 @@ namespace ReallifeGamemode.Server
WantedEscapeTimer.WantedTimer();
Jail.JailTimer();
Economy.PaydayTimer();
WeaponDealManager.WeaponDealTimer();
}
}

View File

@@ -137,6 +137,26 @@ namespace ReallifeGamemode.Server.Managers
return inventoryWeight;
}
public static int GetVehicleInventoryWeight(Vehicle veh)
{
var inventoryWeight = 0;
using (var context = new DatabaseContext())
{
ServerVehicle serverVehicle = VehicleManager.GetServerVehicleFromVehicle(veh, context);
List<VehicleItem> vehItems = context.VehicleItems.ToList().FindAll(i => i.VehicleId == serverVehicle.Id);
foreach (var item in vehItems)
{
IItem iItem = GetItemById(item.ItemId);
var currentItemWeight = iItem.Gewicht * item.Amount;
inventoryWeight += currentItemWeight;
}
}
return inventoryWeight;
}
public static UserItem UserHasThisItem(Client player, int itemId)
{
var user = player.GetUser();
@@ -190,9 +210,9 @@ namespace ReallifeGamemode.Server.Managers
{
foreach (Vehicle veh in NAPI.Pools.GetAllVehicles())
{
if (veh.Position.DistanceTo(client.Position) < 2.5f)
if (veh.Position.DistanceTo(client.Position) < 5f)
{
if (VehicleStreaming.GetDoorState(veh, DoorID.DoorTrunk) == DoorState.DoorOpen)
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
@@ -207,6 +227,25 @@ namespace ReallifeGamemode.Server.Managers
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();
@@ -251,8 +290,33 @@ namespace ReallifeGamemode.Server.Managers
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)
@@ -306,7 +370,6 @@ namespace ReallifeGamemode.Server.Managers
using (var context = new DatabaseContext())
{
VehicleItem vItem = new VehicleItem
{
Amount = itemAmount,
@@ -329,7 +392,8 @@ namespace ReallifeGamemode.Server.Managers
vehItem.Amount = vItem.Amount;
}
context.SaveChanges();
IItem iItem = GetItemById(vItem.ItemId);
player.TriggerEvent("aproveTransfer", JsonConvert.DeserializeObject<int>(vehAmount), iItem.Name, "Rucksack");
}
}
@@ -341,6 +405,7 @@ namespace ReallifeGamemode.Server.Managers
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;
@@ -355,7 +420,9 @@ namespace ReallifeGamemode.Server.Managers
UserId = user.Id,
Slot = -1,
};
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == cItem.ItemId).FirstOrDefault();
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == cItem.ItemId).FirstOrDefault();
if (item == null)
{
context.UserItems.Add(cItem);
@@ -370,6 +437,8 @@ namespace ReallifeGamemode.Server.Managers
}
context.SaveChanges();
IItem iItem = GetItemById(item.ItemId);
player.TriggerEvent("aproveTransfer", JsonConvert.DeserializeObject<int>(vehAmount), iItem.Name, "Kofferraum");
}
}
@@ -407,6 +476,53 @@ namespace ReallifeGamemode.Server.Managers
}
}
public static void AddItemToVehicleInventory(Client player, VehicleItem item, Vehicle veh)
{
var user = player.GetUser();
using (var context = new DatabaseContext())
{
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(veh);
VehicleItem existingItem = context.VehicleItems.FirstOrDefault(i => i.ItemId == item.ItemId && i.VehicleId == sVeh.Id);
if (existingItem != null)
{
existingItem.Amount += item.Amount;
}
else
{
List<VehicleItem> allItemsByVehicle = context.VehicleItems.ToList().FindAll(i => i.VehicleId == sVeh.Id);
var slotArr = Enumerable.Range(1, 20).ToList();
allItemsByVehicle.ForEach(allItem =>
{
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() };
}
context.SaveChanges();
}
}
public static void RemoveAllItemsfromVehicleInventory(Vehicle veh)
{
using(var context = new DatabaseContext())
{
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(veh);
List<VehicleItem> allItemsByVehicle = context.VehicleItems.ToList().FindAll(i => i.VehicleId == sVeh.Id);
allItemsByVehicle.ForEach(allItem =>
{
context.Remove(allItem);
});
context.SaveChanges();
}
}
[RemoteEvent("removeItemAsAdmin")]
public void RemoveAsAdminInventory(Client player, string amount, string userItemId, string targetPlayerName)
{
@@ -449,47 +565,56 @@ namespace ReallifeGamemode.Server.Managers
switch (type)
{
case "use":
ChatService.SendMessage(player, "use item: " + iItem.Name);
if (iItem == null)
{
ChatService.SendMessage(player, "Dieses Essen existiert nicht.");
player.TriggerEvent("Error", "Dieses Essen existiert nicht.");
return;
}
if (fItem == null)
{
ChatService.SendMessage(player, "Du hast dieses Item nicht");
player.TriggerEvent("Error", "Du hast dieses Item nicht");
return;
}
if (iItem is IUsableItem usableItemObj)
{
usableItemObj.Use(fItem);
player.TriggerEvent("removeItem", itemId, amount);
player.TriggerEvent("removeItem", itemId, 1);
player.TriggerEvent("aproveUse", 1, iItem.Name);
}
else ChatService.SendMessage(player, "Du kannst dieses Item nicht benutzen.");
else player.TriggerEvent("Error", "Du kannst dieses Item nicht benutzen.");
break;
case "drop":
if (iItem == null)
{
ChatService.SendMessage(player, "Dieses Item existiert nicht.");
player.TriggerEvent("Error", "Dieses Item existiert nicht.");
return;
}
if (fItem == null)
{
ChatService.SendMessage(player, "Du hast dieses Item nicht");
player.TriggerEvent("Error", "Du hast dieses Item nicht");
return;
}
if (iItem is IDroppableItem usableItemObj2)
{
Vector3 dropPosition = ClientExtension.GetPositionFromPlayer(player, 0.6f, 0);
dropPosition.Z -= 0.8f;
//new Vector3(player.Position.X, player.Position.Y, player.Position.Z - 0.8f);
Random r = new Random();
GTANetworkAPI.Object grndObject = NAPI.Object.CreateObject(3777723516, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 0);
GTANetworkAPI.Object grndObject;
if (iItem is IWeaponDealItem obj)
{
dropPosition.Z -= 1.05f;
grndObject = NAPI.Object.CreateObject(3666746839, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 0);
}
else
{
dropPosition.Z -= 0.8f;
grndObject = NAPI.Object.CreateObject(3777723516, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 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);
GroundItem.AddGroundItem(grndItem, grndObject, grndTxtLbl);
@@ -500,7 +625,8 @@ namespace ReallifeGamemode.Server.Managers
{
context.UserItems.Remove(fItem);
}
player.TriggerEvent("removeItem", itemId, amount);
player.TriggerEvent("aproveThrow", amount, iItem.Name);
}
break;
}

View File

@@ -0,0 +1,108 @@
using System;
using System.Collections.Generic;
using System.Text;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Managers;
using System.Linq;
using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Util;
namespace ReallifeGamemode.Server.WeaponDeal
{
public class WeaponDealManager:Script
{
public static bool checkWeaponDbyVehicle(Vehicle vehicle)
{
if (!vehicle.HasData("WeaponDealLoad") || vehicle.GetData("WeaponDealLoad") == false)
return false;
return true;
}
[RemoteEvent("startWeaponDeal")]
public void SrvEVENT_startWeaponDeal(Client client)
{
var user = client.GetUser();
using (var context = new DatabaseContext())
{
FactionVehicle factionVehicle = context.FactionVehicles.Where(f => f.FactionId == user.FactionId && f.Model == VehicleHash.Burrito3).FirstOrDefault();
Vehicle fVeh = VehicleManager.GetVehicleFromServerVehicle(factionVehicle);
if (fVeh.Position.DistanceTo(client.Position) > 50)
{
ChatService.ErrorMessage(client, "Der Transporter ist zu weit entfernt");
return;
}
if (user.Faction.WeaponDealTime <= 0)
{
ChatService.BroadcastFaction("Die albanische Mafia hat einen Deal mit deiner Fraktion abgemacht!", user.Faction);
ChatService.SendMessage(client, "Steige in den Burrito ein und fahre zum Waffendeal.");
fVeh.SetData("weaponDeal", true);
WeaponDealPoints.factionWeaponDeal[user.FactionId.Value] = -1;
Faction fac = context.Factions.Where(f => f.Id == user.FactionId).FirstOrDefault();
fac.WeaponDealTime = 60;
context.SaveChanges();
}
else
{
ChatService.ErrorMessage(client, "Du kannst noch kein Waffendeal starten");
}
}
}
public static void WeaponDealTimer()
{
System.Timers.Timer timer = new System.Timers.Timer(60000);
timer.Start();
timer.Elapsed += Timer_Elapsed;
}
private static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
using(var context = new DatabaseContext())
{
List<Faction> fac = context.Factions.ToList<Faction>();
foreach(var faction in fac)
{
if (faction.WeaponDealTime > 0)
faction.WeaponDealTime -= 1;
}
context.SaveChanges();
}
}
[RemoteEvent("loadWeaponTransport")]
public void SrvEVENT_loadWeaponTransport(Client client)
{
if ((VehicleHash)client.Vehicle.Model != VehicleHash.Burrito3)
return;
User user = client.GetUser();
using (var context = new DatabaseContext())
{
FactionVehicle factionVehicle = context.FactionVehicles.Where(f => f.FactionId == user.FactionId && f.Model == VehicleHash.Burrito3).FirstOrDefault();
Vehicle fVeh = VehicleManager.GetVehicleFromServerVehicle(factionVehicle);
fVeh.SetData("weaponDeal", false);
fVeh.SetData("WeaponDealLoad", true);
InventoryManager.RemoveAllItemsfromVehicleInventory(fVeh);
Random rnd = new Random();
if(factionVehicle.FactionId == 8 || factionVehicle.FactionId == 7)
{
VehicleItem item = new VehicleItem() { ItemId = 11, VehicleId = factionVehicle.Id, Amount = rnd.Next(45, 75) }; //pistole
InventoryManager.AddItemToVehicleInventory(client, item, fVeh);
VehicleItem item3 = new VehicleItem() { ItemId = 14, VehicleId = factionVehicle.Id, Amount = rnd.Next(30, 40) }; //Pumpe
InventoryManager.AddItemToVehicleInventory(client, item3, fVeh);
VehicleItem item2 = new VehicleItem() { ItemId = 16, VehicleId = factionVehicle.Id, Amount = rnd.Next(5, 15) }; //Schutzweste
InventoryManager.AddItemToVehicleInventory(client, item2, fVeh);
}
}
}
}
}

View File

@@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Text;
using GTANetworkAPI;
using System.Linq;
using ReallifeGamemode.Database.Entities;
namespace ReallifeGamemode.Server.WeaponDeal
{
public class WeaponDealPoints
{
public static Dictionary<int, int> factionWeaponDeal = new Dictionary<int, int>();
private static readonly IReadOnlyCollection<Vector3> WT_Route = new List<Vector3>
{
//new Vector3(2465.163, 1589.396, 32.72029), ungeeignet
new Vector3(1532.045, 1702.775, 109.7561), //Hütte iwo Östlich
new Vector3(58.67861, 3717.103, 39.75301), //Lost MC
new Vector3(-2174.734, 4269.301, 48.95574), //Army Base
new Vector3(2530.14, 2617.15, 37.76),
new Vector3(-3179.78, 820.08, 3.59),
new Vector3(-1889.91, 2045.6, 140.68)
}.AsReadOnly();
public static Vector3 getRndWD_Route(int factionID)
{
if (!factionWeaponDeal.ContainsKey(factionID))
return null;
if(factionWeaponDeal[factionID] == -1)
{
Random rnd = new Random();
factionWeaponDeal[factionID] = rnd.Next(0, WT_Route.Count - 1);
}
return WT_Route.ElementAt(factionWeaponDeal[factionID]);
}
}
}