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);
menu.AddItem(new NativeUI.UIMenuItem("Job starten"));
menu.AddItem(new NativeUI.UIMenuItem("Job beenden"));
globalData.InMenu = true;
menu.ItemSelect.on((item: NativeUI.UIMenuItem, index: number) => {
if (index === 0) { // Job starten
mp.events.callRemote("CLIENT:Job_StartJob");
} else if (index === 1) { // Job stoppen
mp.events.callRemote("CLIENT:Job_StopJob");
}
menu.Close();
});

View File

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

View File

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

View File

@@ -52,6 +52,14 @@ namespace ReallifeGamemode.Server.Events
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);
}

View File

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

View File

@@ -4,6 +4,7 @@ using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Job;
using ReallifeGamemode.Server.Models;
using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Util;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -124,7 +125,54 @@ namespace ReallifeGamemode.Server.Managers
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);
}
[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;
}
}
}
}