Merge branch 'develop' into 'master'

Version 0.0.4

See merge request log-gtav/reallife-gamemode!48
This commit is contained in:
hydrant
2021-04-11 14:34:01 +00:00
78 changed files with 7336 additions and 2235 deletions

View File

@@ -72,7 +72,7 @@ export default function carDealer(globalData: IGlobalData) {
priceItem.SetRightLabel("~g~$~s~ " + moneyFormat(price)); priceItem.SetRightLabel("~g~$~s~ " + moneyFormat(price));
break; break;
case 'Fraktion': case 'Fraktion':
priceItem.SetRightLabel("~g~$~s~ " + moneyFormat(price * 3)); priceItem.SetRightLabel("~g~$~s~ " + moneyFormat(price * 1.5));
break; break;
} }
} }

View File

@@ -37,6 +37,7 @@ export default function deathScreen() {
respawnTime = Math.floor(deathDate.getTime() / 1000 + maxDeathTime); respawnTime = Math.floor(deathDate.getTime() / 1000 + maxDeathTime);
fade = 255 - maxDeathTime; fade = 255 - maxDeathTime;
mp.game.graphics.requestStreamedTextureDict("Mptattoos", true); mp.game.graphics.requestStreamedTextureDict("Mptattoos", true);
mp.events.call("GetDutyMedics");
taskTimeout = false; taskTimeout = false;
} }
}); });

View File

@@ -86,8 +86,8 @@ export default function (globalData: IGlobalData): void {
gangwarTimer = gwTimer; gangwarTimer = gwTimer;
}); });
mp.events.add("countdown", (timer, text) => { mp.events.add("countdown", (timer: number, text) => {
countdown = timer; countdown = Math.round(timer);
cdTimestamp = Date.now(); cdTimestamp = Date.now();
countdownText = text; countdownText = text;
}); });

View File

@@ -137,9 +137,11 @@ export default function bankMenuHandle(globalData: IGlobalData) {
mp.events.add('removeFactionBankmenu', () => { mp.events.add('removeFactionBankmenu', () => {
if (globalData.InMenu && factionBankmenu) {
mp.gui.cursor.show(false, false); mp.gui.cursor.show(false, false);
factionBankmenu.Close(true); factionBankmenu.Close(true);
globalData.InMenu = false; globalData.InMenu = false;
}
}); });

View File

@@ -32,6 +32,7 @@ export default function elevatorList(globalData: IGlobalData) {
globalData.InMenu = true; globalData.InMenu = true;
stages = JSON.parse(stagesArr); stages = JSON.parse(stagesArr);
stage = stages[0];
elevatorMenu = new Menu("Aufzug", "", new Point(0, screenRes.y / 3), null, null); elevatorMenu = new Menu("Aufzug", "", new Point(0, screenRes.y / 3), null, null);

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 (activeCheckpoint && mp.checkpoints.exists(activeCheckpoint)) {
deleteCheckpointItem = new UIMenuItem("~r~Checkpoint löschen");
factionInteractionMenu.AddItem(deleteCheckpointItem);
}
}
} }
} }
@@ -260,6 +268,14 @@ 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.callRemote("updateMedicTask", 1, activeTask.Victim, true);
mp.events.call("destroyMedicTaskCheckpoint");
break;
} }
}); });
@@ -303,11 +319,10 @@ export default function factionInteraction(globalData: IGlobalData) {
} else { } else {
if (tasks[index].MedicName === "none") { if (tasks[index].MedicName === "none") {
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, false);
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),
color: [255, 0, 0, 150], color: [255, 0, 0, 150],
visible: true, visible: true,
dimension: 0 dimension: 0
@@ -355,13 +370,12 @@ export default function factionInteraction(globalData: IGlobalData) {
healTaskMenuMedic.Close(); healTaskMenuMedic.Close();
factionInteractionMenu.Visible = true; factionInteractionMenu.Visible = true;
} else { } else {
if (tasks[index].MedicName === "none") { if (tasks[index].MedicName === "none" && tasks[index].Victim != mp.players.local.name) {
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, false);
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),
color: [255, 0, 0, 150], color: [255, 0, 0, 150],
visible: true, visible: true,
dimension: 0 dimension: 0
@@ -389,73 +403,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 +418,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 +427,25 @@ export default function factionInteraction(globalData: IGlobalData) {
} }
}); });
mp.events.add('render', () => { mp.events.add('updateHealCheckpoint', (xPos, yPos, zPos) => {
if (activeTask && activeTask.Type == 1) {
if (activeCheckpoint && mp.checkpoints.exists(activeCheckpoint)) {
activeCheckpoint.destroy();
activeCheckpoint = mp.checkpoints.new(4, new mp.Vector3(xPos, yPos, zPos - 2), 3.0,
{
color: [255, 0, 0, 150],
visible: true,
dimension: 0
});
mp.game.ui.setNewWaypoint(xPos, yPos);
taskFinish.x = xPos;
taskFinish.y = yPos;
taskFinish.z = zPos;
}
}
});
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 +467,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 +491,9 @@ export default function factionInteraction(globalData: IGlobalData) {
} }
} }
} }
}
mp.events.add('render', () => {
renderMedicGui();
}); });
} }

View File

@@ -42,9 +42,10 @@ export default function (globalData: IGlobalData) {
var groupRank = null; var groupRank = null;
mp.events.add("SERVER:InteractionMenu_OpenMenu", (accountDataJson: string, factionleader: string, jobDataJson: string, faction: string, group: string, factionInvite: boolean, groupInvite: boolean, ticket_boolean: boolean, ticket_amount, house: boolean) => { mp.events.add("SERVER:InteractionMenu_OpenMenu", (accountDataJson: string, factionleader: string, members: string, jobDataJson: string, faction: string, group: string, factionInvite: boolean, groupInvite: boolean, ticket_boolean: boolean, ticket_amount, house: boolean) => {
var accountData: AccountData = JSON.parse(accountDataJson); var accountData: AccountData = JSON.parse(accountDataJson);
var jobData: JobData = JSON.parse(jobDataJson); var jobData: JobData = JSON.parse(jobDataJson);
var memberList: FactionMember[] = JSON.parse(members)
//var ticket_amount = JSON.parse(ticket_amountJson); //var ticket_amount = JSON.parse(ticket_amountJson);
var menu = getInteractionMenu(); var menu = getInteractionMenu();
@@ -67,15 +68,15 @@ export default function (globalData: IGlobalData) {
menu.BindMenuToItem(getVehiclesMenu(vehicles, "CLIENT:InteractionMenu_PlayerVehicleInteraction", true, menu), vehiclesItem); menu.BindMenuToItem(getVehiclesMenu(vehicles, "CLIENT:InteractionMenu_PlayerVehicleInteraction", true, menu), vehiclesItem);
} }
if (faction && !factionleader) { if (faction && !factionleader && faction != "Zivilist") {
factionItem.SetRightLabel(faction); factionItem.SetRightLabel(faction);
menu.AddItem(factionItem); menu.AddItem(factionItem);
menu.BindMenuToItem(getFactionMenu(faction, accountData.factionVehicles, accountData.stateFaction, menu), factionItem); menu.BindMenuToItem(getFactionMenu(faction, accountData.factionVehicles, memberList, accountData.stateFaction, menu), factionItem);
} }
if (faction && factionleader) { if (faction && factionleader) {
factionleaderItem.SetRightLabel(factionleader); factionleaderItem.SetRightLabel(factionleader);
menu.AddItem(factionleaderItem); menu.AddItem(factionleaderItem);
menu.BindMenuToItem(getFactionLeaderMenu(faction, accountData.factionVehicles, accountData.stateFaction, menu), factionleaderItem); menu.BindMenuToItem(getFactionLeaderMenu(faction, accountData.factionVehicles, memberList, accountData.stateFaction, menu), factionleaderItem);
} }
menu.AddItem(jobItem); menu.AddItem(jobItem);
menu.BindMenuToItem(getJobMenu(jobData, menu), jobItem); menu.BindMenuToItem(getJobMenu(jobData, menu), jobItem);
@@ -304,7 +305,7 @@ export default function (globalData: IGlobalData) {
return licenseMenu; return licenseMenu;
} }
function getFactionMenu(faction: string, vehData: VehicleData[], stateFaction: boolean, parentMenu: NativeUI.Menu): NativeUI.Menu { function getFactionMenu(faction: string, vehData: VehicleData[], memberList: FactionMember[], stateFaction: boolean, parentMenu: NativeUI.Menu): NativeUI.Menu {
var factionMenu = new NativeUI.Menu("Fraktion", faction, new Point(0, screenRes.y / 3), null, null); var factionMenu = new NativeUI.Menu("Fraktion", faction, new Point(0, screenRes.y / 3), null, null);
factionMenu.Visible = false; factionMenu.Visible = false;
@@ -315,13 +316,61 @@ export default function (globalData: IGlobalData) {
factionMenu.BindMenuToItem(getVehiclesMenuFaction(vehData, "CLIENT:InteractionMenu_FactionVehicleInteraction", !stateFaction, parentMenu), factionVehicleItem); factionMenu.BindMenuToItem(getVehiclesMenuFaction(vehData, "CLIENT:InteractionMenu_FactionVehicleInteraction", !stateFaction, parentMenu), factionVehicleItem);
} }
var memberListItem = new UIMenuItem("Mitgliederliste", "Mitgliederliste");
factionMenu.AddItem(memberListItem);
factionMenu.BindMenuToItem(getMembersMenuFaction(faction, memberList, false, parentMenu), memberListItem);
return factionMenu; return factionMenu;
} }
function getFactionLeaderMenu(faction: string, vehData: VehicleData[], stateFaction: boolean, parentMenu: NativeUI.Menu): NativeUI.Menu {
function getMembersMenuFaction(faction: string, memberList: FactionMember[], leader: boolean, parentMenu: NativeUI.Menu): NativeUI.Menu {
var memberListMenu = new NativeUI.Menu(faction, "Mitglieder", new Point(0, screenRes.y / 3), null, null);
memberListMenu.Visible = false;
memberList.forEach(member => {
var memberItem: NativeUI.UIMenuItem;
if (member.isOnline) {
memberItem = new UIMenuItem("~g~ " + member.username, "");
} else {
if (leader) memberItem = new UIMenuItem("~r~ " + member.username, "");
}
if (memberItem) {
if (member.isLeader) memberItem.SetLeftBadge(BadgeStyle.Star);
memberItem.SetRightLabel(member.factionRankName);
memberListMenu.AddItem(memberItem);
if (leader) memberListMenu.BindMenuToItem(manageFactionMember(member.username, member.factionRankName, parentMenu), memberItem);
}
});
return memberListMenu;
}
function manageFactionMember(username: string, factionrank: string, parentMenu: NativeUI.Menu): NativeUI.Menu {
var manageFactionMemberMenu = new NativeUI.Menu(username, factionrank + " " + username, new Point(0, screenRes.y / 3), null, null);
manageFactionMemberMenu.Visible = false;
var uninviteItem = new UIMenuItem("Spieler rauswerfen", "");
manageFactionMemberMenu.AddItem(uninviteItem);
manageFactionMemberMenu.ItemSelect.on((item) => {
switch (item) {
case uninviteItem:
manageFactionMemberMenu.Visible = false;
mp.gui.chat.activate(true);
globalData.InMenu = false;
mp.events.callRemote("CLIENT:InteractionMenu_Uninvite", "Fraktion", username);
manageFactionMemberMenu.Close(true);
}
});
return manageFactionMemberMenu;
}
function getFactionLeaderMenu(faction: string, vehData: VehicleData[], memberList: FactionMember[], stateFaction: boolean, parentMenu: NativeUI.Menu): NativeUI.Menu {
var factionMenu = new NativeUI.Menu("Fraktion", faction, new Point(0, screenRes.y / 3), null, null); var factionMenu = new NativeUI.Menu("Fraktion", faction, new Point(0, screenRes.y / 3), null, null);
factionMenu.AddItem(new UIMenuItem("Spieler einladen")); factionMenu.AddItem(new UIMenuItem("Spieler einladen"));
factionMenu.AddItem(new UIMenuItem("Spieler rauswerfen")); //factionMenu.AddItem(new UIMenuItem("Spieler rauswerfen"));
factionMenu.Visible = false; factionMenu.Visible = false;
mp.gui.chat.show(false); mp.gui.chat.show(false);
if (vehData.length > 0) { if (vehData.length > 0) {
@@ -330,6 +379,10 @@ export default function (globalData: IGlobalData) {
factionMenu.BindMenuToItem(getVehiclesMenu(vehData, "CLIENT:InteractionMenu_FactionVehicleInteraction", !stateFaction, parentMenu), factionVehicleItem); factionMenu.BindMenuToItem(getVehiclesMenu(vehData, "CLIENT:InteractionMenu_FactionVehicleInteraction", !stateFaction, parentMenu), factionVehicleItem);
} }
var memberListItem = new UIMenuItem("Mitgliederliste", "Mitgliederliste");
factionMenu.AddItem(memberListItem);
factionMenu.BindMenuToItem(getMembersMenuFaction(faction, memberList, true, parentMenu), memberListItem);
factionMenu.ItemSelect.on((item, index) => { factionMenu.ItemSelect.on((item, index) => {
if (index === 0) { // Inviten if (index === 0) { // Inviten
globalData.InMenu = true; globalData.InMenu = true;
@@ -340,7 +393,7 @@ export default function (globalData: IGlobalData) {
factionMenu.Close(); factionMenu.Close();
globalData.InMenu = false; globalData.InMenu = false;
}); });
} else if (index === 1) { // Uninviten } /*else if (index === 1) { // Uninviten
globalData.InMenu == true; globalData.InMenu == true;
var input = new InputHelper("Welchen Spieler möchtest du uninviten (Name / ID)?", globalData); var input = new InputHelper("Welchen Spieler möchtest du uninviten (Name / ID)?", globalData);
input.show(); input.show();
@@ -349,7 +402,7 @@ export default function (globalData: IGlobalData) {
factionMenu.Close(); factionMenu.Close();
globalData.InMenu = false; globalData.InMenu = false;
}); });
} }*/
}); });
return factionMenu; return factionMenu;
@@ -362,43 +415,43 @@ export default function (globalData: IGlobalData) {
var busLevel; var busLevel;
if (jobdata.pilotskill >= 300) { if (jobdata.pilotskill >= 300) {
pilotLevel = 2; pilotLevel = "Fortgeschrittener";
} else { } else {
pilotLevel = 1; pilotLevel = "Anfänger";
} }
if (jobdata.busskill >= 800) { if (jobdata.busskill >= 800) {
busLevel = 3; busLevel = "Profi";
} else if (jobdata.busskill >= 300) { } else if (jobdata.busskill >= 300) {
busLevel = 2; busLevel = "Fortgeschrittener";
} else { } else {
busLevel = 1; busLevel = "Anfänger";
} }
var actJobItem = new UIMenuItem("Aktueller Job:"); var actJobItem = new UIMenuItem("Aktueller Job:");
actJobItem.SetRightLabel(jobdata.job) actJobItem.SetRightLabel(jobdata.job)
jobMenu.AddItem(actJobItem); jobMenu.AddItem(actJobItem);
var pilotSkillItem = new UIMenuItem("Pilot Skill (LVL " + pilotLevel + ")"); var pilotSkillItem = new UIMenuItem("Pilot Skill (" + pilotLevel + ")");
switch (pilotLevel) { switch (pilotLevel) {
case 1: case "Anfänger":
pilotSkillItem.SetRightLabel(jobdata.pilotskill + "/300") pilotSkillItem.SetRightLabel(jobdata.pilotskill + "/300")
break; break;
case 2: case "Fortgeschrittener":
pilotSkillItem.SetRightLabel("MAX") pilotSkillItem.SetRightLabel("MAX")
break; break;
} }
jobMenu.AddItem(pilotSkillItem); jobMenu.AddItem(pilotSkillItem);
var busSkillItem = new UIMenuItem("Bus Skill (LVL " + busLevel + ")"); var busSkillItem = new UIMenuItem("Bus Skill (" + busLevel + ")");
switch (busLevel) { switch (busLevel) {
case 1: case "Anfänger":
busSkillItem.SetRightLabel(jobdata.busskill + "/300") busSkillItem.SetRightLabel(jobdata.busskill + "/300")
break; break;
case 2: case "Fortgeschrittener":
busSkillItem.SetRightLabel(jobdata.busskill + "/800") busSkillItem.SetRightLabel(jobdata.busskill + "/800")
break; break;
case 3: case "Profi":
busSkillItem.SetRightLabel("MAX") busSkillItem.SetRightLabel("MAX")
break; break;
} }

View File

@@ -19,41 +19,54 @@ let cancelItem = new UIMenuItem("Abbrechen", "");
cancelItem.BackColor = new Color(213, 0, 0); cancelItem.BackColor = new Color(213, 0, 0);
cancelItem.HighlightedBackColor = new Color(229, 57, 53); cancelItem.HighlightedBackColor = new Color(229, 57, 53);
export default function busRouteList(globalData: IGlobalData) { export default function busRouteList(globalData: IGlobalData) {
var routeMenu: NativeUI.Menu; var routeMenu: NativeUI.Menu;
var routeTexts; var skillSelect;
var routeText; var routeSelect;
var skill = 0;
mp.events.add('showBusRouteMenu', (listRoutes) => { mp.events.add('SERVER:StartBusJob', (jobskill) => {
skill = jobskill;
if (!globalData.InMenu) { if (!globalData.InMenu) {
globalData.InMenu = true; globalData.InMenu = true;
routeTexts = JSON.parse(listRoutes); skillSelect = ["Anfänger", "Fortgeschrittener", "Profi"];
routeMenu = new Menu("Bus Job", "", new Point(0, screenRes.y / 3), null, null); routeMenu = new Menu("Bus Job", "", new Point(0, screenRes.y / 3), null, null);
routeMenu.AddItem(new UIMenuListItem("Route", "", new ItemsCollection(routeTexts))); routeMenu.AddItem(new UIMenuListItem("Route wählen", "", new ItemsCollection(skillSelect)));
routeSelect = "Anfänger";
routeMenu.AddItem(sendItem); routeMenu.AddItem(sendItem);
routeMenu.AddItem(cancelItem); routeMenu.AddItem(cancelItem);
routeMenu.Visible = true; routeMenu.Visible = true;
routeText = "Kurz 1";
routeMenu.ListChange.on((item, index) => { routeMenu.ListChange.on((item, index) => {
switch (item.Text) { switch (item.Text) {
case "Route": case "Route wählen":
routeText = String(item.SelectedItem.DisplayText); routeSelect = String(item.SelectedItem.DisplayText);
break; break;
} }
}); });
routeMenu.ItemSelect.on((item) => { routeMenu.ItemSelect.on((item) => {
if (item.Text === "Starten") { if (item.Text === "Starten") {
mp.events.callRemote("startBusRoute", routeText);
if (routeSelect == skillSelect[1] && skill < 300) {
mp.game.audio.playSoundFrontend(1, "Hack_Failed", "DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS", true);
}
else if (routeSelect == skillSelect[2] && skill < 800)
{
mp.game.audio.playSoundFrontend(1, "Hack_Failed", "DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS", true);
}
else
{
mp.events.callRemote("CLIENT:StartBusRoute", routeSelect);
routeMenu.Close(); routeMenu.Close();
globalData.InMenu = false; globalData.InMenu = false;
}
} else if (item.Text === "Abbrechen") { } else if (item.Text === "Abbrechen") {
mp.events.callRemote("CLIENT:Job_StopJob");
routeMenu.Close(); routeMenu.Close();
globalData.InMenu = false; globalData.InMenu = false;
} }
@@ -64,4 +77,8 @@ export default function busRouteList(globalData: IGlobalData) {
}); });
} }
}); });
mp.events.add("MenuSelect:Error", () => {
mp.game.audio.playSoundFrontend(1, "Hack_Failed", "DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS", true);
});
} }

View File

@@ -44,7 +44,7 @@ export default function weaponList(globalData: IGlobalData) {
//Weapon Menu //Weapon Menu
mp.events.add('showWeaponMenu', (primariesArr, secondariesArr, meleesArr, specialsArr, armorArr, jsonTime, pistol_Amount, pistol50_Amount, Pistol_mk2_Amount, Combatpistol_Amount, SMG_Amount, Carbinerifle_Amount, Compactrifle_Amount, sniperrifle_Amount, Pumpshotgun_Amount, Schutzweste_Amount, Stungun_Amount) => { mp.events.add('showWeaponMenu', (primariesArr, secondariesArr, meleesArr, specialsArr, armorArr, jsonTime, jsonAmountInfos) => {
if (!globalData.InMenu) { if (!globalData.InMenu) {
globalData.InMenu = true; globalData.InMenu = true;
@@ -118,39 +118,13 @@ export default function weaponList(globalData: IGlobalData) {
function getWeaponStockMenu(parentMenu: NativeUI.Menu, ): NativeUI.Menu { function getWeaponStockMenu(parentMenu: NativeUI.Menu, ): NativeUI.Menu {
var weaponStockMenu = new NativeUI.Menu("Bestand","", new Point(0, screenRes.y / 3), null, null); var weaponStockMenu = new NativeUI.Menu("Bestand","", new Point(0, screenRes.y / 3), null, null);
var menuItem = new UIMenuItem("Pistol"); var amountInfos: { WeaponModel: string, Amount: number }[] = JSON.parse(jsonAmountInfos);
menuItem.SetRightLabel(pistol_Amount); amountInfos.forEach(amount => {
weaponStockMenu.AddItem(menuItem); var amountItem = new NativeUI.UIMenuItem(amount.WeaponModel);
var menuItem = new UIMenuItem("Pistol50"); amountItem.SetRightLabel(amount.Amount.toString());
menuItem.SetRightLabel(pistol50_Amount); weaponStockMenu.AddItem(amountItem);
weaponStockMenu.AddItem(menuItem); });
var menuItem = new UIMenuItem("Pistol_mk2");
menuItem.SetRightLabel(Pistol_mk2_Amount);
weaponStockMenu.AddItem(menuItem);
var menuItem = new UIMenuItem("Combatpistol");
menuItem.SetRightLabel(Combatpistol_Amount);
weaponStockMenu.AddItem(menuItem);
var menuItem = new UIMenuItem("SMG");
menuItem.SetRightLabel(SMG_Amount);
weaponStockMenu.AddItem(menuItem);
var menuItem = new UIMenuItem("Carbinerifle");
menuItem.SetRightLabel(Carbinerifle_Amount);
weaponStockMenu.AddItem(menuItem);
var menuItem = new UIMenuItem("Compactrifle");
menuItem.SetRightLabel(Compactrifle_Amount);
weaponStockMenu.AddItem(menuItem);
var menuItem = new UIMenuItem("Sniperrifle");
menuItem.SetRightLabel(sniperrifle_Amount);
weaponStockMenu.AddItem(menuItem);
var menuItem = new UIMenuItem("Pumpshotgun");
menuItem.SetRightLabel(Pumpshotgun_Amount);
weaponStockMenu.AddItem(menuItem);
var menuItem = new UIMenuItem("Schutzweste");
menuItem.SetRightLabel(Schutzweste_Amount);
weaponStockMenu.AddItem(menuItem);
var menuItem = new UIMenuItem("Stungun");
menuItem.SetRightLabel(Stungun_Amount);
weaponStockMenu.AddItem(menuItem);
weaponStockMenu.Visible = false; weaponStockMenu.Visible = false;
return weaponStockMenu; return weaponStockMenu;
} }

View File

@@ -0,0 +1,217 @@
export default function antiCheat(globalData: IGlobalData) {
const allowedWeaponHashes: number[] = [
453432689,
3219281620,
1593441988,
2578377531,
736523883,
171789620,
3220176749,
487013001,
2210333304,
1649403952,
100416529,
2725352035,
2508868239,
2343591895,
3638508604,
1737195953,
-270015777,
911657153,
-1716589765,
-2084633992,
-1075685676,
-1786099057,
-1074790547
]
mp.events.add("playerJoin", () => {
mp.events.call("client:respawning")
});
mp.events.add("client:checkInvincible", () => {
if (mp.players.local.dimension == 0) return
if (!Behaviour.active) return
var healthBefore = Behaviour.health
mp.players.local.applyDamageTo(1, true);
setTimeout(() => {
if (healthBefore == Behaviour.health) {
if (mp.players.local.getHealth() > 0) {
mp.events.callRemote('CLIENT:CheatDetection', "Static Godmode")
}
}
else {
Behaviour.sleep(1)
mp.players.local.setHealth(healthBefore + 100)
}
}, 500);
})
setInterval(() => {
mp.events.call("client:checkInvincible")
}, 30000);
mp.events.add('SERVER:AntiCheat:weaponSwap', () => {
Behaviour.resetWeapon()
})
mp.events.add('playerWeaponShot', () => {
if (Behaviour.checkWeaponhash()) {
mp.events.callRemote("CLIENT:CheatDetection", "Unallowed Weapon", Behaviour.weapon)
}
if (Behaviour.reloadingWeapon) {
mp.events.callRemote("CLIENT:CheatDetection", "No Reload")
Behaviour.resetWeapon()
}
Behaviour.updateMagSize()
});
mp.keys.bind(0x52, true, () => {
Behaviour.reloading = true
setTimeout(() => {
Behaviour.magazin = mp.game.weapon.getWeaponClipSize(mp.game.invoke(`0x0A6DB4965674D243`, mp.players.local.handle))
Behaviour.reloading = false
}, 2000);
})
mp.events.add('client:respawning', () => {
if (Behaviour.active) Behaviour.sleep(3)
})
class PlayerBehaviour {
active: boolean;
flags: number;
hits: number;
reloadingWeapon: boolean;
pos: Vector3Mp;
health: number;
weapon: number;
magazin: number;
firstshot: boolean;
reloading: boolean;
range_to_btm: number;
constructor() {
this.active = true
this.flags, this.hits = 0
this.reloadingWeapon = false
this.pos = mp.players.local.position
this.health = Number(mp.players.local.getHealth()) + Number(mp.players.local.getArmour())
this.weapon = Number(mp.game.invoke(`0x0A6DB4965674D243`, mp.players.local.handle));
this.magazin = mp.game.weapon.getWeaponClipSize(this.weapon)
this.firstshot = true
}
sleep(duration) {
this.active = false
setTimeout(() => {
this.active = true
}, duration * 1000);
}
secs() {
return Math.round(Date.now() / 1000)
}
isRagdollOnHeight(height) {
this.range_to_btm = mp.game.gameplay.getGroundZFor3dCoord(mp.players.local.position.x, mp.players.local.position.y, mp.players.local.position.z, 0, false);
if (Math.abs(mp.players.local.position.z - this.range_to_btm) > Math.abs(height - this.range_to_btm)) {
if (!this.isWalking()) {
return false;
} else if (this.active && this.range_to_btm > 0) {
return true;
}
return false
}
}
isWalking() {
if (mp.players.local.isFalling() || mp.players.local.isRagdoll()) return false
else if (!mp.players.local.vehicle) return true
}
subtractVector(v1, v2) {
return { "x": v1.x - v2.x, "y": v1.y - v2.y, "z": v1.z - v2.z }
}
VehicleFasterThan(max) {
if (mp.players.local.vehicle) {
if (mp.players.local.vehicle.getClass() != 16) {
return mp.players.local.vehicle.getSpeed() * 3.6 > max
}
}
return false
}
checkCarPos(maxHeight = 50) {
if (mp.players.local.vehicle) {
if (mp.players.local.vehicle.getClass() != 15 && mp.players.local.vehicle.getClass() != 16) {
this.range_to_btm = mp.game.gameplay.getGroundZFor3dCoord(mp.players.local.position.x, mp.players.local.position.y, mp.players.local.position.z, 0, false);
if (mp.players.local.position.z - this.range_to_btm > maxHeight + this.range_to_btm) {
return true
}
return false
}
}
}
checkWeaponhash() {
let h = this.weapon;
if (allowedWeaponHashes.indexOf(h) === -1) {
mp.gui.chat.push("unallowed weapon: " + h);
return true
}
return false
}
resetWeapon() {
this.weapon = mp.game.invoke(`0x0A6DB4965674D243`, mp.players.local.handle)
this.magazin = mp.game.weapon.getWeaponClipSize(this.weapon)
this.reloadingWeapon = false
}
updateMagSize() {
this.weapon = mp.game.invoke(`0x0A6DB4965674D243`, mp.players.local.handle)
if (this.firstshot) {
this.firstshot = false
this.resetWeapon()
}
this.magazin -= 1
if (this.magazin <= 0) {
this.reloadingWeapon = true
setTimeout(() => {
this.reloadingWeapon = false
this.resetWeapon()
}, 1250);
}
}
}
var Behaviour = new PlayerBehaviour()
var loop = Behaviour.secs()
mp.events.add("render", () => {
Behaviour.health = Number(mp.players.local.getHealth()) + Number(mp.players.local.getArmour())
if (loop < Behaviour.secs()) {
if (Behaviour.active) {
let Difference = Behaviour.subtractVector(Behaviour.pos, mp.players.local.position)
if (Math.abs(Difference.x) > 30 || Math.abs(Difference.y) > 30) {
if (Behaviour.isWalking()) {
mp.events.callRemote("CLIENT:CheatDetection", "Flyhack/Teleport")
}
}
if (mp.players.local.vehicle) {
if (Behaviour.checkCarPos(25)) {
mp.events.callRemote("CLIENT:CheatDetection", "Vehicle Flyhack")
}
if (Behaviour.VehicleFasterThan(250)) {
mp.events.callRemote("CLIENT:CheatDetection", "Vehicle Speedhack")
}
}
}
Behaviour.pos = mp.players.local.position
loop = Behaviour.secs() + 3;
}
});
setInterval(() => {
let hp = Behaviour.health
setTimeout(() => {
if (hp < Behaviour.health && Behaviour.active) {
mp.events.callRemote("CLIENT:CheatDetection", "Healkey (unexpected HP added)")
}
}, 400);
}, 500);
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,14 @@
<html>
<head>
<link rel="stylesheet" type="text/css" href="style/checkbox.css" media="screen">
<link rel="stylesheet" type="text/css" href="style/main.css" media="screen">
<meta charset="utf-8" />
</head>
<body>
<div id="chat" class="ui_element">
<ul id="chat_messages"></ul>
</div>
<script type="text/javascript" src="jquery-1.11.3.min.js"></script>
<script src="js/main.js"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,191 @@
let chat =
{
size: 0,
history_limit: 50,
container: null,
input: null,
enabled: false,
active: true,
historyMsgs: [],
currentIndex: 0
};
const MAX_MSG_HISTORY = 12;
function enableChatInput(enable) {
if (chat.active == false
&& enable == true)
return;
if (enable != (chat.input != null)) {
mp.invoke("focus", enable);
if (enable) {
chat.input = $("#chat").append('<div><input id="chat_msg" type="text" /></div>').children(":last");
chat.input.children("input").focus();
}
else {
chat.input.fadeOut('fast', function () {
chat.input.remove();
chat.input = null;
});
}
}
}
var chatAPI =
{
push: (text) => {
let colorPositions = [];
let colors = [];
let chatElement = "<li>";
for (let i = 0; i < text.length; i++) {
let colorCheck = `${text[i]}${text[i + 1]}${text[i + 2]}`;
if (colorCheck === "!{#") {
colorPositions.push(i);
}
}
colorPositions.forEach(el => {
let sub = text.slice(el, -1);
colors.push(sub.slice(3, 9));
});
colorPositions.forEach((el, i) => {
let sub = text.slice(colorPositions[i] + 10, colorPositions[i + 1]);
chatElement += `<span style='color: ${colors[i]}'>${sub}</span>`;
});
var elmnt = document.getElementById("chat_messages");
chatElement += "</li>";
var today = new Date();
if (chatElement === "<li></li>") {
if (chat.input == null || elmnt.scrollTop == elmnt.scrollHeight - elmnt.clientHeight) {
chat.container.append("<li>" + "[" + today.toLocaleTimeString('de-DE') + "] " + text + "</li>");
elmnt.scrollTop = elmnt.scrollHeight - elmnt.clientHeight;
} else {
chat.container.append("<li>" + "[" + today.toLocaleTimeString('de-DE') + "] " + text + "</li>");
}
} else {
chat.container.append(chatElement);
}
chat.size++;
if (chat.size >= chat.history_limit) {
chat.container.children(":first").remove();
}
},
clear: () => {
chat.container.html("");
},
activate: (toggle) => {
if (toggle == false
&& (chat.input != null))
enableChatInput(false);
chat.active = toggle;
},
show: (toggle) => {
if (toggle)
$("#chat").show();
else
$("#chat").hide();
chat.active = toggle;
}
};
let api = { "chat:push": chatAPI.push, "chat:clear": chatAPI.clear, "chat:activate": chatAPI.activate, "chat:show": chatAPI.show };
for (let fn in api) {
mp.events.add(fn, api[fn]);
}
$(document).ready(function () {
chat.container = $("#chat ul#chat_messages");
$(".ui_element").show();
chatAPI.push("Multiplayer started");
$("body").keyup(function (event) {
if (event.which == 84 && chat.input == null
&& chat.active == true) {
chat.currentIndex = 0;
enableChatInput(true);
event.preventDefault();
} else if (event.which == 38) {
if (chat.historyMsgs.length === 0)
return;
const previousMessages = chat.historyMsgs;
if (previousMessages.length === chat.currentIndex)
return;
chat.input.children("input").val(previousMessages[chat.currentIndex]);
setTimeout(() => {
chat.input.children("input").setSelectionRange(previousMessages[chat.currentIndex].length, previousMessages[chat.currentIndex].length);
}, 1);
chat.currentIndex = chat.currentIndex + 1;
} else if (event.which == 40) {
if (chat.historyMsgs.length === 0)
return;
const previousMessages = chat.historyMsgs;
if (chat.currentIndex === -1) {
chat.input.children("input").val("")
return;
}
chat.currentIndex = chat.currentIndex - 1;
chat.input.children("input").val(previousMessages[chat.currentIndex]);
setTimeout(() => {
chat.input.children("input").setSelectionRange(previousMessages[chat.currentIndex].length, previousMessages[chat.currentIndex].length);
}, 1);
}
else if (event.which == 13 && chat.input != null) {
var value = chat.input.children("input").val();
if (value.length > 0) {
if (chat.historyMsgs.length >= MAX_MSG_HISTORY) {
chat.historyMsgs.pop();
}
chat.historyMsgs.unshift(value);
chat.currentIndex = 0;
var elmnt = document.getElementById("chat_messages");
if (value[0] == "/") {
value = value.substr(1);
if (value.length > 0)
mp.invoke("command", value);
elmnt.scrollTop = elmnt.scrollHeight - elmnt.clientHeight;
}
else {
mp.invoke("chatMessage", value);
elmnt.scrollTop = elmnt.scrollHeight - elmnt.clientHeight;
}
}
enableChatInput(false);
}
});
});

View File

@@ -0,0 +1 @@
input[type=checkbox].css-checkbox{position:absolute;z-index:-1000;left:-1000px;overflow:hidden;clip:rect(0 0 0 0);height:1px;width:1px;margin:-1px;padding:0;border:0;}input[type=checkbox].css-checkbox+label.css-label{height:20px;width:20px;display:inline-block;background-repeat:no-repeat;background-position:0 0;cursor:pointer;}input[type=checkbox].css-checkbox:checked+label.css-label:after{content:'x';color:white;}label.css-label{background:#7b3784;border-radius:2px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}

View File

@@ -0,0 +1,89 @@
*, body, html {
padding: 0;
margin: 0
}
#chat, a, body, html {
color: #fff
}
body, html {
-webkit-font-smoothing: antialiased;
overflow: hidden;
font-size: 14px;
-webkit-user-select: none
}
a {
text-decoration: none
}
.ui_element {
display: none;
position: absolute;
width: 100vw;
height: 100vh;
z-index: 2
}
#chat {
display: block;
z-index: 0;
line-height: 24px;
font-weight: 700;
text-shadow: 1px 1px 0 #000,-1px -1px 0 #000,1px -1px 0 #000,-1px 1px 0 #000,1px 1px 0 #000;
font-family: Myriad Pro,Segoe UI,Verdana,sans-serif;
font-size: 16px;
letter-spacing: .4px;
margin-left: 15px
}
@media screen and (min-height:1080px) {
#chat {
font-size: 14px !important;
font-weight: 700
}
}
#chat ul#chat_messages {
direction: ltr;
overflow-y: auto;
overflow-x: hidden;
height: 285px;
margin-top: 2vh; /*2vh*/
transform: rotate(0deg);
/*width:37vw; /* old: 37vw*/
max-width: 85%;
padding: 10px 20px; /* old padding: 10px 20px*/
list-style-type: none
}
#chat ul#chat_messages > li {
transform: rotate(0deg)
}
#chat input#chat_msg {
color: #fff;
background: rgba(0,0,0,.5);
outline: 0;
border: none;
font-family: Myriad Pro,Open Sans,sans-serif;
font-size: 18px;
line-height: 35px;
width: 35vw;
padding: 5px 5px 5px 15px
}
::-webkit-scrollbar {
width: 11px;
direction: ltr;
}
::-webkit-scrollbar-thumb {
background: rgba(255, 17, 0, 0);
border-radius: 20px
}
::-webkit-scrollbar-thumb:hover {
background: rgba(255, 17, 0, 0)
}

View File

@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 501.551 501.551" style="enable-background:new 0 0 501.551 501.551;" xml:space="preserve">
<path style="fill:#FFD15C;" d="M439.902,436.767c-111.804,21.943-266.449,21.943-378.253,0
c-19.853-124.343-19.853-247.641,0-371.984c111.804-21.943,266.449-21.943,378.253,0
C459.755,189.127,459.755,312.424,439.902,436.767z"/>
<g>
<polygon style="fill:#F8B64C;" points="451.396,486.922 451.396,486.922 451.396,486.922 439.902,436.767 61.649,436.767
50.155,486.922 50.155,486.922 50.155,486.922 50.155,486.922 50.155,486.922 64.784,501.551 79.412,486.922 79.412,486.922
92.996,501.551 107.625,486.922 107.625,486.922 122.253,501.551 135.837,486.922 135.837,486.922 150.465,501.551
165.094,486.922 165.094,486.922 179.722,501.551 193.306,486.922 193.306,486.922 207.935,501.551 222.563,486.922
222.563,486.922 236.147,501.551 250.776,486.922 250.776,486.922 265.404,501.551 278.988,486.922 278.988,486.922
293.616,501.551 308.245,486.922 308.245,486.922 321.829,501.551 336.457,486.922 336.457,486.922 351.086,501.551
365.714,486.922 365.714,486.922 379.298,501.551 393.927,486.922 393.927,486.922 408.555,501.551 422.139,486.922
422.139,486.922 436.767,501.551 451.396,486.922 "/>
<polygon style="fill:#F8B64C;" points="436.767,0 422.139,14.629 408.555,0 393.927,14.629 379.298,0 365.714,14.629 351.086,0
336.457,14.629 321.829,0 308.245,14.629 293.616,0 278.988,14.629 265.404,0 250.776,14.629 236.147,0 222.563,14.629 207.935,0
193.306,14.629 179.722,0 165.094,14.629 150.465,0 135.837,14.629 122.253,0 107.625,14.629 92.996,0 79.412,14.629 64.784,0
50.155,14.629 61.649,64.784 439.902,64.784 451.396,14.629 "/>
</g>
<ellipse transform="matrix(-0.4695 -0.8829 0.8829 -0.4695 147.1146 589.9061)" style="fill:#FF7058;" cx="250.773" cy="250.758" rx="100.307" ry="152.551"/>
<g>
<path style="fill:#F8B64C;" d="M382.433,364.669c-4.18,0-7.314-3.135-7.314-7.314c0-25.078,20.898-45.975,45.976-45.975
c4.18,0,7.314,3.135,7.314,7.314s-3.135,7.314-7.314,7.314c-16.718,0-30.302,13.584-30.302,30.302
C389.747,360.49,386.612,364.669,382.433,364.669z"/>
<path style="fill:#F8B64C;" d="M374.073,143.151c-4.18,0-7.314-3.135-7.314-7.314c0-25.078,20.898-45.976,45.976-45.976
c4.18,0,7.314,3.135,7.314,7.314c0,4.18-3.135,7.314-7.314,7.314c-16.718,0-30.302,13.584-30.302,30.302
C381.388,140.016,378.253,143.151,374.073,143.151z"/>
<path style="fill:#F8B64C;" d="M272.718,382.433c0-4.18,3.135-7.314,7.314-7.314c25.078,0,45.975,20.898,45.975,45.976
c0,4.18-3.135,7.314-7.314,7.314c-4.18,0-7.314-3.135-7.314-7.314c0-16.718-13.584-30.302-30.302-30.302
C275.853,390.792,272.718,386.612,272.718,382.433z"/>
<path style="fill:#F8B64C;" d="M82.547,191.216c-4.18,0-7.314-3.135-7.314-7.314c0-25.078,20.898-45.976,45.976-45.976
c4.18,0,7.314,3.135,7.314,7.314s-3.135,7.314-7.314,7.314c-16.718,0-30.302,13.584-30.302,30.302
C89.861,187.037,86.727,191.216,82.547,191.216z"/>
<path style="fill:#F8B64C;" d="M159.869,97.176c0-4.18,3.135-7.314,7.314-7.314c25.078,0,45.976,20.898,45.976,45.976
c0,4.18-3.135,7.314-7.314,7.314c-4.18,0-7.314-3.135-7.314-7.314c0-16.718-13.584-30.302-30.302-30.302
C163.004,105.535,159.869,101.355,159.869,97.176z"/>
</g>
<g>
<path style="fill:#FFFFFF;" d="M151.51,288.392l15.673,1.045c0,8.359-2.09,15.673-6.269,20.898
c-4.18,5.224-9.404,8.359-17.763,10.449c-9.404,2.09-18.808,1.045-26.122-3.135c-8.359-5.224-13.584-12.539-16.718-24.033
s-3.135-21.943,2.09-30.302c4.18-8.359,11.494-13.584,21.943-16.718c8.359-2.09,16.718-2.09,24.033,2.09
c4.18,2.09,7.314,6.269,11.494,11.494l-14.629,6.269c-2.09-3.135-4.18-6.269-7.314-7.314c-3.135-1.045-7.314-2.09-10.449-1.045
c-5.224,1.045-9.404,4.18-11.494,9.404c-2.09,5.224-2.09,11.494,0,19.853c2.09,9.404,6.269,15.673,10.449,17.763
c4.18,3.135,9.404,4.18,14.629,2.09c4.18-1.045,7.314-3.135,9.404-6.269C150.465,297.796,151.51,293.616,151.51,288.392z"/>
<path style="fill:#FFFFFF;" d="M184.947,307.2l-18.808-72.098l14.629-4.18l7.314,28.212l28.212-7.314l-7.314-28.212l14.629-4.18
l19.853,72.098l-14.629,4.18l-8.359-31.347l-28.212,7.314l8.359,31.347L184.947,307.2z"/>
<path style="fill:#FFFFFF;" d="M258.09,287.347l-19.853-72.098l14.629-4.18l19.853,72.098L258.09,287.347z"/>
<path style="fill:#FFFFFF;" d="M286.302,280.033l-19.853-72.098l22.988-6.269c8.359-2.09,14.629-3.135,17.763-3.135
c4.18,0,8.359,1.045,12.539,4.18c4.18,3.135,6.269,7.314,8.359,12.539c1.045,4.18,1.045,8.359,1.045,11.494
c-1.045,3.135-2.09,6.269-4.18,8.359c-2.09,2.09-4.18,4.18-6.269,5.224c-3.135,2.09-8.359,3.135-14.629,5.224l-9.404,2.09
l7.314,27.167L286.302,280.033z M284.212,216.294l5.224,20.898l8.359-2.09c5.224-1.045,9.404-3.135,11.494-4.18
c2.09-1.045,3.135-3.135,3.135-5.225c1.045-2.09,1.045-4.18,0-6.269c-1.045-3.135-2.09-4.18-4.18-6.269
c-2.09-1.045-4.18-2.09-6.269-2.09c-2.09,0-5.224,1.045-10.449,2.09L284.212,216.294z"/>
<path style="fill:#FFFFFF;" d="M342.727,239.282l13.584-5.224c2.09,4.18,5.225,7.314,8.359,9.404c3.135,1.045,7.314,2.09,11.494,0
c4.18-1.045,8.359-3.135,9.404-6.269c2.09-3.135,2.09-5.224,2.09-8.359c0-2.09-1.045-3.135-3.135-4.18c-1.045,0-2.09,0-5.225,0
c-2.09,0-6.269,0-12.539,0c-8.359,0-14.629-1.045-18.808-3.135c-5.224-3.135-9.404-7.314-10.449-12.539
c-1.045-4.18-1.045-7.314,0-11.494c1.045-4.18,3.135-7.314,7.314-9.404c3.135-3.135,8.359-5.225,13.584-6.269
c9.404-2.09,16.718-2.09,21.943,0c5.224,3.135,9.404,7.314,11.494,13.584l-14.629,4.18c-2.09-3.135-4.18-6.269-6.269-7.314
c-2.09-1.045-6.269-1.045-9.404,0c-4.18,1.045-7.314,3.135-9.404,5.224c-1.045,1.045-2.09,3.135-1.045,5.224
c0,2.09,2.09,3.135,3.135,4.18c2.09,1.045,7.314,1.045,14.629,1.045s13.584,0,16.718,1.045c4.18,1.045,7.314,2.09,10.449,5.224
c3.135,2.09,5.224,6.269,6.269,10.449c1.045,4.18,1.045,8.359,0,12.539c-1.045,4.18-4.18,7.314-7.314,10.449
c-4.18,3.135-8.359,5.225-14.629,7.314c-9.404,2.09-16.718,2.09-22.988-1.045C351.086,252.865,345.861,247.641,342.727,239.282z"/>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -0,0 +1 @@
<svg height="504pt" viewBox="0 -71 504 503" width="504pt" xmlns="http://www.w3.org/2000/svg"><path d="m388 56.5h-60v304h120v-304zm0 0" fill="#656d78"/><path d="m304 80.5h-280v256h280zm24-24v304h-328v-304zm0 0" fill="#ffd2a6"/><path d="m300 80.5c2.199219 0 4 1.800781 4 4v248c0 2.199219-1.800781 4-4 4h-272c-2.199219 0-4-1.800781-4-4v-248c0-2.199219 1.800781-4 4-4zm0 0" fill="#ed5565"/><path d="m56 .5h328l-56 56h-328zm0 0" fill="#f2c397"/><path d="m448 56.5h-24l56-56h24zm0 0" fill="#ccd1d9"/><path d="m480 .5-56 56h-96l56-56zm0 0" fill="#ccd1d9"/><path d="m504 .5v304l-56 56v-304zm0 0" fill="#e6e9ed"/><path d="m276 104.5c2.199219 0 4 1.800781 4 4v24c0 2.199219-1.800781 4-4 4h-224c-2.199219 0-4-1.800781-4-4v-24c0-2.199219 1.800781-4 4-4zm0 0" fill="#656d78"/><path d="m267.328125 214.292969c-.703125-1.058594-17.761719-25.785157-67.328125-25.792969-1.0625 0-2.078125.425781-2.832031 1.167969-.753907.742187-1.167969 1.769531-1.167969 2.832031v48.015625c0 2.207031 1.792969 4 4 4 49.566406 0 66.625-24.734375 67.328125-25.792969.894531-1.34375.894531-3.085937 0-4.429687zm0 0" fill="#ffce54"/><g fill="#f5f7fa"><path d="m184.238281 228.5c-2.207031 0-4.039062-1.792969-4.039062-4s1.753906-4 3.960937-4h.085938c2.203125 0 4 1.792969 4 4s-1.796875 4-4.007813 4zm0 0"/><path d="m184 244.507812h-72c-2.207031 0-4-1.792968-4-4 0-2.207031 1.792969-4 4-4h72c2.207031 0 4 1.792969 4 4 0 2.207032-1.792969 4-4 4zm0 0"/><path d="m184 212.5h-56c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h56c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0"/><path d="m168 228.5h-88c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h88c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0"/><path d="m184 196.5h-16c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h16c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm-32 0h-96c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h96c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0"/><path d="m112 212.5h-8c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h8c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0"/></g><path d="m383.984375 184.523438v131.953124c-4.398437 0-8 3.597657-8 8v8h-32v-8c0-4.402343-3.601563-8-8-8v-131.953124l8-16v-16h32v16zm0 0" fill="#f6bb42"/><path d="m359.984375 80.523438s-16 32-16 64v8h32v-8c0-32-16-64-16-64zm0 0" fill="#fc6e51"/><path d="m379.984375 336.476562h-40.007813c-2.207031 0-4-1.792968-4-4 0-2.207031 1.792969-4 4-4h40.007813c2.207031 0 4 1.792969 4 4 0 2.207032-1.792969 4-4 4zm0 0" fill="#ffce54"/><path d="m359.984375 304.46875c-2.207031 0-4-1.792969-4-4v-106.578125c0-2.207031 1.792969-4 4-4s4 1.792969 4 4v106.578125c0 2.207031-1.792969 4-4 4zm0 0" fill="#ffce54"/><path d="m440.015625 184.523438v131.953124c-4.398437 0-8 3.597657-8 8v8h-32v-8c0-4.402343-3.601563-8-8-8v-131.953124l8-16v-16h32v16zm0 0" fill="#f6bb42"/><path d="m416.015625 80.523438s-16 32-16 64v8h32v-8c0-32-16-64-16-64zm0 0" fill="#fc6e51"/><path d="m436.015625 336.476562h-40.007813c-2.207031 0-4-1.792968-4-4 0-2.207031 1.792969-4 4-4h40.007813c2.207031 0 4 1.792969 4 4 0 2.207032-1.792969 4-4 4zm0 0" fill="#ffce54"/><path d="m416.015625 304.46875c-2.207031 0-4-1.792969-4-4v-106.578125c0-2.207031 1.792969-4 4-4s4 1.792969 4 4v106.578125c0 2.207031-1.792969 4-4 4zm0 0" fill="#ffce54"/><path d="m239.984375 124.5h-151.96875c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h151.96875c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0" fill="#545c66"/><path d="m256 300.5h-184c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h184c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0" fill="#da4453"/><path d="m200 316.5h-72c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h72c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0" fill="#da4453"/><path d="m308 40.5h-248c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h248c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0" fill="#ffd2a6"/><path d="m324 24.5h-248c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h248c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0" fill="#ffd2a6"/></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -0,0 +1 @@
<svg height="504pt" viewBox="0 -71 504 503" width="504pt" xmlns="http://www.w3.org/2000/svg"><path d="m388 56.5h-60v304h120v-304zm0 0" fill="#656d78"/><path d="m304 80.5h-280v256h280zm24-24v304h-328v-304zm0 0" fill="#ffd2a6"/><path d="m300 80.5c2.199219 0 4 1.800781 4 4v248c0 2.199219-1.800781 4-4 4h-272c-2.199219 0-4-1.800781-4-4v-248c0-2.199219 1.800781-4 4-4zm0 0" fill="#ed5565"/><path d="m56 .5h328l-56 56h-328zm0 0" fill="#f2c397"/><path d="m448 56.5h-24l56-56h24zm0 0" fill="#ccd1d9"/><path d="m480 .5-56 56h-96l56-56zm0 0" fill="#ccd1d9"/><path d="m504 .5v304l-56 56v-304zm0 0" fill="#e6e9ed"/><path d="m276 104.5c2.199219 0 4 1.800781 4 4v24c0 2.199219-1.800781 4-4 4h-224c-2.199219 0-4-1.800781-4-4v-24c0-2.199219 1.800781-4 4-4zm0 0" fill="#656d78"/><path d="m267.328125 214.292969c-.703125-1.058594-17.761719-25.785157-67.328125-25.792969-1.0625 0-2.078125.425781-2.832031 1.167969-.753907.742187-1.167969 1.769531-1.167969 2.832031v48.015625c0 2.207031 1.792969 4 4 4 49.566406 0 66.625-24.734375 67.328125-25.792969.894531-1.34375.894531-3.085937 0-4.429687zm0 0" fill="#ffce54"/><g fill="#f5f7fa"><path d="m184.238281 228.5c-2.207031 0-4.039062-1.792969-4.039062-4s1.753906-4 3.960937-4h.085938c2.203125 0 4 1.792969 4 4s-1.796875 4-4.007813 4zm0 0"/><path d="m184 244.507812h-72c-2.207031 0-4-1.792968-4-4 0-2.207031 1.792969-4 4-4h72c2.207031 0 4 1.792969 4 4 0 2.207032-1.792969 4-4 4zm0 0"/><path d="m184 212.5h-56c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h56c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0"/><path d="m168 228.5h-88c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h88c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0"/><path d="m184 196.5h-16c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h16c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm-32 0h-96c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h96c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0"/><path d="m112 212.5h-8c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h8c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0"/></g><path d="m383.984375 184.523438v131.953124c-4.398437 0-8 3.597657-8 8v8h-32v-8c0-4.402343-3.601563-8-8-8v-131.953124l8-16v-16h32v16zm0 0" fill="#f6bb42"/><path d="m359.984375 80.523438s-16 32-16 64v8h32v-8c0-32-16-64-16-64zm0 0" fill="#fc6e51"/><path d="m379.984375 336.476562h-40.007813c-2.207031 0-4-1.792968-4-4 0-2.207031 1.792969-4 4-4h40.007813c2.207031 0 4 1.792969 4 4 0 2.207032-1.792969 4-4 4zm0 0" fill="#ffce54"/><path d="m359.984375 304.46875c-2.207031 0-4-1.792969-4-4v-106.578125c0-2.207031 1.792969-4 4-4s4 1.792969 4 4v106.578125c0 2.207031-1.792969 4-4 4zm0 0" fill="#ffce54"/><path d="m440.015625 184.523438v131.953124c-4.398437 0-8 3.597657-8 8v8h-32v-8c0-4.402343-3.601563-8-8-8v-131.953124l8-16v-16h32v16zm0 0" fill="#f6bb42"/><path d="m416.015625 80.523438s-16 32-16 64v8h32v-8c0-32-16-64-16-64zm0 0" fill="#fc6e51"/><path d="m436.015625 336.476562h-40.007813c-2.207031 0-4-1.792968-4-4 0-2.207031 1.792969-4 4-4h40.007813c2.207031 0 4 1.792969 4 4 0 2.207032-1.792969 4-4 4zm0 0" fill="#ffce54"/><path d="m416.015625 304.46875c-2.207031 0-4-1.792969-4-4v-106.578125c0-2.207031 1.792969-4 4-4s4 1.792969 4 4v106.578125c0 2.207031-1.792969 4-4 4zm0 0" fill="#ffce54"/><path d="m239.984375 124.5h-151.96875c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h151.96875c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0" fill="#545c66"/><path d="m256 300.5h-184c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h184c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0" fill="#da4453"/><path d="m200 316.5h-72c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h72c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0" fill="#da4453"/><path d="m308 40.5h-248c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h248c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0" fill="#ffd2a6"/><path d="m324 24.5h-248c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h248c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0" fill="#ffd2a6"/></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -0,0 +1 @@
<svg height="504pt" viewBox="0 -71 504 503" width="504pt" xmlns="http://www.w3.org/2000/svg"><path d="m388 56.5h-60v304h120v-304zm0 0" fill="#656d78"/><path d="m304 80.5h-280v256h280zm24-24v304h-328v-304zm0 0" fill="#ffd2a6"/><path d="m300 80.5c2.199219 0 4 1.800781 4 4v248c0 2.199219-1.800781 4-4 4h-272c-2.199219 0-4-1.800781-4-4v-248c0-2.199219 1.800781-4 4-4zm0 0" fill="#ed5565"/><path d="m56 .5h328l-56 56h-328zm0 0" fill="#f2c397"/><path d="m448 56.5h-24l56-56h24zm0 0" fill="#ccd1d9"/><path d="m480 .5-56 56h-96l56-56zm0 0" fill="#ccd1d9"/><path d="m504 .5v304l-56 56v-304zm0 0" fill="#e6e9ed"/><path d="m276 104.5c2.199219 0 4 1.800781 4 4v24c0 2.199219-1.800781 4-4 4h-224c-2.199219 0-4-1.800781-4-4v-24c0-2.199219 1.800781-4 4-4zm0 0" fill="#656d78"/><path d="m267.328125 214.292969c-.703125-1.058594-17.761719-25.785157-67.328125-25.792969-1.0625 0-2.078125.425781-2.832031 1.167969-.753907.742187-1.167969 1.769531-1.167969 2.832031v48.015625c0 2.207031 1.792969 4 4 4 49.566406 0 66.625-24.734375 67.328125-25.792969.894531-1.34375.894531-3.085937 0-4.429687zm0 0" fill="#ffce54"/><g fill="#f5f7fa"><path d="m184.238281 228.5c-2.207031 0-4.039062-1.792969-4.039062-4s1.753906-4 3.960937-4h.085938c2.203125 0 4 1.792969 4 4s-1.796875 4-4.007813 4zm0 0"/><path d="m184 244.507812h-72c-2.207031 0-4-1.792968-4-4 0-2.207031 1.792969-4 4-4h72c2.207031 0 4 1.792969 4 4 0 2.207032-1.792969 4-4 4zm0 0"/><path d="m184 212.5h-56c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h56c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0"/><path d="m168 228.5h-88c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h88c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0"/><path d="m184 196.5h-16c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h16c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm-32 0h-96c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h96c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0"/><path d="m112 212.5h-8c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h8c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0"/></g><path d="m383.984375 184.523438v131.953124c-4.398437 0-8 3.597657-8 8v8h-32v-8c0-4.402343-3.601563-8-8-8v-131.953124l8-16v-16h32v16zm0 0" fill="#f6bb42"/><path d="m359.984375 80.523438s-16 32-16 64v8h32v-8c0-32-16-64-16-64zm0 0" fill="#fc6e51"/><path d="m379.984375 336.476562h-40.007813c-2.207031 0-4-1.792968-4-4 0-2.207031 1.792969-4 4-4h40.007813c2.207031 0 4 1.792969 4 4 0 2.207032-1.792969 4-4 4zm0 0" fill="#ffce54"/><path d="m359.984375 304.46875c-2.207031 0-4-1.792969-4-4v-106.578125c0-2.207031 1.792969-4 4-4s4 1.792969 4 4v106.578125c0 2.207031-1.792969 4-4 4zm0 0" fill="#ffce54"/><path d="m440.015625 184.523438v131.953124c-4.398437 0-8 3.597657-8 8v8h-32v-8c0-4.402343-3.601563-8-8-8v-131.953124l8-16v-16h32v16zm0 0" fill="#f6bb42"/><path d="m416.015625 80.523438s-16 32-16 64v8h32v-8c0-32-16-64-16-64zm0 0" fill="#fc6e51"/><path d="m436.015625 336.476562h-40.007813c-2.207031 0-4-1.792968-4-4 0-2.207031 1.792969-4 4-4h40.007813c2.207031 0 4 1.792969 4 4 0 2.207032-1.792969 4-4 4zm0 0" fill="#ffce54"/><path d="m416.015625 304.46875c-2.207031 0-4-1.792969-4-4v-106.578125c0-2.207031 1.792969-4 4-4s4 1.792969 4 4v106.578125c0 2.207031-1.792969 4-4 4zm0 0" fill="#ffce54"/><path d="m239.984375 124.5h-151.96875c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h151.96875c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0" fill="#545c66"/><path d="m256 300.5h-184c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h184c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0" fill="#da4453"/><path d="m200 316.5h-72c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h72c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0" fill="#da4453"/><path d="m308 40.5h-248c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h248c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0" fill="#ffd2a6"/><path d="m324 24.5h-248c-2.207031 0-4-1.792969-4-4s1.792969-4 4-4h248c2.207031 0 4 1.792969 4 4s-1.792969 4-4 4zm0 0" fill="#ffd2a6"/></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -64,6 +64,14 @@ declare type FactionRanks = {
ranks: FactionRank[] ranks: FactionRank[]
} }
declare type FactionMember = {
username: string;
factionRank: number;
factionRankName: string;
isLeader: boolean;
isOnline: boolean;
}
declare type FactionRank = { declare type FactionRank = {
} }

View File

@@ -37,6 +37,10 @@ game.events.onPlayerCommand((cmd) => {
mp.game.vehicle.defaultEngineBehaviour = false; mp.game.vehicle.defaultEngineBehaviour = false;
mp.gui.chat.show(false);
const chatbox = mp.browsers.new("package://assets/chat/index.html");
chatbox.markAsChat();
require('./Gui/house'); require('./Gui/house');
import vehicleEntering from './vehiclesync/entering'; import vehicleEntering from './vehiclesync/entering';
@@ -251,6 +255,9 @@ gangwarHandle(globalData);
import animationSync from './util/animationSync'; import animationSync from './util/animationSync';
animationSync(); animationSync();
import antiCheat from './admin/anticheat';
antiCheat(globalData);
require('./Gui/policedepartment'); require('./Gui/policedepartment');
require('./Gui/helptext'); require('./Gui/helptext');

View File

@@ -45,6 +45,14 @@
modifier = 0.25; modifier = 0.25;
meelemodifier = 1; meelemodifier = 1;
break; break;
case 0x0A3D4D34: //Combat PDW
modifier = 0.185;
meelemodifier = 1;
break;
case 0xBFEFFF6D: //assaultrifle
modifier = 0.225;
meelemodifier = 1;
break;
case 0x1D073A89: //Pumpshotgun case 0x1D073A89: //Pumpshotgun
modifier = 0.2; modifier = 0.2;
meelemodifier = 1; meelemodifier = 1;

View File

@@ -9,7 +9,7 @@
export default function smoothThrottle() { export default function smoothThrottle() {
let GlobalDisable = false; let GlobalDisable = false;
let DisableAntiReverse = false; let DisableAntiReverse = true;
let DisableSmoothThrottle = false; let DisableSmoothThrottle = false;
let BrakeSystem = false; let BrakeSystem = false;

View File

@@ -67,7 +67,7 @@ namespace ReallifeGamemode.Server.Core.Managers
else else
{ {
//houseBlips[house.Id] = NAPI.Blip.CreateBlip(40, house.Position, 0.7f, 11, "Haus", shortRange: true); too many blips //houseBlips[house.Id] = NAPI.Blip.CreateBlip(40, house.Position, 0.7f, 11, "Haus", shortRange: true); too many blips
houseBlips[house.Id] = Api.Blip.CreateBlip(40, house.Position, "Haus", 11, 0.7f, shortRange: true); houseBlips[house.Id] = Api.Blip.CreateBlip(40, house.Position, "Haus", 11, 0.5f, shortRange: true);
} }
houseLabels[house.Id] = Api.TextLabel.CreateTextLabel(text, housePos, 10f, 1f, 0, new Color(255, 255, 255)); houseLabels[house.Id] = Api.TextLabel.CreateTextLabel(text, housePos, 10f, 1f, 0, new Color(255, 255, 255));

View File

@@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GTANetworkAPI;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Types;
namespace ReallifeGamemode.Server.Admin
{
public class AntiCheat : Script
{
private static TimeSpan antiCheatMessageCooldown = new TimeSpan(0, 0, 30);
private static Dictionary<(string, string), DateTime> lastAntiCheatBroadcastTime = new Dictionary<(string, string), DateTime>();
[ServerEvent(Event.PlayerWeaponSwitch)]
public void OnAntiCheatPlayerWeeaponSwitch(Player player, WeaponHash oldWeapon, WeaponHash newWeapon)
{
player.TriggerEvent("SERVER:AntiCheat:weaponSwap");
}
[RemoteEvent("CLIENT:CheatDetection")]
public void OnAntiCheatCheatDetected(Player cheater, string cheat)
{
if (!cheater.IsLoggedIn())
{
cheater.Kick();
}
if(cheater.IsAdminDuty())
{
return;
}
if (lastAntiCheatBroadcastTime.Any(a => a.Key.Item1 == cheater.Name && a.Key.Item2 == cheat)
&& DateTime.Now - lastAntiCheatBroadcastTime[(cheater.Name, cheat)] < antiCheatMessageCooldown)
{
return;
}
lastAntiCheatBroadcastTime[(cheater.Name, cheat)] = DateTime.Now;
ChatService.BroadcastAdmin($"~r~[ANTICHEAT]~s~ Verdacht auf ~y~{cheat}~s~ bei ~y~{cheater.Name}~s~ (~y~{cheater.Handle.Value}~s~)", AdminLevel.ADMIN);
}
internal static void NoTpAntiCheatForPlayer(string name)
{
lastAntiCheatBroadcastTime[(name, "Flyhack/Teleport")] = DateTime.Now.Subtract(antiCheatMessageCooldown).Add(TimeSpan.FromSeconds(5));
}
internal static void NoHealthAntiCheatForPlayer(string name)
{
lastAntiCheatBroadcastTime[(name, "Healkey (unexpected HP added)")] = DateTime.Now.Subtract(antiCheatMessageCooldown).Add(TimeSpan.FromSeconds(5));
}
}
}

View File

@@ -5,6 +5,7 @@
*/ */
using GTANetworkAPI; using GTANetworkAPI;
using Newtonsoft.Json; using Newtonsoft.Json;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models; using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Finance; using ReallifeGamemode.Server.Finance;
@@ -60,11 +61,14 @@ namespace ReallifeGamemode.Server.Bank
{ {
if (client.IsInVehicle || !client.IsLoggedIn() || client.GetUser().FactionId is null) return; if (client.IsInVehicle || !client.IsLoggedIn() || client.GetUser().FactionId is null) return;
if (client.GetUser().FactionLeader == true) User user = client.GetUser();
if (user.FactionLeader == true)
{ {
client.TriggerEvent("showFactionBankMenuLeader", client.GetUser().Faction.BankAccount.Balance.ToString()); client.TriggerEvent("showFactionBankMenuLeader", user.Faction.BankAccount.Balance.ToString());
return;
} }
client.TriggerEvent("showFactionBankMenu", client.GetUser().Faction.BankAccount.Balance.ToString()); client.TriggerEvent("showFactionBankMenu", user.Faction.BankAccount.Balance.ToString());
} }
private static void EntityExitFactionBankColShape(ColShape colShape, Player client) private static void EntityExitFactionBankColShape(ColShape colShape, Player client)

View File

@@ -232,7 +232,7 @@ namespace ReallifeGamemode.Server.Commands
#region Support #region Support
[Command("tog", "~m~Benutzung: ~s~/tog [Typ = ~g~IP~s~, ~g~deathlogs~s~, ~g~LC~s~]", GreedyArg = true)] [Command("tog", "~m~Benutzung: ~s~/tog [Typ = ~g~IP~s~, ~g~deathlogs~s~, ~g~LC~s~, ~g~Connect~s~]", GreedyArg = true)]
public void CmdTog(Player player, string typ, string option1 = null, string option2 = null) public void CmdTog(Player player, string typ, string option1 = null, string option2 = null)
{ {
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
@@ -281,6 +281,18 @@ namespace ReallifeGamemode.Server.Commands
player.SendNotification("~g~[Info]~w~ Leaderchat wird nun angezeigt."); player.SendNotification("~g~[Info]~w~ Leaderchat wird nun angezeigt.");
} }
break; break;
case "connect":
if (player.HasData("togconnect"))
{
player.ResetData("togconnect");
player.SendNotification("~g~[Info]~w~ Connect-Logs werden nun ausgeblendet.");
}
else
{
player.SetData("togconnect", true);
player.SendNotification("~g~[Info]~w~ Connect-Logs werden nun angezeigt.");
}
break;
} }
} }
@@ -390,7 +402,7 @@ namespace ReallifeGamemode.Server.Commands
player.Vehicle.Position = target.Position; player.Vehicle.Position = target.Position;
NAPI.Entity.SetEntityVelocity(player.Vehicle, new Vector3()); NAPI.Entity.SetEntityVelocity(player.Vehicle, new Vector3());
} }
else player.Position = target.Position; else player.SafeTeleport(target.Position);
ChatService.SendMessage(player, "~c~* Du hast dich teleportiert."); ChatService.SendMessage(player, "~c~* Du hast dich teleportiert.");
} }
@@ -416,7 +428,7 @@ namespace ReallifeGamemode.Server.Commands
target.Vehicle.Position = player.Position; target.Vehicle.Position = player.Position;
NAPI.Entity.SetEntityVelocity(target.Vehicle, new Vector3()); NAPI.Entity.SetEntityVelocity(target.Vehicle, new Vector3());
} }
else target.Position = player.Position; else target.SafeTeleport(player.Position);
ChatService.SendMessage(target, "~c~* Du wurdest teleportiert."); ChatService.SendMessage(target, "~c~* Du wurdest teleportiert.");
} }
@@ -468,16 +480,18 @@ namespace ReallifeGamemode.Server.Commands
if (target.GetData<bool>("duty") == true) if (target.GetData<bool>("duty") == true)
{ {
target.SetData<bool>("duty", false); target.SetData<bool>("duty", false);
Medic.UpdateDutyMedics(-1); Medic.UpdateDutyMedics();
} }
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~" + target.Name + " wurde von " + player.GetUser().AdminLevel.GetName() + " " + adminPlayername + " gekickt: " + reason, AdminLevel.SUPPORTER);
} }
[Command("clearchat", "~m~Benutzung: ~s~/clearchat")] [Command("clearchat", "~m~Benutzung: ~s~/clearchat")]
@@ -542,6 +556,9 @@ namespace ReallifeGamemode.Server.Commands
return; return;
} }
GlobalHelper.CountdownUntil = DateTime.Now + TimeSpan.FromSeconds(timer);
GlobalHelper.CountdownText = text;
NAPI.ClientEvent.TriggerClientEventForAll("countdown", timer, text); NAPI.ClientEvent.TriggerClientEventForAll("countdown", timer, text);
} }
@@ -609,7 +626,7 @@ namespace ReallifeGamemode.Server.Commands
} }
if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = player.GetData<Vector3>("mark"); if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = player.GetData<Vector3>("mark");
else player.Position = player.GetData<Vector3>("mark"); else player.SafeTeleport(player.GetData<Vector3>("mark"));
} }
[Command("flip", "")] [Command("flip", "")]
@@ -646,7 +663,7 @@ namespace ReallifeGamemode.Server.Commands
} }
else else
{ {
player.Position = new Vector3(player.Position.X, player.Position.Y, player.Position.Z + value); player.SafeTeleport(new Vector3(player.Position.X, player.Position.Y, player.Position.Z + value));
} }
} }
@@ -665,7 +682,7 @@ namespace ReallifeGamemode.Server.Commands
} }
else else
{ {
player.Position = new Vector3(player.Position.X, player.Position.Y, player.Position.Z - value); player.SafeTeleport(new Vector3(player.Position.X, player.Position.Y, player.Position.Z - value));
} }
} }
@@ -684,25 +701,25 @@ namespace ReallifeGamemode.Server.Commands
{ {
Vector3 playerPosition = new Vector3(player.Position.X + value, player.Position.Y, player.Position.Z); Vector3 playerPosition = new Vector3(player.Position.X + value, player.Position.Y, player.Position.Z);
if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition; if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition;
else player.Position = playerPosition; else player.SafeTeleport(playerPosition);
} }
else if (playerHeading < 315 && playerHeading >= 225) else if (playerHeading < 315 && playerHeading >= 225)
{ {
Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y - value, player.Position.Z); Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y - value, player.Position.Z);
if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition; if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition;
else player.Position = playerPosition; else player.SafeTeleport(playerPosition);
} }
else if (playerHeading >= 135 && playerHeading < 225) else if (playerHeading >= 135 && playerHeading < 225)
{ {
Vector3 playerPosition = new Vector3(player.Position.X - value, player.Position.Y, player.Position.Z); Vector3 playerPosition = new Vector3(player.Position.X - value, player.Position.Y, player.Position.Z);
if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition; if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition;
else player.Position = playerPosition; else player.SafeTeleport(playerPosition);
} }
else if (playerHeading >= 45 && playerHeading < 135) else if (playerHeading >= 45 && playerHeading < 135)
{ {
Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y + value, player.Position.Z); Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y + value, player.Position.Z);
if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition; if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition;
else player.Position = playerPosition; else player.SafeTeleport(playerPosition);
} }
} }
@@ -721,25 +738,25 @@ namespace ReallifeGamemode.Server.Commands
{ {
Vector3 playerPosition = new Vector3(player.Position.X - value, player.Position.Y, player.Position.Z); Vector3 playerPosition = new Vector3(player.Position.X - value, player.Position.Y, player.Position.Z);
if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition; if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition;
else player.Position = playerPosition; else player.SafeTeleport(playerPosition);
} }
else if (playerHeading < 315 && playerHeading >= 225) else if (playerHeading < 315 && playerHeading >= 225)
{ {
Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y + value, player.Position.Z); Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y + value, player.Position.Z);
if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition; if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition;
else player.Position = playerPosition; else player.SafeTeleport(playerPosition);
} }
else if (playerHeading >= 135 && playerHeading < 225) else if (playerHeading >= 135 && playerHeading < 225)
{ {
Vector3 playerPosition = new Vector3(player.Position.X + value, player.Position.Y, player.Position.Z); Vector3 playerPosition = new Vector3(player.Position.X + value, player.Position.Y, player.Position.Z);
if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition; if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition;
else player.Position = playerPosition; else player.SafeTeleport(playerPosition);
} }
else if (playerHeading >= 45 && playerHeading < 135) else if (playerHeading >= 45 && playerHeading < 135)
{ {
Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y - value, player.Position.Z); Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y - value, player.Position.Z);
if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition; if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = playerPosition;
else player.Position = playerPosition; else player.SafeTeleport(playerPosition);
} }
} }
@@ -782,17 +799,19 @@ namespace ReallifeGamemode.Server.Commands
if (target.GetData<bool>("duty") == true) if (target.GetData<bool>("duty") == true)
{ {
target.SetData<bool>("duty", false); target.SetData<bool>("duty", false);
Medic.UpdateDutyMedics(-1); Medic.UpdateDutyMedics();
} }
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~" + target.Name + " 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)]
@@ -850,7 +869,7 @@ namespace ReallifeGamemode.Server.Commands
} }
[Command("ban", "~m~Benutzung: ~s~/ban [User] [Grund] [Zeit in Minuten(0 für Permanent)]", GreedyArg = true)] [Command("ban", "~m~Benutzung: ~s~/ban [User] [Grund] [Zeit in Minuten(0 für Permanent)]", GreedyArg = true)]
public void CmdAdminBan(Player admin, string user, string reason, int mins = 0) public void CmdAdminBan(Player admin, string user, string reason, string strmins = "0")
{ {
if (!admin.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) if (!admin.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{ {
@@ -858,6 +877,12 @@ namespace ReallifeGamemode.Server.Commands
return; return;
} }
if (!int.TryParse(strmins, out int mins) && mins < 0)
{
ChatService.ErrorMessage(admin, "Ungültige Zeitangabe");
return;
}
Player target = PlayerService.GetPlayerByNameOrId(user); Player target = PlayerService.GetPlayerByNameOrId(user);
if (target == null || !target.IsLoggedIn()) if (target == null || !target.IsLoggedIn())
@@ -869,12 +894,25 @@ namespace ReallifeGamemode.Server.Commands
if (target.GetData<bool>("duty") == true) if (target.GetData<bool>("duty") == true)
{ {
target.SetData<bool>("duty", false); target.SetData<bool>("duty", false);
Medic.UpdateDutyMedics(-1); Medic.UpdateDutyMedics();
} }
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] ")]
@@ -953,7 +991,7 @@ namespace ReallifeGamemode.Server.Commands
player.Vehicle.Position = new Vector3(p.X, p.Y, p.Z); player.Vehicle.Position = new Vector3(p.X, p.Y, p.Z);
NAPI.Entity.SetEntityVelocity(player.Vehicle, new Vector3()); NAPI.Entity.SetEntityVelocity(player.Vehicle, new Vector3());
} }
else player.Position = new Vector3(p.X, p.Y, p.Z); else player.SafeTeleport(new Vector3(p.X, p.Y, p.Z));
} }
} }
@@ -1068,7 +1106,7 @@ namespace ReallifeGamemode.Server.Commands
return; return;
} }
if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = new Vector3(x, y, z); if (player.IsInVehicle && player.VehicleSeat == 0) player.Vehicle.Position = new Vector3(x, y, z);
else player.Position = new Vector3(x, y, z); else player.SafeTeleport(new Vector3(x, y, z));
} }
[Command("slap", "~m~Benutzung: ~s~/slap [Spieler] (Höhe)")] [Command("slap", "~m~Benutzung: ~s~/slap [Spieler] (Höhe)")]
@@ -1089,7 +1127,7 @@ namespace ReallifeGamemode.Server.Commands
Vector3 oldPos = target.Position; Vector3 oldPos = target.Position;
target.Position = new Vector3(oldPos.X, oldPos.Y, oldPos.Z + wert); target.SafeTeleport(new Vector3(oldPos.X, oldPos.Y, oldPos.Z + wert));
ChatService.SendMessage(player, "Du hast " + target.Name + " geslappt. Höhe: " + wert + ""); ChatService.SendMessage(player, "Du hast " + target.Name + " geslappt. Höhe: " + wert + "");
} }
@@ -1128,7 +1166,7 @@ namespace ReallifeGamemode.Server.Commands
return; return;
} }
player.Position = v.Position.Add(new Vector3(0, 0, 2)); player.SafeTeleport(v.Position.Add(new Vector3(0, 0, 2)));
} }
[Command("ghv", "~m~Benutzung: ~s~/ghv [Fahrzeug ID]")] [Command("ghv", "~m~Benutzung: ~s~/ghv [Fahrzeug ID]")]
@@ -1148,7 +1186,7 @@ namespace ReallifeGamemode.Server.Commands
} }
v.Position = player.Position; v.Position = player.Position;
player.Position = player.Position.Add(new Vector3(0, 0, 2)); player.SafeTeleport(player.Position.Add(new Vector3(0, 0, 2)));
} }
[Command("factionlist", "~m~Benutzung: ~s~/factionlist")] [Command("factionlist", "~m~Benutzung: ~s~/factionlist")]
@@ -1301,7 +1339,7 @@ namespace ReallifeGamemode.Server.Commands
return; return;
} }
target.Health = hp; target.SafeSetHealth(hp);
ChatService.SendMessage(target, "~b~Deine HP wurden von " + player.Name + " auf " + hp + " gesetzt."); ChatService.SendMessage(target, "~b~Deine HP wurden von " + player.Name + " auf " + hp + " gesetzt.");
ChatService.SendMessage(player, "~b~Du hast die HP von " + target.Name + " auf " + hp + " gesetzt."); ChatService.SendMessage(player, "~b~Du hast die HP von " + target.Name + " auf " + hp + " gesetzt.");
} }
@@ -1420,8 +1458,8 @@ namespace ReallifeGamemode.Server.Commands
u.Dead = false; u.Dead = false;
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
NAPI.Player.SpawnPlayer(target, target.Position); target.SafeTeleport(target.Position, 0, true);
target.Health = 100; target.SafeSetHealth(100);
Medic.delReviveTask(target); Medic.delReviveTask(target);
} }
@@ -1442,7 +1480,7 @@ namespace ReallifeGamemode.Server.Commands
return; return;
} }
target.Armor = armor; target.SafeSetArmor(armor);
ChatService.SendMessage(target, "~b~Deine Rüstung wurde von " + player.Name + " auf " + armor + " gesetzt."); ChatService.SendMessage(target, "~b~Deine Rüstung wurde von " + player.Name + " auf " + armor + " gesetzt.");
ChatService.SendMessage(player, "~b~Du hast die Rüstung von " + target.Name + " auf " + armor + " gesetzt."); ChatService.SendMessage(player, "~b~Du hast die Rüstung von " + target.Name + " auf " + armor + " gesetzt.");
} }
@@ -1968,7 +2006,7 @@ namespace ReallifeGamemode.Server.Commands
foreach (var managedPlayer in peopleInRange) foreach (var managedPlayer in peopleInRange)
{ {
if (!managedPlayer.IsLoggedIn()) return; if (!managedPlayer.IsLoggedIn()) return;
managedPlayer.Armor = Armor; managedPlayer.SafeSetArmor(Armor);
ChatService.SendMessage(managedPlayer, "~b~Admin " + player.Name + " hat im Radius von " + radius + " die Rüstung auf " + Armor + " gesetzt."); ChatService.SendMessage(managedPlayer, "~b~Admin " + player.Name + " hat im Radius von " + radius + " die Rüstung auf " + Armor + " gesetzt.");
} }
ChatService.SendMessage(player, "~b~Die Rüstung von " + peopleInRange.Count + " Spielern wurde auf " + Armor + " gesetzt."); ChatService.SendMessage(player, "~b~Die Rüstung von " + peopleInRange.Count + " Spielern wurde auf " + Armor + " gesetzt.");
@@ -1987,7 +2025,7 @@ namespace ReallifeGamemode.Server.Commands
foreach (var managedPlayer in peopleInRange) foreach (var managedPlayer in peopleInRange)
{ {
if (!managedPlayer.IsLoggedIn()) return; if (!managedPlayer.IsLoggedIn()) return;
managedPlayer.Health = hp; managedPlayer.SafeSetHealth(hp);
ChatService.SendMessage(managedPlayer, "~b~Admin " + player.Name + " hat im Radius von " + radius + " die HP auf " + hp + " gesetzt."); ChatService.SendMessage(managedPlayer, "~b~Admin " + player.Name + " hat im Radius von " + radius + " die HP auf " + hp + " gesetzt.");
} }
ChatService.SendMessage(player, "~b~Das Leben von " + peopleInRange.Count + " Spielern wurde auf " + hp + " gesetzt."); ChatService.SendMessage(player, "~b~Das Leben von " + peopleInRange.Count + " Spielern wurde auf " + hp + " gesetzt.");
@@ -2161,7 +2199,7 @@ namespace ReallifeGamemode.Server.Commands
public void sendCPfunc(Player user, int x, int y, int z) public void sendCPfunc(Player user, int x, int y, int z)
{ {
Vector3 pos = new Vector3(x, y, z); Vector3 pos = new Vector3(x, y, z);
user.Position = pos; user.SafeTeleport(pos);
} }
[Command("sethandmoney", "~m~Benutzung: ~s~/sethandmoney [Name/ID] [Menge]")] [Command("sethandmoney", "~m~Benutzung: ~s~/sethandmoney [Name/ID] [Menge]")]
@@ -2391,8 +2429,8 @@ namespace ReallifeGamemode.Server.Commands
managedPlayer.SendNotification(toPlayerNotification); managedPlayer.SendNotification(toPlayerNotification);
ChatService.SendMessage(managedPlayer, toPlayerChat); ChatService.SendMessage(managedPlayer, toPlayerChat);
NAPI.Player.SpawnPlayer(managedPlayer, managedPlayer.Position); managedPlayer.SafeTeleport(managedPlayer.Position, 0, true);
managedPlayer.Health = 100; managedPlayer.SafeSetHealth(100);
Medic.delReviveTask(managedPlayer); Medic.delReviveTask(managedPlayer);
} }
@@ -2648,7 +2686,7 @@ namespace ReallifeGamemode.Server.Commands
Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), business, price); Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), business, price);
player.SendNotification("Shopfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true); player.SendNotification("Shopfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true);
Vector3 oldPos = player.Position; Vector3 oldPos = player.Position;
player.Position = new Vector3(oldPos.X, oldPos.Y, oldPos.Z + 2.5); player.SafeTeleport(new Vector3(oldPos.X, oldPos.Y, oldPos.Z + 2.5));
} }
else ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!"); else ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!");
break; break;

View File

@@ -6,6 +6,7 @@ using GTANetworkAPI;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models; using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Admin;
using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Factions.Medic; using ReallifeGamemode.Server.Factions.Medic;
using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Managers;
@@ -223,7 +224,7 @@ namespace ReallifeGamemode.Server.Commands
NAPI.Pools.GetAllPlayers().ForEach(p => NAPI.Pools.GetAllPlayers().ForEach(p =>
{ {
User pUser = p.GetUser(); User pUser = p.GetUser();
if ((pUser?.FactionLeader ?? false) || pUser.IsAdmin(AdminLevel.ADMIN)) if ((pUser?.FactionLeader ?? false) || (pUser.IsAdmin(AdminLevel.ADMIN) && !p.HasData("toglc")))
{ {
ChatService.SendMessage(p, broadcastMsg); ChatService.SendMessage(p, broadcastMsg);
} }
@@ -343,8 +344,8 @@ namespace ReallifeGamemode.Server.Commands
u.Dead = false; u.Dead = false;
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
NAPI.Player.SpawnPlayer(deadPlayer, deadPlayer.Position); deadPlayer.SafeTeleport(deadPlayer.Position, 0, true);
deadPlayer.Health = 50; deadPlayer.SafeSetHealth(50);
MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == deadPlayer.Name); MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == deadPlayer.Name);
Medic.RemoveTaskFromList(task); Medic.RemoveTaskFromList(task);
@@ -398,6 +399,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

@@ -190,7 +190,7 @@ namespace ReallifeGamemode.Server.DrivingSchool
veh.Position = sVeh.Position; veh.Position = sVeh.Position;
veh.Rotation = new Vector3(0, 0, sVeh.Heading); veh.Rotation = new Vector3(0, 0, sVeh.Heading);
user.Position = new Vector3(-814.39, -1336.76, 5.15); user.SafeTeleport(new Vector3(-814.39, -1336.76, 5.15));
} }
[RemoteEvent("drivingSchoolEvent")] [RemoteEvent("drivingSchoolEvent")]
@@ -304,7 +304,7 @@ namespace ReallifeGamemode.Server.DrivingSchool
veh.Position = sVeh.Position; veh.Position = sVeh.Position;
veh.Rotation = new Vector3(0, 0, sVeh.Heading); veh.Rotation = new Vector3(0, 0, sVeh.Heading);
user.Position = new Vector3(-814.39, -1336.76, 5.15); user.SafeTeleport(new Vector3(-814.39, -1336.76, 5.15));
} }
[RemoteEvent("bikeSchoolEvent")] [RemoteEvent("bikeSchoolEvent")]

View File

@@ -128,7 +128,7 @@ namespace ReallifeGamemode.Server.DrivingSchool
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
user.ResetData("ActiveSchool"); user.ResetData("ActiveSchool");
user.Position = new Vector3(-1083.96, -2476.96, 13.07); user.SafeTeleport(new Vector3(-1083.96, -2476.96, 13.07));
} }
[RemoteEvent("planeSchoolEvent")] [RemoteEvent("planeSchoolEvent")]

View File

@@ -26,7 +26,7 @@ namespace ReallifeGamemode.Server.Events
player.TriggerEvent("CLIENT:StopSound"); player.TriggerEvent("CLIENT:StopSound");
//player.SetSharedData("vehicleAdminSpeed2", 1.0); //player.SetSharedData("vehicleAdminSpeed2", 1.0);
player.SetData("isLoggedIn", false); player.SetData("isLoggedIn", false);
player.Position = new Vector3(-1883.736, -781.4911, -10); player.SafeTeleport(new Vector3(-1883.736, -781.4911, -10));
bool registered = false; bool registered = false;
@@ -80,11 +80,16 @@ namespace ReallifeGamemode.Server.Events
bool disableLightMode = currentTime > LightModeTimeFrom && currentTime < LightModeTimeTo; bool disableLightMode = currentTime > LightModeTimeFrom && currentTime < LightModeTimeTo;
player.TriggerEvent("SERVER:Login_ShowBrowser", registered, disableLightMode); player.TriggerEvent("SERVER:Login_ShowBrowser", registered, disableLightMode);
string msg = "~m~*** " + player.Name + " [" + player.SocialClubName + "] [ID: " + player.Handle.Value + "] (" + player.Address + ")"; string msg = "~m~*** " + player.Name + " [" + player.SocialClubName + "] [ID: " + player.Handle.Value + "]";
if (player.HasData("togip")) string ipMsg = " (" + player.Address + ")";
ChatService.BroadcastAdmin(msg, AdminLevel.SUPPORTER, getAddInfoMessage: admin =>
{ {
ChatService.SendMessage(player, msg); return admin.HasData("togip") ? ipMsg : string.Empty;
} },
shouldSendMessage: admin =>
{
return admin.HasData("togconnect");
});
} }
private bool IsPlayerBanned(Player player) private bool IsPlayerBanned(Player player)

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)
@@ -69,7 +70,10 @@ namespace ReallifeGamemode.Server.Events
{ {
Autowanted.Check_AutoWanted(killer, player); Autowanted.Check_AutoWanted(killer, player);
string message = "~y~[HINWEIS]: " + killer.Name + " hat " + player.Name + " getötet (" + Managers.WeaponManager.GetCauseOfDeathByHash(reason) + ")"; string message = "~y~[HINWEIS]: " + killer.Name + " hat " + player.Name + " getötet (" + Managers.WeaponManager.GetCauseOfDeathByHash(reason) + ")";
ChatService.BroadcastAdmin(message, AdminLevel.ADMIN); ChatService.BroadcastAdmin(message, AdminLevel.ADMIN, shouldSendMessage: admin =>
{
return admin.HasData("togdeath");
});
} }
} }
} }
@@ -92,11 +96,9 @@ namespace ReallifeGamemode.Server.Events
if (user.JailTime <= 0) if (user.JailTime <= 0)
{ {
player.SetData("isDead", true);
user.Dead = true; user.Dead = true;
if (!player.HasData("reviveSperre")) if (!player.HasData("reviveSperre") && player.GetData<bool>("isDead") == false && !player.HasData("inGangWar") && player.GetData<bool>("SAdminduty") == false)
{ {
//MEDIC AUFTRAG //MEDIC AUFTRAG
MedicTask reviveTask = new MedicTask() MedicTask reviveTask = new MedicTask()
@@ -115,6 +117,8 @@ namespace ReallifeGamemode.Server.Events
ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " ist soeben verstorben.", new List<int>() { 2 }); ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " ist soeben verstorben.", new List<int>() { 2 });
} }
player.SetData("isDead", true);
if (player.GetUser().IsAdmin(AdminLevel.ADMIN) == true) if (player.GetUser().IsAdmin(AdminLevel.ADMIN) == true)
{ {
player.TriggerEvent("startDeathTimer", true); player.TriggerEvent("startDeathTimer", true);
@@ -233,8 +237,11 @@ 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);
NAPI.Player.SpawnPlayer(player, new Vector3(-495.45, -336.33, 34.5), -98.36f); Player medicPlayer = PlayerService.GetPlayerByNameOrId(task.MedicName);
Medic.RemoveTaskFromList(task);
player.SafeTeleport(new Vector3(-495.45, -336.33, 34.5), 0, true);
} }
} }
} }

View File

@@ -134,18 +134,25 @@ 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)
{ {
player.SetData<bool>("duty", false); player.SetData<bool>("duty", false);
Medic.UpdateDutyMedics(-1); Medic.UpdateDutyMedics();
} }
} }
} }

View File

@@ -51,7 +51,7 @@ namespace ReallifeGamemode.Server.Events
client.WarpOutOfVehicle(); client.WarpOutOfVehicle();
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(vehicle); ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(vehicle);
ServerVehicleExtensions.Spawn(sVeh, vehicle); ServerVehicleExtensions.Spawn(sVeh, vehicle);
client.Position = sVeh.Position; client.SafeTeleport(sVeh.Position);
CheckPointHandle.DeleteCheckpoints(client); CheckPointHandle.DeleteCheckpoints(client);
} }
} }

View File

@@ -135,6 +135,7 @@ namespace ReallifeGamemode.Server.Events
Price = f.BuyPrice Price = f.BuyPrice
}); });
Paycheck paycheck = null; Paycheck paycheck = null;
if (Economy.Paychecks.ContainsKey(u.Id)) paycheck = Economy.Paychecks[u.Id]; if (Economy.Paychecks.ContainsKey(u.Id)) paycheck = Economy.Paychecks[u.Id];
@@ -169,6 +170,15 @@ namespace ReallifeGamemode.Server.Events
wage = u.Wage, wage = u.Wage,
}; };
var memberList = dbContext.Users.Where(f => f.FactionId == u.FactionId && u.FactionId != 0).OrderByDescending(f => f.FactionRank.Order).ThenBy(f => f.Name).Select(m => new
{
username = m.Name,
factionRank = m.FactionRank.Order,
factionRankName = m.FactionRank.RankName,
isLeader = m.FactionLeader,
isOnline = m.Player.IsLoggedIn(),
});
string faction = u.Faction?.Name ?? "Zivilist"; string faction = u.Faction?.Name ?? "Zivilist";
string factionleader = u.FactionLeader ? u.Faction.Name : null; string factionleader = u.FactionLeader ? u.Faction.Name : null;
string group = u.Group != null ? u.Group.Name : null; string group = u.Group != null ? u.Group.Name : null;
@@ -193,8 +203,7 @@ namespace ReallifeGamemode.Server.Events
{ {
pay_amount = player.GetData<int>("pay_amount"); pay_amount = player.GetData<int>("pay_amount");
} }
player.TriggerEvent("SERVER:InteractionMenu_OpenMenu", JsonConvert.SerializeObject(accountData), factionleader, JsonConvert.SerializeObject(memberList), JsonConvert.SerializeObject(jobData), faction, group, factionInvite, groupInvite, ticket_boolean, ticket_amount, pay_amount, house);
player.TriggerEvent("SERVER:InteractionMenu_OpenMenu", JsonConvert.SerializeObject(accountData), factionleader, JsonConvert.SerializeObject(jobData), faction, group, factionInvite, groupInvite, ticket_boolean, ticket_amount, pay_amount, house);
} }
[RemoteEvent("keyPress:E")] [RemoteEvent("keyPress:E")]
@@ -233,8 +242,7 @@ namespace ReallifeGamemode.Server.Events
if (nearestBehindVehiclePoint != null) if (nearestBehindVehiclePoint != null)
{ {
if (player.HasAttachment("ammobox")) return; if (player.HasAttachment("ammobox")) return;
using (var dbContext = new DatabaseContext()) using var dbContext = new DatabaseContext();
{
List<VehicleItem> vehicleItems = dbContext.VehicleItems.ToList().Where(f => f.GetVehicle().GetVehicle() == nearestBehindVehiclePoint.vehicle && InventoryManager.GetItemById(f.ItemId) is IWeaponDealItem).ToList(); List<VehicleItem> vehicleItems = dbContext.VehicleItems.ToList().Where(f => f.GetVehicle().GetVehicle() == nearestBehindVehiclePoint.vehicle && InventoryManager.GetItemById(f.ItemId) is IWeaponDealItem).ToList();
if (vehicleItems.Count == 0) if (vehicleItems.Count == 0)
{ {
@@ -255,7 +263,8 @@ namespace ReallifeGamemode.Server.Events
} }
nearestBehindVehiclePoint.vehicle.RemoveMarkerBehind(); nearestBehindVehiclePoint.vehicle.RemoveMarkerBehind();
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(vehicle);
sVeh.Spawn(vehicle);
return; return;
} }
foreach (var v in vehicleItems) foreach (var v in vehicleItems)
@@ -288,7 +297,6 @@ namespace ReallifeGamemode.Server.Events
return; return;
} }
} }
}
if (nearestDuty != null)// Duty Point if (nearestDuty != null)// Duty Point
{ {
var factionId = user.FactionId; var factionId = user.FactionId;
@@ -300,7 +308,7 @@ namespace ReallifeGamemode.Server.Events
player.TriggerEvent("toggleDutyMode", true); player.TriggerEvent("toggleDutyMode", true);
if (player.GetUser().FactionId == 2) //Fire Department if (player.GetUser().FactionId == 2) //Fire Department
{ {
Medic.UpdateDutyMedics(1); Medic.UpdateDutyMedics();
} }
switch (factionId) switch (factionId)
{ {
@@ -338,7 +346,7 @@ namespace ReallifeGamemode.Server.Events
user.SetData("duty", false); user.SetData("duty", false);
player.SendNotification("Du bist nun ~r~außer Dienst."); player.SendNotification("Du bist nun ~r~außer Dienst.");
player.TriggerEvent("toggleDutyMode", false); player.TriggerEvent("toggleDutyMode", false);
Medic.UpdateDutyMedics(-1); Medic.UpdateDutyMedics();
UpdateCharacterCloth.LoadCharacterDefaults(player); UpdateCharacterCloth.LoadCharacterDefaults(player);
} }
user.SetBlipAndNametagColor(); user.SetBlipAndNametagColor();
@@ -352,17 +360,6 @@ namespace ReallifeGamemode.Server.Events
List<string> specials = new List<string>(); List<string> specials = new List<string>();
List<string> armor = new List<string>(); List<string> armor = new List<string>();
List<string> timer = new List<string>(); List<string> timer = new List<string>();
int pistol_Amount = 0;
int pistol50_Amount = 0;
int Pistol_mk2_Amount = 0;
int Combatpistol_Amount = 0;
int SMG_Amount = 0;
int Carbinerifle_Amount = 0;
int Compactrifle_Amount = 0;
int sniperrifle_Amount = 0;
int Pumpshotgun_Amount = 0;
int Schutzweste_Amount = 0;
int Stungun_Amount = 0;
string dealTime = "Starten"; string dealTime = "Starten";
primarys.Add("Keine"); primarys.Add("Keine");
secondarys.Add("Keine"); secondarys.Add("Keine");
@@ -445,56 +442,31 @@ namespace ReallifeGamemode.Server.Events
break; break;
} }
} }
foreach (var weapon in weapons)
List<string> allWeapons = context.FactionWeapons.Select(w => w.WeaponModel).Distinct().ToList();
List<WeaponRackWeaponAmountInfo> amountInfos = new List<WeaponRackWeaponAmountInfo>();
foreach (var weapon in allWeapons)
{ {
if (weapon.WeaponModel == "Pistol") int amount = 0;
var tempFactionWeapon = weapons.Where(f => f.WeaponModel == weapon).FirstOrDefault();
if(tempFactionWeapon != null)
{ {
pistol_Amount = weapon.Ammount; amount = tempFactionWeapon.Ammount;
}
else if (weapon.WeaponModel == "Pistol50")
{
pistol50_Amount = weapon.Ammount;
}
else if (weapon.WeaponModel == "Pistol_MK2")
{
Pistol_mk2_Amount = weapon.Ammount;
}
else if (weapon.WeaponModel == "Combatpistol")
{
Combatpistol_Amount = weapon.Ammount;
}
else if (weapon.WeaponModel == "SMG")
{
SMG_Amount = weapon.Ammount;
}
else if (weapon.WeaponModel == "CarbineRifle")
{
Carbinerifle_Amount = weapon.Ammount;
}
else if (weapon.WeaponModel == "CompactRifle")
{
Compactrifle_Amount = weapon.Ammount;
}
else if (weapon.WeaponModel == "sniperrifle")
{
sniperrifle_Amount = weapon.Ammount;
}
else if (weapon.WeaponModel == "PumpShotgun")
{
Pumpshotgun_Amount = weapon.Ammount;
}
else if (weapon.WeaponModel == "Schutzweste")
{
Schutzweste_Amount = weapon.Ammount;
}
else if (weapon.WeaponModel == "Stungun")
{
Stungun_Amount = weapon.Ammount;
}
}
} }
player.TriggerEvent("showWeaponMenu", primarys.ToArray(), secondarys.ToArray(), melees.ToArray(), specials.ToArray(), armor.ToArray(), JsonConvert.SerializeObject(timer.ToArray()), pistol_Amount.ToString(), pistol50_Amount.ToString(), Pistol_mk2_Amount.ToString(), Combatpistol_Amount.ToString(), SMG_Amount.ToString(), Carbinerifle_Amount.ToString(), Compactrifle_Amount.ToString(), sniperrifle_Amount.ToString(), Pumpshotgun_Amount.ToString(), Schutzweste_Amount.ToString(), Stungun_Amount.ToString()); ; amountInfos.Add(new WeaponRackWeaponAmountInfo()
{
WeaponModel = weapon,
Amount = amount
});
}
player.TriggerEvent("showWeaponMenu", primarys.ToArray(), secondarys.ToArray(), melees.ToArray(), specials.ToArray(), armor.ToArray(), JsonConvert.SerializeObject(timer.ToArray()), JsonConvert.SerializeObject(amountInfos));
}
} }
if (nearestJailReleasePoint != null) if (nearestJailReleasePoint != null)
{ {
@@ -553,59 +525,33 @@ namespace ReallifeGamemode.Server.Events
{ {
if (player.Vehicle != null) return; if (player.Vehicle != null) return;
Job.JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1); Job.JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1);
JobManager jobb = new JobManager(); JobManager jobManager = new JobManager();
if (nearestJobPoint.jobId != 3 && nearestJobPoint.jobId == player.GetUser().JobId) if (nearestJobPoint.jobId == player.GetUser().JobId)
{ {
if (job.GetUsersInJob().Contains(player)) if (job.GetUsersInJob().Contains(player))
{ {
jobb.StopJob(player); jobManager.StopJob(player);
return; return;
} }
if (!job.GetUsersInJob().Contains(player)) if (!job.GetUsersInJob().Contains(player))
{ {
jobb.StartJobEvent(player); if (player.GetUser().JobId == 3)
player.TriggerEvent("renderTextOnScreen", "Steige nun in eines der Fahrzeuge und starte den Motor mit der Taste 'N'.");
return;
}
}
else if (nearestJobPoint.jobId == 3 && player.GetUser().JobId == 3)
{ {
if (nearestJobPoint.Skill < 300 && player.GetUser().PilotSkill >= 0) if (nearestJobPoint.Skill > user.PilotSkill)
{
if (job.GetUsersInJob().Contains(player))
{
player.SetData("PilotenBase", 1);
jobb.StopJob(player);
return;
}
if (!job.GetUsersInJob().Contains(player))
{
player.SetData("PilotenBase", 1);
jobb.StartJobEvent(player);
player.TriggerEvent("renderTextOnScreen", "Steige nun in eines der Flugzeuge und starte den Motor mit der Taste 'N'.");
return;
}
}
if (nearestJobPoint.Skill >= 300 && player.GetUser().PilotSkill >= 300)
{
if (job.GetUsersInJob().Contains(player))
{
player.SetData("PilotenBase", 2);
jobb.StopJob(player);
return;
}
if (!job.GetUsersInJob().Contains(player))
{
player.SetData("PilotenBase", 2);
jobb.StartJobEvent(player);
player.TriggerEvent("renderTextOnScreen", "Steige nun in eines der Flugzeuge und starte den Motor mit der Taste 'N'.");
return;
}
}
{ {
player.SendChatMessage("~y~[JOB] ~r~Dein Skilllevel ist noch zu niedrig."); player.SendChatMessage("~y~[JOB] ~r~Dein Skilllevel ist noch zu niedrig.");
return; return;
} }
jobManager.StartJobEvent(player);
job.StartJob(player);
JobManager.GetJob<PilotJob>().StartPilotRoute(player, nearestJobPoint.Skill);
}
else
{
jobManager.StartJobEvent(player);
}
return;
}
} }
else else
{ {
@@ -850,88 +796,6 @@ namespace ReallifeGamemode.Server.Events
player.SendNotification("~y~[JOB] ~w~Du musst den Job vorher starten!"); player.SendNotification("~y~[JOB] ~w~Du musst den Job vorher starten!");
return; return;
} }
else
{
/*if(player.IsAdminDuty())
{
player.SendChatMessage("");
}*/
if (jV.JobId == 3 && player.GetUser().JobId == 3 && jV.GetJob().GetUsersInJob().Contains(player))
{
Job.PilotJob c = new Job.PilotJob();
if ((VehicleHash)jV.Model == VehicleHash.Cuban800 && !state)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartPilotRoute(player, "RouteStart");
}
}
if ((VehicleHash)jV.Model == VehicleHash.Velum && !state || (VehicleHash)jV.Model == VehicleHash.Velum2 && !state)
{
if (player.GetUser().PilotSkill >= 300)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartPilotRoute(player, "RouteStart");
}
}
else
{
player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(2) ");
return;
}
}
}
if (jV.JobId == 4 && player.GetUser().JobId == 4 && jV.GetJob().GetUsersInJob().Contains(player))
{
Job.BusDriverJob c = new Job.BusDriverJob();
if ((VehicleHash)jV.Model == VehicleHash.Bus && !state)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartBusRoute(player, "RouteStart");
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45);
}
}
if ((VehicleHash)jV.Model == VehicleHash.Coach && !state)
{
if (player.GetUser().BusSkill >= 300)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartBusRoute(player, "RouteStart");
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45);
}
}
else
{
player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(2) ");
return;
}
}
if ((VehicleHash)jV.Model == VehicleHash.Tourbus && !state)
{
if (player.GetUser().BusSkill >= 800)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartBusRoute(player, "RouteStart");
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45);
}
}
else
{
player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(3) ");
return;
}
}
}
}
} }
} }
else if (sV is UserVehicle uV) else if (sV is UserVehicle uV)

View File

@@ -10,7 +10,7 @@ using ReallifeGamemode.Server.Types;
using ReallifeGamemode.Server.Util; using ReallifeGamemode.Server.Util;
using ReallifeGamemode.Server.Wanted; using ReallifeGamemode.Server.Wanted;
using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Entities;
using System;
/** /**
* @overview Life of German Reallife - Event Login (Login.cs) * @overview Life of German Reallife - Event Login (Login.cs)
@@ -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)
{ {
@@ -88,15 +92,30 @@ namespace ReallifeGamemode.Server.Events
ChatService.BroadcastGroup(msg, user.Group); ChatService.BroadcastGroup(msg, user.Group);
} }
string message = string.Empty;
if (GlobalHelper.CustomJoinMessages.ContainsKey(player.SocialClubName)) if (GlobalHelper.CustomJoinMessages.ContainsKey(player.SocialClubName))
{ {
ChatService.BroadcastAdmin("!{#FFFF00}*** " + GlobalHelper.CustomJoinMessages[player.SocialClubName] + " [ID: " + player.Handle.Value + "] (" + user.AdminLevel.GetName() + ")", AdminLevel.MAPPING); message = "!{#FFFF00}*** " + GlobalHelper.CustomJoinMessages[player.SocialClubName] + " [ID: " + player.Handle.Value + "] (" + user.AdminLevel.GetName() + ")";
} }
else if (user.IsAdmin(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); message = "!{#FFFF00}*** " + user.Name + " [ID: " + player.Handle.Value + "]" + " hat sich als " + user.AdminLevel.GetName() + " eingeloggt!";
} }
string addInfoStr = " (IP: " + player.Address + ")";
if(!string.IsNullOrEmpty(message))
{
ChatService.BroadcastAdmin(message, AdminLevel.MAPPING, admin =>
{
if(admin.HasData("togip"))
{
return addInfoStr;
}
return "";
});
}
var userItems = dbContext.UserItems.Where(u => u.UserId == user.Id).ToList(); var userItems = dbContext.UserItems.Where(u => u.UserId == user.Id).ToList();
player.SetData("items", userItems); player.SetData("items", userItems);
@@ -109,7 +128,7 @@ namespace ReallifeGamemode.Server.Events
currentPlayerCreatorDimension++; currentPlayerCreatorDimension++;
NAPI.Data.SetWorldData("playerCreatorDimension", currentPlayerCreatorDimension); NAPI.Data.SetWorldData("playerCreatorDimension", currentPlayerCreatorDimension);
player.Dimension = NAPI.Data.GetWorldData("playerCreatorDimension"); player.Dimension = NAPI.Data.GetWorldData("playerCreatorDimension");
player.Position = new Vector3(402.8664, -996.4108, -99.00027); player.SafeTeleport(new Vector3(402.8664, -996.4108, -99.00027));
player.Rotation = new Vector3(0, 0, 180); player.Rotation = new Vector3(0, 0, 180);
player.TriggerEvent("toggleCreator"); player.TriggerEvent("toggleCreator");
} }
@@ -119,7 +138,7 @@ namespace ReallifeGamemode.Server.Events
UpdateCharacterCloth.LoadCharacterDefaults(player); UpdateCharacterCloth.LoadCharacterDefaults(player);
if (user.JailTime <= 0) if (user.JailTime <= 0)
{ {
NAPI.Player.SpawnPlayer(player, new Vector3(user.PositionX, user.PositionY, user.PositionZ), 0); player.SafeTeleport(new Vector3(user.PositionX, user.PositionY, user.PositionZ), 0, true);
} }
else else
{ {
@@ -128,25 +147,30 @@ 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.SafeSetHealth(0);
player.SetData("isDead", true); player.SetData("isDead", true);
} }
else else
{ {
player.SetData("isDead", false); player.SetData("isDead", false);
} }
} }, delayTime: 1000);
if(GlobalHelper.CountdownUntil > DateTime.Now)
{
player.TriggerEvent("countdown", (GlobalHelper.CountdownUntil - DateTime.Now).TotalSeconds, GlobalHelper.CountdownText);
} }
} }
} }

View File

@@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using GTANetworkAPI; using GTANetworkAPI;
using ReallifeGamemode.Server.Extensions;
namespace ReallifeGamemode.Server.Events namespace ReallifeGamemode.Server.Events
{ {
@@ -10,7 +11,7 @@ namespace ReallifeGamemode.Server.Events
[RemoteEvent("CLIENT:SET_InFrontOfPos")] [RemoteEvent("CLIENT:SET_InFrontOfPos")]
public void SetFrontOfPos(Player player, Vector3 pos) public void SetFrontOfPos(Player player, Vector3 pos)
{ {
player.Position = pos; player.SafeTeleport(pos);
} }
} }
} }

View File

@@ -3,6 +3,9 @@ using GTANetworkAPI;
using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Entities;
using Newtonsoft.Json; using Newtonsoft.Json;
using ReallifeGamemode.Database.Models; using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Util;
using System;
/** /**
* @overview Life of German Reallife - Event Register (Register.cs) * @overview Life of German Reallife - Event Register (Register.cs)
@@ -63,8 +66,13 @@ namespace ReallifeGamemode.Server.Events
NAPI.Data.SetWorldData("playerCreatorDimension", currentPlayerCreatorDimension); NAPI.Data.SetWorldData("playerCreatorDimension", currentPlayerCreatorDimension);
player.Dimension = NAPI.Data.GetWorldData("playerCreatorDimension"); player.Dimension = NAPI.Data.GetWorldData("playerCreatorDimension");
player.TriggerEvent("toggleCreator"); player.TriggerEvent("toggleCreator");
player.Position = new Vector3(402.8664, -996.4108, -99.00027); player.SafeTeleport(new Vector3(402.8664, -996.4108, -99.00027));
//player.Position = new Vector3(user.PositionX, user.PositionY, user.PositionZ); //player.Position = new Vector3(user.PositionX, user.PositionY, user.PositionZ);
if (GlobalHelper.CountdownUntil > DateTime.Now)
{
player.TriggerEvent("countdown", (GlobalHelper.CountdownUntil - DateTime.Now).TotalSeconds, GlobalHelper.CountdownText);
}
} }
else else
{ {

View File

@@ -1,4 +1,5 @@
using GTANetworkAPI; using GTANetworkAPI;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Managers;
namespace ReallifeGamemode.Server.Events namespace ReallifeGamemode.Server.Events
@@ -11,7 +12,7 @@ namespace ReallifeGamemode.Server.Events
ElevatorPoint elevator = PositionManager.ElevatorPoints.Find(e => e.Stage == stage); ElevatorPoint elevator = PositionManager.ElevatorPoints.Find(e => e.Stage == stage);
if (elevator != null) if (elevator != null)
{ {
client.Position = elevator.Position; client.SafeTeleport(elevator.Position);
} }
} }
} }

View File

@@ -43,7 +43,7 @@ namespace ReallifeGamemode.Server.Events
} }
if (slot == 5) if (slot == 5)
{ {
client.Armor = 100; client.SafeSetArmor(100);
} }
} }
@@ -81,11 +81,10 @@ namespace ReallifeGamemode.Server.Events
melee = NAPI.Util.GetHashKey($"weapon_{meleeModel}"); melee = NAPI.Util.GetHashKey($"weapon_{meleeModel}");
} }
client.GiveWeapon((WeaponHash)primary, 300); client.GiveWeapon((WeaponHash)primary, 500);
client.GiveWeapon((WeaponHash)secondary, 100); client.GiveWeapon((WeaponHash)secondary, 250);
client.GiveWeapon((WeaponHash)melee, 1); client.GiveWeapon((WeaponHash)melee, 1);
if (!uint.TryParse(specialModel, out uint special)) if (!uint.TryParse(specialModel, out uint special))
{ {
if (specialModel.Contains("mk2") && !specialModel.Contains("_mk2")) specialModel = specialModel.Replace("mk2", "_mk2"); if (specialModel.Contains("mk2") && !specialModel.Contains("_mk2")) specialModel = specialModel.Replace("mk2", "_mk2");
@@ -95,7 +94,7 @@ namespace ReallifeGamemode.Server.Events
if (armor == "Schutzweste") if (armor == "Schutzweste")
{ {
client.Armor = 100; client.SafeSetArmor(100);
} }
using (var context = new DatabaseContext()) using (var context = new DatabaseContext())

View File

@@ -77,88 +77,6 @@ namespace ReallifeGamemode.Server.Events
player.SendNotification("~y~[JOB] ~w~Du musst den Job vorher starten!"); player.SendNotification("~y~[JOB] ~w~Du musst den Job vorher starten!");
return; return;
} }
else
{
/*if(player.IsAdminDuty())
{
player.SendChatMessage("");
}*/
if (jV.JobId == 3 && player.GetUser().JobId == 3 && jV.GetJob().GetUsersInJob().Contains(player))
{
Job.PilotJob c = new Job.PilotJob();
if ((VehicleHash)jV.Model == VehicleHash.Cuban800 && !state)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartPilotRoute(player, "RouteStart");
}
}
if ((VehicleHash)jV.Model == VehicleHash.Velum && !state || (VehicleHash)jV.Model == VehicleHash.Velum2 && !state)
{
if (player.GetUser().PilotSkill >= 300)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartPilotRoute(player, "RouteStart");
}
}
else
{
player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(2) ");
return;
}
}
}
if (jV.JobId == 4 && player.GetUser().JobId == 4 && jV.GetJob().GetUsersInJob().Contains(player))
{
Job.BusDriverJob c = new Job.BusDriverJob();
if ((VehicleHash)jV.Model == VehicleHash.Bus && !state)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartBusRoute(player, "RouteStart");
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45);
}
}
if ((VehicleHash)jV.Model == VehicleHash.Coach && !state)
{
if (player.GetUser().BusSkill >= 300)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartBusRoute(player, "RouteStart");
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45);
}
}
else
{
player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(2) ");
return;
}
}
if ((VehicleHash)jV.Model == VehicleHash.Tourbus && !state)
{
if (player.GetUser().BusSkill >= 800)
{
if (!player.HasData("HatRoute") || player.GetData<bool>("HatRoute") == false)
{
player.SetData("HatRoute", true);
c.StartBusRoute(player, "RouteStart");
player.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/StartJob", "wav", 45);
}
}
else
{
player.SendNotification("~y~[JOB] ~r~Du besitzt nicht das nötige Skilllevel(3) ");
return;
}
}
}
}
} }
} }
else if (sV is UserVehicle uV) else if (sV is UserVehicle uV)
@@ -170,7 +88,6 @@ namespace ReallifeGamemode.Server.Events
} }
} }
VehicleStreaming.SetEngineState(v, !state); VehicleStreaming.SetEngineState(v, !state);
} }
} }
@@ -227,7 +144,7 @@ namespace ReallifeGamemode.Server.Events
{ {
ServerVehicle carlocked = v.GetServerVehicle(dbContext); ServerVehicle carlocked = v.GetServerVehicle(dbContext);
if(state == true) if (state == true)
{ {
carlocked.Locked = true; carlocked.Locked = true;
dbContext.SaveChanges(); dbContext.SaveChanges();

View File

@@ -6,6 +6,7 @@ using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json; using Newtonsoft.Json;
using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models; using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Admin;
using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Types; using ReallifeGamemode.Server.Types;
@@ -59,6 +60,33 @@ namespace ReallifeGamemode.Server.Extensions
} }
} }
public static void SafeTeleport(this Player player, Vector3 position, float heading = 0, bool spawn = false)
{
AntiCheat.NoTpAntiCheatForPlayer(player.Name);
if (spawn)
{
AntiCheat.NoHealthAntiCheatForPlayer(player.Name);
NAPI.Player.SpawnPlayer(player, position, heading);
}
else
{
player.Position = position;
player.Heading = heading;
}
}
public static void SafeSetHealth(this Player player, int health)
{
AntiCheat.NoHealthAntiCheatForPlayer(player.Name);
player.Health = health;
}
public static void SafeSetArmor(this Player player, int armor)
{
AntiCheat.NoHealthAntiCheatForPlayer(player.Name);
player.Armor = armor;
}
public static void SetJailTime(this User user, bool killed) public static void SetJailTime(this User user, bool killed)
{ {
if (user == null) if (user == null)
@@ -179,7 +207,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

@@ -11,5 +11,10 @@
{ {
return "$" + string.Format(Main.SERVER_CULTURE, "{0:C0}", money).Replace("€", "").Trim(); return "$" + string.Format(Main.SERVER_CULTURE, "{0:C0}", money).Replace("€", "").Trim();
} }
public static string ToMoneyString(this double money)
{
return ((int)money).ToMoneyString();
}
} }
} }

View File

@@ -6,9 +6,27 @@ namespace ReallifeGamemode.Server.Extensions
{ {
internal static class ListExtensions internal static class ListExtensions
{ {
public static bool Contains(this List<Player> list, Player client) public static bool VectorEquals(this List<Vector3> vector3s, List<Vector3> compareToList)
{ {
return list.Any(l => l.Handle.Value == client.Handle.Value); if (compareToList is null || vector3s is null)
return false;
if (vector3s.Count != compareToList.Count)
return false;
for (int i = 0; i < vector3s.Count; i++)
{
Vector3 vector = vector3s[i];
Vector3 compareTo = compareToList[i];
if (vector.X != compareTo.X)
return false;
if (vector.Y != compareTo.Y)
return false;
if (vector.Z != compareTo.Z)
return false;
}
return true;
} }
} }
} }

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
{ {
@@ -146,7 +146,7 @@ namespace ReallifeGamemode.Server.Factions.Medic
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
activeDecision.dTarget.Health = 100; activeDecision.dTarget.SafeSetHealth(100);
activeDecision.dTarget.SendNotification($"Du wurdest von ~g~{activeDecision.dMedic.Name} ~s~ für ~g~{activeDecision.dPrice.ToMoneyString()} geheilt", false); activeDecision.dTarget.SendNotification($"Du wurdest von ~g~{activeDecision.dMedic.Name} ~s~ für ~g~{activeDecision.dPrice.ToMoneyString()} geheilt", false);
activeDecision.dMedic.SendNotification($"Du hast ~g~{activeDecision.dTarget.Name} ~s~ für {activeDecision.dPrice.ToMoneyString()} geheilt", false); activeDecision.dMedic.SendNotification($"Du hast ~g~{activeDecision.dTarget.Name} ~s~ für {activeDecision.dPrice.ToMoneyString()} geheilt", false);
delHealTask(activeDecision.dTarget); delHealTask(activeDecision.dTarget);
@@ -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)
{ {
@@ -192,23 +209,38 @@ namespace ReallifeGamemode.Server.Factions.Medic
} }
[RemoteEvent("updateMedicTask")] [RemoteEvent("updateMedicTask")]
public void UpdateMedicTasks(Player player, int type, string victim) public void UpdateMedicTasks(Player player, int type, string victim, bool isRemoved)
{ {
Player target = PlayerService.GetPlayerByNameOrId(victim); Player target = PlayerService.GetPlayerByNameOrId(victim);
switch (type) switch (type)
{ {
case 0: case 0:
var reviveTask = ReviveTasks.FirstOrDefault(t => t.Victim == victim); var reviveTask = ReviveTasks.FirstOrDefault(t => t.Victim == victim);
if (isRemoved)
{
reviveTask.MedicName = "none";
}
else
{
reviveTask.MedicName = player.Name; reviveTask.MedicName = player.Name;
}
ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat den Reviveauftrag von " + victim + " angenommen.", new List<int>() { 2 }); ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat den Reviveauftrag von " + victim + " angenommen.", new List<int>() { 2 });
target.SendNotification("~w~Sanitäter~g~ " + player.Name + "~w~ eilt zur Rettung."); target.SendNotification("~w~Sanitäter~g~ " + player.Name + "~w~ eilt zur Rettung.");
break; break;
case 1: case 1:
var healTask = ReviveTasks.FirstOrDefault(t => t.Victim == victim); var healTask = HealTasks.FirstOrDefault(t => t.Victim == victim);
if (isRemoved)
{
healTask.MedicName = "none";
}
else
{
healTask.MedicName = player.Name; healTask.MedicName = player.Name;
ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat den Healauftrag von " + victim + " angenommen.", new List<int>() { 2 }); ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat den Healauftrag von " + victim + " angenommen.", new List<int>() { 2 });
target.SendNotification("~w~Sanitäter~g~ " + player.Name + "~w~ hat deinen Auftrag angenommen."); target.SendNotification("~w~Sanitäter~g~ " + player.Name + "~w~ hat deinen Auftrag angenommen.");
}
break; break;
case 2: case 2:
@@ -221,8 +253,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,60 +271,27 @@ 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")] public static void delReviveTask(Player target)
public static void delReviveTask(Player player)
{ {
MedicTask task = ReviveTasks.FirstOrDefault(t => t.Victim == player.Name); MedicTask task = ReviveTasks.FirstOrDefault(t => t.Victim == target.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("GetDutyMedics")]
public static void UpdateDutyMedics()
{
[RemoteEvent("CutMedicEarnings")] dutyMedics = NAPI.Pools.GetAllPlayers().Where(c => c.GetData<bool>("duty") == true && c.GetUser().FactionId == 2).ToList().Count;
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)
{
dutyMedics = dutyMedics + modifier;
NAPI.ClientEvent.TriggerClientEventForAll("updateDutyMedics", dutyMedics); NAPI.ClientEvent.TriggerClientEventForAll("updateDutyMedics", dutyMedics);
} }
} }

View File

@@ -66,7 +66,6 @@ namespace ReallifeGamemode.Server.Finance
return propertyTaxation; return propertyTaxation;
} }
public static void SetPaycheck(Player client, bool minusJail = true) public static void SetPaycheck(Player client, bool minusJail = true)
{ {
User user = client.GetUser(); User user = client.GetUser();
@@ -76,7 +75,7 @@ namespace ReallifeGamemode.Server.Finance
int vehicleTaxation = GetVehicleTaxation(client); int vehicleTaxation = GetVehicleTaxation(client);
int rentalFees = GetRentalFees(client); int rentalFees = GetRentalFees(client);
int healthInsurance = (int)((bankAccount + user.Handmoney)* 0.001); int healthInsurance = (int)((bankAccount + user.Handmoney) * 0.001);
if (healthInsurance < 0) if (healthInsurance < 0)
{ {
healthInsurance = 0; healthInsurance = 0;
@@ -86,7 +85,17 @@ namespace ReallifeGamemode.Server.Finance
if (user.Faction != null && user.FactionRank != null) if (user.Faction != null && user.FactionRank != null)
{ {
factionMoney = user.FactionRank.Order * 500; using var dbContext = new DatabaseContext();
int factionRankCount = dbContext.FactionRanks.Where(r => r.FactionId == user.FactionId).Count();
int factionWage = (3000 / factionRankCount) * user.FactionRank.Order;
if (wage > 2500)
{
factionWage /= 2;
}
factionMoney = factionWage;
} }
int otheramount = user.otheramount; int otheramount = user.otheramount;
int amount = wage - (int)(wage * financialInterest) - vehicleTaxation - (int)propertyTax + (int)financialHelp - rentalFees - healthInsurance + (factionMoney ?? 0) + otheramount; int amount = wage - (int)(wage * financialInterest) - vehicleTaxation - (int)propertyTax + (int)financialHelp - rentalFees - healthInsurance + (factionMoney ?? 0) + otheramount;
@@ -178,11 +187,14 @@ namespace ReallifeGamemode.Server.Finance
public static void Timer_Elapsed() public static void Timer_Elapsed()
{ {
using var dbContext = new DatabaseContext(); using var dbContext = new DatabaseContext();
foreach (var player in NAPI.Pools.GetAllPlayers()) foreach (var player in NAPI.Pools.GetAllPlayers().Where(p => p.IsLoggedIn()))
{ {
User user = player.GetUser(dbContext); User user = player.GetUser(dbContext);
if (player.IsLoggedIn()) if(user == null)
{ {
continue;
}
user.PlayedMinutes += 1; user.PlayedMinutes += 1;
if (user.PaydayTimer <= 0) if (user.PaydayTimer <= 0)
{ {
@@ -194,7 +206,6 @@ namespace ReallifeGamemode.Server.Finance
user.PaydayTimer -= 1; user.PaydayTimer -= 1;
} }
} }
}
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
} }

View File

@@ -199,6 +199,7 @@ namespace ReallifeGamemode.Server.Gangwar
}); });
} }
public void enter(Player client) public void enter(Player client)
{ {
User user = client.GetUser(); User user = client.GetUser();

View File

@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace ReallifeGamemode.Server.Inventory.Items
{
class AssaultRifle : WeaponDealItem
{
public override int Id => 13;
public override string Name => "AssaultRifle";
public override string Description => "Waffe";
public override int Gewicht => 500;
public override string Einheit => "g";
public override uint Object => 3666746839; //3061944032
public override int Price => 0;
}
}

View File

@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace ReallifeGamemode.Server.Inventory.Items
{
class AssaultSmg : WeaponDealItem
{
public override int Id => 14;
public override string Name => "AssaultSmg";
public override string Description => "Waffe";
public override int Gewicht => 500;
public override string Einheit => "g";
public override uint Object => 3666746839; //3061944032
public override int Price => 0;
}
}

View File

@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace ReallifeGamemode.Server.Inventory.Items
{
class AChips : FoodItem
{
public override int Id => 104;
public override string Name => "Aviates Chips";
public override string Description => "aviate liebt sie.";
public override int Gewicht => 10;
public override string Einheit => "g";
public override int HpAmount => 10;
public override uint Object => 2240524752;
public override int Price => 20;
}
}

View File

@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace ReallifeGamemode.Server.Inventory.Items
{
class CombatPDW : WeaponDealItem
{
public override int Id => 12;
public override string Name => "CombatPDW";
public override string Description => "Waffe";
public override int Gewicht => 500;
public override string Einheit => "g";
public override uint Object => 3666746839; //3061944032
public override int Price => 0;
}
}

View File

@@ -9,7 +9,7 @@ namespace ReallifeGamemode.Server.Inventory.Items
public override int Id => 7; public override int Id => 7;
public override string Name => "CompactRifle"; public override string Name => "CompactRifle";
public override string Description => "Waffe"; public override string Description => "Waffe";
public override int Gewicht => 3080; public override int Gewicht => 500;
public override string Einheit => "g"; public override string Einheit => "g";
public override uint Object => 3666746839; //3061944032 public override uint Object => 3666746839; //3061944032
public override int Price => 0; public override int Price => 0;

View File

@@ -27,7 +27,7 @@ namespace ReallifeGamemode.Server.Inventory.Items
amountToAdd = 100 - player.Health; amountToAdd = 100 - player.Health;
} }
player.Health += amountToAdd; player.SafeSetHealth(player.Health + amountToAdd);
player.SendNotification("Du hast ein/einen ~y~" + InventoryManager.GetItemById(uItem.ItemId).Name + " ~s~gegessen.", false); player.SendNotification("Du hast ein/einen ~y~" + InventoryManager.GetItemById(uItem.ItemId).Name + " ~s~gegessen.", false);
InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1); InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1);
} }

File diff suppressed because it is too large Load Diff

View File

@@ -5,6 +5,7 @@ using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models; using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Managers;
namespace ReallifeGamemode.Server.Job namespace ReallifeGamemode.Server.Job
{ {
@@ -21,12 +22,21 @@ namespace ReallifeGamemode.Server.Job
private readonly List<Player> _inJob = new List<Player>(); private readonly List<Player> _inJob = new List<Player>();
private static readonly List<Player> jobPlayer = new List<Player>(); private static readonly List<Player> jobPlayer = new List<Player>();
public static Dictionary<Player, Vehicle> playerVehiclePair = new Dictionary<Player, Vehicle>();
public static List<Player> _CHANGING_VEHICLE = new List<Player>();
public abstract int Id { get; } public abstract int Id { get; }
public abstract string Name { get; } public abstract string Name { get; }
public abstract bool NeedVehicleToStart { get; } public abstract bool NeedVehicleToStart { get; }
public abstract void LastCheckpoint(Player player);
public abstract void StartJobEndTimer(Player player);
public abstract bool CheckVehicle(Player player, Vehicle veh);
public virtual bool Deactivated => false; public virtual bool Deactivated => false;
public void StartJob(Player player) public void StartJob(Player player)
@@ -35,7 +45,7 @@ namespace ReallifeGamemode.Server.Job
_inJob.Add(player); _inJob.Add(player);
jobPlayer.Add(player); jobPlayer.Add(player);
ChatService.SendMessage(player, $"~y~[Job]~s~ Du hast deinen Job (~o~{this.Name}~s~) gestartet."); ChatService.SendMessage(player, $"~y~[Job]~s~ Du hast deinen Job ~o~{this.Name}~s~ gestartet.");
JobStart?.Invoke(player); JobStart?.Invoke(player);
} }
@@ -46,18 +56,10 @@ namespace ReallifeGamemode.Server.Job
_inJob.Remove(player); _inJob.Remove(player);
jobPlayer.Remove(player); jobPlayer.Remove(player);
User user = player.GetUser();
using (var dbContext = new DatabaseContext())
{
user = player.GetUser(dbContext);
user.trashcount -= user.trashcount;
dbContext.SaveChanges();
}
if (quit) if (quit)
{ {
ChatService.SendMessage(player, $"~y~[Job]~s~ Du hast deinen Job (~o~{this.Name}~s~) beendet."); ChatService.SendMessage(player, $"~y~[Job]~s~ Du hast deinen Job ~o~{this.Name}~s~ beendet.");
player.SafeTeleport(JobManager.playerJobStartPosition[player]);
} }
JobStop?.Invoke(player); JobStop?.Invoke(player);
@@ -65,11 +67,9 @@ namespace ReallifeGamemode.Server.Job
public List<JobVehicle> GetJobVehicles() public List<JobVehicle> GetJobVehicles()
{ {
using (var dbContext = new DatabaseContext()) using var dbContext = new DatabaseContext();
{
return dbContext.JobVehicles.Where(j => j.JobId == Id).ToList(); return dbContext.JobVehicles.Where(j => j.JobId == Id).ToList();
} }
}
public static List<Player> GetPlayerInJob() => jobPlayer; public static List<Player> GetPlayerInJob() => jobPlayer;

View File

@@ -7,6 +7,8 @@ using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Util; using ReallifeGamemode.Server.Util;
using System.Linq;
using ReallifeGamemode.Database.Entities;
namespace ReallifeGamemode.Server.Job namespace ReallifeGamemode.Server.Job
{ {
@@ -18,10 +20,55 @@ namespace ReallifeGamemode.Server.Job
private const int CHECKPOINT_MARKER_ID = 6; private const int CHECKPOINT_MARKER_ID = 6;
public const string BEGINNER = "Anfänger";
public const string INTERMEDIATE = "Fortgeschrittener";
public const string PROFESSIONAL = "Profi";
public const int WAGE_BEGINNER = 300;
public const int WAGE_INTERMEDIATE = 750;
public const uint VEHICLE_BEGINNER = (uint)VehicleHash.Cuban800;
public const uint VEHICLE_INTERMEDIATE = (uint)VehicleHash.Velum2;
public const uint VEHICLE_PROFESSIONAL = (uint)VehicleHash.Submersible;
public static Dictionary<string, List<Vector3>> playerRouteCurrent = new Dictionary<string, List<Vector3>>();
public static int spawnIndexBeginner = 0;
public static int spawnIndexIntermediate = 0;
public const int SKILL_BEGINNER = 0;
public const int SKILL_INTERMEDIATE = 300;
public override bool NeedVehicleToStart => false; public override bool NeedVehicleToStart => false;
private readonly IReadOnlyCollection<Vector3> Skill1Route1 = new List<Vector3>//Pilot_Skill_1_Route_1 private readonly Dictionary<Vector3, float> BEGINNER_SPAWNS = new Dictionary<Vector3, float>
{ {
{ new Vector3(1683.6611, 3267.7104, 41.625206), -162},
{ new Vector3(1696.7466, 3271.403, 41.385006), -161},
{ new Vector3(1722.8834, 3278.6873, 41.194054), -160},
{ new Vector3(1723.9468, 3233.8052, 41.563965), 17},
{ new Vector3(1736.5269, 3236.5996, 41.563965), 17},
{ new Vector3(1750.1774, 3240.3157, 41.563965), 17},
};
private readonly Dictionary<Vector3, float> INTERMEDIATE_SPAWNS = new Dictionary<Vector3, float>()
{
{ new Vector3(-1650.7899, -3178.5798, 15), 60},
{ new Vector3(-1643.098, -3165.7114, 15), 60},
{ new Vector3(-1635.0903, -3152.7354, 15), 60},
{ new Vector3(-1627.0435, -3138.8354, 15), 60},
{ new Vector3(-1517-0101, -3125-2798, 15), -118},
{ new Vector3(-1670.9293, -3116.0898, 15), -118},
};
//124 0 Velum
private readonly Dictionary<int, List<Vector3>> ROUTE_BEGINNER = new Dictionary<int, List<Vector3>>//Bus_Skill_1_Route_1
{
{ 0,
new List<Vector3>()
{
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(1645.9910888671875, 3236.744873046875, 40.98052978515625), new Vector3(1645.9910888671875, 3236.744873046875, 40.98052978515625),
new Vector3(302.6805114746094, 2867.93896484375, 204.81182861328125), new Vector3(302.6805114746094, 2867.93896484375, 204.81182861328125),
new Vector3(-1093.6722412109375, 2737.1376953125, 257.575439453125), new Vector3(-1093.6722412109375, 2737.1376953125, 257.575439453125),
@@ -31,10 +78,12 @@ namespace ReallifeGamemode.Server.Job
new Vector3(1896.899658203125, 4824.203125, 208.77737426757812), new Vector3(1896.899658203125, 4824.203125, 208.77737426757812),
new Vector3(2281.790283203125, 3606.98681640625, 132.3915252685547), new Vector3(2281.790283203125, 3606.98681640625, 132.3915252685547),
new Vector3(1610.4461669921875, 3225.36376953125, 41.05073928833008), new Vector3(1610.4461669921875, 3225.36376953125, 41.05073928833008),
}.AsReadOnly(); }
},
private readonly IReadOnlyCollection<Vector3> Skill1Route2 = new List<Vector3>//Pilot_Skill_1_Route_2 { 1,
new List<Vector3>()
{ {
//new Vector3(-601.733, -2049.285, 6.090),
new Vector3(1593.927490234375, 3193.30908203125, 41.170997619628906), new Vector3(1593.927490234375, 3193.30908203125, 41.170997619628906),
new Vector3(961.5843505859375, 2278.5966796875, 251.17218017578125), new Vector3(961.5843505859375, 2278.5966796875, 251.17218017578125),
new Vector3(924.3920288085938, 93.95357513427734, 282.3033142089844), new Vector3(924.3920288085938, 93.95357513427734, 282.3033142089844),
@@ -44,14 +93,14 @@ namespace ReallifeGamemode.Server.Job
new Vector3(-894.3707885742188, 82.7993392944336, 385.011962890625), new Vector3(-894.3707885742188, 82.7993392944336, 385.011962890625),
new Vector3(919.4126586914062, 2553.385986328125, 135.39154052734375), new Vector3(919.4126586914062, 2553.385986328125, 135.39154052734375),
new Vector3(1592.840087890625, 3192.8017578125, 41.169837951660156), new Vector3(1592.840087890625, 3192.8017578125, 41.169837951660156),
}.AsReadOnly(); }
},
};
private readonly IReadOnlyCollection<Vector3> Skill1Route3 = new List<Vector3>//Pilot_Skill_1_Route_3 private readonly Dictionary<int, List<Vector3>> ROUTE_INTERMEDIATE = new Dictionary<int, List<Vector3>>
{ {
new Vector3(-850.61, 2181.98, 429.67), { 0,
}.AsReadOnly(); new List<Vector3>()
private readonly IReadOnlyCollection<Vector3> Skill2Route1 = new List<Vector3>//Pilot_Skill_2_Route_1
{ {
new Vector3(-1534.98828125, -3028.916748046875, 14.451109886169434), new Vector3(-1534.98828125, -3028.916748046875, 14.451109886169434),
new Vector3(-1182.960205078125, -3236.542724609375, 67.93492126464844), new Vector3(-1182.960205078125, -3236.542724609375, 67.93492126464844),
@@ -70,9 +119,10 @@ namespace ReallifeGamemode.Server.Job
new Vector3(-1073.534912109375, -1704.798583984375, 94.05522155761719), new Vector3(-1073.534912109375, -1704.798583984375, 94.05522155761719),
new Vector3(-1686.30126953125, -2815.478759765625, 14.87234115600586), new Vector3(-1686.30126953125, -2815.478759765625, 14.87234115600586),
new Vector3(-1617.498291015625, -2982.41259765625, 14.883989334106445), new Vector3(-1617.498291015625, -2982.41259765625, 14.883989334106445),
}.AsReadOnly(); }
},
private readonly IReadOnlyCollection<Vector3> Skill2Route2 = new List<Vector3>//Pilot_Skill_2_Route_2 { 1,
new List<Vector3>()
{ {
new Vector3(-1463.965576171875, -2875.571533203125, 14.882678031921387), new Vector3(-1463.965576171875, -2875.571533203125, 14.882678031921387),
new Vector3(-981.0889282226562, -3122.533203125, 56.10537338256836), new Vector3(-981.0889282226562, -3122.533203125, 56.10537338256836),
@@ -91,250 +141,228 @@ namespace ReallifeGamemode.Server.Job
new Vector3(-1124.624755859375, -1821.9208984375, 74.77794647216797), new Vector3(-1124.624755859375, -1821.9208984375, 74.77794647216797),
new Vector3(-1631.8602294921875, -2720.09814453125, 14.873514175415039), new Vector3(-1631.8602294921875, -2720.09814453125, 14.873514175415039),
new Vector3(-1543.793701171875, -2829.399169921875, 14.899491310119629), new Vector3(-1543.793701171875, -2829.399169921875, 14.899491310119629),
}.AsReadOnly(); }
},
private readonly IReadOnlyCollection<Vector3> Skill2Route3 = new List<Vector3>//Pilot_Skill_2_Route_3 };
{
new Vector3(-710.89, -1836.81, 355.46),
}.AsReadOnly();
public PilotJob() public PilotJob()
{ {
JobStart += PilotJob_JobStart; JobStop += _JobStop;
} }
private void PilotJob_JobStart(Player player) private void _JobStop(Player player)
{ {
/*List<String> listRouteTexts = new List<string>(); if (!playerVehiclePair.ContainsKey(player))
List<String> listRouteTexts2 = new List<string>(); return;
Vehicle veh = player.Vehicle; CheckPointHandle.DeleteCheckpoints(player);
if ((VehicleHash)veh.Model == VehicleHash.Velum || (VehicleHash)veh.Model == VehicleHash.Velum2) playerVehiclePair[player].Delete();
{ playerVehiclePair.Remove(player);
listRouteTexts2.Add("Route 4"); }
listRouteTexts2.Add("Route 5");
listRouteTexts2.Add("Route 6");
player.TriggerEvent("showPilotRouteMenu", JsonConvert.SerializeObject(listRouteTexts2)); public string getSkill(int skillPoints)
}
else
{ {
listRouteTexts.Add("Route 1"); if (skillPoints == SKILL_BEGINNER)
listRouteTexts.Add("Route 2"); return BEGINNER;
listRouteTexts.Add("Route 3"); else if (skillPoints == SKILL_INTERMEDIATE)
return INTERMEDIATE;
player.TriggerEvent("showPilotRouteMenu", JsonConvert.SerializeObject(listRouteTexts)); return "none";
}*/
/*Random rnd = new Random();
int rroute = rnd.Next(1, 6);
switch (rroute)
{
case 1:
{
StartPilotRoute(player, "Route 1");
break;
} }
case 2:
private uint getPlayerJobVehicle(string type)
{ {
StartPilotRoute(player, "Route 2"); if (type == BEGINNER)
break; return VEHICLE_BEGINNER;
} else if (type == INTERMEDIATE)
case 3: return VEHICLE_INTERMEDIATE;
{ else if (type == PROFESSIONAL)
StartPilotRoute(player, "Route 3"); return VEHICLE_PROFESSIONAL;
break;
} return 0;
case 4:
{
StartPilotRoute(player, "Route 4");
break;
}
case 5:
{
StartPilotRoute(player, "Route 5");
break;
}
}*/
} }
[RemoteEvent("startPilotRoute")] [RemoteEvent("startPilotRoute")]
public void StartPilotRoute(Player player, string type) public void StartPilotRoute(Player player, int skillPoints)
{ {
Vehicle veh = player.Vehicle; string type = getSkill(skillPoints);
if (player.VehicleSeat == 0)
List<Vector3> selectedRoute = new List<Vector3>();
Random random = new Random();
Vector3 spawnPoint = null;
float heading = 0;
if (type == BEGINNER)
{ {
if (type == "RouteStart") spawnPoint = BEGINNER_SPAWNS.Keys.ToList()[spawnIndexBeginner++ % BEGINNER_SPAWNS.Count];
{ heading = BEGINNER_SPAWNS[spawnPoint];
if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 1) selectedRoute = ROUTE_BEGINNER.GetValueOrDefault(random.Next(0, ROUTE_BEGINNER.Count));
{
Random rnd = new Random();
int rroute = rnd.Next(1, 3);
switch (rroute)
{
case 1:
{
CheckPointHandle.StartCheckPointRoute(player, Skill1Route1, 0, CHECKPOINT_MARKER_ID, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
player.SendChatMessage("~y~Job: ~s~Route wurde gesetzt: ~g~Route 1");
player.SetData("Route", "Skill1Route1");
break;
} }
case 2: else if (type == INTERMEDIATE)
{ {
CheckPointHandle.StartCheckPointRoute(player, Skill1Route2, 0, CHECKPOINT_MARKER_ID, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28 spawnPoint = INTERMEDIATE_SPAWNS.Keys.ToList()[spawnIndexIntermediate++ % INTERMEDIATE_SPAWNS.Count];
player.SendChatMessage("~y~Job: ~s~Route wurde gesetzt: ~g~Route 2"); heading = INTERMEDIATE_SPAWNS[spawnPoint];
player.SetData("Route", "Skill1Route2"); selectedRoute = ROUTE_INTERMEDIATE.GetValueOrDefault(random.Next(0, ROUTE_INTERMEDIATE.Count));
break;
} }
/*case 3:
if (selectedRoute is null || selectedRoute.Count is 0)
{ {
CheckPointHandle.StartCheckPointRoute(player, Skill1Route3, 0, 26, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28 Console.WriteLine($"[ERROR:BUSJOB] Player {player.Name} has empty route Vector3 List.");
player.SendChatMessage("~y~[JOB] ~w~Route wurde gesetzt: ~g~Route 3"); return;
player.SetData("Route", "Skill1Route3");
break;
}*/
} }
} if (spawnPoint is null)
if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 2)
{ {
Random rnd = new Random(); Console.WriteLine($"[ERROR:BUSJOB] Player {player.Name} has empty spawn point.");
int rroute = rnd.Next(1, 3); return;
switch (rroute)
{
case 1:
{
CheckPointHandle.StartCheckPointRoute(player, Skill2Route1, 0, CHECKPOINT_MARKER_ID, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28
player.SendChatMessage("~y~Job: ~s~Route wurde gesetzt: ~g~Route 1");
player.SetData("Route", "Skill2Route1");
break;
} }
case 2:
Vehicle vehicle = NAPI.Vehicle.CreateVehicle(getPlayerJobVehicle(type), spawnPoint, heading, 124, 0, "JOB");
vehicle.NumberPlate = "JOB-" + vehicle.Id;
if (vehicle is null)
{ {
CheckPointHandle.StartCheckPointRoute(player, Skill2Route2, 0, CHECKPOINT_MARKER_ID, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28 Console.WriteLine($"[ERROR:BUSJOB] Player {player.Name} got no Vehicle set.");
player.SendChatMessage("~y~Job: ~s~Route wurde gesetzt: ~g~Route 2"); return;
player.SetData("Route", "Skill2Route2");
break;
} }
/*case 3:
if (!playerRouteCurrent.ContainsKey(player.Name))
playerRouteCurrent.Add(player.Name, new List<Vector3>());
playerRouteCurrent[player.Name] = selectedRoute;
_CHANGING_VEHICLE.Add(player);
if (playerVehiclePair.ContainsKey(player))
{ {
CheckPointHandle.StartCheckPointRoute(player, Skill2Route3, 0, 26, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28 Vehicle previousVehicle = null;
player.SendChatMessage("~y~[JOB] ~w~Route wurde gesetzt: ~g~Route 3"); if (playerVehiclePair[player] != null)
player.SetData("Route", "Skill2Route3"); previousVehicle = playerVehiclePair[player];
break; playerVehiclePair.Remove(player);
}*/
previousVehicle?.Delete();
} }
playerVehiclePair.Add(player, vehicle);
player.SetIntoVehicle(vehicle.Handle, 0);
CheckPointHandle.StartCheckPointRoute(player, selectedRoute, 0, CHECKPOINT_MARKER_ID, 40, 10, true, "PILOT:InCheckpoint"); //6, 23, 25, 26, 27, 28
} }
}
/*if (type == "Route 1") public string getPlayerRouteType(Player player)
{ {
CheckPointHandle.StartCheckPointRoute(player, Route1, 0, 6, 40, 10, true, "pilotJob"); //6, 23, 25, 26, 27, 28 if (!playerRouteCurrent.ContainsKey(player.Name))
return "none";
List<Vector3> selectedRoute = playerRouteCurrent[player.Name];
if (ROUTE_BEGINNER.Values.Where(v => v.VectorEquals(selectedRoute)).Count() != 0)
return BEGINNER;
else if (ROUTE_INTERMEDIATE.Values.Where(v => v.VectorEquals(selectedRoute)).Count() != 0)
return INTERMEDIATE;
return "none";
} }
else if (type == "Route 2")
public int getSkillFromType(string type)
{ {
CheckPointHandle.StartCheckPointRoute(player, Route2, 0, 6, 40, 10, true, "pilotJob"); if (type == BEGINNER)
return SKILL_BEGINNER;
else if (type == INTERMEDIATE)
return SKILL_INTERMEDIATE;
return -1;
} }
else if (type == "Route 3")
public override void LastCheckpoint(Player player)
{ {
CheckPointHandle.StartCheckPointRoute(player, Route3, 0, 6, 40, 10, true, "pilotJob"); string type = getPlayerRouteType(player);
int skill = getSkillFromType(type);
if (skill == -1)
{
StopJob(player, true);
return;
} }
else if (type == "Route 4")
{ playerRouteCurrent.Remove(player.Name);
CheckPointHandle.StartCheckPointRoute(player, Route4, 0, 6, 40, 10, true, "pilotJob");
StartPilotRoute(player, skill);
} }
else if (type == "Route 5")
public override void StartJobEndTimer(Player player)
{ {
CheckPointHandle.StartCheckPointRoute(player, Route5, 0, 6, 40, 10, true, "pilotJob"); if (!playerVehiclePair.ContainsKey(player) && _CHANGING_VEHICLE.Contains(player))
{
_CHANGING_VEHICLE.Remove(player);
return;
} }
else if (type == "Route 6")
if (JobManager.playerTimersJobVehicleRespawn.ContainsKey(player))
{ {
CheckPointHandle.StartCheckPointRoute(player, Route6, 0, 6, 40, 10, true, "pilotJob"); JobManager.playerTimersJobVehicleRespawn[player].Stop();
}*/
}
}
public static void payWage(Player jobber, int wage)
{
using (var dbContext = new DatabaseContext())
{
if (jobber.VehicleSeat == 0)
{
jobber.GetUser(dbContext).Wage += wage;
//jobber.SendNotification($"~y~[JOB] ~g~+{wage}$");
jobber.GetUser(dbContext).PilotSkill++;
dbContext.SaveChanges();
if (jobber.GetUser(dbContext).PilotSkill == 300)
{
jobber.SendChatMessage($"~y~Job: ~s~Du hast nun ~g~Skill-Level 2 ~w~erreicht!");
jobber.SendChatMessage($"~y~Job: ~s~Du kannst jetzt auch mit dem Velum Flugzeug (LS Airport) fliegen!");
}
} }
PlayerTimer playerTimer = new PlayerTimer(player, playerVehiclePair[player], 30000);
playerTimer.Elapsed += JobTimerElapsed;
if (!JobManager.playerTimersJobVehicleRespawn.ContainsKey(player))
JobManager.playerTimersJobVehicleRespawn.Add(player, playerTimer);
else else
{ JobManager.playerTimersJobVehicleRespawn[player] = playerTimer;
JobBase job = JobManager.GetJob(jobber.GetUser().JobId ?? -1);
job.StopJob(jobber); player.SendChatMessage("~y~[JOB] ~w~Du hast das Fahrzeug verlassen,");
CheckPointHandle.DeleteCheckpoints(jobber); player.SendChatMessage("~y~[JOB] ~w~Bist du nicht in 30 Sekunden zurück, ~r~wird der Job beendet!");
ChatService.SendMessage(jobber, $"~y~Job: ~s~Du hast deinen Job ~o~{job.Name}~s~ beendet.");
} }
private void JobTimerElapsed(Player player, Vehicle vehicle)
{
NAPI.Task.Run(() =>
{
StopJob(player, !player.GetData<bool>("isDead"));
JobManager.playerTimersJobVehicleRespawn[player].Stop();
JobManager.playerTimersJobVehicleRespawn.Remove(player);
});
}
public override bool CheckVehicle(Player player, Vehicle vehicle)
{
if (!playerVehiclePair.ContainsKey(player))
return false;
if (playerVehiclePair[player] == vehicle)
return true;
return false;
} }
} }
[RemoteEvent("PilotLetzterCheckpoint")] public class PilotJobEvents : Script
public static void PilotLetzterCheckpoint(Player player)
{ {
PilotJob c = new PilotJob(); [RemoteEvent("PILOT:InCheckpoint")]
Vehicle v = player.Vehicle; public void PilotInCheckpoint(Player player)
c.StartPilotRoute(player, "RouteStart");
/*if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 1)
{ {
Random rnd = new Random(); if (!PilotJob.playerVehiclePair.ContainsKey(player) || !PilotJob.playerRouteCurrent.ContainsKey(player.Name))
int rroute = rnd.Next(1, 4); return;
switch (rroute)
{ if (PilotJob.playerVehiclePair[player].Model is PilotJob.VEHICLE_BEGINNER)
case 1: payWage(player, PilotJob.WAGE_BEGINNER / PilotJob.playerRouteCurrent[player.Name].Count);
{ else if (PilotJob.playerVehiclePair[player].Model is PilotJob.VEHICLE_INTERMEDIATE)
c.StartPilotRoute(player, "Route 1"); payWage(player, PilotJob.WAGE_INTERMEDIATE / PilotJob.playerRouteCurrent[player.Name].Count);
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 1");
break;
} }
case 2:
private void payWage(Player player, int wage)
{ {
c.StartPilotRoute(player, "Route 2"); using var dbContext = new DatabaseContext();
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 2"); User user = player.GetUser(dbContext);
break;
} if (player.VehicleSeat == 0)
case 3:
{ {
c.StartPilotRoute(player, "Route 3"); user.Wage += wage;
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 2"); user.PilotSkill++;
break; if (user.PilotSkill == BusDriverJob.SKILL_INTERMEDIATE)
}
}
}
if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 2)
{ {
Random rnd = new Random(); player.SendChatMessage($"~y~[JOB]: ~w~Du hast nun die Route ~g~{BusDriverJob.INTERMEDIATE} ~w~freigeschaltet!");
int rroute = rnd.Next(1, 4); player.SendChatMessage($"~y~[JOB]: ~w~Du kannst jetzt auch mit dem Velum fliegen!");
switch (rroute)
{
case 1:
{
c.StartPilotRoute(player, "Route 4");
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 4");
break;
} }
case 2:
{ dbContext.SaveChanges();
c.StartPilotRoute(player, "Route 5");
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 5");
break;
} }
case 3:
{
c.StartPilotRoute(player, "Route 6");
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 6");
break;
}
}
}*/
} }
} }
} }

View File

@@ -8,6 +8,7 @@ using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models; using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Util;
namespace ReallifeGamemode.Server.Job namespace ReallifeGamemode.Server.Job
{ {
@@ -415,5 +416,45 @@ namespace ReallifeGamemode.Server.Job
} }
#endregion zweiSpeieler #endregion zweiSpeieler
public override void LastCheckpoint(Player player)
{
//nothing
}
public override void StartJobEndTimer(Player player)
{
if (!playerVehiclePair.ContainsKey(player))
return;
if (JobManager.playerTimersJobVehicleRespawn.ContainsKey(player))
{
JobManager.playerTimersJobVehicleRespawn[player].Stop();
}
PlayerTimer playerTimer = new PlayerTimer(player, playerVehiclePair[player], 60000 * 5);
playerTimer.Elapsed += JobTimerElapsed;
JobManager.playerTimersJobVehicleRespawn[player] = playerTimer;
}
private void JobTimerElapsed(Player player, Vehicle vehicle)
{
NAPI.Task.Run(() =>
{
StopJob(player, !player.GetData<bool>("isDead"));
JobManager.playerTimersJobVehicleRespawn[player].Stop();
JobManager.playerTimersJobVehicleRespawn.Remove(player);
});
}
public override bool CheckVehicle(Player player, Vehicle vehicle)
{
if (!playerVehiclePair.ContainsKey(player))
return false;
if (playerVehiclePair[player] == vehicle)
return true;
return false;
}
} }
} }

View File

@@ -92,7 +92,7 @@ namespace ReallifeGamemode.Server.Job
User target = dbContext.Users.Where(u => u.Id == targetId).FirstOrDefault(); User target = dbContext.Users.Where(u => u.Id == targetId).FirstOrDefault();
player.SendNotification("~r~[Info] ~w~ Dein Kunde hat kein Geld mehr auf der Hand."); player.SendNotification("~r~[Info] ~w~ Dein Kunde hat kein Geld mehr auf der Hand.");
if((target.Handmoney - amount) <= 0) if ((target.Handmoney - amount) <= 0)
{ {
Player targetmoney = PlayerService.GetPlayerByNameOrId(Convert.ToString(targetId)); Player targetmoney = PlayerService.GetPlayerByNameOrId(Convert.ToString(targetId));
targetmoney.SendNotification("~r~[Fehler] ~w~ Du hast kein Geld mehr auf der Hand."); targetmoney.SendNotification("~r~[Fehler] ~w~ Du hast kein Geld mehr auf der Hand.");
@@ -123,11 +123,10 @@ namespace ReallifeGamemode.Server.Job
public static void UpdateFare() public static void UpdateFare()
{ {
foreach (var player in GetPlayerInJob()) foreach (var player in GetPlayerInJob())
{ {
User u = player.GetUser(); User u = player.GetUser();
if(u == null) if (u == null)
{ {
continue; continue;
} }
@@ -157,5 +156,26 @@ namespace ReallifeGamemode.Server.Job
} }
} }
} }
public override void LastCheckpoint(Player player)
{
//nothing
}
public override void StartJobEndTimer(Player player)
{
//nothing
}
public override bool CheckVehicle(Player player, Vehicle vehicle)
{
if (!playerVehiclePair.ContainsKey(player))
return false;
if (playerVehiclePair[player] == vehicle)
return true;
return false;
}
} }
} }

View File

@@ -172,8 +172,18 @@ namespace ReallifeGamemode.Server
using (var dbContext = new DatabaseContext()) using (var dbContext = new DatabaseContext())
{ {
var user = dbContext.Users.Where(u => u.BankAccountId == account.Id).Select(u => u.Name).FirstOrDefault(); var user = dbContext.Users.Where(u => u.BankAccountId == account.Id).Select(u => u.Name).FirstOrDefault();
if (user == null) return; if (user == null)
PlayerService.GetPlayerByNameOrId(user).TriggerEvent("updateMoney", account.Balance); {
return;
}
Player player = PlayerService.GetPlayerByNameOrId(user);
if(player == null)
{
return;
}
player.TriggerEvent("updateMoney", account.Balance);
} }
}; };

View File

@@ -19,6 +19,8 @@ namespace ReallifeGamemode.Server.Managers
{ {
public static List<BusinessBase> Businesses { get; private set; } public static List<BusinessBase> Businesses { get; private set; }
private const double FACTION_CAR_MULTIPLIER = 1.5;
public static void LoadBusinesses() public static void LoadBusinesses()
{ {
Businesses = new List<BusinessBase>(); Businesses = new List<BusinessBase>();
@@ -199,10 +201,10 @@ namespace ReallifeGamemode.Server.Managers
else if (target == "Fraktion") else if (target == "Fraktion")
{ {
var faction = dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == u.FactionId).First(); var faction = dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == u.FactionId).First();
TransactionResult result = BankManager.TransferMoney(faction, business, price * 3, "Auto gekauft", dbContext); TransactionResult result = BankManager.TransferMoney(faction, business, (int)(price * FACTION_CAR_MULTIPLIER), "Auto gekauft", dbContext);
if (result == TransactionResult.SENDER_NOT_ENOUGH_MONEY) if (result == TransactionResult.SENDER_NOT_ENOUGH_MONEY)
{ {
player.SendNotification("~r~Die Fraktion hat nicht genug Geld: " + (price * 3).ToMoneyString()); player.SendNotification("~r~Die Fraktion hat nicht genug Geld: " + (price * FACTION_CAR_MULTIPLIER).ToMoneyString());
return; return;
} }
player.SendChatMessage("~y~Deine Fraktion hat das Fahrzeug erfolgreich gekauft"); player.SendChatMessage("~y~Deine Fraktion hat das Fahrzeug erfolgreich gekauft");

View File

@@ -254,7 +254,7 @@ namespace ReallifeGamemode.Server.Managers
//}; //};
//player.SetHeadOverlay(4, makeupHo); //player.SetHeadOverlay(4, makeupHo);
//player.SetHeadOverlay(5, blushHo); //player.SetHeadOverlay(5, blushHo);
NAPI.Player.SpawnPlayer(player, Main.DEFAULT_SPAWN_POSITION, Main.DEFAULT_SPAWN_HEADING); player.SafeTeleport(Main.DEFAULT_SPAWN_POSITION, Main.DEFAULT_SPAWN_HEADING, true);
player.TriggerEvent("draw", player.Name, player.Handle.Value); player.TriggerEvent("draw", player.Name, player.Handle.Value);
player.Dimension = 0; player.Dimension = 0;
} }

View File

@@ -215,16 +215,16 @@ namespace ReallifeGamemode.Server.Managers
{ {
if (type != "Fraktion" && type != "Gruppe") return; if (type != "Fraktion" && type != "Gruppe") return;
Player target = PlayerService.GetPlayerByNameOrId(name); using var dbContext = new DatabaseContext();
if (target == null || !target.IsLoggedIn()) User targetUser = dbContext.Users.FirstOrDefault(u => u.Name == name);
if (targetUser == null)
{ {
ChatService.PlayerNotFound(player); ChatService.PlayerNotFound(player);
return; return;
} }
using var dbContext = new DatabaseContext(); Player targetPlayer = PlayerService.GetPlayerByNameOrId(name);
User targetUser = target.GetUser(dbContext);
User playerUser = player.GetUser(dbContext); User playerUser = player.GetUser(dbContext);
if (type == "Fraktion") if (type == "Fraktion")
@@ -241,7 +241,7 @@ namespace ReallifeGamemode.Server.Managers
return; return;
} }
if (player.Handle == target.Handle) if (player.Name == targetUser.Name)
{ {
ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten"); ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten");
return; return;
@@ -253,15 +253,21 @@ namespace ReallifeGamemode.Server.Managers
return; return;
} }
target.SetData("duty", false); if (targetPlayer != null)
target.TriggerEvent("toggleDutyMode", false); {
Medic.UpdateDutyMedics(-1); targetUser.SetData("duty", false);
UpdateCharacterCloth.LoadCharacterDefaults(target); targetPlayer.TriggerEvent("toggleDutyMode", false);
target.GetUser(dbContext).FactionRankId = null; UpdateCharacterCloth.LoadCharacterDefaults(targetPlayer);
target.GetUser(dbContext).FactionId = null; ChatService.SendMessage(targetPlayer, "!{02FCFF}Du wurdest von " + player.Name + " aus der Fraktion geworfen.");
ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Fraktion geworfen."); FactionHelper.ResetPlayer(targetPlayer, targetUser, dbContext);
ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Fraktion geworfen."); }
Medic.UpdateDutyMedics();
targetUser.FactionRankId = null;
targetUser.FactionId = null;
targetUser.SetBlipAndNametagColor(); targetUser.SetBlipAndNametagColor();
ChatService.SendMessage(player, "!{02FCFF}Du hast " + targetUser.Name + " aus der Fraktion geworfen.");
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
else if (type == "Gruppe") else if (type == "Gruppe")
@@ -278,7 +284,7 @@ namespace ReallifeGamemode.Server.Managers
return; return;
} }
if (player.Handle == target.Handle) if (player.Handle == targetPlayer.Handle)
{ {
ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten"); ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten");
return; return;
@@ -293,8 +299,8 @@ namespace ReallifeGamemode.Server.Managers
targetUser.Group = null; targetUser.Group = null;
targetUser.GroupRank = GroupRank.NONE; targetUser.GroupRank = GroupRank.NONE;
ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Gruppe geworfen."); ChatService.SendMessage(player, "!{02FCFF}Du hast " + targetPlayer.Name + " aus der Gruppe geworfen.");
ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Gruppe geworfen."); ChatService.SendMessage(targetPlayer, "!{02FCFF}Du wurdest von " + player.Name + " aus der Gruppe geworfen.");
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
@@ -834,6 +840,7 @@ namespace ReallifeGamemode.Server.Managers
{ {
Medic.AddTaskToList(healTask); Medic.AddTaskToList(healTask);
player.SetData("healauftrag", true); player.SetData("healauftrag", true);
player.SendNotification("~w~Du hast einen Sanitäter um Hilfe gerufen");
ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat soeben einen Serviceauftrag beantragt.", new List<int>() { 2 }); ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat soeben einen Serviceauftrag beantragt.", new List<int>() { 2 });
} }
} }

View File

@@ -19,7 +19,7 @@ namespace ReallifeGamemode.Server.Managers
{ {
private static List<JobBase> _jobs = new List<JobBase>(); private static List<JobBase> _jobs = new List<JobBase>();
private Dictionary<Player, Vector3> playerJobStartPosition = new Dictionary<Player, Vector3>(); public static Dictionary<Player, Vector3> playerJobStartPosition = new Dictionary<Player, Vector3>();
public static void LoadJobs() public static void LoadJobs()
{ {
@@ -160,68 +160,15 @@ namespace ReallifeGamemode.Server.Managers
if (u.JobId == null) return; if (u.JobId == null) return;
JobBase job = GetJob(u.JobId.Value); JobBase job = GetJob(u.JobId ?? -1);
if (veh.GetServerVehicle() is JobVehicle vehJ && player.VehicleSeat == 0)
{ if (job == null || !job.GetUsersInJob().Contains(player))
if (vehJ.GetJob().GetUsersInJob().Contains(player))
{
if (u.JobId != 2)
{
if (!player.HasData("JobVehicleFrei") || player.GetData<bool>("JobVehicleFrei") == false)
{
player.SetData("DelayTime", 30000);
veh.SetData("timerJobVehicleRespawn", true);
player.SetData("LastVehicle", veh);
player.SetData("LastSVehicle", sVeh);
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
}
PlayerTimer playerTimer = new PlayerTimer(player, veh, 30000);
playerTimer.Elapsed += PlayerTimer_Elapsed;
playerTimersJobVehicleRespawn[player] = playerTimer;
player.SendChatMessage("~y~[JOB] ~w~Du hast das Fahrzeug verlassen,");
player.SendChatMessage("~y~[JOB] ~w~Bist du nicht in 30 Sekunden zurück, ~r~wird der Job beendet!");
//job.StopJob(player);
return; return;
}
if (player.HasData("JobVehicleFrei") && player.GetData<bool>("JobVehicleFrei") == true) job.StartJobEndTimer(player);
{
player.SetData("JobVehicleFrei", false);
return;
}
}
if (u.JobId == 2)
{
if (!player.HasData("JobVehicleFrei") || player.GetData<bool>("JobVehicleFrei") == false)
{
player.SetData("DelayTime", 60000 * 5);
veh.SetData("timerJobVehicleRespawn", true);
player.SetData("LastVehicle", veh);
player.SetData("LastSVehicle", sVeh);
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
}
PlayerTimer playerTimer = new PlayerTimer(player, veh, 60000 * 5);
playerTimer.Elapsed += PlayerTimer_Elapsed;
playerTimersJobVehicleRespawn[player] = playerTimer;
//player.SendChatMessage("~y~[JOB] ~w~Du hast das Fahrzeug verlassen,");
//player.SendChatMessage("~y~[JOB] ~w~Bist du nicht in 30 Sekunden zurück, ~r~wird der Job beendet!");
//job.StopJob(player);
return;
}
if (player.HasData("JobVehicleFrei") && player.GetData<bool>("JobVehicleFrei") == true)
{
player.SetData("JobVehicleFrei", false);
return;
}
}
}
}
} }
private void PlayerTimer_Elapsed(Player player, Vehicle veh) public void PlayerTimer_Elapsed(Player player, Vehicle veh)
{ {
NAPI.Task.Run(() => NAPI.Task.Run(() =>
{ {
@@ -256,30 +203,30 @@ namespace ReallifeGamemode.Server.Managers
if (player.GetUser().JobId == 1)//Taxifahrer if (player.GetUser().JobId == 1)//Taxifahrer
{ {
player.TriggerEvent("CLIENT:stopFare"); player.TriggerEvent("CLIENT:stopFare");
player.Position = new Vector3(-628.598388671875, -2107.609130859375, 6.072586536407471); player.SafeTeleport(new Vector3(-628.598388671875, -2107.609130859375, 6.072586536407471));
player.Heading = (-171.50303649902344f); player.Heading = (-171.50303649902344f);
} }
if (player.GetUser().JobId == 2)//Müllmann if (player.GetUser().JobId == 2)//Müllmann
{ {
player.Position = new Vector3(485.4114685058594, -2173.25, 5.918273448944092); player.SafeTeleport(new Vector3(485.4114685058594, -2173.25, 5.918273448944092));
player.Heading = (-15.922085762023926f); player.Heading = (-15.922085762023926f);
} }
if (player.GetUser().JobId == 3)//Pilot if (player.GetUser().JobId == 3)//Pilot
{ {
if (!player.HasData("PilotenBase") || player.GetData<int>("PilotenBase") == 1) //Sandyshores if (!player.HasData("PilotenBase") || player.GetData<int>("PilotenBase") == 1) //Sandyshores
{ {
player.Position = new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406); player.SafeTeleport(new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406));
player.Heading = (-154.65234375f); player.Heading = (-154.65234375f);
} }
if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 2) //LS Airport if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 2) //LS Airport
{ {
player.Position = new Vector3(-1622.48, -3151.58, 13); player.SafeTeleport(new Vector3(-1622.48, -3151.58, 13));
player.Heading = (48.44f); player.Heading = (48.44f);
} }
} }
if (player.GetUser().JobId == 4)//Busfahrer if (player.GetUser().JobId == 4)//Busfahrer
{ {
player.Position = new Vector3(-535.46, -2144.97, 5.95); player.SafeTeleport(new Vector3(-535.46, -2144.97, 5.95));
player.Heading = (57.03f); player.Heading = (57.03f);
} }
} }
@@ -311,44 +258,7 @@ namespace ReallifeGamemode.Server.Managers
} }
job.StopJob(player); job.StopJob(player);
if (player.GetUser().JobId == 1)//Taxifahrer
{
//player.Position = new Vector3(-628.598388671875, -2107.609130859375, 6.072586536407471);
//player.Heading = (-171.50303649902344f);
player.Position = playerJobStartPosition[player];
}
if (player.GetUser().JobId == 2)//Müllmann
{
player.Position = new Vector3(485.4114685058594, -2173.25, 5.918273448944092);
player.Heading = (-15.922085762023926f);
}
if (player.GetUser().JobId == 3)//Pilot
{
if (player.HasData("PilotenBase") || player.GetData<int>("PilotenBase") == 1) //Sandyshores
{
player.Position = new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406);
player.Heading = (-154.65234375f);
player.GetUser().SetData("PilotenBase", 0);
}
if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 2) //LS Airport
{
player.Position = new Vector3(-1622.48, -3151.58, 13);
player.Heading = (48.44f);
player.GetUser().SetData("PilotenBase", 0);
}
}
if (player.GetUser().JobId == 4)//Busfahrer
{
player.Position = new Vector3(-535.46, -2144.97, 5.95);
player.Heading = (57.03f);
}
Vehicle LastVehicle = player.GetData<Vehicle>("LastVehicle");
if (LastVehicle != null && job.Id != GetJob<RefuseCollectorJob>().Id)
{
LastVehicle.ResetData("timerJobVehicleRespawn");
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(LastVehicle);
ServerVehicleExtensions.Spawn(sVeh, LastVehicle);
}
if (playerTimersJobVehicleRespawn.ContainsKey(player)) if (playerTimersJobVehicleRespawn.ContainsKey(player))
{ {
playerTimersJobVehicleRespawn[player].Stop(); playerTimersJobVehicleRespawn[player].Stop();
@@ -360,181 +270,15 @@ namespace ReallifeGamemode.Server.Managers
[ServerEvent(Event.PlayerEnterVehicle)] [ServerEvent(Event.PlayerEnterVehicle)]
public void JobManagerPlayerEnterVehicle(Player player, Vehicle veh, sbyte seat) public void JobManagerPlayerEnterVehicle(Player player, Vehicle veh, sbyte seat)
{ {
ServerVehicle sVeh = veh.GetServerVehicle();
if (sVeh == null)
{
return;
}
if (seat != 0)
{
if (sVeh is JobVehicle jV && jV.JobId == 1) // Spieler steigt in Taxi ein
{
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
Player driver = veh.GetDriver();
if (driver == null)
{
return;
}
if (!driver.HasData("DriverPrice")) return;
int taxiPrice = driver.GetData<int>("DriverPrice");
float km = 0;
if (!driver.HasData("FareKm")) { driver.SetData<float>("FareKm", km); }
km = driver.GetData<float>("FareKm");
if (driver.HasData("Passager")) return;
driver.SetData<int>("Passager", player.GetUser().Id);
driver.SetData<bool>("hasPassager", true);
/* using (var dbContext = new DatabaseContext())
{
int amount = (int)Math.Round(km * taxiPrice);
User contractUser = player.GetUser(dbContext);
contractUser.Handmoney -= amount;
driver.GetUser(dbContext).Wage += amount;
dbContext.SaveChanges();
//contractUser.Player.TriggerEvent("SERVER:SET_HANDMONEY", contractUser.Handmoney);
} */
player.TriggerEvent("CLIENT:startCustomerFare", taxiPrice, km);
var taxiContracts = taxiJob.TaxiContracts.Where(t => t.Name == player.Name);
if (taxiContracts.Count() == 0) return;
var contract = taxiContracts.First();
taxiJob.TaxiContracts.Remove(contract);
if (driver != null && contract.Driver != null && contract.Driver.Handle != veh.GetDriver().Handle)
{
ChatService.SendMessage(contract.Driver, $"!{{02FCFF}}{player.Name} ist in ein Taxi eingestiegen, der Auftrag wurde beendet.");
ChatService.SendMessage(player, $"!{{02FCFF}}Du bist in ein Taxi eingestiegen, der Auftrag wurde beendet.");
}
}
}
JobBase job = GetJob(player.GetUser().JobId ?? -1); JobBase job = GetJob(player.GetUser().JobId ?? -1);
if (job?.GetUsersInJob()?.Contains(player) ?? false)
if (job != null && job.GetUsersInJob().Contains(player) && job.CheckVehicle(player, veh) && seat == 0)
{ {
if (sVeh != null) if (!playerTimersJobVehicleRespawn.ContainsKey(player))
{
if (sVeh is JobVehicle JV)
{
if (player.GetUser().JobId == 3 || player.GetUser().JobId == 4)
{
if (seat == 0)
{
JobVehicle c = new JobVehicle();
if (JV.GetJob().GetUsersInJob().Contains(player))
{
if (!player.HasData("LastVehicle") || player.GetData<Vehicle>("LastVehicle") == null) return;
if (player.HasData("LastVehicle") && veh == player.GetData<Vehicle>("LastVehicle"))
{
veh.SetData("timerJobVehicleRespawn", false);
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
}
}
else
{
if (player.GetData<bool>("HatRoute") == true)
{
StopJob(player);
}
}
}
}
else
{
job.StopJob(player);
ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet.");
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
}
CheckPointHandle.DeleteCheckpoints(player);
if (!player.HasData("LastVehicle") || player.GetData<Vehicle>("LastVehicle") == null) return;
player.GetData<Vehicle>("LastVehicle").ResetData("timerJobVehicleRespawn");
ServerVehicle nsSVeh = VehicleManager.GetServerVehicleFromVehicle(player.GetData<Vehicle>("LastVehicle"));
ServerVehicleExtensions.Spawn(nsSVeh, player.GetData<Vehicle>("LastVehicle"));
return; return;
}
}
if (player.GetUser().JobId == 2)
{
JobVehicle c = new JobVehicle();
if (JV.GetJob().GetUsersInJob().Contains(player))
{
if (!player.HasData("LastVehicle") || player.GetData<Vehicle>("LastVehicle") == null) return;
if (player.HasData("LastVehicle") && veh == player.GetData<Vehicle>("LastVehicle"))
{
veh.SetData("timerJobVehicleRespawn", false);
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop(); playerTimersJobVehicleRespawn[player].Stop();
} playerTimersJobVehicleRespawn.Remove(player);
}
else
{
if (player.GetData<bool>("HatRoute") == true)
{
StopJob(player);
}
}
}
}
}
else
{
job.StopJob(player);
ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet.");
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
}
CheckPointHandle.DeleteCheckpoints(player);
if (!player.HasData("LastVehicle"))
{
return;
}
if (player.GetData<Vehicle>("LastVehicle") == null)
{
return;
}
player.GetData<Vehicle>("LastVehicle").ResetData("timerJobVehicleRespawn");
ServerVehicle nsSVeh = VehicleManager.GetServerVehicleFromVehicle(player.GetData<Vehicle>("LastVehicle"));
ServerVehicleExtensions.Spawn(nsSVeh, player.GetData<Vehicle>("LastVehicle"));
}
}
else if (sVeh! is JobVehicle || veh != null)
{
job.StopJob(player);
ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet.");
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
}
CheckPointHandle.DeleteCheckpoints(player);
if (!player.HasData("LastVehicle") || player.GetData<Vehicle>("LastVehicle") == null) return;
player.GetData<Vehicle>("LastVehicle").ResetData("timerJobVehicleRespawn");
ServerVehicle nsSVeh = VehicleManager.GetServerVehicleFromVehicle(player.GetData<Vehicle>("LastVehicle"));
ServerVehicleExtensions.Spawn(nsSVeh, player.GetData<Vehicle>("LastVehicle"));
}
else if (sVeh is JobVehicle JV)
{
if (JV.JobId != player.GetUser().JobId)
{
job.StopJob(player);
ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet.");
if (playerTimersJobVehicleRespawn.ContainsKey(player))
{
playerTimersJobVehicleRespawn[player].Stop();
}
CheckPointHandle.DeleteCheckpoints(player);
if (!player.HasData("LastVehicle") || player.GetData<Vehicle>("LastVehicle") == null) return;
player.GetData<Vehicle>("LastVehicle").ResetData("timerJobVehicleRespawn");
ServerVehicle nsSVeh = VehicleManager.GetServerVehicleFromVehicle(player.GetData<Vehicle>("LastVehicle"));
ServerVehicleExtensions.Spawn(nsSVeh, player.GetData<Vehicle>("LastVehicle"));
}
}
} }
} }
@@ -559,29 +303,6 @@ namespace ReallifeGamemode.Server.Managers
[ServerEvent(Event.PlayerExitVehicle)] [ServerEvent(Event.PlayerExitVehicle)]
public void JobManagerPlayerExitVehicle2(Player player, Vehicle veh) public void JobManagerPlayerExitVehicle2(Player player, Vehicle veh)
{ {
ServerVehicle sVeh = veh.GetServerVehicle();
if (sVeh == null) return;
if (sVeh is JobVehicle jV && jV.JobId == 1) // Spieler steigt vom Taxi aus
{
var taxiJob = JobManager.GetJob<TaxiDriverJob>();
if (veh.Occupants.Count == 0) return;
Player driver = veh.GetDriver();
if (driver == null) return;
if (player.GetUser().Id != driver.GetData<int>("Passager")) { player.TriggerEvent("CLIENT:cancelFare"); return; }
player.TriggerEvent("CLIENT:cancelFareCustomer");
driver.TriggerEvent("CLIENT:resetFareClock");
driver.ResetData("Passager");
driver.ResetData("hasPassager");
driver.SetData<float>("FareKm", 0);
driver.TriggerEvent("CLIENT:cancelFare");
driver.TriggerEvent("CLIENT:startFare");
foreach (Player occupant in veh.Occupants)
{
if (occupant == driver) continue;
occupant.WarpOutOfVehicle();
}
}
} }
[RemoteEvent("CLIENT:JobManager_TaxiJob_AcceptCall")] [RemoteEvent("CLIENT:JobManager_TaxiJob_AcceptCall")]

View File

@@ -5,6 +5,7 @@ using ReallifeGamemode.Server.Shop.Clothing;
using ReallifeGamemode.Server.Shop.SevenEleven; using ReallifeGamemode.Server.Shop.SevenEleven;
using ReallifeGamemode.Server.Shop.Friseur; using ReallifeGamemode.Server.Shop.Friseur;
using ReallifeGamemode.Server.Util; using ReallifeGamemode.Server.Util;
using ReallifeGamemode.Server.Extensions;
namespace ReallifeGamemode.Server.Managers namespace ReallifeGamemode.Server.Managers
{ {
@@ -162,13 +163,17 @@ namespace ReallifeGamemode.Server.Managers
{ {
Position = new Vector3(485.4114685058594, -2173.25, 5.918273448944092), Position = new Vector3(485.4114685058594, -2173.25, 5.918273448944092),
jobId = 2, jobId = 2,
Skill = 0 Skill = 0,
eventOnStart = false,
eventName = ""
}; };
JobPoint jobPointPilot = new JobPoint() JobPoint jobPointPilot = new JobPoint()
{ {
Position = new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406), Position = new Vector3(1707.2711181640625, 3276.216064453125, 41.155494689941406),
jobId = 3, jobId = 3,
Skill = 0 Skill = 0,
eventOnStart = false,
eventName = ""
}; };
JobPoint jobPointPilot2 = new JobPoint() JobPoint jobPointPilot2 = new JobPoint()
{ {
@@ -289,7 +294,7 @@ namespace ReallifeGamemode.Server.Managers
return; return;
} }
player.Position = ElevatorPoints.Where(e => e.Stage == level).First().Position; player.SafeTeleport(ElevatorPoints.Where(e => e.Stage == level).First().Position);
} }
} }
} }
@@ -392,6 +397,8 @@ public class JobPoint
public Vector3 Position { get; set; } public Vector3 Position { get; set; }
public int jobId { get; set; } public int jobId { get; set; }
public int Skill { get; set; } public int Skill { get; set; }
public bool eventOnStart { get; set; }
public string eventName { get; set; }
} }
public class ElevatorPoint public class ElevatorPoint

View File

@@ -893,14 +893,15 @@ namespace ReallifeGamemode.Server.Managers
public static ServerVehicle GetServerVehicleFromVehicle(Vehicle veh, DatabaseContext dbContext = null) public static ServerVehicle GetServerVehicleFromVehicle(Vehicle veh, DatabaseContext dbContext = null)
{ {
if (veh == null)
{
return null;
}
dbContext = dbContext ?? new DatabaseContext(); dbContext = dbContext ?? new DatabaseContext();
foreach (KeyValuePair<int, NetHandle> pair in _serverVehicles) foreach (KeyValuePair<int, NetHandle> pair in _serverVehicles)
{ {
if (veh == null)
{
continue;
}
if (pair.Value == veh.Handle) if (pair.Value == veh.Handle)
{ {

View File

@@ -94,13 +94,28 @@ namespace ReallifeGamemode.Server.Services
/// </summary> /// </summary>
/// <param name="message">Die Nachricht, die gesendet werden soll</param> /// <param name="message">Die Nachricht, die gesendet werden soll</param>
/// <param name="minLevel">Das mindest Admin Level, das für das Erhalten dieser Nachricht benötigt wird</param> /// <param name="minLevel">Das mindest Admin Level, das für das Erhalten dieser Nachricht benötigt wird</param>
public static void BroadcastAdmin(string message, AdminLevel minLevel) public static void BroadcastAdmin(string message, AdminLevel minLevel, Func<Player, string> getAddInfoMessage = null, Predicate<Player> shouldSendMessage = null)
{ {
NAPI.Pools.GetAllPlayers().ForEach(p => NAPI.Pools.GetAllPlayers().ForEach(p =>
{ {
if (p.GetUser()?.IsAdmin(minLevel) ?? false) if (p.GetUser()?.IsAdmin(minLevel) ?? false)
{ {
ChatService.SendMessage(p, message); if(shouldSendMessage != null)
{
if(!shouldSendMessage(p))
{
return;
}
}
string toSend = message;
if(getAddInfoMessage != null)
{
toSend += getAddInfoMessage(p);
}
ChatService.SendMessage(p, toSend);
} }
}); });
} }

View File

@@ -3,254 +3,43 @@ using System.Linq;
using GTANetworkAPI; using GTANetworkAPI;
using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Job; using ReallifeGamemode.Server.Job;
using ReallifeGamemode.Server.Managers;
namespace ReallifeGamemode.Server.Util namespace ReallifeGamemode.Server.Util
{ {
public class CheckPointHandle : Script public static class CheckPointHandle
{ {
public int BusSkill1RouteVerdienst = 1000; public static int PilotSkill1RouteVerdienst = 1100;
public int BusSkill2RouteVerdienst = 1300; public static int PilotSkill2RouteVerdienst = 1500;
public int BusSkill3RouteVerdienst = 1600;
public int PilotSkill1RouteVerdienst = 1100;
public int PilotSkill2RouteVerdienst = 1500;
public static List<CheckPointListForPlayer> listHandle = new List<CheckPointListForPlayer>(); public static List<CheckPointListForPlayer> listHandle = new List<CheckPointListForPlayer>();
public static void DeleteCheckpoints(Player player) public static void DeleteCheckpoints(Player player)
{ {
player.SetData("HatRoute", false);
player.ResetData("Route");
RemovePlayerHandlerFromList(player); RemovePlayerHandlerFromList(player);
player.TriggerEvent("destroyCP"); player.TriggerEvent("destroyCP");
} }
public static void StartCheckPointRoute(Player player, IEnumerable<Vector3> nListCps, int delay, int markerID, int markerSize, int markerDist, bool useVehicle, string nEvent) public static void StartCheckPointRoute(this Player player, IEnumerable<Vector3> nListCps, int delay, int markerID, int markerSize, int markerDist, bool useVehicle, string nEvent)
{ {
RemovePlayerHandlerFromList(player); RemovePlayerHandlerFromList(player);
CheckPointListForPlayer playerHandle = new CheckPointListForPlayer(player, nListCps, delay, markerID, markerSize, markerDist, useVehicle, nEvent); CheckPointListForPlayer playerHandle = new CheckPointListForPlayer(player, nListCps, delay, markerID, markerSize, markerDist, useVehicle, nEvent);
playerHandle.DeleteCheckpoints(); playerHandle.DeleteCheckpoints();
listHandle.Add(playerHandle); listHandle.Add(playerHandle);
player.ResetData("Route");
playerHandle.StartRoute(); playerHandle.StartRoute();
player.SetData("HatRoute", true);
/*if(player.GetUser().BusSkill >= 1000)
{
playerHandle.LastCheckpoint = 2;
}*/
} }
public static void RemovePlayerHandlerFromList(Player player) public static void RemovePlayerHandlerFromList(this Player player)
{ {
CheckPointListForPlayer temp = null;
for (int a = 0; a < listHandle.Count; a++) for (int a = 0; a < listHandle.Count; a++)
{ {
temp = listHandle[a]; CheckPointListForPlayer temp = listHandle[a];
if (temp.player == player) if (temp.player == player)
{ {
listHandle.Remove(temp); listHandle.Remove(temp);
} }
} }
} }
[RemoteEvent("playerWaitsInCheckpoint")]
public void PlayerWaitsInCheckpoint(Player user)
{
if (user.GetUser().JobId == 4)
{
Job.JobBase job = Managers.JobManager.GetJob(user.GetUser().JobId ?? -1);
if (job.GetUsersInJob().Contains(user))
{
if (!user.IsInVehicle || user.VehicleSeat != 0) return;
Vehicle veh = user.Vehicle;
user.TriggerEvent("CLIENT:FreezeVehicle", veh);
user.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
user.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AnfahrtHaltestelle", "wav", 50);
if ((VehicleHash)veh.Model == VehicleHash.Bus)
{
user.TriggerEvent("CLIENT:SetDoorOpen", 0, false, false);
user.TriggerEvent("CLIENT:SetDoorOpen", 1, false, false);
user.TriggerEvent("CLIENT:SetDoorOpen", 2, false, false);
user.TriggerEvent("CLIENT:SetDoorOpen", 3, false, false);
user.TriggerEvent("CLIENT:SetDoorOpen", 0, false, false);
NAPI.Task.Run(() =>
{
BusCheckpoint(user);
}, delayTime: 3600);
}
if ((VehicleHash)veh.Model == VehicleHash.Coach)
{
user.TriggerEvent("CLIENT:SetDoorOpen", 0, false, false);
NAPI.Task.Run(() =>
{
BusCheckpoint(user);
}, delayTime: 2800);
}
if ((VehicleHash)veh.Model == VehicleHash.Tourbus)
{
user.TriggerEvent("CLIENT:SetDoorOpen", 2, false, false);
user.TriggerEvent("CLIENT:SetDoorOpen", 3, false, false);
NAPI.Task.Run(() =>
{
BusCheckpoint(user);
}, delayTime: 3250);
}
if (!(veh.GetData<IndicatorData>("indicatorData") is IndicatorData data)) data = new IndicatorData();
data.Left = false;
data.Right = true;
veh.SetData("indicatorData", data);
NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right);
/*NAPI.Task.Run(() =>
{
veh.Position = new Vector3(veh.Position.X, veh.Position.Y, veh.Position.Z + 0.25);
}, delayTime: 500);*/
NAPI.Task.Run(() =>
{
veh.Position = new Vector3(veh.Position.X, veh.Position.Y, veh.Position.Z + 0.1);
user.TriggerEvent("CLIENT:FreezeVehicle", veh);
}, delayTime: 500);
}
}
}
public static void BusCheckpoint(Player user)
{
if (!user.IsInVehicle || user.VehicleSeat != 0) return;
Vehicle veh = user.Vehicle;
if ((VehicleHash)veh.Model == VehicleHash.Bus)
{
user.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleBus", "wav", 25);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 0, false, 1850);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 1, false, 1850);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 2, false, 1850);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 1850);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 0, false, 1850);
NAPI.Task.Run(() =>
{
user.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
}, delayTime: 1850);
}
if ((VehicleHash)veh.Model == VehicleHash.Coach)
{
user.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleCoach", "wav", 35);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 0, false, 1000);
NAPI.Task.Run(() =>
{
user.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
}, delayTime: 1000);
}
if ((VehicleHash)veh.Model == VehicleHash.Tourbus)
{
user.TriggerEvent("CLIENT:PlaySound", "jobs/busfahrer/AbfahrtHaltestelleTourbus", "wav", 25);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 2600);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 2, false, 2600);
user.TriggerEvent("CLIENT:SetDoorShutDelayed", 3, false, 2600);
NAPI.Task.Run(() =>
{
user.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
}, delayTime: 2600);
}
//user.TriggerEvent("CLIENT:UnFreezeVehicle", veh);
}
[RemoteEvent("playerInCheckpoint")]
public void PlayerInCheckpoint(Player user)
{
CheckPointListForPlayer temp = null;
for (int a = 0; a < listHandle.Count; a++)
{
temp = listHandle[a];
if (temp.player == user)
{
break;
}
}
if (temp.LastCheckpoint != 1)
{
Job.JobBase job = Managers.JobManager.GetJob(user.GetUser().JobId ?? -1);
if (job?.GetUsersInJob().Contains(user) ?? false)
{
if (user.GetUser().JobId == 3)
{
if (temp.checkPointsDone == 2)
{
if (user.GetData<string>("Route") == "Skill1Route1" || user.GetData<string>("Route") == "Skill1Route2" || user.GetData<string>("Route") == "Skill1Route3")
{
PilotJob.payWage(user, PilotSkill1RouteVerdienst / temp.list.Count());
PilotJob.payWage(user, PilotSkill1RouteVerdienst / temp.list.Count());
}
if (user.GetData<string>("Route") == "Skill2Route1" || user.GetData<string>("Route") == "Skill2Route2" || user.GetData<string>("Route") == "Skill2Route3")
{
PilotJob.payWage(user, PilotSkill2RouteVerdienst / temp.list.Count());
PilotJob.payWage(user, PilotSkill2RouteVerdienst / temp.list.Count());
}
}
if (temp.checkPointsDone > 2)
{
if (user.GetData<string>("Route") == "Skill1Route1" || user.GetData<string>("Route") == "Skill1Route2" || user.GetData<string>("Route") == "Skill1Route3")
{
PilotJob.payWage(user, PilotSkill1RouteVerdienst / temp.list.Count());
}
if (user.GetData<string>("Route") == "Skill2Route1" || user.GetData<string>("Route") == "Skill2Route2" || user.GetData<string>("Route") == "Skill2Route3")
{
PilotJob.payWage(user, PilotSkill2RouteVerdienst / temp.list.Count());
}
}
//PilotJob.payWage(user, 100);
}
if (user.GetUser().JobId == 4)
{
if (temp.checkPointsDone == 2)
{
if (user.GetData<string>("Route") == "Skill1Route1" || user.GetData<string>("Route") == "Skill1Route2" || user.GetData<string>("Route") == "Skill1Route3" || user.GetData<string>("Route") == "Skill1Route4")
{
BusDriverJob.payWage(user, BusSkill1RouteVerdienst / temp.list.Count());
BusDriverJob.payWage(user, BusSkill1RouteVerdienst / temp.list.Count());
}
if (user.GetData<string>("Route") == "Skill2Route1" || user.GetData<string>("Route") == "Skill2Route2" || user.GetData<string>("Route") == "Skill2Route3" || user.GetData<string>("Route") == "Skill2Route4")
{
BusDriverJob.payWage(user, BusSkill2RouteVerdienst / temp.list.Count());
BusDriverJob.payWage(user, BusSkill2RouteVerdienst / temp.list.Count());
}
if (user.GetData<string>("Route") == "Skill3Route1" || user.GetData<string>("Route") == "Skill3Route2" || user.GetData<string>("Route") == "Skill3Route3" || user.GetData<string>("Route") == "Skill3Route4")
{
BusDriverJob.payWage(user, BusSkill3RouteVerdienst / temp.list.Count());
BusDriverJob.payWage(user, BusSkill3RouteVerdienst / temp.list.Count());
}
}
if (temp.checkPointsDone > 2)
{
if (user.GetData<string>("Route") == "Skill1Route1" || user.GetData<string>("Route") == "Skill1Route2" || user.GetData<string>("Route") == "Skill1Route3" || user.GetData<string>("Route") == "Skill1Route4")
{
BusDriverJob.payWage(user, BusSkill1RouteVerdienst / temp.list.Count());
}
if (user.GetData<string>("Route") == "Skill2Route1" || user.GetData<string>("Route") == "Skill2Route2" || user.GetData<string>("Route") == "Skill2Route3" || user.GetData<string>("Route") == "Skill2Route4")
{
BusDriverJob.payWage(user, BusSkill2RouteVerdienst / temp.list.Count());
}
if (user.GetData<string>("Route") == "Skill3Route1" || user.GetData<string>("Route") == "Skill3Route2" || user.GetData<string>("Route") == "Skill3Route3" || user.GetData<string>("Route") == "Skill3Route4")
{
BusDriverJob.payWage(user, BusSkill3RouteVerdienst / temp.list.Count());
}
}
//BusDriverJob.payWage(user, 100);
if (!user.IsInVehicle || user.VehicleSeat != 0) return;
Vehicle veh = user.Vehicle;
if (!(veh.GetData<IndicatorData>("indicatorData") is IndicatorData data)) data = new IndicatorData();
data.Left = false;
data.Right = false;
veh.SetData("indicatorData", data);
NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right);
//BusCheckpoint(user);
}
}
}
else
{
}
temp.NextCheckpoint();
}
} }
public class CheckPointListForPlayer public class CheckPointListForPlayer
@@ -303,25 +92,10 @@ namespace ReallifeGamemode.Server.Util
LastCheckpoint = 0; LastCheckpoint = 0;
CheckPointHandle.RemovePlayerHandlerFromList(this.player); CheckPointHandle.RemovePlayerHandlerFromList(this.player);
DeleteCheckpoints(); DeleteCheckpoints();
player.SetData("HatRoute", false);
if (player.GetUser().JobId == 3 && player.HasData("Route")) JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1);
{ if (job != null && job.GetUsersInJob().Contains(player))
//PilotJob.payWage(player, 200); job.LastCheckpoint(player);
PilotJob.PilotLetzterCheckpoint(player);
}
else if (player.GetUser().JobId == 4 && player.HasData("Route"))
{
//BusDriverJob.payWage(player, 200);
//CheckPointHandle.BusCheckpoint(player);
BusDriverJob.BusLetzterCheckpoint(player);
if (!player.IsInVehicle || player.VehicleSeat != 0) return;
Vehicle veh = player.Vehicle;
if (!(veh.GetData<IndicatorData>("indicatorData") is IndicatorData data)) data = new IndicatorData();
data.Left = false;
data.Right = false;
veh.SetData("indicatorData", data);
NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right);
}
} }
//NAPI.Chat.SendChatMessageToAll($"this.list.Count() = {this.list.Count()}, checkPointsDone = {checkPointsDone}, LastCheckpoint = {LastCheckpoint}"); //NAPI.Chat.SendChatMessageToAll($"this.list.Count() = {this.list.Count()}, checkPointsDone = {checkPointsDone}, LastCheckpoint = {LastCheckpoint}");
} }
@@ -331,4 +105,45 @@ namespace ReallifeGamemode.Server.Util
this.player.TriggerEvent("destroyCP"); this.player.TriggerEvent("destroyCP");
} }
} }
public class CheckPointEvents : Script
{
[RemoteEvent("playerWaitsInCheckpoint")]
public void PlayerWaitsInCheckpoint(Player player)
{
JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1);
if (job == null || !job.GetUsersInJob().Contains(player))
return;
if (job.Id == JobManager.GetJob<BusDriverJob>().Id)
JobManager.GetJob<BusDriverJob>().AtBusStop(player);
}
[RemoteEvent("playerInCheckpoint")]
public void PlayerInCheckpoint(Player user)
{
CheckPointListForPlayer temp = null;
for (int a = 0; a < CheckPointHandle.listHandle.Count; a++)
{
temp = CheckPointHandle.listHandle[a];
if (temp.player == user)
{
break;
}
}
if (temp.LastCheckpoint != 1)
{
if (!user.IsInVehicle || user.VehicleSeat != 0) return;
Vehicle veh = user.Vehicle;
if (!(veh.GetData<IndicatorData>("indicatorData") is IndicatorData data)) data = new IndicatorData();
data.Left = false;
data.Right = false;
veh.SetData("indicatorData", data);
NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right);
//BusCheckpoint(user);
}
temp.NextCheckpoint();
}
}
} }

View File

@@ -36,10 +36,10 @@ namespace ReallifeGamemode.Server.Util
public static void ResetPlayer(Player player, User user, DatabaseContext dbContext) public static void ResetPlayer(Player player, User user, DatabaseContext dbContext)
{ {
if (player.GetData<bool>("duty") == true) if (user.GetData<bool>("duty") == true)
{ {
player.SetData<bool>("duty", false); user.SetData("duty", false);
Medic.UpdateDutyMedics(-1); Medic.UpdateDutyMedics();
} }
var userClothes = dbContext.CharacterClothes.Where(c => c.UserId == user.Id && c.Duty == true); var userClothes = dbContext.CharacterClothes.Where(c => c.UserId == user.Id && c.Duty == true);

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using GTANetworkAPI; using GTANetworkAPI;
namespace ReallifeGamemode.Server.Util namespace ReallifeGamemode.Server.Util
@@ -14,5 +15,8 @@ namespace ReallifeGamemode.Server.Util
{ "iCroniX", "Life of Malle - Eimer für Alle - Alle für Malle - Böllern! (CroniX)" }, { "iCroniX", "Life of Malle - Eimer für Alle - Alle für Malle - Böllern! (CroniX)" },
{ "balboistderbeste", "Hurra! Hurra! Der Balbo ist jetzt da! (balbo)" }, { "balboistderbeste", "Hurra! Hurra! Der Balbo ist jetzt da! (balbo)" },
}; };
public static DateTime CountdownUntil { get; internal set; }
public static string CountdownText { get; internal set; }
} }
} }

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

@@ -11,6 +11,7 @@ using ReallifeGamemode.Services;
using System.Diagnostics; using System.Diagnostics;
using Newtonsoft.Json; using Newtonsoft.Json;
using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Util;
namespace ReallifeGamemode.Server.Wanted namespace ReallifeGamemode.Server.Wanted
{ {
@@ -18,7 +19,6 @@ namespace ReallifeGamemode.Server.Wanted
{ {
private static Dictionary<int, int> Jailtime { get; set; } = new Dictionary<int, int>(); //time in seconds private static Dictionary<int, int> Jailtime { get; set; } = new Dictionary<int, int>(); //time in seconds
public static void Check_PutBehindBars(User user) public static void Check_PutBehindBars(User user)
{ {
user.SetBlipAndNametagColor(); user.SetBlipAndNametagColor();
@@ -27,16 +27,22 @@ namespace ReallifeGamemode.Server.Wanted
if (user.JailTime > 0) if (user.JailTime > 0)
{ {
player.RemoveAllWeapons(); player.RemoveAllWeapons();
player.Health = 100; player.ClearAttachments();
player.ClearAnimation();
player.SafeSetHealth(100);
player.Armor = 0; player.Armor = 0;
Random rnd = new Random(); Random rnd = new Random();
int rndInt = rnd.Next(1, 3); int rndInt = rnd.Next(1, 3);
Vector3 position = new Vector3();
if (rndInt == 1) if (rndInt == 1)
NAPI.Player.SpawnPlayer(player, new Vector3(458.9842, -997.2126, 24.91485)); //send client to jail position = new Vector3(458.9842, -997.2126, 24.91485); //send client to jail
if (rndInt == 2) if (rndInt == 2)
NAPI.Player.SpawnPlayer(player, new Vector3(459.696, -994.3766, 24.91486)); //send client to jail position = new Vector3(459.696, -994.3766, 24.91486); //send client to jail
if (rndInt == 3) if (rndInt == 3)
NAPI.Player.SpawnPlayer(player, new Vector3(458.3372, -1001.258, 24.91485)); //send client to jail position = new Vector3(458.3372, -1001.258, 24.91485); //send client to jail
player.SafeTeleport(position, 0, true);
Jailtime[user.Id] = user.JailTime; // 54 sec for each wanted star -> in total 45min for 50 Wanteds Jailtime[user.Id] = user.JailTime; // 54 sec for each wanted star -> in total 45min for 50 Wanteds
int timeMinutes; int timeMinutes;
@@ -133,7 +139,7 @@ namespace ReallifeGamemode.Server.Wanted
if (user.JailTime <= 0) if (user.JailTime <= 0)
{ {
Jailtime.Remove(user.Id); Jailtime.Remove(user.Id);
player.Position = new Vector3(427.879, -984.65, 30.71); player.SafeTeleport(new Vector3(427.879, -984.65, 30.71));
player.TriggerEvent("jailTime", 0); player.TriggerEvent("jailTime", 0);
return; return;
} }
@@ -153,7 +159,7 @@ namespace ReallifeGamemode.Server.Wanted
} }
player.TriggerEvent("jailTime", timeMinutes); player.TriggerEvent("jailTime", timeMinutes);
player.Health = 100; player.SafeSetHealth(100);
} }
} }
} }
@@ -176,10 +182,10 @@ namespace ReallifeGamemode.Server.Wanted
player.GetUser(dbContext).JailTime = 0; player.GetUser(dbContext).JailTime = 0;
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
player.Health = 100; player.SafeSetHealth(100);
player.Position = new Vector3(427.879, -984.65, 30.71); player.SafeTeleport(new Vector3(427.879, -984.65, 30.71));
ChatService.HQMessage("!{#8181E9}HQ: Beamter " + cop.Name + " hat " + user.Name + " aus dem Knast entlassen."); ChatService.HQMessage("Beamter " + cop.Name + " hat " + user.Name + " aus dem Knast entlassen.");
ChatService.SendMessage(player, "!{#8181E9}Der Beamte " + cop.Name + " hat dich aus dem Knast entlassen"); ChatService.SendMessage(player, "!{#8181E9}Der Beamte " + cop.Name + " hat dich aus dem Knast entlassen");
player.TriggerEvent("jailTime", 0); player.TriggerEvent("jailTime", 0);
} }
@@ -196,8 +202,8 @@ namespace ReallifeGamemode.Server.Wanted
user.JailTime = 0; user.JailTime = 0;
dbContext.SaveChanges(); dbContext.SaveChanges();
target.Health = 100; target.SafeSetHealth(100);
target.Position = new Vector3(427.879, -984.65, 30.71); target.SafeTeleport(new Vector3(427.879, -984.65, 30.71));
ChatService.HQMessage(" Admin " + admin.Name + " hat " + user.Name + " aus dem Knast entlassen."); ChatService.HQMessage(" Admin " + admin.Name + " hat " + user.Name + " aus dem Knast entlassen.");
ChatService.SendMessage(target, "!{#8181E9}Admin " + admin.Name + " hat dich aus dem Knast entlassen"); ChatService.SendMessage(target, "!{#8181E9}Admin " + admin.Name + " hat dich aus dem Knast entlassen");

View File

@@ -9,11 +9,14 @@ 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
{ {
public class WantedEscapeTimer public class WantedEscapeTimer
{ {
private const int WantedEscapeTime = 300000;
public static Dictionary<int, int> waTimer { get; set; } = new Dictionary<int, int>(); //zeit in ms public static Dictionary<int, int> waTimer { get; set; } = new Dictionary<int, int>(); //zeit in ms
/* /*
public static void WantedTimer() public static void WantedTimer()
@@ -30,7 +33,7 @@ namespace ReallifeGamemode.Server.Wanted
if (user.FactionId == 1 || user.FactionId == 3) if (user.FactionId == 1 || user.FactionId == 3)
return; return;
waTimer[user.Id] = 300000; waTimer[user.Id] = WantedEscapeTime;
} }
public static void Timer_Elapsed() public static void Timer_Elapsed()
@@ -68,16 +71,17 @@ 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();
waTimer[user.Id] = WantedEscapeTime;
} }
} else if (!isNearCop)
if (!isNearCop)
waTimer[user.Id] -= 2500; waTimer[user.Id] -= 2500;
} }
} }

View File

@@ -13,8 +13,8 @@ namespace ReallifeGamemode.Server.WeaponDeal
public class WeaponDealManager : Script public class WeaponDealManager : Script
{ {
private const int WEAPON_AMOUNT_GANG = 2; private const int WEAPON_AMOUNT_GANG = 2;
private const int WEAPON_AMOUNT_COP = 8; private const int WEAPON_AMOUNT_COP = 4;
private const int WEAPON_AMOUNT_COP_STUNGUN = 12; private const int WEAPON_AMOUNT_COP_STUNGUN = 4;
public static bool checkWeaponDbyVehicle(Vehicle vehicle) public static bool checkWeaponDbyVehicle(Vehicle vehicle)
{ {
if (!vehicle.HasData("WeaponDealLoad") || vehicle.GetData<bool>("WeaponDealLoad") == false) if (!vehicle.HasData("WeaponDealLoad") || vehicle.GetData<bool>("WeaponDealLoad") == false)
@@ -201,6 +201,8 @@ namespace ReallifeGamemode.Server.WeaponDeal
InventoryManager.AddItemToVehicleInventory(fVeh, item2.ItemId, item2.Amount); InventoryManager.AddItemToVehicleInventory(fVeh, item2.ItemId, item2.Amount);
VehicleItem item4 = new VehicleItem() { ItemId = 7, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_GANG * oMembers }; //CompactRifle VehicleItem item4 = new VehicleItem() { ItemId = 7, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_GANG * oMembers }; //CompactRifle
InventoryManager.AddItemToVehicleInventory(fVeh, item4.ItemId, item4.Amount); InventoryManager.AddItemToVehicleInventory(fVeh, item4.ItemId, item4.Amount);
VehicleItem item5 = new VehicleItem() { ItemId = 13, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_GANG * oMembers }; //AssaultRifle
InventoryManager.AddItemToVehicleInventory(fVeh, item5.ItemId, item5.Amount);
} }
else if (factionVehicle.GetOwners().Contains(1)) else if (factionVehicle.GetOwners().Contains(1))
{ {
@@ -216,6 +218,8 @@ namespace ReallifeGamemode.Server.WeaponDeal
InventoryManager.AddItemToVehicleInventory(fVeh, item5.ItemId, item5.Amount); InventoryManager.AddItemToVehicleInventory(fVeh, item5.ItemId, item5.Amount);
VehicleItem item6 = new VehicleItem() { ItemId = 11, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP_STUNGUN * oMembers }; //Stungun VehicleItem item6 = new VehicleItem() { ItemId = 11, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP_STUNGUN * oMembers }; //Stungun
InventoryManager.AddItemToVehicleInventory(fVeh, item6.ItemId, item6.Amount); InventoryManager.AddItemToVehicleInventory(fVeh, item6.ItemId, item6.Amount);
VehicleItem item7 = new VehicleItem() { ItemId = 14, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP_STUNGUN * oMembers }; // AssaultSmg
InventoryManager.AddItemToVehicleInventory(fVeh, item7.ItemId, item7.Amount);
} }
else if (factionVehicle.GetOwners().Contains(3)) else if (factionVehicle.GetOwners().Contains(3))
{ {
@@ -231,6 +235,8 @@ namespace ReallifeGamemode.Server.WeaponDeal
InventoryManager.AddItemToVehicleInventory(fVeh, item5.ItemId, item5.Amount); InventoryManager.AddItemToVehicleInventory(fVeh, item5.ItemId, item5.Amount);
VehicleItem item6 = new VehicleItem() { ItemId = 11, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP_STUNGUN * oMembers }; //Stungun VehicleItem item6 = new VehicleItem() { ItemId = 11, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP_STUNGUN * oMembers }; //Stungun
InventoryManager.AddItemToVehicleInventory(fVeh, item6.ItemId, item6.Amount); InventoryManager.AddItemToVehicleInventory(fVeh, item6.ItemId, item6.Amount);
VehicleItem item7 = new VehicleItem() { ItemId = 12, VehicleId = factionVehicle.Id, Amount = WEAPON_AMOUNT_COP * oMembers }; //CombatPDW
InventoryManager.AddItemToVehicleInventory(fVeh, item7.ItemId, item7.Amount);
} }
ChatService.BroadcastFaction("~y~[WAFFENDEAL] ~w~Der Transporter wurde erfolgreich beladen.", new List<int>() { client.GetUser().Faction.Id }); ChatService.BroadcastFaction("~y~[WAFFENDEAL] ~w~Der Transporter wurde erfolgreich beladen.", new List<int>() { client.GetUser().Faction.Id });
@@ -240,4 +246,10 @@ namespace ReallifeGamemode.Server.WeaponDeal
} }
} }
} }
public class WeaponRackWeaponAmountInfo
{
public string WeaponModel { get; set; }
public int Amount { get; set; }
}
} }