256 lines
12 KiB
C#
256 lines
12 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using GTANetworkAPI;
|
|
using ReallifeGamemode.Database.Entities;
|
|
using ReallifeGamemode.Database.Models;
|
|
using ReallifeGamemode.Server.Extensions;
|
|
using ReallifeGamemode.Server.Managers;
|
|
using ReallifeGamemode.Server.Services;
|
|
|
|
namespace ReallifeGamemode.Server.WeaponDeal
|
|
{
|
|
public class WeaponDealManager : Script
|
|
{
|
|
private const int WEAPON_AMOUNT_GANG = 2;
|
|
private const int WEAPON_AMOUNT_COP = 4;
|
|
private const int WEAPON_AMOUNT_COP_STUNGUN = 4;
|
|
public static bool checkWeaponDbyVehicle(Vehicle vehicle)
|
|
{
|
|
if (!vehicle.HasData("WeaponDealLoad") || vehicle.GetData<bool>("WeaponDealLoad") == false)
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
[RemoteEvent("startWeaponDeal")]
|
|
public void SrvEVENT_startWeaponDeal(Player client)
|
|
{
|
|
var user = client.GetUser();
|
|
using (var context = new DatabaseContext(true))
|
|
{
|
|
FactionVehicle factionVehicle = context.FactionVehicles.Where(f => f.Model == VehicleHash.Burrito3 || f.Model == VehicleHash.Policet).ToList().Where(f => f.GetOwners().Contains(user.FactionId ?? 0)).FirstOrDefault();
|
|
|
|
if (factionVehicle == null)
|
|
{
|
|
ChatService.ErrorMessage(client, "Deine Fraktion hat kein geeignetes Fahrzeug für einen Waffentransport");
|
|
return;
|
|
}
|
|
|
|
|
|
Vehicle fVeh = VehicleManager.GetVehicleFromServerVehicle(factionVehicle);
|
|
|
|
if (fVeh.HasData("weaponDeal") && fVeh.GetData<bool>("weaponDeal") == true)
|
|
{
|
|
ChatService.ErrorMessage(client, "Es läuft aktuell schon ein Waffentransport");
|
|
return;
|
|
}
|
|
|
|
float distance = fVeh.Position.DistanceTo2D(client.Position);
|
|
if ((distance > 80 && factionVehicle.Model == VehicleHash.Burrito3) || (distance > 400 && factionVehicle.Model == VehicleHash.Policet))
|
|
{
|
|
ChatService.ErrorMessage(client, "Der Transporter ist zu weit entfernt");
|
|
return;
|
|
}
|
|
|
|
WeaponDealPoints.factionWeaponDeal[user.FactionId.Value] = -1;
|
|
Vector3 vector;
|
|
vector = WeaponDealPoints.getRndWD_Route(client.GetUser().FactionId.Value);
|
|
if (vector == new Vector3())
|
|
return;
|
|
fVeh.SetData<Vector3>("weaponDealPoint", vector);
|
|
|
|
if (user.Faction.WeaponDealTime <= 0)
|
|
{
|
|
int i = 0;
|
|
string msg = "";
|
|
foreach (var point in WeaponDealPoints.WT_Route)
|
|
{
|
|
i++;
|
|
if (point != vector)
|
|
continue;
|
|
|
|
switch (i)
|
|
{
|
|
case 1:
|
|
msg = "Die albanische Mafia hat einen Waffendeal mit uns abgemacht.";
|
|
break;
|
|
|
|
case 2:
|
|
msg = "Die Lost MC scheint wieder im Waffen-Business aktiv zu sein.";
|
|
break;
|
|
|
|
case 3:
|
|
msg = "Ein paar hochrangige Mitglieder der U.S. Armee versuchen alte sowjetische Waffen loszuwerden.";
|
|
break;
|
|
|
|
case 4:
|
|
msg = "Die russische Mafia kann uns mit östlichen Importen beliefern.";
|
|
break;
|
|
|
|
case 5:
|
|
msg = "Die albanische Mafia will wohl wieder Geschäfte mit uns machen.";
|
|
break;
|
|
|
|
case 6:
|
|
msg = "Die Waffen von den Russen waren schon immer zuverlässig...";
|
|
break;
|
|
}
|
|
}
|
|
|
|
string vehName = NAPI.Vehicle.GetVehicleDisplayName(factionVehicle.Model);
|
|
|
|
if (user.Faction.Id == 3 || user.Faction.Id == 1)
|
|
{
|
|
msg = "Du kannst die Waffenlieferung nun abholen.";
|
|
}
|
|
|
|
ChatService.BroadcastFaction($"~y~[WAFFENDEAL]~s~ {msg}", user.Faction);
|
|
ChatService.SendMessage(client, $"~y~[WAFFENDEAL]~s~ Steige in den {vehName} ein und fahre zum Waffendeal.");
|
|
fVeh.SetData("weaponDeal", true);
|
|
InventoryManager.RemoveAllItemsfromVehicleInventory(fVeh);
|
|
Faction fac = context.Factions.Where(f => f.Id == user.FactionId).FirstOrDefault();
|
|
|
|
if (fac.Id == 1 | fac.Id == 3)
|
|
{
|
|
fac.WeaponDealTime = 180;
|
|
context.SaveChanges();
|
|
}
|
|
else
|
|
{
|
|
fac.WeaponDealTime = 60;
|
|
context.SaveChanges();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ChatService.ErrorMessage(client, "Du kannst noch keinen Waffendeal starten");
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
public static void WeaponDealTimer()
|
|
{
|
|
System.Timers.Timer timer = new System.Timers.Timer(60000);
|
|
timer.Start();
|
|
timer.Elapsed += Timer_Elapsed;
|
|
}
|
|
*/
|
|
|
|
public static void Timer_Elapsed()
|
|
{
|
|
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();
|
|
}
|
|
}
|
|
|
|
[ServerEvent(Event.PlayerWeaponSwitch)]
|
|
public void OnPlayerWeaponSwitch(Player player, WeaponHash oldWeapon, WeaponHash newWeapon)
|
|
{
|
|
if (!player.HasAttachment("ammobox")) return;
|
|
NAPI.Player.SetPlayerCurrentWeapon(player, WeaponHash.Unarmed);
|
|
}
|
|
|
|
[RemoteEvent("loadWeaponTransport")]
|
|
public void SrvEVENT_loadWeaponTransport(Player client)
|
|
{
|
|
var veh = client.Vehicle;
|
|
|
|
if (veh == null)
|
|
{
|
|
return;
|
|
}
|
|
if ((VehicleHash)veh.Model != VehicleHash.Burrito3 && (VehicleHash)veh.Model != VehicleHash.Policet)
|
|
{
|
|
return;
|
|
}
|
|
|
|
User user = client.GetUser();
|
|
using (var context = new DatabaseContext())
|
|
{
|
|
FactionVehicle factionVehicle = context.FactionVehicles
|
|
.Where(f => f.Model == VehicleHash.Burrito3 || f.Model == VehicleHash.Policet)
|
|
.ToList()
|
|
.Where(f => f.GetOwners().Contains(user.FactionId ?? 0))
|
|
.FirstOrDefault();
|
|
|
|
Vehicle fVeh = VehicleManager.GetVehicleFromServerVehicle(factionVehicle);
|
|
fVeh.SetData("weaponDeal", false);
|
|
fVeh.SetData("WeaponDealLoad", true);
|
|
fVeh.AddAttachment("weapondeal", false);
|
|
fVeh.AddAttachment("weapondeal1", false);
|
|
fVeh.AddAttachment("weapondeal2", false);
|
|
InventoryManager.RemoveAllItemsfromVehicleInventory(fVeh);
|
|
int oMembers = NAPI.Pools.GetAllPlayers().Where(p => p.IsLoggedIn() && p.GetUser(context).FactionId == user.FactionId).Count();
|
|
|
|
if (factionVehicle.GetOwners().Contains(8) || factionVehicle.GetOwners().Contains(7))
|
|
{
|
|
VehicleItem item = new VehicleItem() { ItemId = 2, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_GANG * oMembers }; //pistol50
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item.ItemId, item.Amount);
|
|
VehicleItem item3 = new VehicleItem() { ItemId = 9, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_GANG * oMembers }; //PumpShotgun
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item3.ItemId, item3.Amount);
|
|
VehicleItem item2 = new VehicleItem() { ItemId = 10, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_GANG * oMembers }; //Schutzweste
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item2.ItemId, item2.Amount);
|
|
VehicleItem item4 = new VehicleItem() { ItemId = 7, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_GANG * oMembers }; //CompactRifle
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item4.ItemId, item4.Amount);
|
|
VehicleItem item5 = new VehicleItem() { ItemId = 13, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_GANG * oMembers }; //AssaultRifle
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item5.ItemId, item5.Amount);
|
|
}
|
|
else if (factionVehicle.GetOwners().Contains(1))
|
|
{
|
|
VehicleItem item = new VehicleItem() { ItemId = 1, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP * oMembers }; //pistol
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item.ItemId, item.Amount);
|
|
VehicleItem item2 = new VehicleItem() { ItemId = 2, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP * oMembers }; //Pistol50
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item2.ItemId, item2.Amount);
|
|
VehicleItem item3 = new VehicleItem() { ItemId = 5, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP * oMembers }; //SMG
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item3.ItemId, item3.Amount);
|
|
VehicleItem item4 = new VehicleItem() { ItemId = 9, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP * oMembers }; //PumpShotgun
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item4.ItemId, item4.Amount);
|
|
VehicleItem item5 = new VehicleItem() { ItemId = 10, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP * oMembers }; //Schutzweste
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item5.ItemId, item5.Amount);
|
|
VehicleItem item6 = new VehicleItem() { ItemId = 11, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP_STUNGUN * oMembers }; //Stungun
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item6.ItemId, item6.Amount);
|
|
VehicleItem item7 = new VehicleItem() { ItemId = 14, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP_STUNGUN * oMembers }; // AssaultSmg
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item7.ItemId, item7.Amount);
|
|
}
|
|
else if (factionVehicle.GetOwners().Contains(3))
|
|
{
|
|
VehicleItem item = new VehicleItem() { ItemId = 3, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP * oMembers }; //pistol_mk2
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item.ItemId, item.Amount);
|
|
VehicleItem item2 = new VehicleItem() { ItemId = 4, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP * oMembers }; //Combatpistol
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item2.ItemId, item2.Amount);
|
|
VehicleItem item3 = new VehicleItem() { ItemId = 6, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP * oMembers }; //Carbinrifle
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item3.ItemId, item3.Amount);
|
|
VehicleItem item4 = new VehicleItem() { ItemId = 8, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP * oMembers }; //Sniperrifle
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item4.ItemId, item4.Amount);
|
|
VehicleItem item5 = new VehicleItem() { ItemId = 10, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP * oMembers }; //Schutzweste
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item5.ItemId, item5.Amount);
|
|
VehicleItem item6 = new VehicleItem() { ItemId = 11, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP_STUNGUN * oMembers }; //Stungun
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item6.ItemId, item6.Amount);
|
|
VehicleItem item7 = new VehicleItem() { ItemId = 12, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP * oMembers }; //CombatPDW
|
|
InventoryManager.AddItemToVehicleInventory(fVeh, item7.ItemId, item7.Amount);
|
|
}
|
|
|
|
ChatService.BroadcastFaction("~y~[WAFFENDEAL] ~w~Der Transporter wurde erfolgreich beladen.", new List<int>() { client.GetUser().Faction.Id });
|
|
client.SendChatMessage("~y~[WAFFENDEAL] ~w~Fahre nun zu deiner Base zurück.");
|
|
BasePoints basePoints = new BasePoints();
|
|
basePoints.getbase(user.FactionId, client);
|
|
}
|
|
}
|
|
}
|
|
|
|
public class WeaponRackWeaponAmountInfo
|
|
{
|
|
public string WeaponModel { get; set; }
|
|
public int Amount { get; set; }
|
|
}
|
|
}
|