miese Corona Zeiten push für Lenhardt Lehmberger
This commit is contained in:
@@ -14,8 +14,6 @@ namespace ReallifeGamemode.Server.Events
|
||||
if (client.VehicleSeat != 0)
|
||||
return;
|
||||
|
||||
client.TriggerEvent("SERVER:setMarkerBehindVehicle", vehicle);
|
||||
|
||||
if (vehicle.GetServerVehicle() is FactionVehicle veh)
|
||||
{
|
||||
User u = client.GetUser();
|
||||
@@ -24,7 +22,7 @@ namespace ReallifeGamemode.Server.Events
|
||||
CheckPointHandle.RemovePlayerHandlerFromList(client);
|
||||
client.TriggerEvent("destroyCP");
|
||||
}
|
||||
else if ((u.FactionId != null) && (veh.GetOwners().Contains(u.FactionId ?? 0)) && ((VehicleHash)vehicle.Model == VehicleHash.Burrito3) && vehicle.HasData("WeaponDealLoad") && vehicle.GetData<bool>("WeaponDealLoad") == true)
|
||||
else if ((u.FactionId != null) && (veh.GetOwners().Contains(u.FactionId ?? 0)) && ((VehicleHash)vehicle.Model == VehicleHash.Burrito3 || (VehicleHash)vehicle.Model == VehicleHash.Policet) && vehicle.HasData("WeaponDealLoad") && vehicle.GetData<bool>("WeaponDealLoad") == true)
|
||||
{
|
||||
client.TriggerEvent("SERVER:setMarkerBehindVehicle", vehicle);
|
||||
}
|
||||
|
||||
@@ -10,10 +10,13 @@ using ReallifeGamemode.Server.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)
|
||||
@@ -24,30 +27,30 @@ using ReallifeGamemode.Server.Events;
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
public class InteractionManager : Script
|
||||
{
|
||||
#region Eigeninteraktionen PFEILTASTE-RUNTER
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_AcceptInvite")]
|
||||
public void InteractionMenuAcceptInvite(Player player, string type)
|
||||
{
|
||||
#region Eigeninteraktionen PFEILTASTE-RUNTER
|
||||
if (type != "Fraktion" && type != "Gruppe") return;
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_AcceptInvite")]
|
||||
public void InteractionMenuAcceptInvite(Player player, string type)
|
||||
if (type == "Fraktion") // Fraktions Invite annehmen
|
||||
{
|
||||
if (!player.HasData("accept_faction_invite"))
|
||||
{
|
||||
if (type != "Fraktion" && type != "Gruppe") return;
|
||||
|
||||
if (type == "Fraktion") // Fraktions Invite annehmen
|
||||
{
|
||||
if (!player.HasData("accept_faction_invite"))
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du hast keine Einladung in eine Fraktion erhalten");
|
||||
return;
|
||||
}
|
||||
ChatService.ErrorMessage(player, "Du hast keine Einladung in eine Fraktion erhalten");
|
||||
return;
|
||||
}
|
||||
|
||||
Player leader = NAPI.Player.GetPlayerFromName(player.GetData<string>("accept_faction_invite"));
|
||||
player.ResetData("accept_faction_invite");
|
||||
|
||||
if (leader == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Die Einladung ist abgelaufen");
|
||||
return;
|
||||
}
|
||||
if (leader == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Die Einladung ist abgelaufen");
|
||||
return;
|
||||
}
|
||||
|
||||
using (var dbContext = new DatabaseContext(true))
|
||||
{
|
||||
@@ -64,8 +67,8 @@ namespace ReallifeGamemode.Server.Managers
|
||||
.Where(r => r.FactionId == own.FactionId)
|
||||
.FirstOrDefault();
|
||||
|
||||
ChatService.SendMessage(leader, "!{02FCFF}" + player.Name + " hat die Einladung angenommen.");
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast die Einladung angenommen.");
|
||||
ChatService.SendMessage(leader, "!{02FCFF}" + player.Name + " hat die Einladung angenommen.");
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast die Einladung angenommen.");
|
||||
|
||||
switch (own.FactionId)
|
||||
{
|
||||
@@ -86,186 +89,186 @@ namespace ReallifeGamemode.Server.Managers
|
||||
break;
|
||||
}
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
else if (type == "Gruppe") // Gruppen Einladung annehmen
|
||||
{
|
||||
if (!player.HasData("accept_group_invite"))
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du hast keine Einladung in eine Gruppe erhalten");
|
||||
return;
|
||||
}
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
else if (type == "Gruppe") // Gruppen Einladung annehmen
|
||||
{
|
||||
if (!player.HasData("accept_group_invite"))
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du hast keine Einladung in eine Gruppe erhalten");
|
||||
return;
|
||||
}
|
||||
|
||||
Player leader = NAPI.Player.GetPlayerFromName(player.GetData<string>("accept_group_invite"));
|
||||
player.ResetData("accept_group_invite");
|
||||
|
||||
if (leader == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Die Einladung ist abgelaufen");
|
||||
return;
|
||||
}
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
User u = leader.GetUser(dbContext);
|
||||
User own = player.GetUser(dbContext);
|
||||
|
||||
own.Group = u.Group;
|
||||
own.GroupRank = GroupRank.MEMBER;
|
||||
|
||||
ChatService.SendMessage(leader, "!{02FCFF}" + player.Name + " hat die Einladung angenommen.");
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast die Einladung angenommen.");
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
if (leader == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Die Einladung ist abgelaufen");
|
||||
return;
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_EndShow")]
|
||||
public void InteractionMenuEndShow(Player client)
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
client.ResetData("ShowActive");
|
||||
User u = leader.GetUser(dbContext);
|
||||
User own = player.GetUser(dbContext);
|
||||
|
||||
own.Group = u.Group;
|
||||
own.GroupRank = GroupRank.MEMBER;
|
||||
|
||||
ChatService.SendMessage(leader, "!{02FCFF}" + player.Name + " hat die Einladung angenommen.");
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast die Einladung angenommen.");
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_EndShow")]
|
||||
public void InteractionMenuEndShow(Player client)
|
||||
{
|
||||
client.ResetData("ShowActive");
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_Show")]
|
||||
public void InteractionMenuShow(Player player, string type, string nameOrId)
|
||||
{
|
||||
if (type != "License")
|
||||
return;
|
||||
|
||||
Player target = PlayerService.GetPlayerByNameOrId(nameOrId);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(player);
|
||||
return;
|
||||
}
|
||||
|
||||
User targetUser = target.GetUser();
|
||||
User playerUser = player.GetUser();
|
||||
|
||||
if (type == "License")
|
||||
{
|
||||
if (!playerUser.DriverLicenseBike && !playerUser.DriverLicenseVehicle && !playerUser.FlyingLicensePlane && !playerUser.WeaponLicense)
|
||||
{
|
||||
player.SendNotification("~r~Sie besitzen keine Scheine!");
|
||||
return;
|
||||
}
|
||||
if (player.Position.DistanceTo(target.Position) > 5)
|
||||
return;
|
||||
|
||||
if (target.HasData("ShowActive"))
|
||||
{
|
||||
player.SendNotification("Spieler ist beschäftigt.");
|
||||
return;
|
||||
}
|
||||
target.SetData("ShowActive", true);
|
||||
List<bool> licenses = new List<bool>();
|
||||
licenses.Add(playerUser.DriverLicenseVehicle);
|
||||
licenses.Add(playerUser.DriverLicenseBike);
|
||||
licenses.Add(playerUser.FlyingLicensePlane);
|
||||
licenses.Add(playerUser.WeaponLicense);
|
||||
target.TriggerEvent("ShowLicenses", player.Name, licenses.ToArray());
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_Invite")]
|
||||
public void InteractionMenuInviteFaction(Player player, string type, string nameOrId)
|
||||
{
|
||||
if (type != "Fraktion" && type != "Gruppe") return;
|
||||
|
||||
Player target = PlayerService.GetPlayerByNameOrId(nameOrId);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(player);
|
||||
return;
|
||||
}
|
||||
|
||||
User targetUser = target.GetUser();
|
||||
User playerUser = player.GetUser();
|
||||
|
||||
if (type == "Fraktion")
|
||||
{
|
||||
if (playerUser?.FactionId == null || playerUser?.FactionLeader == false)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_Show")]
|
||||
public void InteractionMenuShow(Player player, string type, string nameOrId)
|
||||
if (targetUser?.FactionId != null)
|
||||
{
|
||||
if (type != "License")
|
||||
return;
|
||||
|
||||
Player target = PlayerService.GetPlayerByNameOrId(nameOrId);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(player);
|
||||
return;
|
||||
}
|
||||
|
||||
User targetUser = target.GetUser();
|
||||
User playerUser = player.GetUser();
|
||||
|
||||
if (type == "License")
|
||||
{
|
||||
if (!playerUser.DriverLicenseBike && !playerUser.DriverLicenseVehicle && !playerUser.FlyingLicensePlane && !playerUser.WeaponLicense)
|
||||
{
|
||||
player.SendNotification("~r~Sie besitzen keine Scheine!");
|
||||
return;
|
||||
}
|
||||
if (player.Position.DistanceTo(target.Position) > 5)
|
||||
return;
|
||||
|
||||
if (target.HasData("ShowActive"))
|
||||
{
|
||||
player.SendNotification("Spieler ist beschäftigt.");
|
||||
return;
|
||||
}
|
||||
target.SetData("ShowActive", true);
|
||||
List<bool> licenses = new List<bool>();
|
||||
licenses.Add(playerUser.DriverLicenseVehicle);
|
||||
licenses.Add(playerUser.DriverLicenseBike);
|
||||
licenses.Add(playerUser.FlyingLicensePlane);
|
||||
licenses.Add(playerUser.WeaponLicense);
|
||||
target.TriggerEvent("ShowLicenses", player.Name, licenses.ToArray());
|
||||
}
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist schon in einer Fraktion");
|
||||
return;
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_Invite")]
|
||||
public void InteractionMenuInviteFaction(Player player, string type, string nameOrId)
|
||||
{
|
||||
if (type != "Fraktion" && type != "Gruppe") return;
|
||||
|
||||
Player target = PlayerService.GetPlayerByNameOrId(nameOrId);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(player);
|
||||
return;
|
||||
}
|
||||
|
||||
User targetUser = target.GetUser();
|
||||
User playerUser = player.GetUser();
|
||||
|
||||
if (type == "Fraktion")
|
||||
{
|
||||
if (playerUser?.FactionId == null || playerUser?.FactionLeader == false)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetUser?.FactionId != null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist schon in einer Fraktion");
|
||||
return;
|
||||
}
|
||||
|
||||
target.SetData("accept_faction_invite", player.Name);
|
||||
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast dem Spieler " + target.Name + " eine Einladung in deine Fraktion gesendet.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Du hast von " + player.Name + " eine Einladung in die Fraktion \"" + playerUser.Faction.Name + "\" erhalten.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Benutze das Interaktionsmenü, um die Einladung anzunehmen");
|
||||
}
|
||||
else if (type == "Gruppe")
|
||||
{
|
||||
if (playerUser?.Group == null || playerUser.GroupRank < GroupRank.MANAGER)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast dem Spieler " + target.Name + " eine Einladung in deine Fraktion gesendet.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Du hast von " + player.Name + " eine Einladung in die Fraktion \"" + playerUser.Faction.Name + "\" erhalten.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Benutze das Interaktionsmenü, um die Einladung anzunehmen");
|
||||
}
|
||||
else if (type == "Gruppe")
|
||||
{
|
||||
if (playerUser?.Group == null || playerUser.GroupRank < GroupRank.MANAGER)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetUser?.Group != null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist schon in einer Gruppe");
|
||||
return;
|
||||
}
|
||||
if (targetUser?.Group != null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist schon in einer Gruppe");
|
||||
return;
|
||||
}
|
||||
|
||||
target.SetData("accept_group_invite", player.Name);
|
||||
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast dem Spieler " + target.Name + " eine Einladung in deine Gruppe gesendet.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Du hast von " + player.Name + " eine Einladung in die Gruppe \"" + playerUser.Group.Name + "\" erhalten.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Benutze das Interaktionsmenü, um die Einladung anzunehmen");
|
||||
}
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast dem Spieler " + target.Name + " eine Einladung in deine Gruppe gesendet.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Du hast von " + player.Name + " eine Einladung in die Gruppe \"" + playerUser.Group.Name + "\" erhalten.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Benutze das Interaktionsmenü, um die Einladung anzunehmen");
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_Uninvite")]
|
||||
public void InteractionMenuInviteGroup(Player player, string type, string name)
|
||||
{
|
||||
if (type != "Fraktion" && type != "Gruppe") return;
|
||||
|
||||
Player target = PlayerService.GetPlayerByNameOrId(name);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(player);
|
||||
return;
|
||||
}
|
||||
|
||||
User targetUser = target.GetUser();
|
||||
User playerUser = player.GetUser();
|
||||
|
||||
if (type == "Fraktion")
|
||||
{
|
||||
if (playerUser?.FactionId == null || playerUser.FactionLeader == false)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_Uninvite")]
|
||||
public void InteractionMenuInviteGroup(Player player, string type, string name)
|
||||
if (targetUser?.FactionId != playerUser?.FactionId)
|
||||
{
|
||||
if (type != "Fraktion" && type != "Gruppe") return;
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist nicht in deiner Fraktion");
|
||||
return;
|
||||
}
|
||||
|
||||
Player target = PlayerService.GetPlayerByNameOrId(name);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(player);
|
||||
return;
|
||||
}
|
||||
if (player.Handle == target.Handle)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten");
|
||||
return;
|
||||
}
|
||||
|
||||
User targetUser = target.GetUser();
|
||||
User playerUser = player.GetUser();
|
||||
|
||||
if (type == "Fraktion")
|
||||
{
|
||||
if (playerUser?.FactionId == null || playerUser.FactionLeader == false)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetUser?.FactionId != playerUser?.FactionId)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist nicht in deiner Fraktion");
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.Handle == target.Handle)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten");
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetUser?.FactionLeader ?? false)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst keinen Leader uninviten");
|
||||
return;
|
||||
}
|
||||
if (targetUser?.FactionLeader ?? false)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst keinen Leader uninviten");
|
||||
return;
|
||||
}
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
@@ -290,92 +293,93 @@ namespace ReallifeGamemode.Server.Managers
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetUser?.Group.Id != playerUser?.Group.Id)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist nicht in deiner Fraktion");
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.Handle == target.Handle)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten");
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetUser?.GroupRank >= GroupRank.MANAGER && playerUser?.GroupRank != GroupRank.OWNER)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst keinen Leader uninviten");
|
||||
return;
|
||||
}
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
target.GetUser(dbContext).Group = null;
|
||||
target.GetUser(dbContext).GroupRank = GroupRank.NONE;
|
||||
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Gruppe geworfen.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Gruppe geworfen.");
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
if (targetUser?.Group.Id != playerUser?.Group.Id)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Dieser Spieler ist nicht in deiner Fraktion");
|
||||
return;
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_CallService_Taxi")]
|
||||
public void CallServiceTaxi(Player player, string street, string zone)
|
||||
if (player.Handle == target.Handle)
|
||||
{
|
||||
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
|
||||
|
||||
if (taxiJob.TaxiContracts.Where(t => t.Name == player.Name).Count() != 0)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst nur einmal ein Taxi rufen");
|
||||
return;
|
||||
}
|
||||
|
||||
taxiJob.TaxiContracts.Add(new TaxiContract()
|
||||
{
|
||||
Name = player.Name,
|
||||
Position = player.Position
|
||||
});
|
||||
|
||||
string msg = $"!{{02FCFF}}{player.Name} hat in der Straße {street} in {zone} ein Taxi gerufen.";
|
||||
ChatService.BroadcastJob(msg, taxiJob);
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast erfolgreich ein Taxi zu deiner aktuellen Position gerufen.");
|
||||
ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten");
|
||||
return;
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_VehicleInteraction")]
|
||||
public void VehicleInteraction(Player player, int id, string selection)
|
||||
if (targetUser?.GroupRank >= GroupRank.MANAGER && playerUser?.GroupRank != GroupRank.OWNER)
|
||||
{
|
||||
using var dbContext = new DatabaseContext(true);
|
||||
var user = player.GetUser(dbContext);
|
||||
ChatService.ErrorMessage(player, "Du kannst keinen Leader uninviten");
|
||||
return;
|
||||
}
|
||||
|
||||
var userVehicle = dbContext.UserVehicles.Where(v => v.Id == id && v.UserId == user.Id).FirstOrDefault();
|
||||
if (userVehicle == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Das Fahrzeug wurde nicht gefunden");
|
||||
}
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
target.GetUser(dbContext).Group = null;
|
||||
target.GetUser(dbContext).GroupRank = GroupRank.NONE;
|
||||
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Gruppe geworfen.");
|
||||
ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Gruppe geworfen.");
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_CallService_Taxi")]
|
||||
public void CallServiceTaxi(Player player, string street, string zone)
|
||||
{
|
||||
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
|
||||
|
||||
if (taxiJob.TaxiContracts.Where(t => t.Name == player.Name).Count() != 0)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst nur einmal ein Taxi rufen");
|
||||
return;
|
||||
}
|
||||
|
||||
taxiJob.TaxiContracts.Add(new TaxiContract()
|
||||
{
|
||||
Name = player.Name,
|
||||
Position = player.Position
|
||||
});
|
||||
|
||||
string msg = $"!{{02FCFF}}{player.Name} hat in der Straße {street} in {zone} ein Taxi gerufen.";
|
||||
ChatService.BroadcastJob(msg, taxiJob);
|
||||
ChatService.SendMessage(player, "!{02FCFF}Du hast erfolgreich ein Taxi zu deiner aktuellen Position gerufen.");
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_VehicleInteraction")]
|
||||
public void VehicleInteraction(Player player, int id, string selection)
|
||||
{
|
||||
using var dbContext = new DatabaseContext(true);
|
||||
var user = player.GetUser(dbContext);
|
||||
|
||||
var userVehicle = dbContext.UserVehicles.Where(v => v.Id == id && v.UserId == user.Id).FirstOrDefault();
|
||||
if (userVehicle == null)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Das Fahrzeug wurde nicht gefunden");
|
||||
}
|
||||
|
||||
GTANetworkAPI.Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(userVehicle);
|
||||
|
||||
if (selection == "Finden")
|
||||
{
|
||||
player.TriggerEvent("SERVER:Util_setWaypoint", veh.Position.X, veh.Position.Y);
|
||||
}
|
||||
else if (selection == "Verkaufen")
|
||||
{
|
||||
var vehPrice = dbContext.ShopVehicles.Where(v => v.Model == userVehicle.Model).Select(v => v.Price).FirstOrDefault();
|
||||
var backPrice = (int)(vehPrice * 0.6);
|
||||
if (selection == "Finden")
|
||||
{
|
||||
player.TriggerEvent("SERVER:Util_setWaypoint", veh.Position.X, veh.Position.Y);
|
||||
}
|
||||
else if (selection == "Verkaufen")
|
||||
{
|
||||
var vehPrice = dbContext.ShopVehicles.Where(v => v.Model == userVehicle.Model).Select(v => v.Price).FirstOrDefault();
|
||||
var backPrice = (int)(vehPrice * 0.6);
|
||||
|
||||
user.BankAccount.Balance += backPrice;
|
||||
user.BankAccount.Balance += backPrice;
|
||||
|
||||
ChatService.SendMessage(player, $"~b~[INFO]~s~ Du hast durch den Autoverkauf ~g~{backPrice.ToMoneyString()}~s~ erhalten.");
|
||||
ChatService.SendMessage(player, $"~b~[INFO]~s~ Du hast durch den Autoverkauf ~g~{backPrice.ToMoneyString()}~s~ erhalten.");
|
||||
|
||||
dbContext.UserVehicles.Remove(userVehicle);
|
||||
dbContext.SaveChanges();
|
||||
dbContext.UserVehicles.Remove(userVehicle);
|
||||
dbContext.SaveChanges();
|
||||
|
||||
veh.Delete();
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_LSPD_Ticket3")]
|
||||
public void InteractionMenu_LSPD_Ticket3(Player player, string jsonNameOrId, string stringAmount, string jsonReason)
|
||||
{
|
||||
@@ -411,6 +415,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_LSPD_Points3")]
|
||||
public void InteractionMenu_LSPD_Points3(Player player, string jsonNameOrId, string jsoAmount, string jsonReason)
|
||||
{
|
||||
@@ -489,6 +494,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("CLIENT:InteractionMenu_Ticket")]
|
||||
public void InteractionMenuTicket(Player target, string type, int ticket_amount)
|
||||
{
|
||||
@@ -551,58 +557,58 @@ namespace ReallifeGamemode.Server.Managers
|
||||
player.TriggerEvent("openTradeMenu", targetPlayer);
|
||||
}
|
||||
|
||||
[RemoteEvent("sendTradeItemsToPartner")]
|
||||
public void SendTradeItemsToPartner(Player player, string tradeItemArray, int tradePrize, string tradePartnerName)
|
||||
{
|
||||
var tradeItems = JsonConvert.DeserializeObject<string[][]>(tradeItemArray);
|
||||
Player tradePartner = PlayerService.GetPlayerByNameOrId(tradePartnerName);
|
||||
InventoryManager.GetUserItems(player);
|
||||
tradePartner.TriggerEvent("showTradeRequest", player.Name, tradeItems, tradePrize);
|
||||
player.TriggerEvent("startTradeRequestTimer");
|
||||
}
|
||||
|
||||
[RemoteEvent("tradeDecision")]
|
||||
public void TradeDecision(Player player, string tradeSelection, string tradeItemArray, string tradeRequesterName, int tradePrize)
|
||||
{
|
||||
var tradeItems = JsonConvert.DeserializeObject<string[][]>(tradeItemArray);
|
||||
Player tradeRequester = PlayerService.GetPlayerByNameOrId(tradeRequesterName);
|
||||
if (tradeSelection == "accept")
|
||||
{
|
||||
if (player.GetUser().Handmoney < tradePrize)
|
||||
{
|
||||
tradeRequester.TriggerEvent("unlockTradeItems");
|
||||
tradeRequester.SendNotification("~y~" + player.Name + " ~r~hat nicht genügend Bargeld! ~s~Handel abgebrochen.");
|
||||
player.SendNotification("~r~Du hast nicht genügend Bargeld! ~s~Handel abgebrochen.");
|
||||
}
|
||||
else
|
||||
{
|
||||
InventoryManager.GetUserItems(player);
|
||||
tradeRequester.TriggerEvent("clearTradeItems");
|
||||
player.TriggerEvent("showTradeItems", tradeItemArray);
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
var playerUserId = player.GetUser().Id;
|
||||
var tradeRUserId = tradeRequester.GetUser().Id;
|
||||
var playerUser = dbContext.Users.FirstOrDefault(u => u.Id == playerUserId);
|
||||
var tradeRequesterUser = dbContext.Users.FirstOrDefault(u => u.Id == tradeRUserId);
|
||||
|
||||
playerUser.Handmoney -= tradePrize;
|
||||
player.TriggerEvent("SERVER:WORLD_INTERACTION:UPDATE_HANDMONEY", playerUser.Handmoney);
|
||||
|
||||
tradeRequesterUser.Handmoney += tradePrize;
|
||||
tradeRequester.TriggerEvent("SERVER:WORLD_INTERACTION:UPDATE_HANDMONEY", tradeRequesterUser.Handmoney);
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tradeRequester.TriggerEvent("unlockTradeItems");
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Spielerinteraktionen PFEILTASTE-LINKS
|
||||
[RemoteEvent("sendTradeItemsToPartner")]
|
||||
public void SendTradeItemsToPartner(Player player, string tradeItemArray, int tradePrize, string tradePartnerName)
|
||||
{
|
||||
var tradeItems = JsonConvert.DeserializeObject<string[][]>(tradeItemArray);
|
||||
Player tradePartner = PlayerService.GetPlayerByNameOrId(tradePartnerName);
|
||||
InventoryManager.GetUserItems(player);
|
||||
tradePartner.TriggerEvent("showTradeRequest", player.Name, tradeItems, tradePrize);
|
||||
player.TriggerEvent("startTradeRequestTimer");
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("tradeDecision")]
|
||||
public void TradeDecision(Player player, string tradeSelection, string tradeItemArray, string tradeRequesterName, int tradePrize)
|
||||
{
|
||||
var tradeItems = JsonConvert.DeserializeObject<string[][]>(tradeItemArray);
|
||||
Player tradeRequester = PlayerService.GetPlayerByNameOrId(tradeRequesterName);
|
||||
if (tradeSelection == "accept")
|
||||
{
|
||||
if (player.GetUser().Handmoney < tradePrize)
|
||||
{
|
||||
tradeRequester.TriggerEvent("unlockTradeItems");
|
||||
tradeRequester.SendNotification("~y~" + player.Name + " ~r~hat nicht genügend Bargeld! ~s~Handel abgebrochen.");
|
||||
player.SendNotification("~r~Du hast nicht genügend Bargeld! ~s~Handel abgebrochen.");
|
||||
}
|
||||
else
|
||||
{
|
||||
InventoryManager.GetUserItems(player);
|
||||
tradeRequester.TriggerEvent("clearTradeItems");
|
||||
player.TriggerEvent("showTradeItems", tradeItemArray);
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
var playerUserId = player.GetUser().Id;
|
||||
var tradeRUserId = tradeRequester.GetUser().Id;
|
||||
var playerUser = dbContext.Users.FirstOrDefault(u => u.Id == playerUserId);
|
||||
var tradeRequesterUser = dbContext.Users.FirstOrDefault(u => u.Id == tradeRUserId);
|
||||
|
||||
playerUser.Handmoney -= tradePrize;
|
||||
player.TriggerEvent("SERVER:WORLD_INTERACTION:UPDATE_HANDMONEY", playerUser.Handmoney);
|
||||
|
||||
tradeRequesterUser.Handmoney += tradePrize;
|
||||
tradeRequester.TriggerEvent("SERVER:WORLD_INTERACTION:UPDATE_HANDMONEY", tradeRequesterUser.Handmoney);
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tradeRequester.TriggerEvent("unlockTradeItems");
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Spielerinteraktionen PFEILTASTE-LINKS
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,23 +161,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
|
||||
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);
|
||||
}
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -196,25 +180,10 @@ namespace ReallifeGamemode.Server.Managers
|
||||
dbContext.Remove(vehicleItem);
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
List<UserItem> itemList = GetUserItems(player);
|
||||
Vehicle vehicle = sVeh.GetVehicle();
|
||||
List<VehicleItem> itemList = GetVehicleItems(vehicle);
|
||||
if (itemList == null) return;
|
||||
|
||||
if (!vehicleItems.ContainsKey(player))
|
||||
vehicleItems.Add(player, new List<InventoryItem>());
|
||||
|
||||
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 = GetUserInventoryWeight(player),
|
||||
};
|
||||
vehicleItems[player].Add(newItem);
|
||||
}
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -596,6 +565,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
context.UserItems.Remove(fItem);
|
||||
}
|
||||
context.SaveChanges();
|
||||
SetBackpackItems(player);
|
||||
player.TriggerEvent("aproveThrow", amount, iItem.Name);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
153
ReallifeGamemode.Server/Util/AttachmentSync.cs
Normal file
153
ReallifeGamemode.Server/Util/AttachmentSync.cs
Normal file
@@ -0,0 +1,153 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
|
||||
public static class AttachmentSync
|
||||
{
|
||||
/// <summary>
|
||||
/// Adds/Removes an attachment for an entity
|
||||
/// </summary>
|
||||
/// <param name="entity">The entity to attach the object to</param>
|
||||
/// <param name="attachment">The attachment, should be in string or long type</param>
|
||||
/// <param name="remove">Pass true to remove the specified attachment, false otherwise.</param>
|
||||
public static void AddAttachment(this Entity entity, dynamic attachment, bool remove)
|
||||
{
|
||||
if (!entity.HasData("Attachments"))
|
||||
entity.SetData("Attachments", new List<uint>());
|
||||
|
||||
List<uint> currentAttachments = entity.GetData<List<uint>>("Attachments");
|
||||
|
||||
uint attachmentHash = 0;
|
||||
|
||||
if (attachment.GetType() == typeof(string))
|
||||
attachmentHash = NAPI.Util.GetHashKey(attachment);
|
||||
else
|
||||
attachmentHash = Convert.ToUInt32(attachment);
|
||||
|
||||
if (attachmentHash == 0)
|
||||
{
|
||||
Console.WriteLine($"Attachment hash couldn't be found for { attachment }");
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentAttachments.IndexOf(attachmentHash) == -1) // if current attachment hasn't already been added
|
||||
{
|
||||
if (!remove) // if it needs to be added
|
||||
{
|
||||
currentAttachments.Add(attachmentHash);
|
||||
}
|
||||
}
|
||||
else if (remove) // if it was found and needs to be removed
|
||||
{
|
||||
currentAttachments.Remove(attachmentHash);
|
||||
}
|
||||
|
||||
// send updated data to playerside
|
||||
entity.SetSharedData("attachmentsData", currentAttachments.Serialize());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if an entity has a certain attachment
|
||||
/// </summary>
|
||||
/// <param name="entity">The entity to check</param>
|
||||
/// <param name="attachment">The attachment to look for</param>
|
||||
/// <returns>True if attachment was found, false otherwise</returns>
|
||||
public static bool HasAttachment(this Entity entity, dynamic attachment)
|
||||
{
|
||||
if (!entity.HasData("Attachments"))
|
||||
return false;
|
||||
|
||||
List<uint> currentAttachments = entity.GetData<List<uint>>("Attachments");
|
||||
|
||||
uint attachmentHash = 0;
|
||||
|
||||
if (attachment.GetType() == typeof(string))
|
||||
attachmentHash = NAPI.Util.GetHashKey(attachment);
|
||||
else
|
||||
attachmentHash = Convert.ToUInt32(attachment);
|
||||
|
||||
if (attachmentHash == 0)
|
||||
{
|
||||
Console.WriteLine($"Attachment hash couldn't be found for { attachment }");
|
||||
return false;
|
||||
}
|
||||
|
||||
return currentAttachments.IndexOf(attachmentHash) != -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears the entity's current attachments
|
||||
/// </summary>
|
||||
/// <param name="entity">The entity to clear the attachments of</param>
|
||||
public static void ClearAttachments(this Entity entity)
|
||||
{
|
||||
if (!entity.HasData("Attachments"))
|
||||
return;
|
||||
|
||||
List<uint> currentAttachments = entity.GetData<List<uint>>("Attachments");
|
||||
|
||||
if (currentAttachments.Count > 0)
|
||||
{
|
||||
for (int i = currentAttachments.Count - 1; i >= 0; i--)
|
||||
{
|
||||
entity.AddAttachment(currentAttachments[i], true);
|
||||
}
|
||||
}
|
||||
|
||||
entity.ResetSharedData("attachmentsData");
|
||||
entity.SetData("Attachments", new List<uint>());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serializes a list of attachments
|
||||
/// </summary>
|
||||
/// <param name="attachments">a list of attachments in uint type</param>
|
||||
/// <returns>serialized attachment string</returns>
|
||||
public static string Serialize(this List<uint> attachments)
|
||||
{
|
||||
return string.Join('|', attachments.Select(a => Base36Extensions.ToBase36(a)).ToArray());
|
||||
}
|
||||
}
|
||||
|
||||
public class AttachmentSyncExample : Script
|
||||
{
|
||||
//REQUIRED
|
||||
[ServerEvent(Event.PlayerConnected)]
|
||||
public void OnPlayerConnect(Player player)
|
||||
{
|
||||
// reset data on connect
|
||||
player.ClearAttachments();
|
||||
player.TriggerEvent("SERVER:LoadAttachments");
|
||||
}
|
||||
|
||||
//REQUIRED
|
||||
[RemoteEvent("staticAttachments.Add")]
|
||||
private void OnStaticAttachmentAdd(Player player, string hash)
|
||||
{
|
||||
player.AddAttachment(Base36Extensions.FromBase36(hash), false);
|
||||
}
|
||||
|
||||
//REQUIRED
|
||||
[RemoteEvent("staticAttachments.Remove")]
|
||||
private void OnStaticAttachmentRemove(Player player, string hash)
|
||||
{
|
||||
player.AddAttachment(Base36Extensions.FromBase36(hash), true);
|
||||
}
|
||||
|
||||
[Command("xdd")]
|
||||
public void attachment(Player player)
|
||||
{
|
||||
Vehicle veh = player.Vehicle;
|
||||
if (!veh.HasAttachment("weapondeal"))
|
||||
{
|
||||
veh.AddAttachment("weapondeal", false);
|
||||
//veh.AddAttachment("weapondeal1", false);
|
||||
//veh.AddAttachment("weapondeal2", false);
|
||||
}
|
||||
else
|
||||
{
|
||||
veh.ClearAttachments();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user