Maybe finished taxi job

This commit is contained in:
hydrant
2019-05-21 21:35:49 +02:00
parent 425ea3e143
commit 7d0de9c662
10 changed files with 897 additions and 210 deletions

View File

@@ -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();
}); });

View File

@@ -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);
});
} }

View File

@@ -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);

File diff suppressed because it is too large Load Diff

View File

@@ -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"
}, },

View File

@@ -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()

View File

@@ -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);
}
} }
} }

View File

@@ -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

View File

@@ -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.");
}
} }
} }

View 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; }
}
}