Files
reallife-gamemode/ReallifeGamemode.Server/Events/Death.cs

160 lines
4.9 KiB
C#

using System;
using GTANetworkAPI;
using ReallifeGamemode.Database;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Factions.Medic;
using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Types;
using ReallifeGamemode.Server.Util;
using ReallifeGamemode.Server.Wanted;
/**
* @overview Life of German Reallife - Events Death (Death.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/
namespace ReallifeGamemode.Server.Events
{
public class Death : Script
{
[ServerEvent(Event.PlayerDeath)]
public void OnPlayerDeath(Player player, Player killer, uint reason)
{
if (!player.IsLoggedIn()) player.Kick();
player.SetData("isDead", true);
//TODO: Zum Full Release entfernen
ChatService.SendMessage(player, "Du bist durch " + (killer?.Name ?? "Niemanden") + " gestorben: " + reason.ToString());
int? killerId;
float killerPosX;
float killerPosY;
float killerPosZ;
float killerHeading;
if (killer == null || killer.IsNull)
{
killerId = null;
killerPosX = -1;
killerPosY = -1;
killerPosZ = -1;
killerHeading = -1;
}
else
{
killerId = killer.GetUser().Id;
killerPosX = killer.Position.X;
killerPosY = killer.Position.Y;
killerPosZ = killer.Position.Z;
killerHeading = killer.Heading;
if (player.HasData("inGangWar") && killer.HasData("inGangWar"))
{
Gangwar.Gangwar.GangwarKill(killer, player);
}
if (player != killer)
{
Autowanted.Check_AutoWanted(killer, player);
string message = "~y~[HINWEIS]: " + killer.Name + " hat " + player.Name + " getötet (" + Managers.WeaponManager.GetCauseOfDeathByHash(reason) + ")";
ChatService.BroadcastAdmin(message, AdminLevel.ADMIN);
}
}
User user = player.GetUser();
if (user.JailTime <= 0)
{
//MEDIC AUFTRAG
MedicTask reviveTask = new MedicTask()
{
Victim = player.Name,
Position = player.Position,
CauseOfDeath = reason.ToString(),
Caller = null,
Description = "Gestorben",
Time = DateTime.Now,
Type = MedicTaskType.REVIVE,
MedicName = "none"
};
Medic.AddTaskToList(reviveTask);
if (player.GetUser().IsAdmin(AdminLevel.ADMIN) == true)
{
player.TriggerEvent("startDeathTimer", true);
}
else
{
player.TriggerEvent("startDeathTimer", false);
}
//TODO PICTURE NOTIFICATION + SOUND für Medics
using (var userDeath = new DatabaseContext())
{
var dead = new Database.Entities.Logs.Death
{
VictimId = player.GetUser().Id,
KillerId = killerId,
KillerPositionX = killerPosX,
KillerPositionY = killerPosY,
KillerPositionZ = killerPosZ,
KillerHeading = killerHeading,
VictimPositionX = player.Position.X,
VictimPositionY = player.Position.Y,
VictimPositionZ = player.Position.Z,
VictimHeading = player.Heading,
CauseOfDeath = reason.ToString()
};
userDeath.DeathLogs.Add(dead);
userDeath.SaveChanges();
}
}
Job.JobBase job = Managers.JobManager.GetJob(player.GetUser().JobId ?? -1);
if (job != null)
{
if (player.Vehicle.GetServerVehicle() is JobVehicle vehJ)
{
if (player.Vehicle.GetData<bool>("timerJobVehicleRespawn") == true)
{
if (vehJ.GetJob().GetUsersInJob().Contains(player))
{
if (player.Vehicle != null)
{
player.Vehicle.ResetData("timerJobVehicleRespawn");
ServerVehicle sVeh = Managers.VehicleManager.GetServerVehicleFromVehicle(player.Vehicle);
ServerVehicleExtensions.Spawn(sVeh, player.Vehicle);
}
}
}
}
Managers.JobManager jm = new Managers.JobManager();
if (jm.playerTimersJobVehicleRespawn.ContainsKey(player))
{
jm.playerTimersJobVehicleRespawn[player].Stop();
}
player.ResetData("HatRoute");
player.ResetData("PilotenBase");
job.StopJob(player);
//ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet.");
CheckPointHandle.DeleteCheckpoints(player);
}
//JailTime.cs
Jail.Check_PutBehindBars(player);
}
[RemoteEvent("RespawnPlayerAtHospital")]
public void RespawnPlayerAtHospital(Player player)
{
player.SetData("isDead", false);
player.RemoveAllWeapons();
NAPI.Player.SpawnPlayer(player, new Vector3(-495.45, -336.33, 34.5),-98.36f);
}
}
}