add option to stop job, enable engine of job vehicle only when player is in job

This commit is contained in:
hydrant
2019-05-20 21:41:02 +02:00
parent 0409cd1611
commit 9dda9b195d
6 changed files with 75 additions and 13 deletions

View File

@@ -7,12 +7,15 @@ export default function (globalData: GlobalData) {
var menu = new NativeUI.Menu("Job", jobName, new NativeUI.Point(50, 50), null, null); var menu = new NativeUI.Menu("Job", jobName, new NativeUI.Point(50, 50), null, null);
menu.AddItem(new NativeUI.UIMenuItem("Job starten")); menu.AddItem(new NativeUI.UIMenuItem("Job starten"));
menu.AddItem(new NativeUI.UIMenuItem("Job beenden"));
globalData.InMenu = true; globalData.InMenu = true;
menu.ItemSelect.on((item: NativeUI.UIMenuItem, index: number) => { menu.ItemSelect.on((item: NativeUI.UIMenuItem, index: number) => {
if (index === 0) { // Job starten if (index === 0) { // Job starten
mp.events.callRemote("CLIENT:Job_StartJob"); mp.events.callRemote("CLIENT:Job_StartJob");
} else if (index === 1) { // Job stoppen
mp.events.callRemote("CLIENT:Job_StopJob");
} }
menu.Close(); menu.Close();
}); });

View File

@@ -30,6 +30,9 @@ namespace ReallifeGamemode.Server.Entities
[NotMapped] [NotMapped]
public Vector3 Position => new Vector3(PositionX, PositionY, PositionZ); public Vector3 Position => new Vector3(PositionX, PositionY, PositionZ);
[NotMapped]
public Vehicle Vehicle => VehicleManager.GetVehicleFromServerVehicle(this);
public Vehicle Spawn(Vehicle currentVeh = null) public Vehicle Spawn(Vehicle currentVeh = null)
{ {
if (currentVeh != null) VehicleManager.DeleteVehicle(currentVeh); if (currentVeh != null) VehicleManager.DeleteVehicle(currentVeh);

View File

@@ -4,6 +4,7 @@ using System.Linq;
using System.Text; using System.Text;
using GTANetworkAPI; using GTANetworkAPI;
using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Job;
using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Models; using ReallifeGamemode.Server.Models;

View File

@@ -52,6 +52,14 @@ namespace ReallifeGamemode.Server.Events
return; return;
} }
} }
else if(sV is JobVehicle jV)
{
if(!jV.GetJob().GetUsersInJob().Contains(player) && !u.IsAdmin(AdminLevel.ADMIN3))
{
player.SendNotification("~r~Du hast keinen Schlüssel.");
return;
}
}
} }
VehicleStreaming.SetEngineState(v, !state); VehicleStreaming.SetEngineState(v, !state);
} }

View File

@@ -3,6 +3,7 @@ using ReallifeGamemode.Server.Entities;
using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Models; using ReallifeGamemode.Server.Models;
using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Util;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -12,11 +13,11 @@ namespace ReallifeGamemode.Server.Job
{ {
public abstract class JobBase public abstract class JobBase
{ {
protected delegate void JobStartHandler(); public delegate void JobStartHandler();
protected delegate void JobStopHandler(); public delegate void JobStopHandler();
protected event JobStartHandler JobStart; public event JobStartHandler JobStart;
protected event JobStopHandler JobStop; public event JobStopHandler JobStop;
private readonly List<Client> _inJob = new List<Client>(); private readonly List<Client> _inJob = new List<Client>();
@@ -30,11 +31,7 @@ namespace ReallifeGamemode.Server.Job
{ {
_inJob.Add(player); _inJob.Add(player);
if (NeedVehicleToStart && !GetJobVehicles().Any(v => VehicleManager.GetVehicleFromServerVehicle(v).Handle.Value == player.Vehicle?.Handle.Value)) player.SendChatMessage($"~y~[JOB]~s~ Du hast deinen Job ~o~{this.Name}~s~ gestartet.");
{
ChatService.Error(player, "Zum Start dieses Jobs musst du in einem Jobfahrzeug sein");
return;
}
JobStart?.Invoke(); JobStart?.Invoke();
} }
@@ -43,6 +40,8 @@ namespace ReallifeGamemode.Server.Job
{ {
_inJob.Remove(player); _inJob.Remove(player);
player.SendChatMessage($"~y~[JOB]~s~ Du hast deinen Job ~o~{this.Name}~s~ beendet.");
JobStop?.Invoke(); JobStop?.Invoke();
} }

View File

@@ -4,6 +4,7 @@ using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Job; using ReallifeGamemode.Server.Job;
using ReallifeGamemode.Server.Models; using ReallifeGamemode.Server.Models;
using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Util;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -124,7 +125,54 @@ namespace ReallifeGamemode.Server.Managers
return; return;
} }
if (job.NeedVehicleToStart && !job.GetJobVehicles().Any(v => v.Vehicle.Handle.Value == player.Vehicle?.Handle.Value))
{
ChatService.Error(player, "Zum Start dieses Jobs musst du in einem Jobfahrzeug sein");
return;
}
job.StartJob(player); job.StartJob(player);
} }
[RemoteEvent("CLIENT:Job_StopJob")]
public void StopJob(Client player)
{
User u = player.GetUser();
if (u.JobId == null) return;
JobBase job = GetJob(u.JobId.Value);
if (!job.GetUsersInJob().Contains(player))
{
ChatService.Error(player, "Du führst deinen Job momentan nicht aus");
return;
}
if (job.NeedVehicleToStart && player.Vehicle != null)
{
VehicleStreaming.SetEngineState(player.Vehicle, false);
VehicleStreaming.SetLockStatus(player.Vehicle, false);
player.WarpOutOfVehicle();
}
job.StopJob(player);
}
[ServerEvent(Event.PlayerExitVehicle)]
public void JobPlayerExitVehicle(Client player, Vehicle veh)
{
User u = player.GetUser();
if (u.JobId == null) return;
JobBase job = GetJob(u.JobId.Value);
if (job.GetUsersInJob().Contains(player) && job.NeedVehicleToStart)
{
job.StopJob(player);
return;
}
}
} }
} }