Merge branch 'develop' into 'master'

0.0.8-h1

See merge request log-gtav/reallife-gamemode!69
This commit is contained in:
hydrant
2021-05-09 21:44:41 +00:00
22 changed files with 535 additions and 276 deletions

View File

@@ -1,54 +1,34 @@
import { GlobalData } from ".."; import { GlobalData } from "..";
export default function bigmap() { export default function bigmap() {
var bigmap = { status: 0, timer: null }; var bigmap = { enabled: false, timer: null };
bigmap.status = 0; mp.game.ui.setRadarZoom(0.0);
bigmap.timer = null;
mp.game.ui.setRadarZoom(1.0);
mp.game.ui.setRadarBigmapEnabled(false, false); mp.game.ui.setRadarBigmapEnabled(false, false);
mp.events.add("render", () => { mp.events.add("render", () => {
mp.game.controls.disableControlAction(0, 48, true); mp.game.controls.disableControlAction(0, 48, true);
if (mp.game.controls.isDisabledControlJustPressed(0, 48) && !GlobalData.InChat) { if (mp.game.controls.isDisabledControlJustPressed(0, 48) && !GlobalData.InChat) {
if (bigmap.status === 0) { if (bigmap.timer != null) {
mp.game.ui.setRadarZoom(0.0); clearTimeout(bigmap.timer);
bigmap.status = 1; bigmap.timer = null;
}
bigmap.timer = setTimeout(() => {
mp.game.ui.setRadarBigmapEnabled(false, true);
mp.game.ui.setRadarZoom(1.0);
bigmap.status = 0;
bigmap.timer = null;
}, 10000);
} else if (bigmap.status === 1) {
if (bigmap.timer != null) {
clearTimeout(bigmap.timer);
bigmap.timer = null;
}
if (!bigmap.enabled) {
mp.game.ui.setRadarBigmapEnabled(true, false); mp.game.ui.setRadarBigmapEnabled(true, false);
mp.game.ui.setRadarZoom(0.0); mp.game.ui.setRadarZoom(1.0);
bigmap.status = 2; bigmap.enabled = true;
bigmap.timer = setTimeout(() => { bigmap.timer = setTimeout(() => {
mp.game.ui.setRadarBigmapEnabled(false, true); mp.game.ui.setRadarBigmapEnabled(false, false);
mp.game.ui.setRadarZoom(1.0); mp.game.ui.setRadarZoom(0.0);
bigmap.enabled = false;
bigmap.status = 0;
bigmap.timer = null; bigmap.timer = null;
}, 10000); }, 7500);
} else { } else {
if (bigmap.timer != null) {
clearTimeout(bigmap.timer);
bigmap.timer = null;
}
mp.game.ui.setRadarBigmapEnabled(false, false); mp.game.ui.setRadarBigmapEnabled(false, false);
mp.game.ui.setRadarZoom(1.0); mp.game.ui.setRadarZoom(0.0);
bigmap.status = 0; bigmap.enabled = false;
} }
} }
}); });

View File

@@ -44,7 +44,7 @@ export default function playerList(globalData: IGlobalData): void {
pList.forEach((player) => { pList.forEach((player) => {
playerlistBrowser.execute(`addPlayerEntry('${player.Id}', '${player.Name}', '${player.FactionId}', '${player.Ping}');`); playerlistBrowser.execute(`addPlayerEntry('${player.Id}', '${player.Name}', '${player.FactionId}', '${player.Ping}');`);
factionPlayersMap.set(player.factionId, factionPlayersMap.get(player.factionId) + 1); factionPlayersMap.set(player.FactionId, factionPlayersMap.get(player.FactionId) + 1);
}); });
factionPlayersMap.forEach((value, key) => { factionPlayersMap.forEach((value, key) => {

View File

@@ -14,8 +14,7 @@
var wheelType = vehicle.getVariable('wheelType'); var wheelType = vehicle.getVariable('wheelType');
if (wheelType !== undefined) { if (wheelType !== undefined) {
vehicle.setWheelType(wheelType); setWheelType(vehicle, wheelType);
vehicle.setMod(23, vehicle.getMod(23));
} }
if (mod18 !== undefined) { if (mod18 !== undefined) {
@@ -29,7 +28,7 @@
return; return;
} }
if (slot == -2) { if (slot == -2) {
veh.setWheelType(newval); setWheelType(veh, newval);
} }
else { else {
veh.toggleMod(slot, newval); veh.toggleMod(slot, newval);
@@ -37,6 +36,16 @@
}); });
function setWheelType(vehicle, wheelType) {
setTimeout(() => {
if (mp.vehicles.exists(vehicle)) {
var mod = vehicle.getMod(23);
vehicle.setWheelType(wheelType);
vehicle.setMod(23, mod);
}
}, 1000);
}
mp.events.addDataHandler("vehicleTaxiLight", (entity: VehicleMp, state: boolean) => { mp.events.addDataHandler("vehicleTaxiLight", (entity: VehicleMp, state: boolean) => {
if (!entity) { if (!entity) {
return; return;

View File

@@ -110,13 +110,13 @@ table tr td {
table tr td span.player__status { table tr td span.player__status {
position: absolute; position: absolute;
top: .45em; top: .55em;
right: 1em; right: 1em;
font-size: .9em; font-size: .9em;
font-weight: normal; font-weight: normal;
line-height: 1.15; line-height: 1;
padding: .4em .5em; padding: .2em .3em .4em;
background-color: rgba(255, 255, 255, 0.125); background-color: rgba(255, 255, 255, 0.075);
border-radius: 3px; border-radius: 3px;
} }

View File

@@ -1,6 +1,6 @@
{ {
"version": 3, "version": 3,
"mappings": "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", "mappings": "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",
"sources": [ "sources": [
"style.scss" "style.scss"
], ],

View File

@@ -85,15 +85,15 @@ table {
span.player__status { span.player__status {
position: absolute; position: absolute;
top: .45em; top: .55em;
right: 1em; right: 1em;
font-size: .9em; font-size: .9em;
font-weight: normal; font-weight: normal;
line-height: 1.15; line-height: 1;
padding: .4em .5em; padding: .2em .3em .4em;
background-color: rgba(white, .125); background-color: rgba(white, 0.075);
border-radius: 3px; border-radius: 3px;
} }

View File

@@ -4,17 +4,27 @@ import game from "../..";
class RageEntity implements IEntity { class RageEntity implements IEntity {
private entity: EntityMp; private entity: EntityMp;
private entityType: string;
public __attachments: any[]; public __attachments: any[];
public __attachmentObjects: any[]; public __attachmentObjects: any[];
get id(): number { get id(): number {
if (!this.entity) { if (!this.entity || !this.exists()) {
return null; return null;
} }
return this.entity.id; return this.entity.id;
} }
exists() {
switch (this.entityType) {
case "player":
return mp.players.exists(this.entity as PlayerMp);
case "vehicle":
return mp.vehicles.exists(this.entity as VehicleMp);
}
}
get attachments(): number { get attachments(): number {
var color = this.entity.getVariable("nametagColor"); var color = this.entity.getVariable("nametagColor");
if (!color) if (!color)
@@ -36,6 +46,7 @@ class RageEntity implements IEntity {
constructor(entity: EntityMp) { constructor(entity: EntityMp) {
this.entity = entity; this.entity = entity;
this.entityType = this.entity.type;
} }
get type(): EntityType { get type(): EntityType {

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:d7c638247cd28299585423da1746b80f7262daa3e86ffafd9d3254b9a66ef8e2 oid sha256:3ba7f639477be4ae4cfae3b9f0c024052786bf8196bc157525255d47dab97c3d
size 38912 size 38912

View File

@@ -5,6 +5,7 @@ using System.Net.Http;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using GTANetworkAPI; using GTANetworkAPI;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json; using Newtonsoft.Json;
using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Entities.Logs.Chat; using ReallifeGamemode.Database.Entities.Logs.Chat;
@@ -16,6 +17,7 @@ using ReallifeGamemode.Server.Factions.Medic;
using ReallifeGamemode.Server.Finance; using ReallifeGamemode.Server.Finance;
using ReallifeGamemode.Server.Inventory.Interfaces; using ReallifeGamemode.Server.Inventory.Interfaces;
using ReallifeGamemode.Server.Job; using ReallifeGamemode.Server.Job;
using ReallifeGamemode.Server.Log;
using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Services;
using ReallifeGamemode.Server.Types; using ReallifeGamemode.Server.Types;
@@ -33,6 +35,8 @@ namespace ReallifeGamemode.Server.Commands
{ {
public class AdminCommands : Script public class AdminCommands : Script
{ {
private ILogger logger = LogManager.GetLogger<AdminCommands>();
#region Todo #region Todo
[Command("syncanim", "~m~Benutzung: ~s~/syncanim [animName]")] [Command("syncanim", "~m~Benutzung: ~s~/syncanim [animName]")]
@@ -187,12 +191,12 @@ namespace ReallifeGamemode.Server.Commands
if (player.HasData("togip")) if (player.HasData("togip"))
{ {
player.ResetData("togip"); player.ResetData("togip");
player.SendNotification("Die IP-Adressen sind nun ~r~deaktiviert~s~."); player.SendNotification("IP-Adressen ~r~deaktiviert");
} }
else else
{ {
player.SetData("togip", true); player.SetData("togip", true);
player.SendNotification("Die IP-Adressen sind nun ~g~aktiviert~s~."); player.SendNotification("IP-Adressen ~g~aktiviert");
} }
break; break;
@@ -200,12 +204,12 @@ namespace ReallifeGamemode.Server.Commands
if (player.HasData("togdeath")) if (player.HasData("togdeath"))
{ {
player.ResetData("togdeath"); player.ResetData("togdeath");
player.SendNotification("Du hast die Todesbenachrichtigungen ~r~deaktiviert~s~."); player.SendNotification("Todesbenachrichtigungen ~r~deaktiviert");
} }
else else
{ {
player.SetData("togdeath", true); player.SetData("togdeath", true);
player.SendNotification("Du hast die Todesbenachrichtigungen ~g~aktiviert~s~."); player.SendNotification("Todesbenachrichtigungen ~g~aktiviert");
} }
break; break;
@@ -213,12 +217,12 @@ namespace ReallifeGamemode.Server.Commands
if (player.HasData("toglc")) if (player.HasData("toglc"))
{ {
player.ResetData("toglc"); player.ResetData("toglc");
player.SendNotification("Du hast den /lc-Chat ~r~deaktiviert~s~."); player.SendNotification("/lc-Chat ~r~deaktiviert");
} }
else else
{ {
player.SetData("toglc", true); player.SetData("toglc", true);
player.SendNotification("Du hast den /lc-Chat ~g~aktiviert~s~."); player.SendNotification("/lc-Chat ~g~aktiviert");
} }
break; break;
@@ -226,36 +230,36 @@ namespace ReallifeGamemode.Server.Commands
if (player.HasData("togconnect")) if (player.HasData("togconnect"))
{ {
player.ResetData("togconnect"); player.ResetData("togconnect");
player.SendNotification("Du hast die Connect-Nachrichten ~r~deaktiviert~s~."); player.SendNotification("Connect-Nachrichten ~r~deaktiviert");
} }
else else
{ {
player.SetData("togconnect", true); player.SetData("togconnect", true);
player.SendNotification("Du hast die Connect-Nachrichten ~g~aktiviert~s~."); player.SendNotification("Connect-Nachrichten ~g~aktiviert");
} }
break; break;
case "d": case "d":
if (player.HasData("togd")) if (player.HasData("togd"))
{ {
player.ResetData("togd"); player.ResetData("togd");
player.SendNotification("Du hast den /d-Chat ~r~deaktiviert~s~."); player.SendNotification("/d-Chat ~r~deaktiviert");
} }
else else
{ {
player.SetData("togd", true); player.SetData("togd", true);
player.SendNotification("Du hast den /d-Chat ~g~aktiviert~s~."); player.SendNotification("/d-Chat ~g~aktiviert");
} }
break; break;
case "ga": case "ga":
if (player.HasData("togga")) if (player.HasData("togga"))
{ {
player.ResetData("togga"); player.ResetData("togga");
player.SendNotification("Du hast den /ga-Chat ~r~deaktiviert~s~."); player.SendNotification("/ga-Chat ~r~deaktiviert");
} }
else else
{ {
player.SetData("togga", true); player.SetData("togga", true);
player.SendNotification("Du hast den /ga-Chat ~g~aktiviert~s~."); player.SendNotification("/ga-Chat ~g~aktiviert");
} }
break; break;
case "all": case "all":
@@ -270,7 +274,7 @@ namespace ReallifeGamemode.Server.Commands
player.SetData("togga", true); player.SetData("togga", true);
player.SetData("togall", true); player.SetData("togall", true);
player.SendNotification("Du hast alle Benachrichtigungen ~g~aktiviert~s~."); player.SendNotification("Du hast alle Benachrichtigungen ~g~aktiviert");
} }
else else
{ {
@@ -283,7 +287,7 @@ namespace ReallifeGamemode.Server.Commands
player.ResetData("togga"); player.ResetData("togga");
player.ResetData("togall"); player.ResetData("togall");
player.SendNotification("Du hast alle Benachrichtigungen ~r~deaktiviert~s~."); player.SendNotification("Du hast alle Benachrichtigungen ~r~deaktiviert");
} }
break; break;
} }
@@ -682,23 +686,33 @@ namespace ReallifeGamemode.Server.Commands
else player.SafeTeleport(player.GetData<Vector3>("mark")); else player.SafeTeleport(player.GetData<Vector3>("mark"));
} }
[Command("flip", "")] [Command("flip", "~m~Benutzung:~s~ /flip")]
public void CmdAdminFlip(Player player) public void CmdAdminFlip(Player player)
{ {
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
{ {
ChatService.NotAuthorized(player); ChatService.NotAuthorized(player);
return; return;
} }
Vehicle vehToFlip = null;
if (player.IsInVehicle) if (player.IsInVehicle)
{ {
player.Vehicle.Rotation = new Vector3(0.0, 0.0, player.Vehicle.Rotation.Z); vehToFlip = player.Vehicle;
} }
else else
{ {
player.SendChatMessage("~r~Du befindest dich in keinem Fahrzeug!"); vehToFlip = NAPI.Pools.GetAllVehicles().Where(v => v.Position.DistanceTo(player.Position) <= 5).OrderBy(v => v.Position.DistanceTo(player.Position)).FirstOrDefault();
} }
if (vehToFlip == null)
{
ChatService.ErrorMessage(player, "Es wurde kein Fahrzeug zum Flippen gefunden");
return;
}
vehToFlip.Rotation = new Vector3(0, 0, vehToFlip.Rotation.Z);
} }
[Command("up", "~m~Benutzung: ~s~/up [Wert]")] [Command("up", "~m~Benutzung: ~s~/up [Wert]")]
@@ -816,7 +830,7 @@ namespace ReallifeGamemode.Server.Commands
[Command("setdimension", "~m~Benutzung: ~s~/setdimension [Spieler] [Dimension]")] [Command("setdimension", "~m~Benutzung: ~s~/setdimension [Spieler] [Dimension]")]
public void CmdAdminSetDimension(Player player, string targetname, uint dimension) public void CmdAdminSetDimension(Player player, string targetname, uint dimension)
{ {
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{ {
ChatService.NotAuthorized(player); ChatService.NotAuthorized(player);
return; return;
@@ -1203,6 +1217,25 @@ namespace ReallifeGamemode.Server.Commands
ChatService.SendMessage(player, "~b~Dem Spieler " + target.Name + " wurden erfolgreich alle Waffen abgenommen "); ChatService.SendMessage(player, "~b~Dem Spieler " + target.Name + " wurden erfolgreich alle Waffen abgenommen ");
} }
[Command("rtakeweapon", "~m~Benutzung: ~s~/rtakeweapon [Radius]")]
public void CmdAdminRangeTakeWeapon(Player player, int range)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
var players = NAPI.Player.GetPlayersInRadiusOfPlayer(range, player);
foreach (Player target in players)
{
target.RemoveAllWeapons();
ChatService.SendMessage(target, "~b~Deine Waffen wurden dir von " + player.Name + " (Admin) abgenommen");
}
ChatService.BroadcastAdmin($"~b~[ADMIN]~s~ ~y~{player.Name}~s~ hat ~o~{players.Count}~s~ Spielern im Radius ~o~{range}~s~ die Waffen abgenommen", AdminLevel.ADMIN);
}
[Command("tov", "~m~Benutzung: ~s~/tov [Fahrzeug ID]")] [Command("tov", "~m~Benutzung: ~s~/tov [Fahrzeug ID]")]
public void CmdAdminTov(Player player, int vehid) public void CmdAdminTov(Player player, int vehid)
{ {
@@ -1401,74 +1434,6 @@ namespace ReallifeGamemode.Server.Commands
ChatService.SendMessage(player, "~b~Du hast die HP von " + target.Name + " auf " + hp + " gesetzt."); ChatService.SendMessage(player, "~b~Du hast die HP von " + target.Name + " auf " + hp + " gesetzt.");
} }
[Command("clothes", "~m~Benutzung: ~s~/clothes [Spieler] [Component ID] [Drawable] (Textur)")]
public void CmdAdminClothes(Player player, string name, int component, int drawable, int texture = 0)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Player target = PlayerService.GetPlayerByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
using (var dbContext = new DatabaseContext())
{
User user = target.GetUser(dbContext);
bool duty = user.GetData<bool>("duty");
CharacterCloth cloth = dbContext.CharacterClothes.Where(c => c.UserId == user.Id && c.SlotId == component && c.SlotType == 0 && c.Duty == duty).FirstOrDefault();
if (cloth == null)
{
cloth = new CharacterCloth()
{
Duty = duty,
ClothId = drawable,
SlotId = component,
SlotType = 0,
Texture = texture,
UserId = user.Id,
};
dbContext.CharacterClothes.Add(cloth);
}
else
{
cloth.ClothId = drawable;
cloth.Texture = texture;
}
dbContext.SaveChanges();
NAPI.Player.SetPlayerClothes(target, component, drawable, texture);
}
}
[Command("props", "~m~Benutzung: ~s~/props [Spieler] [Component ID] [Drawable] (Textur)")]
public void CmdAdminProps(Player player, string name, int slot, int component, int texture = 0)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Player target = PlayerService.GetPlayerByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
if (component == -1)
{
target.ClearAccessory(slot);
return;
}
target.SetAccessories(slot, component, texture);
}
[Command("aunjail", "~m~Benutzung: ~s~/aunjail [Spieler]", GreedyArg = true)] [Command("aunjail", "~m~Benutzung: ~s~/aunjail [Spieler]", GreedyArg = true)]
public void CmdAdminAunjai(Player player, string targetname) public void CmdAdminAunjai(Player player, string targetname)
{ {
@@ -1586,31 +1551,11 @@ namespace ReallifeGamemode.Server.Commands
} }
} }
[Command("adice", "~m~Benutzung: ~s~/adice [Zahl]")]
public void CmdUserAdice(Player player, int number)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
if (!player.IsLoggedIn()) return;
var peopleInRange = NAPI.Player.GetPlayersInRadiusOfPlayer(7, player);
foreach (var managedPlayer in peopleInRange)
{
if (!managedPlayer.IsLoggedIn()) return;
ChatService.SendMessage(managedPlayer, "* " + player.Name + " hat eine " + number + " gewürfelt.");
}
}
[Command("veh", "~m~Benutzung: ~s~/veh [Fahrzeug] (Farbe 1) (Farbe 2)")] [Command("veh", "~m~Benutzung: ~s~/veh [Fahrzeug] (Farbe 1) (Farbe 2)")]
public void CmdAdminVeh(Player player, string hash, int color1 = 111, int color2 = 111) public void CmdAdminVeh(Player player, string hash, int color1 = 111, int color2 = 111)
{ {
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) User user = player.GetUser();
//TODO: Bestimmte Autos nur ab Adminlevel 1337, "normale Fahrzeuge" schon ab Adminlevel 3. if (!user.IsAdmin(AdminLevel.ADMIN))
{ {
ChatService.NotAuthorized(player); ChatService.NotAuthorized(player);
return; return;
@@ -1631,6 +1576,12 @@ namespace ReallifeGamemode.Server.Commands
return; return;
} }
if (VehicleManager.IsVehicleRestricted(hash) && !user.IsAdmin(AdminLevel.HEADADMIN))
{
ChatService.ErrorMessage(player, "Du darfst dieses Fahrzeug nicht spawnen");
return;
}
Vehicle v = NAPI.Vehicle.CreateVehicle(uHash, player.Position, player.Heading, color1, color2, engine: true); Vehicle v = NAPI.Vehicle.CreateVehicle(uHash, player.Position, player.Heading, color1, color2, engine: true);
VehicleStreaming.SetEngineState(v, true); VehicleStreaming.SetEngineState(v, true);
VehicleStreaming.SetLockStatus(v, false); VehicleStreaming.SetLockStatus(v, false);
@@ -1718,47 +1669,6 @@ namespace ReallifeGamemode.Server.Commands
ChatService.SendMessage(player, "Farb-ID1 " + color1 + ", Farb-ID2 " + color2 + ""); ChatService.SendMessage(player, "Farb-ID1 " + color1 + ", Farb-ID2 " + color2 + "");
} }
[Command("giveweapon", "~m~Benutzung: ~s~/giveweapon [Spieler] [Waffe] [Munition]")]
public void CmdAdminGiveweapon(Player player, string name, string hash, int ammo)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
if (ammo <= 0)
{
ChatService.ErrorMessage(player, "Es muss mindestens 1 Munition vergeben werden");
return;
}
hash = hash.ToLower();
Player target = PlayerService.GetPlayerByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
if (!uint.TryParse(hash, out uint uHash))
{
if (hash.Contains("mk2") && !hash.Contains("_mk2")) hash = hash.Replace("mk2", "_mk2");
uHash = NAPI.Util.GetHashKey($"weapon_{hash}");
}
if (!WeaponManager.IsValidHash(uHash))
{
ChatService.ErrorMessage(player, "Diese Waffe existiert nicht");
return;
}
target.GiveWeapon((WeaponHash)uHash, ammo);
ChatService.SendMessage(target, "~b~Du hast von " + player.Name + " eine/n " + hash + " mit einer Munition von " + ammo + " erhalten.");
ChatService.SendMessage(player, "~b~Du hast " + target.Name + " eine/n " + hash + " mit einer Munition von " + ammo + " gegeben.");
}
[Command("aneon", "~m~Benutzung: ~s~/aneon [R][G][B]")] [Command("aneon", "~m~Benutzung: ~s~/aneon [R][G][B]")]
public void CmdAdminNeon(Player player, int r, int g, int b) public void CmdAdminNeon(Player player, int r, int g, int b)
{ {
@@ -2111,7 +2021,8 @@ namespace ReallifeGamemode.Server.Commands
[Command("rgiveweapon", "~m~Benutzung: ~s~/rgiveweapon [Radius] [Waffe] [Munition]")] [Command("rgiveweapon", "~m~Benutzung: ~s~/rgiveweapon [Radius] [Waffe] [Munition]")]
public void CmdAdminRangeGiveWeapon(Player player, float radius, string weapon, int munition) public void CmdAdminRangeGiveWeapon(Player player, float radius, string weapon, int munition)
{ {
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) User user = player.GetUser();
if (!user.IsAdmin(AdminLevel.ADMIN))
{ {
ChatService.NotAuthorized(player); ChatService.NotAuthorized(player);
return; return;
@@ -2131,6 +2042,12 @@ namespace ReallifeGamemode.Server.Commands
return; return;
} }
if (!WeaponManager.IsAllowedWeapon(weapon) && !user.IsAdmin(AdminLevel.HEADADMIN))
{
ChatService.ErrorMessage(player, "Du darfst diese Waffe nicht vergeben");
return;
}
WeaponHash weaponHash = (WeaponHash)uHash; WeaponHash weaponHash = (WeaponHash)uHash;
var peopleInRange = NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player); var peopleInRange = NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player);
@@ -2147,7 +2064,7 @@ namespace ReallifeGamemode.Server.Commands
[Command("rsetap", "~m~Benutzung: ~s~/rsetap [Radius] (Armor)")] [Command("rsetap", "~m~Benutzung: ~s~/rsetap [Radius] (Armor)")]
public void CmdAdminRangeSetAP(Player player, float radius, int Armor = 100) public void CmdAdminRangeSetAP(Player player, float radius, int Armor = 100)
{ {
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{ {
ChatService.NotAuthorized(player); ChatService.NotAuthorized(player);
return; return;
@@ -2166,7 +2083,7 @@ namespace ReallifeGamemode.Server.Commands
[Command("rsethp", "~m~Benutzung: ~s~/rsethp [Radius] (Leben)")] [Command("rsethp", "~m~Benutzung: ~s~/rsethp [Radius] (Leben)")]
public void CmdAdminRangeSetHP(Player player, float radius, int hp = 100) public void CmdAdminRangeSetHP(Player player, float radius, int hp = 100)
{ {
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{ {
ChatService.NotAuthorized(player); ChatService.NotAuthorized(player);
return; return;
@@ -2824,10 +2741,15 @@ namespace ReallifeGamemode.Server.Commands
case "fvehicle": case "fvehicle":
if (player.IsInVehicle) if (player.IsInVehicle)
{ {
string fIdStr = (option1 + " " + option2).Trim();
int[] fIds = null; int[] fIds = null;
string[] fIdStrs = fIdStr.Split(" "); string[] fIdStrs = option1.Split(",");
if (!int.TryParse(option2, out int buyPrice) || buyPrice < 0)
{
ChatService.ErrorMessage(player, "Der Kaufpreis ist ungültig oder negativ");
return;
}
try try
{ {
@@ -2853,7 +2775,7 @@ namespace ReallifeGamemode.Server.Commands
Vehicle vehicle = player.Vehicle; Vehicle vehicle = player.Vehicle;
int playerSeat = player.VehicleSeat; int playerSeat = player.VehicleSeat;
vehicle = SaveManager.SaveFactionVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, vehicle = SaveManager.SaveFactionVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
vehicle.PrimaryColor, vehicle.SecondaryColor, vehicle.Locked, vehicle.EngineStatus, fIds, vehicle.Livery); vehicle.PrimaryColor, vehicle.SecondaryColor, vehicle.Locked, vehicle.EngineStatus, fIds, vehicle.Livery, buyPrice);
player.SendNotification("Fraktionsfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true); player.SendNotification("Fraktionsfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true);
player.SetIntoVehicle(vehicle, playerSeat); player.SetIntoVehicle(vehicle, playerSeat);
} }
@@ -3809,7 +3731,7 @@ namespace ReallifeGamemode.Server.Commands
player.SendChatMessage("~m~Benutzung:~s~ /business [price] [Option]"); player.SendChatMessage("~m~Benutzung:~s~ /business [price] [Option]");
} }
[Command("checkstats", "~m~Benutzung:~s~ /checkstats [Spieler]")] [Command("checkstats", "~m~Benutzung:~s~ /checkstats [Spieler]", Alias = "info")]
public void CmdAdminCheckStats(Player player, string nameOrId) public void CmdAdminCheckStats(Player player, string nameOrId)
{ {
User user = player.GetUser(); User user = player.GetUser();
@@ -3834,7 +3756,7 @@ namespace ReallifeGamemode.Server.Commands
bool flyingLicense = targetUser.FlyingLicensePlane; bool flyingLicense = targetUser.FlyingLicensePlane;
bool weaponLicense = targetUser.WeaponLicense; bool weaponLicense = targetUser.WeaponLicense;
int playedHours = targetUser.PlayedMinutes / 60; int playedHours = targetUser.PlayedMinutes / 60;
string playedHoursString = ""; string playedHoursString;
int jailTime = targetUser.JailTime; int jailTime = targetUser.JailTime;
if (user.IsAdmin(AdminLevel.HEADADMIN)) if (user.IsAdmin(AdminLevel.HEADADMIN))
@@ -3850,6 +3772,182 @@ namespace ReallifeGamemode.Server.Commands
ChatService.SendMessage(player, $"Statistiken von {target.Name} - HandMoney: {handmoney.ToMoneyString()}, BankMoney: {bankmoney.ToMoneyString()}, DriverLicense: {driverLicense.ToString()}, BikeLicense: {bikeLicense.ToString()}, FlyingLicense: {flyingLicense.ToString()}, WeaponLicense: {weaponLicense.ToString()}, playedHours: {playedHoursString}, JailTime: {jailTime.ToString()}"); ChatService.SendMessage(player, $"Statistiken von {target.Name} - HandMoney: {handmoney.ToMoneyString()}, BankMoney: {bankmoney.ToMoneyString()}, DriverLicense: {driverLicense.ToString()}, BikeLicense: {bikeLicense.ToString()}, FlyingLicense: {flyingLicense.ToString()}, WeaponLicense: {weaponLicense.ToString()}, playedHours: {playedHoursString}, JailTime: {jailTime.ToString()}");
} }
[Command("setvehiclebuyprice", "~m~Benutzung: ~s~/setvehiclebuyprice [Preis]", Alias = "svbp")]
public void CmdAdminSetVehicleBuyPrice(Player player, int price)
{
using var dbContext = new DatabaseContext();
User user = player.GetUser(dbContext);
if (!user.IsAdmin(AdminLevel.HEADADMIN))
{
ChatService.NotAuthorized(player);
return;
}
if (price < 0)
{
ChatService.ErrorMessage(player, "Der neue Kaufpreis muss positiv sein");
return;
}
if (!player.IsInVehicle)
{
ChatService.ErrorMessage(player, "Du sitzt nicht in einem Fahrzeug");
return;
}
Vehicle vehicle = player.Vehicle;
ServerVehicle serverVehicle = vehicle.GetServerVehicle(dbContext);
if (serverVehicle == null)
{
ChatService.ErrorMessage(player, "Dieses Fahrzeug ist keinem System zugeordnet");
return;
}
int? oldPrice = null;
if (serverVehicle is UserVehicle userVehicle)
{
oldPrice = userVehicle.Price;
userVehicle.Price = price;
}
else if (serverVehicle is FactionVehicle factionVehicle)
{
oldPrice = factionVehicle.BuyPrice;
factionVehicle.BuyPrice = price;
}
else
{
ChatService.ErrorMessage(player, "Dieses Fahrzeug ist weder ein User- noch ein Fraktionsfahrzeug");
return;
}
logger.LogInformation("{0} set the buyprice of vehicle {1} to {2}", user.Name, serverVehicle.Id, price);
dbContext.SaveChanges();
string oldPriceStr = oldPrice == null ? "nicht gesetzt" : oldPrice.ToMoneyString();
ChatService.SendMessage(player, $"~b~[ADMIN]~s~ Der Kaufpreis des Fahrzeugs ~y~{serverVehicle.Id}~s~ wurde auf ~g~{price.ToMoneyString()} gesetzt. Alter Preis: {oldPriceStr}");
}
[Command("setclothes", "~m~Benutzung: ~s~/setclothes [Spieler] [Component ID] [Drawable] (Textur)")]
public void CmdAdminSetClothes(Player player, string name, int component, int drawable, int texture = 0)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Player target = PlayerService.GetPlayerByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
using (var dbContext = new DatabaseContext())
{
User user = target.GetUser(dbContext);
bool duty = user.GetData<bool>("duty");
CharacterCloth cloth = dbContext.CharacterClothes.Where(c => c.UserId == user.Id && c.SlotId == component && c.SlotType == 0 && c.Duty == duty).FirstOrDefault();
if (cloth == null)
{
cloth = new CharacterCloth()
{
Duty = duty,
ClothId = drawable,
SlotId = component,
SlotType = 0,
Texture = texture,
UserId = user.Id,
};
dbContext.CharacterClothes.Add(cloth);
}
else
{
cloth.ClothId = drawable;
cloth.Texture = texture;
}
dbContext.SaveChanges();
NAPI.Player.SetPlayerClothes(target, component, drawable, texture);
}
}
[Command("setprops", "~m~Benutzung: ~s~/setprops [Spieler] [Component ID] [Drawable] (Textur)")]
public void CmdAdminSetProps(Player player, string name, int slot, int component, int texture = 0)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Player target = PlayerService.GetPlayerByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
if (component == -1)
{
target.ClearAccessory(slot);
return;
}
target.SetAccessories(slot, component, texture);
}
[Command("giveweapon", "~m~Benutzung: ~s~/giveweapon [Spieler] [Waffe] [Munition]")]
public void CmdAdminGiveweapon(Player player, string name, string hash, int ammo)
{
User user = player.GetUser();
if (!user.IsAdmin(AdminLevel.ADMIN))
{
ChatService.NotAuthorized(player);
return;
}
if (ammo <= 0)
{
ChatService.ErrorMessage(player, "Es muss mindestens 1 Munition vergeben werden");
return;
}
hash = hash.ToLower();
Player target = PlayerService.GetPlayerByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
if (!uint.TryParse(hash, out uint uHash))
{
if (hash.Contains("mk2") && !hash.Contains("_mk2")) hash = hash.Replace("mk2", "_mk2");
uHash = NAPI.Util.GetHashKey($"weapon_{hash}");
}
if (!WeaponManager.IsValidHash(uHash))
{
ChatService.ErrorMessage(player, "Diese Waffe existiert nicht");
return;
}
if (!WeaponManager.IsAllowedWeapon(hash) && !user.IsAdmin(AdminLevel.HEADADMIN))
{
ChatService.ErrorMessage(player, "Du darfst diese Waffe nicht vergeben");
return;
}
target.GiveWeapon((WeaponHash)uHash, ammo);
ChatService.SendMessage(target, "~b~Du hast von " + player.Name + " eine/n " + hash + " mit einer Munition von " + ammo + " erhalten.");
ChatService.SendMessage(player, "~b~Du hast " + target.Name + " eine/n " + hash + " mit einer Munition von " + ammo + " gegeben.");
}
#endregion ALevel1337 #endregion ALevel1337
#region ALevel1338 #region ALevel1338

View File

@@ -19,7 +19,8 @@ namespace ReallifeGamemode.Server.Commands
internal class UserCommands : Script internal class UserCommands : Script
{ {
[Command("rent", "~m~rent stop")] [Command("rent", "~m~rent stop")]
public void CmdUserStopRent(Player player, String option = "") { public void CmdUserStopRent(Player player, String option = "")
{
if (!player.IsLoggedIn()) return; if (!player.IsLoggedIn()) return;
if (option != "stop") if (option != "stop")
@@ -112,7 +113,8 @@ namespace ReallifeGamemode.Server.Commands
using (var dbContext = new DatabaseContext()) using (var dbContext = new DatabaseContext())
{ {
User user = player.GetUser(dbContext); User user = player.GetUser(dbContext);
if (user.BankAccount.Balance < 5) { if (user.BankAccount.Balance < 5)
{
ChatService.ErrorMessage(player, "Dafür hast du nicht genug Geld auf deinem Bankkonto"); ChatService.ErrorMessage(player, "Dafür hast du nicht genug Geld auf deinem Bankkonto");
return; return;
} }
@@ -144,7 +146,7 @@ namespace ReallifeGamemode.Server.Commands
var lastDriverDic = new Dictionary<string, DateTime>(); var lastDriverDic = new Dictionary<string, DateTime>();
if(VehicleManager.lastDriversInVehicle.ContainsKey(veh)) if (VehicleManager.lastDriversInVehicle.ContainsKey(veh))
{ {
lastDriverDic = VehicleManager.lastDriversInVehicle[veh]; lastDriverDic = VehicleManager.lastDriversInVehicle[veh];
} }
@@ -220,8 +222,25 @@ namespace ReallifeGamemode.Server.Commands
if (pVeh.GetServerVehicle(dbContext) is ServerVehicle veh) if (pVeh.GetServerVehicle(dbContext) is ServerVehicle veh)
{ {
string dbIdStr = player.GetUser(dbContext).IsAdmin(AdminLevel.ADMIN) ? $" | DB-ID: {veh.Id}" : ""; User user = player.GetUser(dbContext);
ChatService.SendMessage(player, "~m~" + ((VehicleHash)pVeh.Model) + " | " + veh.ToString() + " | Farbe 1: " + pVeh.PrimaryColor + " | Farbe 2: " + pVeh.SecondaryColor + " | ID: " + pVeh.Handle.Value + dbIdStr); string addInfoStr = "";
if (user.IsAdmin(AdminLevel.ADMIN))
{
addInfoStr += $" | DB-ID: {veh.Id}";
}
if (user.IsAdmin(AdminLevel.HEADADMIN))
{
if (veh is FactionVehicle factionVehicle)
{
addInfoStr += " | Kaufpreis: " + factionVehicle.BuyPrice.ToMoneyString();
}
else if (veh is UserVehicle userVehicle)
{
addInfoStr += " | Kaufpreis: " + userVehicle.Price.ToMoneyString();
}
}
ChatService.SendMessage(player, "~m~" + ((VehicleHash)pVeh.Model) + " | " + veh.ToString() + " | Farbe 1: " + pVeh.PrimaryColor + " | Farbe 2: " + pVeh.SecondaryColor + " | ID: " + pVeh.Handle.Value + addInfoStr);
} }
else else
{ {

View File

@@ -51,7 +51,7 @@ namespace ReallifeGamemode.Server.Events
player.TriggerEvent("abortSpawnschutz"); player.TriggerEvent("abortSpawnschutz");
//TODO: Zum Full Release entfernen //TODO: Zum Full Release entfernen
if (player.HasData("togdeath")) if (player.HasData("togdeath") && user.IsAdmin(AdminLevel.ADMIN))
{ {
ChatService.SendMessage(player, "Du bist durch " + (killer?.Name ?? "Niemanden") + " gestorben: " + reason.ToString()); ChatService.SendMessage(player, "Du bist durch " + (killer?.Name ?? "Niemanden") + " gestorben: " + reason.ToString());
} }

View File

@@ -241,7 +241,7 @@ namespace ReallifeGamemode.Server.Events
if (sV is UserVehicle uV) if (sV is UserVehicle uV)
{ {
if (uV.UserId != u.Id) if (uV.UserId != u.Id && (!u.IsAdmin(AdminLevel.HEADADMIN) || !player.IsTSupport()))
{ {
player.SendNotification("~r~Du darfst dieses Fahrzeug nicht parken."); player.SendNotification("~r~Du darfst dieses Fahrzeug nicht parken.");
return; return;
@@ -249,7 +249,7 @@ namespace ReallifeGamemode.Server.Events
} }
else if (sV is FactionVehicle fV) else if (sV is FactionVehicle fV)
{ {
if (!fV.GetOwners().Contains(u.FactionId ?? 0) || !u.FactionLeader) if ((!fV.GetOwners().Contains(u.FactionId ?? 0) || !u.FactionLeader) && (!u.IsAdmin(AdminLevel.HEADADMIN) || !player.IsTSupport()))
{ {
player.SendNotification("~r~Du darfst dieses Fahrzeug nicht parken."); player.SendNotification("~r~Du darfst dieses Fahrzeug nicht parken.");
return; return;

View File

@@ -102,7 +102,7 @@ namespace ReallifeGamemode.Server.Events
SLOT_PRIMARY => 500, SLOT_PRIMARY => 500,
SLOT_SECONDARY => 250, SLOT_SECONDARY => 250,
SLOT_MEELE => 1, SLOT_MEELE => 1,
SLOT_SPECIAL => 20, SLOT_SPECIAL => 30,
_ => 1 _ => 1
}; };

View File

@@ -185,7 +185,7 @@ namespace ReallifeGamemode.Server.Finance
} }
} }
if (paycheck.Amount > 0) if (paycheck.Amount > 0)
ChatService.SendMessage(client, $"~g~[PAYDAY]~s~ Dein Stundenumsatz beträgt ~g~+{ paycheck.Amount.ToMoneyString() }~s~."); ChatService.SendMessage(client, $"~g~[PAYDAY]~s~ Dein Stundenumsatz beträgt ~g~{ paycheck.Amount.ToMoneyString() }~s~.");
else else
ChatService.SendMessage(client, $"~g~[PAYDAY]~s~ Dein Stundenumsatz beträgt ~r~-{ Math.Abs(paycheck.Amount).ToMoneyString() }~s~."); ChatService.SendMessage(client, $"~g~[PAYDAY]~s~ Dein Stundenumsatz beträgt ~r~-{ Math.Abs(paycheck.Amount).ToMoneyString() }~s~.");

View File

@@ -131,7 +131,7 @@ namespace ReallifeGamemode.Server.Managers
[ServerEvent(Event.PlayerEnterVehicle)] [ServerEvent(Event.PlayerEnterVehicle)]
public void CarDealerBusiness_PlayerEnterVehicle(Player player, Vehicle veh, int seat) public void CarDealerBusiness_PlayerEnterVehicle(Player player, Vehicle veh, int seat)
{ {
if(player.IsAdminDuty()) if (player.IsAdminDuty())
{ {
return; return;
} }
@@ -181,7 +181,7 @@ namespace ReallifeGamemode.Server.Managers
return; return;
} }
player.SendChatMessage("~y~Du hast das Fahrzeug erfolgreich gekauft"); player.SendChatMessage("~y~Du hast das Fahrzeug erfolgreich gekauft");
player.SendNotification("~r~[Wichtig] ~w~Benutze 'X', um dein Fahrzeug umzuparken."); player.SendNotification("~r~[Wichtig] ~w~Benutze 'Z', um dein Fahrzeug umzuparken.");
newVeh = new UserVehicle newVeh = new UserVehicle
{ {
@@ -222,7 +222,7 @@ namespace ReallifeGamemode.Server.Managers
PrimaryColor = 111, PrimaryColor = 111,
SecondaryColor = 111, SecondaryColor = 111,
Active = true, Active = true,
BuyPrice = price BuyPrice = (int)(price * FACTION_CAR_MULTIPLIER)
}; };
} }
//else if (target == "Gruppe") //else if (target == "Gruppe")

View File

@@ -475,7 +475,7 @@ namespace ReallifeGamemode.Server.Managers
var backPrice = (int)(vehPrice * 0.4); var backPrice = (int)(vehPrice * 0.4);
player.SetData<bool>("SellVehicleDecision", true); player.SetData<bool>("SellVehicleDecision", true);
player.SetData<int>("VehicleToSell", id); player.SetData<int>("VehicleToSell", id);
ChatService.SendMessage(player, "~s~Möchtes du das Fahrzeug ~y~" + veh.DisplayName + " ~s~wirklich für ~g~$" + backPrice + " ~s~verkaufen? Drücke ~g~J~s~ zum Bestätigen oder ~r~N ~s~zum Abbrechen"); ChatService.SendMessage(player, "~s~Möchtest du das Fahrzeug ~y~" + veh.DisplayName + " ~s~wirklich für ~g~" + backPrice.ToMoneyString() + " ~s~verkaufen? Drücke ~g~J~s~ zum Bestätigen oder ~r~N ~s~zum Abbrechen.");
} }
} }
@@ -493,7 +493,7 @@ namespace ReallifeGamemode.Server.Managers
GTANetworkAPI.Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(userVehicle); GTANetworkAPI.Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(userVehicle);
user.BankAccount.Balance += backPrice; user.BankAccount.Balance += backPrice;
ChatService.SendMessage(player, $"~b~[INFO]~s~ Du hast durch den Autoverkauf ~g~{backPrice.ToMoneyString()}~s~ erhalten."); ChatService.SendMessage(player, $"~b~[INFO]~s~ Du hast durch den Autoverkauf ~g~{backPrice.ToMoneyString()} ~s~erhalten.");
VehicleManager.DeleteVehicle(veh); VehicleManager.DeleteVehicle(veh);
dbContext.UserVehicles.Remove(userVehicle); dbContext.UserVehicles.Remove(userVehicle);
@@ -570,7 +570,7 @@ namespace ReallifeGamemode.Server.Managers
player.SetData<bool>("SellVehicleDecision", true); player.SetData<bool>("SellVehicleDecision", true);
player.SetData<int>("VehicleToSell", id); player.SetData<int>("VehicleToSell", id);
ChatService.SendMessage(player, "~s~Möchtes du das Fahrzeug ~y~" + veh.DisplayName + " ~s~wirklich für ~g~$" + backPrice + " ~s~verkaufen? Drücke ~g~J~s~ zum Bestätigen oder ~r~N ~s~zum Abbrechen"); ChatService.SendMessage(player, "~s~Möchtest du das Fahrzeug ~y~" + veh.DisplayName + " ~s~wirklich für ~g~" + backPrice.ToMoneyString() + " ~s~verkaufen? Drücke ~g~J~s~ zum Bestätigen oder ~r~N ~s~zum Abbrechen.");
} }
} }
@@ -603,8 +603,8 @@ namespace ReallifeGamemode.Server.Managers
{ {
if (amount > 0 && amount <= 10000) if (amount > 0 && amount <= 10000)
{ {
player.SendNotification($"~w~Du hast ~y~{targetname} ~w~ein Ticket in Höhe von ~b~${amount} ~w~ausgestellt. Grund: ~g~{reason}~w~."); player.SendNotification($"~w~Du hast ~y~{targetname} ~w~ein Ticket in Höhe von ~b~{amount.ToMoneyString()} ~w~ausgestellt (Grund: ~g~{reason}~w~).");
target.SendNotification($"~b~{player.GetUser().FactionRank.RankName} {playername} ~w~hat dir ein Ticket in Höhe von ~y~${amount} ~w~ausgestellt.", true); target.SendNotification($"~b~{player.GetUser().FactionRank.RankName} {playername} ~w~hat dir ein Ticket in Höhe von ~y~{amount.ToMoneyString()} ~w~ausgestellt.", true);
target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Das Ticket kann im Interaktionsmenü angenommen werden.", true); target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Das Ticket kann im Interaktionsmenü angenommen werden.", true);
target.SetData("ticket_boolean", true); target.SetData("ticket_boolean", true);
target.SetData<int>("ticket_amount", amount); target.SetData<int>("ticket_amount", amount);
@@ -612,7 +612,7 @@ namespace ReallifeGamemode.Server.Managers
} }
else else
{ {
player.SendNotification("~r~Du kannst nur zwischen $1 und $10.000 angeben!"); player.SendNotification("~r~Du kannst nur einen Betrag zwischen $1 und $10.000 angeben!");
} }
} }
} }
@@ -655,7 +655,7 @@ namespace ReallifeGamemode.Server.Managers
if (targetUser.DriverLicenseVehicle == false && targetUser.DriverLicenseBike == false) if (targetUser.DriverLicenseVehicle == false && targetUser.DriverLicenseBike == false)
{ {
player.SendNotification("~r~Spieler hat weder Auto- noch Motorradführerschein!"); player.SendNotification("~r~Der Spieler hat weder einen Auto- noch einen Motorradführerschein!");
return; return;
} }
@@ -667,7 +667,7 @@ namespace ReallifeGamemode.Server.Managers
targetUser.Points += amount; targetUser.Points += amount;
player.SendNotification($"~w~Du hast ~y~{targetname} ~b~{amount} ~w~Strafpunkte gegeben. Grund: ~g~{reason}~w~."); player.SendNotification($"~w~Du hast ~y~{targetname} ~b~{amount} ~w~Strafpunkte gegeben (Grund: ~g~{reason}~w~).");
target.SendNotification($"~b~{player.GetUser().FactionRank.RankName} {playername} ~w~hat dir ~y~{amount} ~w~Strafpunkte gegeben (Grund: ~r~{reason}~w~).", true); target.SendNotification($"~b~{player.GetUser().FactionRank.RankName} {playername} ~w~hat dir ~y~{amount} ~w~Strafpunkte gegeben (Grund: ~r~{reason}~w~).", true);
ChatService.HQMessage(targetname + " hat von " + playername + " " + amount + " Strafpunkt(e) erhalten (Grund: " + reason + "). Gesamt: " + targetUser.Points); ChatService.HQMessage(targetname + " hat von " + playername + " " + amount + " Strafpunkt(e) erhalten (Grund: " + reason + "). Gesamt: " + targetUser.Points);
@@ -712,8 +712,8 @@ namespace ReallifeGamemode.Server.Managers
if (type == "Angenommen") if (type == "Angenommen")
{ {
target.SendNotification($"~g~Du hast das Ticket über ~b~{ticket_amount}$ ~g~angenommen und bezahlt.", true); target.SendNotification($"~g~Du hast das Ticket über ~b~{ticket_amount.ToMoneyString()} ~g~angenommen und bezahlt.", true);
player.SendNotification($"~y~{targetname} ~g~hat das Ticket über ~b~{ticket_amount}$ ~g~angenommen und bezahlt.", true); player.SendNotification($"~y~{targetname} ~g~hat das Ticket über ~b~{ticket_amount.ToMoneyString()} ~g~angenommen und bezahlt.", true);
using (var dbContext = new DatabaseContext()) using (var dbContext = new DatabaseContext())
{ {
User user = player.GetUser(dbContext); User user = player.GetUser(dbContext);
@@ -741,8 +741,8 @@ namespace ReallifeGamemode.Server.Managers
} }
else if (type == "Abgelehnt") else if (type == "Abgelehnt")
{ {
target.SendNotification($"~r~Du hast das Ticket über ~b~{ticket_amount}$ ~r~abgelehnt.", true); target.SendNotification($"~r~Du hast das Ticket über ~b~{ticket_amount.ToMoneyString()} ~r~abgelehnt.", true);
player.SendNotification($"~y~{targetname} ~r~hat das Ticket über ~b~{ticket_amount}$ ~r~abgelehnt.", true); player.SendNotification($"~y~{targetname} ~r~hat das Ticket über ~b~{ticket_amount.ToMoneyString()} ~r~abgelehnt.", true);
target.ResetData("ticket_boolean"); target.ResetData("ticket_boolean");
target.ResetData("ticket_amount"); target.ResetData("ticket_amount");
target.ResetData("ticket_player"); target.ResetData("ticket_player");
@@ -798,8 +798,8 @@ namespace ReallifeGamemode.Server.Managers
if (amount > 0 && amount <= 5000) if (amount > 0 && amount <= 5000)
{ {
player.SendNotification($"~w~Du hast ~y~{targetname} ~w~ ${amount} gegeben."); player.SendNotification($"~w~Du hast ~y~{targetname} ~w~{amount.ToMoneyString()} gegeben.");
target.SendNotification($"~w~ Du hast von ~y~{playername} ~w~ ${amount} erhalten.", true); target.SendNotification($"~w~ Du hast von ~y~{playername} ~w~{amount.ToMoneyString()} erhalten.", true);
using (var dbContext = new DatabaseContext()) using (var dbContext = new DatabaseContext())
{ {
@@ -810,7 +810,7 @@ namespace ReallifeGamemode.Server.Managers
} }
else else
{ {
player.SendNotification("~r~ Du kannst nur zwischen $1 und $5.000 geben!"); player.SendNotification("~r~Du kannst nur zwischen $1 und $5.000 geben!");
} }
} }
} }
@@ -832,7 +832,7 @@ namespace ReallifeGamemode.Server.Managers
if (listPlayers.Count() > 0) if (listPlayers.Count() > 0)
player.TriggerEvent("showWantedlist", JsonConvert.SerializeObject(listPlayers)); player.TriggerEvent("showWantedlist", JsonConvert.SerializeObject(listPlayers));
else else
player.SendNotification("~r~[Fehler] ~w~Es gibt derzeitig keine Verbrecher!"); player.SendNotification("~r~[Fehler] ~w~Es gibt derzeit keine Verbrecher!");
} }
@@ -860,7 +860,7 @@ namespace ReallifeGamemode.Server.Managers
{ {
if (player.GetUser().FactionId == 2 && player.IsDuty()) if (player.GetUser().FactionId == 2 && player.IsDuty())
{ {
player.SendNotification("~r~[Fehler] ~w~Du kannst keinen Sanitäter rufen."); player.SendNotification("~r~[Fehler] ~w~Du kannst keinen Sanitäter rufen");
return; return;
} }
@@ -877,14 +877,14 @@ namespace ReallifeGamemode.Server.Managers
}; };
if (player.GetData<bool>("healauftrag") == true) if (player.GetData<bool>("healauftrag") == true)
{ {
player.SendNotification("~r~[Fehler] ~w~Du hast bereits ein Sanitäter gerufen."); player.SendNotification("~r~[Fehler] ~w~Du hast bereits einen Sanitäter gerufen");
} }
else else
{ {
Medic.AddTaskToList(healTask); Medic.AddTaskToList(healTask);
player.SetData("healauftrag", true); player.SetData("healauftrag", true);
player.SendNotification("~w~Du hast einen Sanitäter um Hilfe gerufen"); player.SendNotification("~w~Du hast einen Sanitäter um Hilfe gerufen");
ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat soeben einen Serviceauftrag beantragt.", new List<int>() { 2 }); ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat soeben einen Service-Auftrag aufgegeben.", new List<int>() { 2 });
} }
} }

View File

@@ -158,7 +158,7 @@ namespace ReallifeGamemode.Server.Managers
public static Vehicle SaveFactionVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading, public static Vehicle SaveFactionVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading,
string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int[] factionId, int livery) string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int[] factionId, int livery, int buyPrice)
{ {
using (var saveData = new DatabaseContext()) using (var saveData = new DatabaseContext())
{ {
@@ -175,7 +175,8 @@ namespace ReallifeGamemode.Server.Managers
SecondaryColor = vehicleSecondaryColor, SecondaryColor = vehicleSecondaryColor,
Locked = vehicleLocked, Locked = vehicleLocked,
Active = true, Active = true,
Livery = livery Livery = livery,
BuyPrice = buyPrice
}; };
saveData.FactionVehicles.Add(dataSet); saveData.FactionVehicles.Add(dataSet);
saveData.SaveChanges(); saveData.SaveChanges();

View File

@@ -36,7 +36,7 @@ namespace ReallifeGamemode.Server.Managers
colShape.OnEntityEnterColShape += (cs, c) => colShape.OnEntityEnterColShape += (cs, c) =>
{ {
using var dbContext = new DatabaseContext(); using var dbContext = new DatabaseContext();
if (c.IsInVehicle && c.VehicleSeat == 0 && IsPlayerAllowedToTuneVehicle(c, c.Vehicle, dbContext)) if (c.IsInVehicle && c.VehicleSeat == 0)
{ {
c.TriggerEvent("showTuningInfo"); c.TriggerEvent("showTuningInfo");
} }
@@ -53,7 +53,7 @@ namespace ReallifeGamemode.Server.Managers
tuningGarages.Add(colShape); tuningGarages.Add(colShape);
} }
private static bool IsPlayerAllowedToTuneVehicle(Player c, Vehicle vehicle, DatabaseContext dbContext) private static bool IsPlayerAllowedToTuneVehicle(Player c, ServerVehicle serverVehicle, DatabaseContext dbContext)
{ {
User user = c.GetUser(); User user = c.GetUser();
if (user == null) if (user == null)
@@ -61,7 +61,6 @@ namespace ReallifeGamemode.Server.Managers
return false; return false;
} }
ServerVehicle serverVehicle = vehicle.GetServerVehicle(dbContext);
if (serverVehicle == null) if (serverVehicle == null)
{ {
return false; return false;
@@ -89,11 +88,12 @@ namespace ReallifeGamemode.Server.Managers
using (var dbContext = new DatabaseContext()) using (var dbContext = new DatabaseContext())
{ {
foreach (VehicleMod vMod in dbContext.VehicleMods.Where(vM => vM.ServerVehicleId == sVeh.Id).ToList()) foreach (VehicleMod vMod in dbContext.VehicleMods.Where(vM => vM.ServerVehicleId == sVeh.Id).OrderByDescending(v => v.Slot).ToList())
{ {
if (vMod.Slot == -2) if (vMod.Slot == -2)
{ {
veh.SetSharedData("wheelType", vMod.ModId); veh.SetSharedData("wheelType", vMod.ModId);
NAPI.ClientEvent.TriggerClientEventForAll("vehicleToggleMod", veh, -2, vMod.ModId);
} }
else if (vMod.Slot == 18) else if (vMod.Slot == 18)
{ {
@@ -106,6 +106,10 @@ namespace ReallifeGamemode.Server.Managers
if (vMod.ModId == 1) color = 13; if (vMod.ModId == 1) color = 13;
veh.SetSharedData("headlightColor", color); veh.SetSharedData("headlightColor", color);
} }
else if (vMod.Slot == 23)
{
veh.SetMod(23, vMod.ModId);
}
else veh.SetMod(vMod.Slot, vMod.ModId - 1); else veh.SetMod(vMod.Slot, vMod.ModId - 1);
} }
} }
@@ -120,13 +124,20 @@ namespace ReallifeGamemode.Server.Managers
bool onlyRepair = false; bool onlyRepair = false;
ServerVehicle serverVehicle = vehicle.GetServerVehicle(); using var dbContext = new DatabaseContext();
ServerVehicle serverVehicle = vehicle.GetServerVehicle(dbContext);
if (serverVehicle is FactionVehicle factionVehicle && factionVehicle.BuyPrice == 0) if (serverVehicle is FactionVehicle factionVehicle && factionVehicle.BuyPrice == 0)
{ {
player.SendNotification("~r~Dieses Fahrzeug kann aktuell leider nicht getunt werden"); player.SendNotification("~r~Dieses Fahrzeug kann aktuell leider nicht getunt werden");
onlyRepair = true; onlyRepair = true;
} }
if (!IsPlayerAllowedToTuneVehicle(player, serverVehicle, dbContext))
{
onlyRepair = true;
}
player.TriggerEvent("showTuningMenu", false, GetVehicleBasePrice(player.Vehicle), onlyRepair); player.TriggerEvent("showTuningMenu", false, GetVehicleBasePrice(player.Vehicle), onlyRepair);
} }

View File

@@ -767,6 +767,126 @@ namespace ReallifeGamemode.Server.Managers
"fibr",//mod "fibr",//mod
}; };
private static readonly List<string> _restrictedVehicles = new List<string>()
{
"dinghy5",
"kosatka",
"cerberus",
"cerberus2",
"cerberus3",
"firetruk",
"issi4",
"issi5",
"issi6",
"jb700",
"jb7002",
"riot2",
"akula",
"annihilator",
"buzzard",
"havok",
"hunter",
"savage",
"seasparrow",
"valkyrie",
"valkyrie2",
"annihilator2",
"seasparrow2",
"seasparrow3",
"apc",
"barrage",
"chernobog",
"halftrack",
"khanjali",
"minitank",
"rhino",
"scarab",
"scarab2",
"scarab3",
"thruster",
"trailersmall2",
"oppressor",
"oppressor2",
"deathbike",
"deathbike2",
"deathbike3",
"dominator4",
"dominator5",
"dominator6",
"slamvan4",
"slamvan5",
"slamvan6",
"imperator3",
"imperator",
"imperator2",
"impaler2",
"impaler3",
"impaler4",
"tampa3",
"bruiser",
"bruiser2",
"bruiser3",
"brutus",
"brutus2",
"brutus3",
"caracara",
"dune3",
"insurgent",
"insurgent3",
"monster3",
"monster4",
"monster5",
"menacer",
"nightshark",
"fibn2",
"rcbandito",
"minitank",
"technical",
"technical2",
"technical3",
"avenger",
"avenger2",
"bombushka",
"hydra",
"lazer",
"microlight",
"mogul",
"molotok",
"nokota",
"pyro",
"rogue",
"strikeforce",
"seabreeze",
"starling",
"tula",
"volatol",
"alkonost",
"limo2",
"zr380",
"zr3802",
"zr3803",
"ardent",
"deluxo",
"stromberg",
"toreador",
"comet4",
"scramjet",
"vigilante",
"voltic2",
"freight",
"freightcar",
"freightcont1",
"freightcont2",
"freightgrain",
"metrotrain",
"tankercar",
"trailerlarge",
"boxville5",
"mule4",
"speedo4",
"pounder2"
};
private static readonly Dictionary<int, ushort> _serverVehicles = new Dictionary<int, ushort>(); private static readonly Dictionary<int, ushort> _serverVehicles = new Dictionary<int, ushort>();
private static readonly Dictionary<NetHandle, Vector3> lastPositions = new Dictionary<NetHandle, Vector3>(); private static readonly Dictionary<NetHandle, Vector3> lastPositions = new Dictionary<NetHandle, Vector3>();
@@ -785,6 +905,8 @@ namespace ReallifeGamemode.Server.Managers
} }
} }
public static bool IsVehicleRestricted(string name) => _restrictedVehicles.Contains(name.ToLower());
public static void VehicleTimerTick() public static void VehicleTimerTick()
{ {
NAPI.Task.Run(() => NAPI.Task.Run(() =>

View File

@@ -105,6 +105,26 @@ namespace ReallifeGamemode.Server.Managers
"militaryrifle" "militaryrifle"
}; };
private static readonly List<string> _restrictedWeapons = new List<string>()
{
"bat",
"flashlight",
"knuckle",
"nightstick",
"pistol",
"pistol_mk2",
"combatpistol",
"stungun",
"pistol50",
"smg",
"assaultsmg",
"combatpdw",
"pumpshotgun",
"assaultrifle",
"carbinerifle",
"sniperrifle"
};
private static readonly Dictionary<uint, string> causeOfDeath = new Dictionary<uint, string>() private static readonly Dictionary<uint, string> causeOfDeath = new Dictionary<uint, string>()
{ {
{ 2460120199, "Antique Cavalry Dagger"}, { 2460120199, "Antique Cavalry Dagger"},
@@ -341,6 +361,8 @@ namespace ReallifeGamemode.Server.Managers
{ 1470379660 ,"Perico Pistol" }, { 1470379660 ,"Perico Pistol" },
}; };
public static bool IsAllowedWeapon(string name) => _restrictedWeapons.Contains(name.ToLower());
public static bool IsValidHash(uint hash) public static bool IsValidHash(uint hash)
{ {
foreach (WeaponHash vh in Enum.GetValues(typeof(WeaponHash))) foreach (WeaponHash vh in Enum.GetValues(typeof(WeaponHash)))

View File

@@ -76,6 +76,7 @@ namespace ReallifeGamemode.Server.WeaponDeal
vector = WeaponDealPoints.getRndWD_Route(user.FactionId.Value); vector = WeaponDealPoints.getRndWD_Route(user.FactionId.Value);
if (vector == new Vector3()) if (vector == new Vector3())
return; return;
fVeh.SetData<Vector3>("weaponDealPoint", vector); fVeh.SetData<Vector3>("weaponDealPoint", vector);
if (user.Faction.WeaponDealTime > 0) if (user.Faction.WeaponDealTime > 0)
@@ -95,7 +96,7 @@ namespace ReallifeGamemode.Server.WeaponDeal
switch (i) switch (i)
{ {
case 1: case 1:
msg = "Das Madrazo Kartell scheint am Strand noch einige Waffen verbuddelt zu haben"; msg = "Ein paar hochrangige Mitglieder der U.S. Armee versuchen alte sowjetische Waffen loszuwerden";
break; break;
case 2: case 2:
@@ -103,19 +104,15 @@ namespace ReallifeGamemode.Server.WeaponDeal
break; break;
case 3: case 3:
msg = "Ein paar hochrangige Mitglieder der U.S. Armee versuchen alte sowjetische Waffen loszuwerden";
break;
case 4:
msg = "Die Triaden können uns mit östlichen Importen beliefern"; msg = "Die Triaden können uns mit östlichen Importen beliefern";
break; break;
case 5: case 4:
msg = "Die albanische Mafia will wohl wieder Geschäfte mit uns machen"; msg = "Die albanische Mafia will wohl wieder Geschäfte mit uns machen";
break; break;
case 6: case 5:
msg = "Die Waffen der Russen waren schon immer zuverlässig"; msg = "Das Madrazo Kartell scheint am Strand noch einige Waffen verbuddelt zu haben";
break; break;
} }
} }
@@ -127,8 +124,7 @@ namespace ReallifeGamemode.Server.WeaponDeal
ChatService.BroadcastFaction($"~y~[WAFFENDEAL]~s~ {msg}.", user.Faction); ChatService.BroadcastFaction($"~y~[WAFFENDEAL]~s~ {msg}.", user.Faction);
string vehName = NAPI.Vehicle.GetVehicleDisplayName(factionVehicle.Model); ChatService.SendMessage(client, "~y~[WAFFENDEAL]~s~ Steige in den ~y~Transporter ~s~ein und fahre zum Übergabepunkt.");
ChatService.SendMessage(client, $"~y~[WAFFENDEAL]~s~ Steige in den {vehName} ein und fahre zum Übergabepunkt.");
fVeh.SetData("weaponDeal", true); fVeh.SetData("weaponDeal", true);
InventoryManager.RemoveAllItemsfromVehicleInventory(fVeh); InventoryManager.RemoveAllItemsfromVehicleInventory(fVeh);
Faction fac = context.Factions.Where(f => f.Id == user.FactionId).FirstOrDefault(); Faction fac = context.Factions.Where(f => f.Id == user.FactionId).FirstOrDefault();

View File

@@ -11,18 +11,17 @@ namespace ReallifeGamemode.Server.WeaponDeal
public static readonly IReadOnlyCollection<Vector3> WT_Route = new List<Vector3> public static readonly IReadOnlyCollection<Vector3> WT_Route = new List<Vector3>
{ {
//new Vector3(2465.163, 1589.396, 32.72029), ungeeignet new Vector3(-2174.734, 4269.301, 46.95574), // U.S. Armee
new Vector3(1532.045, 1702.775, 107.7561), //Hütte iwo Östlich new Vector3(58.67861, 3717.103, 37.75301), // Lost MC
new Vector3(58.67861, 3717.103, 37.75301), //Lost MC new Vector3(2530.14, 2617.15, 35.76), // Triaden
new Vector3(-2174.734, 4269.301, 46.95574), //Army Base new Vector3(1532.045, 1702.775, 107.7561), // Albanische Mafia
new Vector3(2530.14, 2617.15, 35.76), new Vector3(-3179.78, 820.08, 1.59) // Madrazo Kartell
new Vector3(-3179.78, 820.08, 1.59),
}.AsReadOnly(); }.AsReadOnly();
public static readonly IReadOnlyCollection<Vector3> StaatsFrakWT_Route = new List<Vector3> public static readonly IReadOnlyCollection<Vector3> StaatsFrakWT_Route = new List<Vector3>
{ {
new Vector3(3627.138, 3759.711, 25.515), //Human Labs new Vector3(3627.138, 3759.711, 25.515), //Humane Labs
new Vector3(-1805.300, 3101.446, 29.841) //Staatsfraktions WT Army Base new Vector3(-1805.300, 3101.446, 29.841) //Army Base
}.AsReadOnly(); }.AsReadOnly();
public static Vector3 getRndWD_Route(int factionID) public static Vector3 getRndWD_Route(int factionID)
@@ -42,15 +41,6 @@ namespace ReallifeGamemode.Server.WeaponDeal
factionWeaponDeal[factionID] = rnd.Next(0, WT_Route.Count); factionWeaponDeal[factionID] = rnd.Next(0, WT_Route.Count);
return WT_Route.ElementAt(factionWeaponDeal[factionID]); return WT_Route.ElementAt(factionWeaponDeal[factionID]);
} }
/* if (factionWeaponDeal[factionID] == -1)
{
Random rnd = new Random();
factionWeaponDeal[factionID] = rnd.Next(0, WT_Route.Count - 1);
}
return WT_Route.ElementAt(factionWeaponDeal[factionID]);
*/
} }
} }
} }