add option to stop job, enable engine of job vehicle only when player is in job
This commit is contained in:
@@ -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();
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user