Files
reallife-gamemode/ReallifeGamemode.Server/Factions/Medic/Medic.cs
2021-02-05 20:29:06 +01:00

170 lines
5.0 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, string victimName)
{
Player target = PlayerService.GetPlayerByNameOrId(victimName);
switch (type)
{
case 0:
ReviveTasks[index].MedicName = victimName;
ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat den Reviveauftrag von " + victimName + " angenommen.", new List<int>() { 2 });
target.SendNotification("~w~Sanitäter~g~ " + player.Name + "~w~ eilt zur Rettung.");
break;
case 1:
HealTasks[index].MedicName = victimName;
ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat den Healauftrag von " + victimName + " angenommen.", new List<int>() { 2 });
target.SendNotification("~w~Sanitäter~g~ " + player.Name + "~w~ hat deinen Auftrag angenommen.");
break;
case 2:
FireTasks[index].MedicName = victimName;
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("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");
}
[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);
}
}
}