Merge branch 'develop' of ssh://development.life-of-german.org:451/log-gtav/reallife-gamemode into develop

This commit is contained in:
2021-04-09 00:09:35 +02:00
12 changed files with 258 additions and 268 deletions

View File

@@ -1,5 +1,6 @@
import * as NativeUI from '../libs/NativeUI'; import * as NativeUI from '../libs/NativeUI';
import InputHelper from '../inputhelper'; import InputHelper from '../inputhelper';
import relativeVector from '../util/relativevector';
const Menu = NativeUI.Menu; const Menu = NativeUI.Menu;
const UIMenuItem = NativeUI.UIMenuItem; const UIMenuItem = NativeUI.UIMenuItem;
const UIMenuListItem = NativeUI.UIMenuListItem; const UIMenuListItem = NativeUI.UIMenuListItem;
@@ -17,7 +18,7 @@ export default function factionInteraction(globalData: IGlobalData) {
var sorting = 0; var sorting = 0;
var firstSorting = true; var firstSorting = true;
var activeTask = null; var activeTask = null;
var activeCheckpoint; var activeCheckpoint: CheckpointMp;
var taskStart; var taskStart;
var taskFinish; var taskFinish;
var taskRange; var taskRange;
@@ -216,6 +217,7 @@ export default function factionInteraction(globalData: IGlobalData) {
let reviveTaskMenuMedic; let reviveTaskMenuMedic;
let healTaskMenuMedic; let healTaskMenuMedic;
let fireTaskMenuMedic; let fireTaskMenuMedic;
let deleteCheckpointItem;
if (userFactionId == 2) { if (userFactionId == 2) {
if (isDuty) { if (isDuty) {
@@ -231,6 +233,12 @@ export default function factionInteraction(globalData: IGlobalData) {
fireTaskMenuMedic.SetRightLabel(fPM + fireTaskCountMedic); fireTaskMenuMedic.SetRightLabel(fPM + fireTaskCountMedic);
factionInteractionMenu.AddItem(fireTaskMenuMedic); factionInteractionMenu.AddItem(fireTaskMenuMedic);
*/ */
if (activeTask != null) {
if (activeTask.Type == 1 && activeCheckpoint && mp.checkpoints.exists(activeCheckpoint)) {
deleteCheckpointItem = new UIMenuItem("~r~Checkpoint löschen");
factionInteractionMenu.AddItem(deleteCheckpointItem);
}
}
} }
} }
@@ -260,6 +268,13 @@ export default function factionInteraction(globalData: IGlobalData) {
mp.gui.chat.activate(true); mp.gui.chat.activate(true);
globalData.InMenu = false; globalData.InMenu = false;
break; break;
case deleteCheckpointItem:
factionInteractionMenu.Close();
mp.gui.chat.activate(true);
globalData.InMenu = false;
mp.events.call("destroyMedicTaskCheckpoint");
break;
} }
}); });
@@ -305,7 +320,7 @@ export default function factionInteraction(globalData: IGlobalData) {
mp.game.graphics.requestStreamedTextureDict("medicimages", true); mp.game.graphics.requestStreamedTextureDict("medicimages", true);
mp.events.callRemote("updateMedicTask", 0, tasks[index].Victim); mp.events.callRemote("updateMedicTask", 0, tasks[index].Victim);
mp.game.ui.setNewWaypoint(tasks[index].Position.x, tasks[index].Position.y); mp.game.ui.setNewWaypoint(tasks[index].Position.x, tasks[index].Position.y);
activeCheckpoint = mp.checkpoints.new(1, new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 2), 3.0, activeCheckpoint = mp.checkpoints.new(4, new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 2), 3.0,
{ {
direction: new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 5), direction: new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 5),
color: [255, 0, 0, 150], color: [255, 0, 0, 150],
@@ -359,7 +374,7 @@ export default function factionInteraction(globalData: IGlobalData) {
mp.game.graphics.requestStreamedTextureDict("medicimages", true); mp.game.graphics.requestStreamedTextureDict("medicimages", true);
mp.events.callRemote("updateMedicTask", 1, tasks[index].Victim); mp.events.callRemote("updateMedicTask", 1, tasks[index].Victim);
mp.game.ui.setNewWaypoint(tasks[index].Position.x, tasks[index].Position.y); mp.game.ui.setNewWaypoint(tasks[index].Position.x, tasks[index].Position.y);
activeCheckpoint = mp.checkpoints.new(1, new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 2), 3.0, activeCheckpoint = mp.checkpoints.new(4, new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 2), 3.0,
{ {
direction: new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 5), direction: new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 5),
color: [255, 0, 0, 150], color: [255, 0, 0, 150],
@@ -389,73 +404,13 @@ export default function factionInteraction(globalData: IGlobalData) {
} }
}); });
/* mp.events.add('playerEnterCheckpoint', (activeCheckpoint) => {
mp.events.add("sortFactionTasks", (sortByKey) => { if (activeTask.Type == 1) {
if (firstSorting) { activeCheckpoint.destroy();
sortText = "Nach Uhrzeit"; activeCheckpoint = null;
firstSorting = false; activeTask = null;
//mp.gui.chat.push("Init Sort"); timeLeft = null;
return;
} else {
if (sortByKey) {
if (sorting < 1) {
sorting++;
} else {
sorting = 0;
} }
switch (sorting) {
case 0: //Standartsortierung
reviveTaskMenuMedic.Close();
factionInteractionMenu.Close();
sortText = "Nach Uhrzeit";
mp.events.call("showMedicTasks", 0, JSON.stringify(initTasks));
break;
case 1: //Sortierung nach Metern (aufsteigend)
for (var d = 0; d < tasks.length; d++) {
for (var e = 0; e < tasks.length - 1; e++) {
if (getDistance1(e) > getDistance2(e + 1)) {
var tempTask = tasks[e];
tasks[e] = tasks[e + 1];
tasks[e + 1] = tempTask;
mp.gui.chat.push("SWITCH");
}
}
}
reviveTaskMenuMedic.Close();
factionInteractionMenu.Close();
sortText = "Entfernung aufsteigend";
mp.events.call("showMedicTasks", 0, JSON.stringify(tasks));
break;
//case 2: //Sortierung nach Metern (absteigend)
// mp.gui.chat.push("Sorting 2");
// sortText = "Entfernung absteigend";
// break;
//case 3: //Sortierung nach Zeit (aufsteigend)
// mp.gui.chat.push("Sorting 3");
// sortText = "Restzeit aufsteigend";
// break;
//case 4: //Sortierung nach Zeit (absteigend)
// mp.gui.chat.push("Sorting 4");
// sortText = "Restzeit absteigend";
// break;
}
}
}
});*/
function getDistance1(index) {
return mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, newTasks[index].Position.x, newTasks[index].Position.y, newTasks[index].Position.z, true).toFixed(2);
}
function getDistance2(index) {
return mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, newTasks[index].Position.x, newTasks[index].Position.y, newTasks[index].Position.z, true).toFixed(2);
}
mp.events.add("cutMedicEarnings", () => {
deadRespawned = true;
}); });
mp.events.add("destroyMedicTaskCheckpoint", () => { mp.events.add("destroyMedicTaskCheckpoint", () => {
@@ -464,24 +419,6 @@ export default function factionInteraction(globalData: IGlobalData) {
activeCheckpoint = null; activeCheckpoint = null;
activeTask = null; activeTask = null;
timeLeft = null; timeLeft = null;
mp.events.callRemote("MedicTaskTimeout");
}
});
mp.events.add('playerEnterCheckpoint', (activeCheckpoint) => {
if (deadRespawned == true) {
activeCheckpoint.destroy();
activeCheckpoint = null;
mp.events.callRemote("PayCutMedicEarnings");
activeTask = null;
deadRespawned = false;
timeLeft = null;
} else if (activeTask.Type == 1) {
activeCheckpoint.destroy();
activeCheckpoint = null;
mp.events.callRemote("delHealTaskAsMedic", activeTask.Victim);
activeTask = null;
timeLeft = null;
} }
}); });
@@ -491,7 +428,23 @@ export default function factionInteraction(globalData: IGlobalData) {
} }
}); });
mp.events.add('render', () => { mp.events.add('updateHealCheckpoint', (xPos, yPos, zPos) => {
if (activeTask && activeTask.Type == 1) {
activeCheckpoint.destroy();
activeCheckpoint = null;
activeCheckpoint = mp.checkpoints.new(4, new mp.Vector3(xPos, yPos, zPos - 2), 3.0,
{
direction: new mp.Vector3(xPos, yPos, zPos - 5),
color: [255, 0, 0, 150],
visible: true,
dimension: 0
});
mp.game.ui.setNewWaypoint(xPos, yPos);
}
});
function renderMedicGui() {
if (activeTask) { if (activeTask) {
rangeLeft = mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, taskFinish.x, taskFinish.y, taskFinish.z, true).toFixed(2); rangeLeft = mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, taskFinish.x, taskFinish.y, taskFinish.z, true).toFixed(2);
if (rangeLeft > 1.9) { if (rangeLeft > 1.9) {
@@ -513,18 +466,10 @@ export default function factionInteraction(globalData: IGlobalData) {
} }
} }
var currentDate = new Date();
if (timeLeft != null) { if (timeLeft != null) {
if (deadRespawned == false) { if (deadRespawned == false) {
//timeLeft = Math.round(Math.abs(Math.floor(currentDate.getTime() / 1000) - activeTask.TimeLeft - 60));
if (timeLeft < 120) mp.events.call("cutMedicEarnings");
} else {
//timeLeft = Math.round(Math.abs(Math.floor(currentDate.getTime() / 1000) - activeTask.TimeLeft - 120));
if (timeLeft < 1) mp.events.call("destroyMedicTaskCheckpoint"); if (timeLeft < 1) mp.events.call("destroyMedicTaskCheckpoint");
}
if (deadRespawned == false) {
mp.game.graphics.drawText(timeLeft + "s", [0.5, 0.85], { mp.game.graphics.drawText(timeLeft + "s", [0.5, 0.85], {
font: 7, font: 7,
color: [60, 179, 113, 255], color: [60, 179, 113, 255],
@@ -545,5 +490,9 @@ export default function factionInteraction(globalData: IGlobalData) {
} }
} }
} }
}
mp.events.add('render', () => {
renderMedicGui();
}); });
} }

View File

@@ -471,13 +471,14 @@ namespace ReallifeGamemode.Server.Commands
Medic.UpdateDutyMedics(-1); Medic.UpdateDutyMedics(-1);
} }
string targetPlayername = NAPI.Player.GetPlayerName(target);
string adminPlayername = NAPI.Player.GetPlayerName(player); string adminPlayername = NAPI.Player.GetPlayerName(player);
ChatService.SendMessage(target, "~r~KICKINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gekickt: " + reason); ChatService.SendMessage(target, "~r~KICKINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gekickt: " + reason);
target.Kick();
ChatService.BroadcastAdmin("~y~SKICK: ~w~" + targetPlayername + " wurde von " + player.GetUser().AdminLevel.GetName() + " " + adminPlayername + " gekickt: " + reason, AdminLevel.SUPPORTER); NAPI.Task.Run(() => {
target.Kick();
}, 2500);
ChatService.BroadcastAdmin("~y~SKICK: ~w~" + targetname + " wurde von " + player.GetUser().AdminLevel.GetName() + " " + adminPlayername + " gekickt: " + reason, AdminLevel.SUPPORTER);
} }
[Command("clearchat", "~m~Benutzung: ~s~/clearchat")] [Command("clearchat", "~m~Benutzung: ~s~/clearchat")]
@@ -785,14 +786,15 @@ namespace ReallifeGamemode.Server.Commands
Medic.UpdateDutyMedics(-1); Medic.UpdateDutyMedics(-1);
} }
string targetPlayername = NAPI.Player.GetPlayerName(target);
string adminPlayername = NAPI.Player.GetPlayerName(player); string adminPlayername = NAPI.Player.GetPlayerName(player);
ChatService.SendMessage(target, "~r~KICKINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gekickt: " + reason); ChatService.SendMessage(target, "~r~KICKINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gekickt: " + reason);
NAPI.Task.Run(() => {
target.Kick(); target.Kick();
}, 2500);
ChatService.Broadcast("~y~INFO: ~w~" + targetPlayername + " wurde von " + player.GetUser().AdminLevel.GetName() + " " + adminPlayername + " gekickt: " + reason); ChatService.Broadcast("~y~INFO: ~w~" + targetname + " wurde von " + player.GetUser().AdminLevel.GetName() + " " + adminPlayername + " gekickt: " + reason);
} }
[Command("warn", "~m~Benutzung: ~s~/warn [Player] [Grund]", GreedyArg = true)] [Command("warn", "~m~Benutzung: ~s~/warn [Player] [Grund]", GreedyArg = true)]
@@ -874,7 +876,19 @@ namespace ReallifeGamemode.Server.Commands
reason = Regex.Replace(reason, "(~[a-zA-Z]~)|(!{(.*)})", ""); reason = Regex.Replace(reason, "(~[a-zA-Z]~)|(!{(.*)})", "");
string adminPlayername = NAPI.Player.GetPlayerName(admin);
String banMessage = "~r~BANINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gebannt: " + reason;
if (mins > 0)
{
banMessage = "~r~BANINFO: ~w~Du wurdest von " + adminPlayername + " für " + mins + " Minuten vom Server gebannt: " + reason;
}
ChatService.SendMessage(target, banMessage);
NAPI.Task.Run(() => {
target.GetUser().BanPlayer(admin, reason, mins); target.GetUser().BanPlayer(admin, reason, mins);
}, 2500);
} }
[Command("unban", "~m~Benutzung: ~s~/unban [Name] ")] [Command("unban", "~m~Benutzung: ~s~/unban [Name] ")]

View File

@@ -398,6 +398,7 @@ namespace ReallifeGamemode.Server.Commands
ChatService.SendMessage(target, "~g~" + player.Name + " ~s~möchte dich für ~g~$" + price + " ~s~heilen. Drücke ~g~J~s~ zum Erlauben oder ~r~N ~s~zum Verbieten"); ChatService.SendMessage(target, "~g~" + player.Name + " ~s~möchte dich für ~g~$" + price + " ~s~heilen. Drücke ~g~J~s~ zum Erlauben oder ~r~N ~s~zum Verbieten");
player.SendNotification("Du hast " + target.Name + " einen Heal angeboten", false); player.SendNotification("Du hast " + target.Name + " einen Heal angeboten", false);
target.SetData<bool>("healDecision", true); target.SetData<bool>("healDecision", true);
Medic.delHealTask(target);
Medic.HealDecisions.Add(new Medic.HealDecision { dMedic = player, dTarget = target, dPrice = price }); Medic.HealDecisions.Add(new Medic.HealDecision { dMedic = player, dTarget = target, dPrice = price });
} }

View File

@@ -13,6 +13,7 @@ using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Types; using ReallifeGamemode.Server.Types;
using ReallifeGamemode.Server.Util; using ReallifeGamemode.Server.Util;
using ReallifeGamemode.Server.Wanted; using ReallifeGamemode.Server.Wanted;
using ReallifeGamemode.Services;
/** /**
* @overview Life of German Reallife - Events Death (Death.cs) * @overview Life of German Reallife - Events Death (Death.cs)
@@ -233,7 +234,10 @@ namespace ReallifeGamemode.Server.Events
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
player.RemoveAllWeapons(); player.RemoveAllWeapons();
//Medic.delReviveTask(player); MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == player.Name);
Player medicPlayer = PlayerService.GetPlayerByNameOrId(task.MedicName);
Medic.RemoveTaskFromList(task);
NAPI.Player.SpawnPlayer(player, new Vector3(-495.45, -336.33, 34.5), -98.36f); NAPI.Player.SpawnPlayer(player, new Vector3(-495.45, -336.33, 34.5), -98.36f);
} }
} }

View File

@@ -65,14 +65,14 @@ namespace ReallifeGamemode.Server.Events
} }
} }
*/ */
var listReports = Report.Report.listReports;
ReportManage temp; ReportManage temp;
for (int a = 0; a < listReports.Count; a++) for (int a = 0; a < Report.Report.listReports.Count; a++)
{ {
temp = listReports[a]; temp = Report.Report.listReports[a];
if (temp.getAdmin().Equals(player.Name)) if (temp.getAdmin().Equals(player.Name))
{ {
listReports.Remove(temp); Report.Report.listReports.Remove(temp);
Player user = PlayerService.GetPlayerByNameOrId(temp.getUser()); Player user = PlayerService.GetPlayerByNameOrId(temp.getUser());
user.SendChatMessage("!{#008fff}[REPORT]!{#FFFFFF} Chat beendet. Der Admin hat den Server verlassen"); user.SendChatMessage("!{#008fff}[REPORT]!{#FFFFFF} Chat beendet. Der Admin hat den Server verlassen");
@@ -81,10 +81,12 @@ namespace ReallifeGamemode.Server.Events
if (temp.getUser().Equals(player.Name)) if (temp.getUser().Equals(player.Name))
{ {
listReports.Remove(temp);
Player admin = PlayerService.GetPlayerByNameOrId(temp.getAdmin()); Player admin = PlayerService.GetPlayerByNameOrId(temp.getAdmin());
if (admin != null)
{
admin.SendChatMessage("!{#008fff}[REPORT]!{#FFFFFF} Chat beendet. Der User hat den Server verlassen"); admin.SendChatMessage("!{#008fff}[REPORT]!{#FFFFFF} Chat beendet. Der User hat den Server verlassen");
}
Report.Report.listReports.Remove(temp);
break; break;
} }
} }
@@ -132,12 +134,19 @@ namespace ReallifeGamemode.Server.Events
user.PositionZ = pos.Z; user.PositionZ = pos.Z;
saveUser.SaveChanges(); saveUser.SaveChanges();
user.Dead = player.HasData("isDead") ? (bool)player.GetData<bool>("isDead") : false; user.Dead = player.HasData("isDead") ? (bool)player.GetData<bool>("isDead") : false;
if (user.Wanteds > 0)
{
ChatService.HQMessage("Der Straftäter " + player.GetUser().Name + " ist vom Radar verschwunden");
}
} }
player.SetData("isLoggedIn", false); player.SetData("isLoggedIn", false);
player.TriggerEvent("CLIENT:DestroyPed", 1); player.TriggerEvent("CLIENT:DestroyPed", 1);
player.TriggerEvent("CLIENT:DestroyPed", 2); player.TriggerEvent("CLIENT:DestroyPed", 2);
player.TriggerEvent("CLIENT:DestroyPed", 3); player.TriggerEvent("CLIENT:DestroyPed", 3);
player.TriggerEvent("CLIENT:DestroyPed", 4); player.TriggerEvent("CLIENT:DestroyPed", 4);
Medic.delHealTask(player); Medic.delHealTask(player);
Medic.delReviveTask(player); Medic.delReviveTask(player);
if (player.GetData<bool>("duty") == true) if (player.GetData<bool>("duty") == true)

View File

@@ -37,9 +37,9 @@ namespace ReallifeGamemode.Server.Events
if (user == null) if (user == null)
{ {
player.TriggerEvent("SERVER:Login_Error", "Der Benutzer existiert nicht! Registriere dich zuerst!"); player.TriggerEvent("SERVER:Login_Error", "Der Benutzer existiert nicht! Registriere dich zuerst!");
return;
} }
else
{
if (user.SocialClubName != player.SocialClubName && user.Password == NAPI.Util.GetHashSha256(password)) if (user.SocialClubName != player.SocialClubName && user.Password == NAPI.Util.GetHashSha256(password))
{ {
player.TriggerEvent("SERVER:Login_Error", "Dieser Benutzer gehört dir nicht!"); player.TriggerEvent("SERVER:Login_Error", "Dieser Benutzer gehört dir nicht!");
@@ -51,9 +51,9 @@ namespace ReallifeGamemode.Server.Events
if (user.Password != NAPI.Util.GetHashSha256(password)) if (user.Password != NAPI.Util.GetHashSha256(password))
{ {
player.TriggerEvent("SERVER:Login_Error", "Passwort inkorrekt!"); player.TriggerEvent("SERVER:Login_Error", "Passwort inkorrekt!");
return;
} }
else
{
player.SetData("dbId", user.Id); player.SetData("dbId", user.Id);
player.Name = username; player.Name = username;
player.TriggerEvent("SERVER:Login_Success"); player.TriggerEvent("SERVER:Login_Success");
@@ -81,6 +81,10 @@ namespace ReallifeGamemode.Server.Events
user.Wanteds = user.Wanteds; user.Wanteds = user.Wanteds;
if (user.Wanteds > 0)
{
ChatService.HQMessage("Der Straftäter" + user.Name + " hat sich mit " + user.Wanteds + " Wanteds eingeloggt.");
}
if (user.Group != null) if (user.Group != null)
{ {
@@ -128,26 +132,26 @@ namespace ReallifeGamemode.Server.Events
} }
player.TriggerEvent("draw", player.Name, player.Handle.Value); player.TriggerEvent("draw", player.Name, player.Handle.Value);
NAPI.Task.Run(() =>
{
if (user.Dead == true) if (user.Dead == true)
{ {
if (user.IsAdmin(AdminLevel.ADMIN) == true) if (user.IsAdmin(AdminLevel.ADMIN) == true)
{ {
player.TriggerEvent("startDeathTimer", true); player.TriggerEvent("startDeathTimer", true);
player.Health = 0;
} }
else else
{ {
player.TriggerEvent("startDeathTimer", false); player.TriggerEvent("startDeathTimer", false);
player.Health = 0;
} }
player.Health = 0;
player.SetData("isDead", true); player.SetData("isDead", true);
} }
else else
{ {
player.SetData("isDead", false); player.SetData("isDead", false);
} }
} }, delayTime: 1000);
}
} }
} }
} }

View File

@@ -179,7 +179,7 @@ namespace ReallifeGamemode.Server.Extensions
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
ChatService.SendMessage(user.Player, "!{#FF614A}Du hast ein Verbrechen begangen: " + reason + "" + (cop != null ? " | Gemeldet von: " + cop.Name + "." : "")); ChatService.SendMessage(user.Player, "!{#FF614A}Du hast ein Verbrechen begangen: " + reason + "" + (cop != null ? " | Gemeldet von: " + cop.Name + "." : ""));
ChatService.SendMessage(user.Player, " !{#FFFF00}Fahnundgslevel:~s~ " + newWanteds); ChatService.SendMessage(user.Player, " !{#FFFF00}Fahndungslevel:~s~ " + newWanteds);
foreach (var copPlayer in NAPI.Pools.GetAllPlayers()) foreach (var copPlayer in NAPI.Pools.GetAllPlayers())
{ {

View File

@@ -26,7 +26,7 @@ namespace ReallifeGamemode.Server.Factions.Medic
public static List<HealDecision> HealDecisions = new List<HealDecision>(); public static List<HealDecision> HealDecisions = new List<HealDecision>();
public static int ReviveIncome = 100; public static int ReviveIncome = 100;
public static int dutyMedics = 0; public static int dutyMedics = 0;
public static int reviveTaskTime = 240; public static int reviveTaskTime = 120;
public class HealDecision public class HealDecision
{ {
@@ -156,14 +156,14 @@ namespace ReallifeGamemode.Server.Factions.Medic
public static void UpdateTaskTimeLeft() public static void UpdateTaskTimeLeft()
{ {
DateTime actualTime = DateTime.Now;
if (ReviveTasks.Count != 0) if (ReviveTasks.Count != 0)
{ {
DateTime actualTime = DateTime.Now;
foreach (var task in ReviveTasks) foreach (var task in ReviveTasks)
{ {
if (task.MedicName != null) if (task.MedicName != "none")
{ {
var taskTimeLeft = Math.Abs((Int32)(((DateTimeOffset)actualTime).ToUnixTimeSeconds() - ((DateTimeOffset)task.Time).ToUnixTimeSeconds() - reviveTaskTime)); var taskTimeLeft = Math.Abs((int)(((DateTimeOffset)actualTime).ToUnixTimeSeconds() - ((DateTimeOffset)task.Time).ToUnixTimeSeconds() - reviveTaskTime));
task.TimeLeft = taskTimeLeft; task.TimeLeft = taskTimeLeft;
var medic = PlayerService.GetPlayerByNameOrId(task.MedicName); var medic = PlayerService.GetPlayerByNameOrId(task.MedicName);
if(medic != null) medic.TriggerEvent("setTaskTimeLeft", taskTimeLeft); if(medic != null) medic.TriggerEvent("setTaskTimeLeft", taskTimeLeft);
@@ -172,6 +172,23 @@ namespace ReallifeGamemode.Server.Factions.Medic
} }
} }
public static void UpdateHealTaskCheckpoint()
{
if (HealTasks.Count != 0)
{
foreach(var task in HealTasks)
{
if(task.MedicName != "none")
{
var medic = PlayerService.GetPlayerByNameOrId(task.MedicName);
var victim = PlayerService.GetPlayerByNameOrId(task.Victim);
task.Position = victim.Position;
medic.TriggerEvent("updateHealCheckpoint", victim.Position.X, victim.Position.Y, victim.Position.Z);
}
}
}
}
[RemoteEvent("loadMedicTasks")] [RemoteEvent("loadMedicTasks")]
public void LoadMedicTasks(Player player, int type) public void LoadMedicTasks(Player player, int type)
{ {
@@ -221,8 +238,16 @@ namespace ReallifeGamemode.Server.Factions.Medic
public static void delHealTask(Player player) public static void delHealTask(Player player)
{ {
MedicTask task = HealTasks.FirstOrDefault(t => t.Victim == player.Name); MedicTask task = HealTasks.FirstOrDefault(t => t.Victim == player.Name);
if(task != null) RemoveTaskFromList(task); if (task != null)
{
player.SetData("healauftrag", false); player.SetData("healauftrag", false);
var medicPlayer = PlayerService.GetPlayerByNameOrId(task.MedicName);
if (task.MedicName != "none")
{
medicPlayer.TriggerEvent("destroyMedicTaskCheckpoint");
}
RemoveTaskFromList(task);
}
} }
[RemoteEvent("delHealTaskAsMedic")] [RemoteEvent("delHealTaskAsMedic")]
@@ -231,55 +256,22 @@ namespace ReallifeGamemode.Server.Factions.Medic
MedicTask task = HealTasks.FirstOrDefault(t => t.Victim == victimName); MedicTask task = HealTasks.FirstOrDefault(t => t.Victim == victimName);
RemoveTaskFromList(task); RemoveTaskFromList(task);
player.SetData("healauftrag", false); player.SetData("healauftrag", false);
} }
[RemoteEvent("delReviveTask")] [RemoteEvent("delReviveTask")]
public static void delReviveTask(Player player) public static void delReviveTask(Player player)
{ {
MedicTask task = ReviveTasks.FirstOrDefault(t => t.Victim == player.Name); MedicTask task = ReviveTasks.FirstOrDefault(t => t.Victim == player.Name);
if (task != null)
{
var medicPlayer = PlayerService.GetPlayerByNameOrId(task.MedicName);
if (task.MedicName != "none")
{
medicPlayer.TriggerEvent("destroyMedicTaskCheckpoint");
}
RemoveTaskFromList(task); RemoveTaskFromList(task);
} }
[RemoteEvent("delReviveTaskMedic")]
public static void delReviveTaskMedic(Player player)
{
MedicTask task = ReviveTasks.FirstOrDefault(t => t.MedicName == player.Name);
RemoveTaskFromList(task);
}
[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 / 4;
player.SendNotification($"Du hast den Einsatzort erreicht und ~g~{Medic.ReviveIncome / 4}$ ~s~für die Fraktion verdient.");
Medic.delReviveTaskMedic(player);
dbContext.SaveChanges();
}
}
[RemoteEvent("MedicTaskTimeout")]
public void RemoveMedicTask(Player player)
{
Medic.delReviveTaskMedic(player);
}
[RemoteEvent("getTaskTimeLeft")]
public void GetTaskTimeLeft(Player player, string victimName)
{
using var dbContext = new DatabaseContext();
{
var activeTaskTime = ReviveTasks.FirstOrDefault(t => t.MedicName == player.Name && t.Victim == victimName).TimeLeft;
player.TriggerEvent("setTaskTimeLeft", activeTaskTime);
}
} }
public static void UpdateDutyMedics(int modifier) public static void UpdateDutyMedics(int modifier)

View File

@@ -210,11 +210,12 @@ namespace ReallifeGamemode.Server.Gangwar
public void enter(Player client) public void enter(Player client)
{ {
User user = client.GetUser();
if (this.status == "attack") if (this.status == "attack")
{ {
if (client.GetUser().Faction.Name != getOwner() && client.GetUser().Faction.Name != getAttacker()) if (user.Faction.Name != getOwner() && user.Faction.Name != getAttacker())
return; return;
Player gPlayer = playerInGangwar.Where(c => c.GetUser().Id == client.GetUser().Id).FirstOrDefault(); Player gPlayer = playerInGangwar.Where(c => c != null && !c.Handle.IsNull && c.IsLoggedIn() && c.GetUser().Id == user.Id).FirstOrDefault();
if (gPlayer == null) if (gPlayer == null)
{ {
using (var dbContext = new DatabaseContext()) using (var dbContext = new DatabaseContext())
@@ -226,6 +227,7 @@ namespace ReallifeGamemode.Server.Gangwar
} }
} }
if (playerInside.Find(c => c == client) == null) if (playerInside.Find(c => c == client) == null)
{ {
playerInside.Add(client); playerInside.Add(client);

View File

@@ -14,6 +14,7 @@ namespace ReallifeGamemode.Server.Util
private static Timer timer500 = new Timer(500); //0.5 seconds timer private static Timer timer500 = new Timer(500); //0.5 seconds timer
private static Timer timer1000 = new Timer(1000); //1 seconds timer private static Timer timer1000 = new Timer(1000); //1 seconds timer
private static Timer timer2500 = new Timer(2500); //2.5 seconds timer private static Timer timer2500 = new Timer(2500); //2.5 seconds timer
private static Timer timer5000 = new Timer(5000); //5 seconds timer
private static Timer timer10000 = new Timer(10000); // 10 second timer private static Timer timer10000 = new Timer(10000); // 10 second timer
private static Timer timer60000 = new Timer(60000); //60 seconds timer private static Timer timer60000 = new Timer(60000); //60 seconds timer
@@ -28,6 +29,9 @@ namespace ReallifeGamemode.Server.Util
timer2500.Start(); timer2500.Start();
timer2500.Elapsed += Timer2500_Elapsed; timer2500.Elapsed += Timer2500_Elapsed;
timer5000.Start();
timer5000.Elapsed += Timer5000_Elapsed;
timer10000.Start(); timer10000.Start();
timer10000.Elapsed += Timer10000_Elapsed; timer10000.Elapsed += Timer10000_Elapsed;
@@ -53,6 +57,15 @@ namespace ReallifeGamemode.Server.Util
}); });
} }
private static void Timer5000_Elapsed(object sender, ElapsedEventArgs e)
{
NAPI.Task.Run(() =>
{
Medic.UpdateHealTaskCheckpoint();
});
}
private static void Timer60000_Elapsed(object sender, ElapsedEventArgs e) private static void Timer60000_Elapsed(object sender, ElapsedEventArgs e)
{ {
NAPI.Task.Run(() => NAPI.Task.Run(() =>

View File

@@ -28,7 +28,7 @@ namespace ReallifeGamemode.Server.Wanted
using (var dbContext = new DatabaseContext()) using (var dbContext = new DatabaseContext())
{ {
killer = killerPlayer.GetUser(dbContext); killer = killerPlayer.GetUser(dbContext);
killer.GiveWanteds(copPlayer, 10, "Beamten-Mord"); killer.GiveWanteds(copPlayer, 14, "Beamten-Mord");
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
} }

View File

@@ -9,6 +9,7 @@ using GTANetworkAPI;
using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models; using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Services;
namespace ReallifeGamemode.Server.Wanted namespace ReallifeGamemode.Server.Wanted
{ {
@@ -68,10 +69,11 @@ namespace ReallifeGamemode.Server.Wanted
if (waTimer[user.Id] <= 0) if (waTimer[user.Id] <= 0)
{ {
ResetWantedTimeToElapse(player); ResetWantedTimeToElapse(player);
player.SendChatMessage("~y~Du hast erfolgtreich einen Wanted abgetaucht."); player.SendChatMessage("~y~Du hast erfolgreich einen Wanted abgetaucht.");
user.Wanteds -= 1; user.Wanteds -= 1;
if (user.Wanteds == 0) if (user.Wanteds == 0)
{ {
ChatService.HQMessage(player.Name + " konnte solange abtauchen, sodass er nicht mehr gesucht wird.");
user.SetBlipAndNametagColor(); user.SetBlipAndNametagColor();
dbContext.SaveChanges(); dbContext.SaveChanges();
} }