Maybe finished taxi job
This commit is contained in:
@@ -13,8 +13,8 @@ namespace ReallifeGamemode.Server.Job
|
||||
{
|
||||
public abstract class JobBase
|
||||
{
|
||||
public delegate void JobStartHandler();
|
||||
public delegate void JobStopHandler();
|
||||
public delegate void JobStartHandler(Client player);
|
||||
public delegate void JobStopHandler(Client player);
|
||||
|
||||
public event JobStartHandler JobStart;
|
||||
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.");
|
||||
|
||||
JobStart?.Invoke();
|
||||
JobStart?.Invoke(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.");
|
||||
|
||||
JobStop?.Invoke();
|
||||
JobStop?.Invoke(player);
|
||||
}
|
||||
|
||||
public List<JobVehicle> GetJobVehicles()
|
||||
|
||||
@@ -2,15 +2,34 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
|
||||
namespace ReallifeGamemode.Server.Job
|
||||
{
|
||||
class TaxiDriverJob : JobBase
|
||||
{
|
||||
public List<TaxiContract> TaxiContracts { get; set; } = new List<TaxiContract>();
|
||||
|
||||
public override int Id => 1;
|
||||
|
||||
public override string Name => "Taxifahrer";
|
||||
|
||||
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")]
|
||||
public void CallServiceTaxi(Client player, string street, string zone)
|
||||
{
|
||||
string msg = $"!{{02FCFF}}{player.Name} hat in der {street} in {zone} ein Taxi gerufen.";
|
||||
ChatService.BroadcastJob(msg, JobManager.GetJob<TaxiDriverJob>());
|
||||
var taxiJob = 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
|
||||
#region Spielerinteraktionen PFEILTASTE-LINKS
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Server.Entities;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Job;
|
||||
@@ -107,7 +108,48 @@ namespace ReallifeGamemode.Server.Managers
|
||||
|
||||
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")]
|
||||
@@ -152,15 +194,13 @@ namespace ReallifeGamemode.Server.Managers
|
||||
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)
|
||||
public void JobManagerPlayerExitVehicle(Client player, Vehicle veh)
|
||||
{
|
||||
User u = player.GetUser();
|
||||
|
||||
@@ -174,5 +214,53 @@ namespace ReallifeGamemode.Server.Managers
|
||||
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