sojio12
Участник
- Сообщения
- 34
- Реакции
- 0
Кароче, есть идея создать новый стиль для bhop, однако в sourcepawn вообще не силен, помогите вызвать повторяющийся таймер с интервалом в 6 секунд который вызывает функцию отправки сообщения когда у игрока стартует таймер(игры) и убивать таймер когда тот финиширует карту. В целом почти все готово, однако Shavit_OnUserCmdPre вызывется каждый тик и происходит бешеный спам. Не могу вызвать таймер 1 раз. Хелп!
shavit:
#include <sourcemod>
#include <sdktools>
#include <shavit>
ConVar g_hSpecialString;
char g_sSpecialString[stylestrings_t::sSpecialString];
bool g_EnforceFade[MAXPLAYERS + 1];
public Plugin myinfo =
{
author = "",
url = "",
name = "",
description = "",
version = "0.01",
};
//Специалньая строка стиля
public void OnPluginStart()
{
g_hSpecialString = CreateConVar("ss_fade_specialstrng", "fade", "Special string value to use in shavit-styles.cfg");
g_hSpecialString.AddChangeHook(ConVar_OnSpecialStringChanged);
g_hSpecialString.GetString(g_sSpecialString, sizeof(g_sSpecialString));
AutoExecConfig();
}
//Сбрасываем стиль
public void OnClientDisconnect(int client)
{
g_EnforceFade[client] = false;
}
//Неудачная попытка вызвать таймер
public Action Shavit_OnUserCmdPre(int client)
{
if (!IsClientInGame(client) || !IsPlayerAlive(client) || IsFakeClient(client) || !g_EnforceFade[client])
return Plugin_Continue;
CreateTimer(3.0, Timermessage, GetClientUserId(client), TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
//Таймер сообщения
public Action Timermessage(Handle hTimer, any UserId)
{
int iClient = GetClientOfUserId(UserId);
if(iClient)
{
PrintToChat(iClient, "Держи сообщение");
}
return Plugin_Stop;
}
//Убиваем таймер
public void Shavit_OnFinish(int client)
{
return Plugin_Stop;
}
public void Shavit_OnStyleChanged(int client, int oldstyle, int newstyle, int track, bool manual)
{
char sStyleSpecial[sizeof(stylestrings_t::sSpecialString)];
Shavit_GetStyleStrings(newstyle, sSpecialString, sStyleSpecial, sizeof(sStyleSpecial));
g_EnforceFade[client] = (StrContains(sStyleSpecial, g_sSpecialString) != -1);
}
public void ConVar_OnSpecialStringChanged(ConVar convar, const char[] oldValue, const char[] newValue)
{
convar.GetString(g_sSpecialString, sizeof(g_sSpecialString));
}