public PlVers:__version =
{
version = 5,
filevers = "1.5.2-dev+3931",
date = "07/05/2017",
time = "20:17:14"
};
new Float:NULL_VECTOR[3];
new String:NULL_STRING[4];
public Extension:__ext_core =
{
name = "Core",
file = "core",
autoload = 0,
required = 0,
};
new MaxClients;
public Extension:__ext_sdktools =
{
name = "SDKTools",
file = "sdktools.ext",
autoload = 1,
required = 1,
};
public Extension:__ext_cstrike =
{
name = "cstrike",
file = "games/game.cstrike.ext",
autoload = 0,
required = 1,
};
new g_iMode;
new Handle:g_hTimer;
new bool:g_bInZone[66];
new Handle:g_hZonesArray;
public __ext_core_SetNTVOptional()
{
MarkNativeAsOptional("GetFeatureStatus");
MarkNativeAsOptional("RequireFeature");
MarkNativeAsOptional("AddCommandListener");
MarkNativeAsOptional("RemoveCommandListener");
MarkNativeAsOptional("BfWriteBool");
MarkNativeAsOptional("BfWriteByte");
MarkNativeAsOptional("BfWriteChar");
MarkNativeAsOptional("BfWriteShort");
MarkNativeAsOptional("BfWriteWord");
MarkNativeAsOptional("BfWriteNum");
MarkNativeAsOptional("BfWriteFloat");
MarkNativeAsOptional("BfWriteString");
MarkNativeAsOptional("BfWriteEntity");
MarkNativeAsOptional("BfWriteAngle");
MarkNativeAsOptional("BfWriteCoord");
MarkNativeAsOptional("BfWriteVecCoord");
MarkNativeAsOptional("BfWriteVecNormal");
MarkNativeAsOptional("BfWriteAngles");
MarkNativeAsOptional("BfReadBool");
MarkNativeAsOptional("BfReadByte");
MarkNativeAsOptional("BfReadChar");
MarkNativeAsOptional("BfReadShort");
MarkNativeAsOptional("BfReadWord");
MarkNativeAsOptional("BfReadNum");
MarkNativeAsOptional("BfReadFloat");
MarkNativeAsOptional("BfReadString");
MarkNativeAsOptional("BfReadEntity");
MarkNativeAsOptional("BfReadAngle");
MarkNativeAsOptional("BfReadCoord");
MarkNativeAsOptional("BfReadVecCoord");
MarkNativeAsOptional("BfReadVecNormal");
MarkNativeAsOptional("BfReadAngles");
MarkNativeAsOptional("BfGetNumBytesLeft");
MarkNativeAsOptional("PbReadInt");
MarkNativeAsOptional("PbReadFloat");
MarkNativeAsOptional("PbReadBool");
MarkNativeAsOptional("PbReadString");
MarkNativeAsOptional("PbReadColor");
MarkNativeAsOptional("PbReadAngle");
MarkNativeAsOptional("PbReadVector");
MarkNativeAsOptional("PbReadVector2D");
MarkNativeAsOptional("PbGetRepeatedFieldCount");
MarkNativeAsOptional("PbReadRepeatedInt");
MarkNativeAsOptional("PbReadRepeatedFloat");
MarkNativeAsOptional("PbReadRepeatedBool");
MarkNativeAsOptional("PbReadRepeatedString");
MarkNativeAsOptional("PbReadRepeatedColor");
MarkNativeAsOptional("PbReadRepeatedAngle");
MarkNativeAsOptional("PbReadRepeatedVector");
MarkNativeAsOptional("PbReadRepeatedVector2D");
MarkNativeAsOptional("PbSetInt");
MarkNativeAsOptional("PbSetFloat");
MarkNativeAsOptional("PbSetBool");
MarkNativeAsOptional("PbSetString");
MarkNativeAsOptional("PbSetColor");
MarkNativeAsOptional("PbSetAngle");
MarkNativeAsOptional("PbSetVector");
MarkNativeAsOptional("PbSetVector2D");
MarkNativeAsOptional("PbAddInt");
MarkNativeAsOptional("PbAddFloat");
MarkNativeAsOptional("PbAddBool");
MarkNativeAsOptional("PbAddString");
MarkNativeAsOptional("PbAddColor");
MarkNativeAsOptional("PbAddAngle");
MarkNativeAsOptional("PbAddVector");
MarkNativeAsOptional("PbAddVector2D");
MarkNativeAsOptional("PbReadMessage");
MarkNativeAsOptional("PbReadRepeatedMessage");
MarkNativeAsOptional("PbAddMessage");
VerifyCoreVersion();
return 0;
}
bool:operator>(Float:,Float:)(Float:oper1, Float:oper2)
{
return FloatCompare(oper1, oper2) > 0;
}
bool:operator>=(Float:,Float:)(Float:oper1, Float:oper2)
{
return FloatCompare(oper1, oper2) >= 0;
}
bool:operator<=(Float:,Float:)(Float:oper1, Float:oper2)
{
return FloatCompare(oper1, oper2) <= 0;
}
public OnPluginStart()
{
g_hZonesArray = CreateArray(1, 0);
HookEvent("round_freeze_end", OnRoundStart, EventHookMode:1);
HookEvent("round_end", OnRoundEnd, EventHookMode:1);
return 0;
}
bool:IsClientInZone(&iClient, Float:flMins[3], Float:flMaxs[3])
{
decl Float:flOrigin[3];
GetClientAbsOrigin(iClient, flOrigin);
new var1;
if (flOrigin[0] >= flMins[0] && flOrigin[0] <= flMaxs[0] && flOrigin[1] >= flMins[1] && flOrigin[1] <= flMaxs[1] && flOrigin[2] >= flMins[2] && flOrigin[2] <= flMaxs[2])
{
return true;
}
return false;
}
CloseHandleArray(Handle:adt_array)
{
new i;
while (GetArraySize(adt_array) > i)
{
CloseHandle(GetArrayCell(adt_array, i, 0, false));
i++;
}
return 0;
}
public OnMapStart()
{
CloseHandleArray(g_hZonesArray);
ClearArray(g_hZonesArray);
decl String:sMap[128];
GetCurrentMap(sMap, 128);
if (strncmp(sMap, "de_", 3, true))
{
if (strncmp(sMap, "cs_", 3, true))
{
g_iMode = 0;
}
g_iMode = 1;
}
else
{
g_iMode = 2;
}
decl String:config[256];
BuildPath(PathType:0, config, 256, "data/zones/%s.cfg", sMap);
if (FileExists(config, false))
{
new Handle:hKeyValues = CreateKeyValues("Zones", "", "");
FileToKeyValues(hKeyValues, config);
if (!KvGotoFirstSubKey(hKeyValues, true))
{
CloseHandle(hKeyValues);
return 0;
}
decl Float:vector1[3];
decl Float:vector2[3];
decl Float:fMin[3];
decl Float:fMax[3];
decl Handle:TempArray;
decl i;
do {
TempArray = CreateArray(3, 0);
KvGetVector(hKeyValues, "coordinates 1", vector1, 1688);
KvGetVector(hKeyValues, "coordinates 2", vector2, 1688);
i = 0;
while (i < 3)
{
if (vector1[i] > vector2[i])
{
fMin[i] = vector2[i];
fMax[i] = vector1[i];
}
else
{
fMin[i] = vector1[i];
fMax[i] = vector2[i];
}
i++;
}
PushArrayArray(TempArray, fMin, 3);
PushArrayArray(TempArray, fMax, 3);
PushArrayCell(TempArray, KvGetNum(hKeyValues, "restrict_team", 0));
PushArrayCell(g_hZonesArray, TempArray);
} while (KvGotoNextKey(hKeyValues, true));
CloseHandle(hKeyValues);
}
return 0;
}
public OnRoundEnd(Handle:event, String:name[], bool:dontBroadcast)
{
if (g_hTimer)
{
KillTimer(g_hTimer, false);
g_hTimer = MissingTAG:0;
}
return 0;
}
public OnRoundStart(Handle:event, String:name[], bool:dontBroadcast)
{
if (g_hTimer)
{
KillTimer(g_hTimer, false);
g_hTimer = MissingTAG:0;
}
new i = 1;
while (i <= MaxClients)
{
g_bInZone[i] = 0;
i++;
}
g_hTimer = CreateTimer(20.0, Timer_StartCheck, any:0, 0);
return 0;
}
public Action:Timer_StartCheck(Handle:timer)
{
Timer_Check(Handle:0);
g_hTimer = CreateTimer(7.0, Timer_Check, any:0, 1);
return Action:4;
}
public Action:Timer_Check(Handle:timer)
{
new i = 1;
new iTeam;
new j;
new iSize = GetArraySize(g_hZonesArray);
new Handle:hZone;
new iZoneTeam;
new Float:fMin[3] = 0.0;
new Float:fMax[3] = 0.0;
new bool:bInZone;
new bool:b;
while (i <= MaxClients)
{
new var1;
if (IsClientInGame(i) && IsPlayerAlive(i))
{
iTeam = GetClientTeam(i);
if (iTeam > 1)
{
bInZone = g_bInZone[i];
b = false;
j = 0;
while (j < iSize)
{
hZone = GetArrayCell(g_hZonesArray, j, 0, false);
iZoneTeam = GetArrayCell(hZone, 2, 0, false);
new var2;
if (g_iMode != 1 && iTeam != g_iMode && iTeam != iZoneTeam)
{
}
else
{
GetArrayArray(hZone, 0, fMin, 3);
GetArrayArray(hZone, 1, fMax, 3);
if (IsClientInZone(i, fMin, fMax))
{
if (bInZone)
{
PrintToChat(i, "\x07FF0000Покиньте зону респы!");
SlapPlayer(i, 25, true);
}
else
{
PrintToChat(i, "\x07FF0000У вас есть 7 секунд чтобы покинуть зону респы!");
g_bInZone[i] = 1;
}
b = true;
if (!b)
{
g_bInZone[i] = 0;
}
}
}
j++;
}
if (!b)
{
g_bInZone[i] = 0;
}
}
}
i++;
}
return Action:0;
}