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 InputHelper from '../inputhelper';
import relativeVector from '../util/relativevector';
const Menu = NativeUI.Menu;
const UIMenuItem = NativeUI.UIMenuItem;
const UIMenuListItem = NativeUI.UIMenuListItem;
@@ -17,7 +18,7 @@ export default function factionInteraction(globalData: IGlobalData) {
var sorting = 0;
var firstSorting = true;
var activeTask = null;
var activeCheckpoint;
var activeCheckpoint: CheckpointMp;
var taskStart;
var taskFinish;
var taskRange;
@@ -216,6 +217,7 @@ export default function factionInteraction(globalData: IGlobalData) {
let reviveTaskMenuMedic;
let healTaskMenuMedic;
let fireTaskMenuMedic;
let deleteCheckpointItem;
if (userFactionId == 2) {
if (isDuty) {
@@ -231,6 +233,12 @@ export default function factionInteraction(globalData: IGlobalData) {
fireTaskMenuMedic.SetRightLabel(fPM + fireTaskCountMedic);
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);
globalData.InMenu = false;
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.events.callRemote("updateMedicTask", 0, tasks[index].Victim);
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),
color: [255, 0, 0, 150],
@@ -359,7 +374,7 @@ export default function factionInteraction(globalData: IGlobalData) {
mp.game.graphics.requestStreamedTextureDict("medicimages", true);
mp.events.callRemote("updateMedicTask", 1, tasks[index].Victim);
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),
color: [255, 0, 0, 150],
@@ -389,73 +404,13 @@ export default function factionInteraction(globalData: IGlobalData) {
}
});
/*
mp.events.add("sortFactionTasks", (sortByKey) => {
if (firstSorting) {
sortText = "Nach Uhrzeit";
firstSorting = false;
//mp.gui.chat.push("Init Sort");
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;
}
}
mp.events.add('playerEnterCheckpoint', (activeCheckpoint) => {
if (activeTask.Type == 1) {
activeCheckpoint.destroy();
activeCheckpoint = null;
activeTask = null;
timeLeft = null;
}
});*/
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", () => {
@@ -464,24 +419,6 @@ export default function factionInteraction(globalData: IGlobalData) {
activeCheckpoint = null;
activeTask = 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) {
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) {
@@ -513,18 +466,10 @@ export default function factionInteraction(globalData: IGlobalData) {
}
}
var currentDate = new Date();
if (timeLeft != null) {
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 (deadRespawned == false) {
mp.game.graphics.drawText(timeLeft + "s", [0.5, 0.85], {
font: 7,
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);
}
string targetPlayername = NAPI.Player.GetPlayerName(target);
string adminPlayername = NAPI.Player.GetPlayerName(player);
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")]
@@ -785,14 +786,15 @@ namespace ReallifeGamemode.Server.Commands
Medic.UpdateDutyMedics(-1);
}
string targetPlayername = NAPI.Player.GetPlayerName(target);
string adminPlayername = NAPI.Player.GetPlayerName(player);
ChatService.SendMessage(target, "~r~KICKINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gekickt: " + reason);
target.Kick();
NAPI.Task.Run(() => {
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)]
@@ -874,7 +876,19 @@ namespace ReallifeGamemode.Server.Commands
reason = Regex.Replace(reason, "(~[a-zA-Z]~)|(!{(.*)})", "");
target.GetUser().BanPlayer(admin, reason, mins);
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);
}, 2500);
}
[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");
player.SendNotification("Du hast " + target.Name + " einen Heal angeboten", false);
target.SetData<bool>("healDecision", true);
Medic.delHealTask(target);
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.Util;
using ReallifeGamemode.Server.Wanted;
using ReallifeGamemode.Services;
/**
* @overview Life of German Reallife - Events Death (Death.cs)
@@ -233,7 +234,10 @@ namespace ReallifeGamemode.Server.Events
dbContext.SaveChanges();
}
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);
}
}

View File

@@ -65,14 +65,14 @@ namespace ReallifeGamemode.Server.Events
}
}
*/
var listReports = Report.Report.listReports;
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))
{
listReports.Remove(temp);
Report.Report.listReports.Remove(temp);
Player user = PlayerService.GetPlayerByNameOrId(temp.getUser());
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))
{
listReports.Remove(temp);
Player admin = PlayerService.GetPlayerByNameOrId(temp.getAdmin());
admin.SendChatMessage("!{#008fff}[REPORT]!{#FFFFFF} Chat beendet. Der User hat den Server verlassen");
if (admin != null)
{
admin.SendChatMessage("!{#008fff}[REPORT]!{#FFFFFF} Chat beendet. Der User hat den Server verlassen");
}
Report.Report.listReports.Remove(temp);
break;
}
}
@@ -132,12 +134,19 @@ namespace ReallifeGamemode.Server.Events
user.PositionZ = pos.Z;
saveUser.SaveChanges();
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.TriggerEvent("CLIENT:DestroyPed", 1);
player.TriggerEvent("CLIENT:DestroyPed", 2);
player.TriggerEvent("CLIENT:DestroyPed", 3);
player.TriggerEvent("CLIENT:DestroyPed", 4);
Medic.delHealTask(player);
Medic.delReviveTask(player);
if (player.GetData<bool>("duty") == true)

View File

@@ -37,117 +37,121 @@ namespace ReallifeGamemode.Server.Events
if (user == null)
{
player.TriggerEvent("SERVER:Login_Error", "Der Benutzer existiert nicht! Registriere dich zuerst!");
return;
}
if (user.SocialClubName != player.SocialClubName && user.Password == NAPI.Util.GetHashSha256(password))
{
player.TriggerEvent("SERVER:Login_Error", "Dieser Benutzer gehört dir nicht!");
//TODO ?? Log einbauen für den bösen Bub.
player.Kick();
return;
}
if (user.Password != NAPI.Util.GetHashSha256(password))
{
player.TriggerEvent("SERVER:Login_Error", "Passwort inkorrekt!");
return;
}
player.SetData("dbId", user.Id);
player.Name = username;
player.TriggerEvent("SERVER:Login_Success");
player.TriggerEvent("CLIENT:StopSound");
player.SetData("isLoggedIn", true);
player.SetSharedData("isLoggedIn", JsonConvert.SerializeObject(true));
player.SetData("spec", true);
player.SetData("duty", false);
player.SetData("Adminduty", false);
player.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney, 0);
player.TriggerEvent("headshotoff");
Gangwar.Gangwar.loadPlayer(player);
if (user.FactionLeader)
{
player.TriggerEvent("CLIENT:Turf_LoadLeaderBlip");
}
if (user.IsAdmin(AdminLevel.HEADADMIN))
{
player.SetData("editmode", false);
player.SetData("quicksavemode", "none");
}
var userBankAccount = user.BankAccount;
userBankAccount.Balance = userBankAccount.Balance;
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)
{
string msg = $"{player.Name} ist wieder online.";
ChatService.BroadcastGroup(msg, user.Group);
}
if (GlobalHelper.CustomJoinMessages.ContainsKey(player.SocialClubName))
{
ChatService.BroadcastAdmin("!{#FFFF00}*** " + GlobalHelper.CustomJoinMessages[player.SocialClubName] + " [ID: " + player.Handle.Value + "] (" + user.AdminLevel.GetName() + ")", AdminLevel.MAPPING);
}
else if (user.IsAdmin(AdminLevel.MAPPING))
{
ChatService.BroadcastAdmin("!{#FFFF00}*** " + user.Name + " [ID: " + player.Handle.Value + "]" + " hat sich als " + user.AdminLevel.GetName() + " eingeloggt!", AdminLevel.MAPPING);
}
var userItems = dbContext.UserItems.Where(u => u.UserId == user.Id).ToList();
player.SetData("items", userItems);
user.SetBlipAndNametagColor();
if (user.CharacterId == null)
{
var currentPlayerCreatorDimension = (uint)NAPI.Data.GetWorldData("playerCreatorDimension");
currentPlayerCreatorDimension++;
NAPI.Data.SetWorldData("playerCreatorDimension", currentPlayerCreatorDimension);
player.Dimension = NAPI.Data.GetWorldData("playerCreatorDimension");
player.Position = new Vector3(402.8664, -996.4108, -99.00027);
player.Rotation = new Vector3(0, 0, 180);
player.TriggerEvent("toggleCreator");
}
else
{
if (user.SocialClubName != player.SocialClubName && user.Password == NAPI.Util.GetHashSha256(password))
CharacterCreator.ApplyCharacter(player);
UpdateCharacterCloth.LoadCharacterDefaults(player);
if (user.JailTime <= 0)
{
player.TriggerEvent("SERVER:Login_Error", "Dieser Benutzer gehört dir nicht!");
//TODO ?? Log einbauen für den bösen Bub.
player.Kick();
return;
}
if (user.Password != NAPI.Util.GetHashSha256(password))
{
player.TriggerEvent("SERVER:Login_Error", "Passwort inkorrekt!");
NAPI.Player.SpawnPlayer(player, new Vector3(user.PositionX, user.PositionY, user.PositionZ), 0);
}
else
{
player.SetData("dbId", user.Id);
player.Name = username;
player.TriggerEvent("SERVER:Login_Success");
player.TriggerEvent("CLIENT:StopSound");
player.SetData("isLoggedIn", true);
player.SetSharedData("isLoggedIn", JsonConvert.SerializeObject(true));
player.SetData("spec", true);
player.SetData("duty", false);
player.SetData("Adminduty", false);
player.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney, 0);
player.TriggerEvent("headshotoff");
Gangwar.Gangwar.loadPlayer(player);
if (user.FactionLeader)
{
player.TriggerEvent("CLIENT:Turf_LoadLeaderBlip");
}
if (user.IsAdmin(AdminLevel.HEADADMIN))
{
player.SetData("editmode", false);
player.SetData("quicksavemode", "none");
}
var userBankAccount = user.BankAccount;
userBankAccount.Balance = userBankAccount.Balance;
user.Wanteds = user.Wanteds;
if (user.Group != null)
{
string msg = $"{player.Name} ist wieder online.";
ChatService.BroadcastGroup(msg, user.Group);
}
if (GlobalHelper.CustomJoinMessages.ContainsKey(player.SocialClubName))
{
ChatService.BroadcastAdmin("!{#FFFF00}*** " + GlobalHelper.CustomJoinMessages[player.SocialClubName] + " [ID: " + player.Handle.Value + "] (" + user.AdminLevel.GetName() + ")", AdminLevel.MAPPING);
}
else if (user.IsAdmin(AdminLevel.MAPPING))
{
ChatService.BroadcastAdmin("!{#FFFF00}*** " + user.Name + " [ID: " + player.Handle.Value + "]" + " hat sich als " + user.AdminLevel.GetName() + " eingeloggt!", AdminLevel.MAPPING);
}
var userItems = dbContext.UserItems.Where(u => u.UserId == user.Id).ToList();
player.SetData("items", userItems);
user.SetBlipAndNametagColor();
if (user.CharacterId == null)
{
var currentPlayerCreatorDimension = (uint)NAPI.Data.GetWorldData("playerCreatorDimension");
currentPlayerCreatorDimension++;
NAPI.Data.SetWorldData("playerCreatorDimension", currentPlayerCreatorDimension);
player.Dimension = NAPI.Data.GetWorldData("playerCreatorDimension");
player.Position = new Vector3(402.8664, -996.4108, -99.00027);
player.Rotation = new Vector3(0, 0, 180);
player.TriggerEvent("toggleCreator");
}
else
{
CharacterCreator.ApplyCharacter(player);
UpdateCharacterCloth.LoadCharacterDefaults(player);
if (user.JailTime <= 0)
{
NAPI.Player.SpawnPlayer(player, new Vector3(user.PositionX, user.PositionY, user.PositionZ), 0);
}
else
{
Jail.Check_PutBehindBars(user);
}
}
player.TriggerEvent("draw", player.Name, player.Handle.Value);
if (user.Dead == true)
{
if (user.IsAdmin(AdminLevel.ADMIN) == true)
{
player.TriggerEvent("startDeathTimer", true);
player.Health = 0;
}
else
{
player.TriggerEvent("startDeathTimer", false);
player.Health = 0;
}
player.SetData("isDead", true);
}
else
{
player.SetData("isDead", false);
}
Jail.Check_PutBehindBars(user);
}
}
player.TriggerEvent("draw", player.Name, player.Handle.Value);
NAPI.Task.Run(() =>
{
if (user.Dead == true)
{
if (user.IsAdmin(AdminLevel.ADMIN) == true)
{
player.TriggerEvent("startDeathTimer", true);
}
else
{
player.TriggerEvent("startDeathTimer", false);
}
player.Health = 0;
player.SetData("isDead", true);
}
else
{
player.SetData("isDead", false);
}
}, delayTime: 1000);
}
}
}

View File

@@ -179,7 +179,7 @@ namespace ReallifeGamemode.Server.Extensions
dbContext.SaveChanges();
}
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())
{

View File

@@ -26,7 +26,7 @@ namespace ReallifeGamemode.Server.Factions.Medic
public static List<HealDecision> HealDecisions = new List<HealDecision>();
public static int ReviveIncome = 100;
public static int dutyMedics = 0;
public static int reviveTaskTime = 240;
public static int reviveTaskTime = 120;
public class HealDecision
{
@@ -156,14 +156,14 @@ namespace ReallifeGamemode.Server.Factions.Medic
public static void UpdateTaskTimeLeft()
{
DateTime actualTime = DateTime.Now;
if (ReviveTasks.Count != 0)
{
DateTime actualTime = DateTime.Now;
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;
var medic = PlayerService.GetPlayerByNameOrId(task.MedicName);
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")]
public void LoadMedicTasks(Player player, int type)
{
@@ -221,8 +238,16 @@ namespace ReallifeGamemode.Server.Factions.Medic
public static void delHealTask(Player player)
{
MedicTask task = HealTasks.FirstOrDefault(t => t.Victim == player.Name);
if(task != null) RemoveTaskFromList(task);
player.SetData("healauftrag", false);
if (task != null)
{
player.SetData("healauftrag", false);
var medicPlayer = PlayerService.GetPlayerByNameOrId(task.MedicName);
if (task.MedicName != "none")
{
medicPlayer.TriggerEvent("destroyMedicTaskCheckpoint");
}
RemoveTaskFromList(task);
}
}
[RemoteEvent("delHealTaskAsMedic")]
@@ -231,54 +256,21 @@ namespace ReallifeGamemode.Server.Factions.Medic
MedicTask task = HealTasks.FirstOrDefault(t => t.Victim == victimName);
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("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();
if (task != null)
{
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);
var medicPlayer = PlayerService.GetPlayerByNameOrId(task.MedicName);
if (task.MedicName != "none")
{
medicPlayer.TriggerEvent("destroyMedicTaskCheckpoint");
}
RemoveTaskFromList(task);
}
}

View File

@@ -210,11 +210,12 @@ namespace ReallifeGamemode.Server.Gangwar
public void enter(Player client)
{
User user = client.GetUser();
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;
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)
{
using (var dbContext = new DatabaseContext())
@@ -226,6 +227,7 @@ namespace ReallifeGamemode.Server.Gangwar
}
}
if (playerInside.Find(c => c == client) == null)
{
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 timer1000 = new Timer(1000); //1 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 timer60000 = new Timer(60000); //60 seconds timer
@@ -28,6 +29,9 @@ namespace ReallifeGamemode.Server.Util
timer2500.Start();
timer2500.Elapsed += Timer2500_Elapsed;
timer5000.Start();
timer5000.Elapsed += Timer5000_Elapsed;
timer10000.Start();
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)
{
NAPI.Task.Run(() =>

View File

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

View File

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