TextDrawSetString(textdraw1,"Text");
TextDrawShowForPlayer(playerid,textdraw1);
Была аналогичная проблема, и вот тема, где она решилась : https://sampforum.blast.hk/showthread.php?tid=215378
Если в двух словах, нада текст создавать в OnGameModeInit и показывать когда нада. Тока так я озбавился от глюков. |
Если в двух словах, нада текст создавать в OnGameModeInit и показывать когда нада. Тока так я озбавился от глюков. |
#include <a_samp>
#define max_players 222
new Text: HUDTimer[max_players]; // HUD таймеры
new HUDTimerTimer;
new HUDTimerSet[max_players];
new HUDTimerIsActive[max_players];
public OnFilterScriptInit()
{
HUDTimerCreate();
HUDTimerTimer = SetTimer("HUDTimerUpdate",1000,1);
return 1;
}
public OnFilterScriptExit()
{
KillTimer(HUDTimerTimer);
HUDTimerDestroy();
return 1;
}
HUDTimerCreate() // Создаём все HUD таймеры
{
for(new i=0; i<max_players; i++)
{
HUDTimer[i] = TextDrawCreate(300.0,200.0," "); // (550.0,23.0," ")
TextDrawLetterSize(HUDTimer[i],0.4,0.6);
TextDrawSetOutline(HUDTimer[i],1);
TextDrawSetShadow(HUDTimer[i],0);
TextDrawColor(HUDTimer[i],0xFFFFFFFF);
TextDrawUseBox(HUDTimer[i],0);
TextDrawFont(HUDTimer[i],1);
TextDrawBackgroundColor(HUDTimer[i],0xFF0000FF);
}
}
HUDTimerDestroy() // Удаляем все HUD таймеры
{
for(new i=0; i<max_players; i++)
{
TextDrawDestroy(HUDTimer[i]);
HUDTimerIsActive[i] = 0;
}
}
HUDTimerShow(pid) // Показываем HUD таймер игроку
{
if(HUDTimerIsActive[pid]) return;
TextDrawSetString(HUDTimer[pid]," ");
TextDrawShowForPlayer(pid,HUDTimer[pid]);
HUDTimerIsActive[pid] = 1;
}
HUDTimerHide(pid) //Прячем HUD таймер игроку
{
if(!HUDTimerIsActive[pid]) return;
TextDrawHideForPlayer(pid,HUDTimer[pid]);
TextDrawSetString(HUDTimer[pid]," ");
HUDTimerIsActive[pid] = 0;
}
forward HUDTimerUpdate();
public HUDTimerUpdate() // Обновляем все HUD таймеры (каждую секунду)
{
for(new i=0; i<max_players; i++)
{
if(!IsPlayerConnected(i)) continue;
if(HUDTimerSet[i] && !HUDTimerIsActive[i]) HUDTimerShow(i); // Показываем таймер
if(!HUDTimerSet[i] && HUDTimerIsActive[i]) HUDTimerHide(i); // Прячем таймер
if(HUDTimerSet[i])
{
new tmp[255];
format(tmp,255,"~r~TEST~n~~w~%i",HUDTimerSet[i]);
TextDrawSetString(HUDTimer[i],tmp);
HUDTimerSet[i]--;
}
// Место для обработки функций связанных с таймером
// Место для обработки функций связанных с таймером
}
}
// Массив хранящий время таймера - HUDTimerSet[playerid]
Вот про эту проблему я писал раньше.
Так что делай текстдровы для каждого игрока в исключительном случаи. А типа как текстдров времени - это 1 текстдров. текстдров чата - это 1 текстдров. текстдровы ввиде квадратов без текста, тоже делай один общий текстдров. Т.е. всё что выводится для всех одинаковый текст, делай один текстдров. |
Опишу ситуацию занова:
У меня есть спидометр,отдельный для каждого игрока в OnPlayerStateChange если newstate == PLAYER_STATE_DRIVER , то мы создаём текстдрав спидометра, если игрок выходит с сервера или State игрока меняется на какой-либо другой, то мы удаляем текстдрав, но при таком алгоритме и начинают лагать все текстдравы из-за спидометра. |