Merge branch 'develop' into 'master'
Version 0.0.4 See merge request log-gtav/reallife-gamemode!48
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
217
ReallifeGamemode.Client/admin/anticheat.ts
Normal file
217
ReallifeGamemode.Client/admin/anticheat.ts
Normal 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);
|
||||||
|
}
|
||||||
Binary file not shown.
BIN
ReallifeGamemode.Client/assets/chat/fonts/CodeProLC.otf
Normal file
BIN
ReallifeGamemode.Client/assets/chat/fonts/CodeProLC.otf
Normal file
Binary file not shown.
1348
ReallifeGamemode.Client/assets/chat/fonts/emoji_unicode.php
Normal file
1348
ReallifeGamemode.Client/assets/chat/fonts/emoji_unicode.php
Normal file
File diff suppressed because it is too large
Load Diff
14
ReallifeGamemode.Client/assets/chat/index.html
Normal file
14
ReallifeGamemode.Client/assets/chat/index.html
Normal 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>
|
||||||
3337
ReallifeGamemode.Client/assets/chat/jquery-1.11.3.min.js
vendored
Normal file
3337
ReallifeGamemode.Client/assets/chat/jquery-1.11.3.min.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
191
ReallifeGamemode.Client/assets/chat/js/main.js
Normal file
191
ReallifeGamemode.Client/assets/chat/js/main.js
Normal 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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
1
ReallifeGamemode.Client/assets/chat/style/checkbox.css
Normal file
1
ReallifeGamemode.Client/assets/chat/style/checkbox.css
Normal 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;}
|
||||||
89
ReallifeGamemode.Client/assets/chat/style/main.css
Normal file
89
ReallifeGamemode.Client/assets/chat/style/main.css
Normal 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)
|
||||||
|
}
|
||||||
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
Binary file not shown.
8
ReallifeGamemode.Client/global.d.ts
vendored
8
ReallifeGamemode.Client/global.d.ts
vendored
@@ -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 = {
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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');
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
56
ReallifeGamemode.Server/Admin/AntiCheat.cs
Normal file
56
ReallifeGamemode.Server/Admin/AntiCheat.cs
Normal 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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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 });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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")]
|
||||||
|
|||||||
@@ -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")]
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
18
ReallifeGamemode.Server/Inventory/Items/AssaultRifle.cs
Normal file
18
ReallifeGamemode.Server/Inventory/Items/AssaultRifle.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
18
ReallifeGamemode.Server/Inventory/Items/AssaultSmg.cs
Normal file
18
ReallifeGamemode.Server/Inventory/Items/AssaultSmg.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
18
ReallifeGamemode.Server/Inventory/Items/AviateChips.cs
Normal file
18
ReallifeGamemode.Server/Inventory/Items/AviateChips.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
18
ReallifeGamemode.Server/Inventory/Items/CombatPDW.cs
Normal file
18
ReallifeGamemode.Server/Inventory/Items/CombatPDW.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
payWage(player, PilotJob.WAGE_BEGINNER / PilotJob.playerRouteCurrent[player.Name].Count);
|
||||||
|
else if (PilotJob.playerVehiclePair[player].Model is PilotJob.VEHICLE_INTERMEDIATE)
|
||||||
|
payWage(player, PilotJob.WAGE_INTERMEDIATE / PilotJob.playerRouteCurrent[player.Name].Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void payWage(Player player, int wage)
|
||||||
{
|
{
|
||||||
case 1:
|
using var dbContext = new DatabaseContext();
|
||||||
|
User user = player.GetUser(dbContext);
|
||||||
|
|
||||||
|
if (player.VehicleSeat == 0)
|
||||||
{
|
{
|
||||||
c.StartPilotRoute(player, "Route 1");
|
user.Wage += wage;
|
||||||
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 1");
|
user.PilotSkill++;
|
||||||
break;
|
if (user.PilotSkill == BusDriverJob.SKILL_INTERMEDIATE)
|
||||||
}
|
|
||||||
case 2:
|
|
||||||
{
|
{
|
||||||
c.StartPilotRoute(player, "Route 2");
|
player.SendChatMessage($"~y~[JOB]: ~w~Du hast nun die Route ~g~{BusDriverJob.INTERMEDIATE} ~w~freigeschaltet!");
|
||||||
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 2");
|
player.SendChatMessage($"~y~[JOB]: ~w~Du kannst jetzt auch mit dem Velum fliegen!");
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case 3:
|
|
||||||
{
|
dbContext.SaveChanges();
|
||||||
c.StartPilotRoute(player, "Route 3");
|
|
||||||
player.SendChatMessage("~y~[JOB] ~w~Eine neue Route wurde gesetzt: ~g~Route 2");
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (player.HasData("PilotenBase") && player.GetData<int>("PilotenBase") == 2)
|
|
||||||
{
|
|
||||||
Random rnd = new Random();
|
|
||||||
int rroute = rnd.Next(1, 4);
|
|
||||||
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:
|
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,7 +123,6 @@ 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();
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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")]
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(() =>
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user