Merge branch 'develop' of https://development.life-of-german.org/log-gtav/reallife-gamemode into develop
This commit is contained in:
@@ -259,7 +259,7 @@ namespace ReallifeGamemode.Server.Commands
|
||||
}
|
||||
break;
|
||||
case "all":
|
||||
if(!player.HasData("togall"))
|
||||
if (!player.HasData("togall"))
|
||||
{
|
||||
player.SetData("togip", true);
|
||||
player.SetData("togdeath", true);
|
||||
@@ -314,6 +314,12 @@ namespace ReallifeGamemode.Server.Commands
|
||||
player.TriggerEvent("toggleTSupportMode", false);
|
||||
player.SetData("SAdminduty", false);
|
||||
ChatService.SendMessage(player, "!{#ee4d2e}** " + "Du befindest dich nicht mehr im T-Support");
|
||||
|
||||
if (user.GetData<bool>("adminUnshow") == true)
|
||||
{
|
||||
user.SetData("adminUnshow", false);
|
||||
player.TriggerEvent("toggleAdminUnshowMode", false);
|
||||
}
|
||||
}
|
||||
user.SetBlipAndNametagColor();
|
||||
}
|
||||
@@ -351,7 +357,7 @@ namespace ReallifeGamemode.Server.Commands
|
||||
[Command("o", "~m~Benutzung: ~s~/o [Nachricht]", GreedyArg = true)]
|
||||
public void CmdAdminO(Player player, string message)
|
||||
{
|
||||
if(!player.IsLoggedIn())
|
||||
if (!player.IsLoggedIn())
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -1784,12 +1790,16 @@ namespace ReallifeGamemode.Server.Commands
|
||||
[Command("spectate", "~m~Benutzung: ~s~/spectate [NAME/ID]", Alias = "spec")]
|
||||
public void CmdAdminSpectate(Player player, string targetname = null)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
||||
User user = player.GetUser();
|
||||
if (!user.IsAdmin(AdminLevel.ADMIN))
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
}
|
||||
Player target;
|
||||
|
||||
bool currentStatus = player.GetData<bool>("adminUnshow");
|
||||
|
||||
if (targetname != null)
|
||||
{
|
||||
target = PlayerService.GetPlayerByNameOrId(targetname);
|
||||
@@ -1798,19 +1808,44 @@ namespace ReallifeGamemode.Server.Commands
|
||||
ChatService.PlayerNotFound(player);
|
||||
return;
|
||||
}
|
||||
player.TriggerEvent("SERVER:ADMIN_SPECTATE", target);
|
||||
|
||||
if (target.Name == player.Name)
|
||||
{
|
||||
ChatService.ErrorMessage(player, "Du kannst dich nicht selbst spectaten");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!currentStatus)
|
||||
{
|
||||
currentStatus = !currentStatus;
|
||||
player.SetData("adminUnshow", currentStatus);
|
||||
}
|
||||
player.TriggerEvent("toggleAdminUnshowMode", currentStatus);
|
||||
player.SetData<Vector3>("specPosition", player.Position);
|
||||
|
||||
player.SafeTeleport(target.Position);
|
||||
|
||||
NAPI.Task.Run(() =>
|
||||
{
|
||||
player.TriggerEvent("SERVER:ADMIN_SPECTATE", target);
|
||||
}, 100);
|
||||
}
|
||||
else
|
||||
{
|
||||
currentStatus = !currentStatus;
|
||||
player.SetData("adminUnshow", currentStatus);
|
||||
player.TriggerEvent("SERVER:ADMIN_STOP_SPECTATE");
|
||||
}
|
||||
player.TriggerEvent("toggleAdminUnshowMode", currentStatus);
|
||||
player.SafeTeleport(player.GetData<Vector3>("specPosition"));
|
||||
}
|
||||
user.SetBlipAndNametagColor();
|
||||
}
|
||||
|
||||
[Command("aunshow", "~m~Benutzung:~s~ /aunshow")]
|
||||
public void CmdAdminUnshow(Player player)
|
||||
{
|
||||
User user = player.GetUser();
|
||||
if (!user.IsAdmin(AdminLevel.ADMIN))
|
||||
if (!user.IsAdmin(AdminLevel.HEADADMIN))
|
||||
{
|
||||
ChatService.NotAuthorized(player);
|
||||
return;
|
||||
@@ -1822,9 +1857,9 @@ namespace ReallifeGamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
bool currentStatus = user.GetData<bool>("adminUnshow");
|
||||
bool currentStatus = player.GetData<bool>("adminUnshow");
|
||||
currentStatus = !currentStatus;
|
||||
user.SetData("adminUnshow", currentStatus);
|
||||
player.SetData("adminUnshow", currentStatus);
|
||||
player.TriggerEvent("toggleAdminUnshowMode", currentStatus);
|
||||
|
||||
user.SetBlipAndNametagColor();
|
||||
@@ -2169,18 +2204,15 @@ namespace ReallifeGamemode.Server.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
Weather weatherBefore = NAPI.World.GetWeather();
|
||||
NAPI.World.SetWeather(weather);
|
||||
Weather weatherAfter = NAPI.World.GetWeather();
|
||||
Weather weatherBefore = World.WeatherSync.Weather;
|
||||
World.WeatherSync.SetWeather(weather);
|
||||
Weather weatherAfter = World.WeatherSync.Weather;
|
||||
|
||||
ChatService.SendMessage(player, "~w~Wetter geändert: " + weatherAfter);
|
||||
|
||||
if (!weatherBefore.Equals(weatherAfter))
|
||||
{
|
||||
ChatService.SendMessage(player, "~w~Wetter geändert: " + NAPI.World.GetWeather());
|
||||
NAPI.Notification.SendNotificationToAll("Das Wetter wurde von ~g~" + player.Name + " ~s~auf ~g~" + NAPI.World.GetWeather() + "~s~ geändert.", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
ChatService.SendMessage(player, "~w~Das Wetter konnte nicht geändert werden");
|
||||
NAPI.Notification.SendNotificationToAll("Das Wetter wurde von ~g~" + player.Name + " ~s~auf ~g~" + weatherAfter + "~s~ geändert.", true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3914,7 +3946,7 @@ namespace ReallifeGamemode.Server.Commands
|
||||
[RemoteEvent("Noclip")]
|
||||
public void Noclip(Player player)
|
||||
{
|
||||
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
||||
if (!player.GetUser().IsAdmin(AdminLevel.HEADADMIN))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace ReallifeGamemode.Server.Events
|
||||
public class UpdateCharacterElevator : Script
|
||||
{
|
||||
[RemoteEvent("sendPlayerToStage")]
|
||||
public void SaveWeaponSelection(Player client, string stage)
|
||||
public void SendPlayerToStageRemoteEvent(Player client, string stage)
|
||||
{
|
||||
ElevatorPoint elevator = PositionManager.ElevatorPoints.Find(e => e.Stage == stage);
|
||||
if (elevator != null)
|
||||
|
||||
39
ReallifeGamemode.Server/Events/Waypoint.cs
Normal file
39
ReallifeGamemode.Server/Events/Waypoint.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Server.Services;
|
||||
using ReallifeGamemode.Services;
|
||||
|
||||
namespace ReallifeGamemode.Server.Events
|
||||
{
|
||||
class Waypoint : Script
|
||||
{
|
||||
[RemoteEvent("SERVER:waypointToDriver")]
|
||||
public void setWaypointToDriver(Player player, float x, float y)
|
||||
{
|
||||
if (!player.IsInVehicle)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.VehicleSeat == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Entity entity = NAPI.Vehicle.GetVehicleDriver(player.Vehicle);
|
||||
Player driver = PlayerService.GetPlayerByNameOrId(entity.Value.ToString());
|
||||
|
||||
if (driver == null || entity == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
driver.TriggerEvent("SERVER:Util_setWaypoint", x, y);
|
||||
driver.SendNotification(player.Name + " hat dir eine Markierung auf der Karte gesetzt");
|
||||
player.SendNotification("Du hast " + driver.Name + " eine Markierung auf der Karte gesetzt");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -356,7 +356,7 @@ namespace ReallifeGamemode.Server.Extensions
|
||||
}
|
||||
|
||||
bool duty = user.GetData<bool>("duty");
|
||||
bool adminUnshow = user.GetData<bool>("adminUnshow");
|
||||
bool adminUnshow = player.GetData<bool>("adminUnshow");
|
||||
|
||||
if (adminUnshow)
|
||||
{
|
||||
|
||||
@@ -148,6 +148,8 @@ namespace ReallifeGamemode.Server
|
||||
LoadManager.LoadLoadManager();
|
||||
Rentcar.Setup();
|
||||
|
||||
World.WeatherSync.Load();
|
||||
|
||||
TempBlip tempBlip = new TempBlip()
|
||||
{
|
||||
Color = 1,
|
||||
|
||||
@@ -691,14 +691,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
"thrax",
|
||||
"zorrusso",
|
||||
"zion3",
|
||||
"lsfd", //Mod
|
||||
"lsfd2", //Mod
|
||||
"lsfd3", //Mod
|
||||
"lsfd4", //Mod
|
||||
"lsfd5", //Mod
|
||||
"lsfdtruck", //Mod
|
||||
"lsfdtruck2", //Mod
|
||||
"lsfdtruck3", //Mod
|
||||
"polbullet", //Mod
|
||||
"polbullet2", //Mod
|
||||
"sherbullet", //Mod
|
||||
@@ -773,11 +765,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
"fibj",//mod
|
||||
"fibn3",//mod
|
||||
"fibr",//mod
|
||||
"vicechee", //mod
|
||||
"sheriffcoqm", //mod
|
||||
"polcoquette", //mod
|
||||
"pdrafter", //mod
|
||||
"pdrafter2", //mod
|
||||
};
|
||||
|
||||
private static readonly Dictionary<int, ushort> _serverVehicles = new Dictionary<int, ushort>();
|
||||
|
||||
@@ -209,8 +209,8 @@ namespace ReallifeGamemode.Server.Wanted
|
||||
|
||||
public static void BreakOut(Player player)
|
||||
{
|
||||
User user = player.GetUser();
|
||||
|
||||
if (player.IsTSupport()) return;
|
||||
User user = player.GetUser();
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
user = player.GetUser(dbContext);
|
||||
@@ -225,8 +225,8 @@ namespace ReallifeGamemode.Server.Wanted
|
||||
[RemoteEvent("SERVER:BreakOutIfInPrison")]
|
||||
public void breakOutIfInPrison(Player player)
|
||||
{
|
||||
if (player.IsTSupport()) return;
|
||||
User user = player.GetUser();
|
||||
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
if (Jailtime.ContainsKey(user.Id))
|
||||
|
||||
103
ReallifeGamemode.Server/World/WeatherSync.cs
Normal file
103
ReallifeGamemode.Server/World/WeatherSync.cs
Normal file
@@ -0,0 +1,103 @@
|
||||
using System;
|
||||
using System.Timers;
|
||||
using GTANetworkAPI;
|
||||
|
||||
/**
|
||||
* @overview Life of German Reallife - WeatherSync
|
||||
* @author Alex_qp
|
||||
* @copyright (c) 2008 - 2021 Life of German
|
||||
*/
|
||||
|
||||
namespace ReallifeGamemode.Server.World
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Serverwide WeatherSystem (+ sync)
|
||||
/// </summary>
|
||||
static class WeatherSync
|
||||
{
|
||||
// SETTINGS
|
||||
private const uint _syncInterval = 5 * 60 * 1000; // 5 min
|
||||
private static readonly int[] _countRange = new int[] { 3, 5 }; // min, max both inclusive. How often should weather be synced before actual changing?
|
||||
|
||||
// INTERNAL
|
||||
private static int _count = 0;
|
||||
private static int _targetCount = GetNewTargetCount();
|
||||
|
||||
/// <summary>
|
||||
/// Get/Set the current weather.
|
||||
/// <remarks>Only use in main thread!</remarks>
|
||||
/// </summary>
|
||||
public static Weather Weather
|
||||
{
|
||||
get { return NAPI.World.GetWeather(); }
|
||||
set { NAPI.World.SetWeather(value); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set the current weather by string.
|
||||
/// </summary>
|
||||
/// <remarks>Only use in main thread!</remarks>
|
||||
/// </summary>
|
||||
/// <param name="weather"></param>
|
||||
public static void SetWeather(string weather)
|
||||
{
|
||||
NAPI.World.SetWeather(weather);
|
||||
}
|
||||
|
||||
private static Timer weatherTimer;
|
||||
|
||||
/// <summary>
|
||||
/// Loads/Starts the WeatherSync.
|
||||
/// </summary>
|
||||
public static void Load()
|
||||
{
|
||||
weatherTimer = new Timer(_syncInterval);
|
||||
weatherTimer.Start();
|
||||
weatherTimer.Elapsed += OnWeatherTimer;
|
||||
NAPI.Util.ConsoleOutput("Loaded WeatherSync");
|
||||
}
|
||||
|
||||
private static int GetNewTargetCount()
|
||||
{
|
||||
return new Random().Next(_countRange[0], _countRange[1] + 1);
|
||||
}
|
||||
|
||||
private static Weather GetRandomWeather(Weather[] weathers)
|
||||
{
|
||||
return weathers[new Random().Next(weathers.Length)];
|
||||
}
|
||||
|
||||
private static void OnWeatherTimer(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
NAPI.Task.Run(() =>
|
||||
{
|
||||
if (_count < _targetCount)
|
||||
{
|
||||
// sync weather for all players
|
||||
_count++;
|
||||
Weather = Weather;
|
||||
}
|
||||
else
|
||||
{
|
||||
// change weather and reset counters
|
||||
_count = 0;
|
||||
_targetCount = GetNewTargetCount();
|
||||
Weather = Weather switch
|
||||
{
|
||||
Weather.EXTRASUNNY => GetRandomWeather(new Weather[] { Weather.EXTRASUNNY, Weather.CLEAR }),
|
||||
Weather.CLEAR => GetRandomWeather(new Weather[] { Weather.EXTRASUNNY, Weather.CLEAR, Weather.CLOUDS, Weather.SMOG }),
|
||||
Weather.CLOUDS => GetRandomWeather(new Weather[] { Weather.CLEAR, Weather.CLOUDS, Weather.SMOG, Weather.FOGGY, Weather.OVERCAST }),
|
||||
Weather.SMOG => GetRandomWeather(new Weather[] { Weather.CLOUDS, Weather.SMOG, Weather.FOGGY, Weather.OVERCAST }),
|
||||
Weather.FOGGY => GetRandomWeather(new Weather[] { Weather.CLOUDS, Weather.SMOG, Weather.FOGGY, Weather.OVERCAST, Weather.RAIN }),
|
||||
Weather.OVERCAST => GetRandomWeather(new Weather[] { Weather.CLOUDS, Weather.SMOG, Weather.RAIN, Weather.CLEARING }), // may add overcast
|
||||
Weather.RAIN => GetRandomWeather(new Weather[] { Weather.OVERCAST, Weather.RAIN, Weather.CLEARING, Weather.THUNDER }),
|
||||
Weather.THUNDER => GetRandomWeather(new Weather[] { Weather.RAIN, Weather.THUNDER, Weather.CLEARING }),
|
||||
Weather.CLEARING => GetRandomWeather(new Weather[] { Weather.CLEAR, Weather.CLOUDS, Weather.CLEARING }),
|
||||
_ => GetRandomWeather(new Weather[] { Weather.EXTRASUNNY, Weather.CLEAR }),
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user