filipok
Участник
- Сообщения
- 72
- Реакции
- 28
- Автор ресурса
- #41
Лучше бы это в OnPluginStart() делать, а там просто сброс "древа" и считывать.C-подобный:kvMapLimit = CreateKeyValues("MapZones");
P.S Желательно чтобы настройки maplimit.ini применялись простой сменой карты (сейчас нужно останавливать сервер).
Вот почему так сделаноДелай загрузку в OnMapStart()
Сделал, но смысла не уловил.Ничего подобного. Здесь нужен просто int в цикле.C-подобный:static int i; for(
Увы, так не получается, пробовал так:Тогда ничем не оправдан вызов OnMapStart(). Сделать всё в одном, во втором.C-подобный:void OnConfigsExecuted()
PHP:
}
public void OnConfigsExecuted(){
char MapName[16];
GetCurrentMap(MapName, sizeof(MapName));
for (int i = 0; i < sizeof(MZones); ++i){
MZones[i][0] = 0;
}
KvRewind(kvMapLimit);
if(KvJumpToKey(kvMapLimit, MapName, false)){
KvGetString(kvMapLimit, "Zone_0", MZones[0], PLATFORM_MAX_PATH);
KvGetString(kvMapLimit, "Zone_1", MZones[1], PLATFORM_MAX_PATH);
......................................
}
}
Спасибо, буду иметь ввиду.А там без разницы, в игре игрок или нет. Просто ставь массив в false.C-подобный:if (IsClientInGame(i)){ AlreadyNotifyed[i] = false;
Угу, сделано.Лучше запускай один таймер, более ранний, а после его исполнения - второй, прямо в нём (с секундной задержкой, если по коду).C-подобный:CreateTimer((BURY_TIME - 1.0), ResetNotification, client); CreateTimer(BURY_TIME, Timer_Callout, client);
Как было запущено, так и осталось... Но, вроде собираешься менять способы хука, так что, посмотрим.C-подобный:void OnClientPostAdminCheck(int client)
PHP:
#pragma semicolon 1
#include <sourcemod>
#include <sdkhooks>
#include <sdktools>
#define PLUGIN_MAINNAME "MapLimit"
#define PLUGIN_NAME "MapLimit"
#define PLUGIN_AUTHOR "filip fixed by AlmazON"
#define PLUGIN_VERSION "2.0.1"
#define MAX_PLAYERS_WHITHOUT_MIDDLE 20
#define BURY_TIME 3.0
bool AlreadyNotifyed[MAXPLAYERS+1];
bool IsPlayerInZone[MAXPLAYERS+1];
bool OneTimeNotify;
bool IsCorrectMap;
bool SpawnProtect;
int CountPlayers;
char MZones[12][PLATFORM_MAX_PATH];
Handle kvMapLimit;
public void OnPluginStart(){
HookEvent("round_freeze_end", Event_RoundFreezeEnd, EventHookMode_PostNoCopy);
HookEvent("player_footstep", OnPlayerFootStep);
HookEvent("round_end", Event_RoundEnd);
RegAdminCmd("sm_place", WhereAmI, ADMFLAG_BAN);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////CheckZoneNameComand (for test)/////////////////////////////////////////////////
public Action WhereAmI(int client, int args){
char location[32];
GetEntPropString(client, Prop_Send, "m_szLastPlaceName", location, sizeof(location));
ReplyToCommand(client, "%N is in %s", client, location);
LogMessage("client %N is in %s", client, location);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
public OnMapStart(){
kvMapLimit = CreateKeyValues("MapZones");
if(!FileToKeyValues(kvMapLimit, "addons/sourcemod/configs/maplimit.ini")){
SetFailState("Failed to load addons/sourcemod/configs/maplimit.ini");
}
int i;
for (i = 0; i < sizeof(MZones); ++i){
MZones[i][0] = 0;
}
}
public void OnConfigsExecuted(){
char MapName[16];
GetCurrentMap(MapName, sizeof(MapName));
KvRewind(kvMapLimit);
if(KvJumpToKey(kvMapLimit, MapName, false)){
KvGetString(kvMapLimit, "Zone_0", MZones[0], PLATFORM_MAX_PATH);
KvGetString(kvMapLimit, "Zone_1", MZones[1], PLATFORM_MAX_PATH);
KvGetString(kvMapLimit, "Zone_2", MZones[2], PLATFORM_MAX_PATH);
KvGetString(kvMapLimit, "Zone_3", MZones[3], PLATFORM_MAX_PATH);
KvGetString(kvMapLimit, "Zone_4", MZones[4], PLATFORM_MAX_PATH);
KvGetString(kvMapLimit, "Zone_5", MZones[5], PLATFORM_MAX_PATH);
KvGetString(kvMapLimit, "Zone_6", MZones[6], PLATFORM_MAX_PATH);
KvGetString(kvMapLimit, "Zone_7", MZones[7], PLATFORM_MAX_PATH);
KvGetString(kvMapLimit, "Zone_8", MZones[8], PLATFORM_MAX_PATH);
KvGetString(kvMapLimit, "Zone_9", MZones[9], PLATFORM_MAX_PATH);
KvGetString(kvMapLimit, "Zone_10", MZones[10], PLATFORM_MAX_PATH);
KvGetString(kvMapLimit, "Zone_11", MZones[11], PLATFORM_MAX_PATH);
IsCorrectMap = true;
}
}
public Action:OnPlayerFootStep(Handle:event, const String:name[], bool:dontBroadcast){
new client = GetClientOfUserId(GetEventInt(event, "userid"));
if(IsPlayerAlive(client) && IsCorrectMap && !IsFakeClient(client)){
static char location[16];
static int i;
GetEntPropString(client, Prop_Send, "m_szLastPlaceName", location, sizeof(location));
if( CountPlayers < MAX_PLAYERS_WHITHOUT_MIDDLE ){
for (i = 0; i < sizeof(MZones); ++i){
if ((StrEqual(location, MZones[i])) && !SpawnProtect){
IgniteEntity(client, 0.5);
IsPlayerInZone[client] = true;
if(!AlreadyNotifyed[client]){
NotifyAndBury(client);
LogMessage("OnPlayerFootStep AlreadyNotifyed %b", AlreadyNotifyed[client]);
LogMessage("OnPlayerFootStep IsPlayerInZone %b", IsPlayerInZone[client]);
//LogMessage("OnPlayerFootStep Stripped %b", Stripped[client]);
}
return;
}
}
}
}
}
public NotifyAndBury(client){
PrintHintText(client, "Запрещенная зона, на сервере менее %d игроков", (MAX_PLAYERS_WHITHOUT_MIDDLE +1));
AlreadyNotifyed[client] = true;
LogMessage("NotifyAndBury AlreadyNotifyed %b", AlreadyNotifyed[client]);
CreateTimer(2.0, ResetNotification, client);
}
public Action ResetNotification(Handle timer, any client){
IsPlayerInZone[client] = false;
AlreadyNotifyed[client] = false;
LogMessage("ResetNotification AlreadyNotifyed %b", AlreadyNotifyed[client]);
LogMessage("ResetNotification IsPlayerInZone %b", IsPlayerInZone[client]);
CreateTimer(1.0, Timer_Callout, client);
}
public Action Timer_Callout(Handle timer, any client){
if(IsPlayerInZone[client]){
new entity = CreateEntityByName("player_weaponstrip");
AcceptEntityInput(entity, "strip", client);
AcceptEntityInput(entity, "kill");
PrintHintText(client, "Вы разоружены");
LogMessage("StripWeapon %N", client);
}
}
public Action Event_RoundEnd(Handle event, const char[] name, bool dontBroadcast){
SpawnProtect = true;
}
public Event_RoundFreezeEnd(Handle:event, const String:name[], bool:dontBroadcast) {
CountPlayers = GetClientCount();
SpawnProtect = false;
if(IsCorrectMap){
if (CountPlayers < MAX_PLAYERS_WHITHOUT_MIDDLE){
PrintHintTextToAll("Проходы на Б и мидл запрещены, на сервере менее %d игроков", MAX_PLAYERS_WHITHOUT_MIDDLE);
OneTimeNotify = true;
}
else if(OneTimeNotify){
PrintHintTextToAll("Играет полная карта");
OneTimeNotify = false;
}
}
}
PHP:
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
L 03/12/2016 - 18:15:39: [MapLimit.smx] zone MidDoors, AlreadyNotifyed: 0
L 03/12/2016 - 18:15:39: [MapLimit.smx] NotifyAndBury AlreadyNotifyed: 1
L 03/12/2016 - 18:15:39: [MapLimit.smx] Initialized Notify (AlreadyNotifyed: 1)
L 03/12/2016 - 18:15:39: [MapLimit.smx] Обнуляем AlreadyNotifyed
PHP:
L 03/14/2016 - 22:10:16: [MapLimit.smx] NotifyAndBury AlreadyNotifyed 1
L 03/14/2016 - 22:10:16: [MapLimit.smx] OnPlayerFootStep AlreadyNotifyed 1
L 03/14/2016 - 22:10:16: [MapLimit.smx] OnPlayerFootStep IsPlayerInZone 1
L 03/14/2016 - 22:10:18: [MapLimit.smx] ResetNotification AlreadyNotifyed 0
L 03/14/2016 - 22:10:18: [MapLimit.smx] ResetNotification IsPlayerInZone 0
kvMapLimit = CreateKeyValues("MapZones");
Лучше бы это в OnPluginStart() делать, а там просто сброс "древа" и считывать.
KvGetString(kvMapLimit, "Zone_0", MZones[0], PLATFORM_MAX_PATH);
Эта куча ужасает... И я сомневаюсь, что всё это количество зон есть на всех картах. Здесь бы счётчик вести, чтобы цикл в дальнейшем был минимален (и продуктивен, не проходился по пустым "ячейкам").