TextDraw, Так как-же их правильно создавать?
#1

В общем название темы говорит само за себя.
На вики ничего конкретного нету.

Давайте рассмотрим на конкретном примере: Адрес сайта, который всегда видят все игроки.
PHP код:
new Text:Site;
CreateSite() // Вызов в OnGameModeInit
{
 
Site TextDrawCreate(415.000000,2.000000,SITE_HTTP);
 
TextDrawAlignment(Site,0);
 
TextDrawBackgroundColor(Site,0x0000FFFF);
 
TextDrawFont(Site,2);
 
TextDrawLetterSize(Site,0.699999,2.000000);
 
TextDrawColor(Site,0xFFFFFFFF);
 
TextDrawSetOutline(Site,1);
 
TextDrawSetProportional(Site,1);
 
TextDrawSetShadow(Site,3);
}
public 
OnPlayerConnect(playerid){
 
TextDrawShowForPlayer(pid,Site);
 ...
}
public 
OnPlayerDisconnect(playeridreason)
{
 
TextDrawHideForPlayer(pid,Site);
 ...

Грамотно-ли это сделано? и как можно это довести до ума?
Reply
#2

у тебя всё правильно.
Reply
#3

Ну и второй пример, для внесения ясностей: Часы на сервере, показывающее время сервера всем игрокам.

PHP код:
new Text:tdTime;
forward UpdateTime();
CreateClock() // Вызов в OnGameModeInit
{
 
tdTime TextDrawCreate(601.5,30.0,"--:--");
 
TextDrawUseBox(tdTime,0);
 
TextDrawFont(tdTime,3);
 
TextDrawSetShadow(tdTime,0);
 
TextDrawSetOutline(tdTime,1);
 
TextDrawBackgroundColor(tdTime,0x0000FFFF);
 
TextDrawColor(tdTime,0xFFFFFFFF);
 
TextDrawAlignment(tdTime,3);
 
TextDrawLetterSize(tdTime,0.5,1.5);
 
SetTimer("UpdateTime",1000,1);
}
public 
UpdateTime()
{
 new 
smsg[max_line];
 
gettime(h,m,s);
 
time " ";
 if(
h<10format(time,4,"0%i:",h);
  else 
format(time,4,"%i:",h);
 if(
m<10format(time,6,"%s0%i",time,m);
  else 
format(time,6,"%s%i",time,m);
 
TextDrawSetString(tdTime,time);
 ...
}
public 
OnPlayerConnect(playerid){ 
 
TextDrawShowForPlayer(pid,tdTime); 
 ... 

public 
OnPlayerDisconnect(playeridreason

 
TextDrawHideForPlayer(pid,tdTime); 
 ... 

Reply
#4

Johnny_Xayc, Если я правильно понимаю, получается для каждого игрока свой td.
Считаем: (Часы+Сайт+Инфопанель+Спидометр+4td_приветствия_пр и_конекте)*222(лимит моего сервера)=1776td Конечно не лимит но почти впритык. Но если решу увеличивать лимит игроков,(маловероятно, НО...), то уже выйду за предел.
Reply
#5

Очищать и удалять в OnGameModeExit не забывай. При рестарте мода проблемы могут возникнуть.
Reply
#6

TextDrawShowForAll ?
Reply
#7

TextDrawShowForAll - Показывает всем игрокам, который подключены к серверу, и стоит кому-нить подключиться после выполнения, то у игрока текста НЕ будет.
Reply
#8

У тебя все верно, только ты лимиты немного не так считаешь.

tdTime = TextDrawCreate(... - это 1 текст драв. От того, что ты его покажешь одному игроку или 100 он один быть не перестанет. Умножать на количество игроков нужно только те текстдравы, которые для каждого игрока отличаются.

https://sampwiki.blast.hk/wiki/Limits
Shown In A Single Client's Screen 92
Created Serverwise 2048

Грубо говоря, это значит, что можно 2048 раз вызвать TextDrawCreate и 92 раза вызвать TextDrawShowForPlayer для одного игрока (безусловно, текстдравы можно создавать/удалять, показывать/скрывать. Тут имеется в виду максимальное число именно созданных/показанных в текущий момент)

PS: я самостоятельно цифры из лимитов не проверял, но они часто отличаются от действительности, это нужно иметь в виду.
Reply
#9

dimonml, Ааа, всё, теперь понял....
Спасибо за ответ
Reply
#10

Все переделал по данной инструкции, но стало тока хуже. Статический текст нормально работает, а вот динамические глючат хоть вешайся...
Reply
#11

Вообщем ничего не получается, вынужден просить помощи, того, кто сможет исправить ошибку в моём моде...
Естественно за вознаграждение.
Reply
#12

А еще раз не можешь описать по конкретней, что тебе требуется? Строка в текстдравах чтоль не изменяется?
Reply
#13

Создай текстдрав, показывай текстдрав при коннекте игрока, а по таймеру обновляй значение созданного текстдрава...
Reply
#14

а зачем по таймеру изменять? может быть изменять при обновлении данных?
Reply
#15

Само-собой, но если данные обновляются по таймеру, то в чём я не прав? =)
Reply
#16

Глючит спидометр и таймер.
Спидометр: Создаётся когда садишься в машину, - когда выходит уничтожается. Обновляется каждую секунду.
Таймер: Создаётся когда сажают в больницу\тюрьму, - уничтожается когда выпускают.

И вот эти тексты по страшному глючат.

Под словом глючат я имею ввиду следующее: Например в замен таймера, появляется спидометр другого игрока, и мигает. Могут по 2-3 спидометра мигать, и при этом ещё проскакивает и мой таймер.

Самое интересное, что раньше это глючило, но очень редко, теперь постоянно, а я тока добавил оформление к тексту.
Reply
#17

Создай персонализированный текстдрав (Speed[playerid]) в OnPlayerConnect, а при посадке в транспорт - показывай его, в таймере обновления - TextDrawSetString, при выходе игрока - удаляй текстдрав.
Reply
#18

У меня на сервере сразу создаются все нужные текстдавы, а при нужный действиях - скрываются или показываются. Если нужно изменить текст - тут проблем нету, а если нужно например изменить цвет текста, или цвет фона - то тут нужно скрывать ТД, изменять цвет, и создавать ТД
OKStyle прав - так и нужно, создавать для каждого игрока персональный текстдрав, и при OnPlayerConnect показывать (или создавать - как предпочтешь, и тогда при OnPlayerDisconnect удалять).
Reply
#19

Quote:
Originally Posted by OKStyle
View Post
Само-собой, но если данные обновляются по таймеру, то в чём я не прав? =)
ах ну да, гребаный павн, в нем даже ивентов нет
Reply
#20

-Stranger- не мучайся, не исправляй а лучше офни и заново всё напиши с вниманием. Я своё спидометр 8 раз переделывал-5 раза из-за этих самых текстдравов.
Выше я описал что и как из личного опыта. В итоге вот что получилось.

new TextTNos[23];-балон нитрухи реализировано как в НФС
new Text:TDClock[10];-измерительная сетка(фон)
new Text:TDHud[MAX_PL][6];-всё что меняется.
1 таймер, стоит 100 мс.
анти спидхак
анти починка
уменьшает хп при аварии (как в Мафии но ослабленно).
дрифтер и спидометр можно отключить.(отдельно можно дрифтер вырубить если и спидометр то дрифтер тоже оффается)
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)