Merge branch 'develop' into 'master'

[Update] v0.0.2

See merge request log-gtav/reallife-gamemode!35
This commit is contained in:
Siga
2021-04-05 02:23:40 +00:00
43 changed files with 692 additions and 1204 deletions

View File

@@ -1,51 +1,57 @@
const Natives = {
SET_BLIP_CATEGORY: RageEnums.Natives.Ui.SET_BLIP_CATEGORY,
SHOW_HEADING_INDICATOR_ON_BLIP: RageEnums.Natives.Ui.SHOW_HEADING_INDICATOR_ON_BLIP,
SET_BLIP_AS_SHORT_RANGE: RageEnums.Natives.Ui.SET_BLIP_AS_SHORT_RANGE,
SET_BLIP_DISPLAY: RageEnums.Natives.Ui.SET_BLIP_DISPLAY
};

export default function playerBlips() {
/* mp.events.add("entityStreamIn", (entity) => {
if (entity.type === "player") {
var entityMp = <EntityMp>entity;
var playerBlipMap: Map<PlayerMp, BlipMp>;
var ready = false;
mp.gui.chat.push("Player recieved: Yes");
setInterval(() => {
if (!ready) return;
if (!playerBlipMap) playerBlipMap = new Map<PlayerMp, BlipMp>();
let color = parseInt(entity.getVariable("blipColor"));
mp.players.forEachInStreamRange(
(player) => {
if (mp.players.local == player)
return;
mp.gui.chat.push("Color : " + color);
if (!playerBlipMap.has(player)) {
let pBlip = mp.blips.new(1, player.position, {
shortRange: true,
dimension: mp.players.local.dimension,
drawDistance: 300
});
entity.createBlip(1);
pBlip.setCategory(7);
pBlip.setDisplay(8);
playerBlipMap.set(player, pBlip);
}
let pBlip = playerBlipMap.get(player);
let color = player.getVariable("blipColor");
pBlip.setColour(isNaN(color) ? 0 : color);
pBlip.setPosition(player.position.x, player.position.y, player.position.z);
});
}, 50);
mp.gui.chat.push(parseInt(entity.blip) == 0 ? "Blip was not created" : "Blip was created");
mp.gui.chat.push("entity.blip is actually " + entity.blip);
var blip = entity.blip;
mp.gui.chat.push("1 -" + blip.getAlpha() + " 2- " + blip.doesExist() + " 3-" + blip.dimension + " 4-" + entityMp.dimension);
entity.setBlipColor(isNaN(color) ? 0 : color);
mp.game.invoke(Natives.SET_BLIP_CATEGORY, entity.blip, 7);
mp.game.invoke(Natives.SHOW_HEADING_INDICATOR_ON_BLIP, entity.blip, true);
mp.game.invoke(Natives.SET_BLIP_AS_SHORT_RANGE, entity.blip, true);
mp.game.invoke(Natives.SET_BLIP_DISPLAY, entity.blip, 8);
mp.events.add("playerReady", () => {
ready = true;
});
mp.events.add("entityStreamOut", (entity) => {
if (playerBlipMap && entity.type === "player") {
if (playerBlipMap.has(entity)) {
var pBlip = playerBlipMap.get(entity);
pBlip.destroy();
playerBlipMap.delete(entity);
}
}
});
*/
mp.events.addDataHandler("blipColor", (entity, value) => {
if (entity.type === "player") {
//mp.gui.chat.push("Setting Blip color...");
let color = parseInt(value);
entity.setBlipColor(isNaN(color) ? 0 : color);
// mp.gui.chat.push("Player blip color was set.");
}
});
}

View File

@@ -20,7 +20,7 @@ export default function licenses(globalData: IGlobalData): void {
mp.events.add("CEF:LicenseLoaded", () => {
licenseBrowser.execute(`add_licenses('${JSON.stringify(globalInfo)}');`);
licenseBrowser.execute(`add_licensesholder('${JSON.stringify(globalName)}');`);
licenseTimer = setInterval(DestroyLicenses, 7000);
licenseTimer = setInterval(DestroyLicenses, 15000);
});

View File

@@ -1,27 +1,36 @@
const maxDistance = 25 * 25;
import { IGame, IEntity } from "../game";
import game from "..";
const maxDistance = 40 * 40;
const width = 0.03;
const height = 0.0065;
const border = 0.001;
const color = [73, 137, 0, 255];
var faction;
var playerColors = [];
const alpha = 250;
const colors = [
{ id: -2, color: [0, 255, 255, alpha] }, //support
{ id: -1, color: [255, 100, 0, alpha] }, //wanted
{ id: 0, color: [255, 255, 255, alpha] }, //civil
//1 to n
{ id: 1, color: [0, 95, 190, alpha] }, //pd
{ id: 2, color: [200, 0, 0, alpha] }, //lsed
{ id: 3, color: [0, 0, 170, alpha] }, //fib
{ id: 4, color: [255, 180, 0, alpha] }, //trucker
{ id: 5, color: [255, 255, 255, alpha] }, //terroristen
{ id: 6, color: [255, 255, 255, alpha] }, //hitman
{ id: 7, color: [0, 64, 0, alpha] }, //grove
{ id: 8, color: [171, 0, 150, alpha] }, //ballas
{ id: 9, color: [0, 166, 133, alpha] }, //news
];
export default function customNametags() {
mp.nametags.enabled = false;
/*
mp.events.addDataHandler("nameTagColor", (entity, value) => {
if (entity.type === "player") {
var color = JSON.parse(value);
entity.setVariable('nametagColor',color)
//mp.gui.chat.push(color);
}
});
mp.events.add('setNameTag', (value) => {
var color = JSON.parse(value);
mp.gui.chat.push(color);
});*/
mp.events.add('render', (nametags) => {
const graphics = mp.game.graphics;
@@ -40,11 +49,15 @@ export default function customNametags() {
var armour = player.getArmour() / 100;
y -= scale * (0.005 * (screenRes.y / 1080));
let colorId = game.players.at(player.remoteId).nametagColor;
let color = colors.find(c => c.id === colorId).color;
mp.game.graphics.drawText(player.name + " (" + player.remoteId + ")", [x, y],
{
font: 4,
//color: [player.data.nametagColor[0], player.data.nametagColor[1], player.data.nametagColor[2], 200], //Grove //Ballas 171 0 207 //PD 0 95 190 //FIB 0 0 170 LSED 147 0 0 NR 0 166 133 Trucker 255 162 Support 0 255 255 Zivilist 255 255 255
color: [255, 255, 255, 255],
color: [color[0], color[1], color[2], color[3]],
scale: [0.4, 0.4],
outline: true,
centre: false

View File

@@ -26,25 +26,25 @@ const Color = NativeUI.Color;
export default function clotheShopList(globalData: IGlobalData) {
const categoryTitles = {
clothes: {
1: "Masks",
2: "Hair Styles",
3: "Torsos",
4: "Legs",
5: "Bags and Parachutes",
6: "Shoes",
1: "Masken",
2: "Haar Stil",
3: "Oberkörper",
4: "Hosen",
5: "Taschen und Fallschirme",
6: "Schuhe",
7: "Accessories",
8: "Undershirts",
9: "Body Armors",
9: "Schutzwesten",
10: "Decals",
11: "Tops"
11: "Oberteile"
},
props: {
0: "Hats",
1: "Glasses",
2: "Ears",
6: "Watches",
7: "Bracelets"
0: "Kopfbedeckungen",
1: "Brillen",
2: "Ohrringe",
6: "Uhren",
7: "Armbänder"
}
};
@@ -53,7 +53,12 @@ export default function clotheShopList(globalData: IGlobalData) {
var myVar;
let mainMenu = null;
let categoryMenus = [];
let categoryMenu = null;
let clotheMenus = [];
let clothingData = [];
let currentMenuIdx = -1;
let menuTransition = false; // workaround for ItemSelect event being called twice between menu transitions
@@ -148,22 +153,21 @@ export default function clotheShopList(globalData: IGlobalData) {
}
function addClothingItems(type, bannerSprite, key, value, gender) {
var categoryMenu;
var cloth = [];
var tx = [];
if (Object.keys(categoryMenus).length > 0) {
for (var i = 0; i < categoryMenus.length; i++) {
if (categoryMenus[i].slotIdx == key) {
if (Object.keys(clotheMenus).length > 0) {
for (var i = 0; i < clotheMenus.length; i++) {
if (clotheMenus[i].slotIdx == key) {
return;
}
}
mainMenu.AddItem(new UIMenuItem(categoryTitles[type][key], `${type === "props" ? "Prop category." : "Clothing category."}`));
mainMenu.AddItem(new UIMenuItem(categoryTitles[type][key], `${type === "props" ? " " : " "}`));
// Create category menu
categoryMenu = new UIMenu("", categoryTitles[type][key].toUpperCase(), new Point(0, 0), bannerSprite.library, bannerSprite.texture);
categoryMenu.Visible = false;
} else {
mainMenu.AddItem(new UIMenuItem(categoryTitles[type][key], `${type === "props" ? "Prop category." : "Clothing category."}`));
mainMenu.AddItem(new UIMenuItem(categoryTitles[type][key], `${type === "props" ? " " : " "}`));
// Create category menu
categoryMenu = new UIMenu("", categoryTitles[type][key].toUpperCase(), new Point(0, 0), bannerSprite.library, bannerSprite.texture);
categoryMenu.Visible = false;
@@ -172,21 +176,21 @@ export default function clotheShopList(globalData: IGlobalData) {
mainMenu.Item
// Fill it
for (const item of value) {
if (item.ComponentId == key) {
var txData = getClothingName(key, item.ClotheId, gender);
for (const x of txData) {
var itemDescription = (key === 11 ? mp.game.ui.getLabelText(x.undershirt[1].GXT) : "Clothing item.");
var itemDescription = (key === 11 ? mp.game.ui.getLabelText(x.undershirt[1].GXT) : " ");
//var itemDescription = (key === 11 ? x.undershirt[1].GXT + " - " + x.id: "Clothing item.");
if (itemDescription == "NULL") {
itemDescription = "Clothing item.";
itemDescription = "";
}
const tempItem = new UIMenuItem(mp.game.ui.getLabelText(x.data[0].GXT), itemDescription);
//const tempItem = new UIMenuItem(x.data[0].GXT + " - " + x.id , itemDescription);
tempItem.SetRightLabel(`${item.Price > 0 ? `$${item.Price}` : "FREE"}`);
tempItem.SetRightLabel(`${item.Price > 0 ? `$${item.Price}` : "KOSTENLOS"}`);
categoryMenu.AddItem(tempItem);
@@ -195,18 +199,19 @@ export default function clotheShopList(globalData: IGlobalData) {
}
}
}
categoryMenus.push({
clotheMenus.push({
menu: categoryMenu,
type: type,
slotIdx: Number(key),
item: cloth,
texture: tx
});
}
function submenuItemChangeHandler(newIndex) {
const currentMenu = categoryMenus[currentMenuIdx];
const currentMenu = clotheMenus[currentMenuIdx];
const currentItem = currentMenu.item[newIndex];
const currentTexture = currentMenu.texture[newIndex].id;
//const currentItem = clothingData[currentMenu.type][currentMenu.slotIdx][newIndex];
@@ -263,7 +268,7 @@ export default function clotheShopList(globalData: IGlobalData) {
if (dist > 3) {
clearInterval(myVar);
resetPreview();
if (currentMenuIdx !== -1) categoryMenus[currentMenuIdx].menu.Close();
if (currentMenuIdx !== -1) clotheMenus[currentMenuIdx].menu.Close();
if (mainMenu && mainMenu.Visible) mainMenu.Close();
}
}
@@ -302,13 +307,13 @@ export default function clotheShopList(globalData: IGlobalData) {
mp.gui.chat.show(false);
// Reset some variables
categoryMenus = [];
clotheMenus = [];
currentMenuIdx = -1;
menuTransition = false;
lastClothing = null;
// Create a new main menu
mainMenu = new UIMenu("", "SELECT A CATEGORY", new Point(0, 0), bannerSprite.library, bannerSprite.texture);
mainMenu = new UIMenu("", "Wählen Sie eine Kategorie", new Point(0, 0), bannerSprite.library, bannerSprite.texture);
mainMenu.Visible = true;
// Update clothingData
@@ -325,7 +330,7 @@ export default function clotheShopList(globalData: IGlobalData) {
// for (const [key, value] of Object.entries(clothingData.props)) addClothingItems("props", bannerSprite, key, value);
// Submenu events
for (const item of categoryMenus) {
for (const item of clotheMenus) {
// Preview hovering item
item.menu.IndexChange.on(submenuItemChangeHandler);
@@ -336,7 +341,7 @@ export default function clotheShopList(globalData: IGlobalData) {
return;
}
const currentMenu = categoryMenus[currentMenuIdx];
const currentMenu = clotheMenus[currentMenuIdx];
const currentItem = currentMenu.item[itemIndex];
const currentTexture = currentMenu.texture[itemIndex].id;
if (currentMenu.slotIdx == 11) {
@@ -367,9 +372,10 @@ export default function clotheShopList(globalData: IGlobalData) {
});
}
// Main menu events
mainMenu.ItemSelect.on((selectedItem, itemIndex) => {
const nextMenu = categoryMenus[itemIndex];
const nextMenu = clotheMenus[itemIndex];
const slot = Number(nextMenu.slotIdx);
lastClothing = {
@@ -386,7 +392,8 @@ export default function clotheShopList(globalData: IGlobalData) {
nextMenu.menu.Visible = true;
menuTransition = true;
submenuItemChangeHandler(nextMenu.menu.CurrentSelection);
submenuItemChangeHandler(nextMenu.menu.CurrentSelection);
});
mainMenu.MenuClose.on(() => {
@@ -396,6 +403,7 @@ export default function clotheShopList(globalData: IGlobalData) {
currentMenuIdx = -1;
lastClothing = null;
});
}
});
@@ -410,7 +418,7 @@ export default function clotheShopList(globalData: IGlobalData) {
});
mp.events.add("clothesMenu:close", () => {
if (currentMenuIdx !== -1) categoryMenus[currentMenuIdx].menu.Close();
if (currentMenuIdx !== -1) clotheMenus[currentMenuIdx].menu.Close();
if (mainMenu && mainMenu.Visible) mainMenu.Close();
});

View File

@@ -13,8 +13,6 @@ export default function factionInteraction(globalData: IGlobalData) {
var screenRes = mp.game.graphics.getScreenResolution(0, 0);
var player = mp.players.local;
var tasks;
var deathSeconds;
var initTasks;
var newTasks;
var sorting = 0;
var firstSorting = true;
@@ -27,8 +25,7 @@ export default function factionInteraction(globalData: IGlobalData) {
var rangeLeft;
var sortText;
var deadRespawned = false;
var timeLeft = 0;
var deathTime;
var timeLeft = null;
var ticketName: string;
var pointsName: string;
@@ -40,6 +37,7 @@ export default function factionInteraction(globalData: IGlobalData) {
/*mp.events.add("updateFactionBlips", (type, taskList) => {
});
});*/
mp.events.add("showFactionInteractionLSPD", (userFactionId, isDuty, userFactionName, isFactionLeader) => {
//LSPD
@@ -280,15 +278,11 @@ export default function factionInteraction(globalData: IGlobalData) {
});
mp.events.add("showMedicTasks", (type, taskList, deathTimes) => {
mp.events.add("showMedicTasks", (type, taskList) => {
tasks = JSON.parse(taskList);
deathSeconds = JSON.parse(deathTimes);
if (sorting === 0) {
initTasks = tasks;
}
mp.events.call("sortFactionTasks", false);
//mp.events.call("sortFactionTasks", false);
mp.gui.chat.activate(false);
globalData.InMenu = true;
@@ -329,7 +323,6 @@ export default function factionInteraction(globalData: IGlobalData) {
dimension: 0
});
reviveTaskMenuMedic.Close();
deathTime = deathSeconds[index];
mp.gui.chat.activate(true);
globalData.InMenu = false;
ambulanceImagePos = 0.325
@@ -337,7 +330,6 @@ export default function factionInteraction(globalData: IGlobalData) {
taskFinish = tasks[index].Position;
taskRange = mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z, true);
activeTask = tasks[index];
}
}
});
@@ -407,6 +399,7 @@ export default function factionInteraction(globalData: IGlobalData) {
}
});
/*
mp.events.add("sortFactionTasks", (sortByKey) => {
if (firstSorting) {
sortText = "Nach Uhrzeit";
@@ -462,7 +455,7 @@ export default function factionInteraction(globalData: IGlobalData) {
}
}
}
});
});*/
function getDistance1(index) {
return mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, newTasks[index].Position.x, newTasks[index].Position.y, newTasks[index].Position.z, true).toFixed(2);
@@ -476,27 +469,40 @@ export default function factionInteraction(globalData: IGlobalData) {
});
mp.events.add("destroyMedicTaskCheckpoint", () => {
activeCheckpoint.destroy();
activeTask = null;
timeLeft = 0;
mp.events.callRemote("MedicTaskTimeout");
if (activeCheckpoint) {
activeCheckpoint.destroy();
activeCheckpoint = null;
activeTask = null;
timeLeft = null;
mp.events.callRemote("MedicTaskTimeout");
}
});
mp.events.add('playerEnterCheckpoint', (activeCheckpoint) => {
if (deadRespawned == true) {
activeCheckpoint.destroy();
activeCheckpoint = null;
mp.events.callRemote("PayCutMedicEarnings");
activeTask = null;
deadRespawned = false;
timeLeft = 0;
timeLeft = null;
} else if (activeTask.Type == 1){
activeCheckpoint.destroy();
activeCheckpoint = null;
mp.events.callRemote("delHealTaskAsMedic", activeTask.Victim);
activeTask = null;
timeLeft = null;
}
});
mp.events.add('setTaskTimeLeft', (taskTimeLeft) => {
if (activeTask) {
timeLeft = taskTimeLeft;
}
});
mp.events.add('render', () => {
if (activeTask) {
rangeLeft = mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, taskFinish.x, taskFinish.y, taskFinish.z, true).toFixed(2);
if (rangeLeft > 1.9) {
@@ -520,34 +526,35 @@ export default function factionInteraction(globalData: IGlobalData) {
var currentDate = new Date();
if (deadRespawned == false) {
timeLeft = Math.round(Math.abs(Math.floor(currentDate.getTime() / 1000) - deathTime - 30));
if (timeLeft < 1) mp.events.call("cutMedicEarnings");
} else {
timeLeft = Math.round(Math.abs(Math.floor(currentDate.getTime() / 1000) - deathTime - 60));
if (timeLeft < 1) mp.events.call("destroyMedicTaskCheckpoint");
}
if (timeLeft != null) {
if (deadRespawned == false) {
//timeLeft = Math.round(Math.abs(Math.floor(currentDate.getTime() / 1000) - activeTask.TimeLeft - 60));
if (timeLeft < 120) mp.events.call("cutMedicEarnings");
} else {
//timeLeft = Math.round(Math.abs(Math.floor(currentDate.getTime() / 1000) - activeTask.TimeLeft - 120));
if (timeLeft < 1) mp.events.call("destroyMedicTaskCheckpoint");
}
/*DEBUG TIMER für die Zeit die man noch hat zur Wiederbelebung
if (deadRespawned == false) {
mp.game.graphics.drawText(timeLeft.toString() + "s ", [0.5, 0.88], {
font: 7,
color: [60, 179, 113, 255],
scale: [0.3, 0.3],
outline: true,
centre: true
});
} else {
{
mp.game.graphics.drawText(timeLeft.toString() + "s", [0.5, 0.88], {
if (deadRespawned == false) {
mp.game.graphics.drawText(timeLeft + "s", [0.5, 0.85], {
font: 7,
color: [255, 203, 145, 255],
scale: [0.3, 0.3],
color: [60, 179, 113, 255],
scale: [0.5, 0.5],
outline: true,
centre: true
});
} else {
{
mp.game.graphics.drawText(timeLeft + "s", [0.5, 0.85], {
font: 7,
color: [255, 203, 145, 255],
scale: [0.5, 0.5],
outline: true,
centre: true
});
}
}
} */
}
}
});
}

View File

@@ -169,7 +169,6 @@ export default function (globalData: IGlobalData) {
} else if (item === payItem) {
mp.gui.chat.activate(true);
mp.gui.cursor.show(true, true);
globalData.InMenu = true;
var input = new InputHelper("Welchem Spieler möchtest du Geld geben (Name / ID)?", globalData);
input.show();
input.getValue(name => {
@@ -226,6 +225,14 @@ export default function (globalData: IGlobalData) {
menuItem.SetRightLabel(data.regDate);
accountMenu.AddItem(menuItem);
menuItem = new UIMenuItem("Spielzeit");
menuItem.SetRightLabel(data.playTime + "h");
accountMenu.AddItem(menuItem);
menuItem = new UIMenuItem("Verwarnungen");
menuItem.SetRightLabel("~r~" + data.userWarn);
accountMenu.AddItem(menuItem);
menuItem = new UIMenuItem("Adminrang");
menuItem.SetRightLabel(data.adminLevel);
accountMenu.AddItem(menuItem);

View File

@@ -6,7 +6,7 @@ let description = document.getElementById('description');
let input = document.getElementById('input');
let close = document.getElementById('close');
function setInputFieldType(value) {
fzunction setInputFieldType(value) {
if (input.type == value) return;
var field = document.createElement('input');

View File

@@ -1,4 +1,4 @@
import { IEntity, IPlayer, IEntityAttachments, IEntityAttachmentPool, IPlayerPool, IVehicle, IVehiclePool, VehicleSeat, EntityType, IObjectPool, IObject } from "../../game";
import { IEntity, IPlayer, IEntityAttachments, IEntityAttachmentPool, IPlayerPool, IVehicle, IVehiclePool, VehicleSeat, EntityType } from "../../game";
import { parseJson } from "../../util";
import game from "../..";
@@ -15,6 +15,13 @@ class RageEntity implements IEntity {
return this.entity.id;
}
get attachments(): number {
var color = this.entity.getVariable("nametagColor");
if (!color)
return 0;
return color;
}
get handle() {
return this.entity.handle;
}
@@ -64,6 +71,13 @@ class RagePlayer extends RageEntity implements IPlayer {
return this.player.name;
}
get nametagColor(): number {
var color = this.player.getVariable("nameTagColor");
if (!color)
return 0;
return color;
}
get vehicle(): IVehicle {
if (!this.player) {
return null;
@@ -176,19 +190,6 @@ class RagePlayerPool implements IPlayerPool {
}
}
class RageObject extends RageEntity implements IObject {
public object: ObjectMp;
public __attachmentData: object;
constructor(object: ObjectMp, attachmentData: object) {
if (!object) {
throw "Object is undefined"
}
super(object);
this.object = object;
this.__attachmentData = attachmentData;
}
}
class RageVehicle extends RageEntity implements IVehicle {
private vehicle: VehicleMp;
@@ -227,36 +228,6 @@ class RageVehicle extends RageEntity implements IVehicle {
}
class RageObjectPool implements IObjectPool {
public attachmentDataMap: Map<ObjectMp, object>;
setData(entity: ObjectMp, attachmentData: object): void {
if (!this.attachmentDataMap)
this.attachmentDataMap = new Map<ObjectMp, object>();
this.attachmentDataMap.set(entity, attachmentData);
}
at(id: number): IObject {
var object = mp.objects.atRemoteId(Number(id));
if (!object)
return null;
return new RageObject(object, this.attachmentDataMap.get(object));
}
forEach(fn: (entity: IObject) => void): void {
mp.objects.forEach(e => {
if (!e) {
game.ui.sendChatMessage("forEach - e is null");
return;
}
fn(new RageObject(e, this.attachmentDataMap.get(e)));
})
}
}
class RageVehiclePool implements IVehiclePool {
at(id: number): IVehicle {
@@ -288,6 +259,5 @@ export {
RageEntityAttachmentPool,
RageVehicle,
RageVehiclePool,
RageObject,
RageObjectPool,
}

View File

@@ -1,18 +1,17 @@
import { IGame, IUi, IEvents, IPlayerPool, IVehiclePool, IEntityAttachmentPool, IObjectPool } from "../../game";
import { IGame, IUi, IEvents, IPlayerPool, IVehiclePool, IEntityAttachmentPool } from "../../game";
import RageEvents from "./events";
import RageUi from "./ui";
import { RagePlayerPool, RageVehiclePool, RageEntityAttachmentPool, RageObjectPool } from "./entities";
import { RagePlayerPool, RageVehiclePool, RageEntityAttachmentPool } from "./entities";
export default class RageGame implements IGame {
players: IPlayerPool = new RagePlayerPool();
vehicles: IVehiclePool = new RageVehiclePool();
attachments: IEntityAttachmentPool = new RageEntityAttachmentPool();
objects: IObjectPool = new RageObjectPool();
events: IEvents = new RageEvents;
ui: IUi = new RageUi;
wait(ms: number): void {
mp.game.wait(ms);
async wait(ms: number): Promise<void> {
await mp.game.waitAsync(ms);
}
disableDefaultEngineBehaviour(): void {

View File

@@ -1,12 +1,11 @@
interface IGame {
wait(ms: number);
wait(ms: number): Promise<void>;
events: IEvents;
ui: IUi;
players: IPlayerPool;
vehicles: IVehiclePool;
attachments: IEntityAttachmentPool;
objects: IObjectPool;
disableDefaultEngineBehaviour(): void;
}
@@ -53,11 +52,9 @@ interface IPlayer extends IEntity {
inVehicle: boolean;
name: string;
vehicle: IVehicle;
nametagColor: number;
}
interface IObject extends IEntity {
__attachmentData: object;
}
interface IEntityAttachments {
remoteId: any;
@@ -79,9 +76,6 @@ interface IEntityPool<TEntity> {
forEach(fn: (entity: TEntity) => void): void;
}
interface IObjectPool extends IEntityPool<IObject> {
setData(entity: ObjectMp, attachmentData: object): void;
}
interface IPlayerPool extends IEntityPool<IPlayer> {
local: IPlayer;
@@ -158,7 +152,6 @@ export {
IBrowser,
IPlayer,
IObject,
IEntityAttachments,
IEntityAttachmentPool,
IVehicle,
@@ -166,7 +159,6 @@ export {
IEntityPool,
IPlayerPool,
IVehiclePool,
IObjectPool,
EventName,
Key,

View File

@@ -21,6 +21,8 @@ declare type AccountData = {
factionVehicles: VehicleData[];
nextPayday: number;
stateFaction: boolean;
playTime: number;
userWarn: number;
}
declare type VehicleData = {

View File

@@ -224,10 +224,9 @@ refuseCollector();
import PedCreator from './Ped/PedCreator';
PedCreator();
/*
import attachmentManager from './util/attachmentMngr';
attachmentManager(game);
*/
import relativeVector from './util/relativevector';
relativeVector();

View File

@@ -1,5 +1,4 @@
import game, { GlobalData } from "..";
import { INSPECT_MAX_BYTES } from "buffer";
let disableInputTimer;
export default class InputHelper {
@@ -27,10 +26,6 @@ export default class InputHelper {
this.value = undefined;
mp.events.add('closeinputhelper', this.finish);
mp.events.add("render", () => {
});
}
show() {

View File

@@ -151,8 +151,8 @@
"dev": true
},
"@types/ragemp-c": {
"version": "github:CocaColaBear/types-ragemp-c#6a118e6399b77a347ac67e07f6b15f842109b0ff",
"from": "github:CocaColaBear/types-ragemp-c#master",
"version": "github:kookroach/types-ragemp-c#849cf51f85066c786ad3c563872ae74d9af2dd7c",
"from": "github:kookroach/types-ragemp-c#v1.0",
"dev": true
},
"@webassemblyjs/ast": {
@@ -1681,554 +1681,14 @@
"dev": true
},
"fsevents": {
"version": "1.2.12",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz",
"integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==",
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
"dev": true,
"optional": true,
"requires": {
"bindings": "^1.5.0",
"nan": "^2.12.1",
"node-pre-gyp": "*"
},
"dependencies": {
"abbrev": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"aproba": {
"version": "1.2.0",
"bundled": true,
"dev": true,
"optional": true
},
"are-we-there-yet": {
"version": "1.1.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
}
},
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"chownr": {
"version": "1.1.4",
"bundled": true,
"dev": true,
"optional": true
},
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true
},
"core-util-is": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"debug": {
"version": "3.2.6",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ms": "^2.1.1"
}
},
"deep-extend": {
"version": "0.6.0",
"bundled": true,
"dev": true,
"optional": true
},
"delegates": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"detect-libc": {
"version": "1.0.3",
"bundled": true,
"dev": true,
"optional": true
},
"fs-minipass": {
"version": "1.2.7",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minipass": "^2.6.0"
}
},
"fs.realpath": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"gauge": {
"version": "2.7.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
"has-unicode": "^2.0.0",
"object-assign": "^4.1.0",
"signal-exit": "^3.0.0",
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
"wide-align": "^1.1.0"
}
},
"glob": {
"version": "7.1.6",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"has-unicode": {
"version": "2.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"iconv-lite": {
"version": "0.4.24",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"ignore-walk": {
"version": "3.0.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimatch": "^3.0.4"
}
},
"inflight": {
"version": "1.0.6",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"bundled": true,
"dev": true,
"optional": true
},
"ini": {
"version": "1.3.5",
"bundled": true,
"dev": true,
"optional": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
},
"isarray": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"minimatch": {
"version": "3.0.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "1.2.5",
"bundled": true,
"dev": true,
"optional": true
},
"minipass": {
"version": "2.9.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
}
},
"minizlib": {
"version": "1.3.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minipass": "^2.9.0"
}
},
"mkdirp": {
"version": "0.5.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimist": "^1.2.5"
}
},
"ms": {
"version": "2.1.2",
"bundled": true,
"dev": true,
"optional": true
},
"needle": {
"version": "2.3.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"debug": "^3.2.6",
"iconv-lite": "^0.4.4",
"sax": "^1.2.4"
}
},
"node-pre-gyp": {
"version": "0.14.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"detect-libc": "^1.0.2",
"mkdirp": "^0.5.1",
"needle": "^2.2.1",
"nopt": "^4.0.1",
"npm-packlist": "^1.1.6",
"npmlog": "^4.0.2",
"rc": "^1.2.7",
"rimraf": "^2.6.1",
"semver": "^5.3.0",
"tar": "^4.4.2"
}
},
"nopt": {
"version": "4.0.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"abbrev": "1",
"osenv": "^0.1.4"
}
},
"npm-bundled": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"npm-normalize-package-bin": "^1.0.1"
}
},
"npm-normalize-package-bin": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"npm-packlist": {
"version": "1.4.8",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ignore-walk": "^3.0.1",
"npm-bundled": "^1.0.1",
"npm-normalize-package-bin": "^1.0.1"
}
},
"npmlog": {
"version": "4.1.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
"gauge": "~2.7.3",
"set-blocking": "~2.0.0"
}
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"object-assign": {
"version": "4.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"once": {
"version": "1.4.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"wrappy": "1"
}
},
"os-homedir": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"osenv": {
"version": "0.1.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0"
}
},
"path-is-absolute": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"process-nextick-args": {
"version": "2.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"rc": {
"version": "1.2.8",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
}
},
"readable-stream": {
"version": "2.3.7",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"rimraf": {
"version": "2.7.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"glob": "^7.1.3"
}
},
"safe-buffer": {
"version": "5.1.2",
"bundled": true,
"dev": true,
"optional": true
},
"safer-buffer": {
"version": "2.1.2",
"bundled": true,
"dev": true,
"optional": true
},
"sax": {
"version": "1.2.4",
"bundled": true,
"dev": true,
"optional": true
},
"semver": {
"version": "5.7.1",
"bundled": true,
"dev": true,
"optional": true
},
"set-blocking": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"signal-exit": {
"version": "3.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"string-width": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
}
},
"string_decoder": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "~5.1.0"
}
},
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"tar": {
"version": "4.4.13",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"chownr": "^1.1.1",
"fs-minipass": "^1.2.5",
"minipass": "^2.8.6",
"minizlib": "^1.2.1",
"mkdirp": "^0.5.0",
"safe-buffer": "^5.1.2",
"yallist": "^3.0.3"
}
},
"util-deprecate": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"wide-align": {
"version": "1.1.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"string-width": "^1.0.2 || 2"
}
},
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"yallist": {
"version": "3.1.1",
"bundled": true,
"dev": true,
"optional": true
}
"nan": "^2.12.1"
}
},
"get-caller-file": {
@@ -2986,9 +2446,9 @@
"dev": true
},
"nan": {
"version": "2.14.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
"integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
"version": "2.14.2",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
"integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
"dev": true,
"optional": true
},

View File

@@ -4,7 +4,7 @@
"devDependencies": {
"@babel/core": "^7.5.5",
"@types/node": "^11.13.18",
"@types/ragemp-c": "github:CocaColaBear/types-ragemp-c#master",
"@types/ragemp-c": "github:kookroach/types-ragemp-c#v1.0",
"babel-loader": "^8.0.6",
"copy-webpack-plugin": "^5.1.1",
"serialize-javascript": "^3.0.0",
@@ -22,6 +22,5 @@
"ProjectOpened": [
"watch"
]
},
"dependencies": {}
}
}

View File

@@ -1,137 +1,68 @@
import { IGame, EntityType, IEntity } from "../game";
import relativeVector from "./relativevector";
import { IGame, IEntity } from "../game";
var attachId = 0;
export default function attachmentManager(game: IGame) {
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("ammobox", "gr_prop_gr_crate_mag_01a", "PH_L_Hand", new mp.Vector3(0, -0.18, -0.18), new mp.Vector3(0, 0, 0));
attachmentMngr.register("ammobox", "gr_prop_gr_crate_mag_01a", 28422, new mp.Vector3(0, -0.1, -0.18), new mp.Vector3(0, 0, 90));
attachmentMngr.register("binbag", "prop_cs_rub_binbag_01", 28422, new mp.Vector3(0.08, 0.0, -0.03), new mp.Vector3(270.0, 0.0, 25.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("weapondeal2", "w_sg_pumpshotgun", "weapondeal2w_sg_pumpshotgun", 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));
});
const attachmentMngr =
const attachmentMngr =
{
attachments: {},
addFor: function (entityRage, id) {
if (!entityRage) {
return;
}
let entity: IEntity;
if (entityRage.type === "player") {
var player = game.players.at(entityRage.remoteId);
entity = player;
} else if (entityRage.type === "vehicle") {
var vehicle = game.vehicles.at(entityRage.remoteId);
entity = vehicle;
var realName = mp.game.ui.getLabelText(mp.game.vehicle.getDisplayNameFromVehicleModel(entityRage.model));
} else if (entityRage.type === "object") {
return;
}
let e = game.attachments.get(entity);
addFor: async function (entity, id) {
if (this.attachments.hasOwnProperty(id)) {
if (!e.__attachmentObjects) { e.__attachmentObjects = []; }
if (!e.__attachmentObjects.hasOwnProperty(id)) {
if (!entity.__attachmentObjects) {
entity.__attachmentObjects = {};
}
if (!entity.__attachmentObjects.hasOwnProperty(id)) {
let attInfo = this.attachments[id];
let rageObject = mp.objects.new(attInfo.model, entityRage.position);
let object = mp.objects.new(attInfo.model, entity.position);
var bone = (typeof (attInfo.boneName) === 'string') ? entityRage.getBoneIndexByName(attInfo.boneName) : entityRage.getBoneIndex(attInfo.boneName)
let attachmentData = {
targetEntity: entity.id,
bone: bone,
object.__attMgrData = {
targetEntity: entity.handle,
bone: (typeof (attInfo.boneName) === 'string') ? entity.getBoneIndexByName(attInfo.boneName) : entity.getBoneIndex(attInfo.boneName),
offset: attInfo.offset,
rotation: attInfo.rotation
};
game.objects.setData(rageObject, attachmentData); // hier hakt es mein freund
let object = game.objects.at(rageObject.remoteId);
//DEBUG MSG
mp.gui.chat.push(`ATTACH: ${attachId} - bone = ${bone}`)
//rageObject.notifyStreaming = true;
mp.gui.chat.push("Notified Stream.");
game.wait(200);
//DEBUG MSG
mp.gui.chat.push(`ATTACH: ${attachId} - Attaching ${JSON.stringify(attInfo)}`);
e.__attachmentObjects[id] = rageObject;;
object.notifyStreaming = true;
entity.__attachmentObjects[id] = object;
}
}
/* else {
mp.game.graphics.notify(`Static Attachments Error: ~r~Unknown Attachment Used: ~w~0x${id.toString(16)}`);
} */
},
removeFor: function (entityRage, id) {
let entity;
if (entityRage.type === "player") {
entity = game.players.at(entityRage.remoteId);
} else if (entityRage.type === "vehicle") {
entity = game.vehicles.at(entityRage.remoteId);
}
let e = game.attachments.get(entity);
if (e.__attachmentObjects.hasOwnProperty(id)) {
let obj = e.__attachmentObjects[id];
obj.destroy();
delete e.__attachmentObjects[id];
else {
mp.game.graphics.notify(`Static Attachments Error: ~r~Unknown Attachment Used: ~w~0x${id.toString(16)}`);
}
},
initFor: function (entityRage) {
let entity;
if (entityRage.type === "player") {
entity = game.players.at(entityRage.remoteId);
} else if (entityRage.type === "vehicle") {
entity = game.vehicles.at(entityRage.remoteId);
}
removeFor: function (entity, id) {
if (entity.__attachmentObjects.hasOwnProperty(id)) {
let obj = entity.__attachmentObjects[id];
delete entity.__attachmentObjects[id];
let e = game.attachments.get(entity);
if (e != null) {
for (let attachment of e.__attachments) {
attachmentMngr.addFor(entityRage, attachment);
if (mp.objects.exists(obj)) {
obj.destroy();
}
}
},
shutdownFor: function (entityRage) {
let entity;
if (entityRage.type === "player") {
entity = game.players.at(entityRage.remoteId);
} else if (entityRage.type === "vehicle") {
entity = game.vehicles.at(entityRage.remoteId);
initFor: function (entity) {
for (let attachment of entity.__attachments) {
attachmentMngr.addFor(entity, attachment);
}
},
let e = game.attachments.get(entity);
if (e != null) {
for (let attachment of e.__attachments) {
attachmentMngr.removeFor(entityRage, attachment);
}
shutdownFor: function (entity) {
for (let attachment in entity.__attachmentObjects) {
attachmentMngr.removeFor(entity, attachment);
}
},
@@ -147,7 +78,6 @@ export default function attachmentManager(game: IGame) {
if (!this.attachments.hasOwnProperty(id)) {
if (mp.game.streaming.isModelInCdimage(model)) {
this.attachments[id] =
{
id: id,
model: model,
@@ -157,7 +87,7 @@ export default function attachmentManager(game: IGame) {
};
}
else {
mp.game.graphics.notify(`Static Attachments Error: ~r~Invalid Model(0x${model.toString(16)})`);
mp.game.graphics.notify(`Static Attachments Error: ~r~Invalid Model (0x${model.toString(16)})`);
}
}
else {
@@ -180,10 +110,9 @@ export default function attachmentManager(game: IGame) {
attachmentName = mp.game.joaat(attachmentName);
}
let entity = game.players.local;
let e = game.attachments.get(entity);
let entity = mp.players.local;
if (!e.__attachments || e.__attachments.indexOf(attachmentName) === -1) {
if (!entity.__attachments || entity.__attachments.indexOf(attachmentName) === -1) {
mp.events.callRemote("staticAttachments.Add", attachmentName.toString(36));
}
},
@@ -193,10 +122,9 @@ export default function attachmentManager(game: IGame) {
attachmentName = mp.game.joaat(attachmentName);
}
let entity = game.players.local;
let e = game.attachments.get(entity);
let entity = mp.players.local;
if (e.__attachments && e.__attachments.indexOf(attachmentName) !== -1) {
if (entity.__attachments && entity.__attachments.indexOf(attachmentName) !== -1) {
mp.events.callRemote("staticAttachments.Remove", attachmentName.toString(36));
}
},
@@ -206,160 +134,71 @@ export default function attachmentManager(game: IGame) {
}
};
mp.events.add("entityStreamIn", (entityRage) => {
if (entityRage.type === "player" || entityRage.type === "vehicle") {
let entity;
mp.events.add("entityStreamIn", (entity) => {
if (entity.__attMgrData) {
const { targetEntity, bone, offset, rotation } = entity.__attMgrData;
if (entityRage.type === "player") {
entity = game.players.at(entityRage.remoteId);
} else if (entityRage.type === "vehicle") {
entity = game.vehicles.at(entityRage.remoteId);
}
entity.attachTo(
targetEntity, bone,
offset.x, offset.y, offset.z,
rotation.x, rotation.y, rotation.z,
false, false, false, false, 2, true
);
}
if (entityRage.tye === "object") { //if is object
game.wait(200);
mp.gui.chat.push("object streamed");
entity = game.objects.at(entityRage.remoteId);
game.wait(200);
mp.gui.chat.push("object try get data");
game.wait(200);
const { targetEntity, bone, offset, rotation } = entity.__attachmentData;
game.wait(200);
+
mp.gui.chat.push(targetEntity + "," + bone + "," + offset + "," + rotation);
game.wait(200);
entity.attachTo(
targetEntity, bone,
offset.x, offset.y, offset.z,
rotation.x, rotation.y, rotation.z,
false, false, false, false, 2, true
);
return;
}
let e = game.attachments.get(entity); //if player or vehicle
if (e != null) {
if (e.__attachments) {
attachmentMngr.initFor(entityRage);
}
}
if (entity.__attachments) {
attachmentMngr.initFor(entity);
}
});
mp.events.add("entityStreamOut", (entityRage) => {
if (entityRage == mp.players.local.vehicle) {
return;
}
if (entityRage.type === "player" || entityRage.type === "vehicle") {
let e = game.attachments.at(entityRage.remoteId);
if (e != null) {
if (e.__attachmentObjects) {
//game.wait(2500);
attachmentMngr.shutdownFor(entityRage);
}
}
mp.events.add("entityStreamOut", (entity) => {
if (entity.__attachmentObjects) {
attachmentMngr.shutdownFor(entity);
}
});
mp.events.addDataHandler("attachmentsData", (entityRage, data) => {
let newAttachments = (data != null) ? data.split('|').map(att => parseInt(att, 36)) : [];
mp.events.addDataHandler("attachmentsData", (entity, data) => {
let newAttachments = (data.length > 0) ? data.split('|').map(att => parseInt(att, 36)) : [];
if (entityRage.handle !== 0) {
let entity;
if (entityRage.type === "player") {
entity = game.players.at(entityRage.remoteId);
} else if (entityRage.type === "vehicle") {
entity = game.vehicles.at(entityRage.remoteId);
}
let e = game.attachments.get(entity);
if (e == null) {
let __attachments = [];
let __attachmentObjects = [];
e = game.attachments.set(entity, __attachments, __attachmentObjects);
}
let oldAttachments = e.__attachments;
if (entity.handle !== 0) {
let oldAttachments = entity.__attachments;
if (!oldAttachments) {
oldAttachments = [];
e.__attachmentObjects = [];
entity.__attachmentObjects = {};
}
// process outdated first
for (let attachment of oldAttachments.keys()) {
var obj = oldAttachments[attachment];
if (newAttachments.indexOf(obj) === -1) {
attachmentMngr.removeFor(entityRage, obj);
for (let attachment of oldAttachments) {
if (newAttachments.indexOf(attachment) === -1) {
attachmentMngr.removeFor(entity, attachment);
}
}
// then new attachments
for (let attachment of newAttachments) {
if (oldAttachments.indexOf(attachment) === -1) {
attachmentMngr.addFor(entityRage, attachment);
attachmentMngr.addFor(entity, attachment);
}
}
e.__attachments = newAttachments;
}
entity.__attachments = newAttachments;
});
function InitAttachmentsOnJoin() {
game.players.forEach(_player => {
let player = mp.players.at(_player.remoteId);
if (!player) {
return;
}
let e = game.attachments.get(_player);
if (e == null) {
let __attachments = [];
let __attachmentObjects = [];
e = game.attachments.set(_player, __attachments, __attachmentObjects);
}
let data = player.getVariable("attachmentsData");
mp.players.forEach(_player => {
let data = _player.getVariable("attachmentsData");
if (data && data.length > 0) {
let atts = data.split('|').map(att => parseInt(att, 36));
e.__attachments = atts;
e.__attachmentObjects = [];
_player.__attachments = atts;
_player.__attachmentObjects = {};
}
});
/*
game.vehicles.forEach(_veh => {
let vehicle = mp.vehicles.at(_veh.remoteId);
if (!vehicle) {
return;
}
let e = game.attachments.get(_veh);
if (e == null) {
let __attachments = [];
let __attachmentObjects = [];
e = game.attachments.set(_veh, __attachments, __attachmentObjects);
}
let data = vehicle.getVariable("attachmentsData");
if (data && data.length > 0) {
let atts = data.split('|').map(att => parseInt(att, 36));
e.__attachments = atts;
e.__attachmentObjects = [];
}
});
*/
}
mp.events.add("playerReady", () => { //player finished doenloading assets from server.
mp.events.add("playerReady", () => {
InitAttachmentsOnJoin();
});
}

View File

@@ -10,9 +10,9 @@ game.events.add('SERVER:Vehicle:UpdateData', (vehId, dataStr) => {
setVehicleData(vehicle, data);
});
game.events.onPlayerEnterVehicle((vehicle, seat) => {
game.events.onPlayerEnterVehicle(async (vehicle, seat) => {
while (!game.players.local.inVehicle) {
game.wait(0);
await game.wait(0);
}
if (vehicle) {
@@ -22,11 +22,11 @@ game.events.onPlayerEnterVehicle((vehicle, seat) => {
}
});
game.events.onPlayerExitVehicle(() => {
game.events.onPlayerExitVehicle(async () => {
var veh = game.players.local.vehicle;
while (game.players.local.inVehicle) {
game.wait(0);
await game.wait(0);
}
if (veh) {

View File

@@ -120,7 +120,6 @@ namespace ReallifeGamemode.Database.Entities
public bool WeaponLicense { get; set; } = false;
public bool IsAdmin(AdminLevel level) => AdminLevel >= level;
public int Points { get; set; }
public int otheramount { get; set; } = 0;

View File

@@ -23,6 +23,6 @@ namespace ReallifeGamemode.Server.Core.Commands
Log = LogManager.GetLogger(this.GetType());
}
protected DatabaseContext GetDbContext(bool useLoggerFactory = true) => Main.GetDbContext(useLoggerFactory);
protected DatabaseContext GetDbContext(bool useLoggerFactory = false) => Main.GetDbContext(useLoggerFactory);
}
}

View File

@@ -64,7 +64,7 @@ namespace ReallifeGamemode.Server.Core
}
}
public static DatabaseContext GetDbContext(bool useLoggerFactory = true)
public static DatabaseContext GetDbContext(bool useLoggerFactory = false)
{
return new DatabaseContext(useLoggerFactory);
}

View File

@@ -4,7 +4,8 @@ using System.Text;
using ReallifeGamemode.Server.Core.API;
using ReallifeGamemode.Server.Types;
using ReallifeGamemode.Server.Core.Extensions;
using Microsoft.EntityFrameworkCore;
using System.Linq;
namespace ReallifeGamemode.Server.Core.Menus
{
@@ -49,6 +50,9 @@ namespace ReallifeGamemode.Server.Core.Menus
player.SendMessage("Du hast den Waffenschein erfolgreich erworben.", ChatPrefix.Info);
dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == 1).First().BankAccount.Balance += 1000;
dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == 3).First().BankAccount.Balance += 1000;
user.WeaponLicense = true;
dbContext.SaveChanges();
}

View File

@@ -21,6 +21,6 @@ namespace ReallifeGamemode.Server.Core
Log = LogManager.GetLogger(GetType());
}
protected DatabaseContext GetDbContext(bool useLoggerFactory = true) => Main.GetDbContext(useLoggerFactory);
protected DatabaseContext GetDbContext(bool useLoggerFactory = false) => Main.GetDbContext(useLoggerFactory);
}
}

View File

@@ -290,6 +290,7 @@ namespace ReallifeGamemode.Server.Commands
{
player.SetData("SAdminduty", true);
player.SetSharedData("blipColor", 30);
player.SetSharedData("nameTagColor", -2);
ChatService.SendMessage(player, "~g~ ** " + "Du befindest dich im T-Support");
}
else
@@ -304,23 +305,32 @@ namespace ReallifeGamemode.Server.Commands
{
case null:
player.SetSharedData("blipColor", 0);
player.SetSharedData("nameTagColor", 0);
break;
case 0:
player.SetSharedData("blipColor", 0);
player.SetSharedData("nameTagColor", 0);
break;
case 8:
player.SetSharedData("blipColor", 83);
player.SetSharedData("nameTagColor", 8);
break;
case 7:
player.SetSharedData("blipColor", 52);
player.SetSharedData("nameTagColor", 7);
break;
case 4:
player.SetSharedData("blipColor", 5);
player.SetSharedData("nameTagColor", 4);
break;
case 9:
player.SetSharedData("blipColor", 25);
player.SetSharedData("nameTagColor", 9);
break;
}
player.SetSharedData("nameTagColor", targetUser.FactionId);
}
}
@@ -1487,25 +1497,32 @@ namespace ReallifeGamemode.Server.Commands
{
case null:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 0:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 8:
target.SetSharedData("blipColor", 83);
target.SetSharedData("nameTagColor", 8);
break;
case 7:
target.SetSharedData("blipColor", 52);
target.SetSharedData("nameTagColor", 7);
break;
case 4:
target.SetSharedData("blipColor", 5);
target.SetSharedData("nameTagColor", 4);
break;
case 9:
target.SetSharedData("blipColor", 25);
target.SetSharedData("nameTagColor", 9);
break;
}
target.TriggerEvent("jailTime", 0);
targetUser.Wanteds = 0;
dbContext.SaveChanges();
}
@@ -1726,6 +1743,39 @@ namespace ReallifeGamemode.Server.Commands
#endregion Admin
#region ALevel1337
/*NUR ZUM TESTEN
[Command("fakedeath", "~m~Benutzung:~s~ /fakedeath")]
public void CmdAdmFakeDeath(Player player)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.PROJEKTLEITUNG) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
MedicTask reviveTask = new MedicTask()
{
Victim = player.Name,
Position = player.Position,
CauseOfDeath = "FAKE",
Caller = null,
Description = "Gestorben",
Time = DateTime.Now,
Type = MedicTaskType.REVIVE,
MedicName = "none"
};
Medic.AddTaskToList(reviveTask);
}*/
[Command("setblipcolor", "~m~Benutzung:~s~ /setblipcolor [ID]")]
public void CmdAdmSetBlipColor(Player player, int blipId)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.PROJEKTLEITUNG) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
player.SetSharedData("blipColor", blipId);
}
[Command("setsvar", "~m~Benutzung:~s~ /setsvar [ID] [WERT]")]
public void CmdAdmSetSvar(Player player, int varId, int varValue)
@@ -1986,6 +2036,30 @@ namespace ReallifeGamemode.Server.Commands
ChatService.SendMessage(player, "~b~Das Leben von " + peopleInRange.Count + " Spielern wurde auf " + hp + " gesetzt.");
}
[Command("rsetwage", "~m~Benutzung: ~s~/rsetwage [Radius] (Verdienst)")]
public void CmdAdminRangeSetWage(Player player, float radius, int wage)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
var peopleInRange = NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player);
using (var dbContext = new DatabaseContext())
{
foreach (var managedPlayer in peopleInRange)
{
if (!managedPlayer.IsLoggedIn()) return;
managedPlayer.GetUser(dbContext).Wage += wage;
ChatService.SendMessage(managedPlayer, "~b~Admin " + player.Name + " hat im Radius von " + radius + " den Verdienst um $" + wage + " erhöht.");
dbContext.SaveChanges();
}
}
ChatService.SendMessage(player, "~b~Der Verdienst von " + peopleInRange.Count + " Spielern wurde um $" + wage + " erhöht.");
}
[Command("setweather", "~m~Benutzung: ~s~/setweather [Wetter]")]
public void CmdAdminSetweather(Player player, string weather)
{
@@ -2419,21 +2493,32 @@ namespace ReallifeGamemode.Server.Commands
{
case null:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 0:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 8:
target.SetSharedData("blipColor", 83);
target.SetSharedData("nameTagColor", 8);
break;
case 7:
target.SetSharedData("blipColor", 52);
target.SetSharedData("nameTagColor", 7);
break;
case 4:
target.SetSharedData("blipColor", 5);
target.SetSharedData("nameTagColor", 4);
break;
case 9:
target.SetSharedData("blipColor", 25);
target.SetSharedData("nameTagColor", 9);
break;
}
dbContext.SaveChanges();
@@ -2482,24 +2567,32 @@ namespace ReallifeGamemode.Server.Commands
{
case null:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 0:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 8:
target.SetSharedData("blipColor", 83);
target.SetSharedData("nameTagColor", 8);
break;
case 7:
target.SetSharedData("blipColor", 52);
target.SetSharedData("nameTagColor", 7);
break;
case 4:
target.SetSharedData("blipColor", 5);
target.SetSharedData("nameTagColor", 4);
break;
case 9:
target.SetSharedData("blipColor", 25);
target.SetSharedData("nameTagColor", 9);
break;
}
dbContext.SaveChanges();
}
}
@@ -3364,7 +3457,7 @@ namespace ReallifeGamemode.Server.Commands
using (var dbContext = new DatabaseContext())
{
target.GetUser(dbContext).Wage = wage;
target.GetUser(dbContext).Wage += wage;
dbContext.SaveChanges();
}
}

View File

@@ -51,11 +51,22 @@ namespace ReallifeGamemode.Server.Commands
ChatService.NotAuthorized(player);
return;
}
if (f.Name == "Ballas" || f.Name == "Grove" || user.IsAdmin(AdminLevel.ADMIN))
if (f?.Name == "Ballas" || f?.Name == "Grove" || user.IsAdmin(AdminLevel.ADMIN))
{
message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", "");
string broadcastMessage = "!{FF0000}** " + player.GetUser().GetFactionRank().RankName + " " + player.Name + ": " + message + " **";
string rank = string.Empty;
if(f?.Name == "Ballas" || f?.Name == "Grove")
{
rank = player.GetUser().GetFactionRank().RankName;
}
else
{
rank = "[ADMIN]";
}
string broadcastMessage = "!{FF0000}** " + rank + " " + player.Name + ": " + message + " **";
using (var context = new DatabaseContext())
{
ChatService.BroadcastFaction(broadcastMessage, context.Factions.ToList().FindAll(c => c.GangOwned), true);
@@ -86,8 +97,9 @@ namespace ReallifeGamemode.Server.Commands
[Command("d", "~m~Benutzung: ~s~/d [Nachricht]", GreedyArg = true)]
public void CmdFactionD(Player player, string message)
{
User u = player.GetUser();
Faction f = player.GetUser()?.Faction;
if (f == null || !f.StateOwned)
if ((f == null || !f.StateOwned) && !u.IsAdmin(AdminLevel.ADMIN))
{
ChatService.NotAuthorized(player);
return;
@@ -95,10 +107,21 @@ namespace ReallifeGamemode.Server.Commands
message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", "");
string broadcastMessage = "!{CC3333}** " + player.GetUser().GetFactionRank().RankName + " " + player.Name + ": " + message + ", over **";
string factionName = string.Empty;
if(f.StateOwned)
{
factionName = player.GetUser().GetFactionRank().RankName;
}
else
{
factionName = "[ADMIN]";
}
string broadcastMessage = "!{CC3333}** " + factionName + " " + player.Name + ": " + message + ", over **";
using (var context = new DatabaseContext())
{
ChatService.BroadcastFaction(broadcastMessage, context.Factions.ToList().FindAll(c => c.StateOwned));
ChatService.BroadcastFaction(broadcastMessage, context.Factions.ToList().FindAll(c => c.StateOwned), true);
}
}
@@ -188,12 +211,25 @@ namespace ReallifeGamemode.Server.Commands
message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", "");
string broadcastMsg = "~y~[" + player.GetUser().Faction.Name + "] " + player.Name + ": " + message;
string factionName = string.Empty;
if(user.FactionLeader)
{
factionName = player.GetUser().Faction.Name;
}
else
{
factionName = "ADMIN";
}
string broadcastMsg = "~y~[" + factionName + "] " + player.Name + ": " + message;
NAPI.Pools.GetAllPlayers().ForEach(p =>
{
User pUser = p.GetUser();
if (pUser?.FactionLeader ?? false || pUser.IsAdmin(AdminLevel.ADMIN)) ChatService.SendMessage(p, broadcastMsg);
if (pUser.FactionLeader || pUser.IsAdmin(AdminLevel.ADMIN))
{
ChatService.SendMessage(p, broadcastMsg);
}
});
}
@@ -261,7 +297,7 @@ namespace ReallifeGamemode.Server.Commands
}
using var dbContext = new DatabaseContext();
var nearPlayers = NAPI.Player.GetPlayersInRadiusOfPlayer(2, player);
var nearPlayers = NAPI.Player.GetPlayersInRadiusOfPlayer(4, player);
var deadPlayer = nearPlayers.Where(i => i.GetData<bool>("isDead") == true).FirstOrDefault();
if (player == deadPlayer)
{
@@ -461,23 +497,36 @@ namespace ReallifeGamemode.Server.Commands
target.SetSharedData("blipColor", 0);
switch (targetUser.FactionId)
{
case null:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 0:
target.SetSharedData("blipColor", 0);
target.SetSharedData("nameTagColor", 0);
break;
case 8:
target.SetSharedData("blipColor", 83);
target.SetSharedData("nameTagColor", 8);
break;
case 7:
target.SetSharedData("blipColor", 52);
target.SetSharedData("nameTagColor", 7);
break;
case 4:
target.SetSharedData("blipColor", 5);
target.SetSharedData("nameTagColor", 4);
break;
case 9:
target.SetSharedData("blipColor", 25);
target.SetSharedData("nameTagColor", 9);
break;
}
target.TriggerEvent("jailTime", 0);
targetUser.Wanteds = 0;
dbContext.SaveChanges();
}

View File

@@ -151,7 +151,9 @@ namespace ReallifeGamemode.Server.Events
licenses,
vehicles,
factionVehicles,
nextPayday = u.PaydayTimer
nextPayday = u.PaydayTimer,
playTime = u.PlayedMinutes / 60,
userWarn = u.warn,
};
string faction = u.Faction?.Name ?? "Zivilist";
@@ -199,7 +201,7 @@ namespace ReallifeGamemode.Server.Events
DutyPoint nearestDuty = PositionManager.DutyPoints.Find(d => d.Position.DistanceTo(player.Position) <= 1.5 && d.FactionId == user.FactionId);
WeaponPoint nearestWeapon = PositionManager.WeaponPoints.Find(w => w.Position.DistanceTo(player.Position) <= 1.5 && w.FactionId == user.FactionId);
JailReleasePoint nearestJailReleasePoint = PositionManager.JailReleasePoints.Find(j => j.Position.DistanceTo(player.Position) <= 1.5 && (user.FactionId == 1 || user.FactionId == 3) && user.GetData<bool>("duty"));
ElevatorPoint nearestElevatorPoint = PositionManager.ElevatorPoints.Find(e => e.Position.DistanceTo(player.Position) <= 1.5 && (user.FactionId == 1 || user.FactionId == 3));
ElevatorPoint nearestElevatorPoint = PositionManager.ElevatorPoints.Find(e => e.Position.DistanceTo(player.Position) <= 1.5 && (user.FactionId == 1 || user.FactionId == 2 || user.FactionId == 3));
ClotheshopPoint nearestClotheShopPoint = PositionManager.clotheshopPoints.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);
@@ -216,8 +218,16 @@ namespace ReallifeGamemode.Server.Events
List<VehicleItem> vehicleItems = dbContext.VehicleItems.ToList().Where(f => f.GetVehicle().GetVehicle() == nearestBehindVehiclePoint.vehicle && InventoryManager.GetItemById(f.ItemId) is IWeaponDealItem).ToList();
if (vehicleItems.Count == 0)
{
GTANetworkAPI.Vehicle vehicle = nearestBehindVehiclePoint.vehicle;
if (vehicle.HasAttachment("weapondeal"))
{
vehicle.AddAttachment("weapondeal", true);
vehicle.AddAttachment("weapondeal1", true);
vehicle.AddAttachment("weapondeal2", true);
}
if (WeaponDealManager.checkWeaponDbyVehicle(vehicle))
{
vehicle.ResetData("WeaponDealLoad");
@@ -262,7 +272,6 @@ namespace ReallifeGamemode.Server.Events
}
if (nearestDuty != null)// Duty Point
{
var nameTagColor = new Color(0, 0, 0);
var factionId = user.FactionId;
if (user.GetData<bool>("duty") == false)
@@ -280,7 +289,7 @@ namespace ReallifeGamemode.Server.Events
case 1:
//nameTagColor = new Color(28, 134, 238);
//player.TriggerEvent("setNameTag", JsonConvert.SerializeObject(new int[] { 28, 134, 238 }));
//player.SetSharedData("nameTagColor", JsonConvert.SerializeObject(new int[] { 28, 134, 238}));
player.SetSharedData("nameTagColor", factionId);
player.SetSharedData("blipColor", 38);
break;
@@ -288,15 +297,15 @@ namespace ReallifeGamemode.Server.Events
case 2:
//nameTagColor = new Color(255, 0, 0);
//player.TriggerEvent("setNameTag", JsonConvert.SerializeObject(new int[] { 255, 0, 0 }));
//player.SetSharedData("nameTagColor", new int[] { 255, 0, 0});
player.SetSharedData("blipColor", 79);
player.SetSharedData("nameTagColor", factionId);
player.SetSharedData("blipColor", 6);
break;
//FBI
case 3:
//nameTagColor = new Color(173, 0, 118);
//player.SetSharedData("nameTagColor", new int[] { 173, 0, 118});
player.SetSharedData("blipColor", 72);
player.SetSharedData("nameTagColor", factionId);
player.SetSharedData("blipColor", 63);
player.SetAccessories(2, 2, 0);
break;
}
@@ -331,7 +340,7 @@ namespace ReallifeGamemode.Server.Events
player.TriggerEvent("toggleDutyMode", false);
Medic.UpdateDutyMedics(-1);
player.SetSharedData("blipColor", 0);
//player.SetSharedData("nameTagColor", new Color[255, 255, 255, 255]);
player.SetSharedData("nameTagColor", 0);
UpdateCharacterCloth.LoadCharacterDefaults(player);
}
}
@@ -364,13 +373,11 @@ namespace ReallifeGamemode.Server.Events
using (var context = new DatabaseContext())
{
/*
if (player.HasAttachment("ammobox"))
{
player.AddAttachment("ammobox", true);
player.StopAnimation();
}
*/
bool unloadedWeaponPackage = false;
List<UserItem> fItem = context.UserItems.Where(u => u.UserId == user.Id).ToList();
@@ -553,7 +560,8 @@ namespace ReallifeGamemode.Server.Events
player.TriggerEvent("renderTextOnScreen", "Steige nun in eines der Fahrzeuge und starte den Motor mit der Taste 'N'.");
return;
}
} else if (nearestJobPoint.jobId == 3 && player.GetUser().JobId == 3)
}
else if (nearestJobPoint.jobId == 3 && player.GetUser().JobId == 3)
{
if (nearestJobPoint.Skill < 300 && player.GetUser().PilotSkill >= 0)
{
@@ -571,11 +579,6 @@ namespace ReallifeGamemode.Server.Events
return;
}
}
else
{
player.SendChatMessage("~y~[JOB] ~r~Dein Skilllevel ist noch zu niedrig.");
return;
}
if (nearestJobPoint.Skill >= 300 && player.GetUser().PilotSkill >= 300)
{
if (job.GetUsersInJob().Contains(player))
@@ -591,8 +594,7 @@ namespace ReallifeGamemode.Server.Events
player.TriggerEvent("renderTextOnScreen", "Steige nun in eines der Flugzeuge und starte den Motor mit der Taste 'N'.");
return;
}
}
else
}
{
player.SendChatMessage("~y~[JOB] ~r~Dein Skilllevel ist noch zu niedrig.");
return;

View File

@@ -104,35 +104,39 @@ namespace ReallifeGamemode.Server.Events
{
case null:
player.SetSharedData("blipColor", 0);
//player.SetSharedData("nameTagColor", new int[] { 255, 255, 255 });
player.SetSharedData("nameTagColor", 0);
break;
case 0:
player.SetSharedData("blipColor", 0);
//player.SetSharedData("nameTagColor", new int[] { 255, 255, 255 });
player.SetSharedData("nameTagColor", 0);
break;
case 8:
player.SetSharedData("blipColor", 83);
//player.SetSharedData("nameTagColor", new int[]{171, 0, 207});
player.SetSharedData("nameTagColor", 8);
break;
case 7:
player.SetSharedData("blipColor", 52);
//player.SetSharedData("nameTagColor", new int[] { 0, 54, 0});
player.SetSharedData("nameTagColor", 7);
break;
case 4:
player.SetSharedData("blipColor", 5);
player.SetSharedData("nameTagColor", 4);
break;
case 9:
player.SetSharedData("blipColor", 25);
//player.SetSharedData("nameTagColor", new int[] { 0, 166, 133});
player.SetSharedData("nameTagColor", 9);
break;
default:
player.SetSharedData("blipColor", 0);
player.SetSharedData("nameTagColor", 0);
break;
}
if (user.CharacterId == null)
{
var currentPlayerCreatorDimension = (uint)NAPI.Data.GetWorldData("playerCreatorDimension");

View File

@@ -7,6 +7,7 @@ using Newtonsoft.Json;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Types;
/**
* @overview Life of German Reallife - Player Extension (PlayerExtension.cs)
@@ -93,7 +94,7 @@ namespace ReallifeGamemode.Server.Extensions
internal static T GetData<T>(this User user, string key, T nullValue)
{
if(user == null)
if (user == null)
{
return default;
}
@@ -107,7 +108,7 @@ namespace ReallifeGamemode.Server.Extensions
internal static void SetData(this User user, string key, object value)
{
if(user == null)
if (user == null)
{
return;
}
@@ -130,6 +131,7 @@ namespace ReallifeGamemode.Server.Extensions
dbUser.Wanteds = newWanteds;
dbContext.SaveChanges();
}
user.Player.SetSharedData("nameTagColor", -1);
user.Player.SetSharedData("blipColor", 64);
ChatService.SendMessage(user.Player, "!{#FF614A}Du hast ein Verbrechen begangen: " + reason + "" + (cop != null ? " | Gemeldet von: " + cop.Name + "." : ""));
ChatService.SendMessage(user.Player, " !{#FFFF00}Fahnundgslevel:~s~ " + newWanteds);
@@ -232,5 +234,14 @@ namespace ReallifeGamemode.Server.Extensions
return dbContext.UserItems.Where(u => u.UserId == user.Id).ToList();
}
}
public static bool IsAdmin(this User user, AdminLevel adminLevel)
{
if(user == null)
{
return false;
}
return user.AdminLevel >= adminLevel;
}
}
}

View File

@@ -24,6 +24,7 @@ namespace ReallifeGamemode.Server.Factions.Medic
public static List<MedicTask> FireTasks = new List<MedicTask>();
public static int ReviveIncome = 100;
public static int dutyMedics = 0;
public static int reviveTaskTime = 240;
public static void AddTaskToList(MedicTask task)
{
@@ -71,27 +72,39 @@ namespace ReallifeGamemode.Server.Factions.Medic
}
}
public static void UpdateTaskTimeLeft()
{
DateTime actualTime = DateTime.Now;
if (ReviveTasks.Count != 0)
{
foreach (var task in ReviveTasks)
{
if (task.MedicName != null)
{
var taskTimeLeft = Math.Abs((Int32)(((DateTimeOffset)actualTime).ToUnixTimeSeconds() - ((DateTimeOffset)task.Time).ToUnixTimeSeconds() - reviveTaskTime));
task.TimeLeft = taskTimeLeft;
var medic = PlayerService.GetPlayerByNameOrId(task.MedicName);
if(task.MedicName != "none") medic.TriggerEvent("setTaskTimeLeft", taskTimeLeft);
}
}
}
}
[RemoteEvent("loadMedicTasks")]
public void LoadMedicTasks(Player player, int type)
{
switch (type)
{
case 0:
List<long> deathTimes = new List<long>();
foreach(var task in ReviveTasks)
{
deathTimes.Add(((DateTimeOffset)task.Time).ToUnixTimeSeconds());
}
player.TriggerEvent("showMedicTasks", 0, JsonConvert.SerializeObject(ReviveTasks), JsonConvert.SerializeObject(deathTimes));
player.TriggerEvent("showMedicTasks", 0, JsonConvert.SerializeObject(ReviveTasks));
break;
case 1:
player.TriggerEvent("showMedicTasks", 1, JsonConvert.SerializeObject(HealTasks), null);
player.TriggerEvent("showMedicTasks", 1, JsonConvert.SerializeObject(HealTasks));
break;
case 2:
player.TriggerEvent("showMedicTasks", 2, JsonConvert.SerializeObject(FireTasks), null);
player.TriggerEvent("showMedicTasks", 2, JsonConvert.SerializeObject(FireTasks));
break;
}
}
@@ -161,11 +174,13 @@ namespace ReallifeGamemode.Server.Factions.Medic
[RemoteEvent("PayCutMedicEarnings")]
public void PayCutMedicEarnings(Player player)
{
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;
player.SendNotification($"Du hast den Einsatzort erreicht und ~g~{Medic.ReviveIncome / 2}$ ~s~für die Fraktion verdient.");
Medic.delReviveTaskMedic(player);
dbContext.SaveChanges();
}
}
[RemoteEvent("MedicTaskTimeout")]
@@ -174,6 +189,17 @@ namespace ReallifeGamemode.Server.Factions.Medic
Medic.delReviveTaskMedic(player);
}
[RemoteEvent("getTaskTimeLeft")]
public void GetTaskTimeLeft(Player player, string victimName)
{
using var dbContext = new DatabaseContext();
{
var activeTaskTime = ReviveTasks.FirstOrDefault(t => t.MedicName == player.Name && t.Victim == victimName).TimeLeft;
player.TriggerEvent("setTaskTimeLeft", activeTaskTime);
}
}
public static void UpdateDutyMedics(int modifier)
{
dutyMedics = dutyMedics + modifier;

View File

@@ -18,6 +18,7 @@ namespace ReallifeGamemode.Server.Factions.Medic
public string Description { get; set; }
public string Caller { get; set; }
public DateTime Time { get; set; }
public int TimeLeft { get; set; }
public string MedicName { get; set; }
}

View File

@@ -24,7 +24,7 @@ namespace ReallifeGamemode.Server.Finance
public static (int, float, float) GetEconomyClass(Player client, int wage)
{
int bankAccount = client.GetUser().BankAccount.Balance;
float financialHelp = -(float)Math.Pow(1.0005, -(bankAccount + client.GetUser().Handmoney)) * -1000;
float financialHelp = -(float)Math.Pow(1.0001, -(bankAccount + client.GetUser().Handmoney)) * -1000;
float financialInterest = 1 - (float)Math.Pow(1.00006, -wage) * 1;
if (financialInterest >= 0.7)
financialInterest = 0.7f;

View File

@@ -102,7 +102,7 @@ namespace ReallifeGamemode.Server.Inventory
if (!player.HasAttachment("ammobox"))
{
player.PlayAnimation("anim@heists@box_carry@", "idle", 49);
//player.AddAttachment("ammobox", false);
player.AddAttachment("ammobox", false);
NAPI.Player.SetPlayerCurrentWeapon(player, WeaponHash.Unarmed);
}
}

View File

@@ -100,7 +100,6 @@ namespace ReallifeGamemode.Server.Job
}.AsReadOnly();
private readonly IReadOnlyCollection<Vector3> Skill2Route2 = new List<Vector3>//Bus_Skill_2_Route_2
{
new Vector3(1925.767333984375, 2614.566162109375, 46.16560363769531),
new Vector3(299.0667419433594, 2642.93798828125, 44.60177993774414),
new Vector3(1162.4556884765625, 1806.3663330078125, 74.3133773803711),
@@ -111,13 +110,26 @@ namespace ReallifeGamemode.Server.Job
}.AsReadOnly();
private readonly IReadOnlyCollection<Vector3> Skill2Route3 = new List<Vector3>//Bus_Skill_2_Route_3
{
new Vector3(-562.68, -2203.85, 5.5),
new Vector3(-1855.54,153.604,79.0297),
new Vector3(-1538.72,1375.19,124.3),
new Vector3(-1101.74,2668.48,17.7363),
new Vector3(1964.14,3718.04,31.2255),
new Vector3(2566.1,396.879,107.463),
new Vector3(254.405,-982.937,28.274),
new Vector3(-562.68, -2203.85, 4.5),
}.AsReadOnly();
private readonly IReadOnlyCollection<Vector3> Skill2Route4 = new List<Vector3>//Bus_Skill_2_Route_4
{
new Vector3(-1037.8,-2716.02,12.7963),
new Vector3(1662.69,4849.72,40.9165),
new Vector3(57.8575,3735.46,38.7301),
new Vector3(-1109.48,2681,17.8602),
new Vector3(-2536.35,2322.65,32.0599),
new Vector3(-3232.01,961.997,12.1515),
new Vector3(-3014.22,364.543,13.7242),
new Vector3(-1580.52,-652.24,28.5874),
new Vector3(-578.954,-2224.8,4.75774),
new Vector3(-562.68, -2203.85, 5.5),
}.AsReadOnly();
private readonly IReadOnlyCollection<Vector3> Skill3Route1 = new List<Vector3>//Bus_Skill_3_Route_1
{
@@ -159,8 +171,16 @@ namespace ReallifeGamemode.Server.Job
}.AsReadOnly();
private readonly IReadOnlyCollection<Vector3> Skill3Route3 = new List<Vector3>//Bus_Skill_3_Route_3
{
new Vector3(-562.68, -2203.85, 5.5),
new Vector3(-146.62071, -2178.8228, 9.194298),
new Vector3(14.580393, -1578.6385, 28.212185),
new Vector3(222.91612, -1098.8556, 28.227453),
new Vector3(246.44946, -648.45496, 38.420746),
new Vector3(102.181, -298.95276, 45.04399),
new Vector3(-104.91002, -606.26013, 35.06103),
new Vector3(-288.1007, -1204.5107, 23.403156),
new Vector3(-166.23526, -1574.4166, 34.152023),
new Vector3(-60.337997, -1976.121, 15.486664),
new Vector3(-599.1891, -2049.2695, 5.14637),
}.AsReadOnly();
private readonly IReadOnlyCollection<Vector3> Skill3Route4 = new List<Vector3>//Bus_Skill_3_Route_4
{
@@ -302,7 +322,7 @@ namespace ReallifeGamemode.Server.Job
if ((VehicleHash)veh.Model == VehicleHash.Coach)
{
Random rnd = new Random();
int rroute = rnd.Next(1, 3);
int rroute = rnd.Next(1, 5);
switch (rroute)
{
case 1:
@@ -340,7 +360,7 @@ namespace ReallifeGamemode.Server.Job
if ((VehicleHash)veh.Model == VehicleHash.Tourbus)
{
Random rnd = new Random();
int rroute = rnd.Next(1, 3);
int rroute = rnd.Next(1, 4);
switch (rroute)
{
case 1:

View File

@@ -19,6 +19,8 @@ namespace ReallifeGamemode.Server.Job
public override bool NeedVehicleToStart => false;
const int MAX_BAG = 40;
public RefuseCollectorJob()
{
JobStart += RefuseCollectorJobJobStart;
@@ -168,7 +170,7 @@ namespace ReallifeGamemode.Server.Job
if (data.getDataFromClient(player) == null) continue;
veh = data.vehicle;
JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1);
ChatService.SendMessage((Player)player, $"~y~Job: ~s~Du hast deinen Job (~o~{job.Name}~s~) gestartet.");
ChatService.SendMessage((Player)player, $"~y~[Job] ~s~Du hast deinen Job (~o~{job.Name}~s~) gestartet.");
player.TriggerEvent("SERVER:MuellmannStatusTrue");
player.TriggerEvent("SERVER:MuellmannBCSErstellen", JsonConvert.SerializeObject(vector3s.ToArray()), veh);
return;
@@ -179,7 +181,6 @@ namespace ReallifeGamemode.Server.Job
public void MuellmannJobBeenden(Player player)
{
JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1);
ChatService.SendMessage((Player)player, $"~y~Job: ~s~Du hast deinen Job (~o~{job.Name}~s~) beendet.");
player.TriggerEvent("SERVER:MuellmannStatusFalse");
player.TriggerEvent("SERVER:MuellmannBCSEntfernen");
@@ -189,11 +190,19 @@ namespace ReallifeGamemode.Server.Job
if (data.hasFreePlace())
{
if(data.vehicle != null)
data.vehicle.GetServerVehicle().Spawn(data.vehicle);
muellmanData.Remove(data);
//müllwagen respawnen
return;
}
if (player.HasAttachment("binbag"))
{
player.AddAttachment("binbag", true);
}
ChatService.SendMessage(data.getPartnerClient(player), $"~y~[Job] ~s~Dein Partner hat den Job beendet.");
data.removeClientFromData(player);
return;
}
@@ -208,7 +217,7 @@ namespace ReallifeGamemode.Server.Job
Player target = data.getPartnerClient(player);
if (target != null) target.TriggerEvent("MuellmannUpdateColshape", colshapeIndex);
player.TriggerEvent("renderTextOnScreen", "Wirf den Müllsack in den Müllwagen.");
//player.AddAttachment("binbag", false);
player.AddAttachment("binbag", false);
return;
}
}
@@ -220,95 +229,57 @@ namespace ReallifeGamemode.Server.Job
{
return;
}
using (var dbContext = new DatabaseContext())
using var dbContext = new DatabaseContext();
foreach (var data in muellmanData)
{
foreach (var data in muellmanData)
if (data.getDataFromClient(player) == null) continue;
Player target = data.getPartnerClient(player);
User user1 = player.GetUser(dbContext);
User user2 = target.GetUser(dbContext);
data.setTrashCount(data.getTrashCount() + 1);
player.SendNotification("Müllsack: " + data.getTrashCount() + " von " + MAX_BAG + ".");
if (target != null)
{
if (data.getDataFromClient(player) == null) continue;
Player target = data.getPartnerClient(player);
User user1 = player.GetUser(dbContext);
User user2 = target.GetUser(dbContext);
target.SendNotification("Müllsack: " + data.getTrashCount() + " von " + MAX_BAG + ".");
}
//user1 = player.GetUser(dbContext);
//user2 = target.GetUser(dbContext);
/*user1.trashcount += 1;
player.AddAttachment("binbag", true);
if (user1.trashcount == 20)
{
player.SendChatMessage("~y~Dies ist dein 20ter Müllsack.");
}
player.SendNotification("Müllsack: " + user1.trashcount + " von 20.");
if (data.getTrashCount() == MAX_BAG)
{
ChatService.SendMessage((Player)player, "~y~[Job] ~s~Der Müllwagen ist voll. Fahre nun zurück zur Recyclinganlage!");
if (target != null)
{
target.SendNotification("Müllsack: " + user2.trashcount + " von 20.");
user2.trashcount += 1;
if (user2.trashcount == 20)
{
target.SendChatMessage("~y~Dies ist dein 20ter Müllsack.");
}
}
dbContext.SaveChanges();
player.AddAttachment("binbag", true);
*/
if (player.GetUser(dbContext).trashcount >= 20)
{
ChatService.SendMessage((Player)player, "~y~Job: ~s~Der Müllwagen ist voll. Fahre nun zurück zur Recyclinganlage!");
if (target != null)
{
ChatService.SendMessage((Player)target, "~y~Job: ~s~Der Müllwagen ist voll! Er muss entleert werden.");
target.TriggerEvent("SERVER:MuellmannZuBase");
}
player.TriggerEvent("SERVER:MuellmannZuBase");
}
else
{
//user1 = player.GetUser(dbContext);
//user2 = target.GetUser(dbContext);
user1.trashcount += 1;
player.SendNotification("Müllsack: " + user1.trashcount + " von 20.");
if (target != null)
{
target.SendNotification("Müllsack: " + user2.trashcount + " von 20.");
user2.trashcount += 1;
}
dbContext.SaveChanges();
}
// player.AddAttachment("binbag", true);
if (player.GetUser(dbContext).trashcount >= 20)
{
ChatService.SendMessage((Player)player, "~y~Job: ~s~Der Müllwagen ist voll. Fahre nun zurück zur Recyclinganlage!");
if (target != null)
{
ChatService.SendMessage((Player)target, "~y~Job: ~s~Der Müllwagen ist voll! Er muss entleert werden.");
target.TriggerEvent("SERVER:MuellmannZuBase");
}
player.TriggerEvent("SERVER:MuellmannZuBase");
}
else
{
//user1 = player.GetUser(dbContext);
//user2 = target.GetUser(dbContext);
if (target != null)
{
user1.Wage += 25;
user2.Wage += 25;
}
else
{
user1.Wage += 50;
}
dbContext.SaveChanges();
ChatService.SendMessage((Player)target, "~y~[Job] ~s~Der Müllwagen ist voll! Er muss entleert werden.");
target.TriggerEvent("SERVER:MuellmannZuBase");
}
player.TriggerEvent("SERVER:MuellmannZuBase");
}
else if(data.getTrashCount() > MAX_BAG)
{
data.setTrashCount(MAX_BAG);
ChatService.ErrorMessage((Player)player, "Der Müllwagen ist schon voll.");
}
else
{
if (target != null)
{
user1.Wage += 25;
user2.Wage += 25;
}
else
{
user1.Wage += 50;
}
dbContext.SaveChanges();
}
return;
}
return;
}
[RemoteEvent("CLIENT:MuellmannBaseSack")]
@@ -321,26 +292,27 @@ namespace ReallifeGamemode.Server.Job
if (data.getDataFromClient(player) == null) continue;
Player target = data.getPartnerClient(player);
if (target != null) ChatService.SendMessage((Player)target, $"~y~Job: ~s~Fahrzeug wurde entleert. Säcke: {target.GetUser().trashcount}");
ChatService.SendMessage((Player)player, $"~y~Job: ~s~Fahrzeug wurde entleert. Säcke: {player.GetUser().trashcount}");
if (target != null) ChatService.SendMessage((Player)target, $"~y~[Job] ~s~Fahrzeug wurde entleert. Säcke: {data.getTrashCount()}");
ChatService.SendMessage((Player)player, $"~y~[Job] ~s~Fahrzeug wurde entleert. Säcke: {data.getTrashCount()}");
//bonus pro sack
using (var dbContext = new DatabaseContext())
{
User user1 = player.GetUser(dbContext);
User user2 = target.GetUser(dbContext);
int bonus = 5 * data.getTrashCount();
if (target != null)
{
user1.Wage += 250;
user2.Wage += 250;
user1.Wage += (int)(bonus / 2);
user2.Wage += (int)(bonus / 2);
}
else
{
user1.Wage += 500;
user1.Wage += bonus;
}
user1.trashcount -= user1.trashcount;
if (target != null) user2.trashcount -= user2.trashcount;
data.setTrashCount(0);
dbContext.SaveChanges();
}
@@ -353,38 +325,12 @@ namespace ReallifeGamemode.Server.Job
public void MuellmannOnPlayerDc(Player player)
{
foreach (var data in muellmanData)
{
if (data.getDataFromClient(player) == null) continue;
if (data.hasFreePlace())
{
muellmanData.Remove(data);
//müllwagen respawnen
return;
}
data.removeClientFromData(player);
return;
}
MuellmannJobBeenden(player);
}
public void MuellmannOnPlayerDeath(Player player)
{
foreach (var data in muellmanData)
{
if (data.getDataFromClient(player) == null) continue;
if (data.hasFreePlace())
{
muellmanData.Remove(data);
//müllwagen respawnen
return;
}
data.removeClientFromData(player);
return;
}
MuellmannJobBeenden(player);
}
[ServerEvent(Event.VehicleDeath)]
@@ -396,10 +342,13 @@ namespace ReallifeGamemode.Server.Job
{
if (data.vehicle == veh)
{
//müllfahrzeug respawnen
veh.GetServerVehicle().Spawn(veh);
List<Player> clients = data.getClientsFromData();
foreach (var c in clients) { RefuseCollectorJobJobStop(c); }
foreach (var c in clients)
{
MuellmannJobBeenden(c);
}
muellmanData.Remove(data);
return;
@@ -426,15 +375,15 @@ namespace ReallifeGamemode.Server.Job
}
CheckDataForDuplicatePlayer(player, data);
data.setClientToData(player);
//destroy veh
MuellmannJobStarten(player, vehicle);
target = data.getPartnerClient(player);
if (target == null)
return;
ChatService.SendMessage((Player)player, $"~y~Job: ~s~Dein Partner ist {target.Name}!");
ChatService.SendMessage((Player)target, $"~y~Job: ~s~Dein Partner ist {player.Name}!");
ChatService.SendMessage((Player)player, $"~y~[Job] ~s~Dein Partner ist {target.Name}!");
ChatService.SendMessage((Player)target, $"~y~[Job] ~s~Dein Partner ist {player.Name}!");
return;
}
}
@@ -450,8 +399,8 @@ namespace ReallifeGamemode.Server.Job
if (target == null)
return;
ChatService.SendMessage((Player)player, $"~y~Job: ~s~Dein Partner ist {target.Name}!");
ChatService.SendMessage((Player)target, $"~y~Job: ~s~Dein Partner ist {player.Name}!");
ChatService.SendMessage((Player)player, $"~y~[Job] ~s~Dein Partner ist {target.Name}!");
ChatService.SendMessage((Player)target, $"~y~[Job] ~s~Dein Partner ist {player.Name}!");
}
}

View File

@@ -123,9 +123,15 @@ namespace ReallifeGamemode.Server.Job
public static void UpdateFare()
{
foreach (var player in GetPlayerInJob())
{
User u = player.GetUser();
if(u == null)
{
continue;
}
if (u.JobId != 1) return;
if (!player.HasData("hasPassager")) { player.SetData<bool>("hasPassager", false); continue; }
int playerId = player.GetUser().Id;

View File

@@ -73,24 +73,28 @@ namespace ReallifeGamemode.Server.Managers
{
default:
player.SetSharedData("blipColor", 0);
player.SetSharedData("nameTagColor", 0);
break;
case 8:
player.SetSharedData("blipColor", 83);
player.SetSharedData("nameTagColor", 8);
break;
case 7:
player.SetSharedData("blipColor", 52);
player.SetSharedData("nameTagColor", 7);
break;
case 4:
player.SetSharedData("blipColor", 5);
player.SetSharedData("nameTagColor", 4);
break;
case 9:
player.SetSharedData("blipColor", 25);
player.SetSharedData("nameTagColor", 9);
break;
}
dbContext.SaveChanges();
}
}
@@ -284,6 +288,7 @@ namespace ReallifeGamemode.Server.Managers
ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Fraktion geworfen.");
ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Fraktion geworfen.");
target.SetSharedData("blipColor", 0);
player.SetSharedData("nameTagColor", 0);
dbContext.SaveChanges();
}
}
@@ -628,7 +633,7 @@ namespace ReallifeGamemode.Server.Managers
}
else
{
if (amount > -9 && amount < 9)
if (amount > -13 && amount < 13)
{
using (var dbContext = new DatabaseContext())
{
@@ -638,6 +643,7 @@ namespace ReallifeGamemode.Server.Managers
}
player.SendNotification($"~w~Du hast ~y~{targetname} ~b~{amount} ~w~Strafpunkte gegeben. Grund: ~g~{reason}~w~.");
target.SendNotification($"~b~{player.GetUser().FactionRank.RankName} | {playername} ~w~hat dir ~y~{amount} ~w~Strafpunkte gegeben.", true);
ChatService.BroadcastFaction("!{#8181E9}HQ: " + targetname + " hat von " + playername + " " + amount + " Strafpunkt(e) erhalten. Gesamt: " + target.GetUser().Points, new List<int>() { 1, 3 });
if (target.GetUser().Points < 0)
{
using (var dbContext = new DatabaseContext())
@@ -647,10 +653,11 @@ namespace ReallifeGamemode.Server.Managers
dbContext.SaveChanges();
}
}
else if (target.GetUser().Points >= 8)
else if (target.GetUser().Points >= 12)
{
target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Du hast nun ~r~8/8 ~x~Strafpunkten.", true);
target.SendNotification($"~w~Dir wird ~r~Auto- ~w~und ~r~Motorradführerschein ~w~entzogen.", true);
target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Du hast nun ~r~12/12 ~x~Strafpunkten.", true);
target.SendNotification($"~w~Dir wird ~r~Auto- ~w~und ~r~Motorradführerschein ~w~entzogen.", true); //FlashNotif
ChatService.HQMessage(targetname + "hat von" + playername + " " + amount + " Strafpunkt erhalten(e). Gesamt: " + target.GetUser().Points);
foreach (var copPlayer in NAPI.Pools.GetAllPlayers())
{
User copUser = copPlayer.GetUser();
@@ -663,7 +670,7 @@ namespace ReallifeGamemode.Server.Managers
{
if (copUser.GetData<bool>("duty") == true)
{
ChatService.SendMessage(copPlayer, "!{#8181E9}HQ: " + targetname + " besitzt nun keinen Führerschein mehr.");
ChatService.HQMessage(targetname + " besitzt nun keinen Führerschein mehr.");
}
}
}
@@ -678,12 +685,12 @@ namespace ReallifeGamemode.Server.Managers
}
else
{
target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Du hast nun ~y~{target.GetUser().Points}/8 ~x~Strafpunkten.", true);
target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Du hast nun ~y~{target.GetUser().Points}/12 ~x~Strafpunkten.", true);
}
}
else
{
player.SendNotification("~r~Du kannst nur zwischen 1 und 8 Punkte verteilen!");
player.SendNotification("~r~Du kannst nur zwischen 1 und 12 Punkte verteilen!");
}
}
}
@@ -796,14 +803,15 @@ namespace ReallifeGamemode.Server.Managers
if (!player.IsLoggedIn()) return;
List<Player> players = NAPI.Pools.GetAllPlayers();
var listPlayers = players.Select(p => new
var listPlayers = players.Where(p => p.GetUser().Wanteds > 0)
.Select(p => new
{
Id = p.Handle.Value,
p.Name,
wanted = p.GetUser().Wanteds,
}) ;
});
if(listPlayers.Count() > 0)
if (listPlayers.Count() > 0)
player.TriggerEvent("showWantedlist", JsonConvert.SerializeObject(listPlayers));
else
player.SendNotification("~r~[Fehler] ~w~Es gibt derzeitig keine Verbrecher!");

View File

@@ -560,6 +560,7 @@ namespace ReallifeGamemode.Server.Managers
Vector3 textPos = dropPosition;
if (iItem is IWeaponDealItem obj)
{
player.ClearAttachments();
dropPosition.Z -= 1.05f;
grndObject = NAPI.Object.CreateObject(3666746839, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 255, 0);
}

View File

@@ -348,7 +348,7 @@ public class BehindVehiclePoint
if (!player.HasAttachment("ammobox"))
{
player.PlayAnimation("anim@heists@box_carry@", "idle", 49);
//player.AddAttachment("ammobox", false);
player.AddAttachment("ammobox", false);
NAPI.Player.SetPlayerCurrentWeapon(player, WeaponHash.Unarmed);
}
}

View File

@@ -35,6 +35,7 @@ namespace ReallifeGamemode.Server.Report
if (listReports.Count == 0)
{
ChatService.ErrorMessage(client, "Im Moment gibt es keine Tickets.");
return;
}
User user = client.GetUser();

View File

@@ -58,17 +58,14 @@ namespace ReallifeGamemode.Server.Services
{
User user = c.GetUser();
Faction f = user?.Faction;
if (f != null)
{
if (factions.Find(fT => fT.Id == f.Id) != null)
{
ChatService.SendMessage(c, message);
}
}
/*else if(user.IsAdmin(AdminLevel.ADMIN) && toAdmins)
if (f != null && factions.Find(fT => fT.Id == f.Id) != null)
{
ChatService.SendMessage(c, message);
}*/
}
else if (user.IsAdmin(AdminLevel.ADMIN) && toAdmins)
{
ChatService.SendMessage(c, message);
}
}
}

View File

@@ -97,7 +97,6 @@ public static class AttachmentSync
}
}
entity.ResetSharedData("attachmentsData");
entity.SetData("Attachments", new List<uint>());
}
@@ -141,15 +140,18 @@ public class AttachmentSyncExample : Script
public void attachment(Player player)
{
Vehicle veh = player.Vehicle;
if (!veh.HasAttachment("weapondeal"))
if (!player.HasAttachment("ammobox"))
{
veh.AddAttachment("weapondeal", false);
player.AddAttachment("ammobox", false);
player.PlayAnimation("anim@heists@box_carry@", "idle", 49);
//veh.AddAttachment("weapondeal1", false);
//veh.AddAttachment("weapondeal2", false);
}
else
{
veh.ClearAttachments();
player.StopAnimation();
player.ClearAttachments();
}
}

View File

@@ -1,5 +1,6 @@
using System.Timers;
using GTANetworkAPI;
using ReallifeGamemode.Server.Factions.Medic;
using ReallifeGamemode.Server.Finance;
using ReallifeGamemode.Server.Job;
using ReallifeGamemode.Server.Managers;
@@ -11,6 +12,7 @@ namespace ReallifeGamemode.Server.Util
public class ThreadTimers
{
private static Timer timer500 = new Timer(500); //0.5 seconds timer
private static Timer timer1000 = new Timer(1000); //1 seconds timer
private static Timer timer2500 = new Timer(2500); //2.5 seconds timer
private static Timer timer10000 = new Timer(10000); // 10 second timer
private static Timer timer60000 = new Timer(60000); //60 seconds timer
@@ -20,6 +22,9 @@ namespace ReallifeGamemode.Server.Util
timer500.Start();
timer500.Elapsed += Timer500_Elapsed;
timer1000.Start();
timer1000.Elapsed += Timer1000_Elapsed;
timer2500.Start();
timer2500.Elapsed += Timer2500_Elapsed;
@@ -39,6 +44,14 @@ namespace ReallifeGamemode.Server.Util
});
}
private static void Timer1000_Elapsed(object sender, ElapsedEventArgs e)
{
NAPI.Task.Run(() =>
{
Medic.UpdateTaskTimeLeft();
});
}
private static void Timer60000_Elapsed(object sender, ElapsedEventArgs e)
{
NAPI.Task.Run(() =>

View File

@@ -14,7 +14,7 @@ namespace ReallifeGamemode.Server.WeaponDeal
{
private const int WEAPON_AMOUNT_GANG = 2;
private const int WEAPON_AMOUNT_COP = 8;
private const int WEAPON_AMOUNT_COP_STUNGUN = 2;
private const int WEAPON_AMOUNT_COP_STUNGUN = 12;
public static bool checkWeaponDbyVehicle(Vehicle vehicle)
{
if (!vehicle.HasData("WeaponDealLoad") || vehicle.GetData<bool>("WeaponDealLoad") == false)
@@ -185,6 +185,9 @@ namespace ReallifeGamemode.Server.WeaponDeal
Vehicle fVeh = VehicleManager.GetVehicleFromServerVehicle(factionVehicle);
fVeh.SetData("weaponDeal", false);
fVeh.SetData("WeaponDealLoad", true);
fVeh.AddAttachment("weapondeal", false);
fVeh.AddAttachment("weapondeal1", false);
fVeh.AddAttachment("weapondeal2", false);
InventoryManager.RemoveAllItemsfromVehicleInventory(fVeh);
int oMembers = NAPI.Pools.GetAllPlayers().Where(p => p.IsLoggedIn() && p.GetUser(context).FactionId == user.FactionId).Count();

3
package-lock.json generated Normal file
View File

@@ -0,0 +1,3 @@
{
"lockfileVersion": 1
}