Merging into feature/inventory-system
This commit is contained in:
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.rpf filter=lfs diff=lfs merge=lfs -text
|
||||
@@ -15,7 +15,6 @@ var inventoryWeight;
|
||||
var items = [[]];
|
||||
|
||||
var grid = [];
|
||||
|
||||
grid[0] = [0.3375, 0.305]
|
||||
grid[1] = [0.4195, 0.305]
|
||||
grid[2] = [0.5015, 0.305]
|
||||
@@ -65,20 +64,6 @@ mp.events.add("showInventory", (invWeight, itemArr) => {
|
||||
mp.events.add("render", () => {
|
||||
if (show === true) {
|
||||
var pos = mp.gui.cursor.position;
|
||||
//DEBUG 2D-SCREEN-KOORDINATEN
|
||||
//mp.game.graphics.drawText("~r~X: " + pos[0] + " ~g~Y: " + pos[1] + "~s~ ---~b~" + parseFloat(pos[0] / screenX).toFixed(3) + " ~y~" + parseFloat(pos[1] / screenY).toFixed(3) + " " + mouseLDown, [pos[0] / screenX, (pos[1] / screenY) - 0.02], {
|
||||
// font: 0,
|
||||
// color: [255, 255, 255, 185],
|
||||
// scale: [0.3, 0.3],
|
||||
// outline: true,
|
||||
//});
|
||||
|
||||
//mp.game.graphics.drawText("~r~drag: " + dragItem + "~s~... ~b~hover:" + hoverItem + "~y~....FREESLOT: " + isMouseOverFreeSlot(pos[0], pos[1]) + "..." + isItemOverSameItem(pos[0], pos[1]), [0.5, 0.02], {
|
||||
// font: 0,
|
||||
// color: [255, 255, 255, 185],
|
||||
// scale: [0.3, 0.3],
|
||||
// outline: true,
|
||||
//});
|
||||
|
||||
mp.game.graphics.set2dLayer(1);
|
||||
//INVENTARHINTERGRUND
|
||||
@@ -339,10 +324,4 @@ mp.events.add('click', (x, y, upOrDown, leftOrRight, relativeX, relativeY, world
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//items[userItems.IndexOf(item)][0] = iItem.Name;
|
||||
//items[userItems.IndexOf(item)][1] = iItem.Description;
|
||||
//items[userItems.IndexOf(item)][2] = iItem.Gewicht.ToString();
|
||||
//items[userItems.IndexOf(item)][3] = item.Amount.ToString();
|
||||
//items[userItems.IndexOf(item)][4] = item.Slot.ToString();
|
||||
});
|
||||
@@ -49,14 +49,7 @@ mp.events.add("respawnDeathPlayer", () => {
|
||||
});
|
||||
|
||||
mp.events.add("updateDutyMedics", (count) => {
|
||||
if (count === true)
|
||||
{
|
||||
dutyMedics++;
|
||||
}
|
||||
else
|
||||
{
|
||||
dutyMedics--;
|
||||
}
|
||||
dutyMedics = count;
|
||||
});
|
||||
|
||||
|
||||
@@ -68,7 +61,13 @@ mp.events.add("render", () => {
|
||||
|
||||
var medicString;
|
||||
if (dutyMedics > 0) {
|
||||
medicString = "Derzeit sind ~g~" + dutyMedics + " Medics ~s~im Dienst ~c~und versuchen dich wiederzubeleben...";
|
||||
medicString = "Derzeit ";
|
||||
if (dutyMedics === 1) {
|
||||
medicString += "ist ~g~" + dutyMedics + " Medic";
|
||||
} else {
|
||||
medicString = "sind ~g~" + dutyMedics + " Medics";
|
||||
}
|
||||
medicString += " ~s~im Dienst ~c~und versuchen dich wiederzubeleben...";
|
||||
} else {
|
||||
medicString = "Derzeit sind ~r~keine Medics ~s~im Dienst.";
|
||||
}
|
||||
@@ -76,6 +75,7 @@ mp.events.add("render", () => {
|
||||
deathSeconds = respawnTime - Math.floor(currentDate.getTime() / 1000);
|
||||
var alpha = fade + Math.floor(currentDate.getTime() / 1000 - deathDate.getTime() / 1000);
|
||||
if (deathSeconds >= 0) {
|
||||
mp.game.graphics.set2dLayer(2);
|
||||
mp.game.graphics.drawSprite("Mptattoos", "clearout", 0.625, 0.52, 0.1, 0.1, 0, 255, 255, 255, 236);
|
||||
mp.game.graphics.drawText("Respawn in: ~y~" + deathSeconds, [0.5, 0.5],
|
||||
{
|
||||
@@ -91,6 +91,7 @@ mp.events.add("render", () => {
|
||||
scale: [0.4, 0.4],
|
||||
outline: true
|
||||
});
|
||||
mp.game.graphics.set2dLayer(1);
|
||||
mp.game.graphics.drawRect(0.5, 0.5, 1, 1, 0, 0, 0, alpha);
|
||||
|
||||
} else {
|
||||
|
||||
@@ -69,7 +69,7 @@ mp.events.add("toggleUi", (show) => {
|
||||
//}
|
||||
|
||||
mp.events.add("updateMoney", (money) => {
|
||||
playerMoney = money;
|
||||
playerMoney = money.toLocaleString("de-DE", { minimumFractionDigits: 0 });
|
||||
});
|
||||
|
||||
mp.events.add("render", () => {
|
||||
|
||||
124
Client/Player/freecam.js
Normal file
124
Client/Player/freecam.js
Normal file
@@ -0,0 +1,124 @@
|
||||
const controlsIds = {
|
||||
F5: 327,
|
||||
W: 32, // 232
|
||||
S: 33, // 31, 219, 233, 268, 269
|
||||
A: 34, // 234
|
||||
D: 35, // 30, 218, 235, 266, 267
|
||||
Space: 321,
|
||||
LCtrl: 326,
|
||||
};
|
||||
|
||||
global.fly = {
|
||||
flying: false, f: 2.0, w: 2.0, h: 2.0, point_distance: 1000,
|
||||
};
|
||||
global.gameplayCam = mp.cameras.new('gameplay');
|
||||
|
||||
mp.game.graphics.notify('~r~Fly script loaded!');
|
||||
mp.game.graphics.notify('~r~F5~w~ - enable/disable\n~r~F5+Space~w~ - disable without warping to ground\n~r~W/A/S/D/Space/LCtrl~w~ - move');
|
||||
mp.game.graphics.notify('~r~/savecam~w~ - save Camera position.');
|
||||
|
||||
let direction = null;
|
||||
let coords = null;
|
||||
|
||||
function pointingAt(distance) {
|
||||
const farAway = new mp.Vector3((direction.x * distance) + (coords.x), (direction.y * distance) + (coords.y), (direction.z * distance) + (coords.z));
|
||||
|
||||
const result = mp.raycasting.testPointToPoint(coords, farAway, [1, 16]);
|
||||
if (result === undefined) {
|
||||
return 'undefined';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
mp.events.add('render', () => {
|
||||
const controls = mp.game.controls;
|
||||
const fly = global.fly;
|
||||
direction = global.gameplayCam.getDirection();
|
||||
coords = global.gameplayCam.getCoord();
|
||||
|
||||
mp.game.graphics.drawText(`Coords: ${JSON.stringify(coords)}`, [0.5, 0.005], {
|
||||
font: 0,
|
||||
color: [255, 255, 255, 185],
|
||||
scale: [0.3, 0.3],
|
||||
outline: true,
|
||||
});
|
||||
mp.game.graphics.drawText(`pointAtCoord: ${JSON.stringify(pointingAt(fly.point_distance).position)}`, [0.5, 0.025], {
|
||||
font: 0,
|
||||
color: [255, 255, 255, 185],
|
||||
scale: [0.3, 0.3],
|
||||
outline: true,
|
||||
});
|
||||
|
||||
if (controls.isControlJustPressed(0, controlsIds.F5)) {
|
||||
fly.flying = !fly.flying;
|
||||
|
||||
const player = mp.players.local;
|
||||
|
||||
player.setInvincible(fly.flying);
|
||||
player.freezePosition(fly.flying);
|
||||
player.setAlpha(fly.flying ? 0 : 255);
|
||||
|
||||
if (!fly.flying && !controls.isControlPressed(0, controlsIds.Space)) {
|
||||
const position = mp.players.local.position;
|
||||
position.z = mp.game.gameplay.getGroundZFor3dCoord(position.x, position.y, position.z, 0.0, false);
|
||||
mp.players.local.setCoordsNoOffset(position.x, position.y, position.z, false, false, false);
|
||||
}
|
||||
|
||||
mp.game.graphics.notify(fly.flying ? 'Fly: ~g~Enabled' : 'Fly: ~r~Disabled');
|
||||
} else if (fly.flying) {
|
||||
let updated = false;
|
||||
const position = mp.players.local.position;
|
||||
|
||||
if (controls.isControlPressed(0, controlsIds.W)) {
|
||||
if (fly.f < 8.0) { fly.f *= 1.025; }
|
||||
|
||||
position.x += direction.x * fly.f;
|
||||
position.y += direction.y * fly.f;
|
||||
position.z += direction.z * fly.f;
|
||||
updated = true;
|
||||
} else if (controls.isControlPressed(0, controlsIds.S)) {
|
||||
if (fly.f < 8.0) { fly.f *= 1.025; }
|
||||
|
||||
position.x -= direction.x * fly.f;
|
||||
position.y -= direction.y * fly.f;
|
||||
position.z -= direction.z * fly.f;
|
||||
updated = true;
|
||||
} else {
|
||||
fly.f = 2.0;
|
||||
}
|
||||
|
||||
if (controls.isControlPressed(0, controlsIds.A)) {
|
||||
if (fly.l < 8.0) { fly.l *= 1.025; }
|
||||
|
||||
position.x += (-direction.y) * fly.l;
|
||||
position.y += direction.x * fly.l;
|
||||
updated = true;
|
||||
} else if (controls.isControlPressed(0, controlsIds.D)) {
|
||||
if (fly.l < 8.0) { fly.l *= 1.05; }
|
||||
|
||||
position.x -= (-direction.y) * fly.l;
|
||||
position.y -= direction.x * fly.l;
|
||||
updated = true;
|
||||
} else {
|
||||
fly.l = 2.0;
|
||||
}
|
||||
|
||||
if (controls.isControlPressed(0, controlsIds.Space)) {
|
||||
if (fly.h < 8.0) { fly.h *= 1.025; }
|
||||
|
||||
position.z += fly.h;
|
||||
updated = true;
|
||||
} else if (controls.isControlPressed(0, controlsIds.LCtrl)) {
|
||||
if (fly.h < 8.0) { fly.h *= 1.05; }
|
||||
|
||||
position.z -= fly.h;
|
||||
updated = true;
|
||||
} else {
|
||||
fly.h = 2.0;
|
||||
}
|
||||
|
||||
if (updated) {
|
||||
mp.players.local.setCoordsNoOffset(position.x, position.y, position.z, false, false, false);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -6,28 +6,36 @@
|
||||
|
||||
var keyBound = false;
|
||||
|
||||
var carModTypes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 22, 25, 27, 28, 30, 33, 34, 35, 38, 46, 48];
|
||||
var carModTypes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 22, 25, 27, 28, 33, 34, 35, 38, 46, 48];
|
||||
|
||||
var carModSlotName = [
|
||||
{ Slot: 0, Name: "Spoiler" }, // 0
|
||||
{ Slot: 1, Name: "Frontstoßstange"}, // 1
|
||||
{ Slot: 2, Name: "Heckstoßstange"}, // 2
|
||||
{ Slot: 3, Name: "Seitenschweller"}, // 3
|
||||
{ Slot: 4, Name: "Auspuff"}, // 4
|
||||
{ Slot: 5, Name: "Rahmen"}, // 5
|
||||
{ Slot: 6, Name: "Kühlergrill"}, // 6
|
||||
{ Slot: 7, Name: "Motorhaube"}, // 7
|
||||
{ Slot: 8, Name: "Linker Kotflügel"}, // 8
|
||||
{ Slot: 9, Name: "Rechter Kotflügel"}, // 9
|
||||
{ Slot: 10, Name: "Dach"}, // 10
|
||||
{ Slot: 11, Name: "Motor" }, // 11
|
||||
{ Slot: 12, Name: "Bremsen"}, // 12
|
||||
{ Slot: 13, Name: "Getriebe"}, // 13
|
||||
{ Slot: 14, Name: "Hupe"}, // 14
|
||||
{ Slot: 15, Name: "Federung"}, // 15
|
||||
{ Slot: 18, Name: "Turbo"}, // 18
|
||||
{ Slot: 22, Name: "Licht"}, // 22
|
||||
{ Slot: 23, Name: "Reifen"} // 23
|
||||
{ Slot: 0, Name: "Spoiler" },
|
||||
{ Slot: 1, Name: "Frontstoßstange"},
|
||||
{ Slot: 2, Name: "Heckstoßstange"},
|
||||
{ Slot: 3, Name: "Seitenschweller"},
|
||||
{ Slot: 4, Name: "Auspuff"},
|
||||
{ Slot: 5, Name: "Rahmen"},
|
||||
{ Slot: 6, Name: "Kühlergrill"},
|
||||
{ Slot: 7, Name: "Motorhaube"},
|
||||
{ Slot: 8, Name: "Kotflügel"},
|
||||
{ Slot: 9, Name: "Rechter Kotflügel"},
|
||||
{ Slot: 10, Name: "Dach"},
|
||||
{ Slot: 11, Name: "Motor" },
|
||||
{ Slot: 12, Name: "Bremsen"},
|
||||
{ Slot: 13, Name: "Getriebe"},
|
||||
{ Slot: 14, Name: "Hupe"},
|
||||
{ Slot: 15, Name: "Federung"},
|
||||
{ Slot: 18, Name: "Turbo"},
|
||||
{ Slot: 22, Name: "Licht"},
|
||||
{ Slot: 23, Name: "Reifen" },
|
||||
{ Slot: 25, Name: "Nummernschildhalter" },
|
||||
{ Slot: 27, Name: "Innenausstatung" },
|
||||
{ Slot: 28, Name: "Wackelkopf" },
|
||||
{ Slot: 33, Name: "Lenkrad" },
|
||||
{ Slot: 34, Name: "Schalthebel" },
|
||||
{ Slot: 35, Name: "Schild" },
|
||||
{ Slot: 38, Name: "Hydraulik" },
|
||||
{ Slot: 48, Name: "Design" }
|
||||
];
|
||||
|
||||
var customPartNames = [
|
||||
@@ -40,15 +48,6 @@ var customPartNames = [
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
Model: 159274291,
|
||||
Names: [
|
||||
{
|
||||
Slot: 8,
|
||||
Name: "Kotflügel"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
Model: 223240013,
|
||||
Names: [
|
||||
@@ -66,6 +65,27 @@ var customPartNames = [
|
||||
Name: "Stoßdämpfer"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
Model: 3308022675,
|
||||
Names: [
|
||||
{
|
||||
Slot: 9,
|
||||
Name: "Kotflügel"
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
var doorOpeners = [
|
||||
{
|
||||
Model: 3308022675,
|
||||
Doors: [
|
||||
{
|
||||
Slot: 5,
|
||||
Door: 4
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@@ -74,16 +94,12 @@ var bikeModTypes = [];
|
||||
const NativeUI = require("nativeui");
|
||||
const Menu = NativeUI.Menu;
|
||||
const UIMenuItem = NativeUI.UIMenuItem;
|
||||
const UIMenuListItem = NativeUI.UIMenuListItem;
|
||||
const UIMenuCheckboxItem = NativeUI.UIMenuCheckboxItem;
|
||||
const UIMenuSliderItem = NativeUI.UIMenuSliderItem;
|
||||
const BadgeStyle = NativeUI.BadgeStyle;
|
||||
const Point = NativeUI.Point;
|
||||
const ItemsCollection = NativeUI.ItemsCollection;
|
||||
const Color = NativeUI.Color;
|
||||
const ListItem = NativeUI.ListItem;
|
||||
|
||||
var mainMenu;
|
||||
var modMenu;
|
||||
var closeMenu = false;
|
||||
|
||||
mp.events.add('showTuningInfo', () => {
|
||||
mp.game.ui.setTextComponentFormat('STRING');
|
||||
@@ -99,7 +115,13 @@ mp.events.add('hideTuningInfo', (unbind) => {
|
||||
mp.gui.chat.show(true);
|
||||
|
||||
if (typeof mainMenu !== "undefined" && unbind) {
|
||||
mainMenu.Visible = false;
|
||||
mainMenu.Close();
|
||||
globalData.InTuning = false;
|
||||
}
|
||||
|
||||
if (typeof modMenu !== "undefined" && modMenu.Visible && unbind) {
|
||||
closeMenu = true;
|
||||
modMenu.Close();
|
||||
globalData.InTuning = false;
|
||||
}
|
||||
|
||||
@@ -124,9 +146,40 @@ mp.events.add("showTuningMenu", () => {
|
||||
return;
|
||||
}
|
||||
|
||||
if (typeof modMenu !== "undefined" && modMenu.Visible) {
|
||||
return;
|
||||
}
|
||||
|
||||
globalData.InTuning = true;
|
||||
|
||||
mainMenu = new Menu("Fahrzeugwerkstatt", "Modifiziere dein Fahrzeug", new Point(50, 50));
|
||||
var carName = mp.game.ui.getLabelText(mp.game.vehicle.getDisplayNameFromVehicleModel(localVehicle.model));
|
||||
|
||||
mainMenu = new Menu("Fahrzeugwerkstatt", carName, new Point(50, 50));
|
||||
|
||||
if (localVehicle.getBodyHealth() !== 1000) {
|
||||
|
||||
var repairItem = new UIMenuItem("Fahrzeug reparieren");
|
||||
mainMenu.AddItem(repairItem);
|
||||
|
||||
mainMenu.ItemSelect.on((selectedItem, index) => {
|
||||
if (selectedItem === repairItem) {
|
||||
mp.events.callRemote("repairVehicle");
|
||||
mainMenu.Close();
|
||||
setTimeout(() => {
|
||||
mp.events.call("showTuningMenu");
|
||||
}, 500);
|
||||
}
|
||||
});
|
||||
|
||||
mainMenu.MenuClose.on(() => {
|
||||
globalData.InTuning = false;
|
||||
mp.events.call("hideTuningInfo", false);
|
||||
});
|
||||
|
||||
mainMenu.Open();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
carModTypes.forEach((modType) => {
|
||||
if (localVehicle.getModSlotName(modType) !== "undefined") {
|
||||
@@ -145,7 +198,7 @@ mp.events.add("showTuningMenu", () => {
|
||||
}
|
||||
});
|
||||
|
||||
mainMenu.Visible = true;
|
||||
mainMenu.Open();
|
||||
|
||||
mainMenu.ItemSelect.on((item) => {
|
||||
var modSlot = getSlotId(item.Text);
|
||||
@@ -154,12 +207,21 @@ mp.events.add("showTuningMenu", () => {
|
||||
modSlot = parseInt(restStr);
|
||||
}
|
||||
|
||||
if (modSlot === 38) {
|
||||
localVehicle.setDoorOpen(5, false, false);
|
||||
}
|
||||
|
||||
var door = getDoor(localVehicle.model, modSlot);
|
||||
if (door !== undefined) {
|
||||
localVehicle.setDoorOpen(door, false, false);
|
||||
}
|
||||
|
||||
var currentMod = localVehicle.getMod(modSlot);
|
||||
var currentModItem;
|
||||
|
||||
var modNum = localVehicle.getNumMods(modSlot);
|
||||
|
||||
var modMenu = new Menu(item.Text, "Änderung: " + item.Text, new Point(50, 50));
|
||||
modMenu = new Menu(item.Text, "Änderung: " + item.Text, new Point(50, 50));
|
||||
|
||||
for (var i = -1; i < modNum; i++) {
|
||||
var modItem;
|
||||
@@ -167,9 +229,8 @@ mp.events.add("showTuningMenu", () => {
|
||||
if (i === -1) {
|
||||
modItem = new UIMenuItem("Serie", "");
|
||||
} else {
|
||||
var modName = localVehicle.getModTextLabel(modSlot, i);
|
||||
var realModName = mp.game.ui.getLabelText(modName);
|
||||
modItem = new UIMenuItem(realModName, "");
|
||||
var modName = getModName(localVehicle, modSlot, i);
|
||||
modItem = new UIMenuItem(modName, "");
|
||||
}
|
||||
|
||||
if (i === currentMod) {
|
||||
@@ -200,7 +261,21 @@ mp.events.add("showTuningMenu", () => {
|
||||
});
|
||||
|
||||
modMenu.MenuClose.on(() => {
|
||||
if (modSlot === 38) {
|
||||
localVehicle.setDoorShut(5, false);
|
||||
}
|
||||
|
||||
if (door !== undefined) {
|
||||
localVehicle.setDoorShut(door, false);
|
||||
}
|
||||
|
||||
localVehicle.setMod(modSlot, currentMod);
|
||||
|
||||
if (closeMenu) {
|
||||
closeMenu = false;
|
||||
return;
|
||||
}
|
||||
|
||||
mainMenu.Visible = true;
|
||||
modMenu.Visible = false;
|
||||
});
|
||||
@@ -277,4 +352,81 @@ function getCustomId(model, name) {
|
||||
});
|
||||
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
function getDoor(model, slot) {
|
||||
var toReturn = undefined;
|
||||
|
||||
doorOpeners.forEach((cpn) => {
|
||||
if (cpn.Model === model) {
|
||||
cpn.Doors.forEach((door) => {
|
||||
if (door.Slot === slot) toReturn = door.Door;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
function getModName(vehicle, slot, mod) {
|
||||
var modName = vehicle.getModTextLabel(slot, mod);
|
||||
var realModName = mp.game.ui.getLabelText(modName);
|
||||
|
||||
if (slot === 11) {
|
||||
switch (mod) {
|
||||
case 0:
|
||||
realModName = "EMS Verbesserung 1";
|
||||
break;
|
||||
case 1:
|
||||
realModName = "EMS Verbesserung 2";
|
||||
break;
|
||||
case 2:
|
||||
realModName = "EMS Verbesserung 3";
|
||||
break;
|
||||
case 3:
|
||||
realModName = "EMS Verbesserung 4";
|
||||
break;
|
||||
}
|
||||
} else if (slot === 12) {
|
||||
switch (mod) {
|
||||
case 0:
|
||||
realModName = "Straßenbremsen";
|
||||
break;
|
||||
case 1:
|
||||
realModName = "Sportbremsen";
|
||||
break;
|
||||
case 2:
|
||||
realModName = "Rennbremsen";
|
||||
break;
|
||||
}
|
||||
} else if (slot === 13) {
|
||||
switch (mod) {
|
||||
case 0:
|
||||
realModName = "Straßengetriebe";
|
||||
break;
|
||||
case 1:
|
||||
realModName = "Sportgetriebe";
|
||||
break;
|
||||
case 2:
|
||||
realModName = "Renngetriebe";
|
||||
break;
|
||||
}
|
||||
} else if (slot === 15) {
|
||||
switch (mod) {
|
||||
case 0:
|
||||
realModName = "Tiefere Federung";
|
||||
break;
|
||||
case 1:
|
||||
realModName = "Straßenfederung";
|
||||
break;
|
||||
case 2:
|
||||
realModName = "Sportfederung";
|
||||
break;
|
||||
case 3:
|
||||
realModName = "Rennfederung";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return realModName;
|
||||
}
|
||||
4
Client/Tuning/sync.js
Normal file
4
Client/Tuning/sync.js
Normal file
@@ -0,0 +1,4 @@
|
||||
mp.events.add('entityStreamIn', (entity) => {
|
||||
mp.gui.chat.push("streamed in:");
|
||||
mp.gui.chat.push(entity.Model);
|
||||
});
|
||||
3
Client/dlcpacks/itemimages/dlc.rpf
Normal file
3
Client/dlcpacks/itemimages/dlc.rpf
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:dba019dfe6643a9825df882fe92ac77605a85feffcff226d70ce5351f12b8180
|
||||
size 24064
|
||||
3
Client/dlcpacks/map_improvement/dlc.rpf
Normal file
3
Client/dlcpacks/map_improvement/dlc.rpf
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4583d08eb98355d8640aac132b305e16504c9886fbd319aa44f10c3b7b099987
|
||||
size 13824
|
||||
3
Client/dlcpacks/polamggtr/dlc.rpf
Normal file
3
Client/dlcpacks/polamggtr/dlc.rpf
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2b0c2b1815e1add21f0cae50c575fe2232dc5e875321462bd092a5e0957303e9
|
||||
size 41567232
|
||||
@@ -9,6 +9,8 @@ let globalData = {
|
||||
HideGui: false
|
||||
};
|
||||
|
||||
mp.game.gameplay.enableMpDlcMaps(true);
|
||||
|
||||
require('./CharCreator/index.js');
|
||||
|
||||
require('./FactionManagement/main.js');
|
||||
@@ -25,11 +27,14 @@ require('./Login/main.js');
|
||||
|
||||
require('./Player/dutycloth.js');
|
||||
require('./Player/keys.js');
|
||||
require('./Player/quit.js');
|
||||
require('./Player/freecam.js');
|
||||
|
||||
require('./Save/main.js');
|
||||
|
||||
require('./Speedometer/index.js');
|
||||
|
||||
require('./Tuning/main.js');
|
||||
require('./Tuning/sync.js');
|
||||
|
||||
require('./Business/main.js');
|
||||
|
||||
4
Main.cs
4
Main.cs
@@ -37,6 +37,10 @@ namespace reallife_gamemode
|
||||
|
||||
InventoryManager.LoadItems();
|
||||
TuningManager.AddTuningGarage(new Vector3(-341, -134, 38.5));
|
||||
TuningManager.AddTuningGarage(new Vector3(732, -1088, 21));
|
||||
TuningManager.AddTuningGarage(new Vector3(-1155, -2006, 12));
|
||||
TimeManager.StartTimeManager();
|
||||
|
||||
DatabaseHelper.InitDatabaseFirstTime();
|
||||
FactionHelper.CheckFactionBankAccounts();
|
||||
BusinessManager.LoadBusinesses();
|
||||
|
||||
@@ -94,5 +94,8 @@ namespace reallife_gamemode.Model
|
||||
// Server Vehicles
|
||||
public DbSet<Server.Entities.ServerVehicle> ServerVehicles { get; set; }
|
||||
public DbSet<Server.Entities.VehicleMod> VehicleMods { get; set; }
|
||||
|
||||
// Whitelist
|
||||
public DbSet<Server.Entities.Whitelist> WhitelistEntries { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ using reallife_gamemode.Server.Inventory.Items;
|
||||
using reallife_gamemode.Server.Inventory.Interfaces;
|
||||
using reallife_gamemode.Server.Saves;
|
||||
using reallife_gamemode.Server.Business;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
/**
|
||||
* @overview Life of German Reallife - Admin Commands (Admin.cs)
|
||||
@@ -109,8 +110,10 @@ namespace reallife_gamemode.Server.Commands
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
message = Regex.Replace(message, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
|
||||
message = Regex.Replace(message, "#([0-9A-Fa-f]{6})", m => "!{" + m.Groups[0].Value + "}");
|
||||
|
||||
string publicMessage = "~b~(( " + player.GetUser().AdminLevel.GetName() + " " + player.Name + ": " + message + " ))";
|
||||
string publicMessage = "~b~(( " + player.GetUser().AdminLevel.GetName() + " " + player.Name + ": " + message + " ~b~))";
|
||||
NAPI.Chat.SendChatMessageToAll(publicMessage);
|
||||
}
|
||||
|
||||
@@ -223,6 +226,8 @@ namespace reallife_gamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
msg = Regex.Replace(msg, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
|
||||
|
||||
player.SendChatMessage("~y~PM an " + target.Name + ": " + msg + " ");
|
||||
string Message = "~y~PM von " + player.GetUser().AdminLevel.GetName() + " " + player.Name + ": " + msg + "";
|
||||
NAPI.Chat.SendChatMessageToPlayer(target, Message);
|
||||
@@ -275,7 +280,9 @@ namespace reallife_gamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
ChatService.BroadcastAdmin("~r~[ADMINCHAT]: " + player.GetUser().AdminLevel.GetName() + " " + player.Name + "~w~: " + message, AdminLevel.ADMIN);
|
||||
message = Regex.Replace(message, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
|
||||
|
||||
ChatService.BroadcastAdmin("~r~[ADMINCHAT]~s~ " + player.GetUser().AdminLevel.GetName() + " " + player.Name + "~w~: " + message, AdminLevel.ADMIN);
|
||||
}
|
||||
|
||||
[Command("freeze", "~m~Benutzung: ~s~/freeze [Spieler]")]
|
||||
@@ -577,10 +584,12 @@ namespace reallife_gamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
reason = Regex.Replace(reason, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
|
||||
|
||||
target.GetUser().BanPlayer(admin, reason, mins);
|
||||
}
|
||||
|
||||
[Command("unban", "~m~Benutzung: ~s~/unban [Name] ", GreedyArg = true)]
|
||||
[Command("unban", "~m~Benutzung: ~s~/unban [Name] ")]
|
||||
public void CmdAdminUnban(Client admin, string userName)
|
||||
{
|
||||
if (!admin.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
||||
@@ -643,7 +652,7 @@ namespace reallife_gamemode.Server.Commands
|
||||
}
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
Entities.GotoPoint p = dbContext.GotoPoints.FirstOrDefault(x => x.Description == location);
|
||||
GotoPoint p = dbContext.GotoPoints.FirstOrDefault(x => x.Description == location);
|
||||
|
||||
if(p == null)
|
||||
{
|
||||
@@ -730,6 +739,45 @@ namespace reallife_gamemode.Server.Commands
|
||||
target.SendChatMessage("~b~Deine Waffen wurden dir von " + player.Name + "(Admin) abgenommen");
|
||||
player.SendChatMessage("~b~Dem Spieler " + target.Name + " wurden erfolgreich alle Waffen abgenommen ");
|
||||
}
|
||||
|
||||
[Command("tov", "~m~Benutzung: ~s~/tov [Fahrzeug ID]")]
|
||||
public void CmdAdminTov(Client player, int vehid)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
Vehicle v = VehicleManager.GetVehicleFromId(vehid);
|
||||
if(v == null)
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Fahrzeug existiert nicht.");
|
||||
return;
|
||||
}
|
||||
|
||||
player.Position = v.Position.Add(new Vector3(0, 0, 2));
|
||||
}
|
||||
|
||||
[Command("ghv", "~m~Benutzung: ~s~/ghv [Fahrzeug ID]")]
|
||||
public void CmdAdminGhv(Client player, int vehid)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
Vehicle v = VehicleManager.GetVehicleFromId(vehid);
|
||||
if (v == null)
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Fahrzeug existiert nicht.");
|
||||
return;
|
||||
}
|
||||
|
||||
v.Position = player.Position;
|
||||
player.Position = player.Position.Add(new Vector3(0, 0, 2));
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -824,23 +872,15 @@ namespace reallife_gamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
hash = hash.ToUpper();
|
||||
uint uHash = NAPI.Util.GetHashKey(hash);
|
||||
|
||||
if (!uint.TryParse(hash, out uint vehHash))
|
||||
if(!VehicleManager.IsValidHash(uHash))
|
||||
{
|
||||
if (!Enum.TryParse(hash, true, out VehicleHash realHash))
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Fahrzeug existiert nicht.");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
vehHash = (uint)realHash;
|
||||
}
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Fahrzeug existiert nicht.");
|
||||
return;
|
||||
}
|
||||
|
||||
Vehicle v = NAPI.Vehicle.CreateVehicle(vehHash, player.Position, player.Rotation.Z, color1, color2);
|
||||
|
||||
Vehicle v = NAPI.Vehicle.CreateVehicle(uHash, player.Position, player.Rotation.Z, color1, color2);
|
||||
player.SetIntoVehicle(v.Handle, -1);
|
||||
}
|
||||
|
||||
@@ -870,7 +910,7 @@ namespace reallife_gamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
if (!player.IsInVehicle) // Man darf keine Autos erstellen, wenn man selbst in einem sitzt (verhindert Bugs)
|
||||
if (!player.IsInVehicle)
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Du sitzt momentan nicht in einem Fahrzeug.");
|
||||
return;
|
||||
@@ -888,6 +928,26 @@ namespace reallife_gamemode.Server.Commands
|
||||
VehicleManager.DeleteVehicle(playerVeh);
|
||||
}
|
||||
|
||||
[Command("vlivery", "~m~Benutzung: ~s~/vlivery [Livery]")]
|
||||
public void CmdAdminVlivery(Client player, int livery)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!player.IsInVehicle)
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Du sitzt momentan nicht in einem Fahrzeug.");
|
||||
return;
|
||||
}
|
||||
|
||||
Vehicle playerVeh = player.Vehicle;
|
||||
|
||||
playerVeh.Livery = livery;
|
||||
}
|
||||
|
||||
[Command("vcolor", "~m~Benutzung: ~s~/vcolor [Farb-ID1] [Farb-ID2]")]
|
||||
public void CmdAdminColor(Client player, int color1, int color2)
|
||||
{
|
||||
@@ -1055,8 +1115,7 @@ namespace reallife_gamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
if (mod == -1) player.Vehicle.RemoveMod(slot);
|
||||
else player.Vehicle.SetMod(slot, mod);
|
||||
player.Vehicle.SetMod(slot, mod);
|
||||
}
|
||||
|
||||
[Command("aneon", "~m~Benutzung: ~s~/aneon [R][G][B]")]
|
||||
@@ -1145,35 +1204,35 @@ namespace reallife_gamemode.Server.Commands
|
||||
}
|
||||
|
||||
[Command("freekh", "~m~Benutzung: ~s~/freekh (Radius)")]
|
||||
public void CmdAdminFreekh(Client player, float radius = 999999999)
|
||||
public void CmdAdminFreekh(Client player, float radius = -1)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
var peopleInRange = NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player);
|
||||
var peopleInRange = radius == -1 ? NAPI.Pools.GetAllPlayers() : NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player);
|
||||
int playerRevided = 0;
|
||||
|
||||
string toPlayerChat = "~b~Admin " + player.Name + " hat alle Spieler wiederbelebt";
|
||||
string toPlayerNotification = "Du wurdest von Admin ~y~" + player.Name + "~s~ wiederbelebt.";
|
||||
|
||||
foreach (var managedClient in peopleInRange)
|
||||
{
|
||||
if (!managedClient.IsLoggedIn()) return;
|
||||
if (radius == 999999999)
|
||||
{
|
||||
managedClient.SendChatMessage("~b~Admin " + player.Name + " hat alle Spieler wiederbelebt");
|
||||
player.SendChatMessage("~b~Du hast " + peopleInRange.Count + " Spieler wiederbelebt");
|
||||
}
|
||||
else
|
||||
{
|
||||
managedClient.SendChatMessage("~b~Admin " + player.Name + " hat im Radius von " + radius + " alle Spieler wiederbelebt");
|
||||
player.SendChatMessage("~b~Du hast " + peopleInRange.Count + " Spieler wiederbelebt");
|
||||
}
|
||||
if (!managedClient.HasData("isDead") || managedClient.GetData("isDead") == false) continue;
|
||||
playerRevided++;
|
||||
|
||||
managedClient.TriggerEvent("onPlayerRevived");
|
||||
managedClient.SendNotification("Du wurdest von Admin ~y~" + player.Name + "~s~ wiederbelebt.");
|
||||
managedClient.SetData("isDead", false);
|
||||
managedClient.SendNotification(toPlayerNotification);
|
||||
managedClient.SendChatMessage(toPlayerChat);
|
||||
|
||||
NAPI.Player.SpawnPlayer(managedClient, managedClient.Position);
|
||||
managedClient.Health = 100;
|
||||
}
|
||||
|
||||
player.SendChatMessage("~b~Du hast " + playerRevided + " Spieler wiederbelebt.");
|
||||
}
|
||||
|
||||
[Command("rsetarmor", "~m~Benutzung: ~s~/rsetarmor [Radius] (Armor)")]
|
||||
@@ -1330,7 +1389,7 @@ namespace reallife_gamemode.Server.Commands
|
||||
}
|
||||
}
|
||||
|
||||
[Command("save", "~m~Benutzung: ~s~/save [Typ = ~g~Blip, Goto (X), ~r~Marker, Ped, Pickup, TextLabel, ~g~Vehicle, FVehicle, SVehicle] (Beschreibung) = (X)")]
|
||||
[Command("save", "~m~Benutzung: ~s~/save [Typ = ~g~Blip~s~, ~g~Goto (X)~s~, ~r~Marker~s~, ~r~Ped~s~, ~r~Pickup~s~, ~r~TextLabel~s~, ~g~Vehicle~s~, ~g~FVehicle~s~, ~g~SVehicle~s~] (Beschreibung) = (X)")]
|
||||
public void CmdAdminSave(Client player, string typ, string description = null)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
|
||||
@@ -1338,12 +1397,12 @@ namespace reallife_gamemode.Server.Commands
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
switch (typ)
|
||||
switch (typ.ToLower())
|
||||
{
|
||||
case "Blip":
|
||||
case "blip":
|
||||
player.TriggerEvent("saveBlip");
|
||||
break;
|
||||
case "Goto":
|
||||
case "goto":
|
||||
if (description == null)
|
||||
{
|
||||
player.SendChatMessage("Für Goto musst du einen dritten Parameter angeben. Beispiel: Ort des Goto-Punktes.");
|
||||
@@ -1368,7 +1427,7 @@ namespace reallife_gamemode.Server.Commands
|
||||
}
|
||||
|
||||
break;
|
||||
case "Vehicle":
|
||||
case "vehicle":
|
||||
if (player.IsInVehicle)
|
||||
{
|
||||
Vehicle vehicle = player.Vehicle;
|
||||
@@ -1380,7 +1439,7 @@ namespace reallife_gamemode.Server.Commands
|
||||
}
|
||||
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
|
||||
break;
|
||||
case "FVehicle":
|
||||
case "fvehicle":
|
||||
if (player.IsInVehicle)
|
||||
{
|
||||
if (player.GetUser().GetFaction() == null)
|
||||
@@ -1391,7 +1450,6 @@ namespace reallife_gamemode.Server.Commands
|
||||
else
|
||||
{
|
||||
Vehicle vehicle = player.Vehicle;
|
||||
player.SendChatMessage("second color: " + vehicle.SecondaryColor);
|
||||
int playerSeat = player.VehicleSeat;
|
||||
vehicle = SaveManager.SaveFactionVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
|
||||
vehicle.PrimaryColor, vehicle.SecondaryColor, vehicle.Locked, vehicle.EngineStatus, player.GetUser().FactionId);
|
||||
@@ -1401,7 +1459,7 @@ namespace reallife_gamemode.Server.Commands
|
||||
}
|
||||
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
|
||||
break;
|
||||
case "SVehicle":
|
||||
case "svehicle":
|
||||
if (player.IsInVehicle)
|
||||
{
|
||||
Vehicle vehicle = player.Vehicle;
|
||||
@@ -1417,6 +1475,76 @@ namespace reallife_gamemode.Server.Commands
|
||||
}
|
||||
}
|
||||
|
||||
[Command("remove", "~m~Benutzung: ~s~/remove [Vehicle, Goto] [Option]")]
|
||||
public void CmdAdminRemove(Client player, string type, string option = "")
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
switch(type.ToLower())
|
||||
{
|
||||
case "vehicle":
|
||||
if(!player.IsInVehicle)
|
||||
{
|
||||
player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
|
||||
return;
|
||||
}
|
||||
|
||||
ServerVehicle veh = player.Vehicle.GetServerVehicle();
|
||||
if(veh == null)
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Fahrzeug wird nicht von einem Server-System genutzt.");
|
||||
return;
|
||||
}
|
||||
|
||||
if(option.ToLower() != "yes")
|
||||
{
|
||||
player.SendChatMessage("Bist du sicher, dass du folgendes Fahrzeug löschen willst: ~m~" + veh.ToString() + " ~s~?");
|
||||
player.SendChatMessage("Falls ~g~Ja~s~, nutze ~y~/remove vehicle yes");
|
||||
return;
|
||||
}
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
VehicleManager.DeleteVehicle(player.Vehicle);
|
||||
dbContext.ServerVehicles.Remove(veh);
|
||||
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
break;
|
||||
|
||||
case "goto":
|
||||
if(option == "")
|
||||
{
|
||||
player.SendChatMessage("~m~Benutzung: ~s~/remove [Goto] [Punkt]");
|
||||
return;
|
||||
}
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.PROJEKTLEITUNG) ?? true) //1338
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
GotoPoint p = dbContext.GotoPoints.FirstOrDefault(x => x.Description == option);
|
||||
if(p == null)
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Dieser Goto-Punkt existiert nicht.");
|
||||
return;
|
||||
}
|
||||
|
||||
dbContext.GotoPoints.Remove(p);
|
||||
dbContext.SaveChanges();
|
||||
|
||||
player.SendNotification("Der Goto-Punkt ~r~" + p.Description + "~s~ wurde erfolgreich gelöscht.");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#region loadCommand
|
||||
[Command("load", "~m~Benutzung: ~s~/load [Typ = OnlineBunkers, ArcadiusBusinessCentre, MazeBankBuilding, LomBank, MazeBankWest, ClubWareHouse, SpecialLocations, GRHYacht, DHYacht, PYacht, AircraftCarrier, BridgeTC, BridgeTN, NorthYankton, ONeilsFarmB, ONeilsFarm, Morgue")]
|
||||
public void CmdAdminloadlocation(Client player, string typ)
|
||||
@@ -1891,13 +2019,97 @@ namespace reallife_gamemode.Server.Commands
|
||||
|
||||
BankManager.SetMoney(player, business, amount, "Admin");
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ALevel1338
|
||||
// ):
|
||||
|
||||
[Command("whitelist", "~m~Benutzung: ~s~/whitelist [Add / Remove] [Socialclub Name]")]
|
||||
public void CmdAdminWhitelist(Client player, string option, string scName)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.PROJEKTLEITUNG) ?? true)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
option = option.ToLower();
|
||||
|
||||
if (option != "add" && option != "remove")
|
||||
{
|
||||
player.SendChatMessage("~m~Benutzung: ~s~/whitelist [Add / Remove] [Socialclub Name]");
|
||||
return;
|
||||
}
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
if (option == "add")
|
||||
{
|
||||
if (dbContext.WhitelistEntries.Any(w => w.SocialClubName.ToLower() == scName.ToLower()))
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Dieser Name ist schon auf der Whitelist.");
|
||||
return;
|
||||
}
|
||||
|
||||
Whitelist whitelist = new Whitelist { SocialClubName = scName.ToLower() };
|
||||
dbContext.WhitelistEntries.Add(whitelist);
|
||||
|
||||
player.SendChatMessage("~b~[ADMIN]~s~ ~y~" + scName + "~s~ wurde erfolgreich zur Whitelist hinzugefügt.");
|
||||
}
|
||||
else if (option == "remove")
|
||||
{
|
||||
if (!dbContext.WhitelistEntries.Any(w => w.SocialClubName.ToLower() == scName.ToLower()))
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Dieser Name ist nicht auf der Whitelist.");
|
||||
return;
|
||||
}
|
||||
|
||||
Whitelist whitelist = dbContext.WhitelistEntries.FirstOrDefault(w => w.SocialClubName.ToLower() == scName.ToLower());
|
||||
dbContext.WhitelistEntries.Remove(whitelist);
|
||||
|
||||
player.SendChatMessage("~b~[ADMIN]~s~ ~y~" + scName + "~s~ wurde erfolgreich aus der Whitelist entfernt.");
|
||||
}
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
[Command("makeadmin", "~m~Benutzung: ~s~/makeadmin [Name] [Adminlevel]")]
|
||||
public void CmdAdminSetadmin(Client player, string name, int rank)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.PROJEKTLEITUNG) ?? true)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Enum.IsDefined(typeof(AdminLevel), rank))
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Dieser Adminrang ist nicht definiert.");
|
||||
return;
|
||||
}
|
||||
|
||||
Client target = ClientService.GetClientByNameOrId(name);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(player);
|
||||
return;
|
||||
}
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
target.GetUser(dbContext).AdminLevel = (AdminLevel)rank;
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
target.SendChatMessage("Du wurdest durch " + player.Name + " auf Adminlevel " + target.GetUser().AdminLevel.GetName() + ":(" + rank + ") gesetzt.");
|
||||
player.SendChatMessage("Du hast " + target.Name + " auf Adminlevel " + target.GetUser().AdminLevel.GetName() + ":(" + rank + ") gesetzt.");
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
/* ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */
|
||||
|
||||
/* ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */
|
||||
|
||||
//TEST COMMAND
|
||||
[Command("own")]
|
||||
@@ -1912,6 +2124,7 @@ namespace reallife_gamemode.Server.Commands
|
||||
if (player.IsInVehicle)
|
||||
{
|
||||
Vehicle playerVehicle = player.Vehicle;
|
||||
int playerSeat = player.VehicleSeat;
|
||||
using (var saveVehicle = new DatabaseContext())
|
||||
{
|
||||
var dataSet = new UserVehicle
|
||||
@@ -1929,7 +2142,9 @@ namespace reallife_gamemode.Server.Commands
|
||||
Active = true
|
||||
};
|
||||
saveVehicle.UserVehicles.Add(dataSet);
|
||||
saveVehicle.SaveChanges();
|
||||
saveVehicle.SaveChanges();
|
||||
|
||||
player.SetIntoVehicle(dataSet.Spawn(playerVehicle), -1);
|
||||
}
|
||||
}
|
||||
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
|
||||
|
||||
@@ -9,6 +9,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
/**
|
||||
* @overview Life of German Reallife - Faction Commands (Faction.cs)
|
||||
@@ -32,6 +33,8 @@ namespace reallife_gamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
message = Regex.Replace(message, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
|
||||
|
||||
string broadcastMessage = "!{02FCFF}** " + player.GetUser().GetFactionRank().RankName + " " + player.Name + ": " + message + " )) **";
|
||||
ChatService.BroadcastFaction(broadcastMessage, f);
|
||||
}
|
||||
@@ -46,6 +49,8 @@ namespace reallife_gamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
message = Regex.Replace(message, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
|
||||
|
||||
string broadcastMessage = "!{33AA33}** " + player.GetUser().GetFactionRank().RankName + " " + player.Name + ": " + message + ", over **";
|
||||
ChatService.BroadcastFaction(broadcastMessage, f);
|
||||
}
|
||||
@@ -60,6 +65,8 @@ namespace reallife_gamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
message = Regex.Replace(message, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
|
||||
|
||||
string broadcastMessage = "!{CC3333}** " + player.GetUser().GetFactionRank().RankName + " " + player.Name + ": " + message + ", over **";
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
@@ -196,6 +203,8 @@ namespace reallife_gamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
message = Regex.Replace(message, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
|
||||
|
||||
string broadcastMsg = "~y~[" + player.GetUser().GetFaction().Name + "] " + player.Name + ": " + message;
|
||||
|
||||
NAPI.Pools.GetAllPlayers().ForEach(p =>
|
||||
@@ -227,13 +236,33 @@ namespace reallife_gamemode.Server.Commands
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Du kannst dich nicht selbst wiederbeleben!");
|
||||
return;
|
||||
}
|
||||
|
||||
player.PlayAnimation("amb@medic@standing@kneel@enter", "enter", 0);
|
||||
|
||||
deadPlayer.TriggerEvent("onPlayerRevived");
|
||||
deadPlayer.SendNotification("Du wurdest von ~r~" + player.Name + "~s~ wiederbelebt.");
|
||||
deadPlayer.SetData("isDead", false);
|
||||
NAPI.Player.SpawnPlayer(deadPlayer, deadPlayer.Position);
|
||||
deadPlayer.Health = 50;
|
||||
}
|
||||
|
||||
[Command("heal", "~m~Benutzung: ~s~/heal [Spieler]")] //TODO Eventuell noch mit Geldbetrag wie bei SA:MP
|
||||
public void CmdFactionMedicHealive(Client player, string receiver)
|
||||
{
|
||||
if (player.GetUser()?.FactionId == null || player.GetUser().FactionId != 2)
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
if (player.IsInVehicle)
|
||||
{
|
||||
player.SendChatMessage("~r~[FEHLER]~s~ Du kannst in einem Auto nicht heilen!");
|
||||
return;
|
||||
}
|
||||
Client target = ClientService.GetClientByNameOrId(receiver);
|
||||
target.Health = 100;
|
||||
target.SendNotification("Du wurdest von ~g~" + player.Name + " ~s~geheilt.", false);
|
||||
player.SendNotification("Du hast~g~" + target.Name + " ~s~geheilt.", false);
|
||||
}
|
||||
#endregion
|
||||
#region Global Fraktions Commands
|
||||
[Command("duty", "~m~Benutzung: ~s~/duty")]
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using GTANetworkAPI;
|
||||
using reallife_gamemode.Model;
|
||||
using reallife_gamemode.Server.Entities;
|
||||
using reallife_gamemode.Server.Extensions;
|
||||
using reallife_gamemode.Server.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -17,7 +19,7 @@ namespace reallife_gamemode.Server.Commands
|
||||
|
||||
option = option.ToLower();
|
||||
|
||||
switch(option)
|
||||
switch(option)
|
||||
{
|
||||
case "invite":
|
||||
{
|
||||
@@ -57,5 +59,30 @@ namespace reallife_gamemode.Server.Commands
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Command("car", "~m~Benutzung: ~s~/car")]
|
||||
public void CmdUserCar(Client player)
|
||||
{
|
||||
if (!player.IsLoggedIn()) return;
|
||||
if (!player.IsInVehicle) return;
|
||||
|
||||
Vehicle pVeh = player.Vehicle;
|
||||
|
||||
if(pVeh.GetServerVehicle() is ServerVehicle veh)
|
||||
{
|
||||
if(player.GetUser().IsAdmin(AdminLevel.SUPPORTER))
|
||||
{
|
||||
player.SendChatMessage("~m~" + ((VehicleHash)pVeh.Model) + " | " + veh.ToString() + " | Farbe 1: " + pVeh.PrimaryColor + " | Farbe 2: " + pVeh.SecondaryColor + " | ID: " + pVeh.Handle.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.SendChatMessage("~m~" + ((VehicleHash)pVeh.Model) + " | Farbe 1: " + pVeh.PrimaryColor + " | Farbe 2: " + pVeh.SecondaryColor + " | ID: " + pVeh.Handle.Value);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
player.SendChatMessage("~m~" + ((VehicleHash)pVeh.Model) + " | Farbe 1: " + pVeh.PrimaryColor + " | Farbe 2: " + pVeh.SecondaryColor + " | ID: " + pVeh.Handle.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,5 +30,10 @@ namespace reallife_gamemode.Server.Entities
|
||||
return context.Factions.FirstOrDefault(f => f.Id == FactionId);
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return "Fraktions Fahrzeug | Fraktion: " + GetFaction().Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,11 +36,20 @@ namespace reallife_gamemode.Server.Entities
|
||||
Vehicle veh = NAPI.Vehicle.CreateVehicle(this.Model, this.Position, this.Heading, this.PrimaryColor, this.SecondaryColor, this.NumberPlate, locked: this.Locked, engine: false);
|
||||
VehicleManager.AddVehicle(this, veh);
|
||||
|
||||
string numberplate = $"{this.Id}";
|
||||
|
||||
if(this is FactionVehicle fV)
|
||||
{
|
||||
veh.NumberPlate = fV.GetFaction().Name;
|
||||
numberplate = $"F{fV.FactionId} " + numberplate;
|
||||
}
|
||||
|
||||
if (this is UserVehicle uV)
|
||||
{
|
||||
numberplate = $"U{uV.UserId} " + numberplate;
|
||||
}
|
||||
|
||||
veh.NumberPlate = numberplate;
|
||||
|
||||
return veh;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
using GTANetworkAPI;
|
||||
using reallife_gamemode.Model;
|
||||
using reallife_gamemode.Server.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
/**
|
||||
@@ -20,5 +22,25 @@ namespace reallife_gamemode.Server.Entities
|
||||
[ForeignKey("User")]
|
||||
public int UserId { get; set; }
|
||||
public User User { get; set; }
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return "Spieler Fahrzeug | Besitzer: " + GetOwner().Name;
|
||||
}
|
||||
|
||||
public User GetOwner(DatabaseContext dbContext = null)
|
||||
{
|
||||
if (dbContext == null)
|
||||
{
|
||||
using (dbContext = new DatabaseContext())
|
||||
{
|
||||
return dbContext.Users.FirstOrDefault(u => u.Id == UserId);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return dbContext.Users.FirstOrDefault(u => u.Id == UserId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
16
Server/Entities/Whitelist.cs
Normal file
16
Server/Entities/Whitelist.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Text;
|
||||
|
||||
namespace reallife_gamemode.Server.Entities
|
||||
{
|
||||
public class Whitelist
|
||||
{
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id { get; set; }
|
||||
public string SocialClubName { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using GTANetworkAPI;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace reallife_gamemode.Server.Events
|
||||
{
|
||||
@@ -7,7 +8,9 @@ namespace reallife_gamemode.Server.Events
|
||||
[ServerEvent(Event.ChatMessage)]
|
||||
public void ChatEvent(Client player, string message)
|
||||
{
|
||||
NAPI.Player.GetPlayersInRadiusOfPlayer(10, player).ForEach(p => p.SendChatMessage($"{player.Name} sagt: {message}"));
|
||||
string serverMsg = Regex.Replace(message, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
|
||||
if (serverMsg.Trim().Length == 0) return;
|
||||
NAPI.Player.GetPlayersInRadiusOfPlayer(10, player).ForEach(p => p.SendChatMessage($"{player.Name} sagt: {serverMsg}"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -21,37 +21,34 @@ namespace reallife_gamemode.Server.Events
|
||||
{
|
||||
class Connect : Script
|
||||
{
|
||||
private List<string> whitelistNames = new List<string>()
|
||||
{
|
||||
"VegasZ",
|
||||
"datgame_",
|
||||
"xSprite",
|
||||
"xPrike",
|
||||
"xNccPlay",
|
||||
};
|
||||
|
||||
|
||||
[ServerEvent(Event.PlayerConnected)]
|
||||
public void OnPlayerConnected(Client player)
|
||||
{
|
||||
if(!whitelistNames.Any(x => x == player.SocialClubName))
|
||||
{
|
||||
player.TriggerEvent("disableLogin");
|
||||
player.Kick();
|
||||
|
||||
string msg2 = "~m~*** " + player.Name + "[" + player.SocialClubName + "] (" + player.Address + ") hat versucht, sich einzuloggen, steht aber nicht auf der Whitelist.";
|
||||
ChatService.BroadcastAdmin(msg2, AdminLevel.ADMIN);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
player.SetData("isLoggedIn", false);
|
||||
player.Position = new Vector3(-1883.736, -781.4911, -10);
|
||||
player.FreezePosition = true;
|
||||
string name = player.Name;
|
||||
List<Client> playerlist = NAPI.Pools.GetAllPlayers();
|
||||
|
||||
string msg = "~m~*** " + player.Name + "[" + player.SocialClubName + "] [ID:" + player.Handle.Value + "] (" + player.Address + ")";
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
if(!dbContext.WhitelistEntries.Any(w => w.SocialClubName.ToLower() == player.SocialClubName.ToLower()))
|
||||
{
|
||||
player.TriggerEvent("disableLogin");
|
||||
|
||||
string msg2 = "~m~*** " + player.Name + "[" + player.SocialClubName + "] (" + player.Address + ") hat versucht, sich einzuloggen, steht aber nicht auf der Whitelist.";
|
||||
ChatService.BroadcastAdmin(msg2, AdminLevel.ADMIN);
|
||||
|
||||
NAPI.Util.ConsoleOutput(player.Name + " tried to join without whitelist entry");
|
||||
|
||||
player.SendChatMessage("~m~Du stehst nicht auf der Whitelist");
|
||||
|
||||
player.Kick();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
string msg = "~m~*** " + player.Name + " [" + player.SocialClubName + "] [ID:" + player.Handle.Value + "] (" + player.Address + ")";
|
||||
ChatService.BroadcastAdmin(msg, AdminLevel.ADMIN);
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ namespace reallife_gamemode.Server.Events
|
||||
[ServerEvent(Event.PlayerDeath)]
|
||||
public void OnPlayerDeath(Client player, Client killer, uint reason)
|
||||
{
|
||||
if (!player.IsLoggedIn()) player.Kick();
|
||||
player.SetData("isDead", true);
|
||||
|
||||
if (player.GetUser().IsAdmin(AdminLevel.ADMIN) == true)
|
||||
|
||||
@@ -36,19 +36,17 @@ namespace reallife_gamemode.Server.Events
|
||||
using (var saveUser = new Model.DatabaseContext())
|
||||
{
|
||||
var user = player.GetUser(saveUser);
|
||||
Vector3 pos = player.Position;
|
||||
|
||||
if(user == null)
|
||||
if(!float.IsNaN(pos.X) && !float.IsNaN(pos.Y) && !float.IsNaN(pos.Z))
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
user.PositionX = player.Position.X;
|
||||
user.PositionY = player.Position.Y;
|
||||
user.PositionZ = player.Position.Z;
|
||||
user.Dead = player.GetData("isDead");
|
||||
user.PositionX = pos.X;
|
||||
user.PositionY = pos.Y;
|
||||
user.PositionZ = pos.Z;
|
||||
saveUser.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
user.Dead = player.HasData("isDead") ? player.GetData("isDead") : false;
|
||||
}
|
||||
player.SetData("isLoggedIn", false);
|
||||
}
|
||||
|
||||
@@ -13,13 +13,19 @@ namespace reallife_gamemode.Server.Events
|
||||
[ServerEvent(Event.PlayerEnterVehicleAttempt)]
|
||||
public void OnPlayerEnterVehicleAttempt(Client player, Vehicle vehicle, sbyte seat)
|
||||
{
|
||||
if (vehicle.HasData("factionId"))
|
||||
if ((VehicleHash)vehicle.Model == VehicleHash.Dune3)
|
||||
{
|
||||
if((vehicle.GetData("factionId") != player.GetUser().FactionId) && seat == 0)
|
||||
if (seat == 1) seat = 0;
|
||||
else if (seat == 0) seat = 1;
|
||||
}
|
||||
|
||||
if (seat != 0) return;
|
||||
|
||||
if (vehicle.GetServerVehicle() is FactionVehicle veh)
|
||||
{
|
||||
if(veh.FactionId != player.GetUser().FactionId)
|
||||
{
|
||||
//TODO REWORK
|
||||
player.SetIntoVehicle(vehicle, 1);
|
||||
player.WarpOutOfVehicle();
|
||||
player.StopAnimation();
|
||||
player.SendNotification("~r~Du darfst dieses Fahrzeug nicht benutzen!", true);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -54,7 +54,15 @@ namespace reallife_gamemode.Server.Events
|
||||
player.SendNotification("Du bist nun ~g~im Dienst.");
|
||||
if (player.GetUser().FactionId == 2) //Fire Department
|
||||
{
|
||||
NAPI.ClientEvent.TriggerClientEventForAll("updateDutyMedics", true);
|
||||
int medicCount = 0;
|
||||
foreach(Client c in NAPI.Pools.GetAllPlayers())
|
||||
{
|
||||
if((c.GetUser()?.GetFaction().Id ?? 0) == 2)
|
||||
{
|
||||
medicCount++;
|
||||
}
|
||||
}
|
||||
NAPI.ClientEvent.TriggerClientEventForAll("updateDutyMedics", medicCount);
|
||||
}
|
||||
switch (factionId)
|
||||
{
|
||||
|
||||
@@ -28,7 +28,10 @@ namespace reallife_gamemode.Server.Events
|
||||
{
|
||||
Name = player.Name,
|
||||
SocialClubName = player.SocialClubName,
|
||||
Password = NAPI.Util.GetHashSha256(password)
|
||||
Password = NAPI.Util.GetHashSha256(password),
|
||||
PositionX = Main.DEFAULT_SPAWN_POSITION.X,
|
||||
PositionY = Main.DEFAULT_SPAWN_POSITION.Y,
|
||||
PositionZ = Main.DEFAULT_SPAWN_POSITION.Z
|
||||
};
|
||||
|
||||
dbContext.Users.Add(user);
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace reallife_gamemode.Server.Extensions
|
||||
}
|
||||
public static string ToMoneyString(this int money)
|
||||
{
|
||||
return string.Format(Main.SERVER_CULTURE, "{0:C0}", money).Replace('€', '$');
|
||||
return "$" + string.Format(Main.SERVER_CULTURE, "{0:C0}", money).Replace("€", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,8 +46,6 @@ namespace reallife_gamemode.Server.Managers
|
||||
tLabel.AttachTo(current, "chassis", new Vector3(0, 0, 1.5), new Vector3(0, 0, 0));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,7 +84,6 @@ namespace reallife_gamemode.Server.Events
|
||||
{
|
||||
using (var saveData = new DatabaseContext())
|
||||
{
|
||||
Console.WriteLine("Adding Faction Vehicle Secondary Color: " + vehicleSecondaryColor);
|
||||
var dataSet = new FactionVehicle
|
||||
{
|
||||
Model = vehicleModel,
|
||||
|
||||
25
Server/Managers/TimeManager.cs
Normal file
25
Server/Managers/TimeManager.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using GTANetworkAPI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Timers;
|
||||
|
||||
namespace reallife_gamemode.Server.Managers
|
||||
{
|
||||
public class TimeManager
|
||||
{
|
||||
public static void StartTimeManager()
|
||||
{
|
||||
Timer t = new Timer(1000);
|
||||
t.Elapsed += SetTime;
|
||||
|
||||
t.Start();
|
||||
}
|
||||
|
||||
private static void SetTime(object sender, ElapsedEventArgs args)
|
||||
{
|
||||
DateTime now = DateTime.Now;
|
||||
NAPI.World.SetTime(now.Hour, now.Minute, now.Second);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,7 @@ namespace reallife_gamemode.Server.Managers
|
||||
/// <param name="pos">Die Position der Garage</param>
|
||||
public static void AddTuningGarage(Vector3 pos)
|
||||
{
|
||||
ColShape colShape = NAPI.ColShape.CreateSphereColShape(pos, 10, 0);
|
||||
ColShape colShape = NAPI.ColShape.CreateSphereColShape(pos, 5, 0);
|
||||
|
||||
colShape.OnEntityEnterColShape += (cs, c) =>
|
||||
{
|
||||
@@ -62,6 +62,13 @@ namespace reallife_gamemode.Server.Managers
|
||||
player.TriggerEvent("showTuningMenu");
|
||||
}
|
||||
|
||||
[RemoteEvent("repairVehicle")]
|
||||
public void RepairVehicle(Client player)
|
||||
{
|
||||
if (!player.IsInVehicle) return;
|
||||
player.Vehicle.Repair();
|
||||
}
|
||||
|
||||
[RemoteEvent("setVehicleMod")]
|
||||
public void SetVehicleMod(Client player, int slot, int index)
|
||||
{
|
||||
|
||||
@@ -9,6 +9,11 @@ namespace reallife_gamemode.Server.Managers
|
||||
{
|
||||
public class VehicleManager
|
||||
{
|
||||
private static readonly List<string> _enabledMods = new List<string>()
|
||||
{
|
||||
"polamggtr"
|
||||
};
|
||||
|
||||
private static Dictionary<int, NetHandle> _serverVehicles = new Dictionary<int, NetHandle>();
|
||||
|
||||
public static void AddVehicle(ServerVehicle serverVehicle, Vehicle vehicle)
|
||||
@@ -41,6 +46,11 @@ namespace reallife_gamemode.Server.Managers
|
||||
return NAPI.Pools.GetAllVehicles().Find(v => v.Handle == handle);
|
||||
}
|
||||
|
||||
public static Vehicle GetVehicleFromId(int id)
|
||||
{
|
||||
return NAPI.Pools.GetAllVehicles().Find(v => v.Handle.Value == id);
|
||||
}
|
||||
|
||||
public static Vehicle GetVehicleFromServerVehicle(ServerVehicle serverVehicle)
|
||||
{
|
||||
if(!_serverVehicles.ContainsKey(serverVehicle.Id))
|
||||
@@ -66,5 +76,20 @@ namespace reallife_gamemode.Server.Managers
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static bool IsValidHash(uint hash)
|
||||
{
|
||||
foreach(VehicleHash vh in Enum.GetValues(typeof(VehicleHash)))
|
||||
{
|
||||
if ((uint)vh == hash) return true;
|
||||
}
|
||||
|
||||
foreach(string mod in _enabledMods)
|
||||
{
|
||||
if (NAPI.Util.GetHashKey(mod) == hash) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,5 +15,10 @@ using reallife_gamemode.Server.Entities;
|
||||
namespace reallife_gamemode.Server.Saves
|
||||
{
|
||||
public class SavedVehicle : ServerVehicle
|
||||
{ }
|
||||
{
|
||||
public override string ToString()
|
||||
{
|
||||
return "Gespeichertes Fahrzeug";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,6 @@
|
||||
<Folder Include="Migrations\" />
|
||||
</ItemGroup>
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(ConfigurationName)' == 'Debug'">
|
||||
<Exec Command="del "..\..\client_packages\*" /Q /S
xcopy "$(OutDir)*" "..\..\bridge\resources\reallife-gamemode" /Y /Q
del "..\..\client_packages\*.*" /Q
xcopy "..\..\reallife-gamemode\reallife-gamemode\Client\*" "..\..\client_packages\" /S /Q /Y
" />
|
||||
<Exec Command="del "..\..\bridge\resources\reallife-gamemode\*.*" /Q /S
xcopy "$(OutDir)*" "..\..\bridge\resources\reallife-gamemode" /Y /Q
del "..\..\client_packages\*.*" /Q /S
xcopy "..\..\reallife-gamemode\reallife-gamemode\Client\*" "..\..\client_packages\" /S /Q /Y
" />
|
||||
</Target>
|
||||
</Project>
|
||||
Reference in New Issue
Block a user