Maybe finished taxi job
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
export default function (globalData: GlobalData) {
|
export default function (globalData: GlobalData) {
|
||||||
|
|
||||||
mp.events.add("SERVER:Job_ShowJobMenu", (jobName: string) => {
|
mp.events.add("SERVER:Job_ShowJobMenu", (jobName: string, data: any) => {
|
||||||
if (globalData.InMenu) return;
|
if (globalData.InMenu) return;
|
||||||
|
|
||||||
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);
|
||||||
@@ -11,11 +11,48 @@ export default function (globalData: GlobalData) {
|
|||||||
|
|
||||||
globalData.InMenu = true;
|
globalData.InMenu = true;
|
||||||
|
|
||||||
|
data = JSON.parse(data);
|
||||||
|
|
||||||
|
if (data) {
|
||||||
|
if (data.Id === 1) { // Taxi Driver
|
||||||
|
var status = data.Status;
|
||||||
|
if (data.JobData.TaxiCalls && status === 0) { // Spieler hat keinen aktiven Auftrag
|
||||||
|
var calls = data.JobData.TaxiCalls;
|
||||||
|
var taxiCallsItem = new NativeUI.UIMenuItem("Taxi Aufträge");
|
||||||
|
var taxiCallsCount = calls.length;
|
||||||
|
taxiCallsItem.SetRightLabel(taxiCallsCount.toString());
|
||||||
|
menu.AddItem(taxiCallsItem);
|
||||||
|
|
||||||
|
if (taxiCallsCount > 0) {
|
||||||
|
var taxiCallsMenu = new NativeUI.Menu("Taxi-Aufträge", "Wähle einen Auftrag aus", new NativeUI.Point(50, 50), null, null);
|
||||||
|
calls.forEach(call => {
|
||||||
|
var item = new NativeUI.UIMenuItem(call.Name);
|
||||||
|
item.SetRightLabel(call.Distance.toString() + "m");
|
||||||
|
taxiCallsMenu.AddItem(item);
|
||||||
|
});
|
||||||
|
taxiCallsMenu.Visible = false;
|
||||||
|
menu.BindMenuToItem(taxiCallsMenu, taxiCallsItem);
|
||||||
|
|
||||||
|
taxiCallsMenu.ItemSelect.on((item: NativeUI.UIMenuItem, index: number) => {
|
||||||
|
mp.events.callRemote("CLIENT:JobManager_TaxiJob_AcceptCall", item.Text);
|
||||||
|
menu.Close();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (status === 1) { // Spieler hat aktiven Auftrag
|
||||||
|
var cancelTaxiContractItem = new NativeUI.UIMenuItem("Taxi-Auftrag abbrechen");
|
||||||
|
cancelTaxiContractItem.SetRightLabel(data.JobData.Name);
|
||||||
|
menu.AddItem(cancelTaxiContractItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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
|
} else if (index === 1) { // Job stoppen
|
||||||
mp.events.callRemote("CLIENT:Job_StopJob");
|
mp.events.callRemote("CLIENT:Job_StopJob");
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
menu.Close();
|
menu.Close();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
export default function tuningSync() {
|
export default function tuningSync() {
|
||||||
mp.events.add('entityStreamIn', (entity) => {
|
mp.events.add('entityStreamIn', (entity: EntityMp) => {
|
||||||
if (entity.isAVehicle()) {
|
if (entity.isAVehicle()) {
|
||||||
var mod18 = entity.getVariable('mod18');
|
|
||||||
|
var vehicle: VehicleMp = entity as VehicleMp;
|
||||||
|
|
||||||
|
var taxiLight = entity.getVariable("vehicleTaxiLight");
|
||||||
|
if (taxiLight) vehicle.setTaxiLights(taxiLight);
|
||||||
|
|
||||||
|
var mod18 = vehicle.getVariable('mod18');
|
||||||
|
|
||||||
if (mod18 !== undefined) {
|
if (mod18 !== undefined) {
|
||||||
entity.toggleMod(18, mod18);
|
vehicle.toggleMod(18, mod18);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -12,4 +18,8 @@
|
|||||||
mp.events.add('vehicleToggleMod', (veh, slot, newval) => {
|
mp.events.add('vehicleToggleMod', (veh, slot, newval) => {
|
||||||
veh.toggleMod(slot, newval);
|
veh.toggleMod(slot, newval);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mp.events.addDataHandler("vehicleTaxiLight", (entity: VehicleMp, state: boolean) => {
|
||||||
|
entity.setTaxiLights(state);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
@@ -23,6 +23,8 @@ let globalData: GlobalData = {
|
|||||||
|
|
||||||
var inMenu = false;
|
var inMenu = false;
|
||||||
|
|
||||||
|
mp.game.vehicle.defaultEngineBehaviour = false;
|
||||||
|
|
||||||
import jobMain from './Jobs/main';
|
import jobMain from './Jobs/main';
|
||||||
jobMain(globalData);
|
jobMain(globalData);
|
||||||
|
|
||||||
|
|||||||
884
ReallifeGamemode.Client/package-lock.json
generated
884
ReallifeGamemode.Client/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -2,15 +2,15 @@
|
|||||||
"name": "reallifegamemode.client",
|
"name": "reallifegamemode.client",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/ragemp-c": "git+https://github.com/sprayzcs/types-ragemp-c.git#master",
|
|
||||||
"NativeUI": "https://github.com/sprayzcs/RageMP-NativeUI/tarball/master",
|
|
||||||
"copy-webpack-plugin": "^5.0.1",
|
|
||||||
"uglifyjs-webpack-plugin": "^2.1.2",
|
|
||||||
"@babel/core": "^7.3.4",
|
"@babel/core": "^7.3.4",
|
||||||
"@types/node": "^11.9.5",
|
"@types/node": "^11.9.5",
|
||||||
|
"@types/ragemp-c": "git+https://github.com/sprayzcs/types-ragemp-c.git#master",
|
||||||
|
"NativeUI": "https://github.com/sprayzcs/RageMP-NativeUI/tarball/master",
|
||||||
"babel-loader": "^8.0.5",
|
"babel-loader": "^8.0.5",
|
||||||
|
"copy-webpack-plugin": "^5.0.1",
|
||||||
"ts-loader": "^5.3.3",
|
"ts-loader": "^5.3.3",
|
||||||
"typescript": "^3.3.3333",
|
"typescript": "^3.3.3333",
|
||||||
|
"uglifyjs-webpack-plugin": "^2.1.2",
|
||||||
"webpack": "^4.29.6",
|
"webpack": "^4.29.6",
|
||||||
"webpack-cli": "^3.2.3"
|
"webpack-cli": "^3.2.3"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ namespace ReallifeGamemode.Server.Job
|
|||||||
{
|
{
|
||||||
public abstract class JobBase
|
public abstract class JobBase
|
||||||
{
|
{
|
||||||
public delegate void JobStartHandler();
|
public delegate void JobStartHandler(Client player);
|
||||||
public delegate void JobStopHandler();
|
public delegate void JobStopHandler(Client player);
|
||||||
|
|
||||||
public event JobStartHandler JobStart;
|
public event JobStartHandler JobStart;
|
||||||
public event JobStopHandler JobStop;
|
public event JobStopHandler JobStop;
|
||||||
@@ -33,7 +33,7 @@ namespace ReallifeGamemode.Server.Job
|
|||||||
|
|
||||||
player.SendChatMessage($"~y~[JOB]~s~ Du hast deinen Job ~o~{this.Name}~s~ gestartet.");
|
player.SendChatMessage($"~y~[JOB]~s~ Du hast deinen Job ~o~{this.Name}~s~ gestartet.");
|
||||||
|
|
||||||
JobStart?.Invoke();
|
JobStart?.Invoke(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void StopJob(Client player)
|
public void StopJob(Client player)
|
||||||
@@ -42,7 +42,7 @@ namespace ReallifeGamemode.Server.Job
|
|||||||
|
|
||||||
player.SendChatMessage($"~y~[JOB]~s~ Du hast deinen Job ~o~{this.Name}~s~ beendet.");
|
player.SendChatMessage($"~y~[JOB]~s~ Du hast deinen Job ~o~{this.Name}~s~ beendet.");
|
||||||
|
|
||||||
JobStop?.Invoke();
|
JobStop?.Invoke(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<JobVehicle> GetJobVehicles()
|
public List<JobVehicle> GetJobVehicles()
|
||||||
|
|||||||
@@ -2,15 +2,34 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using GTANetworkAPI;
|
using GTANetworkAPI;
|
||||||
|
using ReallifeGamemode.Server.Util;
|
||||||
|
|
||||||
namespace ReallifeGamemode.Server.Job
|
namespace ReallifeGamemode.Server.Job
|
||||||
{
|
{
|
||||||
class TaxiDriverJob : JobBase
|
class TaxiDriverJob : JobBase
|
||||||
{
|
{
|
||||||
|
public List<TaxiContract> TaxiContracts { get; set; } = new List<TaxiContract>();
|
||||||
|
|
||||||
public override int Id => 1;
|
public override int Id => 1;
|
||||||
|
|
||||||
public override string Name => "Taxifahrer";
|
public override string Name => "Taxifahrer";
|
||||||
|
|
||||||
public override bool NeedVehicleToStart => true;
|
public override bool NeedVehicleToStart => true;
|
||||||
|
|
||||||
|
public TaxiDriverJob()
|
||||||
|
{
|
||||||
|
JobStart += TaxiDriverJobJobStart;
|
||||||
|
JobStop += TaxiDriverJobJobStop;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TaxiDriverJobJobStart(Client player)
|
||||||
|
{
|
||||||
|
player.Vehicle.SetSharedData("vehicleTaxiLight", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TaxiDriverJobJobStop(Client player)
|
||||||
|
{
|
||||||
|
player.Vehicle.SetSharedData("vehicleTaxiLight", false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -251,8 +251,23 @@ namespace ReallifeGamemode.Server.Managers
|
|||||||
[RemoteEvent("CLIENT:InteractionMenu_CallService_Taxi")]
|
[RemoteEvent("CLIENT:InteractionMenu_CallService_Taxi")]
|
||||||
public void CallServiceTaxi(Client player, string street, string zone)
|
public void CallServiceTaxi(Client player, string street, string zone)
|
||||||
{
|
{
|
||||||
string msg = $"!{{02FCFF}}{player.Name} hat in der {street} in {zone} ein Taxi gerufen.";
|
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
|
||||||
ChatService.BroadcastJob(msg, JobManager.GetJob<TaxiDriverJob>());
|
|
||||||
|
if(taxiJob.TaxiContracts.Where(t => t.Name == player.Name).Count() != 0)
|
||||||
|
{
|
||||||
|
ChatService.Error(player, "Du kannst nur einmal ein Taxi rufen");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
taxiJob.TaxiContracts.Add(new TaxiContract()
|
||||||
|
{
|
||||||
|
Name = player.Name,
|
||||||
|
Position = player.Position
|
||||||
|
});
|
||||||
|
|
||||||
|
string msg = $"!{{02FCFF}}{player.Name} hat in der Straße {street} in {zone} ein Taxi gerufen.";
|
||||||
|
ChatService.BroadcastJob(msg, taxiJob);
|
||||||
|
player.SendChatMessage("!{02FCFF}Du hast erfolgreich ein Taxi zu deiner aktuellen Position gerufen.");
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
#region Spielerinteraktionen PFEILTASTE-LINKS
|
#region Spielerinteraktionen PFEILTASTE-LINKS
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using GTANetworkAPI;
|
using GTANetworkAPI;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using ReallifeGamemode.Server.Entities;
|
using ReallifeGamemode.Server.Entities;
|
||||||
using ReallifeGamemode.Server.Extensions;
|
using ReallifeGamemode.Server.Extensions;
|
||||||
using ReallifeGamemode.Server.Job;
|
using ReallifeGamemode.Server.Job;
|
||||||
@@ -107,7 +108,48 @@ namespace ReallifeGamemode.Server.Managers
|
|||||||
|
|
||||||
JobBase job = GetJob(u.JobId.Value);
|
JobBase job = GetJob(u.JobId.Value);
|
||||||
|
|
||||||
player.TriggerEvent("SERVER:Job_ShowJobMenu", job.Name);
|
dynamic data = null;
|
||||||
|
|
||||||
|
if (job.Id == 1 && job.GetUsersInJob().Contains(player))
|
||||||
|
{
|
||||||
|
var taxiCalls = JobManager.GetJob<TaxiDriverJob>().TaxiContracts;
|
||||||
|
if (!taxiCalls.Any(t => t.Driver.Handle == player.Handle))
|
||||||
|
{ // Spieler in keiner aktiven Fahrt
|
||||||
|
data = new
|
||||||
|
{
|
||||||
|
job.Id,
|
||||||
|
Status = 0,
|
||||||
|
JobData = new
|
||||||
|
{
|
||||||
|
TaxiCalls = taxiCalls
|
||||||
|
.Where(t => t.Driver != null)
|
||||||
|
.Select(t => new
|
||||||
|
{
|
||||||
|
t.Name,
|
||||||
|
Distance = Math.Round(t.Position.DistanceTo(player.Position), 0)
|
||||||
|
})
|
||||||
|
.OrderBy(t => t.Distance)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else // Spieler in aktiver Fahrt
|
||||||
|
{
|
||||||
|
data = new
|
||||||
|
{
|
||||||
|
job.Id,
|
||||||
|
Status = 1,
|
||||||
|
JobData = new
|
||||||
|
{
|
||||||
|
taxiCalls.Where(t => t.Driver.Handle == player.Handle).First().Name
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var json = JsonConvert.SerializeObject(data);
|
||||||
|
|
||||||
|
player.TriggerEvent("SERVER:Job_ShowJobMenu", job.Name, json);
|
||||||
}
|
}
|
||||||
|
|
||||||
[RemoteEvent("CLIENT:Job_StartJob")]
|
[RemoteEvent("CLIENT:Job_StartJob")]
|
||||||
@@ -152,15 +194,13 @@ namespace ReallifeGamemode.Server.Managers
|
|||||||
if (job.NeedVehicleToStart && player.Vehicle != null)
|
if (job.NeedVehicleToStart && player.Vehicle != null)
|
||||||
{
|
{
|
||||||
VehicleStreaming.SetEngineState(player.Vehicle, false);
|
VehicleStreaming.SetEngineState(player.Vehicle, false);
|
||||||
VehicleStreaming.SetLockStatus(player.Vehicle, false);
|
|
||||||
player.WarpOutOfVehicle();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
job.StopJob(player);
|
job.StopJob(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
[ServerEvent(Event.PlayerExitVehicle)]
|
[ServerEvent(Event.PlayerExitVehicle)]
|
||||||
public void JobPlayerExitVehicle(Client player, Vehicle veh)
|
public void JobManagerPlayerExitVehicle(Client player, Vehicle veh)
|
||||||
{
|
{
|
||||||
User u = player.GetUser();
|
User u = player.GetUser();
|
||||||
|
|
||||||
@@ -174,5 +214,53 @@ namespace ReallifeGamemode.Server.Managers
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[ServerEvent(Event.PlayerEnterVehicle)]
|
||||||
|
public void JobManagerPlayerEnterVehicle(Client player, Vehicle veh, sbyte seat)
|
||||||
|
{
|
||||||
|
ServerVehicle sVeh = veh.GetServerVehicle();
|
||||||
|
if (sVeh == null) return;
|
||||||
|
|
||||||
|
if (sVeh is JobVehicle jV && jV.JobId == 1) // Spieler steigt in Taxi ein
|
||||||
|
{
|
||||||
|
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
|
||||||
|
|
||||||
|
var taxiContracts = taxiJob.TaxiContracts.Where(t => t.Name == player.Name);
|
||||||
|
if (taxiContracts.Count() == 0) return;
|
||||||
|
|
||||||
|
var contract = taxiContracts.First();
|
||||||
|
taxiJob.TaxiContracts.Remove(contract);
|
||||||
|
|
||||||
|
contract.Driver.SendChatMessage($"!{{02FCFF}}{player.Name} ist in ein Taxi eingestiegen, der Auftrag wurde beendet.");
|
||||||
|
player.SendChatMessage($"!{{02FCFF}}Du bist in ein Taxi eingestiegen, der Auftrag wurde beendet.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[RemoteEvent("CLIENT:JobManager_TaxiJob_AcceptCall")]
|
||||||
|
public void TaxiJobAcceptCall(Client player, string name)
|
||||||
|
{
|
||||||
|
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
|
||||||
|
|
||||||
|
if (!taxiJob.TaxiContracts.Any(t => t.Name == name))
|
||||||
|
{
|
||||||
|
ChatService.Error(player, "Dieser Spieler hat kein Taxi gerufen oder der Auftrag ist nicht mehr aktuell");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var job = taxiJob.TaxiContracts.Where(t => t.Name == name).First();
|
||||||
|
|
||||||
|
var target = NAPI.Player.GetPlayerFromName(name);
|
||||||
|
if (target == null)
|
||||||
|
{
|
||||||
|
taxiJob.TaxiContracts.Remove(job);
|
||||||
|
ChatService.Error(player, "Dieser Spieler ist nicht mehr online");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
job.Driver = player;
|
||||||
|
|
||||||
|
target.SendChatMessage($"!{{02FCFF}}Dein Auftrag wurde von {player.Name} angenommen. Warte an deiner aktuellen Position.");
|
||||||
|
player.SendChatMessage($"!{{02FCFF}}Du hast den Auftrag von {name} angenommen. Hole ihn nun ab.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
16
ReallifeGamemode.Server/Util/TaxiContract.cs
Normal file
16
ReallifeGamemode.Server/Util/TaxiContract.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
using GTANetworkAPI;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ReallifeGamemode.Server.Util
|
||||||
|
{
|
||||||
|
class TaxiContract
|
||||||
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public Vector3 Position { get; set; }
|
||||||
|
|
||||||
|
public Client Driver { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user