|
|
|
|
@@ -25,71 +25,74 @@ namespace ReallifeGamemode.Server.Events
|
|
|
|
|
public class Death : Script
|
|
|
|
|
{
|
|
|
|
|
[ServerEvent(Event.PlayerDeath)]
|
|
|
|
|
public void OnPlayerDeath(Player player, Player killer, uint reason )
|
|
|
|
|
public void OnPlayerDeath(Player player, Player killer, uint reason)
|
|
|
|
|
{
|
|
|
|
|
if (!player.IsLoggedIn())
|
|
|
|
|
{
|
|
|
|
|
player.Kick();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
player.SetData("isDead", true);
|
|
|
|
|
|
|
|
|
|
using var dbContext = new DatabaseContext();
|
|
|
|
|
|
|
|
|
|
using (var userDeath = new DatabaseContext())
|
|
|
|
|
{
|
|
|
|
|
User userisdead = player.GetUser(userDeath);
|
|
|
|
|
userisdead.Dead = true;
|
|
|
|
|
userDeath.SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
User user = player.GetUser(dbContext);
|
|
|
|
|
|
|
|
|
|
PositionManager.cuffPoints.Remove(player);
|
|
|
|
|
|
|
|
|
|
//TODO: Zum Full Release entfernen
|
|
|
|
|
if (player.HasData("togdeath")) {
|
|
|
|
|
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)
|
|
|
|
|
if (player.HasData("togdeath"))
|
|
|
|
|
{
|
|
|
|
|
killerId = null;
|
|
|
|
|
killerPosX = -1;
|
|
|
|
|
killerPosY = -1;
|
|
|
|
|
killerPosZ = -1;
|
|
|
|
|
killerHeading = -1;
|
|
|
|
|
ChatService.SendMessage(player, "Du bist durch " + (killer?.Name ?? "Niemanden") + " gestorben: " + reason.ToString());
|
|
|
|
|
}
|
|
|
|
|
int? killerId = null;
|
|
|
|
|
float killerPosX = -1;
|
|
|
|
|
float killerPosY = -1;
|
|
|
|
|
float killerPosZ = -1;
|
|
|
|
|
float killerHeading = -1;
|
|
|
|
|
|
|
|
|
|
if (killer.IsLoggedIn())
|
|
|
|
|
{
|
|
|
|
|
var killerUser = killer.GetUser(dbContext);
|
|
|
|
|
if (killerUser != null)
|
|
|
|
|
{
|
|
|
|
|
killerId = killerUser.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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool copNearby = NAPI.Pools.GetAllPlayers().Any(u => u.IsDuty() && u.IsAlive() && u.Position.DistanceToSquared(player.Position) <= 200 * 200);
|
|
|
|
|
|
|
|
|
|
if (copNearby)
|
|
|
|
|
{
|
|
|
|
|
user.SetJailTime(true);
|
|
|
|
|
Jail.Check_PutBehindBars(user);
|
|
|
|
|
ChatService.HQMessage(user.Name + " wurde ins Gefängnis eingeliefert.");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var killerUser = killer.GetUser();
|
|
|
|
|
if (killerUser == null)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
killerId = killerUser.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);
|
|
|
|
|
}
|
|
|
|
|
ChatService.HQMessage(user.Name + " wurde soeben ins Krankenhaus eingeliefert.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
User user = player.GetUser();
|
|
|
|
|
|
|
|
|
|
if (user.JailTime <= 0)
|
|
|
|
|
{
|
|
|
|
|
player.SetData("isDead", true);
|
|
|
|
|
|
|
|
|
|
user.Dead = true;
|
|
|
|
|
|
|
|
|
|
if (!player.HasData("reviveSperre"))
|
|
|
|
|
{
|
|
|
|
|
//MEDIC AUFTRAG
|
|
|
|
|
@@ -108,8 +111,6 @@ namespace ReallifeGamemode.Server.Events
|
|
|
|
|
Medic.delHealTask(player);
|
|
|
|
|
ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " ist soeben verstorben.", new List<int>() { 2 });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (player.GetUser().IsAdmin(AdminLevel.ADMIN) == true)
|
|
|
|
|
{
|
|
|
|
|
@@ -123,32 +124,28 @@ namespace ReallifeGamemode.Server.Events
|
|
|
|
|
//TODO PICTURE NOTIFICATION + SOUND für Medics
|
|
|
|
|
|
|
|
|
|
player.ClearAttachments();
|
|
|
|
|
|
|
|
|
|
using (var userDeath = new DatabaseContext())
|
|
|
|
|
List<UserItem> fItem = dbContext.UserItems.Where(u => u.UserId == user.Id).ToList();
|
|
|
|
|
foreach (var item in fItem)
|
|
|
|
|
{
|
|
|
|
|
List<UserItem> fItem = userDeath.UserItems.Where(u => u.UserId == user.Id).ToList();
|
|
|
|
|
foreach (var item in fItem)
|
|
|
|
|
IItem iItem = InventoryManager.GetItemById(item.ItemId);
|
|
|
|
|
if (iItem is IWeaponDealItem obj)
|
|
|
|
|
{
|
|
|
|
|
IItem iItem = InventoryManager.GetItemById(item.ItemId);
|
|
|
|
|
if (iItem is IWeaponDealItem obj)
|
|
|
|
|
{
|
|
|
|
|
int amount = item.Amount;
|
|
|
|
|
int amount = item.Amount;
|
|
|
|
|
|
|
|
|
|
Vector3 dropPosition = PlayerExtension.GetPositionFromPlayer(player, 0.6f, 0);
|
|
|
|
|
//new Vector3(player.Position.X, player.Position.Y, player.Position.Z - 0.8f);
|
|
|
|
|
Random r = new Random();
|
|
|
|
|
GTANetworkAPI.Object grndObject;
|
|
|
|
|
Vector3 textPos = dropPosition;
|
|
|
|
|
Vector3 dropPosition = PlayerExtension.GetPositionFromPlayer(player, 0.6f, 0);
|
|
|
|
|
//new Vector3(player.Position.X, player.Position.Y, player.Position.Z - 0.8f);
|
|
|
|
|
Random r = new Random();
|
|
|
|
|
GTANetworkAPI.Object grndObject;
|
|
|
|
|
Vector3 textPos = dropPosition;
|
|
|
|
|
|
|
|
|
|
dropPosition.Z -= 1.05f;
|
|
|
|
|
grndObject = NAPI.Object.CreateObject(3666746839, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 255, 0);
|
|
|
|
|
dropPosition.Z -= 1.05f;
|
|
|
|
|
grndObject = NAPI.Object.CreateObject(3666746839, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 255, 0);
|
|
|
|
|
|
|
|
|
|
GroundItem grndItem = new GroundItem { ItemId = iItem.Id, Amount = amount, Position = dropPosition };
|
|
|
|
|
TextLabel grndTxtLbl = NAPI.TextLabel.CreateTextLabel(iItem.Name + " ~s~(~y~" + amount + "~s~)", textPos, 5, 0.5f, 4, new Color(255, 255, 255), false, 0);
|
|
|
|
|
GroundItem.AddGroundItem(grndItem, grndObject, grndTxtLbl);
|
|
|
|
|
GroundItem grndItem = new GroundItem { ItemId = iItem.Id, Amount = amount, Position = dropPosition };
|
|
|
|
|
TextLabel grndTxtLbl = NAPI.TextLabel.CreateTextLabel(iItem.Name + " ~s~(~y~" + amount + "~s~)", textPos, 5, 0.5f, 4, new Color(255, 255, 255), false, 0);
|
|
|
|
|
GroundItem.AddGroundItem(grndItem, grndObject, grndTxtLbl);
|
|
|
|
|
|
|
|
|
|
userDeath.Remove(item);
|
|
|
|
|
}
|
|
|
|
|
dbContext.Remove(item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var dead = new Database.Entities.Logs.Death
|
|
|
|
|
@@ -165,8 +162,7 @@ namespace ReallifeGamemode.Server.Events
|
|
|
|
|
VictimHeading = player.Heading,
|
|
|
|
|
CauseOfDeath = reason.ToString()
|
|
|
|
|
};
|
|
|
|
|
userDeath.DeathLogs.Add(dead);
|
|
|
|
|
userDeath.SaveChanges();
|
|
|
|
|
dbContext.DeathLogs.Add(dead);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Job.JobBase job = Managers.JobManager.GetJob(player.GetUser().JobId ?? -1);
|
|
|
|
|
@@ -219,9 +215,7 @@ namespace ReallifeGamemode.Server.Events
|
|
|
|
|
//ChatService.SendMessage(player, "Debug10");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//JailTime.cs
|
|
|
|
|
Jail.Check_PutBehindBars(player);
|
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[RemoteEvent("RespawnPlayerAtHospital")]
|
|
|
|
|
|