Merging into feature/inventory-system

This commit is contained in:
VegaZ
2018-12-08 23:17:28 +01:00
35 changed files with 848 additions and 168 deletions

1
.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
*.rpf filter=lfs diff=lfs merge=lfs -text

View File

@@ -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();
});

View File

@@ -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 {

View File

@@ -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
View 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);
}
}
});

View File

@@ -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
View File

@@ -0,0 +1,4 @@
mp.events.add('entityStreamIn', (entity) => {
mp.gui.chat.push("streamed in:");
mp.gui.chat.push(entity.Model);
});

View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:dba019dfe6643a9825df882fe92ac77605a85feffcff226d70ce5351f12b8180
size 24064

View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4583d08eb98355d8640aac132b305e16504c9886fbd319aa44f10c3b7b099987
size 13824

View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2b0c2b1815e1add21f0cae50c575fe2232dc5e875321462bd092a5e0957303e9
size 41567232

View File

@@ -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');

View File

@@ -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();

View File

@@ -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; }
}
}

View File

@@ -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!");

View File

@@ -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")]

View File

@@ -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);
}
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}
}
}

View 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; }
}
}

View File

@@ -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}"));
}
}
}

View File

@@ -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);
}

View File

@@ -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)

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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)
{

View File

@@ -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);

View File

@@ -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("€", "");
}
}
}

View File

@@ -46,8 +46,6 @@ namespace reallife_gamemode.Server.Managers
tLabel.AttachTo(current, "chassis", new Vector3(0, 0, 1.5), new Vector3(0, 0, 0));
}
}
}
}
}

View File

@@ -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,

View 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);
}
}
}

View File

@@ -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)
{

View File

@@ -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;
}
}
}

View File

@@ -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";
}
}
}

View File

@@ -26,6 +26,6 @@
<Folder Include="Migrations\" />
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(ConfigurationName)' == 'Debug'">
<Exec Command="del &quot;..\..\client_packages\*&quot; /Q /S&#xD;&#xA;xcopy &quot;$(OutDir)*&quot; &quot;..\..\bridge\resources\reallife-gamemode&quot; /Y /Q&#xD;&#xA;del &quot;..\..\client_packages\*.*&quot; /Q&#xD;&#xA;xcopy &quot;..\..\reallife-gamemode\reallife-gamemode\Client\*&quot; &quot;..\..\client_packages\&quot; /S /Q /Y&#xD;&#xA;" />
<Exec Command="del &quot;..\..\bridge\resources\reallife-gamemode\*.*&quot; /Q /S&#xD;&#xA;xcopy &quot;$(OutDir)*&quot; &quot;..\..\bridge\resources\reallife-gamemode&quot; /Y /Q&#xD;&#xA;del &quot;..\..\client_packages\*.*&quot; /Q /S&#xD;&#xA;xcopy &quot;..\..\reallife-gamemode\reallife-gamemode\Client\*&quot; &quot;..\..\client_packages\&quot; /S /Q /Y&#xD;&#xA;" />
</Target>
</Project>