From 5c993dfe7d0a7e058c3a230019df95e99d2528fa Mon Sep 17 00:00:00 2001 From: VegaZ Date: Thu, 11 Feb 2021 19:34:35 +0100 Subject: [PATCH] Rework client-side medic task --- ReallifeGamemode.Client/Gui/deathscreen.ts | 12 ---- .../Interaction/factioninteraction.ts | 58 +++++++++++++++---- .../Commands/FactionCommands.cs | 1 + .../Factions/Medic/Medic.cs | 8 --- 4 files changed, 47 insertions(+), 32 deletions(-) diff --git a/ReallifeGamemode.Client/Gui/deathscreen.ts b/ReallifeGamemode.Client/Gui/deathscreen.ts index 366f5199..f5f4de52 100644 --- a/ReallifeGamemode.Client/Gui/deathscreen.ts +++ b/ReallifeGamemode.Client/Gui/deathscreen.ts @@ -54,20 +54,12 @@ export default function deathScreen() { mp.game.gameplay.setFadeOutAfterDeath(false); mp.events.callRemote('RespawnPlayerAtHospital'); mp.game.graphics.setStreamedTextureDictAsNoLongerNeeded("Mptattoos"); - mp.events.callRemote("CutMedicEarnings"); }); mp.events.add("updateDutyMedics", (count) => { dutyMedics = count; }); - mp.events.add("medicTaskTimeout", (count) => { - taskTimeout = true; - mp.events.callRemote("MedicTaskTimeout"); - mp.events.callRemote("RemoveMedicCheckpoint"); - - }); - mp.events.add("render", () => { var currentDate = new Date(); @@ -113,10 +105,6 @@ export default function deathScreen() { } else { mp.events.call("respawnDeathPlayer"); } - } else { - if (deathSeconds < medicJobTime && taskTimeout == false) { - mp.events.callRemote("medicTaskTimeout"); - } } }); } \ No newline at end of file diff --git a/ReallifeGamemode.Client/Interaction/factioninteraction.ts b/ReallifeGamemode.Client/Interaction/factioninteraction.ts index 9eb5f6c1..07963b90 100644 --- a/ReallifeGamemode.Client/Interaction/factioninteraction.ts +++ b/ReallifeGamemode.Client/Interaction/factioninteraction.ts @@ -27,6 +27,9 @@ export default function factionInteraction(globalData: IGlobalData) { var sortText; var deadRespawned = false; var isRevived = false; + var timeLeft = 0; + var deathTime; + var taskTimeout = false; var ticketName: string; var pointsName: string; @@ -374,6 +377,7 @@ export default function factionInteraction(globalData: IGlobalData) { if (tasks[index].MedicName === "none") { mp.game.graphics.requestStreamedTextureDict("medicimages", true); mp.events.callRemote("updateMedicTask", 1, index); + deathTime = tasks[index].Time; 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, { @@ -468,26 +472,27 @@ export default function factionInteraction(globalData: IGlobalData) { 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("checkPointTimeout", () => { - activeTask = false; - activeCheckpoint.destroy(); - }); + mp.events.add("cutMedicEarnings", () => { + mp.gui.chat.push("DEBUG: Nur noch hälfte Verdienst!") deadRespawned = true; }); + mp.events.add("destroyMedicTaskCheckpoint", () => { + activeCheckpoint.destroy(); + activeTask = false; + mp.events.callRemote("MedicTaskTimeout"); + }); + mp.events.add('playerEnterCheckpoint', (activeCheckpoint) => { - mp.gui.chat.push("DEBUG: Checkpoint NACH wiederbelebung des Spielers betreten") if (deadRespawned == true) { - activeTask = false; - activeCheckpoint.destroy(); - mp.events.callRemote("delReviveTaskMedic"); - mp.events.callRemote("PayCutMedicEarnings"); + mp.gui.chat.push("DEBUG: Checkpoint NACH wiederbelebung des Spielers betreten") mp.gui.chat.push("DEBUG: Hälfte ausgezahlt") + activeCheckpoint.destroy(); + mp.events.callRemote("PayCutMedicEarnings"); + activeTask = false; deadRespawned = false; } else { - activeTask = false; - activeCheckpoint.destroy(); mp.gui.chat.push("DEBUG: Checkpoint VOR wiederbelebung des Spielers betreten") } }); @@ -511,8 +516,37 @@ export default function factionInteraction(globalData: IGlobalData) { mp.game.graphics.drawSprite("medicimages", "ambulance", ambulanceImagePos + 0.01, 0.915, 0.04, 0.07, 0, 255, 255, 255, 255); } else { mp.game.graphics.drawSprite("medicimages", "running", ambulanceImagePos + 0.02, 0.915, 0.02, 0.035, 0, 255, 0, 0, 255); - } + } } + + var currentDate = new Date(); + + if (deadRespawned == false) { + timeLeft = Math.abs(deathTime - 30 - Math.floor(currentDate.getTime() / 1000)); + } else { + timeLeft = Math.abs(deathTime - 60 - Math.floor(currentDate.getTime() / 1000)); + if (timeLeft < 0) mp.events.call("destroyMedicTaskCheckpoint"); + } + + if (deadRespawned == false) { + mp.game.graphics.drawText(timeLeft.toString() + "s", [0.5, 0.85], { + font: 7, + color: [60, 179, 113, 255], + scale: [0.2, 0.2], + outline: true, + centre: true + }); + } else { + { + mp.game.graphics.drawText(timeLeft.toString() + "s", [0.5, 0.85], { + font: 7, + color: [255, 203, 145, 255], + scale: [0.2, 0.2], + outline: true, + centre: true + }); + } + } } }); } \ No newline at end of file diff --git a/ReallifeGamemode.Server/Commands/FactionCommands.cs b/ReallifeGamemode.Server/Commands/FactionCommands.cs index 42cbf167..10c7ab4a 100644 --- a/ReallifeGamemode.Server/Commands/FactionCommands.cs +++ b/ReallifeGamemode.Server/Commands/FactionCommands.cs @@ -291,6 +291,7 @@ namespace ReallifeGamemode.Server.Commands player.PlayAnimation("amb@medic@standing@kneel@enter", "enter", 0); deadPlayer.TriggerEvent("onPlayerRevived"); + player.TriggerEvent("destroyMedicTaskCheckpoint"); deadPlayer.SendNotification($"Du wurdest von ~y~{player.Name}~s~ für ~g~{100.ToMoneyString()} ~s~wiederbelebt."); player.SendNotification($"Du hast ~y~{deadPlayer.Name}~s~ wiederbelebt und ~g~{Medic.ReviveIncome}$ ~s~für die Fraktion verdient."); deadPlayer.SetData("isDead", false); diff --git a/ReallifeGamemode.Server/Factions/Medic/Medic.cs b/ReallifeGamemode.Server/Factions/Medic/Medic.cs index 83151074..989f7e9d 100644 --- a/ReallifeGamemode.Server/Factions/Medic/Medic.cs +++ b/ReallifeGamemode.Server/Factions/Medic/Medic.cs @@ -136,14 +136,6 @@ namespace ReallifeGamemode.Server.Factions.Medic 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) {