178 lines
5.5 KiB
C#
178 lines
5.5 KiB
C#
using System.Collections.Generic;
|
|
using GTANetworkAPI;
|
|
using Newtonsoft.Json;
|
|
using ReallifeGamemode.Server.Services;
|
|
using System.Linq;
|
|
using ReallifeGamemode.Services;
|
|
using ReallifeGamemode.Database.Entities;
|
|
using ReallifeGamemode.Database.Models;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
/**
|
|
* @overview Life of German Reallife - Server Factions Medic Medic.cs
|
|
* @author VegaZ
|
|
* @copyright (c) 2008 - 2018 Life of German
|
|
*/
|
|
|
|
namespace ReallifeGamemode.Server.Factions.Medic
|
|
{
|
|
public class Medic : Script
|
|
{
|
|
public static List<MedicTask> ReviveTasks = new List<MedicTask>();
|
|
public static List<MedicTask> HealTasks = new List<MedicTask>();
|
|
public static List<MedicTask> FireTasks = new List<MedicTask>();
|
|
public static int ReviveIncome = 500;
|
|
public static int dutyMedics = 0;
|
|
|
|
public static void AddTaskToList(MedicTask task)
|
|
{
|
|
if (task == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
switch (task.Type)
|
|
{
|
|
case MedicTaskType.REVIVE:
|
|
ReviveTasks.Add(task);
|
|
break;
|
|
|
|
case MedicTaskType.HEAL:
|
|
HealTasks.Add(task);
|
|
break;
|
|
|
|
case MedicTaskType.FIRE:
|
|
FireTasks.Add(task);
|
|
break;
|
|
}
|
|
}
|
|
|
|
public static void RemoveTaskFromList(MedicTask task)
|
|
{
|
|
if (task == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
switch (task.Type)
|
|
{
|
|
case MedicTaskType.REVIVE:
|
|
ReviveTasks.Remove(task);
|
|
break;
|
|
|
|
case MedicTaskType.HEAL:
|
|
HealTasks.Remove(task);
|
|
break;
|
|
|
|
case MedicTaskType.FIRE:
|
|
FireTasks.Remove(task);
|
|
break;
|
|
}
|
|
}
|
|
|
|
[RemoteEvent("loadMedicTasks")]
|
|
public void LoadMedicTasks(Player player, int type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case 0:
|
|
player.TriggerEvent("showMedicTasks", 0, JsonConvert.SerializeObject(ReviveTasks));
|
|
break;
|
|
|
|
case 1:
|
|
player.TriggerEvent("showMedicTasks", 1, JsonConvert.SerializeObject(HealTasks));
|
|
break;
|
|
|
|
case 2:
|
|
player.TriggerEvent("showMedicTasks", 2, JsonConvert.SerializeObject(FireTasks));
|
|
break;
|
|
}
|
|
}
|
|
|
|
[RemoteEvent("updateMedicTask")]
|
|
public void UpdateMedicTasks(Player player, int type, int index)
|
|
{
|
|
Player target = PlayerService.GetPlayerByNameOrId(ReviveTasks[index].Victim);
|
|
switch (type)
|
|
{
|
|
case 0:
|
|
|
|
ReviveTasks[index].MedicName = player.Name;
|
|
ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat den Reviveauftrag von " + ReviveTasks[index].Victim + " angenommen.", new List<int>() { 2 });
|
|
target.SendNotification("~w~Sanitäter~g~ " + player.Name + "~w~ eilt zur Rettung.");
|
|
|
|
break;
|
|
|
|
case 1:
|
|
HealTasks[index].MedicName = player.Name;
|
|
ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat den Healauftrag von " + ReviveTasks[index].Victim + " angenommen.", new List<int>() { 2 });
|
|
target.SendNotification("~w~Sanitäter~g~ " + player.Name + "~w~ hat deinen Auftrag angenommen.");
|
|
break;
|
|
|
|
case 2:
|
|
FireTasks[index].MedicName = player.Name;
|
|
break;
|
|
}
|
|
}
|
|
|
|
[RemoteEvent("delHealTask")]
|
|
public static void delHealTask(Player player)
|
|
{
|
|
MedicTask task = HealTasks.FirstOrDefault(t => t.Victim == player.Name);
|
|
RemoveTaskFromList(task);
|
|
player.SetData("healauftrag", false);
|
|
}
|
|
|
|
[RemoteEvent("delReviveTask")]
|
|
public static void delReviveTask(Player player)
|
|
{
|
|
MedicTask task = ReviveTasks.FirstOrDefault(t => t.Victim == player.Name);
|
|
RemoveTaskFromList(task);
|
|
}
|
|
[RemoteEvent("delReviveTaskMedic")]
|
|
public static void delReviveTaskMedic(Player player)
|
|
{
|
|
MedicTask task = ReviveTasks.FirstOrDefault(t => t.MedicName == player.Name);
|
|
RemoveTaskFromList(task);
|
|
}
|
|
|
|
[RemoteEvent("RemoveMedicCheckpoint")]
|
|
public void RemoveMedicCheckpoint(Player player)
|
|
{
|
|
MedicTask task = ReviveTasks.FirstOrDefault(t => t.Victim == player.Name);
|
|
var medic = PlayerService.GetPlayerByNameOrId(task.MedicName);
|
|
medic.TriggerEvent("checkPointTimeout");
|
|
medic.SendNotification("Der Auftrag wurde abgebrochen da du nicht innerhalb der Zeit am Einsatzort warst!");
|
|
}
|
|
[RemoteEvent("CutMedicEarnings")]
|
|
public void CutMedicEarnings(Player player)
|
|
{
|
|
MedicTask task = ReviveTasks.FirstOrDefault(t => t.Victim == player.Name);
|
|
var medic = PlayerService.GetPlayerByNameOrId(task.MedicName);
|
|
medic.TriggerEvent("cutMedicEarnings");
|
|
medic.SendChatMessage("DEBUG: Der Spieler wurde respawnt. Nur noch 50% des Verdienst");
|
|
NAPI.Chat.SendChatMessageToAll("DEBUG: Player:" + player.Name + " Medic:" + medic.Name);
|
|
}
|
|
[RemoteEvent("PayCutMedicEarnings")]
|
|
public void PayCutMedicEarnings(Player player)
|
|
{
|
|
using var dbContext = new DatabaseContext();
|
|
dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == 2).First().BankAccount.Balance += Medic.ReviveIncome / 2;
|
|
player.SendNotification($"Du hast den Einsatzort erreicht und ~g~{Medic.ReviveIncome / 2}$ ~s~für die Fraktion verdient.");
|
|
dbContext.SaveChanges();
|
|
}
|
|
|
|
[RemoteEvent("MedicTaskTimeout")]
|
|
public void RemoveMedicTask(Player player)
|
|
{
|
|
Medic.delReviveTask(player);
|
|
}
|
|
|
|
public static void UpdateDutyMedics(int modifier)
|
|
{
|
|
dutyMedics = dutyMedics + modifier;
|
|
NAPI.ClientEvent.TriggerClientEventForAll("updateDutyMedics", dutyMedics);
|
|
}
|
|
}
|
|
}
|