skynet2040
Участник
- Сообщения
- 51
- Реакции
- 1
Ребят в общем видел такую штуку на серве паблике, когда одна из команд делает 50 побед то счет сбрасывается, а в чате писалось типо Кт или Т победили. Есть такой плагин вообще или писать надо ?
#include <sourcemod>
#include <sdktools>
new Handle:g_hAutoRestartRounds = INVALID_HANDLE,
Handle:g_hAutoRestartEnabled = INVALID_HANDLE,
bool:g_bEnabled = true,
g_iWins,
String: soundFile[] = "ambient/misc/brass_bell_c.wav";
public Plugin:myinfo =
{
name = "Autorestartgame",
author = "R1KO",
description = "Автоматический рестарт при достижении лимита побед",
version = "1.1",
url = "https://hlmod.ru"
};
public OnPluginStart()
{
g_hAutoRestartEnabled = CreateConVar("sm_autorestartgame_enabled", "1", "Вкл/Выкл плагин.", FCVAR_NONE, true, 0.0, true, 1.0);
g_hAutoRestartRounds = CreateConVar("sm_autorestartgame_round", "50", "Количество раундов до рестарта.", FCVAR_NONE, true, 4.0);
HookEvent("round_end", OnRoundEnd);
HookConVarChange(g_hAutoRestartRounds, ConVarChanges);
HookConVarChange(g_hAutoRestartEnabled, ConVarChanges);
decl String:fileSound[128];
Format(fileSound, sizeof(fileSound), "sound/%s", soundFile);
AddFileToDownloadsTable(fileSound);
PrecacheSound(soundFile, true);
}
public OnConfigsExecuted()
{
g_iWins = GetConVarInt(g_hAutoRestartRounds);
g_bEnabled = GetConVarBool(g_hAutoRestartEnabled);
}
public Action:OnRoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
if(g_bEnabled)
{
new ScoreT = GetTeamScore(2), ScoreCT = GetTeamScore(3);
if(ScoreT == g_iWins-2 || ScoreCT == g_iWins-2)
PrintToChatAll("\x07FF0000Внимание! \x0700FF00Осталось 2 победы одной из команд до рестарта игры.");
else if(ScoreT == g_iWins-1 || ScoreCT == g_iWins-1)
PrintToChatAll("\x07FF0000Внимание! \x0700FF00Осталась 1 победа одной из команд до рестарта игры.");
else if(ScoreT == g_iWins || ScoreCT == g_iWins)
{
ServerCommand ("mp_restartgame 5");
PrintToChatAll("\x07FF0000Внимание! \x0700FF00Достигнут лимит побед. Будет произведен рестарт игры");
for(new i = 1; i <= MaxClients; i++)
if(IsClientInGame(i) && !IsFakeClient(i))
ClientCommand(i, "playgamesound %s", soundFile);
}
}
}
public ConVarChanges(Handle:convar, const String:oldValue[], const String:newValue[])
{
if(convar == g_hAutoRestartRounds)
g_iWins = GetConVarInt(g_hAutoRestartRounds);
if(convar == g_hAutoRestartEnabled)
g_bEnabled = GetConVarBool(g_hAutoRestartEnabled);
}
#include <sourcemod>
#include <sdktools>
#define SOUND "ambient/misc/brass_bell_c.wav"
new Handle:g_hAutoRestartRounds = INVALID_HANDLE,
Handle:g_hAutoRestartEnabled = INVALID_HANDLE,
bool:g_bEnabled = true,
g_iWins;
public Plugin:myinfo =
{
name = "Autorestartgame",
author = "R1KO",
description = "Автоматический рестарт при достижении лимита побед",
version = "1.1"
};
public OnPluginStart()
{
g_hAutoRestartEnabled = CreateConVar("sm_autorestartgame_enabled", "1", "Вкл/Выкл плагин.", FCVAR_NONE, true, 0.0, true, 1.0);
g_hAutoRestartRounds = CreateConVar("sm_autorestartgame_round", "50", "Количество раундов до рестарта.", FCVAR_NONE, true, 4.0);
g_iWins = GetConVarInt(g_hAutoRestartRounds);
g_bEnabled = GetConVarBool(g_hAutoRestartEnabled);
HookConVarChange(g_hAutoRestartRounds, ConVarChanges);
HookConVarChange(g_hAutoRestartEnabled, ConVarChanges);
decl String:fileSound[128];
FormatEx(fileSound, sizeof(fileSound), "sound/%s", SOUND);
AddFileToDownloadsTable(fileSound);
PrecacheSound(SOUND, true);
HookEvent("round_end", Event_OnRoundEnd);
}
public Event_OnRoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
if(g_bEnabled)
{
new ScoreT = GetTeamScore(2), ScoreCT = GetTeamScore(3);
if(ScoreT == g_iWins || ScoreCT == g_iWins)
{
ServerCommand ("mp_restartgame 5");
PrintToChatAll("\x07FF0000Внимание! \x0700FF00Победили %s", (ScoreCT > ScoreT) ? "\x0799CCFFКонтр-террористы": "\x07FF4040Террористы");
for(new i = 1; i <= MaxClients; i++)
if(IsClientInGame(i) && !IsFakeClient(i))
ClientCommand(i, "playgamesound %s", SOUND);
}
}
}
public ConVarChanges(Handle:convar, const String:oldValue[], const String:newValue[])
{
if(convar == g_hAutoRestartRounds) g_iWins = GetConVarInt(g_hAutoRestartRounds);
if(convar == g_hAutoRestartEnabled) g_bEnabled = GetConVarBool(g_hAutoRestartEnabled);
}
:)url = "https://hlmod.ru"
for(new i = 1; i <= MaxClients; i++)
if(IsClientInGame(i) && !IsFakeClient(i))
ClientCommand(i, "playgamesound %s", SOUND);
for(new i = 1; i <= MaxClients; i++)
{
if (!IsClientInGame(i) || IsFakeClient(i))
{
continue;
}
ClientCommand(i, "playgamesound %s", SOUND);
}
decl String:fileSound[128];
decl String:fileSound[PLATFORM_MAX_PATH];
HookEvent("round_end", OnRoundEnd);
public:Action OnRoundEnd()
#include <sdktools>
#include <sdktools_stringtables>
#include <sourcemod>
Где то слышал что вместо #define лучше const
#define типо старый вариант что ли.
#define SOUND "misc/music.mp3"
EmitSoundToAll(SOUND);
EmitSoundToAll("misc/music.mp3");
а что изменилось? Оптимальнее не стало, просто становится яснее человекуПереписал бы так:PHP:for(new i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i)) ClientCommand(i, "playgamesound %s", SOUND);
PHP:for(new i = 1; i <= MaxClients; i++) { if (!IsClientInGame(i) || IsFakeClient(i)) { continue; } ClientCommand(i, "playgamesound %s", SOUND); }
плохая затея, подключая только sdktools_stringtables, плагин не будет заставлять само расширение SDKTools загрузиться. И не будет знать загружено ли само расширение. Т.е. игнорируется код в конце sdktools.incПереписал бы так:PHP:#include <sdktools>
PHP:#include <sdktools_stringtables>
public Extension:__ext_sdktools =
{
name = "SDKTools",
file = "sdktools.ext",
#if defined AUTOLOAD_EXTENSIONS
autoload = 1,
#else
autoload = 0,
#endif
#if defined REQUIRE_EXTENSIONS
required = 1,
#else
required = 0,
#endif
};
Надо или не надо, легче от этого не будетне надо теперь компилятор автоматически подключает это.PHP:#include <sourcemod>
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <dbi>
#include <basecomm>
#undef REQUIRE_PLUGIN // всё, что ниже - не обязательно для работы.
#include <adminmenu>
Vit_ amin, что все инклюды, которые будут подключены дальше, не обязательные.
Например:
PHP:#pragma semicolon 1 #include <sourcemod> #include <sdktools> #include <dbi> #include <basecomm> #undef REQUIRE_PLUGIN // всё, что ниже - не обязательно для компиляции. #include <adminmenu>
Если не будет basecomm или любого другого инклюда, плагин не скомпилируется.
А вот если не будет adminmenu, то скомпилируется.
Но работа плагина уже обеспечивается через LibraryExists
все скомпилируется, просто если не будет плагина, для кого и предназначена библиотека adminmenu, плагин работать не будет (т.е. без работы плагина adminmenu его нативы использовать нельзя)
#undef REQUIRE_PLUGIN
#include <basecomm>
Ты имеешь ввиду через new wins =GetEventInt(event, "winner") узнавать победителя и прибавлять к переменной wins += 1 после составлять условие ?R1KO
1. Можно обойтись без g_bEnabled
2. По-моему, использование GetTeamScore затрачивает больше, чем банальный подсчет побед
3. Функции AddFileToDownloadsTable и PrecacheSound не используют при старте плагина
а вдруг счет обнулился командой mp_restartgame или изменился сторонним плагином?2. По-моему, использование GetTeamScore затрачивает больше, чем банальный подсчет побед