Kruzya
Участник
- Сообщения
- 12,974
- Реакции
- 10,938
- Команда форума
- #2,041
Если чисто команду ограничить, и она регнута как консольная, можно заюзать Custom Features.
Баг? Нет, это не баг.Там баг будет, я по флагам ограничивал, после окончания випки остаются выбранные скины у игроков
L 09/27/2017 - 09:58:03: SourceMod error session started
L 09/27/2017 - 09:58:03: Info (map "l4d_hospital05_rooftop") (file "errors_20170927.log")
L 09/27/2017 - 09:58:03: [SM] Native "GetEntProp" reported: Property "m_humanSpectatorUserID" not found (entity 5/player)
L 09/27/2017 - 09:58:03: [SM] Displaying call stack trace for plugin "bebop.smx":
L 09/27/2017 - 09:58:03: [SM] [0] Line 236, /home/groups/sourcemod/upload_tmp/phpcJUy0x.sp::HasIdlePlayer()
L 09/27/2017 - 09:58:03: [SM] [1] Line 164, /home/groups/sourcemod/upload_tmp/phpcJUy0x.sp::Timer_KickNoMoreNeededBot()
L 09/27/2017 - 09:59:47: [SM] Native "GetEntProp" reported: Property "m_humanSpectatorUserID" not found (entity 6/player)
L 09/27/2017 - 09:59:47: [SM] Displaying call stack trace for plugin "bebop.smx":
L 09/27/2017 - 09:59:47: [SM] [0] Line 236, /home/groups/sourcemod/upload_tmp/phpcJUy0x.sp::HasIdlePlayer()
L 09/27/2017 - 09:59:47: [SM] [1] Line 164, /home/groups/sourcemod/upload_tmp/phpcJUy0x.sp::Timer_KickNoMoreNeededBot()
L 09/27/2017 - 10:22:35: Error log file session closed.
stock bool:HasIdlePlayer(bot)
{
if(IsValidEntity(bot) && IsValidEdict(bot))
{
if(GetEntProp(bot, Prop_Send, "m_humanSpectatorUserID") == 0)
{
return true;
}
else return false;
}
return false;
}
pragma semicolon 1
#include <sourcemod>
#pragma newdecls required
bool lock, lock_timer;
int unlock;
public void OnPluginStart()
{
HookEvent("player_spawn", Event_PlayerSpawn, EventHookMode_Post);
HookEvent("round_start", EventRoundStart, EventHookMode_Post);
}
public void EventRoundStart(Event event, const char[]name, bool dontBroadcast)
{
lock = false, lock_timer = false;
}
public void Event_PlayerSpawn(Event event, const char[]name, bool dontBroadcast)
{
if(lock)return;
{
int client = GetClientOfUserId(event.GetInt("userid"));
if (IsClientInGame(client) && GetClientTeam(client) == 2) SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", 0.0);
{
if(lock_timer)return;
{
unlock = 25;
CreateTimer(1.0, timer_unlock, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
lock_timer = true;
}
}
}
}
public Action timer_unlock(Handle timer)
{
unlock --;
if(unlock > 0)
{
PrintHintTextToAll("Жди не суетись :D %d", unlock);
return Plugin_Continue;
}
for (int i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i) && GetClientTeam(i) == 2) SetEntPropFloat(i, Prop_Data, "m_flLaggedMovementValue", 1.0);
}
lock = true;
return Plugin_Stop;
}
Блокирую код после после возвращение true, с этим всё шик, что с таймером вот в чем проблема.что за хрень?PHP:if(lock)return; {PHP:if(lock_timer)return; {
#pragma semicolon 1
#pragma newdecls required
bool lock, lock_timer;
float StartTime;
public void OnPluginStart()
{
HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
HookEvent("player_spawn", Event_PlayerSpawn);
}
public void Event_RoundStart(Event event, const char[]name, bool dontBroadcast)
{
lock = lock_timer = false;
}
public void Event_PlayerSpawn(Event event, const char[]name, bool dontBroadcast)
{
if(lock) return;
int client = GetClientOfUserId(event.GetInt("userid"));
if(IsClientInGame(client) && GetClientTeam(client) == 2)
SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", 0.0);
if(lock_timer) return;
CreateTimer(1.0, timer_unlock, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
StartTime = 25 + GetGameTime();
lock_timer = true;
}
public Action timer_unlock(Handle timer)
{
static int t;
if((t = RoundToNearest(FloatSub(StartTime, GetGameTime()))) > 0)
{
PrintHintTextToAll("Жди, не суетись :D %d", t);
return Plugin_Continue;
}
lock = true;
for(int i = 1; i <= MaxClients; i++)
if(IsClientInGame(i) && GetClientTeam(i) == 2)
SetEntPropFloat(i, Prop_Data, "m_flLaggedMovementValue", 1.0);
return Plugin_Stop;
}
Я про лишние фигурные скобки и лишние отступыБлокирую код после после возвращение true
Красиво что сказать=), но тоже самое что и у меня :D. Также с 15 вроде.попробуй вот так:
--- Добавлено позже ---PHP:#pragma semicolon 1 #pragma newdecls required bool lock, lock_timer; float StartTime; public void OnPluginStart() { HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy); HookEvent("player_spawn", Event_PlayerSpawn); } public void Event_RoundStart(Event event, const char[]name, bool dontBroadcast) { lock = lock_timer = false; } public void Event_PlayerSpawn(Event event, const char[]name, bool dontBroadcast) { if(lock) return; int client = GetClientOfUserId(event.GetInt("userid")); if(IsClientInGame(client) && GetClientTeam(client) == 2) SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", 0.0); if(lock_timer) return; CreateTimer(1.0, timer_unlock, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); StartTime = 25 + GetGameTime(); lock_timer = true; } public Action timer_unlock(Handle timer) { static int t; if((t = RoundToNearest(FloatSub(StartTime, GetGameTime()))) > 0) { PrintHintTextToAll("Жди, не суетись :D %d", t); return Plugin_Continue; } lock = true; for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && GetClientTeam(i) == 2) SetEntPropFloat(i, Prop_Data, "m_flLaggedMovementValue", 1.0); return Plugin_Stop; }
Я про лишние фигурные скобки и лишние отступы
--- Добавлено позже ---
а вообще у меня в NMRiH для одного игрока событие спавна ловится ровно 3 раза (при одном-то возрождении) после начала раунда (только не скажу для первого игрока только или для всех)
Цель своего кода назови.Ну я кстати уже задумывался об этом слишком рановато событие происходит. Может кто подкинет событие которое попозже срабатывает или какую нибудь функцию на подобие OnClientPostAdminCheck
Да надо первых игроков хоть на время притормозить, пока другие подключаются. Есть как бы другой вариант одним таймером отсрочить на пару секунд и потом запускать с обратный отсчетом, не люблю я использовать таймера, не хило слотовый сервер прогибает :D. Специально использовал EventHookMode_Post чтоб хоть на чуток позже сделать.Цель своего кода назови.
Они по стандарту Post.Специально использовал EventHookMode_Post чтоб хоть на чуток позже сделать.
#include <cstrike>
#pragma semicolon 1
#pragma newdecls required
g_iTimer;
public void OnMapStart()
{
RequestFrame(FrameTimer); // Чтобы не убивался из-за TIMER_FLAG_NO_MAPCHANGE
}
void FrameTimer(bool bNothing)
{
g_iTimer = 25.0;
CreateTimer(1.0, HintTimer, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
public Action HintTimer(Handle hTimer)
{
PrintHintTextToAll("Перезапуск игры через %d секунд.", g_iTimer);
if(--g_iTimer == 0)
{
PrintHintTextToAll("Игра началась!");
CS_TerminateRound(0.0, CSRoundEnd_Draw, true);
return Plugin_Stop;
}
return Plugin_Continue;
}
Спс конеш, но игра не та, не будет работать=)Они по стандарту Post.
Вариант проще:
PHP:#include <cstrike> #pragma semicolon 1 #pragma newdecls required g_iTimer; public void OnMapStart() { RequestFrame(FrameTimer); // Чтобы не убивался из-за TIMER_FLAG_NO_MAPCHANGE } void FrameTimer(bool bNothing) { g_iTimer = 25.0; CreateTimer(1.0, HintTimer, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); } public Action HintTimer(Handle hTimer) { PrintHintTextToAll("Перезапуск игры через %d секунд.", g_iTimer); if(--g_iTimer == 0) { PrintHintTextToAll("Игра началась!"); CS_TerminateRound(0.0, CSRoundEnd_Draw, true); return Plugin_Stop; } return Plugin_Continue; }
А что за игра ?Спс конеш, но игра не та, не будет работать=)