using System;
using System.Collections.Generic;
using GTANetworkAPI;
using Localization;
using NeptuneEvo.Handles;
using NeptuneEvo.Players;
using NeptuneEvo.Functions;
using NeptuneEvo.Quests;
using Redage.SDK;
using NeptuneEvo.Character;
namespace NeptuneEvo.Core
{
class SafeZones : Script
{
private static readonly nLog Log = new nLog("Core.SafeZones");
private static List<int> GreenZoneDisabled = new List<int>();
public enum ZoneName
{
lspd = 1,
MafiaGame2 = 2,
MafiaGame1 = 3,
Ticket = 4,
EMS = 5,
EMSpark = 6,
Bloods = 7,
Families = 8,
MG13 = 9,
Ballas = 10,
LCN = 11,
PDPARK = 12,
YAK = 13,
Cityhall = 14,
ArmenianPark = 15,
AM = 16,
RM = 17,
Agency = 18,
Tequila = 19,
ByVitalya = 20,
Sheriffs2 = 21,
Sheriffs = 22,
govfib = 23,
Court = 24,
Iglesia = 25,
SaleTrees = 26,
SaleOres = 27,
GovMine = 29,
Tent2 = 30,
TentBeach = 31,
BySource3 = 32,
BySource2 = 33,
BySource1 = 34,
kazikulica = 35,
lesnik3 = 37,
lesnik = 38,
bagama = 39,
vanilla = 40,
lesnik2 = 41,
lesnik4 = 42,
lesink5 = 43,
lesnik6 = 44,
mine4 = 45,
mine3 = 46,
mine2 = 47,
mine1 = 48,
govmineold = 49,
lsnews = 50,
questems2 = 51,
questems = 52,
eventsarena = 53,
DonateShopNew = 54,
BUS1 = 55,
MatWarZone = 56,
Spawn = 57,
Organization = 58,
authschool = 59,
TAXI = 60,
Hotel3 = 61,
Hotel2 = 62,
Hotel1 = 63,
electric = 64,
automech = 65,
collector = 66,
trucker = 67,
gopostal = 68,
kazikinside = 69,
vagos = 70,
GolfCourse = 71,
NGBase = 72,
EMSStreet = 74,
BeachParty2 = 77,
LumberJob = 78,
MiningJob = 79,
OriginalArena = 80,
FiB = 81,
NGCityBase = 83,
Arena = 84
}
public static bool IsSafeZone(int index, ZoneName name) => index == (int) name;
[RemoteEvent("IsSafeZone")]
public void IsSafeZone(ExtPlayer player, bool toggled)
{
try
{
var sessionData = player.GetSessionData();
if (sessionData == null) return;
sessionData.IsSafeZone = toggled;
player.SetSharedData("SZ", toggled);
}
catch (Exception e)
{
Log.Write($"OpenInventory Exception: {e.ToString()}");
}
}
[RemoteEvent("inGreenZone")]
public void InSafeZone(ExtPlayer player, int index)
{
var sessionData = player.GetSessionData();
if (sessionData == null)
return;
if (!GreenZoneDisabled.Contains(index) && !sessionData.WarData.IsWarZone)
Trigger.ClientEvent(player, "safeZone", true);
if (IsSafeZone(index, ZoneName.EMS))
qMain.UpdateQuestsStage(player, Zdobich.QuestName, (int)zdobich_quests.Stage31, 1, isUpdateHud: true);
if (IsSafeZone(index, ZoneName.lspd))
qMain.UpdateQuestsStage(player, Zdobich.QuestName, (int)zdobich_quests.Stage33, 1, isUpdateHud: true);
sessionData.InsideSafeZone = index;
}
[RemoteEvent("outGreenZone")]
public void OutSafeZone(ExtPlayer player, int index)
{
var sessionData = player.GetSessionData();
if (sessionData == null) return;
if (!GreenZoneDisabled.Contains(index))
Trigger.ClientEvent(player, "safeZone", false);
if (sessionData.InsideSafeZone == index)
sessionData.InsideSafeZone = -1;
}
[Command(AdminCommands.Szstate)]
public static void CMD_SZState(ExtPlayer player, int sz) // command /szstate [id] - turns specified Green Zone ON or OFF
{
try
{
// check if the player has access to this admin command
if (!CommandsAccess.CanUseCmd(player, AdminCommands.Szstate)) return;
var state = GreenZoneDisabled.Contains(sz);
ChangeDamageState(sz, state);
// get all the character data for the person using this command
var characterData = player.GetCharacterData();
// check to see if GZ is enabled or disabled, send notifications and update admin logs and database
if (!state)
{
Admin.AdminsLog(characterData.AdminLVL, $"{Chars.Models.ChatColors.Red}[WARNING] {Chars.Models.ChatColors.AdminChat}{player.Name.Replace('_', ' ')} ({characterData.UUID}) DISABLED Green Zone ({sz})", 2, "#D289FF", true, hideAdminLevel: 6);
GameLog.Admin($"{player.Name.Replace('_', ' ')} ({characterData.UUID})", $"DISABLED Green Zone ({sz})", $"");
}
else
{
Admin.AdminsLog(characterData.AdminLVL, $"{Chars.Models.ChatColors.Green}[SUCCESS] {Chars.Models.ChatColors.AdminChat}{player.Name.Replace('_', ' ')} ({characterData.UUID}) ENABLED Green Zone ({sz})", 2, "#D289FF", true, hideAdminLevel: 6);
GameLog.Admin($"{player.Name.Replace('_', ' ')} ({characterData.UUID})", $"ENABLED Green Zone ({sz})", $"");
}
if (!state)
GreenZoneDisabled.Add(sz);
else
GreenZoneDisabled.Remove(sz);
}
catch (Exception e)
{
Log.Write($"CMD_SZState Exception: {e.ToString()}");
}
}
public static void ChangeDamageState(int sz, bool state) // allows you to enable or disable the ability to fight in any available safe zone by key
{
try
{
foreach (ExtPlayer foreachPlayer in NeptuneEvo.Character.Repository.GetPlayers())
{
try
{
var foreachSessionData = foreachPlayer.GetSessionData();
if (foreachSessionData == null) continue;
if (foreachSessionData.InsideSafeZone == sz)
{
if (state)
Trigger.ClientEvent(foreachPlayer, "safeZone", true);
else
Trigger.ClientEvent(foreachPlayer, "safeZone", false);
}
}
catch (Exception e)
{
Log.Write($"ChangeDamageState Foreach Exception: {e.ToString()}");
}
}
}
catch (Exception e)
{
Log.Write($"ChangeDamageState Exception: {e.ToString()}");
}
}
}
}