tonline_kms65
Участник
- Сообщения
- 65
- Реакции
- 13
Это не проблема, как таковая.Попробую
Зацикленный таймер убивать не требуется вовсе, как и сбрасывать его Handle. Короче, тебе вообще эти строки не нужны, а только сбросить Handle, если игрок не валиден или не соблюдены другие условия для повтора таймера. Оффтопif (ShowHud_smokeGrenadeCount[client] != INVALID_HANDLE){ // вот этот головняк. Если таймер запущен KillTimer(ShowHud_smokeGrenadeCount[client]); // убиваю его ShowHud_smokeGrenadeCount[client] = INVALID_HANDLE; // очищаю данные }
@tonline_kms65, раз без разницы, то добавь в заголовке файла #pragma newdecls required и компилятор будет ругаться на ту часть кода, которая оформлена согласно старому синтаксису.Старый, новый, работает - работает. И так головняка хватает помимо sourcepawnа. Да честно сказать я даже и не знаю где там новый где старый. Мне как то по барабану:biggrin:. Я даже и не знал что там есть где то новый а где-то старый. Для меня все едино. Ну вооооообще.
[PHP]тут код[/PHP]
LoopShowHudCountSM_Grenade(client, ent)
{
int iCount = sm_count[ent]; // это кол-во гранат этого типа (дымовые). Глобал. данные изменяются при создании гранат++ и их уничтожении--.
if (iCount > 0)
{
if (camera[client] == true) // в HUD один раз
{
SetHudTextParamsEx(0.85, 0.85, 3.0, {0,147,3,255}, {181,255,84,255}, 2, 0.1, 0.1, 0.1);
ShowHudText(client, -1, "Smoke %i", iCount);
}
if (ShowHud_smokeGrenadeCount[client] != INVALID_HANDLE) // вот этот головняк. Если таймер запущен
{
KillTimer(ShowHud_smokeGrenadeCount[client]); // убиваю его
ShowHud_smokeGrenadeCount[client] = INVALID_HANDLE; // очищаю данные
}
new Handle:Pack3;
ShowHud_smokeGrenadeCount[client] = CreateDataTimer(3.0, timer_LoopShowHudCountSM_Grenade, Pack3, TIMER_FLAG_NO_MAPCHANGE|TIMER_DATA_HNDL_CLOSE);
WritePackCell(Pack3, GetClientUserId(client)); // Пакуем обновленные данные в таймер
WritePackCell(Pack3, ent);
}
return;
}
...
public Action:timer_LoopShowHudCountSM_Grenade(Handle:timer, any:Pack3)
{
ResetPack(Pack3);
int iClient = ReadPackCell(Pack3);
int iEnt = ReadPackCell(Pack3);
iClient = GetClientOfUserId(iClient);
LoopShowHudCountSM_Grenade(iClient, iEnt);
}
decl String:logfile[PLATFORM_MAX_PATH];
BuildPath(Path_SM, logfile, sizeof(logfile), "logs/%s/%s.log", sSomeString1, sSomeString2); // Можно сделать даже отдельные папки и файлы для различных случаев
LogToFileEx(logfile, "%s", sInfo);
LogToFileEx("logs/myplugin/myplugin.log", "%s", sInfo);
#include <sourcemod>
char g_sLogFile[PLATFORM_MAX_PATH];
public void OnPluginStart() {
BuildPath(Path_SM, g_sLogFile, sizeof(g_sLogFile), "logs/myplugin.log");
RegServerCmd("sm_logfile", LogFile_Example);
}
public Action LogFile_Example(int args) {
LogToFileEx(logfile, "Текст для записи в лог.");
return Plugin_Handled;
}
static const char g_sLogFile[] = "addons/sourcemod/logs/myplugin.log"; // в плагине больше нельзя изменить значение
public void OnPluginStart() {
// BuildPath(Path_SM, g_sLogFile, sizeof(g_sLogFile), "logs/myplugin.log"); // больше не требуется, т.к. этот же путь уже прописан в самом начале файла
RegServerCmd("sm_logfile", LogFile_Example);
}
public Action LogFile_Example(int args) {
LogToFileEx(logfile, "Текст для записи в лог.");
return Plugin_Handled;
}
char g_sLogFile[] = "addons/sourcemod/logs/myplugin.log"; //можно в любой момент менять значение
public void OnPluginStart() {
// BuildPath(Path_SM, g_sLogFile, sizeof(g_sLogFile), "logs/myplugin.log"); // больше не требуется, т.к. этот же путь уже прописан в самом начале файла
RegServerCmd("sm_logfile", LogFile_Example);
}
public Action LogFile_Example(int args) {
LogToFileEx(logfile, "Текст для записи в лог.");
return Plugin_Handled;
}