Собственно речь про расширения VPPAdmintools
1 Автор собирает IP серверов где работает админка
2 Если надо он заносит ip в некий черный список, сервер при обращении к его "сайту" получит инфу, что сервер в блоке и скрипт не даст подключаться игрокам
Само расширение - код - спасибо комраду @Selleti
modded class MissionServer
{
private string vppatlockmessage = "Server is Currently Locked!";
private string serverIP;
private bool violatedRules = false;
void MissionServer()
{
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.vppapi, 5000.0, false);
serverIP = GetServerIP();
}
private void vppapi()
{
VPPATapiCB cb = new VPPATapiCB( this );
CURLContext ctx = GetCURLCore().GetCURLContext("http://54.39.130.144:5600");
ctx.GET( cb, string.Format( "/Validate?address=%1", serverIP ) );
}
void setStatus(bool state)
{
violatedRules = state;
if ( state )
vppatlockmessage = "Server Locked. Please contact the developer of the following mod [ VPPAdminTools ]\nEmail: vanillaplusplusdayz@gmail.com\nDiscord: discord.gg/GWXN2bB";
}
void ForceKickPlayers()
{
GetRPCManager().SendRPC( "RPC_MissionGameplay", "KickClientHandle", new Param1<string>( vppatlockmessage ), true, NULL);
array<PlayerIdentity> identities = new array<PlayerIdentity>;
GetGame().GetPlayerIndentities( identities );
foreach(ref PlayerIdentity iden: identities)
{
GetGame().ChatPlayer("#kick " + iden.GetName());
Print(vppatlockmessage);
}
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove(this.ForceKickPlayers);
}
override void OnEvent(EventType eventTypeId, Param params)
{
if ( violatedRules )
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.ForceKickPlayers, 3500, false);
else
super.OnEvent(eventTypeId,params);
}
string GetServerIP()
{
string ip;
if (GetCLIParam("ip", ip))
{
return ip;
}
return "0.0.0.0";
}
};
class VPPATapiCB: CURLCallback
{
private string response;
private MissionServer serverMission;
void VPPATapiCB(MissionServer ms)
{
serverMission = ms;
}
override void OnSuccess( string data, int dataSize )
{
response = data;
if ( response == "true" )
serverMission.setStatus(true);
}
};
И собственно 2 фикса для серверного мода
1 Удаляет расширение из загруженных модов вообще - автор Selleti
выполнено в виде конфига мода
class CfgPatches
{
class VPPATExtensions_FIX
{
units[] = {};
weapons[] = {};
requiredVersion = 0.1;
requiredAddons[] = {"DZM_VPPATExtensions"};
};
};
class CfgMods
{
delete VPPATExtensions;
};
2 Удаляет из очереди вызов функицию которая ставится в очередь в конструкторе класса MissionServer в моде VPPAdmintools в скрипте из обфусцированного VPPExtensions.pbo - автор - ну в общем пофигу - просто все
выполнено в виде скрипта
modded class MissionServer extends MissionBase
{
void MissionServer()
{
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove(this.vppapi);
}
}
За сим раскланиваюсь
Всегда Ваш