Merge branch 'develop' into 'master'

No commit message

See merge request log-gtav/reallife-gamemode!40
This commit is contained in:
hydrant
2021-04-07 22:38:30 +00:00
48 changed files with 8108 additions and 1576 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -202,7 +202,7 @@ export default function (globalData: IGlobalData): void {
centre: false centre: false
}) })
mp.game.graphics.drawText(dateString + "\n" + timeString, [0.938, 0.381], mp.game.graphics.drawText(timeString + "\n" + dateString, [0.938, 0.381],
{ {
font: 4, font: 4,
color: [255, 255, 255, 255], color: [255, 255, 255, 255],
@@ -219,7 +219,7 @@ export default function (globalData: IGlobalData): void {
outline: true, outline: true,
centre: false centre: false
}) })
mp.game.graphics.drawText("~r~Datum: ", [0.89, 0.381], mp.game.graphics.drawText("~r~Datum: ", [0.891, 0.411],
{ {
font: 4, font: 4,
color: [255, 255, 255, 255], color: [255, 255, 255, 255],
@@ -227,7 +227,7 @@ export default function (globalData: IGlobalData): void {
outline: true, outline: true,
centre: false centre: false
}) })
mp.game.graphics.drawText("~r~Uhrzeit: ", [0.891, 0.411], mp.game.graphics.drawText("~r~Uhrzeit: ", [0.89, 0.381],
{ {
font: 4, font: 4,
color: [255, 255, 255, 255], color: [255, 255, 255, 255],

View File

@@ -1,7 +1,6 @@
import { IGame, IEntity } from "../game"; import { IGame, IEntity } from "../game";
import game from ".."; import game from "..";
const maxDistance = 40 * 40; const maxDistance = 40 * 40;
const width = 0.03; const width = 0.03;
const height = 0.0065; const height = 0.0065;
@@ -27,9 +26,7 @@ const colors = [
{ id: 9, color: [0, 166, 133, alpha] }, //news { id: 9, color: [0, 166, 133, alpha] }, //news
]; ];
export default function customNametags() { export default function customNametags() {
mp.nametags.enabled = false; mp.nametags.enabled = false;
mp.events.add('render', (nametags) => { mp.events.add('render', (nametags) => {
@@ -67,19 +64,19 @@ export default function customNametags() {
let y2 = y + 0.042; let y2 = y + 0.042;
if (armour > 0) { if (armour > 0) {
graphics.drawRect(x, y2, width + border * 2, height + border * 2, 0 , 0, 0, 200); graphics.drawRect(x, y2, width + border * 2, height + border * 2, 0, 0, 0, 200);
graphics.drawRect(x, y2, width, height, 150, 150, 150, 255); graphics.drawRect(x, y2, width, height, 50, 0, 0, 255);
graphics.drawRect(x - width / 2 * (1 - health), y2, width * health, height, 200, 0, 0, 200); graphics.drawRect(x - width / 2 * (1 - health), y2, width * health, height, 200, 0, 0, 200);
var x2 = x + width / 2 + border / 2; var x2 = x + width / 2 + border / 2;
graphics.drawRect(x, y2 + height, width + border * 2, height + border * 2, 0, 0, 0, 200); graphics.drawRect(x, y2 + height, width + border * 2, height + border * 2, 0, 0, 0, 200);
graphics.drawRect(x, y2 + height, width, height, 200, 200, 200, 255); graphics.drawRect(x, y2 + height, width, height, 80, 80, 80, 255);
graphics.drawRect(x - width / 2 * (1 - armour), y2 + height, width * armour, height, 255, 255, 255, 200); graphics.drawRect(x - width / 2 * (1 - armour), y2 + height, width * armour, height, 255, 255, 255, 200);
} }
else { else {
graphics.drawRect(x, y2, width + border * 2, height + border * 2, 0, 0, 0, 200); graphics.drawRect(x, y2, width + border * 2, height + border * 2, 0, 0, 0, 200);
graphics.drawRect(x, y2, width, height, 150, 150, 150, 255); graphics.drawRect(x, y2, width, height, 50, 0, 0, 255);
graphics.drawRect(x - width / 2 * (1 - health), y2, width * health, height, 200, 0, 0, 200); graphics.drawRect(x - width / 2 * (1 - health), y2, width * health, height, 200, 0, 0, 200);
} }
} }

View File

@@ -313,7 +313,7 @@ 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, index); mp.events.callRemote("updateMedicTask", 0, tasks[index].Victim);
mp.game.ui.setNewWaypoint(tasks[index].Position.x, tasks[index].Position.y); mp.game.ui.setNewWaypoint(tasks[index].Position.x, tasks[index].Position.y);
activeCheckpoint = mp.checkpoints.new(1, new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 2), 3.0, activeCheckpoint = mp.checkpoints.new(1, new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 2), 3.0,
{ {
@@ -367,7 +367,7 @@ 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", 1, index); mp.events.callRemote("updateMedicTask", 1, tasks[index].Victim);
mp.game.ui.setNewWaypoint(tasks[index].Position.x, tasks[index].Position.y); mp.game.ui.setNewWaypoint(tasks[index].Position.x, tasks[index].Position.y);
activeCheckpoint = mp.checkpoints.new(1, new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 2), 3.0, activeCheckpoint = mp.checkpoints.new(1, new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 2), 3.0,
{ {

View File

@@ -27,6 +27,8 @@ export default function (globalData: IGlobalData) {
var groupItem = new UIMenuItem("Gruppe", "Verwalte deine Gruppe"); var groupItem = new UIMenuItem("Gruppe", "Verwalte deine Gruppe");
var jobItem = new UIMenuItem("Job", "Infos zu deinem Job");
var paycheckItem = new UIMenuItem("Gehaltsscheck", "Schaue dir deinen Verdienst der letzten Stunde an"); var paycheckItem = new UIMenuItem("Gehaltsscheck", "Schaue dir deinen Verdienst der letzten Stunde an");
var licenseItem = new UIMenuItem("Lizenzen", "Lizenzen Informationen"); var licenseItem = new UIMenuItem("Lizenzen", "Lizenzen Informationen");
@@ -41,10 +43,11 @@ export default function (globalData: IGlobalData) {
var groupRank = null; var groupRank = null;
mp.events.add("SERVER:InteractionMenu_OpenMenu", (accountDataJson: string, factionleader: 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, 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 ticket_amount = JSON.parse(ticket_amountJson); //var ticket_amount = JSON.parse(ticket_amountJson);
var menu = getInteractionMenu(); var menu = getInteractionMenu();
@@ -77,6 +80,8 @@ export default function (globalData: IGlobalData) {
menu.AddItem(factionleaderItem); menu.AddItem(factionleaderItem);
menu.BindMenuToItem(getFactionLeaderMenu(faction, accountData.factionVehicles, accountData.stateFaction, menu), factionleaderItem); menu.BindMenuToItem(getFactionLeaderMenu(faction, accountData.factionVehicles, accountData.stateFaction, menu), factionleaderItem);
} }
menu.AddItem(jobItem);
menu.BindMenuToItem(getJobMenu(jobData, menu), jobItem);
if (group) { if (group) {
groupItem.SetRightLabel(group); groupItem.SetRightLabel(group);
@@ -206,11 +211,7 @@ export default function (globalData: IGlobalData) {
menuItem = new UIMenuItem("Fraktionsrang"); menuItem = new UIMenuItem("Fraktionsrang");
menuItem.SetRightLabel(data.factionRank); menuItem.SetRightLabel(data.factionRank);
accountMenu.AddItem(menuItem); accountMenu.AddItem(menuItem);
} }
menuItem = new UIMenuItem("Job");
menuItem.SetRightLabel(data.job);
accountMenu.AddItem(menuItem);
if (data.group != null) { if (data.group != null) {
menuItem = new UIMenuItem("Gruppe"); menuItem = new UIMenuItem("Gruppe");
@@ -365,6 +366,67 @@ export default function (globalData: IGlobalData) {
return factionMenu; return factionMenu;
} }
function getJobMenu(jobdata: JobData, parentMenu: NativeUI.Menu): NativeUI.Menu {
var jobMenu = new NativeUI.Menu("Job", "Job Infos / Skillpunkte", new Point(0, screenRes.y / 3), null, null);
var pilotLevel;
var busLevel;
if (jobdata.pilotskill >= 300) {
pilotLevel = 2;
} else {
pilotLevel = 1;
}
if (jobdata.busskill >= 800) {
busLevel = 3;
} else if (jobdata.busskill >= 300) {
busLevel = 2;
} else {
busLevel = 1;
}
var actJobItem = new UIMenuItem("Aktueller Job:");
actJobItem.SetRightLabel(jobdata.job)
jobMenu.AddItem(actJobItem);
var pilotSkillItem = new UIMenuItem("Pilot Skill (LVL " + pilotLevel + ")");
switch (pilotLevel) {
case 1:
pilotSkillItem.SetRightLabel(jobdata.pilotskill + "/300")
break;
case 2:
pilotSkillItem.SetRightLabel(jobdata.pilotskill + "/MAX")
break;
}
jobMenu.AddItem(pilotSkillItem);
var busSkillItem = new UIMenuItem("Bus Skill (LVL " + busLevel + ")");
switch (busLevel) {
case 1:
busSkillItem.SetRightLabel(jobdata.busskill + "/300")
break;
case 2:
busSkillItem.SetRightLabel(jobdata.busskill + "/800")
break;
case 3:
busSkillItem.SetRightLabel(jobdata.busskill + "/MAX")
break;
}
jobMenu.AddItem(busSkillItem);
var wageItem = new UIMenuItem("Verdienst");
if (jobdata.wage > 0) {
wageItem.SetRightLabel("~g~$" + jobdata.wage.toString())
} else {
wageItem.SetRightLabel("$" + jobdata.wage.toString())
}
jobMenu.AddItem(wageItem);
jobMenu.Visible = false;
mp.gui.chat.show(false);
return jobMenu;
}
function getGroupMenu(group: string, parentMenu: NativeUI.Menu): NativeUI.Menu { function getGroupMenu(group: string, parentMenu: NativeUI.Menu): NativeUI.Menu {
var groupMenu = new NativeUI.Menu("Gruppe", group, new Point(0, screenRes.y / 3), null, null); var groupMenu = new NativeUI.Menu("Gruppe", group, new Point(0, screenRes.y / 3), null, null);
if (groupRank == "Manager" || groupRank == "Besitzer") groupMenu.AddItem(new UIMenuItem("Spieler einladen")); if (groupRank == "Manager" || groupRank == "Besitzer") groupMenu.AddItem(new UIMenuItem("Spieler einladen"));

View File

@@ -6,11 +6,10 @@
//https://docs.microsoft.com/de-de/windows/desktop/inputdev/virtual-key-codes //https://docs.microsoft.com/de-de/windows/desktop/inputdev/virtual-key-codes
import { Key } from '../game';
const player = mp.players.local; import KeyBinder from 'ragemp-better-bindings';
export default function keys(globalData: IGlobalData) { export default function keys(globalData: IGlobalData) {
var showGui = true; var showGui = true;
//ENTER //ENTER
@@ -73,7 +72,6 @@ export default function keys(globalData: IGlobalData) {
} }
}); });
//I //Inventar //I //Inventar
mp.keys.bind(0x49, false, function () { mp.keys.bind(0x49, false, function () {
if (!globalData.InChat && !globalData.InTuning) { if (!globalData.InChat && !globalData.InTuning) {
@@ -83,9 +81,9 @@ export default function keys(globalData: IGlobalData) {
//O //Spielerliste //O //Spielerliste
mp.keys.bind(0x4F, true, function () { mp.keys.bind(0x4F, true, function () {
if (!globalData.InChat && !globalData.InTuning ) { if (!globalData.InChat && !globalData.InTuning) {
mp.events.callRemote("keyPress:O"); mp.events.callRemote("keyPress:O");
//mp.events.call("showPlayerlist"); //mp.events.call("showPlayerlist");
} }
}); });
@@ -113,7 +111,7 @@ export default function keys(globalData: IGlobalData) {
//N //Motor Starten //N //Motor Starten
mp.keys.bind(0x4E, false, function () { mp.keys.bind(0x4E, false, function () {
if (!globalData.InChat) { if (!globalData.InChat) {
mp.events.callRemote("keyPress:N"); mp.events.callRemote("keyPress:N");
} }
}); });
@@ -143,9 +141,13 @@ export default function keys(globalData: IGlobalData) {
mp.gui.takeScreenshot(new Date().toLocaleDateString(), 1, 100, 80); mp.gui.takeScreenshot(new Date().toLocaleDateString(), 1, 100, 80);
}); });
KeyBinder.bind("ctrl+h", () => {
mp.events.callRemote("keyPress:ControllH"); //hup
return;
});
//F2 //Noclip //F2 //Noclip
mp.keys.bind(0x71, false, () => { mp.keys.bind(0x71, false, () => {
mp.events.callRemote("Noclip"); mp.events.callRemote("Noclip");
}); });
} }

View File

@@ -249,6 +249,13 @@ class RageVehicle extends RageEntity implements IVehicle {
this.vehicle.setDoorShut(door, instantly); this.vehicle.setDoorShut(door, instantly);
} }
get class(): number {
if (mp.vehicles.exists(this.vehicle)) {
return this.vehicle.getClass();
}
return -1;
}
} }

View File

@@ -69,6 +69,7 @@ interface IVehicle extends IEntity {
setDoorsLocked(state: boolean); setDoorsLocked(state: boolean);
setDoorShut(door: number, instantly: boolean); setDoorShut(door: number, instantly: boolean);
setDoorOpen(door: number, loose: boolean, instantly: boolean); setDoorOpen(door: number, loose: boolean, instantly: boolean);
class: number;
} }
interface IEntityPool<TEntity> { interface IEntityPool<TEntity> {

View File

@@ -14,7 +14,6 @@ declare type AccountData = {
factionRank: string; factionRank: string;
group: string; group: string;
groupRank: string; groupRank: string;
job: string;
paycheck: Paycheck; paycheck: Paycheck;
licenses: Licenses; licenses: Licenses;
vehicles: VehicleData[]; vehicles: VehicleData[];
@@ -25,6 +24,13 @@ declare type AccountData = {
userWarn: number; userWarn: number;
} }
declare type JobData = {
job: string;
busskill: number;
pilotskill: number;
wage: number;
}
declare type VehicleData = { declare type VehicleData = {
Id: number; Id: number;
Model: number; Model: number;
@@ -44,6 +50,8 @@ declare type Paycheck = {
otheramount: number; otheramount: number;
} }
declare type Licenses = { declare type Licenses = {
drivingLicenseCar: boolean; drivingLicenseCar: boolean;
drivingLicenseBike: boolean; drivingLicenseBike: boolean;

View File

@@ -7,14 +7,13 @@
import { IGame } from './game'; import { IGame } from './game';
import RageGame from './core/rage-mp/game'; import RageGame from './core/rage-mp/game';
var inMenu: boolean = false; var inMenu: boolean = false;
let globalData: IGlobalData = { let globalData: IGlobalData = {
InTuning: false, InTuning: false,
HideGui: false, HideGui: false,
InChat: false, InChat: false,
LoggedIn: false, LoggedIn: false,
get InMenu(): boolean { get InMenu(): boolean {
return inMenu; return inMenu;
@@ -224,7 +223,6 @@ refuseCollector();
import PedCreator from './Ped/PedCreator'; import PedCreator from './Ped/PedCreator';
PedCreator(); PedCreator();
import attachmentManager from './util/attachmentMngr'; import attachmentManager from './util/attachmentMngr';
attachmentManager(game); attachmentManager(game);
@@ -235,14 +233,12 @@ import bankMenuHandle from './Interaction/bankmenu';
import InputHelper from './inputhelper'; import InputHelper from './inputhelper';
bankMenuHandle(globalData); bankMenuHandle(globalData);
import ahelp from './Gui/ahelp'; import ahelp from './Gui/ahelp';
ahelp(globalData); ahelp(globalData);
import Introduction from './Gui/introduction'; import Introduction from './Gui/introduction';
Introduction(globalData); Introduction(globalData);
import userhelp from './Gui/userhelp'; import userhelp from './Gui/userhelp';
userhelp(globalData); userhelp(globalData);
@@ -252,6 +248,9 @@ drivingschool(globalData);
import gangwarHandle from './util/Gangwar'; import gangwarHandle from './util/Gangwar';
gangwarHandle(globalData); gangwarHandle(globalData);
import animationSync from './util/animationSync';
animationSync();
require('./Gui/policedepartment'); require('./Gui/policedepartment');
require('./Gui/helptext'); require('./Gui/helptext');
@@ -262,6 +261,4 @@ interface VehicleData {
export { export {
VehicleData VehicleData
} }

View File

@@ -2879,6 +2879,11 @@
"integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
"dev": true "dev": true
}, },
"ragemp-better-bindings": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/ragemp-better-bindings/-/ragemp-better-bindings-1.0.4.tgz",
"integrity": "sha512-mev0UT74EmBen1rdg8FP9bKFsxUtDH56X2SM2JQQsWWzCzVvRP0HIt1Wqn1DuomszgSt/uzxZaufwCFbeOU+/Q=="
},
"randombytes": { "randombytes": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",

View File

@@ -22,5 +22,8 @@
"ProjectOpened": [ "ProjectOpened": [
"watch" "watch"
] ]
},
"dependencies": {
"ragemp-better-bindings": "^1.0.4"
} }
} }

View File

@@ -0,0 +1,155 @@
import { debug } from "util";
export default function animationSync() {
let blockInput = false;
let animationBreakTimer;
mp.events.add("SERVER:LoadAnimations", () => {
animationSyncData.register("Cuffed", "mp_arresting", "idle", -1, true, 50, false);
animationSyncData.register("doArrest", "mp_arrest_paired", "cop_p2_back_right", 3760, false, 0, false);
animationSyncData.register("getArrest", "mp_arrest_paired", "crook_p2_back_right", 3760, false, 0, false);
animationSyncData.register("doUncuff", "mp_arresting", "a_uncuff", 5500, false, 0, false);
animationSyncData.register("getUncuff", "mp_arresting", "b_uncuff", 5500, false, 0, false);
animationSyncData.register("hup", "mp_am_hold_up", "handsup_base", -1, true, 50, true);
animationSyncData.register("carryBox", "anim@heists@box_carry@", "idle", -1, true, 50, true);
});
const animationBreakMessage = [
{ animName: "Cuffed", msg: "Handschellen gebrochen." }
];
const animationSyncData =
{
animations: [],
register: function (name, animDict, animName, duration, loop, flag, endless) {
let id = mp.game.joaat(name);
if (!this.animations.hasOwnProperty(id)) {
this.animations[id] =
{
id: id,
name: name,
animDict: animDict,
animName: animName,
duration: duration,
loop: loop,
flag: flag,
endless: endless
};
} else {
mp.game.graphics.notify("Animation Sync Error: ~r~Duplicate Entry");
}
}
};
/*
mp.events.add("entityStreamIn", (entity) => {
if (entity.type === "player" && entity.animationData) {
if (!entity.animationData.playOnStream)
return;
animationSync.playAnim(entity, mp.game.joaat(entity.animationData.name));
}
});
*/
setInterval(() => {
if (mp.players.local.getVariable("AnimationData")) {
let index = mp.game.joaat(mp.players.local.getVariable("AnimationData"));
let currentAnim = animationSyncData.animations[index];
let { id, name, animDict, animName, duration, loop, flag } = currentAnim;
if (loop) {
blockInput = true;
} else {
blockInput = false;
}
}
mp.players.forEachInStreamRange(
(player) => {
if (!player.getVariable("AnimationData")) {
return;
}
let index = mp.game.joaat(player.getVariable("AnimationData"));
let currentAnim = animationSyncData.animations[index];
let { id, name, animDict, animName, duration, loop, flag } = currentAnim;
if (loop == true && !player.isPlayingAnim(animDict, animName, 3)) {
loadAnimDict(animDict, function () {
mp.players.exists(player) && 0 !== player.handle && player.taskPlayAnim(animDict, animName, 1, 0, duration, parseInt(flag), 0, !1, !1, !1)
});
}
});
}, 100);
mp.events.addDataHandler("AnimationData", (entity, string) => {
entity.clearTasksImmediately();
if (animationBreakTimer) {
clearInterval(animationBreakTimer);
animationBreakTimer = null;
}
if (string == null) {
blockInput = false;
return;
}
let index = mp.game.joaat(string);
if (!animationSyncData.animations.hasOwnProperty(index)) return;
let animData = animationSyncData.animations[index];
let { id, name, animDict, animName, duration, loop, flag, endless } = animData;
loadAnimDict(animDict, function () {
mp.players.exists(entity) && 0 !== entity.handle && entity.taskPlayAnim(animDict, animName, 1, 0, duration, parseInt(flag), 0, !1, !1, !1)
});
if (mp.players.local == entity) {
if (!endless) {
animationBreakTimer = setInterval(() => breakAnimation(name), 120000);
}
if (!loop) {
let a = setInterval(function () {
clearInterval(a);
mp.game.wait(500);
mp.events.callRemote("CLIENT:ClearAnimationData", true);
}, duration);
}
}
});
function breakAnimation(name) {
let { animName, msg } = animationBreakMessage.find(c => c.animName == name)
if (msg)
mp.events.call("renderTextOnScreen", msg);
clearInterval(animationBreakTimer);
animationBreakTimer = null;
mp.events.callRemote("CLIENT:ClearAnimationData", false);
}
mp.events.add("render", () => {
if (blockInput) {
mp.game.controls.disableControlAction(32, 25, true);
mp.game.controls.disableControlAction(32, 24, true);
mp.game.controls.disableControlAction(32, 22, true);
}
});
function loadAnimDict(animDict, callback) {
if (mp.game.streaming.hasAnimDictLoaded(animDict)) return void callback();
mp.game.streaming.requestAnimDict(animDict);
let c = setInterval(function () {
mp.game.streaming.hasAnimDictLoaded(animDict) && (clearInterval(c), callback())
}, 100)
}
mp.events.add("SERVER:SetInFrontPosition", (entity) => {
mp.events.callRemote("CLIENT:SET_InFrontOfPos", entity.getOffsetFromInWorldCoords(0, 1, 0));
});
}

View File

@@ -1,6 +1,5 @@
import { IGame, IEntity } from "../game"; import { IGame, IEntity } from "../game";
export default function attachmentManager(game: IGame) { export default function attachmentManager(game: IGame) {
mp.events.add("SERVER:LoadAttachments", () => { mp.events.add("SERVER:LoadAttachments", () => {
attachmentMngr.register("char_creator_1", "prop_beggers_sign_04", 28422, new mp.Vector3(0, 0, 0), new mp.Vector3(0, 0, 0)); attachmentMngr.register("char_creator_1", "prop_beggers_sign_04", 28422, new mp.Vector3(0, 0, 0), new mp.Vector3(0, 0, 0));
@@ -9,11 +8,10 @@ export default function attachmentManager(game: IGame) {
attachmentMngr.register("weapondeal", "ex_prop_crate_ammo_bc", "chassis_dummy", new mp.Vector3(0.08, -0.9, -0.2), new mp.Vector3(0, 0, 0)); attachmentMngr.register("weapondeal", "ex_prop_crate_ammo_bc", "chassis_dummy", new mp.Vector3(0.08, -0.9, -0.2), new mp.Vector3(0, 0, 0));
attachmentMngr.register("weapondeal1", "ex_office_swag_guns02", "chassis_dummy", new mp.Vector3(0, 0.8, 0), new mp.Vector3(0, 0, 0)); attachmentMngr.register("weapondeal1", "ex_office_swag_guns02", "chassis_dummy", new mp.Vector3(0, 0.8, 0), new mp.Vector3(0, 0, 0));
attachmentMngr.register("weapondeal2", "w_sg_pumpshotgun", "chassis_dummy", new mp.Vector3(0.4, 1.6, 0.62), new mp.Vector3(90, 0, 180)); attachmentMngr.register("weapondeal2", "w_sg_pumpshotgun", "chassis_dummy", new mp.Vector3(0.4, 1.6, 0.62), new mp.Vector3(90, 0, 180));
attachmentMngr.register("handcuffs", "p_cs_cuffs_02_s", 28422, new mp.Vector3(-0.05, 0, 0), new mp.Vector3(90, 90, 0));
}); });
const attachmentMngr =
const attachmentMngr =
{ {
attachments: {}, attachments: {},
@@ -26,7 +24,7 @@ export default function attachmentManager(game: IGame) {
let attInfo = this.attachments[id]; let attInfo = this.attachments[id];
let object = mp.objects.new(attInfo.model, entity.position); let object = mp.objects.new(attInfo.model, entity.position);
object.__attMgrData = { object.__attMgrData = {
targetEntity: entity.handle, targetEntity: entity.handle,
bone: (typeof (attInfo.boneName) === 'string') ? entity.getBoneIndexByName(attInfo.boneName) : entity.getBoneIndex(attInfo.boneName), bone: (typeof (attInfo.boneName) === 'string') ? entity.getBoneIndexByName(attInfo.boneName) : entity.getBoneIndex(attInfo.boneName),

View File

@@ -21,86 +21,74 @@
let modifier = 1; let modifier = 1;
let meelemodifier = 1; let meelemodifier = 1;
blockInput = (mp.game.weapon.getWeapontypeGroup(player.weapon) != 2685387236);
switch (player.weapon) { switch (player.weapon) {
case 0x1B06D571: //Pistol case 0x1B06D571: //Pistol
modifier = 0.4; modifier = 0.4;
meelemodifier = 1; meelemodifier = 1;
blockInput = true; //mp.gui.chat.push("PistolModifier: " + modifier);
break; break;
case 0xBFE256D4: //Pistol_MK2 case 0xBFE256D4: //Pistol_MK2
modifier = 0.4; modifier = 0.4;
meelemodifier = 1; meelemodifier = 1;
blockInput = true;
break; break;
case 0x5EF9FEC4: //Combatpistol case 0x5EF9FEC4: //Combatpistol
modifier = 0.5; modifier = 0.5;
meelemodifier = 1; meelemodifier = 1;
blockInput = true;
break; break;
case 0x99AEEB3B: //Pistol50 case 0x99AEEB3B: //Pistol50
modifier = 0.35; modifier = 0.35;
meelemodifier = 1; meelemodifier = 1;
blockInput = true;
break; break;
case 0x2BE6766B: //SMG case 0x2BE6766B: //SMG
modifier = 0.25; modifier = 0.25;
meelemodifier = 1; meelemodifier = 1;
blockInput = true;
break; break;
case 0x1D073A89: //Pumpshotgun case 0x1D073A89: //Pumpshotgun
modifier = 0.2; modifier = 0.2;
meelemodifier = 1; meelemodifier = 1;
blockInput = true;
break; break;
case 0x83BF0278: //Cabinerifle case 0x83BF0278: //Cabinerifle
modifier = 0.2; modifier = 0.2;
meelemodifier = 1; meelemodifier = 1;
blockInput = true;
break; break;
case 0x624FE830: //Compactrifle case 0x624FE830: //Compactrifle
modifier = 0.2; modifier = 0.2;
meelemodifier = 0.1; meelemodifier = 0.1;
blockInput = true;
break; break;
case 0x05FC3C11: //Sniperrifle case 0x05FC3C11: //Sniperrifle
modifier = 0.5; modifier = 0.5;
meelemodifier = 1; meelemodifier = 1;
blockInput = true;
break; break;
case 0xA2719263: //Meele Umarmed Fist case 0xA2719263: //Meele Umarmed Fist
meelemodifier = 0.1; meelemodifier = 0.1;
modifier = 1; modifier = 1;
blockInput = false;
//mp.gui.chat.push("FistModifier: " + meelemodifier); //mp.gui.chat.push("FistModifier: " + meelemodifier);
break; break;
case 0x958A4A8F: //Meele Baseball Bat case 0x958A4A8F: //Meele Baseball Bat
meelemodifier = 0.15; meelemodifier = 0.15;
modifier = 1; modifier = 1;
blockInput = false;
break; break;
case 0x8BB05FD7: //Meele Flashlight case 0x8BB05FD7: //Meele Flashlight
meelemodifier = 0.1; meelemodifier = 0.1;
modifier = 1; modifier = 1;
blockInput = false;
break; break;
case 0xD8DF3C3C: //Meele Knuckle case 0xD8DF3C3C: //Meele Knuckle
meelemodifier = 0.1; meelemodifier = 0.1;
modifier = 1; modifier = 1;
blockInput = false;
//mp.gui.chat.push("KnuckleModifier: " + meelemodifier); //mp.gui.chat.push("KnuckleModifier: " + meelemodifier);
break; break;
case 0x678B81B1: //Meele Nightstick case 0x678B81B1: //Meele Nightstick
meelemodifier = 0.1; meelemodifier = 0.1;
modifier = 1; modifier = 1;
blockInput = false;
break; break;
default: default:
modifier = 1; modifier = 1;
meelemodifier = 1; meelemodifier = 1;
blockInput = false;
break; break;
} }

View File

@@ -9,7 +9,7 @@
export default function smoothThrottle() { export default function smoothThrottle() {
let GlobalDisable = false; let GlobalDisable = false;
let DisableAntiReverse = true; let DisableAntiReverse = false;
let DisableSmoothThrottle = false; let DisableSmoothThrottle = false;
let BrakeSystem = false; let BrakeSystem = false;
@@ -47,7 +47,7 @@ export default function smoothThrottle() {
return; return;
if (BrakeSystem) { if (BrakeSystem) {
if (mp.players.local.vehicle !== null) { if (mp.players.local.vehicle && mp.vehicles.exists(mp.players.local.vehicle)) {
if (!mp.players.local.vehicle.isSeatFree(-1)) //only do this if the vehicle has a driver (doesn't have to be the player who is rendering this) if (!mp.players.local.vehicle.isSeatFree(-1)) //only do this if the vehicle has a driver (doesn't have to be the player who is rendering this)
{ {
//Optimize function calls to variables (probably doesn't make a difference) //Optimize function calls to variables (probably doesn't make a difference)

View File

@@ -16,9 +16,9 @@ game.events.onPlayerEnterVehicle(async (vehicle, seat) => {
} }
if (vehicle) { if (vehicle) {
var data: VehicleData = vehicle.getSharedData("VehicleData"); var data: VehicleData = vehicle.getSharedData("VehicleData");
setVehicleData(vehicle, data); setVehicleData(vehicle, data);
if (vehicle.class == 16) mp.game.vehicle.defaultEngineBehaviour = true;
} }
}); });
@@ -31,8 +31,8 @@ game.events.onPlayerExitVehicle(async () => {
if (veh) { if (veh) {
var data: VehicleData = veh.getSharedData("VehicleData"); var data: VehicleData = veh.getSharedData("VehicleData");
setVehicleData(veh, data); setVehicleData(veh, data);
if (veh.class == 16) mp.game.vehicle.defaultEngineBehaviour = false;
} }
}); });

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,23 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace ReallifeGamemode.Database.Migrations
{
public partial class UserNameUniqueIndex : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateIndex(
name: "IX_Users_Name",
table: "Users",
column: "Name",
unique: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "IX_Users_Name",
table: "Users");
}
}
}

View File

@@ -1463,6 +1463,9 @@ namespace ReallifeGamemode.Database.Migrations
b.HasIndex("HouseId"); b.HasIndex("HouseId");
b.HasIndex("Name")
.IsUnique();
b.ToTable("Users"); b.ToTable("Users");
}); });

View File

@@ -1,4 +1,6 @@
using Microsoft.EntityFrameworkCore; using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design; using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@@ -43,10 +45,16 @@ namespace ReallifeGamemode.Database.Models
.HasIndex(b => b.BusinessId) .HasIndex(b => b.BusinessId)
.IsUnique(true); .IsUnique(true);
modelBuilder.Entity<Entities.User>() modelBuilder.Entity<Entities.User>(e =>
.HasIndex(u => u.BusinessId) {
e.HasIndex(u => u.BusinessId)
.IsUnique(true); .IsUnique(true);
e.HasIndex(u => u.Name)
.IsUnique(true);
});
modelBuilder.Entity<Entities.ServerVehicle>() modelBuilder.Entity<Entities.ServerVehicle>()
.Property(sv => sv.Active) .Property(sv => sv.Active)
.HasDefaultValue(true); .HasDefaultValue(true);

View File

@@ -34,6 +34,17 @@ namespace ReallifeGamemode.Server.Commands
{ {
#region Todo #region Todo
[Command("syncanim", "~m~Benutzung: ~s~/syncanim [animName]")]
public void CmdSyncAnim(Player player, string animName = null)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
player.SyncAnimation(animName);
}
[Command("anim", "~m~Benutzung: ~s~/anim [animDict] [animName]")] [Command("anim", "~m~Benutzung: ~s~/anim [animDict] [animName]")]
public void CmdAnim(Player player, string animDict, string animName) public void CmdAnim(Player player, string animDict, string animName)
{ {
@@ -43,11 +54,8 @@ namespace ReallifeGamemode.Server.Commands
return; return;
} }
NAPI.Player.PlayPlayerAnimation(player, (int)(AnimationFlags.Loop | AnimationFlags.AllowPlayerControl | AnimationFlags.Cancellable), animDict, animName); NAPI.Player.PlayPlayerAnimation(player, (int)(AnimationFlags.Loop | AnimationFlags.AllowPlayerControl | AnimationFlags.Cancellable), animDict, animName);
} }
[Command("eat", "~m~Benutzung: ~s~/eat [Item]")] [Command("eat", "~m~Benutzung: ~s~/eat [Item]")]
public void CmdAdminEat(Player player, string item) public void CmdAdminEat(Player player, string item)
{ {
@@ -144,36 +152,38 @@ namespace ReallifeGamemode.Server.Commands
#region ahelp #region ahelp
/* [Command("ahelp", "~m~Benutzung: ~s~/ahelp")] /* [Command("ahelp", "~m~Benutzung: ~s~/ahelp")]
public void CmdAdminHelp(Player player) public void CmdAdminHelp(Player player)
{ {
if (!player.GetUser()?.IsAdmin(AdminLevel.MAPPING) ?? true) if (!player.GetUser()?.IsAdmin(AdminLevel.MAPPING) ?? true)
{ {
ChatService.NotAuthorized(player); ChatService.NotAuthorized(player);
return; return;
} }
else else
{ {
switch (player.GetUser().AdminLevel) switch (player.GetUser().AdminLevel)
{ {
case AdminLevel.MAPPING: case AdminLevel.MAPPING:
ChatService.SendMessage(player, "~b~ " + "/team, /tc, /position"); ChatService.SendMessage(player, "~b~ " + "/team, /tc, /position");
break; break;
case AdminLevel.SUPPORTER:
player.TriggerEvent("showShelp");
break;
case AdminLevel.ADMIN:
player.TriggerEvent("showAhelp");
break;
}
}
}
*/
case AdminLevel.SUPPORTER:
player.TriggerEvent("showShelp");
break;
case AdminLevel.ADMIN:
player.TriggerEvent("showAhelp");
break;
}
}
}
*/
#endregion ahelp #endregion ahelp
#region Mapping / Entwicklung #region Mapping / Entwicklung
[Command("team", "~m~Benutzung: ~s~/team")] [Command("team", "~m~Benutzung: ~s~/team")]
public void CmdAdminTeam(Player player) public void CmdAdminTeam(Player player)
{ {
@@ -234,7 +244,7 @@ namespace ReallifeGamemode.Server.Commands
switch (typ.ToLower()) switch (typ.ToLower())
{ {
case "ip": case "ip":
if(player.HasData("togip")) if (player.HasData("togip"))
{ {
player.ResetData("togip"); player.ResetData("togip");
player.SendNotification("~g~[Info]~w~ Ip´s werden nun ausgeblendet."); player.SendNotification("~g~[Info]~w~ Ip´s werden nun ausgeblendet.");
@@ -258,6 +268,7 @@ namespace ReallifeGamemode.Server.Commands
player.SendNotification("~g~[Info]~w~ Deathlogs werden nun angezeigt."); player.SendNotification("~g~[Info]~w~ Deathlogs werden nun angezeigt.");
} }
break; break;
case "lc": case "lc":
if (player.HasData("toglc")) if (player.HasData("toglc"))
{ {
@@ -299,6 +310,7 @@ namespace ReallifeGamemode.Server.Commands
} }
user.SetBlipAndNametagColor(); user.SetBlipAndNametagColor();
} }
[Command("aduty", "~m~Benutzung: ~s~/aduty")] [Command("aduty", "~m~Benutzung: ~s~/aduty")]
public void CmdAdminAduty(Player player) public void CmdAdminAduty(Player player)
{ {
@@ -314,11 +326,10 @@ namespace ReallifeGamemode.Server.Commands
ChatService.Broadcast("~g~[SUPPORT] " + player.Name + " hat sich zum Support angemeldet"); ChatService.Broadcast("~g~[SUPPORT] " + player.Name + " hat sich zum Support angemeldet");
player.TriggerEvent("toggleADutyMode", true); player.TriggerEvent("toggleADutyMode", true);
} }
else else
{ {
if(player.GetData<bool>("SAdminduty")) if (player.GetData<bool>("SAdminduty"))
{ {
CmdAdminTSupport(player); CmdAdminTSupport(player);
} }
@@ -338,7 +349,7 @@ namespace ReallifeGamemode.Server.Commands
ChatService.NotAuthorized(player); ChatService.NotAuthorized(player);
return; return;
} }
message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", "");
message = Regex.Replace(message, "#([0-9A-Fa-f]{6})", m => "!{" + m.Groups[0].Value + "}"); message = Regex.Replace(message, "#([0-9A-Fa-f]{6})", m => "!{" + m.Groups[0].Value + "}");
@@ -467,8 +478,6 @@ namespace ReallifeGamemode.Server.Commands
target.Kick(); target.Kick();
ChatService.BroadcastAdmin("~y~SKICK: ~w~" + targetPlayername + " wurde von " + player.GetUser().AdminLevel.GetName() + " " + adminPlayername + " gekickt: " + reason, AdminLevel.SUPPORTER); ChatService.BroadcastAdmin("~y~SKICK: ~w~" + targetPlayername + " wurde von " + player.GetUser().AdminLevel.GetName() + " " + adminPlayername + " gekickt: " + reason, AdminLevel.SUPPORTER);
} }
[Command("clearchat", "~m~Benutzung: ~s~/clearchat")] [Command("clearchat", "~m~Benutzung: ~s~/clearchat")]
@@ -780,12 +789,10 @@ namespace ReallifeGamemode.Server.Commands
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(); target.Kick();
ChatService.Broadcast("~y~INFO: ~w~" + targetPlayername + " wurde von " + player.GetUser().AdminLevel.GetName() + " " + adminPlayername + " gekickt: " + reason); ChatService.Broadcast("~y~INFO: ~w~" + targetPlayername + " 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)]
@@ -810,8 +817,8 @@ namespace ReallifeGamemode.Server.Commands
using (var dbContext = new DatabaseContext()) using (var dbContext = new DatabaseContext())
{ {
User userwarn = player.GetUser(dbContext); User userwarn = player.GetUser(dbContext);
userwarn.warn ++; userwarn.warn++;
dbContext.SaveChanges(); dbContext.SaveChanges();
if (userwarn.warn >= 3) if (userwarn.warn >= 3)
{ {
@@ -949,6 +956,7 @@ namespace ReallifeGamemode.Server.Commands
else player.Position = new Vector3(p.X, p.Y, p.Z); else player.Position = new Vector3(p.X, p.Y, p.Z);
} }
} }
[Command("destroyped", "~m~Benutzung: ~s~/destroyped [PedNr]")] [Command("destroyped", "~m~Benutzung: ~s~/destroyped [PedNr]")]
public void CmdAdminAddPPed(Player player, int PedNr) public void CmdAdminAddPPed(Player player, int PedNr)
{ {
@@ -960,6 +968,7 @@ namespace ReallifeGamemode.Server.Commands
player.TriggerEvent("CLIENT:DestroyPed", PedNr); player.TriggerEvent("CLIENT:DestroyPed", PedNr);
//NAPI.Ped.CreatePed(PedHash.Bankman, new Vector3(player.Position.X, player.Position.Y, player.Position.Z), player.Heading, dimension); //NAPI.Ped.CreatePed(PedHash.Bankman, new Vector3(player.Position.X, player.Position.Y, player.Position.Z), player.Heading, dimension);
} }
[Command("addpped", "~m~Benutzung: ~s~/addpped [PedNr] [model] [dimension] [Dynamic] [Freezed] [Collision(0-3)] [Weapon] [AttackProof] [Fire/Explosion-Proof] [DrownProof]")] [Command("addpped", "~m~Benutzung: ~s~/addpped [PedNr] [model] [dimension] [Dynamic] [Freezed] [Collision(0-3)] [Weapon] [AttackProof] [Fire/Explosion-Proof] [DrownProof]")]
public void CmdAdminAddPPed(Player player, Array PedNr, string model, uint dimension = 0, bool dynamic = false, bool freeze = false, int collision = 0, string weapon = "none", bool attackproof = false, bool fireexplosionproof = false, bool drownproof = false) public void CmdAdminAddPPed(Player player, Array PedNr, string model, uint dimension = 0, bool dynamic = false, bool freeze = false, int collision = 0, string weapon = "none", bool attackproof = false, bool fireexplosionproof = false, bool drownproof = false)
{ {
@@ -971,6 +980,7 @@ namespace ReallifeGamemode.Server.Commands
player.TriggerEvent("CLIENT:AddPed", PedNr, model, player.Position.X, player.Position.Y, player.Position.Z, player.Heading, dimension, dynamic, freeze, collision, weapon, attackproof, fireexplosionproof, drownproof); player.TriggerEvent("CLIENT:AddPed", PedNr, model, player.Position.X, player.Position.Y, player.Position.Z, player.Heading, dimension, dynamic, freeze, collision, weapon, attackproof, fireexplosionproof, drownproof);
//NAPI.Ped.CreatePed(PedHash.Bankman, new Vector3(player.Position.X, player.Position.Y, player.Position.Z), player.Heading, dimension); //NAPI.Ped.CreatePed(PedHash.Bankman, new Vector3(player.Position.X, player.Position.Y, player.Position.Z), player.Heading, dimension);
} }
[Command("addmped", "~m~Benutzung: ~s~/addmped [model] [dimension]")] [Command("addmped", "~m~Benutzung: ~s~/addmped [model] [dimension]")]
public void CmdAdminAddMPed(Player player, int model, uint dimension = 0) public void CmdAdminAddMPed(Player player, int model, uint dimension = 0)
{ {
@@ -982,6 +992,7 @@ namespace ReallifeGamemode.Server.Commands
player.TriggerEvent("CLIENT:AddPedModel", model, player.Position.X, player.Position.Y, player.Position.Z, player.Heading, dimension); player.TriggerEvent("CLIENT:AddPedModel", model, player.Position.X, player.Position.Y, player.Position.Z, player.Heading, dimension);
//NAPI.Ped.CreatePed(PedHash.Bankman, new Vector3(player.Position.X, player.Position.Y, player.Position.Z), player.Heading, dimension); //NAPI.Ped.CreatePed(PedHash.Bankman, new Vector3(player.Position.X, player.Position.Y, player.Position.Z), player.Heading, dimension);
} }
[Command("addgped", "~m~Benutzung: ~s~/addgped")] [Command("addgped", "~m~Benutzung: ~s~/addgped")]
public void CmdAdminAddGPed(Player player, int model, uint dimension = 0) public void CmdAdminAddGPed(Player player, int model, uint dimension = 0)
{ {
@@ -995,6 +1006,7 @@ namespace ReallifeGamemode.Server.Commands
//Peter.freezePosition(true); //Peter.freezePosition(true);
} }
[Command("addgpedmore", "~m~Benutzung: ~s~/addgpedMore")] [Command("addgpedmore", "~m~Benutzung: ~s~/addgpedMore")]
public void CmdAdminAddGPedMore(Player player, int model, uint dimension = 0) public void CmdAdminAddGPedMore(Player player, int model, uint dimension = 0)
{ {
@@ -1193,7 +1205,7 @@ namespace ReallifeGamemode.Server.Commands
[Command("respawnvehicle", "~m~Benutzung: ~s~/respawnvehicle (Db ID)", Alias = "rveh")] [Command("respawnvehicle", "~m~Benutzung: ~s~/respawnvehicle (Db ID)", Alias = "rveh")]
public void CmdAdminRespawnVehicle(Player player, int id = -1) public void CmdAdminRespawnVehicle(Player player, int id = -1)
{ {
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) //change back to Admin
{ {
ChatService.NotAuthorized(player); ChatService.NotAuthorized(player);
return; return;
@@ -1256,7 +1268,7 @@ namespace ReallifeGamemode.Server.Commands
foreach (Vehicle v in vehiclesInRange) foreach (Vehicle v in vehiclesInRange)
{ {
ServerVehicle serverVehicle = VehicleManager.GetServerVehicleFromVehicle(v); ServerVehicle serverVehicle = VehicleManager.GetServerVehicleFromVehicle(v);
if(serverVehicle == null) if (serverVehicle == null)
{ {
VehicleManager.DeleteVehicle(v); VehicleManager.DeleteVehicle(v);
v.Trailer?.Delete(); v.Trailer?.Delete();
@@ -1462,7 +1474,7 @@ namespace ReallifeGamemode.Server.Commands
} }
ChatService.SendMessage(target, "!{#8181E9}Deine Akte wurde vom Admin " + player.Name + " gelöscht. Grund: " + reason); ChatService.SendMessage(target, "!{#8181E9}Deine Akte wurde vom Admin " + player.Name + " gelöscht. Grund: " + reason);
ChatService.BroadcastFaction("!{#8181E9}HQ: Die Akte von " + target.Name + " wurde vom Admin " + player.Name + " gelöscht. Grund: " + reason + ".", new List<int>() { 1, 3 }); ChatService.BroadcastFaction("!{#8181E9}HQ: Die Akte von " + target.Name + " wurde vom Admin " + player.Name + " gelöscht. Grund: " + reason + ".", new List<int>() { 1, 3 });
target.TriggerEvent("jailTime", 0); target.TriggerEvent("jailTime", 0);
targetUser.Wanteds = 0; targetUser.Wanteds = 0;
@@ -1687,6 +1699,7 @@ namespace ReallifeGamemode.Server.Commands
#endregion Admin #endregion Admin
#region ALevel1337 #region ALevel1337
/*NUR ZUM TESTEN /*NUR ZUM TESTEN
[Command("fakedeath", "~m~Benutzung:~s~ /fakedeath")] [Command("fakedeath", "~m~Benutzung:~s~ /fakedeath")]
public void CmdAdmFakeDeath(Player player) public void CmdAdmFakeDeath(Player player)
@@ -1718,7 +1731,7 @@ namespace ReallifeGamemode.Server.Commands
ChatService.NotAuthorized(player); ChatService.NotAuthorized(player);
return; return;
} }
player.SetSharedData("blipColor", blipId); player.SetSharedData("blipColor", blipId);
} }
[Command("setsvar", "~m~Benutzung:~s~ /setsvar [ID] [WERT]")] [Command("setsvar", "~m~Benutzung:~s~ /setsvar [ID] [WERT]")]
@@ -1996,7 +2009,7 @@ namespace ReallifeGamemode.Server.Commands
{ {
if (!managedPlayer.IsLoggedIn()) return; if (!managedPlayer.IsLoggedIn()) return;
managedPlayer.GetUser(dbContext).Wage += wage; managedPlayer.GetUser(dbContext).Wage += wage;
ChatService.SendMessage(managedPlayer, "~b~Admin " + player.Name + " hat im Radius von " + radius + " den Verdienst um $" + wage + " erhöht."); ChatService.SendMessage(managedPlayer, "~b~Admin " + player.Name + " hat im Radius von " + radius + " den Verdienst um $" + wage + " erhöht.");
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
@@ -2130,12 +2143,14 @@ namespace ReallifeGamemode.Server.Commands
player.SendChatMessage("Modifier steht auf" + modifier); player.SendChatMessage("Modifier steht auf" + modifier);
player.TriggerEvent("SERVER:WeaponModifier2", player, modifier, 1); player.TriggerEvent("SERVER:WeaponModifier2", player, modifier, 1);
} }
[Command("wepmmod", "~m~Benutzung: ~s~/wepmmod [Variable]")] [Command("wepmmod", "~m~Benutzung: ~s~/wepmmod [Variable]")]
public void CmdWeaponMeeleModifier(Player player, float modifier) public void CmdWeaponMeeleModifier(Player player, float modifier)
{ {
player.SendChatMessage("MeeleModifier steht auf" + modifier); player.SendChatMessage("MeeleModifier steht auf" + modifier);
player.TriggerEvent("SERVER:WeaponModifier2", player, 1, modifier); player.TriggerEvent("SERVER:WeaponModifier2", player, 1, modifier);
} }
[Command("gotocp", "~m~Benutzung: ~s~/gotocp")] [Command("gotocp", "~m~Benutzung: ~s~/gotocp")]
public void CmdAdminGotocp(Player admin) public void CmdAdminGotocp(Player admin)
{ {
@@ -2379,7 +2394,7 @@ namespace ReallifeGamemode.Server.Commands
NAPI.Player.SpawnPlayer(managedPlayer, managedPlayer.Position); NAPI.Player.SpawnPlayer(managedPlayer, managedPlayer.Position);
managedPlayer.Health = 100; managedPlayer.Health = 100;
Medic.delReviveTask(managedPlayer); Medic.delReviveTask(managedPlayer);
} }
ChatService.SendMessage(player, "~b~Du hast " + playerRevided + " Spieler wiederbelebt."); ChatService.SendMessage(player, "~b~Du hast " + playerRevided + " Spieler wiederbelebt.");
@@ -2452,10 +2467,10 @@ namespace ReallifeGamemode.Server.Commands
{ {
ChatService.PlayerNotFound(player); ChatService.PlayerNotFound(player);
return; return;
} }
using (var dbContext = new DatabaseContext()) using (var dbContext = new DatabaseContext())
{ {
Faction f = dbContext.Factions.FirstOrDefault(x => x.Id == faction); Faction f = dbContext.Factions.FirstOrDefault(x => x.Id == faction);
if (f == null) if (f == null)
{ {
@@ -2663,6 +2678,7 @@ namespace ReallifeGamemode.Server.Commands
player.SetIntoVehicle(vehicle, 0); player.SetIntoVehicle(vehicle, 0);
} }
break; break;
case "noobvehicle": case "noobvehicle":
if (player.IsInVehicle) if (player.IsInVehicle)
{ {
@@ -3056,6 +3072,7 @@ namespace ReallifeGamemode.Server.Commands
player.TriggerEvent("manageFactionRanks", json); player.TriggerEvent("manageFactionRanks", json);
} }
} }
[Command("setdoor", "~m~Benutzung: ~s~/setdoor [open/shut] [Tür] [Boolean:Permanet] [Boolean:Lose]")] [Command("setdoor", "~m~Benutzung: ~s~/setdoor [open/shut] [Tür] [Boolean:Permanet] [Boolean:Lose]")]
public void CmdAdminSetDoorOpen(Player player, string status, int door, bool permanent = false, bool lose = true) public void CmdAdminSetDoorOpen(Player player, string status, int door, bool permanent = false, bool lose = true)
{ {
@@ -3080,6 +3097,7 @@ namespace ReallifeGamemode.Server.Commands
} }
} }
} }
[Command("aplaysound", "~m~Benutzung: ~s~/aplaysound [Dateiname] [mp3/wav] [volume 0.0 - 100.0]", Alias = "aps")] [Command("aplaysound", "~m~Benutzung: ~s~/aplaysound [Dateiname] [mp3/wav] [volume 0.0 - 100.0]", Alias = "aps")]
public void CmdAdminPlaySound(Player player, string sound, string typ, double volume = 100) public void CmdAdminPlaySound(Player player, string sound, string typ, double volume = 100)
{ {
@@ -3090,6 +3108,7 @@ namespace ReallifeGamemode.Server.Commands
} }
player.TriggerEvent("CLIENT:PlaySound", sound, typ, volume); player.TriggerEvent("CLIENT:PlaySound", sound, typ, volume);
} }
[Command("astopsound", "~m~Benutzung: ~s~/astopsound", Alias = "ass")] [Command("astopsound", "~m~Benutzung: ~s~/astopsound", Alias = "ass")]
public void CmdAdminStopSound(Player player) public void CmdAdminStopSound(Player player)
{ {
@@ -3100,6 +3119,7 @@ namespace ReallifeGamemode.Server.Commands
} }
player.TriggerEvent("CLIENT:StopSound"); player.TriggerEvent("CLIENT:StopSound");
} }
[Command("aspeed", "~m~Benutzung: ~s~/aspeed [Modifier1] [Modifier2]")] //TODO: Überarbeiten ?? SetPlayerVelocity ?? [Command("aspeed", "~m~Benutzung: ~s~/aspeed [Modifier1] [Modifier2]")] //TODO: Überarbeiten ?? SetPlayerVelocity ??
public void CmdAdminAspeed(Player player, int modifier, int modifier2 = 1) public void CmdAdminAspeed(Player player, int modifier, int modifier2 = 1)
{ {
@@ -3521,13 +3541,13 @@ namespace ReallifeGamemode.Server.Commands
public void CmdAdminCheckStats(Player player, string nameOrId) public void CmdAdminCheckStats(Player player, string nameOrId)
{ {
User user = player.GetUser(); User user = player.GetUser();
if(!user.IsAdmin(AdminLevel.SUPPORTER)) if (!user.IsAdmin(AdminLevel.SUPPORTER))
{ {
ChatService.NotAuthorized(player); ChatService.NotAuthorized(player);
} }
Player target = PlayerService.GetPlayerByNameOrId(nameOrId); Player target = PlayerService.GetPlayerByNameOrId(nameOrId);
if(target == null || !target.IsLoggedIn()) if (target == null || !target.IsLoggedIn())
{ {
ChatService.PlayerNotFound(player); ChatService.PlayerNotFound(player);
return; return;
@@ -3543,7 +3563,6 @@ namespace ReallifeGamemode.Server.Commands
ChatService.SendMessage(player, $"Stats von {target.Name} - HandMoney: {handmoney.ToMoneyString()}, BankMoney: {bankmoney.ToMoneyString()}, DriverLicense: {driverLicense.ToString()}, BikeLicense: {bikeLicense.ToString()}, FlyingLicense: {flyingLicense.ToString()}, WeaponLicense: {weaponLicense.ToString()}"); ChatService.SendMessage(player, $"Stats von {target.Name} - HandMoney: {handmoney.ToMoneyString()}, BankMoney: {bankmoney.ToMoneyString()}, DriverLicense: {driverLicense.ToString()}, BikeLicense: {bikeLicense.ToString()}, FlyingLicense: {flyingLicense.ToString()}, WeaponLicense: {weaponLicense.ToString()}");
} }
#endregion ALevel1337 #endregion ALevel1337
#region ALevel1338 #region ALevel1338
@@ -3662,9 +3681,8 @@ namespace ReallifeGamemode.Server.Commands
{ {
return; return;
} }
if(player.HasData("Adminduty") && player.GetData<bool>("Adminduty")) if (player.HasData("Adminduty") && player.GetData<bool>("Adminduty"))
player.TriggerEvent("ADMIN:NoClip"); player.TriggerEvent("ADMIN:NoClip");
} }
} }
} }

View File

@@ -11,6 +11,7 @@ using ReallifeGamemode.Server.Factions.Medic;
using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Types; using ReallifeGamemode.Server.Types;
using ReallifeGamemode.Server.Util;
using ReallifeGamemode.Services; using ReallifeGamemode.Services;
/** /**
@@ -57,7 +58,7 @@ namespace ReallifeGamemode.Server.Commands
string rank = string.Empty; string rank = string.Empty;
if(f?.Name == "Ballas" || f?.Name == "Grove") if (f?.Name == "Ballas" || f?.Name == "Grove")
{ {
rank = player.GetUser().GetFactionRank().RankName; rank = player.GetUser().GetFactionRank().RankName;
} }
@@ -109,7 +110,7 @@ namespace ReallifeGamemode.Server.Commands
string factionName = string.Empty; string factionName = string.Empty;
if(f?.StateOwned ?? false) if (f?.StateOwned ?? false)
{ {
factionName = u.GetFactionRank().RankName; factionName = u.GetFactionRank().RankName;
} }
@@ -127,7 +128,6 @@ namespace ReallifeGamemode.Server.Commands
#endregion Chat Commands #endregion Chat Commands
#region NewsReporter commands #region NewsReporter commands
[Command("news", "~m~Benutzung: ~s~/news [Nachricht]", GreedyArg = true)] [Command("news", "~m~Benutzung: ~s~/news [Nachricht]", GreedyArg = true)]
@@ -139,12 +139,12 @@ namespace ReallifeGamemode.Server.Commands
ChatService.NotAuthorized(player); ChatService.NotAuthorized(player);
return; return;
} }
if (player.GetUser().Faction.Id == 9 ) if (player.GetUser().Faction.Id == 9)
{ {
message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", "");
string broadcastMessage = "!{ff9531}** News Reporter" + " " + player.Name + ": " + message + " **"; string broadcastMessage = "!{ff9531}** News Reporter" + " " + player.Name + ": " + message + " **";
ChatService.Broadcast(broadcastMessage); ChatService.Broadcast(broadcastMessage);
} }
else else
{ {
@@ -152,11 +152,8 @@ namespace ReallifeGamemode.Server.Commands
} }
} }
#endregion NewsReporter commands #endregion NewsReporter commands
#region Leader Commands #region Leader Commands
[Command("giverank", "~m~Benutzung: ~s~/giverank [Name] [Rang]", GreedyArg = true)] [Command("giverank", "~m~Benutzung: ~s~/giverank [Name] [Rang]", GreedyArg = true)]
@@ -212,7 +209,7 @@ namespace ReallifeGamemode.Server.Commands
message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", "");
string factionName = string.Empty; string factionName = string.Empty;
if(user.FactionLeader) if (user.FactionLeader)
{ {
factionName = player.GetUser().Faction.Name; factionName = player.GetUser().Faction.Name;
} }
@@ -226,7 +223,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 || pUser.IsAdmin(AdminLevel.ADMIN)) if ((pUser?.FactionLeader ?? false) || pUser.IsAdmin(AdminLevel.ADMIN))
{ {
ChatService.SendMessage(p, broadcastMsg); ChatService.SendMessage(p, broadcastMsg);
} }
@@ -329,7 +326,7 @@ namespace ReallifeGamemode.Server.Commands
deadPlayerUser.Handmoney = 0; deadPlayerUser.Handmoney = 0;
deadPlayerUser.BankAccount.Balance -= bankMoney; deadPlayerUser.BankAccount.Balance -= bankMoney;
} }
player.PlayAnimation("amb@medic@standing@kneel@enter", "enter", 0); player.PlayAnimation("amb@medic@standing@kneel@enter", "enter", 0);
deadPlayer.TriggerEvent("onPlayerRevived"); deadPlayer.TriggerEvent("onPlayerRevived");
@@ -363,7 +360,7 @@ namespace ReallifeGamemode.Server.Commands
return; return;
} }
if(player.Position.DistanceTo(target.Position) > 5) if (player.Position.DistanceTo(target.Position) > 5)
{ {
ChatService.ErrorMessage(player, "Der Patient ist zu weit entfernt"); ChatService.ErrorMessage(player, "Der Patient ist zu weit entfernt");
return; return;
@@ -398,16 +395,40 @@ namespace ReallifeGamemode.Server.Commands
return; return;
} }
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.HealDecisions.Add(new Medic.HealDecision {dMedic = player, dTarget = target, dPrice = price}); Medic.HealDecisions.Add(new Medic.HealDecision { dMedic = player, dTarget = target, dPrice = price });
} }
#endregion Sanitäter Commands #endregion Sanitäter Commands
#region Staatsfraktionen (LSPD / FBI) Commands #region Staatsfraktionen (LSPD / FBI) Commands
[Command("cuff", "~m~Benutzung: ~s~/cuff")]
public void CmdFactionCuff(Player player)
{
User user = player.GetUser();
if (user == null || (user.FactionId != 1 && user.FactionId != 3))
{
ChatService.NotAuthorized(player);
return;
}
if (!player.IsDuty())
{
ChatService.ErrorMessage(player, "Du bist nicht im Dienst");
return;
}
Player nearestCuffPlayer = PositionManager.cuffPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.6 && user.GetData<bool>("duty"));
if (nearestCuffPlayer is null)
return;
player.CuffPlayer(nearestCuffPlayer);
}
[Command("wanted", "~m~Benutzung: ~s~/wa(nted) [Spieler] [Anzahl] [Grund]", Alias = "wa", GreedyArg = true)] [Command("wanted", "~m~Benutzung: ~s~/wa(nted) [Spieler] [Anzahl] [Grund]", Alias = "wa", GreedyArg = true)]
public void CmdFactionWanted(Player player, string nameOrId, int amount, string reason) public void CmdFactionWanted(Player player, string nameOrId, int amount, string reason)
{ {
@@ -480,7 +501,7 @@ namespace ReallifeGamemode.Server.Commands
} }
ChatService.SendMessage(target, "!{#8181E9}Deine Akte wurde von " + player.Name + " gelöscht. Grund: " + reason); ChatService.SendMessage(target, "!{#8181E9}Deine Akte wurde von " + player.Name + " gelöscht. Grund: " + reason);
ChatService.BroadcastFaction("!{#8181E9}HQ: Die Akte von " + target.Name + " wurde von " + player.Name + " gelöscht. Grund: " + reason + ".", new List<int>() { 1, 3 }); ChatService.BroadcastFaction("!{#8181E9}HQ: Die Akte von " + target.Name + " wurde von " + player.Name + " gelöscht. Grund: " + reason + ".", new List<int>() { 1, 3 });
target.TriggerEvent("jailTime", 0); target.TriggerEvent("jailTime", 0);
targetUser.Wanteds = 0; targetUser.Wanteds = 0;
@@ -491,11 +512,12 @@ namespace ReallifeGamemode.Server.Commands
} }
#endregion Staatsfraktionen (LSPD / FBI) Commands #endregion Staatsfraktionen (LSPD / FBI) Commands
#region Weazel News #region Weazel News
[Command("eventchat", "~m~Benutzung: ~s~/eventchat [Typ = ~g~on~s~, ~g~off~s~]", GreedyArg = true)] [Command("eventchat", "~m~Benutzung: ~s~/eventchat [Typ = ~g~on~s~, ~g~off~s~]", GreedyArg = true)]
public void CmdFactionNREventchat(Player player, string onoff) public void CmdFactionNREventchat(Player player, string onoff)
{ {
switch (onoff.ToLower()) switch (onoff.ToLower())
{ {
case "on": case "on":
@@ -513,14 +535,9 @@ namespace ReallifeGamemode.Server.Commands
}); });
player.SendNotification("Der Eventchat ist nun aus."); player.SendNotification("Der Eventchat ist nun aus.");
break; break;
} }
} }
#endregion Weazel News #endregion Weazel News
} }
} }

View File

@@ -16,14 +16,12 @@ namespace ReallifeGamemode.Server.Commands
{ {
internal class UserCommands : Script internal class UserCommands : Script
{ {
[Command("skill")] [Command("skill")]
public void CmdUserSkill(Player player) public void CmdUserSkill(Player player)
{ {
User user = player.GetUser(new DatabaseContext()); User user = player.GetUser(new DatabaseContext());
player.SendChatMessage($"~c~BusSkill = {user.BusSkill}/800, PilotSkill = {user.PilotSkill}/300."); player.SendChatMessage($"~c~BusSkill = {user.BusSkill}/800, PilotSkill = {user.PilotSkill}/300.");
} }
[Command("id", "~m~Benutzung: ~s~/id [Name]")] [Command("id", "~m~Benutzung: ~s~/id [Name]")]
@@ -34,7 +32,8 @@ namespace ReallifeGamemode.Server.Commands
if (target == null) if (target == null)
{ {
player.SendChatMessage("~c~Spieler ist nicht online."); player.SendChatMessage("~c~Spieler ist nicht online.");
} else }
else
{ {
player.SendChatMessage("~c~ID: (" + target.Id + ") " + target.Name); player.SendChatMessage("~c~ID: (" + target.Id + ") " + target.Name);
} }
@@ -90,6 +89,7 @@ namespace ReallifeGamemode.Server.Commands
ChatService.SendMessage(player, "~m~" + ((VehicleHash)pVeh.Model) + " | Farbe 1: " + pVeh.PrimaryColor + " | Farbe 2: " + pVeh.SecondaryColor + " | ID: " + pVeh.Handle.Value); ChatService.SendMessage(player, "~m~" + ((VehicleHash)pVeh.Model) + " | Farbe 1: " + pVeh.PrimaryColor + " | Farbe 2: " + pVeh.SecondaryColor + " | ID: " + pVeh.Handle.Value);
} }
} }
[Command("help", "~m~Benutzung: ~s~/help")] [Command("help", "~m~Benutzung: ~s~/help")]
public void CmdHelp(Player player) public void CmdHelp(Player player)
{ {
@@ -106,8 +106,7 @@ namespace ReallifeGamemode.Server.Commands
[Command("hup")] [Command("hup")]
public void CmdAnim(Player player) public void CmdAnim(Player player)
{ {
player.StopAnimation(); player.ToggleSurrender();
player.PlayAnimation("mp_am_hold_up", "handsup_base", (int)(AnimationFlags.Loop | AnimationFlags.OnlyAnimateUpperBody | AnimationFlags.AllowPlayerControl | AnimationFlags.Cancellable));
} }
[Command("event", "~m~Benutzung: ~s~/event [Nachricht]", GreedyArg = true)] [Command("event", "~m~Benutzung: ~s~/event [Nachricht]", GreedyArg = true)]
@@ -118,9 +117,7 @@ namespace ReallifeGamemode.Server.Commands
ChatService.NotAuthorized(player); ChatService.NotAuthorized(player);
return; return;
} }
ChatService.BroadcastFaction("~b~[Event] " + player.Name + ": " + msg, new List<int>() { 9 }) ; ChatService.BroadcastFaction("~b~[Event] " + player.Name + ": " + msg, new List<int>() { 9 });
} }
} }
} }

View File

@@ -81,8 +81,8 @@ namespace ReallifeGamemode.Server.Events
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 + "] (" + player.Address + ")";
if(player.HasData("togip")) if (player.HasData("togip"))
{ {
ChatService.SendMessage(player, msg); ChatService.SendMessage(player, msg);
} }
} }

View File

@@ -25,71 +25,74 @@ namespace ReallifeGamemode.Server.Events
public class Death : Script public class Death : Script
{ {
[ServerEvent(Event.PlayerDeath)] [ServerEvent(Event.PlayerDeath)]
public void OnPlayerDeath(Player player, Player killer, uint reason ) public void OnPlayerDeath(Player player, Player killer, uint reason)
{ {
if (!player.IsLoggedIn()) if (!player.IsLoggedIn())
{ {
player.Kick(); player.Kick();
return; return;
} }
player.SetData("isDead", true);
using var dbContext = new DatabaseContext();
using (var userDeath = new DatabaseContext()) User user = player.GetUser(dbContext);
{
User userisdead = player.GetUser(userDeath); PositionManager.cuffPoints.Remove(player);
userisdead.Dead = true;
userDeath.SaveChanges();
}
//TODO: Zum Full Release entfernen //TODO: Zum Full Release entfernen
if (player.HasData("togdeath")) { if (player.HasData("togdeath"))
ChatService.SendMessage(player, "Du bist durch " + (killer?.Name ?? "Niemanden") + " gestorben: " + reason.ToString());
}
int? killerId;
float killerPosX;
float killerPosY;
float killerPosZ;
float killerHeading;
if (killer == null || killer.IsNull)
{ {
killerId = null; ChatService.SendMessage(player, "Du bist durch " + (killer?.Name ?? "Niemanden") + " gestorben: " + reason.ToString());
killerPosX = -1; }
killerPosY = -1; int? killerId = null;
killerPosZ = -1; float killerPosX = -1;
killerHeading = -1; float killerPosY = -1;
float killerPosZ = -1;
float killerHeading = -1;
if (killer.IsLoggedIn())
{
var killerUser = killer.GetUser(dbContext);
if (killerUser != null)
{
killerId = killerUser.Id;
killerPosX = killer.Position.X;
killerPosY = killer.Position.Y;
killerPosZ = killer.Position.Z;
killerHeading = killer.Heading;
if (player.HasData("inGangWar") && killer.HasData("inGangWar"))
{
Gangwar.Gangwar.GangwarKill(killer, player);
}
if (player != killer)
{
Autowanted.Check_AutoWanted(killer, player);
string message = "~y~[HINWEIS]: " + killer.Name + " hat " + player.Name + " getötet (" + Managers.WeaponManager.GetCauseOfDeathByHash(reason) + ")";
ChatService.BroadcastAdmin(message, AdminLevel.ADMIN);
}
}
}
bool copNearby = NAPI.Pools.GetAllPlayers().Any(u => u.IsDuty() && u.IsAlive() && u.Position.DistanceToSquared(player.Position) <= 200 * 200);
if (copNearby)
{
user.SetJailTime(true);
Jail.Check_PutBehindBars(user);
ChatService.HQMessage(user.Name + " wurde ins Gefängnis eingeliefert.");
} }
else else
{ {
var killerUser = killer.GetUser(); ChatService.HQMessage(user.Name + " wurde soeben ins Krankenhaus eingeliefert.");
if (killerUser == null)
{
return;
}
killerId = killerUser.Id;
killerPosX = killer.Position.X;
killerPosY = killer.Position.Y;
killerPosZ = killer.Position.Z;
killerHeading = killer.Heading;
if (player.HasData("inGangWar") && killer.HasData("inGangWar"))
{
Gangwar.Gangwar.GangwarKill(killer, player);
}
if (player != killer)
{
Autowanted.Check_AutoWanted(killer, player);
string message = "~y~[HINWEIS]: " + killer.Name + " hat " + player.Name + " getötet (" + Managers.WeaponManager.GetCauseOfDeathByHash(reason) + ")";
ChatService.BroadcastAdmin(message, AdminLevel.ADMIN);
}
} }
User user = player.GetUser();
if (user.JailTime <= 0) if (user.JailTime <= 0)
{ {
player.SetData("isDead", true);
user.Dead = true;
if (!player.HasData("reviveSperre")) if (!player.HasData("reviveSperre"))
{ {
//MEDIC AUFTRAG //MEDIC AUFTRAG
@@ -108,8 +111,6 @@ namespace ReallifeGamemode.Server.Events
Medic.delHealTask(player); Medic.delHealTask(player);
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 });
} }
if (player.GetUser().IsAdmin(AdminLevel.ADMIN) == true) if (player.GetUser().IsAdmin(AdminLevel.ADMIN) == true)
{ {
@@ -123,32 +124,28 @@ namespace ReallifeGamemode.Server.Events
//TODO PICTURE NOTIFICATION + SOUND für Medics //TODO PICTURE NOTIFICATION + SOUND für Medics
player.ClearAttachments(); player.ClearAttachments();
List<UserItem> fItem = dbContext.UserItems.Where(u => u.UserId == user.Id).ToList();
using (var userDeath = new DatabaseContext()) foreach (var item in fItem)
{ {
List<UserItem> fItem = userDeath.UserItems.Where(u => u.UserId == user.Id).ToList(); IItem iItem = InventoryManager.GetItemById(item.ItemId);
foreach (var item in fItem) if (iItem is IWeaponDealItem obj)
{ {
IItem iItem = InventoryManager.GetItemById(item.ItemId); int amount = item.Amount;
if (iItem is IWeaponDealItem obj)
{
int amount = item.Amount;
Vector3 dropPosition = PlayerExtension.GetPositionFromPlayer(player, 0.6f, 0); Vector3 dropPosition = PlayerExtension.GetPositionFromPlayer(player, 0.6f, 0);
//new Vector3(player.Position.X, player.Position.Y, player.Position.Z - 0.8f); //new Vector3(player.Position.X, player.Position.Y, player.Position.Z - 0.8f);
Random r = new Random(); Random r = new Random();
GTANetworkAPI.Object grndObject; GTANetworkAPI.Object grndObject;
Vector3 textPos = dropPosition; Vector3 textPos = dropPosition;
dropPosition.Z -= 1.05f; dropPosition.Z -= 1.05f;
grndObject = NAPI.Object.CreateObject(3666746839, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 255, 0); grndObject = NAPI.Object.CreateObject(3666746839, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 255, 0);
GroundItem grndItem = new GroundItem { ItemId = iItem.Id, Amount = amount, Position = dropPosition }; GroundItem grndItem = new GroundItem { ItemId = iItem.Id, Amount = amount, Position = dropPosition };
TextLabel grndTxtLbl = NAPI.TextLabel.CreateTextLabel(iItem.Name + " ~s~(~y~" + amount + "~s~)", textPos, 5, 0.5f, 4, new Color(255, 255, 255), false, 0); TextLabel grndTxtLbl = NAPI.TextLabel.CreateTextLabel(iItem.Name + " ~s~(~y~" + amount + "~s~)", textPos, 5, 0.5f, 4, new Color(255, 255, 255), false, 0);
GroundItem.AddGroundItem(grndItem, grndObject, grndTxtLbl); GroundItem.AddGroundItem(grndItem, grndObject, grndTxtLbl);
userDeath.Remove(item); dbContext.Remove(item);
}
} }
var dead = new Database.Entities.Logs.Death var dead = new Database.Entities.Logs.Death
@@ -165,8 +162,7 @@ namespace ReallifeGamemode.Server.Events
VictimHeading = player.Heading, VictimHeading = player.Heading,
CauseOfDeath = reason.ToString() CauseOfDeath = reason.ToString()
}; };
userDeath.DeathLogs.Add(dead); dbContext.DeathLogs.Add(dead);
userDeath.SaveChanges();
} }
} }
Job.JobBase job = Managers.JobManager.GetJob(player.GetUser().JobId ?? -1); Job.JobBase job = Managers.JobManager.GetJob(player.GetUser().JobId ?? -1);
@@ -219,9 +215,7 @@ namespace ReallifeGamemode.Server.Events
//ChatService.SendMessage(player, "Debug10"); //ChatService.SendMessage(player, "Debug10");
} }
} }
dbContext.SaveChanges();
//JailTime.cs
Jail.Check_PutBehindBars(player);
} }
[RemoteEvent("RespawnPlayerAtHospital")] [RemoteEvent("RespawnPlayerAtHospital")]

View File

@@ -15,17 +15,15 @@ namespace ReallifeGamemode.Server.Events
public class EnterVehicleAttempt : Script public class EnterVehicleAttempt : Script
{ {
public static GTANetworkAPI.Vehicle Roller; public static GTANetworkAPI.Vehicle Roller;
[ServerEvent(Event.PlayerEnterVehicleAttempt)] [ServerEvent(Event.PlayerEnterVehicleAttempt)]
public void OnPlayerEnterVehicleAttempt(Player player, GTANetworkAPI.Vehicle vehicle, sbyte seat) public void OnPlayerEnterVehicleAttempt(Player player, GTANetworkAPI.Vehicle vehicle, sbyte seat)
{ {
if ((VehicleHash)vehicle.Model == VehicleHash.Dune3)
{
if (seat == 1) seat = 0;
else if (seat == 0) seat = 1;
}
if (seat != 0) return; if (seat != 0) return;
if (player.HasAnimation())
player.StopAnimation();
User u = player.GetUser(); User u = player.GetUser();
if (vehicle.GetServerVehicle() is FactionVehicle veh) if (vehicle.GetServerVehicle() is FactionVehicle veh)
@@ -84,7 +82,6 @@ namespace ReallifeGamemode.Server.Events
return; return;
} }
} }
} }
if (vehicle.GetServerVehicle() is SchoolVehicle sVeh) if (vehicle.GetServerVehicle() is SchoolVehicle sVeh)
{ {

View File

@@ -21,7 +21,7 @@ using ReallifeGamemode.Server.WeaponDeal;
/** /**
* @overview Life of German Reallife - Event Key (Key.cs) * @overview Life of German Reallife - Event Key (Key.cs)
* @author VegaZ * @author VegaZ, balbo
* @copyright (c) 2008 - 2018 Life of German * @copyright (c) 2008 - 2018 Life of German
*/ */
@@ -30,6 +30,7 @@ namespace ReallifeGamemode.Server.Events
public class Key : Script public class Key : Script
{ {
#region User Key #region User Key
[RemoteEvent("keyPress:NUM2")] [RemoteEvent("keyPress:NUM2")]
public void KeyPressNUM2(Player player) public void KeyPressNUM2(Player player)
{ {
@@ -60,6 +61,7 @@ namespace ReallifeGamemode.Server.Events
GroundItem.PickUpGroundItem(player); GroundItem.PickUpGroundItem(player);
} }
/* /*
[RemoteEvent("keyPress:LEFT_ARROW")] [RemoteEvent("keyPress:LEFT_ARROW")]
public void KeyPressLeftArrow(Player player) public void KeyPressLeftArrow(Player player)
@@ -85,6 +87,7 @@ namespace ReallifeGamemode.Server.Events
} }
} }
*/ */
[RemoteEvent("keyPress:RIGHT_ARROW")] [RemoteEvent("keyPress:RIGHT_ARROW")]
public void KeyPressRightArrow(Player player) public void KeyPressRightArrow(Player player)
{ {
@@ -116,6 +119,7 @@ namespace ReallifeGamemode.Server.Events
using var dbContext = new DatabaseContext(); using var dbContext = new DatabaseContext();
User u = player.GetUser(dbContext); User u = player.GetUser(dbContext);
if (u == null) return; if (u == null) return;
if (player.GetData<bool>("isDead")) return;
var vehicles = dbContext.UserVehicles.Where(veh => veh.UserId == u.Id).OrderBy(veh => veh.Id).Select(v => new var vehicles = dbContext.UserVehicles.Where(veh => veh.UserId == u.Id).OrderBy(veh => veh.Id).Select(v => new
{ {
@@ -148,7 +152,6 @@ namespace ReallifeGamemode.Server.Events
factionRank = u.GetFactionRank().RankName, factionRank = u.GetFactionRank().RankName,
group = u.Group?.Name ?? "Keine", group = u.Group?.Name ?? "Keine",
groupRank = u.GroupRank.GetName(), groupRank = u.GroupRank.GetName(),
job = JobManager.GetJob(u.JobId ?? 0)?.Name ?? "Keiner",
paycheck, paycheck,
licenses, licenses,
vehicles, vehicles,
@@ -158,6 +161,14 @@ namespace ReallifeGamemode.Server.Events
userWarn = u.warn, userWarn = u.warn,
}; };
var jobData = new
{
job = JobManager.GetJob(u.JobId ?? 0)?.Name ?? "Keiner",
busskill = u.BusSkill,
pilotskill = u.PilotSkill,
wage = u.Wage,
};
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;
@@ -168,7 +179,7 @@ namespace ReallifeGamemode.Server.Events
int pay_amount = 0; int pay_amount = 0;
bool house = false; bool house = false;
if(u.House != null) if (u.House != null)
{ {
house = true; house = true;
} }
@@ -183,8 +194,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, 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")]
@@ -193,16 +203,15 @@ namespace ReallifeGamemode.Server.Events
if (!player.IsLoggedIn()) return; if (!player.IsLoggedIn()) return;
var user = player.GetUser(); var user = player.GetUser();
if (player.HasData("nearATM")) if (player.HasData("nearATM"))
{ {
ATMManager.ShowAtmUi(player, player.GetData<int>("nearATM")); ATMManager.ShowAtmUi(player, player.GetData<int>("nearATM"));
return; return;
} }
if(!player.IsInVehicle) if (!player.IsInVehicle)
{ {
if(GroundItem.PickUpGroundItem(player)) if (GroundItem.PickUpGroundItem(player))
{ {
return; return;
} }
@@ -216,7 +225,8 @@ namespace ReallifeGamemode.Server.Events
FriseurPoint nearestFriseurPoint = PositionManager.friseurPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.5 && (!user.GetData<bool>("duty"))); FriseurPoint nearestFriseurPoint = PositionManager.friseurPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.5 && (!user.GetData<bool>("duty")));
ItemshopPoint nearestItemShopPoint = PositionManager.itemshopPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.5); ItemshopPoint nearestItemShopPoint = PositionManager.itemshopPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.5);
JobPoint nearestJobPoint = PositionManager.JobPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.6); JobPoint nearestJobPoint = PositionManager.JobPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.6);
Player nearestCuffPlayer = PositionManager.cuffPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.6 && user.GetData<bool>("duty"));
if (user?.FactionId != null) if (user?.FactionId != null)
{ {
BehindVehiclePoint nearestBehindVehiclePoint = MarkerBehinVehicle.behindVehiclePoints.Find(s => s.marker.Position.DistanceTo(player.Position) <= 3 && (user.FactionId == 8 || user.FactionId == 7 || user.FactionId == 1 || user.FactionId == 3)); BehindVehiclePoint nearestBehindVehiclePoint = MarkerBehinVehicle.behindVehiclePoints.Find(s => s.marker.Position.DistanceTo(player.Position) <= 3 && (user.FactionId == 8 || user.FactionId == 7 || user.FactionId == 1 || user.FactionId == 3));
@@ -228,7 +238,6 @@ namespace ReallifeGamemode.Server.Events
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)
{ {
GTANetworkAPI.Vehicle vehicle = nearestBehindVehiclePoint.vehicle; GTANetworkAPI.Vehicle vehicle = nearestBehindVehiclePoint.vehicle;
if (vehicle.HasAttachment("weapondeal")) if (vehicle.HasAttachment("weapondeal"))
@@ -366,7 +375,7 @@ namespace ReallifeGamemode.Server.Events
if (player.HasAttachment("ammobox")) if (player.HasAttachment("ammobox"))
{ {
player.AddAttachment("ammobox", true); player.AddAttachment("ammobox", true);
player.StopAnimation(); player.ClearAnimation();
} }
bool unloadedWeaponPackage = false; bool unloadedWeaponPackage = false;
@@ -429,13 +438,12 @@ namespace ReallifeGamemode.Server.Events
if (user.FactionRank.Order >= weapon.Rank) if (user.FactionRank.Order >= weapon.Rank)
specials.Add(weapon.WeaponModel.ToString()); specials.Add(weapon.WeaponModel.ToString());
break; break;
case 5: case 5:
if (user.FactionRank.Order >= weapon.Rank) if (user.FactionRank.Order >= weapon.Rank)
armor.Add(weapon.WeaponModel.ToString()); armor.Add(weapon.WeaponModel.ToString());
break; break;
} }
} }
foreach (var weapon in weapons) foreach (var weapon in weapons)
{ {
@@ -495,7 +503,7 @@ namespace ReallifeGamemode.Server.Events
foreach (Player target in NAPI.Pools.GetAllPlayers()) foreach (Player target in NAPI.Pools.GetAllPlayers())
{ {
User c = target.GetUser(); User c = target.GetUser();
if(c == null) if (c == null)
{ {
continue; continue;
} }
@@ -507,6 +515,10 @@ namespace ReallifeGamemode.Server.Events
} }
player.TriggerEvent("showJailMenu", JsonConvert.SerializeObject(criminals.ToArray())); player.TriggerEvent("showJailMenu", JsonConvert.SerializeObject(criminals.ToArray()));
} }
if (nearestCuffPlayer != null)
{
player.CuffPlayer(nearestCuffPlayer);
}
} }
if (nearestElevatorPoint != null) if (nearestElevatorPoint != null)
{ {
@@ -555,7 +567,7 @@ namespace ReallifeGamemode.Server.Events
player.TriggerEvent("renderTextOnScreen", "Steige nun in eines der Fahrzeuge und starte den Motor mit der Taste 'N'."); player.TriggerEvent("renderTextOnScreen", "Steige nun in eines der Fahrzeuge und starte den Motor mit der Taste 'N'.");
return; return;
} }
} }
else if (nearestJobPoint.jobId == 3 && player.GetUser().JobId == 3) else if (nearestJobPoint.jobId == 3 && player.GetUser().JobId == 3)
{ {
if (nearestJobPoint.Skill < 300 && player.GetUser().PilotSkill >= 0) if (nearestJobPoint.Skill < 300 && player.GetUser().PilotSkill >= 0)
@@ -607,6 +619,8 @@ namespace ReallifeGamemode.Server.Events
public void KeyPressI(Player player) public void KeyPressI(Player player)
{ {
if (!player.IsLoggedIn()) return; if (!player.IsLoggedIn()) return;
if (player.GetData<bool>("isDead")) return;
player.TriggerEvent("inventoryShow"); player.TriggerEvent("inventoryShow");
InventoryManager.SetBackpackItems(player); InventoryManager.SetBackpackItems(player);
} }
@@ -676,21 +690,21 @@ namespace ReallifeGamemode.Server.Events
player.TriggerEvent("SERVER:Job_ShowJobMenu", job.Name, json); player.TriggerEvent("SERVER:Job_ShowJobMenu", job.Name, json);
} }
[RemoteEvent("keyPress:O")] [RemoteEvent("keyPress:O")]
public void KeyPressO(Player player) public void KeyPressO(Player player)
{ {
if (!player.IsLoggedIn()) return; if (!player.IsLoggedIn()) return;
List<Player> players = NAPI.Pools.GetAllPlayers().Where(p => p.IsLoggedIn() == true).OrderBy(o => o.Handle.Value).ToList(); List<Player> players = NAPI.Pools.GetAllPlayers().Where(p => p.IsLoggedIn() == true).OrderBy(o => o.Handle.Value).ToList();
var listPlayers = players.Select(p => new var listPlayers = players.Select(p => new
{ {
Id = p.Handle.Value, Id = p.Handle.Value,
p.Name, p.Name,
p.Ping, p.Ping,
FactionName = p.GetUser()?.Faction?.Name ?? "Zivilist", FactionName = p.GetUser()?.Faction?.Name ?? "Zivilist",
}); });
player.TriggerEvent("showPlayerlist", JsonConvert.SerializeObject(listPlayers)); player.TriggerEvent("showPlayerlist", JsonConvert.SerializeObject(listPlayers));
} }
[RemoteEvent("keyPress:K")] [RemoteEvent("keyPress:K")]
@@ -797,9 +811,9 @@ namespace ReallifeGamemode.Server.Events
} }
else if (sV is FactionVehicle fV) else if (sV is FactionVehicle fV)
{ {
if(fV.Model == VehicleHash.Burrito3 && u.FactionId == 1 if (fV.Model == VehicleHash.Burrito3 && u.FactionId == 1
|| fV.Model == VehicleHash.Burrito3 && u.FactionId == 3 || fV.Model == VehicleHash.Burrito3 && u.FactionId == 3
|| fV.Model == VehicleHash.Burrito3 && u.FactionId == 7 || fV.Model == VehicleHash.Burrito3 && u.FactionId == 7
|| fV.Model == VehicleHash.Burrito3 && u.FactionId == 8 || fV.Model == VehicleHash.Burrito3 && u.FactionId == 8
|| fV.Model == VehicleHash.Policet && u.FactionId == 1 || fV.Model == VehicleHash.Policet && u.FactionId == 1
|| fV.Model == VehicleHash.Policet && u.FactionId == 3 || fV.Model == VehicleHash.Policet && u.FactionId == 3
@@ -963,8 +977,13 @@ namespace ReallifeGamemode.Server.Events
player.TriggerEvent("ToggleVehicleMenu"); player.TriggerEvent("ToggleVehicleMenu");
} }
} }
#endregion
#region Faction Key [RemoteEvent("keyPress:ControllH")]
#endregion public void KeyPressControllH(Player player)
{
player.ToggleSurrender();
}
#endregion User Key
} }
} }

View File

@@ -54,6 +54,7 @@ namespace ReallifeGamemode.Server.Events
} }
else else
{ {
player.SetData("dbId", user.Id);
player.Name = username; player.Name = username;
player.TriggerEvent("SERVER:Login_Success"); player.TriggerEvent("SERVER:Login_Success");
player.TriggerEvent("CLIENT:StopSound"); player.TriggerEvent("CLIENT:StopSound");
@@ -122,7 +123,7 @@ namespace ReallifeGamemode.Server.Events
} }
else else
{ {
Jail.Check_PutBehindBars(player); Jail.Check_PutBehindBars(user);
} }
} }

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Text;
using GTANetworkAPI;
namespace ReallifeGamemode.Server.Events
{
internal class PlayerEvent : Script
{
[RemoteEvent("CLIENT:SET_InFrontOfPos")]
public void SetFrontOfPos(Player player, Vector3 pos)
{
player.Position = pos;
}
}
}

View File

@@ -6,7 +6,7 @@ using ReallifeGamemode.Database.Models;
/** /**
* @overview Life of German Reallife - Event Register (Register.cs) * @overview Life of German Reallife - Event Register (Register.cs)
* @author VegaZ * @author VegaZ, balbo
* @copyright (c) 2008 - 2018 Life of German * @copyright (c) 2008 - 2018 Life of German
*/ */
@@ -20,11 +20,18 @@ namespace ReallifeGamemode.Server.Events
string username = player.Name; string username = player.Name;
using (var dbContext = new DatabaseContext()) using (var dbContext = new DatabaseContext())
{ {
if (password.Length < 6)
{
player.TriggerEvent("SERVER:Login_Error", "Das Passwort muss aus mindestens 6 Zeichen bestehen.");
return;
}
if (dbContext.Users.Where(u => u.SocialClubName == player.SocialClubName).Count() >= 3) if (dbContext.Users.Where(u => u.SocialClubName == player.SocialClubName).Count() >= 3)
{ {
player.TriggerEvent("SERVER:Login_Error", "Es sind schon 3 Konten mit dieser Socialclub-ID registriert."); player.TriggerEvent("SERVER:Login_Error", "Es sind schon 3 Konten mit dieser Socialclub-ID registriert.");
return;
} }
else if (!dbContext.Users.Any(u => u.Name.ToLower() == username.ToLower().Trim()))
if (!dbContext.Users.Any(u => u.Name.ToLower() == username.ToLower().Trim()))
{ {
var user = new User var user = new User
{ {
@@ -44,6 +51,7 @@ namespace ReallifeGamemode.Server.Events
dbContext.Users.Add(user); dbContext.Users.Add(user);
dbContext.SaveChanges(); dbContext.SaveChanges();
player.SetData("dbId", user.Id);
player.TriggerEvent("SERVER:Login_Success"); player.TriggerEvent("SERVER:Login_Success");
player.TriggerEvent("CLIENT:StopSound"); player.TriggerEvent("CLIENT:StopSound");
player.SetData("isLoggedIn", true); player.SetData("isLoggedIn", true);

View File

@@ -6,8 +6,10 @@ 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.Managers;
using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Types; using ReallifeGamemode.Server.Types;
using ReallifeGamemode.Server.Util;
/** /**
* @overview Life of German Reallife - Player Extension (PlayerExtension.cs) * @overview Life of German Reallife - Player Extension (PlayerExtension.cs)
@@ -57,6 +59,34 @@ namespace ReallifeGamemode.Server.Extensions
} }
} }
public static void SetJailTime(this User user, bool killed)
{
if (user == null)
{
return;
}
int time = 26 * user.Wanteds;
if (killed)
{
time *= 2;
}
user.Wanteds = 0;
user.JailTime = time;
}
public static void AnnouncePlayerJailedIn(this User user)
{
if (user == null)
{
return;
}
string message = user.Name + " wurde ins Gefängnis geliefert";
ChatService.HQMessage(message);
}
/// <summary> /// <summary>
/// Gibt zurück, ob ein Player eingeloggt ist /// Gibt zurück, ob ein Player eingeloggt ist
/// </summary> /// </summary>
@@ -74,13 +104,42 @@ namespace ReallifeGamemode.Server.Extensions
public static bool IsDuty(this Player player) public static bool IsDuty(this Player player)
{ {
var user = player.GetUser(); return player.GetServerData("duty", false);
return user.GetData("duty", false);
} }
public static bool IsAlive(this Player player)
{
return !player.HasData("isDead") || player.GetData<bool>("isDead") == false;
}
public static T GetServerData<T>(this Player player, string key, T defaultValue = default)
{
if (player == null)
{
return default;
}
key += "data_";
if (!player.HasData(key)) return defaultValue;
return JsonConvert.DeserializeObject<T>(player.GetData<dynamic>(key));
}
public static void SetServerData(this Player player, string key, object value)
{
if (player == null)
{
return;
}
key += "data_";
player.SetData(key, JsonConvert.SerializeObject(value));
}
public static bool IsAdminDuty(this Player player) public static bool IsAdminDuty(this Player player)
{ {
return player.HasData("Adminduty") ? player.GetData<bool>("Adminduty") : false; return player.HasData("Adminduty") ? player.GetData<bool>("Adminduty") : false;
} }
public static Vector3 GetPositionFromPlayer(Player player, float distance, int offset = 0) public static Vector3 GetPositionFromPlayer(Player player, float distance, int offset = 0)
{ {
var pos = player.Position; var pos = player.Position;
@@ -94,27 +153,14 @@ namespace ReallifeGamemode.Server.Extensions
internal static T GetData<T>(this User user, string key, T nullValue) internal static T GetData<T>(this User user, string key, T nullValue)
{ {
if (user == null) return user.Player.GetServerData(key, nullValue);
{
return default;
}
key += "data_";
if (!user.Player.HasData(key)) return nullValue;
return JsonConvert.DeserializeObject<T>(user.Player.GetData<dynamic>(key));
} }
internal static T GetData<T>(this User user, string key) => user.GetData<T>(key, default); internal static T GetData<T>(this User user, string key) => user.GetData<T>(key, default);
internal static void SetData(this User user, string key, object value) internal static void SetData(this User user, string key, object value)
{ {
if (user == null) user.Player.SetServerData(key, value);
{
return;
}
key += "data_";
user.Player.SetData(key, JsonConvert.SerializeObject(value));
} }
internal static void GiveWanteds(this User user, Player cop, int amount, string reason) internal static void GiveWanteds(this User user, Player cop, int amount, string reason)
@@ -268,11 +314,11 @@ namespace ReallifeGamemode.Server.Extensions
} }
else if (user.FactionId != null) else if (user.FactionId != null)
{ {
if(user.FactionId > 3 || (user.FactionId >= 1 && user.FactionId <= 3 && duty)) if (user.FactionId > 3 || (user.FactionId >= 1 && user.FactionId <= 3 && duty))
{ {
nameTagColor = user.FactionId.Value; nameTagColor = user.FactionId.Value;
} }
switch (user.FactionId) switch (user.FactionId)
{ {
case 1 when duty: case 1 when duty:
@@ -314,5 +360,48 @@ namespace ReallifeGamemode.Server.Extensions
user.Player.SetSharedData("nameTagColor", nameTagColor); user.Player.SetSharedData("nameTagColor", nameTagColor);
user.Player.SetSharedData("blipColor", blipColor); user.Player.SetSharedData("blipColor", blipColor);
} }
public static void SetInFrontOf(this Player player, Entity entity)
{
player.TriggerEvent("SERVER:SetInFrontPosition", entity);
}
public static void CuffPlayer(this Player player, Player nearestCuffPlayer)
{
nearestCuffPlayer.SetInFrontOf(player);
nearestCuffPlayer.Heading = player.Heading;
if (!nearestCuffPlayer.HasAnimation("Cuffed"))
{
player.SyncAnimation("doArrest");
nearestCuffPlayer.SyncAnimation(new List<string>() { "getArrest", "Cuffed" });
nearestCuffPlayer.AddAttachment("handcuffs", false);
nearestCuffPlayer.RemoveAllWeapons();
}
else
{
nearestCuffPlayer.AddAttachment("handcuffs", true);
player.SyncAnimation("doUncuff");
nearestCuffPlayer.SyncAnimation("getUncuff");
PositionManager.cuffPoints.Remove(nearestCuffPlayer);
}
}
public static void ToggleSurrender(this Player player)
{
if (player.HasAnimation("hup"))
{
PositionManager.cuffPoints.Remove(player);
player.ClearAnimation();
return;
}
if (player.HasAnimation())
return;
player.SyncAnimation("hup");
if (player.GetUser().Wanteds > 0)
PositionManager.cuffPoints.Add(player);
}
} }
} }

View File

@@ -192,27 +192,27 @@ namespace ReallifeGamemode.Server.Factions.Medic
} }
[RemoteEvent("updateMedicTask")] [RemoteEvent("updateMedicTask")]
public void UpdateMedicTasks(Player player, int type, int index) public void UpdateMedicTasks(Player player, int type, string victim)
{ {
Player target = PlayerService.GetPlayerByNameOrId(ReviveTasks[index].Victim); Player target = PlayerService.GetPlayerByNameOrId(victim);
switch (type) switch (type)
{ {
case 0: case 0:
var reviveTask = ReviveTasks.FirstOrDefault(t => t.Victim == victim);
ReviveTasks[index].MedicName = player.Name; reviveTask.MedicName = player.Name;
ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat den Reviveauftrag von " + ReviveTasks[index].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:
HealTasks[index].MedicName = player.Name; var healTask = ReviveTasks.FirstOrDefault(t => t.Victim == victim);
ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat den Healauftrag von " + ReviveTasks[index].Victim + " angenommen.", new List<int>() { 2 }); healTask.MedicName = player.Name;
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:
FireTasks[index].MedicName = player.Name; //FireTasks[index].MedicName = player.Name;
break; break;
} }
} }
@@ -258,8 +258,8 @@ namespace ReallifeGamemode.Server.Factions.Medic
{ {
using var dbContext = new DatabaseContext(); using var dbContext = new DatabaseContext();
{ {
dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == 2).First().BankAccount.Balance += Medic.ReviveIncome / 2; 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 / 2}$ ~s~für die Fraktion verdient."); player.SendNotification($"Du hast den Einsatzort erreicht und ~g~{Medic.ReviveIncome / 4}$ ~s~für die Fraktion verdient.");
Medic.delReviveTaskMedic(player); Medic.delReviveTaskMedic(player);
dbContext.SaveChanges(); dbContext.SaveChanges();
} }

View File

@@ -171,7 +171,7 @@ namespace ReallifeGamemode.Server.Finance
if (putInJail != 0 && minusJail) if (putInJail != 0 && minusJail)
{ {
Jail.Check_PutBehindBars(client, false); Jail.Check_PutBehindBars(u);
} }
} }

View File

@@ -114,16 +114,13 @@ namespace ReallifeGamemode.Server.Gangwar
this.timerCount = 0; this.timerCount = 0;
} }
private void reloadGangTurfs() private void ReloadGangTurfs()
{ {
var t = Task.Factory.StartNew(() => NAPI.Task.Run(() =>
{ {
Task.Delay(10000).Wait();
Gangwar.loadTurfs(); Gangwar.loadTurfs();
Gangwar.loadTurfs_ToAllPlayers(); Gangwar.loadTurfs_ToAllPlayers();
}); }, delayTime: 2000);
t.Wait();
} }
private void Tick(object sender, System.Timers.ElapsedEventArgs e) private void Tick(object sender, System.Timers.ElapsedEventArgs e)
@@ -303,7 +300,7 @@ namespace ReallifeGamemode.Server.Gangwar
NAPI.ClientEvent.TriggerClientEventForAll("CLIENT:Turf_Conquered", JsonConvert.SerializeObject(this.TurfID), JsonConvert.SerializeObject(this.status), JsonConvert.SerializeObject(this.Owner)); NAPI.ClientEvent.TriggerClientEventForAll("CLIENT:Turf_Conquered", JsonConvert.SerializeObject(this.TurfID), JsonConvert.SerializeObject(this.status), JsonConvert.SerializeObject(this.Owner));
Gangwar.loadTurfs(); Gangwar.loadTurfs();
Gangwar.loadTurfs_ToAllPlayers(); Gangwar.loadTurfs_ToAllPlayers();
reloadGangTurfs(); ReloadGangTurfs();
} }
public void attack(string attacker) public void attack(string attacker)

View File

@@ -6,6 +6,7 @@ using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Inventory.Interfaces; using ReallifeGamemode.Server.Inventory.Interfaces;
using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Util;
namespace ReallifeGamemode.Server.Inventory namespace ReallifeGamemode.Server.Inventory
{ {
@@ -99,9 +100,9 @@ namespace ReallifeGamemode.Server.Inventory
} }
if (nearestItem is IWeaponDealItem obj) if (nearestItem is IWeaponDealItem obj)
{ {
if (!player.HasAttachment("ammobox")) if (!player.HasAttachment("ammobox") && !player.HasAnimation())
{ {
player.PlayAnimation("anim@heists@box_carry@", "idle", 49); player.SyncAnimation("carryBox");
player.AddAttachment("ammobox", false); player.AddAttachment("ammobox", false);
NAPI.Player.SetPlayerCurrentWeapon(player, WeaponHash.Unarmed); NAPI.Player.SetPlayerCurrentWeapon(player, WeaponHash.Unarmed);
} }

View File

@@ -129,6 +129,11 @@ namespace ReallifeGamemode.Server.Managers
[ServerEvent(Event.PlayerEnterVehicle)] [ServerEvent(Event.PlayerEnterVehicle)]
public void CarDealerBusiness_PlayerEnterVehicle(Player player, Vehicle veh, int seat) public void CarDealerBusiness_PlayerEnterVehicle(Player player, Vehicle veh, int seat)
{ {
if(player.IsAdminDuty())
{
return;
}
ServerVehicle sVeh = veh.GetServerVehicle(); ServerVehicle sVeh = veh.GetServerVehicle();
if (sVeh == null) return; if (sVeh == null) return;
if (!(sVeh is ShopVehicle)) return; if (!(sVeh is ShopVehicle)) return;

View File

@@ -19,7 +19,7 @@ using ReallifeGamemode.Server.Factions.Medic;
/** /**
* @overview Life of German Reallife - Managers Interaction (InteractionManager.cs) * @overview Life of German Reallife - Managers Interaction (InteractionManager.cs)
* @author VegaZ * @author VegaZ, balbo
* @copyright (c) 2008 - 2018 Life of German * @copyright (c) 2008 - 2018 Life of German
*/ */
@@ -772,13 +772,13 @@ namespace ReallifeGamemode.Server.Managers
if (!player.IsLoggedIn()) return; if (!player.IsLoggedIn()) return;
List<Player> players = NAPI.Pools.GetAllPlayers(); List<Player> players = NAPI.Pools.GetAllPlayers();
var listPlayers = players.Where(p => p.GetUser().Wanteds > 0) var listPlayers = players
.Select(p => new .Select(p => new
{ {
Id = p.Handle.Value, Id = p.Handle.Value,
p.Name, p.Name,
wanted = p.GetUser().Wanteds, wanted = p.GetUser()?.Wanteds,
}); }).Where(u => u.wanted > 0).ToList();
if (listPlayers.Count() > 0) if (listPlayers.Count() > 0)
player.TriggerEvent("showWantedlist", JsonConvert.SerializeObject(listPlayers)); player.TriggerEvent("showWantedlist", JsonConvert.SerializeObject(listPlayers));
@@ -809,6 +809,12 @@ namespace ReallifeGamemode.Server.Managers
[RemoteEvent("CLIENT:InteractionMenu_CallService_Sani")] [RemoteEvent("CLIENT:InteractionMenu_CallService_Sani")]
public void CallServiceSani(Player player) public void CallServiceSani(Player player)
{ {
if (player.GetUser().FactionId == 2 && player.IsDuty())
{
player.SendNotification("~r~[Fehler] ~w~Du kannst keinen Sanitäter rufen.");
return;
}
//MEDIC AUFTRAG //MEDIC AUFTRAG
MedicTask healTask = new MedicTask() MedicTask healTask = new MedicTask()
{ {

View File

@@ -18,7 +18,7 @@ using ReallifeGamemode.Server.Types;
/** /**
* @overview Life of German Reallife - Managers InventoryManager (InventoryManager.cs) * @overview Life of German Reallife - Managers InventoryManager (InventoryManager.cs)
* @author hydrant, VegaZ * @author hydrant, VegaZ, balbo
* @copyright (c) 2008 - 2018 Life of German * @copyright (c) 2008 - 2018 Life of German
*/ */
@@ -74,7 +74,7 @@ namespace ReallifeGamemode.Server.Managers
{ {
if (player.IsInVehicle) if (player.IsInVehicle)
{ {
player.TriggerEvent("Error", "Du kannst dein Kofferraum nicht betätigen."); player.TriggerEvent("Error", "Du kannst deinen Kofferraum gerade nicht öffnen.");
} }
Vehicle veh = NAPI.Pools.GetAllVehicles().ToList().Where(v => v.Position.DistanceTo(player.Position) <= 2).FirstOrDefault(); Vehicle veh = NAPI.Pools.GetAllVehicles().ToList().Where(v => v.Position.DistanceTo(player.Position) <= 2).FirstOrDefault();
if (veh == null) if (veh == null)

View File

@@ -4,6 +4,7 @@ using GTANetworkAPI;
using ReallifeGamemode.Server.Shop.Clothing; 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;
namespace ReallifeGamemode.Server.Managers namespace ReallifeGamemode.Server.Managers
{ {
@@ -18,13 +19,15 @@ namespace ReallifeGamemode.Server.Managers
public static List<ElevatorPoint> ElevatorPoints = new List<ElevatorPoint>(); public static List<ElevatorPoint> ElevatorPoints = new List<ElevatorPoint>();
public static List<ClotheshopPoint> clotheshopPoints = new List<ClotheshopPoint>(); public static List<ClotheshopPoint> clotheshopPoints = new List<ClotheshopPoint>();
public static List<FriseurPoint> friseurPoints = new List<FriseurPoint>(); public static List<FriseurPoint> friseurPoints = new List<FriseurPoint>();
public static List<ItemshopPoint> itemshopPoints = new List<ItemshopPoint>(); public static List<ItemshopPoint> itemshopPoints = new List<ItemshopPoint>();
public static List<JobPoint> JobPoints = new List<JobPoint>(); public static List<JobPoint> JobPoints = new List<JobPoint>();
public static List<Player> cuffPoints = new List<Player>();
public static void LoadPositionManager() public static void LoadPositionManager()
{ {
#region DutyPoints #region DutyPoints
@@ -213,6 +216,7 @@ namespace ReallifeGamemode.Server.Managers
NAPI.Blip.CreateBlip(513, p.Position, 1f, 16, "Busfahrer", 255, 0, true); NAPI.Blip.CreateBlip(513, p.Position, 1f, 16, "Busfahrer", 255, 0, true);
} }
} }
#endregion JobPoints #endregion JobPoints
#region Shops #region Shops
@@ -285,7 +289,6 @@ namespace ReallifeGamemode.Server.Managers
return; return;
} }
player.Position = ElevatorPoints.Where(e => e.Stage == level).First().Position; player.Position = ElevatorPoints.Where(e => e.Stage == level).First().Position;
} }
} }
@@ -347,7 +350,7 @@ public class BehindVehiclePoint
{ {
if (!player.HasAttachment("ammobox")) if (!player.HasAttachment("ammobox"))
{ {
player.PlayAnimation("anim@heists@box_carry@", "idle", 49); player.SyncAnimation("carryBox");
player.AddAttachment("ammobox", false); player.AddAttachment("ammobox", false);
NAPI.Player.SetPlayerCurrentWeapon(player, WeaponHash.Unarmed); NAPI.Player.SetPlayerCurrentWeapon(player, WeaponHash.Unarmed);
} }
@@ -389,7 +392,6 @@ 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 class ElevatorPoint public class ElevatorPoint

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using GTANetworkAPI; using GTANetworkAPI;
using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Entities;
@@ -115,6 +116,17 @@ namespace ReallifeGamemode.Server.Services
}); });
} }
internal static void SendInRange(Vector3 position, int range, string message)
{
foreach(Player player in NAPI.Pools.GetAllPlayers())
{
if(player.Position.DistanceTo(position) <= range)
{
SendMessage(player, message);
}
}
}
public static void BroadcastGroup(string message, Group group) public static void BroadcastGroup(string message, Group group)
{ {
message = $"!{{FF8080}}** Gruppe: {message}"; message = $"!{{FF8080}}** Gruppe: {message}";

View File

@@ -0,0 +1,128 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GTANetworkAPI;
using Newtonsoft.Json;
using ReallifeGamemode.Server.Managers;
namespace ReallifeGamemode.Server.Util
{
public static class AnimationSync
{
public static Dictionary<Player, List<string>> animationPair = new Dictionary<Player, List<string>>();
public static void SyncAnimation(this Player player, dynamic animationName)
{
if (player.IsInVehicle)
return;
if (!player.HasData("Animation"))
player.SetData("Animation", String.Empty);
string currentAnimation = player.GetData<string>("Animation");
string newAnimation = animationName;
if (currentAnimation.Equals(newAnimation))
return;
player.SetSharedData("AnimationData", newAnimation);
player.SetData<string>("Animation", newAnimation);
}
public static void SyncAnimation(this Player player, List<string> animations)
{
if (animations.Count is 0)
return;
string animationName = animations.ElementAt(0);
List<string> nextAnimations = animations.Skip(1).ToList();
player.SyncAnimation(animationName);
if (nextAnimations.Count is 0)
{
animationPair.Remove(player);
return;
}
player.TriggerEvent("SERVER:QueueAnimation", animationName);
if (animationPair.ContainsKey(player))
animationPair[player] = nextAnimations;
else
animationPair.Add(player, nextAnimations);
}
/// <summary>Check if Player has any Animation playing.
/// </summary>
/// <param name="player"></param>
public static bool HasAnimation(this Player player)
{
return player.HasData("Animation");
}
/// <summary>Check if Player has a specific Animation playing.
/// </summary>
/// <param name="animationName">Name of requested animation</param>
public static bool HasAnimation(this Player player, dynamic animationName)
{
return player.HasData("Animation") && (player.GetData<string>("Animation") == animationName);
}
public static void ClearAnimation(this Player player)
{
if (!player.HasData("Animation"))
return;
player.ResetData("Animation");
player.ResetSharedData("AnimationData");
}
}
public class AnimationSyncEvents : Script
{
[RemoteEvent("CLIENT:AnimPairTransition")]
public void AnimPairTransition(Player player)
{
if (!AnimationSync.animationPair.ContainsKey(player))
return;
List<string> animationPairs = AnimationSync.animationPair[player];
player.SyncAnimation(animationPairs);
}
[RemoteEvent("CLIENT:ClearAnimationData")]
public void ClearAnimationData(Player player, bool checkTransition)
{
player.ClearAnimation();
if (checkTransition)
{
AnimPairTransition(player);
}
else
{
player.ClearAttachments();
PositionManager.cuffPoints.Remove(player);
}
}
[ServerEvent(Event.PlayerWeaponSwitch)]
public void OnPlayerWeaponSwitch(Player player, WeaponHash oldWeapon, WeaponHash newWeapon)
{
if (!player.HasAnimation()) return;
NAPI.Player.SetPlayerCurrentWeapon(player, WeaponHash.Unarmed);
}
[ServerEvent(Event.PlayerConnected)]
public void OnPlayerConnected(Player player)
{
player.TriggerEvent("SERVER:LoadAnimations");
}
[ServerEvent(Event.PlayerDeath)]
public void OnPlayerDeath(Player player, Player killer, uint reason)
{
player.ClearAnimation();
}
}
}

View File

@@ -1,5 +1,4 @@
 using System;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using GTANetworkAPI; using GTANetworkAPI;
@@ -12,7 +11,7 @@ public static class AttachmentSync
/// <param name="entity">The entity to attach the object to</param> /// <param name="entity">The entity to attach the object to</param>
/// <param name="attachment">The attachment, should be in string or long type</param> /// <param name="attachment">The attachment, should be in string or long type</param>
/// <param name="remove">Pass true to remove the specified attachment, false otherwise.</param> /// <param name="remove">Pass true to remove the specified attachment, false otherwise.</param>
public static void AddAttachment(this Entity entity, dynamic attachment, bool remove) public static void AddAttachment(this Entity entity, dynamic attachment, bool remove)
{ {
if (!entity.HasData("Attachments")) if (!entity.HasData("Attachments"))
@@ -143,18 +142,13 @@ public class AttachmentSyncExample : Script
if (!player.HasAttachment("ammobox")) if (!player.HasAttachment("ammobox"))
{ {
player.AddAttachment("ammobox", false); player.AddAttachment("ammobox", false);
player.PlayAnimation("anim@heists@box_carry@", "idle", 49); //player.SyncAnimation("carryBox");
//veh.AddAttachment("weapondeal1", false); //veh.AddAttachment("weapondeal1", false);
//veh.AddAttachment("weapondeal2", false); //veh.AddAttachment("weapondeal2", false);
} }
else else
{ {
player.StopAnimation();
player.ClearAttachments(); player.ClearAttachments();
} }
} }
} }

View File

@@ -10,6 +10,7 @@ using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Services; using ReallifeGamemode.Services;
using System.Diagnostics; using System.Diagnostics;
using Newtonsoft.Json; using Newtonsoft.Json;
using ReallifeGamemode.Server.Managers;
namespace ReallifeGamemode.Server.Wanted namespace ReallifeGamemode.Server.Wanted
{ {
@@ -18,104 +19,36 @@ 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(Player client, bool announceHq = true) public static void Check_PutBehindBars(User user)
{ {
User user = client.GetUser(); user.SetBlipAndNametagColor();
Player player = user.Player;
PositionManager.cuffPoints.Remove(player);
if (user.JailTime > 0) if (user.JailTime > 0)
{ {
client.RemoveAllWeapons(); player.RemoveAllWeapons();
client.Health = 100; player.Health = 100;
client.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);
if (rndInt == 1) if (rndInt == 1)
NAPI.Player.SpawnPlayer(client, new Vector3(458.9842, -997.2126, 24.91485)); //send client to jail NAPI.Player.SpawnPlayer(player, new Vector3(458.9842, -997.2126, 24.91485)); //send client to jail
if (rndInt == 2) if (rndInt == 2)
NAPI.Player.SpawnPlayer(client, new Vector3(459.696, -994.3766, 24.91486)); //send client to jail NAPI.Player.SpawnPlayer(player, new Vector3(459.696, -994.3766, 24.91486)); //send client to jail
if (rndInt == 3) if (rndInt == 3)
NAPI.Player.SpawnPlayer(client, new Vector3(458.3372, -1001.258, 24.91485)); //send client to jail NAPI.Player.SpawnPlayer(player, new Vector3(458.3372, -1001.258, 24.91485)); //send client to jail
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 = 0; int timeMinutes;
if (((int)(user.JailTime / 60)) <= 1 && user.JailTime != 0) if ((user.JailTime / 60) <= 1 && user.JailTime != 0)
{ {
timeMinutes = 1; timeMinutes = 1;
} }
else else
{ {
timeMinutes = (int)(user.JailTime / 60); timeMinutes = user.JailTime / 60;
} }
client.TriggerEvent("jailTime", timeMinutes); player.TriggerEvent("jailTime", timeMinutes);
return;
}
if (user.Wanteds <= 0)
return;
using (var dbContext = new DatabaseContext())
{
foreach (var copPlayer in NAPI.Pools.GetAllPlayers())
{
if (!copPlayer.IsLoggedIn()) continue;
User cop = copPlayer.GetUser();
if (cop?.FactionId == 1 || cop?.FactionId == 3)
{
int jailTime = user.Wanteds * 54;
if (cop.GetData<bool>("duty") && copPlayer.Position.DistanceTo2D(client.Position) <= 200 && (!copPlayer.HasData("isDead") || copPlayer.GetData<bool>("isDead") != true))
{
if (!client.HasData("isDead") || client.GetData<bool>("isDead") == false)
{
jailTime /= 2;
}
User clientUser = client.GetUser(dbContext);
clientUser.JailTime = jailTime;
Jailtime[user.Id] = jailTime; // 54 sec for each wanted star -> in total 45min for 50 Wanteds
clientUser.Wanteds = 0;
client.SetData("isDead", false);
client.RemoveAllWeapons();
client.SetSharedData("blipColor", 0);
Random rnd = new Random();
int rndInt = rnd.Next(1, 3);
if (rndInt == 1)
NAPI.Player.SpawnPlayer(client, new Vector3(458.9842, -997.2126, 24.91485)); //send client to jail
if (rndInt == 2)
NAPI.Player.SpawnPlayer(client, new Vector3(459.696, -994.3766, 24.91486)); //send client to jail
if (rndInt == 3)
NAPI.Player.SpawnPlayer(client, new Vector3(458.3372, -1001.258, 24.91485)); //send client to jail
client.TriggerEvent("onPlayerRevived");
MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == client.Name);
Medic.RemoveTaskFromList(task);
client.Health = 100;
int timeMinutes = 0;
if (((int)(Jailtime[user.Id] / 60)) <= 1 && Jailtime[user.Id] != 0)
{
timeMinutes = 1;
}
else
{
timeMinutes = (int)(Jailtime[user.Id] / 60);
}
client.TriggerEvent("jailTime", JsonConvert.SerializeObject(timeMinutes));
clientUser.SetBlipAndNametagColor();
if (announceHq)
{
ChatService.BroadcastFaction("!{#8181E9}HQ: " + user.Name + " wurde ins Gefängnis geliefert.", new List<int>() { 1, 3 });
}
}
else if (user.Wanteds > 0 && user.JailTime <= 0)
{
ChatService.BroadcastFaction("!{#8181E9}HQ: Der Verdächtigte " + user.Name + " wurde soeben ins Krankenhaus eingeliefert.", new System.Collections.Generic.List<int>() { 1, 3 });
}
}
}
dbContext.SaveChanges();
} }
} }
@@ -136,23 +69,31 @@ namespace ReallifeGamemode.Server.Wanted
public static void JailIn_Elapsed() public static void JailIn_Elapsed()
{ {
using var dbContext = new DatabaseContext();
foreach (var player in NAPI.Pools.GetAllPlayers()) foreach (var player in NAPI.Pools.GetAllPlayers())
{ {
User user = player.GetUser(); if (player.Position.DistanceTo(new Vector3(458.9842, -997.2126, 24.91485)) > 7)
if (user != null && !Jailtime.ContainsKey(user.Id))
{ {
foreach (var copPlayer in NAPI.Pools.GetAllPlayers()) continue;
}
User user = player.GetUser(dbContext);
if (user != null && user.Wanteds > 0 && !Jailtime.ContainsKey(user.Id))
{
foreach (var copPlayer in NAPI.Pools.GetAllPlayers().Where(u => u.IsLoggedIn() && u.IsDuty() && u.IsAlive()))
{ {
if (!copPlayer.IsLoggedIn()) return; User copUser = copPlayer.GetUser(dbContext);
User cop = copPlayer.GetUser(); if (copUser.FactionId == 1 || copUser.FactionId == 3)
if (cop.GetData<bool>("duty") && copPlayer.Position.DistanceTo2D(player.Position) <= 500 && (!copPlayer.HasData("isDead") || copPlayer.GetData<bool>("isDead") != true))
{ {
if (player.Position.DistanceTo2D(new Vector3(458.9842, -997.2126, 24.91485)) <= 7) if (player.Position.DistanceTo(copPlayer.Position) < 5)
{ {
if (player.Position.DistanceTo2D(copPlayer.Position) < 5) user.SetJailTime(false);
{ user.SetBlipAndNametagColor();
Check_PutBehindBars(player); user.AnnouncePlayerJailedIn();
} dbContext.SaveChanges();
Check_PutBehindBars(user);
break;
} }
} }
} }
@@ -183,9 +124,10 @@ namespace ReallifeGamemode.Server.Wanted
public static void JailOut_Elapsed() public static void JailOut_Elapsed()
{ {
using var dbContext = new DatabaseContext();
foreach (var player in NAPI.Pools.GetAllPlayers()) foreach (var player in NAPI.Pools.GetAllPlayers())
{ {
User user = player.GetUser(); User user = player.GetUser(dbContext);
if (user != null && Jailtime.ContainsKey(user.Id)) if (user != null && Jailtime.ContainsKey(user.Id))
{ {
if (user.JailTime <= 0) if (user.JailTime <= 0)
@@ -197,11 +139,7 @@ namespace ReallifeGamemode.Server.Wanted
} }
if (user.JailTime > 0) if (user.JailTime > 0)
{ {
using (var dbContext = new DatabaseContext()) user.JailTime -= 60;
{
player.GetUser(dbContext).JailTime -= 60;
dbContext.SaveChanges();
}
int timeMinutes = 0; int timeMinutes = 0;
@@ -219,15 +157,16 @@ namespace ReallifeGamemode.Server.Wanted
} }
} }
} }
dbContext.SaveChanges();
} }
[RemoteEvent("setPrisonerFree")] [RemoteEvent("setPrisonerFree")]
public void Release_Jail(Player cop, string client) public void Release_Jail(Player cop, string client)
{ {
Player player = PlayerService.GetPlayerByNameOrId(client); Player player = PlayerService.GetPlayerByNameOrId(client);
if (player == null) if (player == null)
return; return;
User user = player.GetUser(); User user = player.GetUser();
if (Jailtime.ContainsKey(user.Id)) if (Jailtime.ContainsKey(user.Id))
{ {
@@ -248,15 +187,15 @@ namespace ReallifeGamemode.Server.Wanted
public static void Release_Jail_Admin(Player admin, Player target) public static void Release_Jail_Admin(Player admin, Player target)
{ {
User user = target.GetUser(); using var dbContext = new DatabaseContext();
User user = target.GetUser(dbContext);
if (Jailtime.ContainsKey(user.Id)) if (Jailtime.ContainsKey(user.Id))
{ {
Jailtime.Remove(user.Id); Jailtime.Remove(user.Id);
using (var dbContext = new DatabaseContext())
{ user.JailTime = 0;
target.GetUser(dbContext).JailTime = 0; dbContext.SaveChanges();
dbContext.SaveChanges();
}
target.Health = 100; target.Health = 100;
target.Position = new Vector3(427.879, -984.65, 30.71); target.Position = new Vector3(427.879, -984.65, 30.71);

View File

@@ -35,9 +35,10 @@ namespace ReallifeGamemode.Server.Wanted
public static void Timer_Elapsed() public static void Timer_Elapsed()
{ {
using var dbContext = new DatabaseContext();
foreach (var player in NAPI.Pools.GetAllPlayers()) foreach (var player in NAPI.Pools.GetAllPlayers())
{ {
User user = player.GetUser(); User user = player.GetUser(dbContext);
if (user != null && user.Wanteds > 0) if (user != null && user.Wanteds > 0)
{ {
if (!waTimer.ContainsKey(user.Id)) if (!waTimer.ContainsKey(user.Id))
@@ -68,30 +69,10 @@ namespace ReallifeGamemode.Server.Wanted
{ {
ResetWantedTimeToElapse(player); ResetWantedTimeToElapse(player);
player.SendChatMessage("~y~Du hast erfolgtreich einen Wanted abgetaucht."); player.SendChatMessage("~y~Du hast erfolgtreich einen Wanted abgetaucht.");
using (var dbContext = new DatabaseContext()) user.Wanteds -= 1;
if (user.Wanteds == 0)
{ {
player.GetUser(dbContext).Wanteds -= 1; user.SetBlipAndNametagColor();
if (player.GetUser(dbContext).Wanteds == 0)
{
switch (player.GetUser(dbContext).FactionId)
{
case null:
player.SetSharedData("blipColor", 0);
break;
case 8:
player.SetSharedData("blipColor", 83);
break;
case 7:
player.SetSharedData("blipColor", 52);
break;
case 4:
player.SetSharedData("blipColor", 5);
break;
}
}
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
} }

4071
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -25,7 +25,7 @@ Set-Variable resourcesDir -option Constant -value "dotnet\resources"
Set-Variable gamemodeDir -option Constant -value "reallife-gamemode" Set-Variable gamemodeDir -option Constant -value "reallife-gamemode"
Set-Variable assetsDir -option Constant -value "client_packages\assets" Set-Variable assetsDir -option Constant -value "client_packages\assets"
Set-Variable indexJsDir -option Constant -value "client_packages" Set-Variable indexJsDir -option Constant -value "client_packages"
Set-Variable dlcPacksDir -option Constant -value "source_dlcpacks" Set-Variable dlcPacksDir -option Constant -value "client_packages\game_resources\dlcpacks"
Set-Variable fullBuildDir -option Constant -value "$serverProjectPath\$buildDirectory" Set-Variable fullBuildDir -option Constant -value "$serverProjectPath\$buildDirectory"
# create default config file if not exist # create default config file if not exist