OverHaul Bus and Pilot TEST

This commit is contained in:
2021-04-10 01:32:12 +02:00
parent cb020aa007
commit b51756a045
14 changed files with 836 additions and 1336 deletions

View File

@@ -32,6 +32,7 @@ export default function elevatorList(globalData: IGlobalData) {
globalData.InMenu = true;
stages = JSON.parse(stagesArr);
stage = stages[0];
elevatorMenu = new Menu("Aufzug", "", new Point(0, screenRes.y / 3), null, null);

View File

@@ -362,24 +362,24 @@ export default function (globalData: IGlobalData) {
var busLevel;
if (jobdata.pilotskill >= 300) {
pilotLevel = 2;
pilotLevel = "Fortgeschrittener";
} else {
pilotLevel = 1;
pilotLevel = "Anfänger";
}
if (jobdata.busskill >= 800) {
busLevel = 3;
busLevel = "Profi";
} else if (jobdata.busskill >= 300) {
busLevel = 2;
busLevel = "Fortgeschrittener";
} else {
busLevel = 1;
busLevel = "Anfänger";
}
var actJobItem = new UIMenuItem("Aktueller Job:");
actJobItem.SetRightLabel(jobdata.job)
jobMenu.AddItem(actJobItem);
var pilotSkillItem = new UIMenuItem("Pilot Skill (LVL " + pilotLevel + ")");
var pilotSkillItem = new UIMenuItem("Pilot Skill (" + pilotLevel + ")");
switch (pilotLevel) {
case 1:
pilotSkillItem.SetRightLabel(jobdata.pilotskill + "/300")
@@ -390,7 +390,7 @@ export default function (globalData: IGlobalData) {
}
jobMenu.AddItem(pilotSkillItem);
var busSkillItem = new UIMenuItem("Bus Skill (LVL " + busLevel + ")");
var busSkillItem = new UIMenuItem("Bus Skill (" + busLevel + ")");
switch (busLevel) {
case 1:
busSkillItem.SetRightLabel(jobdata.busskill + "/300")

View File

@@ -32,7 +32,7 @@ export default function busRouteList(globalData: IGlobalData) {
skillSelect = ["Anfänger", "Fortgeschrittener", "Profi"];
routeMenu = new Menu("Bus Job", "", new Point(0, screenRes.y / 3), null, null);
routeMenu.AddItem(new UIMenuListItem("Skill wählen", "", new ItemsCollection(skillSelect)));
routeMenu.AddItem(new UIMenuListItem("Route wählen", "", new ItemsCollection(skillSelect)));
routeMenu.AddItem(sendItem);
routeMenu.AddItem(cancelItem);
@@ -49,10 +49,21 @@ export default function busRouteList(globalData: IGlobalData) {
routeMenu.ItemSelect.on((item) => {
if (item.Text === "Starten") {
if (routeSelect == skillSelect[1] && skill < 300) {
mp.game.audio.playSoundFrontend(1, "Hack_Failed", "DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS", true);
return;
}
if (routeSelect == skillSelect[2] && skill < 800) {
mp.game.audio.playSoundFrontend(1, "Hack_Failed", "DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS", true);
return;
}
mp.events.callRemote("CLIENT:StartBusRoute", routeSelect);
routeMenu.Close();
globalData.InMenu = false;
} else if (item.Text === "Abbrechen") {
mp.events.callRemote("CLIENT:Job_StopJob");
routeMenu.Close();
globalData.InMenu = false;
}

View File

@@ -474,7 +474,8 @@ namespace ReallifeGamemode.Server.Commands
string adminPlayername = NAPI.Player.GetPlayerName(player);
ChatService.SendMessage(target, "~r~KICKINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gekickt: " + reason);
NAPI.Task.Run(() => {
NAPI.Task.Run(() =>
{
target.Kick();
}, 2500);
@@ -790,7 +791,8 @@ namespace ReallifeGamemode.Server.Commands
ChatService.SendMessage(target, "~r~KICKINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gekickt: " + reason);
NAPI.Task.Run(() => {
NAPI.Task.Run(() =>
{
target.Kick();
}, 2500);
@@ -852,7 +854,7 @@ namespace ReallifeGamemode.Server.Commands
}
[Command("ban", "~m~Benutzung: ~s~/ban [User] [Grund] [Zeit in Minuten(0 für Permanent)]", GreedyArg = true)]
public void CmdAdminBan(Player admin, string user, string reason, int mins = 0)
public void CmdAdminBan(Player admin, string user, string reason, string strmins = "0")
{
if (!admin.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
@@ -860,6 +862,12 @@ namespace ReallifeGamemode.Server.Commands
return;
}
if (!int.TryParse(strmins, out int mins) && mins < 0)
{
ChatService.ErrorMessage(admin, "Ungültige Zeitangabe");
return;
}
Player target = PlayerService.GetPlayerByNameOrId(user);
if (target == null || !target.IsLoggedIn())
@@ -886,7 +894,8 @@ namespace ReallifeGamemode.Server.Commands
ChatService.SendMessage(target, banMessage);
NAPI.Task.Run(() => {
NAPI.Task.Run(() =>
{
target.GetUser().BanPlayer(admin, reason, mins);
}, 2500);
}

View File

@@ -233,60 +233,58 @@ namespace ReallifeGamemode.Server.Events
if (nearestBehindVehiclePoint != null)
{
if (player.HasAttachment("ammobox")) return;
using (var dbContext = new DatabaseContext())
using var dbContext = new DatabaseContext();
List<VehicleItem> vehicleItems = dbContext.VehicleItems.ToList().Where(f => f.GetVehicle().GetVehicle() == nearestBehindVehiclePoint.vehicle && InventoryManager.GetItemById(f.ItemId) is IWeaponDealItem).ToList();
if (vehicleItems.Count == 0)
{
List<VehicleItem> vehicleItems = dbContext.VehicleItems.ToList().Where(f => f.GetVehicle().GetVehicle() == nearestBehindVehiclePoint.vehicle && InventoryManager.GetItemById(f.ItemId) is IWeaponDealItem).ToList();
if (vehicleItems.Count == 0)
GTANetworkAPI.Vehicle vehicle = nearestBehindVehiclePoint.vehicle;
if (vehicle.HasAttachment("weapondeal"))
{
GTANetworkAPI.Vehicle vehicle = nearestBehindVehiclePoint.vehicle;
if (vehicle.HasAttachment("weapondeal"))
{
vehicle.AddAttachment("weapondeal", true);
vehicle.AddAttachment("weapondeal1", true);
vehicle.AddAttachment("weapondeal2", true);
}
if (WeaponDealManager.checkWeaponDbyVehicle(vehicle))
{
vehicle.ResetData("WeaponDealLoad");
vehicle.ResetData("weaponDeal");
vehicle.ResetData("dealPoint");
}
nearestBehindVehiclePoint.vehicle.RemoveMarkerBehind();
return;
vehicle.AddAttachment("weapondeal", true);
vehicle.AddAttachment("weapondeal1", true);
vehicle.AddAttachment("weapondeal2", true);
}
foreach (var v in vehicleItems)
if (WeaponDealManager.checkWeaponDbyVehicle(vehicle))
{
int itemToAdd = 0;
for (int i = 1; i <= v.Amount; i++)
vehicle.ResetData("WeaponDealLoad");
vehicle.ResetData("weaponDeal");
vehicle.ResetData("dealPoint");
}
nearestBehindVehiclePoint.vehicle.RemoveMarkerBehind();
return;
}
foreach (var v in vehicleItems)
{
int itemToAdd = 0;
for (int i = 1; i <= v.Amount; i++)
{
if (InventoryManager.GetUserInventoryWeight(player) + (i * InventoryManager.GetItemById(v.ItemId).Gewicht) > 40000)
{
if (InventoryManager.GetUserInventoryWeight(player) + (i * InventoryManager.GetItemById(v.ItemId).Gewicht) > 40000)
{
break;
}
else
{
itemToAdd = i;
}
}
if (itemToAdd == 0)
break;
v.Amount -= itemToAdd;
if (v.Amount <= 0)
{
itemToAdd += v.Amount;
dbContext.VehicleItems.Remove(v);
}
InventoryManager.AddItemToInventory(player, v.ItemId, itemToAdd);
nearestBehindVehiclePoint.usePoint(player);
dbContext.SaveChanges();
return;
else
{
itemToAdd = i;
}
}
if (itemToAdd == 0)
break;
v.Amount -= itemToAdd;
if (v.Amount <= 0)
{
itemToAdd += v.Amount;
dbContext.VehicleItems.Remove(v);
}
InventoryManager.AddItemToInventory(player, v.ItemId, itemToAdd);
nearestBehindVehiclePoint.usePoint(player);
dbContext.SaveChanges();
return;
}
}
if (nearestDuty != null)// Duty Point
@@ -553,57 +551,31 @@ namespace ReallifeGamemode.Server.Events
{
if (player.Vehicle != null) return;
Job.JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1);
JobManager jobb = new JobManager();
if (nearestJobPoint.jobId != 3 && nearestJobPoint.jobId == player.GetUser().JobId)
JobManager jobManager = new JobManager();
if (nearestJobPoint.jobId == player.GetUser().JobId)
{
if (job.GetUsersInJob().Contains(player))
{
jobb.StopJob(player);
jobManager.StopJob(player);
return;
}
if (!job.GetUsersInJob().Contains(player))
{
jobb.StartJobEvent(player);
player.TriggerEvent("renderTextOnScreen", "Steige nun in eines der Fahrzeuge und starte den Motor mit der Taste 'N'.");
return;
}
}
else if (nearestJobPoint.jobId == 3 && player.GetUser().JobId == 3)
{
if (nearestJobPoint.Skill < 300 && player.GetUser().PilotSkill >= 0)
{
if (job.GetUsersInJob().Contains(player))
if (player.GetUser().JobId == 3)
{
player.SetData("PilotenBase", 1);
jobb.StopJob(player);
return;
if (nearestJobPoint.Skill > user.PilotSkill)
{
player.SendChatMessage("~y~[JOB] ~r~Dein Skilllevel ist noch zu niedrig.");
return;
}
jobManager.StartJobEvent(player);
job.StartJob(player);
JobManager.GetJob<PilotJob>().StartPilotRoute(player, nearestJobPoint.Skill);
}
if (!job.GetUsersInJob().Contains(player))
else
{
player.SetData("PilotenBase", 1);
jobb.StartJobEvent(player);
player.TriggerEvent("renderTextOnScreen", "Steige nun in eines der Flugzeuge und starte den Motor mit der Taste 'N'.");
return;
jobManager.StartJobEvent(player);
}
}
if (nearestJobPoint.Skill >= 300 && player.GetUser().PilotSkill >= 300)
{
if (job.GetUsersInJob().Contains(player))
{
player.SetData("PilotenBase", 2);
jobb.StopJob(player);
return;
}
if (!job.GetUsersInJob().Contains(player))
{
player.SetData("PilotenBase", 2);
jobb.StartJobEvent(player);
player.TriggerEvent("renderTextOnScreen", "Steige nun in eines der Flugzeuge und starte den Motor mit der Taste 'N'.");
return;
}
}
{
player.SendChatMessage("~y~[JOB] ~r~Dein Skilllevel ist noch zu niedrig.");
return;
}
}
@@ -850,88 +822,6 @@ namespace ReallifeGamemode.Server.Events
player.SendNotification("~y~[JOB] ~w~Du musst den Job vorher starten!");
return;
}
else
{
/*if(player.IsAdminDuty())
{
player.SendChatMessage("");
}*/
if (jV.JobId == 3 && player.GetUser().JobId == 3 && jV.GetJob().GetUsersInJob().Contains(player))
{
Job.PilotJob c = new Job.PilotJob();
if ((VehicleHash)jV.Model == VehicleHash.Cuban800 && !state)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartPilotRoute(player, "RouteStart");
}
}
if ((VehicleHash)jV.Model == VehicleHash.Velum && !state || (VehicleHash)jV.Model == VehicleHash.Velum2 && !state)
{
if (player.GetUser().PilotSkill >= 300)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartPilotRoute(player, "RouteStart");
}
}
else
{
player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(2) ");
return;
}
}
}
if (jV.JobId == 4 && player.GetUser().JobId == 4 && jV.GetJob().GetUsersInJob().Contains(player))
{
Job.BusDriverJob c = new Job.BusDriverJob();
if ((VehicleHash)jV.Model == VehicleHash.Bus && !state)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartBusRoute(player, "RouteStart");
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45);
}
}
if ((VehicleHash)jV.Model == VehicleHash.Coach && !state)
{
if (player.GetUser().BusSkill >= 300)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartBusRoute(player, "RouteStart");
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45);
}
}
else
{
player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(2) ");
return;
}
}
if ((VehicleHash)jV.Model == VehicleHash.Tourbus && !state)
{
if (player.GetUser().BusSkill >= 800)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartBusRoute(player, "RouteStart");
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45);
}
}
else
{
player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(3) ");
return;
}
}
}
}
}
}
else if (sV is UserVehicle uV)

View File

@@ -77,88 +77,6 @@ namespace ReallifeGamemode.Server.Events
player.SendNotification("~y~[JOB] ~w~Du musst den Job vorher starten!");
return;
}
else
{
/*if(player.IsAdminDuty())
{
player.SendChatMessage("");
}*/
if (jV.JobId == 3 && player.GetUser().JobId == 3 && jV.GetJob().GetUsersInJob().Contains(player))
{
Job.PilotJob c = new Job.PilotJob();
if ((VehicleHash)jV.Model == VehicleHash.Cuban800 && !state)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartPilotRoute(player, "RouteStart");
}
}
if ((VehicleHash)jV.Model == VehicleHash.Velum && !state || (VehicleHash)jV.Model == VehicleHash.Velum2 && !state)
{
if (player.GetUser().PilotSkill >= 300)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartPilotRoute(player, "RouteStart");
}
}
else
{
player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(2) ");
return;
}
}
}
if (jV.JobId == 4 && player.GetUser().JobId == 4 && jV.GetJob().GetUsersInJob().Contains(player))
{
Job.BusDriverJob c = new Job.BusDriverJob();
if ((VehicleHash)jV.Model == VehicleHash.Bus && !state)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartBusRoute(player, "RouteStart");
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45);
}
}
if ((VehicleHash)jV.Model == VehicleHash.Coach && !state)
{
if (player.GetUser().BusSkill >= 300)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartBusRoute(player, "RouteStart");
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45);
}
}
else
{
player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(2) ");
return;
}
}
if ((VehicleHash)jV.Model == VehicleHash.Tourbus && !state)
{
if (player.GetUser().BusSkill >= 800)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartBusRoute(player, "RouteStart");
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45);
}
}
else
{
player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(3) ");
return;
}
}
}
}
}
}
else if (sV is UserVehicle uV)
@@ -170,7 +88,6 @@ namespace ReallifeGamemode.Server.Events
}
}
VehicleStreaming.SetEngineState(v, !state);
}
}
@@ -227,7 +144,7 @@ namespace ReallifeGamemode.Server.Events
{
ServerVehicle carlocked = v.GetServerVehicle(dbContext);
if(state == true)
if (state == true)
{
carlocked.Locked = true;
dbContext.SaveChanges();
@@ -238,7 +155,7 @@ namespace ReallifeGamemode.Server.Events
dbContext.SaveChanges();
}
}
player.SendNotification(msg);
player.SendNotification(msg);
}
else if (!player.IsInVehicle)
{

View File

@@ -7,6 +7,7 @@ using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Util;
using ReallifeGamemode.Database.Entities;
using System.Linq;
namespace ReallifeGamemode.Server.Job
{
@@ -16,29 +17,34 @@ namespace ReallifeGamemode.Server.Job
public override string Name => "Busfahrer";
public static Dictionary<Player, Vehicle> playerBusPair = new Dictionary<Player, Vehicle>();
public static Dictionary<string, List<Vector3>> playerRoutePair = new Dictionary<string, List<Vector3>>();
private const int MARKER_DELAY = 4000;
private const int MARKER_ID = 1;
private const int MARKER_SIZE = 7;
private const int MARKER_DIST = 6;
private const string MARKER_EVENT = "busDriverJob";
public static Dictionary<string, List<Vector3>> playerRoutePair1 = new Dictionary<string, List<Vector3>>(); //skill 1
public static Dictionary<string, List<Vector3>> playerRoutePair2 = new Dictionary<string, List<Vector3>>(); //skill 2
public static Dictionary<string, List<Vector3>> playerRoutePair3 = new Dictionary<string, List<Vector3>>(); //skill 3
private const uint VEHICLE_BEGINNER = (uint)VehicleHash.Bus;
private const uint VEHICLE_INTERMEDIATE = (uint)VehicleHash.Coach;
private const uint VEHICLE_PROFESSIONAL = (uint)VehicleHash.Tourbus;
public static Dictionary<string, List<Vector3>> playerRouteCurrent = new Dictionary<string, List<Vector3>>();
private const string BEGINNER = "Anfänger";
private const string INTERMEDIATE = "Fortgeschrittener";
private const string PROFESSIONAL = "Profi";
public const int MARKER_DELAY = 4000;
public const int MARKER_ID = 1;
public const int MARKER_SIZE = 7;
public const int MARKER_DIST = 6;
public const string MARKER_EVENT = "BUSJOB:BusInCheckpoint";
private const int SKILL_BEGINNER = 0;
private const int SKILL_INTERMEDIATE = 300;
private const int SKILL_PROFESSIONAL = 800;
public const uint VEHICLE_BEGINNER = (uint)VehicleHash.Bus;
public const uint VEHICLE_INTERMEDIATE = (uint)VehicleHash.Coach;
public const uint VEHICLE_PROFESSIONAL = (uint)VehicleHash.Tourbus;
public const int WAGE_BEGINNER = 800;
public const int WAGE_INTERMEDIATE = 1200;
public const int WAGE_PROFESSIOAL = 1800;
public const string BEGINNER = "Anfänger";
public const string INTERMEDIATE = "Fortgeschrittener";
public const string PROFESSIONAL = "Profi";
public const int SKILL_BEGINNER = 0;
public const int SKILL_INTERMEDIATE = 300;
public const int SKILL_PROFESSIONAL = 800;
private const int WAGE_BEGINNER = 800;
private const int WAGE_INTERMEDIATE = 1200;
private const int WAGE_PROFESSIOAL = 1800;
//-623.76, -2083.1008, 5.9822865
private static int spawnIndex = 0;
@@ -51,7 +57,7 @@ namespace ReallifeGamemode.Server.Job
new Vector3(-598.5143, -2207.357, 5.988893),
};
private const float VEHICLE_HEADING = 47; //6.618084f;
private const float VEHICLE_HEADING = 50; //6.618084f;
public override bool NeedVehicleToStart => false;
@@ -60,7 +66,7 @@ namespace ReallifeGamemode.Server.Job
{ 1,
new List<Vector3>()
{
new Vector3(-601.733, -2049.285, 6.090),
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(-1018.1577758789062, -2732.403564453125, 10.658967971801758) ,
new Vector3(-153.04013061523438, -2033.8385009765625, 19.712543487548828) ,
new Vector3(50.42457580566406, -1536.9090576171875, 26.184476852416992) ,
@@ -76,7 +82,7 @@ namespace ReallifeGamemode.Server.Job
{ 2,
new List<Vector3>()
{
new Vector3(-601.733, -2049.285, 6.090),
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(-567.6445922851562, -1233.4453125, 12.050300598144531),
new Vector3(-509.224609375, -668.373291015625, 30.02402877807617),
new Vector3(55.00559997558594, -749.8328247070312, 41.11421203613281),
@@ -92,7 +98,7 @@ namespace ReallifeGamemode.Server.Job
{ 3,
new List<Vector3>()
{
new Vector3(-601.733, -2049.285, 6.090),
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(423.4793395996094, -2143.4169921875, 15.23659896850586),
new Vector3(875.1618041992188, -1766.7913818359375, 26.780052185058594),
new Vector3(1166.110107421875, -1422.72265625, 31.477935791015625),
@@ -108,7 +114,7 @@ namespace ReallifeGamemode.Server.Job
{ 4,
new List<Vector3>()
{
new Vector3(-601.733, -2049.285, 6.090),
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(-694.1781616210938, -1199.3873291015625, 7.50633716583252),
new Vector3(-1408.264892578125, -567.5278930664062, 27.21875),
new Vector3(-1681.6112060546875, -503.3702392578125, 34.79117965698242),
@@ -129,7 +135,7 @@ namespace ReallifeGamemode.Server.Job
{ 1,
new List<Vector3>()
{
new Vector3(-601.733, -2049.285, 6.090),
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(-1042.6405029296875, -2718.244384765625, 9.493847846984863),
new Vector3(832.205322265625, -11.559977531433105, 76.72754669189453),
new Vector3(2563.96826171875, 2633.976806640625, 35.279945373535156),
@@ -144,7 +150,7 @@ namespace ReallifeGamemode.Server.Job
{ 2,
new List<Vector3>()
{
new Vector3(-601.733, -2049.285, 6.090),
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(1925.767333984375, 2614.566162109375, 46.16560363769531),
new Vector3(299.0667419433594, 2642.93798828125, 44.60177993774414),
new Vector3(1162.4556884765625, 1806.3663330078125, 74.3133773803711),
@@ -157,7 +163,7 @@ namespace ReallifeGamemode.Server.Job
{ 3,
new List<Vector3>()
{
new Vector3(-601.733, -2049.285, 6.090),
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(-1855.54,153.604,79.0297),
new Vector3(-1538.72,1375.19,124.3),
new Vector3(-1101.74,2668.48,17.7363),
@@ -170,7 +176,7 @@ namespace ReallifeGamemode.Server.Job
{ 4,
new List<Vector3>()
{
new Vector3(-601.733, -2049.285, 6.090),
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(-1037.8,-2716.02,12.7963),
new Vector3(1662.69,4849.72,40.9165),
new Vector3(57.8575,3735.46,38.7301),
@@ -189,7 +195,7 @@ namespace ReallifeGamemode.Server.Job
{ 1,
new List<Vector3>()
{
new Vector3(-601.733, -2049.285, 6.090),
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(-598.849365234375, -2053.087646484375, 5.8428778648376465),
new Vector3(-229.679931640625, -2049.821533203125, 27.384798049926758),
new Vector3(-72.33480834960938, -615.8173217773438, 35.91234588623047),
@@ -213,7 +219,7 @@ namespace ReallifeGamemode.Server.Job
{ 2,
new List<Vector3>()
{
new Vector3(-601.733, -2049.285, 6.090),
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(-597.8766479492188, -2053.534423828125, 5.853154182434082),
new Vector3(-895.4871826171875, -2074.380126953125, 8.602267265319824),
new Vector3(-667.8001708984375, -1233.9366455078125, 10.274462699890137),
@@ -231,7 +237,7 @@ namespace ReallifeGamemode.Server.Job
{ 3,
new List<Vector3>()
{
new Vector3(-601.733, -2049.285, 6.090),
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(-146.62071, -2178.8228, 9.194298),
new Vector3(14.580393, -1578.6385, 28.212185),
new Vector3(222.91612, -1098.8556, 28.227453),
@@ -249,7 +255,7 @@ namespace ReallifeGamemode.Server.Job
public BusDriverJob()
{
JobStart += BusDriverJob_JobStart;
JobStop += BusDriverJob_JobStop;
JobStop += _JobStop;
}
private void BusDriverJob_JobStart(Player player)
@@ -258,13 +264,44 @@ namespace ReallifeGamemode.Server.Job
player.TriggerEvent("SERVER:StartBusJob", user.BusSkill);
}
private void BusDriverJob_JobStop(Player player)
private void _JobStop(Player player)
{
if (!playerBusPair.ContainsKey(player))
if (!playerVehiclePair.ContainsKey(player))
return;
playerBusPair[player].Delete();
playerBusPair.Remove(player);
playerVehiclePair[player].Delete();
playerVehiclePair.Remove(player);
}
public string getPlayerRouteType(Player player)
{
if (!playerRouteCurrent.ContainsKey(player.Name))
return "none";
List<Vector3> selectedRoute = playerRouteCurrent[player.Name];
if (ROUTE_BEGINNER.Values.Where(v => v.Equals(selectedRoute)) != null)
return BEGINNER;
else if (ROUTE_INTERMEDIATE.Values.Where(v => v.Equals(selectedRoute)) != null)
return INTERMEDIATE;
else if (ROUTE_PROFESSIONAL.Values.Where(v => v.Equals(selectedRoute)) != null)
return PROFESSIONAL;
return "none";
}
private uint getPlayerJobVehicle(Player player)
{
string type = getPlayerRouteType(player);
if (type == BEGINNER)
return VEHICLE_BEGINNER;
else if (type == INTERMEDIATE)
return VEHICLE_INTERMEDIATE;
else if (type == PROFESSIONAL)
return VEHICLE_PROFESSIONAL;
return 0;
}
[RemoteEvent("CLIENT:StartBusRoute")]
@@ -275,39 +312,37 @@ namespace ReallifeGamemode.Server.Job
if (type == PROFESSIONAL && user.BusSkill < SKILL_PROFESSIONAL) { player.TriggerEvent("MenuSelect:Error"); return; }
List<Vector3> selectedRoute = new List<Vector3>();
Vehicle vehicle = null;
Vector3 spawnPoint = VEHICLE_SPAWNS[spawnIndex++ % VEHICLE_SPAWNS.Count];
if (playerRoutePair.ContainsKey(player.Name))
if (playerRouteCurrent.ContainsKey(player.Name))
{
selectedRoute = playerRoutePair[player.Name];
if (ROUTE_BEGINNER.ContainsValue(selectedRoute))
vehicle = NAPI.Vehicle.CreateVehicle(VEHICLE_BEGINNER, spawnPoint, VEHICLE_HEADING, 111, 111, "JOB");
else if (ROUTE_INTERMEDIATE.ContainsValue(selectedRoute))
vehicle = NAPI.Vehicle.CreateVehicle(VEHICLE_INTERMEDIATE, spawnPoint, VEHICLE_HEADING, 111, 111, "JOB");
else if (ROUTE_PROFESSIONAL.ContainsValue(selectedRoute))
vehicle = NAPI.Vehicle.CreateVehicle(VEHICLE_PROFESSIONAL, spawnPoint, VEHICLE_HEADING, 111, 111, "JOB");
selectedRoute = playerRouteCurrent[player.Name];
}
else
{
Random random = new Random();
if (type == BEGINNER)
{
selectedRoute = ROUTE_BEGINNER.GetValueOrDefault(random.Next(1, ROUTE_BEGINNER.Count));
vehicle = NAPI.Vehicle.CreateVehicle(VEHICLE_BEGINNER, spawnPoint, VEHICLE_HEADING, 111, 111, "JOB");
if (playerRoutePair1.ContainsKey(player.Name))
selectedRoute = playerRoutePair1[player.Name];
else
selectedRoute = ROUTE_BEGINNER.GetValueOrDefault(random.Next(1, ROUTE_BEGINNER.Count));
}
else if (type == INTERMEDIATE)
{
selectedRoute = ROUTE_INTERMEDIATE.GetValueOrDefault(random.Next(1, ROUTE_INTERMEDIATE.Count));
vehicle = NAPI.Vehicle.CreateVehicle(VEHICLE_INTERMEDIATE, spawnPoint, VEHICLE_HEADING, 111, 111, "JOB");
if (playerRoutePair2.ContainsKey(player.Name))
selectedRoute = playerRoutePair2[player.Name];
else
selectedRoute = ROUTE_INTERMEDIATE.GetValueOrDefault(random.Next(1, ROUTE_INTERMEDIATE.Count));
}
else if (type == PROFESSIONAL)
{
selectedRoute = ROUTE_PROFESSIONAL.GetValueOrDefault(random.Next(1, ROUTE_PROFESSIONAL.Count));
vehicle = NAPI.Vehicle.CreateVehicle(VEHICLE_PROFESSIONAL, spawnPoint, VEHICLE_HEADING, 111, 111, "JOB");
if (playerRoutePair3.ContainsKey(player.Name))
selectedRoute = playerRoutePair3[player.Name];
else
selectedRoute = ROUTE_PROFESSIONAL.GetValueOrDefault(random.Next(1, ROUTE_PROFESSIONAL.Count));
}
playerRoutePair.Add(player.Name, selectedRoute);
playerRouteCurrent.Add(player.Name, selectedRoute);
}
if (selectedRoute.Count is 0)
@@ -316,15 +351,27 @@ namespace ReallifeGamemode.Server.Job
return;
}
Vector3 spawnPoint = VEHICLE_SPAWNS[spawnIndex++ % VEHICLE_SPAWNS.Count];
Vehicle vehicle = NAPI.Vehicle.CreateVehicle(getPlayerJobVehicle(player), spawnPoint, VEHICLE_HEADING, 111, 111, "JOB");
vehicle.NumberPlate = "JOB-" + vehicle.Id;
if (vehicle is null)
{
Console.WriteLine($"[ERROR:BUSJOB] Player {player.Name} got no Vehicle set.");
return;
}
if (playerVehiclePair.ContainsKey(player))
{
playerVehiclePair.Remove(player);
if (playerVehiclePair[player] != null)
playerVehiclePair[player].Delete();
}
playerVehiclePair.Add(player, vehicle);
player.SetIntoVehicle(vehicle.Handle, 0);
player.StartCheckPointRoute(selectedRoute, 0, MARKER_ID, MARKER_SIZE, MARKER_DIST, true, "BusInCheckpoint");
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/FahrplanAbfahrt", "wav", 15);
player.StartCheckPointRoute(selectedRoute, MARKER_DELAY, MARKER_ID, MARKER_SIZE, MARKER_DIST, true, MARKER_EVENT);
#region delete
@@ -463,217 +510,205 @@ namespace ReallifeGamemode.Server.Job
#endregion delete
}
[RemoteEvent("BusInCheckpoint")]
public void BusInCheckpoint(Player player)
public override void LastCheckpoint(Player player)
{
if (!playerBusPair.ContainsKey(player) || !playerRoutePair.ContainsKey(player.Name))
return;
using var dbcontext = new DatabaseContext();
User user = player.GetUser(dbcontext);
if (playerBusPair[player].Model is VEHICLE_BEGINNER)
user.Wage += (WAGE_BEGINNER / playerRoutePair[player.Name].Count);
else if (playerBusPair[player].Model is VEHICLE_INTERMEDIATE)
user.Wage += (WAGE_INTERMEDIATE / playerRoutePair[player.Name].Count);
else if (playerBusPair[player].Model is VEHICLE_PROFESSIONAL)
user.Wage += (WAGE_PROFESSIOAL / playerRoutePair[player.Name].Count);
dbcontext.SaveChanges();
}
public static void payWage(Player jobber, int wage)
{
using (var dbContext = new DatabaseContext())
{
if (jobber.VehicleSeat == 0)
{
jobber.GetUser(dbContext).Wage += wage;
//jobber.SendNotification($"~y~[JOB] ~g~+{wage}$");
jobber.GetUser(dbContext).BusSkill++;
dbContext.SaveChanges();
if (jobber.GetUser(dbContext).BusSkill == 300)
{
jobber.SendChatMessage($"~y~Job: ~w~Du hast nun ~g~Skill-Level 2 ~w~erreicht!");
jobber.SendChatMessage($"~y~Job: ~w~Du kannst jetzt auch mit dem Coach fahren!");
}
if (jobber.GetUser(dbContext).BusSkill == 800)
{
jobber.SendChatMessage($"~y~Job: ~w~Du hast nun ~g~Skill-Level 3 ~w~erreicht!");
jobber.SendChatMessage($"~y~Job: ~w~Du kannst jetzt mit dem Coach und dem Tourbus fahren!");
}
}
else
{
JobBase job = JobManager.GetJob(jobber.GetUser().JobId ?? -1);
job.StopJob(jobber);
CheckPointHandle.DeleteCheckpoints(jobber);
ChatService.SendMessage(jobber, $"~y~Job:~s~ Du hast deinen Job (~o~{job.Name}~s~) beendet.");
}
//BusLetzterCheckpoint(jobber);
//BusDriverJob rt = null;
//rt.BusLetzterCheckpoint()
}
}
[RemoteEvent("BusLetzterCheckpoint")]
public static void BusLetzterCheckpoint(Player player)
{
BusDriverJob c = new BusDriverJob();
Vehicle v = player.Vehicle;
player.SendChatMessage("~y~Job: ~w~Die neue Route lädt. Bitte warten...");
player.SendChatMessage("~y~[Job]: ~w~Die neue Route lädt. Bitte warten...");
NAPI.Task.Run(() =>
{
if (player.VehicleSeat == 0)
{
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/FahrplanAbfahrt", "wav", 15);
c.StartBusRoute(player, "RouteStart");
}
else
{
Vehicle LastVehicle = player.GetData<Vehicle>("LastVehicle");
JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1);
if (LastVehicle.GetServerVehicle() is JobVehicle vehJ)
{
if (LastVehicle.GetData<bool>("timerJobVehicleRespawn") == true)
{
if (vehJ.GetJob().GetUsersInJob().Contains(player))
{
if (LastVehicle != null)
{
LastVehicle.ResetData("timerJobVehicleRespawn");
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(LastVehicle);
ServerVehicleExtensions.Spawn(sVeh, LastVehicle);
job.StopJob(player);
ChatService.SendMessage(player, $"~y~Job:~s~ Du hast deinen Job (~o~{job.Name}~s~) beendet.");
CheckPointHandle.DeleteCheckpoints(player);
if (!player.HasData("isDead") || player.GetData<bool>("isDead") == false)
{
if (player.GetUser().JobId == 3)//Pilot
{
if (!player.HasData("PilotenBase") || player.GetData<int>("PilotenBase") == 1) //Sandyshores
{
player.Position = new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406);
player.Heading = (-154.65234375f);
}
if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 2) //LS Airport
{
player.Position = new Vector3(-1622.48, -3151.58, 13);
player.Heading = (48.44f);
}
}
if (player.GetUser().JobId == 4)//Busfahrer
{
player.Position = new Vector3(-535.46, -2144.97, 5.95);
player.Heading = (57.03f);
}
}
}
}
}
}
}
/*if (v.Model == (uint)Types.VehicleModel.Bus)
{
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/FahrplanAbfahrt", "wav", 15);
Random rnd = new Random();
int rroute = rnd.Next(1, 5);
switch (rroute)
{
case 1:
{
c.StartBusRoute(player, "Skill1Route1");
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 1");
break;
}
case 2:
{
c.StartBusRoute(player, "Skill1Route2");
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 2");
break;
}
case 3:
{
c.StartBusRoute(player, "Skill1Route3");
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 3");
break;
}
case 4:
{
c.StartBusRoute(player, "Skill1Route4");
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 4");
break;
}
}
}
if (v.Model == (uint)Types.VehicleModel.Coach)
{
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/FahrplanAbfahrt", "wav", 15);
Random rnd = new Random();
int rroute = rnd.Next(1, 5);
switch (rroute)
{
case 1:
{
c.StartBusRoute(player, "Skill2Route1");
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 1");
break;
}
case 2:
{
c.StartBusRoute(player, "Skill2Route2");
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 2");
break;
}
case 3:
{
c.StartBusRoute(player, "Skill2Route3");
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 3");
break;
}
case 4:
{
c.StartBusRoute(player, "Skill2Route4");
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 4");
break;
}
}
}
if (v.Model == (uint)Types.VehicleModel.Tourbus)
{
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/FahrplanAbfahrt", "wav", 15);
Random rnd = new Random();
int rroute = rnd.Next(1, 5);
switch (rroute)
{
case 1:
{
c.StartBusRoute(player, "Skill3Route1");
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 1");
break;
}
case 2:
{
c.StartBusRoute(player, "Skill3Route2");
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 2");
break;
}
case 3:
{
c.StartBusRoute(player, "Skill3Route3");
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 3");
break;
}
case 4:
{
c.StartBusRoute(player, "Skill3Route4");
player.SendChatMessage("~y~Job: ~w~Eine neue Route wurde gesetzt: ~g~Route 4");
break;
}
}
}*/
string type = getPlayerRouteType(player);
List<Vector3> selectedRoute = playerRouteCurrent[player.Name];
if (type == BEGINNER)
playerRoutePair1.Remove(player.Name);
else if (type == INTERMEDIATE)
playerRoutePair2.Remove(player.Name);
else if (type == PROFESSIONAL)
playerRoutePair3.Remove(player.Name);
playerRouteCurrent.Remove(player.Name);
BusDriverJob job = JobManager.GetJob<BusDriverJob>();
StartBusRoute(player, type);
}, delayTime: 10000);
if (!player.IsInVehicle || player.VehicleSeat != 0) return;
Vehicle veh = player.Vehicle;
if (!(veh.GetData<IndicatorData>("indicatorData") is IndicatorData data)) data = new IndicatorData();
data.Left = false;
data.Right = false;
veh.SetData("indicatorData", data);
NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right);
}
public void BusCheckpoint(Player player)
{
if (!player.IsInVehicle || player.VehicleSeat != 0) return;
Vehicle veh = player.Vehicle;
if ((VehicleHash)veh.Model == VehicleHash.Bus)
{
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleBus", "wav", 25);
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 0, false, 1850);
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 1, false, 1850);
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 2, false, 1850);
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 1850);
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 0, false, 1850);
NAPI.Task.Run(() =>
{
player.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
}, delayTime: 1850);
}
if ((VehicleHash)veh.Model == VehicleHash.Coach)
{
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleCoach", "wav", 35);
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 0, false, 1000);
NAPI.Task.Run(() =>
{
player.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
}, delayTime: 1000);
}
if ((VehicleHash)veh.Model == VehicleHash.Tourbus)
{
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleTourbus", "wav", 25);
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 2600);
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 2, false, 2600);
player.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 2600);
NAPI.Task.Run(() =>
{
player.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
}, delayTime: 2600);
}
//user.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
}
public void AtBusStop(Player player)
{
if (!player.IsInVehicle || player.VehicleSeat != 0) return;
Vehicle veh = player.Vehicle;
player.TriggerEvent("CLIENT:FreezeVehicle", veh);
player.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AnfahrtHaltestelle", "wav", 50);
if ((VehicleHash)veh.Model == VehicleHash.Bus)
{
player.TriggerEvent("CLIENT:SetDoorOpen", 0, false, false);
player.TriggerEvent("CLIENT:SetDoorOpen", 1, false, false);
player.TriggerEvent("CLIENT:SetDoorOpen", 2, false, false);
player.TriggerEvent("CLIENT:SetDoorOpen", 3, false, false);
player.TriggerEvent("CLIENT:SetDoorOpen", 0, false, false);
NAPI.Task.Run(() =>
{
BusCheckpoint(player);
}, delayTime: 3600);
}
if ((VehicleHash)veh.Model == VehicleHash.Coach)
{
player.TriggerEvent("CLIENT:SetDoorOpen", 0, false, false);
NAPI.Task.Run(() =>
{
BusCheckpoint(player);
}, delayTime: 2800);
}
if ((VehicleHash)veh.Model == VehicleHash.Tourbus)
{
player.TriggerEvent("CLIENT:SetDoorOpen", 2, false, false);
player.TriggerEvent("CLIENT:SetDoorOpen", 3, false, false);
NAPI.Task.Run(() =>
{
BusCheckpoint(player);
}, delayTime: 3250);
}
if (!(veh.GetData<IndicatorData>("indicatorData") is IndicatorData data)) data = new IndicatorData();
data.Left = false;
data.Right = true;
veh.SetData("indicatorData", data);
NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right);
NAPI.Task.Run(() =>
{
veh.Position = new Vector3(veh.Position.X, veh.Position.Y, veh.Position.Z + 0.1);
player.TriggerEvent("CLIENT:FreezeVehicle", veh);
}, delayTime: 500);
}
public override void StartJobEndTimer(Player player)
{
if (!playerVehiclePair.ContainsKey(player))
return;
if (JobManager.playerTimersJobVehicleRespawn.ContainsKey(player))
{
JobManager.playerTimersJobVehicleRespawn[player].Stop();
}
PlayerTimer playerTimer = new PlayerTimer(player, playerVehiclePair[player], 30000);
playerTimer.Elapsed += JobTimerElapsed;
JobManager.playerTimersJobVehicleRespawn[player] = playerTimer;
player.SendChatMessage("~y~[JOB] ~w~Du hast das Fahrzeug verlassen,");
player.SendChatMessage("~y~[JOB] ~w~Bist du nicht in 30 Sekunden zurück, ~r~wird der Job beendet!");
}
private void JobTimerElapsed(Player player, Vehicle vehicle)
{
NAPI.Task.Run(() =>
{
StopJob(player, !player.GetData<bool>("isDead"));
JobManager.playerTimersJobVehicleRespawn[player].Stop();
JobManager.playerTimersJobVehicleRespawn.Remove(player);
});
}
public override bool CheckVehicle(Player player, Vehicle vehicle)
{
if (!playerVehiclePair.ContainsKey(player))
return false;
if (playerVehiclePair[player] == vehicle)
return true;
return false;
}
}
public class BusJobEvents : Script
{
[RemoteEvent("BUSJOB:BusInCheckpoint")]
public void BusInCheckpoint(Player player)
{
if (!BusDriverJob.playerVehiclePair.ContainsKey(player) || !BusDriverJob.playerRouteCurrent.ContainsKey(player.Name))
return;
if (BusDriverJob.playerVehiclePair[player].Model is BusDriverJob.VEHICLE_BEGINNER)
payWage(player, BusDriverJob.WAGE_BEGINNER / BusDriverJob.playerRouteCurrent[player.Name].Count);
else if (BusDriverJob.playerVehiclePair[player].Model is BusDriverJob.VEHICLE_INTERMEDIATE)
payWage(player, BusDriverJob.WAGE_INTERMEDIATE / BusDriverJob.playerRouteCurrent[player.Name].Count);
else if (BusDriverJob.playerVehiclePair[player].Model is BusDriverJob.VEHICLE_PROFESSIONAL)
payWage(player, BusDriverJob.WAGE_PROFESSIOAL / BusDriverJob.playerRouteCurrent[player.Name].Count);
}
private void payWage(Player player, int wage)
{
using var dbContext = new DatabaseContext();
User user = player.GetUser(dbContext);
if (player.VehicleSeat == 0)
{
user.Wage += wage;
user.BusSkill++;
if (user.BusSkill == BusDriverJob.SKILL_INTERMEDIATE)
{
player.SendChatMessage($"~y~[Job]: ~w~Du hast nun die Route ~g~{BusDriverJob.INTERMEDIATE} ~w~freigeschaltet!");
player.SendChatMessage($"~y~[Job]: ~w~Du kannst jetzt auch mit dem Coach fahren!");
}
if (user.BusSkill == BusDriverJob.SKILL_PROFESSIONAL)
{
player.SendChatMessage($"~y~[Job]: ~w~Du hast nun die Route ~g~{BusDriverJob.PROFESSIONAL} ~w~freigeschaltet!");
player.SendChatMessage($"~y~[Job]: ~w~Du kannst jetzt auch mit dem Tourbus fahren!");
}
BusDriverJob job = JobManager.GetJob<BusDriverJob>();
dbContext.SaveChanges();
}
}
}
}

View File

@@ -5,6 +5,7 @@ using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Managers;
namespace ReallifeGamemode.Server.Job
{
@@ -21,12 +22,20 @@ namespace ReallifeGamemode.Server.Job
private readonly List<Player> _inJob = new List<Player>();
private static readonly List<Player> jobPlayer = new List<Player>();
public static Dictionary<Player, Vehicle> playerVehiclePair = new Dictionary<Player, Vehicle>();
public abstract int Id { get; }
public abstract string Name { get; }
public abstract bool NeedVehicleToStart { get; }
public abstract void LastCheckpoint(Player player);
public abstract void StartJobEndTimer(Player player);
public abstract bool CheckVehicle(Player player, Vehicle veh);
public virtual bool Deactivated => false;
public void StartJob(Player player)
@@ -46,18 +55,10 @@ namespace ReallifeGamemode.Server.Job
_inJob.Remove(player);
jobPlayer.Remove(player);
User user = player.GetUser();
using (var dbContext = new DatabaseContext())
{
user = player.GetUser(dbContext);
user.trashcount -= user.trashcount;
dbContext.SaveChanges();
}
if (quit)
{
ChatService.SendMessage(player, $"~y~[Job]~s~ Du hast deinen Job (~o~{this.Name}~s~) beendet.");
player.Position = JobManager.playerJobStartPosition[player];
}
JobStop?.Invoke(player);
@@ -65,10 +66,8 @@ namespace ReallifeGamemode.Server.Job
public List<JobVehicle> GetJobVehicles()
{
using (var dbContext = new DatabaseContext())
{
return dbContext.JobVehicles.Where(j => j.JobId == Id).ToList();
}
using var dbContext = new DatabaseContext();
return dbContext.JobVehicles.Where(j => j.JobId == Id).ToList();
}
public static List<Player> GetPlayerInJob() => jobPlayer;

View File

@@ -7,6 +7,8 @@ using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Util;
using System.Linq;
using ReallifeGamemode.Database.Entities;
namespace ReallifeGamemode.Server.Job
{
@@ -18,239 +20,224 @@ namespace ReallifeGamemode.Server.Job
private const int CHECKPOINT_MARKER_ID = 6;
public const string BEGINNER = "Anfänger";
public const string INTERMEDIATE = "Fortgeschrittener";
public const string PROFESSIONAL = "Profi";
public const int WAGE_BEGINNER = 350;
public const int WAGE_INTERMEDIATE = 500;
public const uint VEHICLE_BEGINNER = (uint)VehicleHash.Cuban800;
public const uint VEHICLE_INTERMEDIATE = (uint)VehicleHash.Velum2;
public const uint VEHICLE_PROFESSIONAL = (uint)VehicleHash.Submersible;
public static Dictionary<string, List<Vector3>> playerRouteCurrent = new Dictionary<string, List<Vector3>>();
public static int spawnIndex = 0;
public const int SKILL_BEGINNER = 0;
public const int SKILL_INTERMEDIATE = 300;
public override bool NeedVehicleToStart => false;
private readonly IReadOnlyCollection<Vector3> Skill1Route1 = new List<Vector3>//Pilot_Skill_1_Route_1
private readonly Dictionary<Vector3, float> BEGINNER_SPAWNS = new Dictionary<Vector3, float>
{
new Vector3(1645.9910888671875, 3236.744873046875, 40.98052978515625),
new Vector3(302.6805114746094, 2867.93896484375, 204.81182861328125),
new Vector3(-1093.6722412109375, 2737.1376953125, 257.575439453125),
new Vector3(-2286.014892578125, 3019.12841796875, 33.4510498046875),
new Vector3(-2471.854248046875, 3271.08935546875, 33.47834777832031),
new Vector3(-623.9515380859375, 5313.12158203125, 181.6047821044922),
new Vector3(1896.899658203125, 4824.203125, 208.77737426757812),
new Vector3(2281.790283203125, 3606.98681640625, 132.3915252685547),
new Vector3(1610.4461669921875, 3225.36376953125, 41.05073928833008),
}.AsReadOnly();
{ new Vector3(1698.0226, 3261.829, 41.625206), -170},
{ new Vector3(1673.5715, 3255.3167, 41.385006), -170},
{ new Vector3(1652.0725, 3249.6987, 41.194054), -170},
{ new Vector3(1705.3207, 3236.8796, 41.563965), 15},
{ new Vector3(1680.5709, 3230.2217, 41.563965), 52},
};
private readonly IReadOnlyCollection<Vector3> Skill1Route2 = new List<Vector3>//Pilot_Skill_1_Route_2
private readonly Dictionary<Vector3, float> INTERMEDIATE_SPAWNS = new Dictionary<Vector3, float>()
{
new Vector3(1593.927490234375, 3193.30908203125, 41.170997619628906),
new Vector3(961.5843505859375, 2278.5966796875, 251.17218017578125),
new Vector3(924.3920288085938, 93.95357513427734, 282.3033142089844),
new Vector3(963.6002197265625, -3101.551513671875, 177.8121337890625),
new Vector3(-1265.1163330078125, -2990.142578125, 14.595105171203613),
new Vector3(-1260.78662109375, -2806.293212890625, 14.587812423706055),
new Vector3(-894.3707885742188, 82.7993392944336, 385.011962890625),
new Vector3(919.4126586914062, 2553.385986328125, 135.39154052734375),
new Vector3(1592.840087890625, 3192.8017578125, 41.169837951660156),
}.AsReadOnly();
{ new Vector3(-1593.1952, -3081.4019, 15), 153},
{ new Vector3(-1573.7805, -3092.615, 15), 153},
{ new Vector3(-1555-9386, -3102-4492, 15), 150},
{ new Vector3(-1536-6404, -3113-7183, 15), 150},
{ new Vector3(-1517-0101, -3125-2798, 15), 150},
};
private readonly IReadOnlyCollection<Vector3> Skill1Route3 = new List<Vector3>//Pilot_Skill_1_Route_3
{
new Vector3(-850.61, 2181.98, 429.67),
}.AsReadOnly();
//124 0 Velum
private readonly IReadOnlyCollection<Vector3> Skill2Route1 = new List<Vector3>//Pilot_Skill_2_Route_1
private readonly Dictionary<int, List<Vector3>> ROUTE_BEGINNER = new Dictionary<int, List<Vector3>>//Bus_Skill_1_Route_1
{
new Vector3(-1534.98828125, -3028.916748046875, 14.451109886169434),
new Vector3(-1182.960205078125, -3236.542724609375, 67.93492126464844),
new Vector3(942.8041381835938, -2997.95751953125, 323.1705322265625),
new Vector3(2459.114501953125, -525.8928833007812, 409.09002685546875),
new Vector3(2764.611572265625, 1482.853271484375, 457.73944091796875),
new Vector3(3485.380615234375, 3652.9619140625, 343.3283996582031),
new Vector3(2652.611572265625, 4737.7958984375, 206.23399353027344),
new Vector3(2043.8521728515625, 4769.595703125, 42.007118225097656),
new Vector3(2134.332763671875, 4781.857421875, 41.900352478027344),
new Vector3(1943.1544189453125, 4721.03125, 57.76427459716797),
new Vector3(1749.4105224609375, 3790.8955078125, 194.40440368652344),
new Vector3(1203.5526123046875, 2707.182373046875, 342.80145263671875),
new Vector3(-377.686279296875, 1256.92578125, 532.7467651367188),
new Vector3(-820.6907958984375, -412.96466064453125, 311.0726013183594),
new Vector3(-1073.534912109375, -1704.798583984375, 94.05522155761719),
new Vector3(-1686.30126953125, -2815.478759765625, 14.87234115600586),
new Vector3(-1617.498291015625, -2982.41259765625, 14.883989334106445),
}.AsReadOnly();
{ 1,
new List<Vector3>()
{
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(1645.9910888671875, 3236.744873046875, 40.98052978515625),
new Vector3(302.6805114746094, 2867.93896484375, 204.81182861328125),
new Vector3(-1093.6722412109375, 2737.1376953125, 257.575439453125),
new Vector3(-2286.014892578125, 3019.12841796875, 33.4510498046875),
new Vector3(-2471.854248046875, 3271.08935546875, 33.47834777832031),
new Vector3(-623.9515380859375, 5313.12158203125, 181.6047821044922),
new Vector3(1896.899658203125, 4824.203125, 208.77737426757812),
new Vector3(2281.790283203125, 3606.98681640625, 132.3915252685547),
new Vector3(1610.4461669921875, 3225.36376953125, 41.05073928833008),
}
},
{ 2,
new List<Vector3>()
{
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(1593.927490234375, 3193.30908203125, 41.170997619628906),
new Vector3(961.5843505859375, 2278.5966796875, 251.17218017578125),
new Vector3(924.3920288085938, 93.95357513427734, 282.3033142089844),
new Vector3(963.6002197265625, -3101.551513671875, 177.8121337890625),
new Vector3(-1265.1163330078125, -2990.142578125, 14.595105171203613),
new Vector3(-1260.78662109375, -2806.293212890625, 14.587812423706055),
new Vector3(-894.3707885742188, 82.7993392944336, 385.011962890625),
new Vector3(919.4126586914062, 2553.385986328125, 135.39154052734375),
new Vector3(1592.840087890625, 3192.8017578125, 41.169837951660156),
}
},
};
private readonly IReadOnlyCollection<Vector3> Skill2Route2 = new List<Vector3>//Pilot_Skill_2_Route_2
private readonly Dictionary<int, List<Vector3>> ROUTE_INTERMEDIATE = new Dictionary<int, List<Vector3>>
{
new Vector3(-1463.965576171875, -2875.571533203125, 14.882678031921387),
new Vector3(-981.0889282226562, -3122.533203125, 56.10537338256836),
new Vector3(-341.6023254394531, -2016.779541015625, 262.1709899902344),
new Vector3(-1446.6815185546875, -894.4887084960938, 321.3404846191406),
new Vector3(-3151.909912109375, 979.1404418945312, 335.3139953613281),
new Vector3(-1309.160888671875, 4903.9140625, 388.6031494140625),
new Vector3(31.35175895690918, 3690.413330078125, 333.4454345703125),
new Vector3(-948.346923828125, 2766.284912109375, 239.0842742919922),
new Vector3(-2312.5068359375, 3033.903076171875, 33.7471923828125),
new Vector3(-2132.787109375, 3265.840087890625, 33.74031448364258),
new Vector3(-2331.76611328125, 3148.581298828125, 33.7597541809082),
new Vector3(-2564.848876953125, 2369.27783203125, 182.68736267089844),
new Vector3(-1833.041259765625, 832.1589965820312, 398.28863525390625),
new Vector3(-878.19384765625, -904.84521484375, 284.2839050292969),
new Vector3(-1124.624755859375, -1821.9208984375, 74.77794647216797),
new Vector3(-1631.8602294921875, -2720.09814453125, 14.873514175415039),
new Vector3(-1543.793701171875, -2829.399169921875, 14.899491310119629),
}.AsReadOnly();
private readonly IReadOnlyCollection<Vector3> Skill2Route3 = new List<Vector3>//Pilot_Skill_2_Route_3
{
new Vector3(-710.89, -1836.81, 355.46),
}.AsReadOnly();
{ 1,
new List<Vector3>()
{
new Vector3(-1534.98828125, -3028.916748046875, 14.451109886169434),
new Vector3(-1182.960205078125, -3236.542724609375, 67.93492126464844),
new Vector3(942.8041381835938, -2997.95751953125, 323.1705322265625),
new Vector3(2459.114501953125, -525.8928833007812, 409.09002685546875),
new Vector3(2764.611572265625, 1482.853271484375, 457.73944091796875),
new Vector3(3485.380615234375, 3652.9619140625, 343.3283996582031),
new Vector3(2652.611572265625, 4737.7958984375, 206.23399353027344),
new Vector3(2043.8521728515625, 4769.595703125, 42.007118225097656),
new Vector3(2134.332763671875, 4781.857421875, 41.900352478027344),
new Vector3(1943.1544189453125, 4721.03125, 57.76427459716797),
new Vector3(1749.4105224609375, 3790.8955078125, 194.40440368652344),
new Vector3(1203.5526123046875, 2707.182373046875, 342.80145263671875),
new Vector3(-377.686279296875, 1256.92578125, 532.7467651367188),
new Vector3(-820.6907958984375, -412.96466064453125, 311.0726013183594),
new Vector3(-1073.534912109375, -1704.798583984375, 94.05522155761719),
new Vector3(-1686.30126953125, -2815.478759765625, 14.87234115600586),
new Vector3(-1617.498291015625, -2982.41259765625, 14.883989334106445),
}
},
{ 2,
new List<Vector3>()
{
new Vector3(-1463.965576171875, -2875.571533203125, 14.882678031921387),
new Vector3(-981.0889282226562, -3122.533203125, 56.10537338256836),
new Vector3(-341.6023254394531, -2016.779541015625, 262.1709899902344),
new Vector3(-1446.6815185546875, -894.4887084960938, 321.3404846191406),
new Vector3(-3151.909912109375, 979.1404418945312, 335.3139953613281),
new Vector3(-1309.160888671875, 4903.9140625, 388.6031494140625),
new Vector3(31.35175895690918, 3690.413330078125, 333.4454345703125),
new Vector3(-948.346923828125, 2766.284912109375, 239.0842742919922),
new Vector3(-2312.5068359375, 3033.903076171875, 33.7471923828125),
new Vector3(-2132.787109375, 3265.840087890625, 33.74031448364258),
new Vector3(-2331.76611328125, 3148.581298828125, 33.7597541809082),
new Vector3(-2564.848876953125, 2369.27783203125, 182.68736267089844),
new Vector3(-1833.041259765625, 832.1589965820312, 398.28863525390625),
new Vector3(-878.19384765625, -904.84521484375, 284.2839050292969),
new Vector3(-1124.624755859375, -1821.9208984375, 74.77794647216797),
new Vector3(-1631.8602294921875, -2720.09814453125, 14.873514175415039),
new Vector3(-1543.793701171875, -2829.399169921875, 14.899491310119629),
}
},
};
public PilotJob()
{
JobStart += PilotJob_JobStart;
JobStop += _JobStop;
}
private void PilotJob_JobStart(Player player)
private void _JobStop(Player player)
{
/*List<String> listRouteTexts = new List<string>();
List<String> listRouteTexts2 = new List<string>();
if (!playerVehiclePair.ContainsKey(player))
return;
Vehicle veh = player.Vehicle;
playerVehiclePair[player].Delete();
playerVehiclePair.Remove(player);
}
if ((VehicleHash)veh.Model == VehicleHash.Velum || (VehicleHash)veh.Model == VehicleHash.Velum2)
{
listRouteTexts2.Add("Route 4");
listRouteTexts2.Add("Route 5");
listRouteTexts2.Add("Route 6");
public string getSkill(int skillPoints)
{
if (skillPoints == SKILL_BEGINNER)
return BEGINNER;
else if (skillPoints == SKILL_INTERMEDIATE)
return INTERMEDIATE;
player.TriggerEvent("showPilotRouteMenu", JsonConvert.SerializeObject(listRouteTexts2));
}
else
{
listRouteTexts.Add("Route 1");
listRouteTexts.Add("Route 2");
listRouteTexts.Add("Route 3");
return "none";
}
player.TriggerEvent("showPilotRouteMenu", JsonConvert.SerializeObject(listRouteTexts));
}*/
/*Random rnd = new Random();
int rroute = rnd.Next(1, 6);
switch (rroute)
{
case 1:
{
StartPilotRoute(player, "Route 1");
break;
}
case 2:
{
StartPilotRoute(player, "Route 2");
break;
}
case 3:
{
StartPilotRoute(player, "Route 3");
break;
}
case 4:
{
StartPilotRoute(player, "Route 4");
break;
}
case 5:
{
StartPilotRoute(player, "Route 5");
break;
}
}*/
private uint getPlayerJobVehicle(string type)
{
if (type == BEGINNER)
return VEHICLE_BEGINNER;
else if (type == INTERMEDIATE)
return VEHICLE_INTERMEDIATE;
else if (type == PROFESSIONAL)
return VEHICLE_PROFESSIONAL;
return 0;
}
[RemoteEvent("startPilotRoute")]
public void StartPilotRoute(Player player, string type)
public void StartPilotRoute(Player player, int skillPoints)
{
Vehicle veh = player.Vehicle;
if (player.VehicleSeat == 0)
string type = getSkill(skillPoints);
List<Vector3> selectedRoute = new List<Vector3>();
Random random = new Random();
Vector3 spawnPoint = null;
float heading = 0;
if (type == BEGINNER)
{
if (type == "RouteStart")
{
if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 1)
{
Random rnd = new Random();
int rroute = rnd.Next(1, 3);
switch (rroute)
{
case 1:
{
CheckPointHandle.StartCheckPointRoute(player, Skill1Route1, 0, CHECKPOINT_MARKER_ID, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
player.SendChatMessage("~y~Job: ~s~Route wurde gesetzt: ~g~Route 1");
player.SetData("Route", "Skill1Route1");
break;
}
case 2:
{
CheckPointHandle.StartCheckPointRoute(player, Skill1Route2, 0, CHECKPOINT_MARKER_ID, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
player.SendChatMessage("~y~Job: ~s~Route wurde gesetzt: ~g~Route 2");
player.SetData("Route", "Skill1Route2");
break;
}
/*case 3:
{
CheckPointHandle.StartCheckPointRoute(player, Skill1Route3, 0, 26, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
player.SendChatMessage("~y~[JOB] ~w~Route wurde gesetzt: ~g~Route 3");
player.SetData("Route", "Skill1Route3");
break;
}*/
}
}
if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 2)
{
Random rnd = new Random();
int rroute = rnd.Next(1, 3);
switch (rroute)
{
case 1:
{
CheckPointHandle.StartCheckPointRoute(player, Skill2Route1, 0, CHECKPOINT_MARKER_ID, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
player.SendChatMessage("~y~Job: ~s~Route wurde gesetzt: ~g~Route 1");
player.SetData("Route", "Skill2Route1");
break;
}
case 2:
{
CheckPointHandle.StartCheckPointRoute(player, Skill2Route2, 0, CHECKPOINT_MARKER_ID, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
player.SendChatMessage("~y~Job: ~s~Route wurde gesetzt: ~g~Route 2");
player.SetData("Route", "Skill2Route2");
break;
}
/*case 3:
{
CheckPointHandle.StartCheckPointRoute(player, Skill2Route3, 0, 26, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
player.SendChatMessage("~y~[JOB] ~w~Route wurde gesetzt: ~g~Route 3");
player.SetData("Route", "Skill2Route3");
break;
}*/
}
}
}
/*if (type == "Route 1")
{
CheckPointHandle.StartCheckPointRoute(player, Route1, 0, 6, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
}
else if (type == "Route 2")
{
CheckPointHandle.StartCheckPointRoute(player, Route2, 0, 6, 40, 10, true, "pilotJob");
}
else if (type == "Route 3")
{
CheckPointHandle.StartCheckPointRoute(player, Route3, 0, 6, 40, 10, true, "pilotJob");
}
else if (type == "Route 4")
{
CheckPointHandle.StartCheckPointRoute(player, Route4, 0, 6, 40, 10, true, "pilotJob");
}
else if (type == "Route 5")
{
CheckPointHandle.StartCheckPointRoute(player, Route5, 0, 6, 40, 10, true, "pilotJob");
}
else if (type == "Route 6")
{
CheckPointHandle.StartCheckPointRoute(player, Route6, 0, 6, 40, 10, true, "pilotJob");
}*/
spawnPoint = BEGINNER_SPAWNS.Keys.ToList()[spawnIndex++ % BEGINNER_SPAWNS.Count];
heading = BEGINNER_SPAWNS[spawnPoint];
selectedRoute = ROUTE_BEGINNER.GetValueOrDefault(random.Next(1, ROUTE_BEGINNER.Count));
}
else if (type == INTERMEDIATE)
{
spawnPoint = INTERMEDIATE_SPAWNS.Keys.ToList()[spawnIndex++ % INTERMEDIATE_SPAWNS.Count];
heading = INTERMEDIATE_SPAWNS[spawnPoint];
selectedRoute = ROUTE_INTERMEDIATE.GetValueOrDefault(random.Next(1, ROUTE_INTERMEDIATE.Count));
}
if (selectedRoute.Count is 0)
{
Console.WriteLine($"[ERROR:BUSJOB] Player {player.Name} has empty route Vector3 List.");
return;
}
if (spawnPoint is null)
{
Console.WriteLine($"[ERROR:BUSJOB] Player {player.Name} has empty spawn point.");
return;
}
Vehicle vehicle = NAPI.Vehicle.CreateVehicle(getPlayerJobVehicle(type), spawnPoint, heading, 124, 0, "JOB");
vehicle.NumberPlate = "JOB-" + vehicle.Id;
if (vehicle is null)
{
Console.WriteLine($"[ERROR:BUSJOB] Player {player.Name} got no Vehicle set.");
return;
}
if (!playerRouteCurrent.ContainsKey(player.Name))
playerRouteCurrent.Add(player.Name, new List<Vector3>());
playerRouteCurrent[player.Name] = selectedRoute;
if (playerVehiclePair.ContainsKey(player))
{
if (playerVehiclePair[player] != null)
playerVehiclePair[player].Delete();
playerVehiclePair.Remove(player);
}
playerVehiclePair.Add(player, vehicle);
player.SetIntoVehicle(vehicle.Handle, 0);
CheckPointHandle.StartCheckPointRoute(player, selectedRoute, 0, CHECKPOINT_MARKER_ID, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
}
public static void payWage(Player jobber, int wage)
{
using (var dbContext = new DatabaseContext())
@@ -277,64 +264,113 @@ namespace ReallifeGamemode.Server.Job
}
}
[RemoteEvent("PilotLetzterCheckpoint")]
public static void PilotLetzterCheckpoint(Player player)
public string getPlayerRouteType(Player player)
{
PilotJob c = new PilotJob();
Vehicle v = player.Vehicle;
c.StartPilotRoute(player, "RouteStart");
/*if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 1)
if (!playerRouteCurrent.ContainsKey(player.Name))
return "none";
List<Vector3> selectedRoute = playerRouteCurrent[player.Name];
if (ROUTE_BEGINNER.Values.Where(v => v.Equals(selectedRoute)) != null)
return BEGINNER;
else if (ROUTE_INTERMEDIATE.Values.Where(v => v.Equals(selectedRoute)) != null)
return INTERMEDIATE;
return "none";
}
public int getSkillFromType(string type)
{
if (type == BEGINNER)
return SKILL_BEGINNER;
else if (type == INTERMEDIATE)
return SKILL_INTERMEDIATE;
return -1;
}
public override void LastCheckpoint(Player player)
{
string type = getPlayerRouteType(player);
int skill = getSkillFromType(type);
if (skill == -1)
{
Random rnd = new Random();
int rroute = rnd.Next(1, 4);
switch (rroute)
{
case 1:
{
c.StartPilotRoute(player, "Route 1");
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 1");
break;
}
case 2:
{
c.StartPilotRoute(player, "Route 2");
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 2");
break;
}
case 3:
{
c.StartPilotRoute(player, "Route 3");
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 2");
break;
}
}
StopJob(player, true);
return;
}
if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 2)
StartPilotRoute(player, skill);
}
public override void StartJobEndTimer(Player player)
{
if (!playerVehiclePair.ContainsKey(player))
return;
if (JobManager.playerTimersJobVehicleRespawn.ContainsKey(player))
{
Random rnd = new Random();
int rroute = rnd.Next(1, 4);
switch (rroute)
JobManager.playerTimersJobVehicleRespawn[player].Stop();
}
PlayerTimer playerTimer = new PlayerTimer(player, playerVehiclePair[player], 30000);
playerTimer.Elapsed += JobTimerElapsed;
JobManager.playerTimersJobVehicleRespawn[player] = playerTimer;
player.SendChatMessage("~y~[JOB] ~w~Du hast das Fahrzeug verlassen,");
player.SendChatMessage("~y~[JOB] ~w~Bist du nicht in 30 Sekunden zurück, ~r~wird der Job beendet!");
}
private void JobTimerElapsed(Player player, Vehicle vehicle)
{
NAPI.Task.Run(() =>
{
StopJob(player, !player.GetData<bool>("isDead"));
JobManager.playerTimersJobVehicleRespawn[player].Stop();
JobManager.playerTimersJobVehicleRespawn.Remove(player);
});
}
public override bool CheckVehicle(Player player, Vehicle vehicle)
{
if (!playerVehiclePair.ContainsKey(player))
return false;
if (playerVehiclePair[player] == vehicle)
return true;
return false;
}
}
public class PilotJobEvents : Script
{
[RemoteEvent("PILOT:InCheckpoint")]
public void PilotInCheckpoint(Player player)
{
if (!PilotJob.playerVehiclePair.ContainsKey(player) || !PilotJob.playerRouteCurrent.ContainsKey(player.Name))
return;
if (PilotJob.playerVehiclePair[player].Model is PilotJob.VEHICLE_BEGINNER)
payWage(player, PilotJob.WAGE_BEGINNER / PilotJob.playerRouteCurrent[player.Name].Count);
else if (PilotJob.playerVehiclePair[player].Model is PilotJob.VEHICLE_INTERMEDIATE)
payWage(player, PilotJob.WAGE_INTERMEDIATE / PilotJob.playerRouteCurrent[player.Name].Count);
}
private void payWage(Player player, int wage)
{
using var dbContext = new DatabaseContext();
User user = player.GetUser(dbContext);
if (player.VehicleSeat == 0)
{
user.Wage += wage;
user.PilotSkill++;
if (user.PilotSkill == BusDriverJob.SKILL_INTERMEDIATE)
{
case 1:
{
c.StartPilotRoute(player, "Route 4");
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 4");
break;
}
case 2:
{
c.StartPilotRoute(player, "Route 5");
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 5");
break;
}
case 3:
{
c.StartPilotRoute(player, "Route 6");
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 6");
break;
}
player.SendChatMessage($"~y~[Job]: ~w~Du hast nun die Route ~g~{BusDriverJob.INTERMEDIATE} ~w~freigeschaltet!");
player.SendChatMessage($"~y~[Job]: ~w~Du kannst jetzt auch mit dem Coach fahren!");
}
}*/
dbContext.SaveChanges();
}
}
}
}

View File

@@ -8,6 +8,7 @@ using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Util;
namespace ReallifeGamemode.Server.Job
{
@@ -415,5 +416,45 @@ namespace ReallifeGamemode.Server.Job
}
#endregion zweiSpeieler
public override void LastCheckpoint(Player player)
{
//nothing
}
public override void StartJobEndTimer(Player player)
{
if (!playerVehiclePair.ContainsKey(player))
return;
if (JobManager.playerTimersJobVehicleRespawn.ContainsKey(player))
{
JobManager.playerTimersJobVehicleRespawn[player].Stop();
}
PlayerTimer playerTimer = new PlayerTimer(player, playerVehiclePair[player], 60000 * 5);
playerTimer.Elapsed += JobTimerElapsed;
JobManager.playerTimersJobVehicleRespawn[player] = playerTimer;
}
private void JobTimerElapsed(Player player, Vehicle vehicle)
{
NAPI.Task.Run(() =>
{
StopJob(player, !player.GetData<bool>("isDead"));
JobManager.playerTimersJobVehicleRespawn[player].Stop();
JobManager.playerTimersJobVehicleRespawn.Remove(player);
});
}
public override bool CheckVehicle(Player player, Vehicle vehicle)
{
if (!playerVehiclePair.ContainsKey(player))
return false;
if (playerVehiclePair[player] == vehicle)
return true;
return false;
}
}
}

View File

@@ -90,9 +90,9 @@ namespace ReallifeGamemode.Server.Job
if (player.HasData("hasPassager"))
{
User target = dbContext.Users.Where(u => u.Id == targetId).FirstOrDefault();
player.SendNotification("~r~[Info] ~w~ Dein Kunde hat kein Geld mehr auf der Hand.");
player.SendNotification("~r~[Info] ~w~ Dein Kunde hat kein Geld mehr auf der Hand.");
if((target.Handmoney - amount) <= 0)
if ((target.Handmoney - amount) <= 0)
{
Player targetmoney = PlayerService.GetPlayerByNameOrId(Convert.ToString(targetId));
targetmoney.SendNotification("~r~[Fehler] ~w~ Du hast kein Geld mehr auf der Hand.");
@@ -123,11 +123,10 @@ namespace ReallifeGamemode.Server.Job
public static void UpdateFare()
{
foreach (var player in GetPlayerInJob())
{
User u = player.GetUser();
if(u == null)
if (u == null)
{
continue;
}
@@ -157,5 +156,26 @@ namespace ReallifeGamemode.Server.Job
}
}
}
public override void LastCheckpoint(Player player)
{
//nothing
}
public override void StartJobEndTimer(Player player)
{
//nothing
}
public override bool CheckVehicle(Player player, Vehicle vehicle)
{
if (!playerVehiclePair.ContainsKey(player))
return false;
if (playerVehiclePair[player] == vehicle)
return true;
return false;
}
}
}

View File

@@ -19,7 +19,7 @@ namespace ReallifeGamemode.Server.Managers
{
private static List<JobBase> _jobs = new List<JobBase>();
private Dictionary<Player, Vector3> playerJobStartPosition = new Dictionary<Player, Vector3>();
public static Dictionary<Player, Vector3> playerJobStartPosition = new Dictionary<Player, Vector3>();
public static void LoadJobs()
{
@@ -160,68 +160,15 @@ namespace ReallifeGamemode.Server.Managers
if (u.JobId == null) return;
JobBase job = GetJob(u.JobId.Value);
if (veh.GetServerVehicle() is JobVehicle vehJ && player.VehicleSeat == 0)
{
if (vehJ.GetJob().GetUsersInJob().Contains(player))
{
if (u.JobId != 2)
{
if (!player.HasData("JobVehicleFrei") || player.GetData<bool>("JobVehicleFrei") == false)
{
player.SetData("DelayTime", 30000);
veh.SetData("timerJobVehicleRespawn", true);
player.SetData("LastVehicle", veh);
player.SetData("LastSVehicle", sVeh);
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
}
PlayerTimer playerTimer = new PlayerTimer(player, veh, 30000);
playerTimer.Elapsed += PlayerTimer_Elapsed;
playerTimersJobVehicleRespawn[player] = playerTimer;
player.SendChatMessage("~y~[JOB] ~w~Du hast das Fahrzeug verlassen,");
player.SendChatMessage("~y~[JOB] ~w~Bist du nicht in 30 Sekunden zurück, ~r~wird der Job beendet!");
//job.StopJob(player);
return;
}
if (player.HasData("JobVehicleFrei") && player.GetData<bool>("JobVehicleFrei") == true)
{
player.SetData("JobVehicleFrei", false);
return;
}
}
if (u.JobId == 2)
{
if (!player.HasData("JobVehicleFrei") || player.GetData<bool>("JobVehicleFrei") == false)
{
player.SetData("DelayTime", 60000 * 5);
veh.SetData("timerJobVehicleRespawn", true);
player.SetData("LastVehicle", veh);
player.SetData("LastSVehicle", sVeh);
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
}
PlayerTimer playerTimer = new PlayerTimer(player, veh, 60000 * 5);
playerTimer.Elapsed += PlayerTimer_Elapsed;
playerTimersJobVehicleRespawn[player] = playerTimer;
//player.SendChatMessage("~y~[JOB] ~w~Du hast das Fahrzeug verlassen,");
//player.SendChatMessage("~y~[JOB] ~w~Bist du nicht in 30 Sekunden zurück, ~r~wird der Job beendet!");
//job.StopJob(player);
return;
}
if (player.HasData("JobVehicleFrei") && player.GetData<bool>("JobVehicleFrei") == true)
{
player.SetData("JobVehicleFrei", false);
return;
}
}
}
}
JobBase job = GetJob(u.JobId ?? -1);
if (job == null)
return;
job.StartJobEndTimer(player);
}
private void PlayerTimer_Elapsed(Player player, Vehicle veh)
public void PlayerTimer_Elapsed(Player player, Vehicle veh)
{
NAPI.Task.Run(() =>
{
@@ -311,44 +258,7 @@ namespace ReallifeGamemode.Server.Managers
}
job.StopJob(player);
if (player.GetUser().JobId == 1)//Taxifahrer
{
//player.Position = new Vector3(-628.598388671875, -2107.609130859375, 6.072586536407471);
//player.Heading = (-171.50303649902344f);
player.Position = playerJobStartPosition[player];
}
if (player.GetUser().JobId == 2)//Müllmann
{
player.Position = new Vector3(485.4114685058594, -2173.25, 5.918273448944092);
player.Heading = (-15.922085762023926f);
}
if (player.GetUser().JobId == 3)//Pilot
{
if (player.HasData("PilotenBase") || player.GetData<int>("PilotenBase") == 1) //Sandyshores
{
player.Position = new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406);
player.Heading = (-154.65234375f);
player.GetUser().SetData("PilotenBase", 0);
}
if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 2) //LS Airport
{
player.Position = new Vector3(-1622.48, -3151.58, 13);
player.Heading = (48.44f);
player.GetUser().SetData("PilotenBase", 0);
}
}
if (player.GetUser().JobId == 4)//Busfahrer
{
player.Position = new Vector3(-535.46, -2144.97, 5.95);
player.Heading = (57.03f);
}
Vehicle LastVehicle = player.GetData<Vehicle>("LastVehicle");
if (LastVehicle != null && job.Id != GetJob<RefuseCollectorJob>().Id)
{
LastVehicle.ResetData("timerJobVehicleRespawn");
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(LastVehicle);
ServerVehicleExtensions.Spawn(sVeh, LastVehicle);
}
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
@@ -360,181 +270,15 @@ namespace ReallifeGamemode.Server.Managers
[ServerEvent(Event.PlayerEnterVehicle)]
public void JobManagerPlayerEnterVehicle(Player player, Vehicle veh, sbyte seat)
{
ServerVehicle sVeh = veh.GetServerVehicle();
if (sVeh == null)
{
return;
}
if (seat != 0)
{
if (sVeh is JobVehicle jV && jV.JobId == 1) // Spieler steigt in Taxi ein
{
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
Player driver = veh.GetDriver();
if (driver == null)
{
return;
}
if (!driver.HasData("DriverPrice")) return;
int taxiPrice = driver.GetData<int>("DriverPrice");
float km = 0;
if (!driver.HasData("FareKm")) { driver.SetData<float>("FareKm", km); }
km = driver.GetData<float>("FareKm");
if (driver.HasData("Passager")) return;
driver.SetData<int>("Passager", player.GetUser().Id);
driver.SetData<bool>("hasPassager", true);
/* using (var dbContext = new DatabaseContext())
{
int amount = (int)Math.Round(km * taxiPrice);
User contractUser = player.GetUser(dbContext);
contractUser.Handmoney -= amount;
driver.GetUser(dbContext).Wage += amount;
dbContext.SaveChanges();
//contractUser.Player.TriggerEvent("SERVER:SET_HANDMONEY", contractUser.Handmoney);
} */
player.TriggerEvent("CLIENT:startCustomerFare", taxiPrice, km);
var taxiContracts = taxiJob.TaxiContracts.Where(t => t.Name == player.Name);
if (taxiContracts.Count() == 0) return;
var contract = taxiContracts.First();
taxiJob.TaxiContracts.Remove(contract);
if (driver != null && contract.Driver != null && contract.Driver.Handle != veh.GetDriver().Handle)
{
ChatService.SendMessage(contract.Driver, $"!{{02FCFF}}{player.Name} ist in ein Taxi eingestiegen, der Auftrag wurde beendet.");
ChatService.SendMessage(player, $"!{{02FCFF}}Du bist in ein Taxi eingestiegen, der Auftrag wurde beendet.");
}
}
}
JobBase job = GetJob(player.GetUser().JobId ?? -1);
if (job?.GetUsersInJob()?.Contains(player) ?? false)
if (job != null && job.GetUsersInJob().Contains(player) && job.CheckVehicle(player, veh) && seat == 0)
{
if (sVeh != null)
{
if (sVeh is JobVehicle JV)
{
if (player.GetUser().JobId == 3 || player.GetUser().JobId == 4)
{
if (seat == 0)
{
JobVehicle c = new JobVehicle();
if (JV.GetJob().GetUsersInJob().Contains(player))
{
if (!player.HasData("LastVehicle") || player.GetData<Vehicle>("LastVehicle") == null) return;
if (player.HasData("LastVehicle") && veh == player.GetData<Vehicle>("LastVehicle"))
{
veh.SetData("timerJobVehicleRespawn", false);
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
}
}
else
{
if (player.GetData<bool>("HatRoute") == true)
{
StopJob(player);
}
}
}
}
else
{
job.StopJob(player);
ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet.");
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
}
CheckPointHandle.DeleteCheckpoints(player);
if (!player.HasData("LastVehicle") || player.GetData<Vehicle>("LastVehicle") == null) return;
player.GetData<Vehicle>("LastVehicle").ResetData("timerJobVehicleRespawn");
ServerVehicle nsSVeh = VehicleManager.GetServerVehicleFromVehicle(player.GetData<Vehicle>("LastVehicle"));
ServerVehicleExtensions.Spawn(nsSVeh, player.GetData<Vehicle>("LastVehicle"));
return;
}
}
if (player.GetUser().JobId == 2)
{
JobVehicle c = new JobVehicle();
if (JV.GetJob().GetUsersInJob().Contains(player))
{
if (!player.HasData("LastVehicle") || player.GetData<Vehicle>("LastVehicle") == null) return;
if (player.HasData("LastVehicle") && veh == player.GetData<Vehicle>("LastVehicle"))
{
veh.SetData("timerJobVehicleRespawn", false);
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
}
}
else
{
if (player.GetData<bool>("HatRoute") == true)
{
StopJob(player);
}
}
}
}
}
else
{
job.StopJob(player);
ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet.");
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
}
CheckPointHandle.DeleteCheckpoints(player);
if (!player.HasData("LastVehicle"))
{
return;
}
if (player.GetData<Vehicle>("LastVehicle") == null)
{
return;
}
player.GetData<Vehicle>("LastVehicle").ResetData("timerJobVehicleRespawn");
ServerVehicle nsSVeh = VehicleManager.GetServerVehicleFromVehicle(player.GetData<Vehicle>("LastVehicle"));
ServerVehicleExtensions.Spawn(nsSVeh, player.GetData<Vehicle>("LastVehicle"));
}
}
else if (sVeh! is JobVehicle || veh != null)
{
job.StopJob(player);
ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet.");
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
}
CheckPointHandle.DeleteCheckpoints(player);
if (!player.HasData("LastVehicle") || player.GetData<Vehicle>("LastVehicle") == null) return;
player.GetData<Vehicle>("LastVehicle").ResetData("timerJobVehicleRespawn");
ServerVehicle nsSVeh = VehicleManager.GetServerVehicleFromVehicle(player.GetData<Vehicle>("LastVehicle"));
ServerVehicleExtensions.Spawn(nsSVeh, player.GetData<Vehicle>("LastVehicle"));
}
else if (sVeh is JobVehicle JV)
{
if (JV.JobId != player.GetUser().JobId)
{
job.StopJob(player);
ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet.");
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
}
CheckPointHandle.DeleteCheckpoints(player);
if (!player.HasData("LastVehicle") || player.GetData<Vehicle>("LastVehicle") == null) return;
player.GetData<Vehicle>("LastVehicle").ResetData("timerJobVehicleRespawn");
ServerVehicle nsSVeh = VehicleManager.GetServerVehicleFromVehicle(player.GetData<Vehicle>("LastVehicle"));
ServerVehicleExtensions.Spawn(nsSVeh, player.GetData<Vehicle>("LastVehicle"));
}
}
if (!playerTimersJobVehicleRespawn.ContainsKey(player))
return;
playerTimersJobVehicleRespawn[player].Stop();
playerTimersJobVehicleRespawn.Remove(player);
}
}
@@ -559,29 +303,7 @@ namespace ReallifeGamemode.Server.Managers
[ServerEvent(Event.PlayerExitVehicle)]
public void JobManagerPlayerExitVehicle2(Player player, Vehicle veh)
{
ServerVehicle sVeh = veh.GetServerVehicle();
if (sVeh == null) return;
if (sVeh is JobVehicle jV && jV.JobId == 1) // Spieler steigt vom Taxi aus
{
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
if (veh.Occupants.Count == 0) return;
Player driver = veh.GetDriver();
if (driver == null) return;
if (player.GetUser().Id != driver.GetData<int>("Passager")) { player.TriggerEvent("CLIENT:cancelFare"); return; }
player.TriggerEvent("CLIENT:cancelFareCustomer");
driver.TriggerEvent("CLIENT:resetFareClock");
driver.ResetData("Passager");
driver.ResetData("hasPassager");
driver.SetData<float>("FareKm", 0);
driver.TriggerEvent("CLIENT:cancelFare");
driver.TriggerEvent("CLIENT:startFare");
foreach (Player occupant in veh.Occupants)
{
if (occupant == driver) continue;
occupant.WarpOutOfVehicle();
}
}
}
[RemoteEvent("CLIENT:JobManager_TaxiJob_AcceptCall")]

View File

@@ -162,13 +162,17 @@ namespace ReallifeGamemode.Server.Managers
{
Position = new Vector3(485.4114685058594, -2173.25, 5.918273448944092),
jobId = 2,
Skill = 0
Skill = 0,
eventOnStart = false,
eventName = ""
};
JobPoint jobPointPilot = new JobPoint()
{
Position = new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406),
jobId = 3,
Skill = 0
Skill = 0,
eventOnStart = false,
eventName = ""
};
JobPoint jobPointPilot2 = new JobPoint()
{
@@ -392,6 +396,8 @@ public class JobPoint
public Vector3 Position { get; set; }
public int jobId { get; set; }
public int Skill { get; set; }
public bool eventOnStart { get; set; }
public string eventName { get; set; }
}
public class ElevatorPoint

View File

@@ -3,6 +3,7 @@ using System.Linq;
using GTANetworkAPI;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Job;
using ReallifeGamemode.Server.Managers;
namespace ReallifeGamemode.Server.Util
{
@@ -14,8 +15,6 @@ namespace ReallifeGamemode.Server.Util
public static void DeleteCheckpoints(Player player)
{
player.SetData("HatRoute", false);
player.ResetData("Route");
RemovePlayerHandlerFromList(player);
player.TriggerEvent("destroyCP");
}
@@ -27,232 +26,20 @@ namespace ReallifeGamemode.Server.Util
playerHandle.DeleteCheckpoints();
listHandle.Add(playerHandle);
player.ResetData("Route");
playerHandle.StartRoute();
player.SetData("HatRoute", true);
/*if(player.GetUser().BusSkill >= 1000)
{
playerHandle.LastCheckpoint = 2;
}*/
}
public static void RemovePlayerHandlerFromList(this Player player)
{
CheckPointListForPlayer temp = null;
for (int a = 0; a < listHandle.Count; a++)
{
temp = listHandle[a];
CheckPointListForPlayer temp = listHandle[a];
if (temp.player == player)
{
listHandle.Remove(temp);
}
}
}
#region delete
/*
[RemoteEvent("playerWaitsInCheckpoint")]
public void PlayerWaitsInCheckpoint(Player user)
{
if (user.GetUser().JobId == 4)
{
Job.JobBase job = Managers.JobManager.GetJob(user.GetUser().JobId ?? -1);
if (job.GetUsersInJob().Contains(user))
{
if (!user.IsInVehicle || user.VehicleSeat != 0) return;
Vehicle veh = user.Vehicle;
user.TriggerEvent("CLIENT:FreezeVehicle", veh);
user.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
user.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AnfahrtHaltestelle", "wav", 50);
if ((VehicleHash)veh.Model == VehicleHash.Bus)
{
user.TriggerEvent("CLIENT:SetDoorOpen", 0, false, false);
user.TriggerEvent("CLIENT:SetDoorOpen", 1, false, false);
user.TriggerEvent("CLIENT:SetDoorOpen", 2, false, false);
user.TriggerEvent("CLIENT:SetDoorOpen", 3, false, false);
user.TriggerEvent("CLIENT:SetDoorOpen", 0, false, false);
NAPI.Task.Run(() =>
{
BusCheckpoint(user);
}, delayTime: 3600);
}
if ((VehicleHash)veh.Model == VehicleHash.Coach)
{
user.TriggerEvent("CLIENT:SetDoorOpen", 0, false, false);
NAPI.Task.Run(() =>
{
BusCheckpoint(user);
}, delayTime: 2800);
}
if ((VehicleHash)veh.Model == VehicleHash.Tourbus)
{
user.TriggerEvent("CLIENT:SetDoorOpen", 2, false, false);
user.TriggerEvent("CLIENT:SetDoorOpen", 3, false, false);
NAPI.Task.Run(() =>
{
BusCheckpoint(user);
}, delayTime: 3250);
}
if (!(veh.GetData<IndicatorData>("indicatorData") is IndicatorData data)) data = new IndicatorData();
data.Left = false;
data.Right = true;
veh.SetData("indicatorData", data);
NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right);
/*NAPI.Task.Run(() =>
{
veh.Position = new Vector3(veh.Position.X, veh.Position.Y, veh.Position.Z + 0.25);
}, delayTime: 500);
NAPI.Task.Run(() =>
{
veh.Position = private new Vector3(veh.Position.X, veh.Position.Y, veh.Position.Z + 0.1);
user.TriggerEvent("CLIENT:FreezeVehicle", veh);
}, delayTime: 500);
}
}
}
public static void BusCheckpoint(Player user)
{
if (!user.IsInVehicle || user.VehicleSeat != 0) return;
Vehicle veh = user.Vehicle;
if ((VehicleHash)veh.Model == VehicleHash.Bus)
{
user.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleBus", "wav", 25);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 0, false, 1850);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 1, false, 1850);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 2, false, 1850);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 1850);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 0, false, 1850);
NAPI.Task.Run(() =>
{
user.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
}, delayTime: 1850);
}
if ((VehicleHash)veh.Model == VehicleHash.Coach)
{
user.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleCoach", "wav", 35);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 0, false, 1000);
NAPI.Task.Run(() =>
{
user.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
}, delayTime: 1000);
}
if ((VehicleHash)veh.Model == VehicleHash.Tourbus)
{
user.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleTourbus", "wav", 25);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 2600);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 2, false, 2600);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 2600);
NAPI.Task.Run(() =>
{
user.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
}, delayTime: 2600);
}
//user.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
}
[RemoteEvent("playerInCheckpoint")]
public void PlayerInCheckpoint(Player user)
{
CheckPointListForPlayer temp = null;
for (int a = 0; a < listHandle.Count; a++)
{
temp = listHandle[a];
if (temp.player == user)
{
break;
}
}
if (temp.LastCheckpoint != 1)
{
Job.JobBase job = Managers.JobManager.GetJob(user.GetUser().JobId ?? -1);
if (job?.GetUsersInJob().Contains(user) ?? false)
{
if (user.GetUser().JobId == 3)
{
if (temp.checkPointsDone == 2)
{
if (user.GetData<string>("Route") == "Skill1Route1" || user.GetData<string>("Route") == "Skill1Route2" || user.GetData<string>("Route") == "Skill1Route3")
{
PilotJob.payWage(user, PilotSkill1RouteVerdienst / temp.list.Count());
PilotJob.payWage(user, PilotSkill1RouteVerdienst / temp.list.Count());
}
if (user.GetData<string>("Route") == "Skill2Route1" || user.GetData<string>("Route") == "Skill2Route2" || user.GetData<string>("Route") == "Skill2Route3")
{
PilotJob.payWage(user, PilotSkill2RouteVerdienst / temp.list.Count());
PilotJob.payWage(user, PilotSkill2RouteVerdienst / temp.list.Count());
}
}
if (temp.checkPointsDone > 2)
{
if (user.GetData<string>("Route") == "Skill1Route1" || user.GetData<string>("Route") == "Skill1Route2" || user.GetData<string>("Route") == "Skill1Route3")
{
PilotJob.payWage(user, PilotSkill1RouteVerdienst / temp.list.Count());
}
if (user.GetData<string>("Route") == "Skill2Route1" || user.GetData<string>("Route") == "Skill2Route2" || user.GetData<string>("Route") == "Skill2Route3")
{
PilotJob.payWage(user, PilotSkill2RouteVerdienst / temp.list.Count());
}
}
//PilotJob.payWage(user, 100);
}
if (user.GetUser().JobId == 4)
{
if (temp.checkPointsDone == 2)
{
if (user.GetData<string>("Route") == "Skill1Route1" || user.GetData<string>("Route") == "Skill1Route2" || user.GetData<string>("Route") == "Skill1Route3" || user.GetData<string>("Route") == "Skill1Route4")
{
BusDriverJob.payWage(user, BusSkill1RouteVerdienst / temp.list.Count());
BusDriverJob.payWage(user, BusSkill1RouteVerdienst / temp.list.Count());
}
if (user.GetData<string>("Route") == "Skill2Route1" || user.GetData<string>("Route") == "Skill2Route2" || user.GetData<string>("Route") == "Skill2Route3" || user.GetData<string>("Route") == "Skill2Route4")
{
BusDriverJob.payWage(user, BusSkill2RouteVerdienst / temp.list.Count());
BusDriverJob.payWage(user, BusSkill2RouteVerdienst / temp.list.Count());
}
if (user.GetData<string>("Route") == "Skill3Route1" || user.GetData<string>("Route") == "Skill3Route2" || user.GetData<string>("Route") == "Skill3Route3" || user.GetData<string>("Route") == "Skill3Route4")
{
BusDriverJob.payWage(user, BusSkill3RouteVerdienst / temp.list.Count());
BusDriverJob.payWage(user, BusSkill3RouteVerdienst / temp.list.Count());
}
}
if (temp.checkPointsDone > 2)
{
if (user.GetData<string>("Route") == "Skill1Route1" || user.GetData<string>("Route") == "Skill1Route2" || user.GetData<string>("Route") == "Skill1Route3" || user.GetData<string>("Route") == "Skill1Route4")
{
BusDriverJob.payWage(user, BusSkill1RouteVerdienst / temp.list.Count());
}
if (user.GetData<string>("Route") == "Skill2Route1" || user.GetData<string>("Route") == "Skill2Route2" || user.GetData<string>("Route") == "Skill2Route3" || user.GetData<string>("Route") == "Skill2Route4")
{
BusDriverJob.payWage(user, BusSkill2RouteVerdienst / temp.list.Count());
}
if (user.GetData<string>("Route") == "Skill3Route1" || user.GetData<string>("Route") == "Skill3Route2" || user.GetData<string>("Route") == "Skill3Route3" || user.GetData<string>("Route") == "Skill3Route4")
{
BusDriverJob.payWage(user, BusSkill3RouteVerdienst / temp.list.Count());
}
}
//BusDriverJob.payWage(user, 100);
if (!user.IsInVehicle || user.VehicleSeat != 0) return;
Vehicle veh = user.Vehicle;
if (!(veh.GetData<IndicatorData>("indicatorData") is IndicatorData data)) data = new IndicatorData();
data.Left = false;
data.Right = false;
veh.SetData("indicatorData", data);
NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right);
//BusCheckpoint(user);
}
}
}
else
{
}
temp.NextCheckpoint();
}
*/
#endregion delete
}
public class CheckPointListForPlayer
@@ -305,25 +92,10 @@ public void PlayerInCheckpoint(Player user)
LastCheckpoint = 0;
CheckPointHandle.RemovePlayerHandlerFromList(this.player);
DeleteCheckpoints();
player.SetData("HatRoute", false);
if (player.GetUser().JobId == 3 && player.HasData("Route"))
{
//PilotJob.payWage(player, 200);
PilotJob.PilotLetzterCheckpoint(player);
}
else if (player.GetUser().JobId == 4 && player.HasData("Route"))
{
//BusDriverJob.payWage(player, 200);
//CheckPointHandle.BusCheckpoint(player);
BusDriverJob.BusLetzterCheckpoint(player);
if (!player.IsInVehicle || player.VehicleSeat != 0) return;
Vehicle veh = player.Vehicle;
if (!(veh.GetData<IndicatorData>("indicatorData") is IndicatorData data)) data = new IndicatorData();
data.Left = false;
data.Right = false;
veh.SetData("indicatorData", data);
NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right);
}
JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1);
if (job != null && job.GetUsersInJob().Contains(player))
job.LastCheckpoint(player);
}
//NAPI.Chat.SendChatMessageToAll($"this.list.Count() = {this.list.Count()}, checkPointsDone = {checkPointsDone}, LastCheckpoint = {LastCheckpoint}");
}
@@ -333,4 +105,45 @@ public void PlayerInCheckpoint(Player user)
this.player.TriggerEvent("destroyCP");
}
}
public class CheckPointEvents : Script
{
[RemoteEvent("playerWaitsInCheckpoint")]
public void PlayerWaitsInCheckpoint(Player player)
{
JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1);
if (job == null || !job.GetUsersInJob().Contains(player))
return;
if (job.Id == JobManager.GetJob<BusDriverJob>().Id)
JobManager.GetJob<BusDriverJob>().AtBusStop(player);
}
[RemoteEvent("playerInCheckpoint")]
public void PlayerInCheckpoint(Player user)
{
CheckPointListForPlayer temp = null;
for (int a = 0; a < CheckPointHandle.listHandle.Count; a++)
{
temp = CheckPointHandle.listHandle[a];
if (temp.player == user)
{
break;
}
}
if (temp.LastCheckpoint != 1)
{
if (!user.IsInVehicle || user.VehicleSeat != 0) return;
Vehicle veh = user.Vehicle;
if (!(veh.GetData<IndicatorData>("indicatorData") is IndicatorData data)) data = new IndicatorData();
data.Left = false;
data.Right = false;
veh.SetData("indicatorData", data);
NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right);
//BusCheckpoint(user);
}
temp.NextCheckpoint();
}
}
}