PDA

Просмотр полной версии : [Вопрос] Hide/Удаление PlayerTextDraw



Edward Morra
14.02.2017, 13:48
Проблема заключается вот в чем.
Просто напросто не скрывается текстдрав и не удаляется. Остается также висеть.

new PlayerText:GPSPlayer[MAX_PLAYERS][5];

CreateGPSTD(playerid,st)
{
if(playerid == INVALID_PLAYER_ID || !st) return true;
switch(st)
{
case 1:
{
GPSPlayer[playerid][0] = CreatePlayerTextDraw(playerid, 15.666661, 321.481445, "LD_BEAT:chit");
PlayerTextDrawLetterSize(playerid, GPSPlayer[playerid][0], 0.000000, 0.000000);
PlayerTextDrawTextSize(playerid, GPSPlayer[playerid][0], 142.666549, 121.125915);
PlayerTextDrawAlignment(playerid, GPSPlayer[playerid][0], 1);
PlayerTextDrawColor(playerid, GPSPlayer[playerid][0], 255);
PlayerTextDrawSetShadow(playerid, GPSPlayer[playerid][0], 0);
PlayerTextDrawSetOutline(playerid, GPSPlayer[playerid][0], 0);
PlayerTextDrawFont(playerid, GPSPlayer[playerid][0], 4);

GPSPlayer[playerid][1] = CreatePlayerTextDraw(playerid, 66.333358, 357.155578, "GPS");
PlayerTextDrawLetterSize(playerid, GPSPlayer[playerid][1], 0.237999, 1.243258);
PlayerTextDrawAlignment(playerid, GPSPlayer[playerid][1], 1);
PlayerTextDrawColor(playerid, GPSPlayer[playerid][1], -1);
PlayerTextDrawSetShadow(playerid, GPSPlayer[playerid][1], 0);
PlayerTextDrawSetOutline(playerid, GPSPlayer[playerid][1], 0);
PlayerTextDrawBackgroundColor(playerid, GPSPlayer[playerid][1], 51);
PlayerTextDrawFont(playerid, GPSPlayer[playerid][1], 2);
PlayerTextDrawSetProportional(playerid, GPSPlayer[playerid][1], 1);

GPSPlayer[playerid][2] = CreatePlayerTextDraw(playerid, 89.333366, 356.740814, "OFF");
PlayerTextDrawLetterSize(playerid, GPSPlayer[playerid][2], 0.237999, 1.243258);
PlayerTextDrawAlignment(playerid, GPSPlayer[playerid][2], 1);
PlayerTextDrawColor(playerid, GPSPlayer[playerid][2], -7601921);
PlayerTextDrawSetShadow(playerid, GPSPlayer[playerid][2], 0);
PlayerTextDrawSetOutline(playerid, GPSPlayer[playerid][2], 0);
PlayerTextDrawBackgroundColor(playerid, GPSPlayer[playerid][2], 51);
PlayerTextDrawFont(playerid, GPSPlayer[playerid][2], 2);
PlayerTextDrawSetProportional(playerid, GPSPlayer[playerid][2], 1);

GPSPlayer[playerid][3] = CreatePlayerTextDraw(playerid, 51.000038, 376.237030, "BUY GPS IN 24/7");
PlayerTextDrawLetterSize(playerid, GPSPlayer[playerid][3], 0.237999, 1.243258);
PlayerTextDrawAlignment(playerid, GPSPlayer[playerid][3], 1);
PlayerTextDrawColor(playerid, GPSPlayer[playerid][3], -1);
PlayerTextDrawSetShadow(playerid, GPSPlayer[playerid][3], 0);
PlayerTextDrawSetOutline(playerid, GPSPlayer[playerid][3], 0);
PlayerTextDrawBackgroundColor(playerid, GPSPlayer[playerid][3], 51);
PlayerTextDrawFont(playerid, GPSPlayer[playerid][3], 2);
PlayerTextDrawSetProportional(playerid, GPSPlayer[playerid][3], 1);

GPSPlayer[playerid][4] = CreatePlayerTextDraw(playerid, 70.666702, 384.533355, "New Textdraw");
PlayerTextDrawLetterSize(playerid, GPSPlayer[playerid][4], 0.449999, 1.600000);
PlayerTextDrawTextSize(playerid, GPSPlayer[playerid][4], 33.333335, 38.162990);
PlayerTextDrawAlignment(playerid, GPSPlayer[playerid][4], 1);
PlayerTextDrawColor(playerid, GPSPlayer[playerid][4], -1);
PlayerTextDrawUseBox(playerid, GPSPlayer[playerid][4], true);
PlayerTextDrawBoxColor(playerid, GPSPlayer[playerid][4], 0);
PlayerTextDrawSetShadow(playerid, GPSPlayer[playerid][4], 0);
PlayerTextDrawSetOutline(playerid, GPSPlayer[playerid][4], 1);
PlayerTextDrawFont(playerid, GPSPlayer[playerid][4], 5);
PlayerTextDrawSetProportional(playerid, GPSPlayer[playerid][4], 1);
PlayerTextDrawBackgroundColor(playerid, GPSPlayer[playerid][4], 0x00000000);
PlayerTextDrawSetPreviewModel(playerid, GPSPlayer[playerid][4], 18875);
PlayerTextDrawSetPreviewRot(playerid, GPSPlayer[playerid][4], 90.000000, 180.000000, 0.000000, 1.000000);
}
case 2: for(new i = 0; i < 5; i++) PlayerTextDrawShow(playerid,GPSPlayer[playerid][i]);
case 3:
{
for(new i = 0; i < 5; i++) PlayerTextDrawHide(playerid,GPSPlayer[playerid][i]);
printf("Убрали для playerid = %d",playerid);
}
case 4:
{
for(new i = 0; i < 5; i++) PlayerTextDrawDestroy(playerid,GPSPlayer[playerid][i]);
printf("Удалили для playerid = %d",playerid);
}
}
return true;
}
Принт пишет что удаляет...

Seviel
14.02.2017, 15:43
У меня такие проблемы были из-за for-а, мб поможет.


for(new i = 0; i != 5; i++) PlayerTextDrawHide(playerid,GPSPlayer[playerid][i]);

Edward Morra
14.02.2017, 16:35
У меня такие проблемы были из-за for-а, мб поможет.


for(new i = 0; i != 5; i++) PlayerTextDrawHide(playerid,GPSPlayer[playerid][i]);


Нет, не убирает..

DeimoS
14.02.2017, 17:49
А ты точно нигде 2 раза не создаёшь эти же текстдравы?

Edward Morra
14.02.2017, 18:01
А ты точно нигде 2 раза не создаёшь эти же текстдравы?

При входе создаю/показываю и всё.
Хотя может от того, что 2 раза тип спавн срабатывает, то они друг на друга накладываются?

Seviel
14.02.2017, 19:14
При входе создаю/показываю и всё.
Хотя может от того, что 2 раза тип спавн срабатывает, то они друг на друга накладываются?

При созданий логируй.

Alpano
14.02.2017, 19:41
Добавь bool, устанавливай true при создании, false при удалении соответственно.
И перед созданием проверяй его, если true - return true;
инфа сотка, накладываются

vovandolg
14.02.2017, 20:40
Почему бы не взять привычку на то что если в каком то участке кода создавался PlayerTD то и удаление в дисконнекте обязательно надо записать чтобы удалялся по любому.

Edward Morra
14.02.2017, 21:24
Почему бы не взять привычку на то что если в каком то участке кода создавался PlayerTD то и удаление в дисконнекте обязательно надо записать чтобы удалялся по любому.

Причем тут дисконект? Ты сам пишешь, не зная суть проблемы.

Edward Morra
14.02.2017, 22:34
Все, сделал костыль. Спасибо всем.

Иван Бубнов
15.02.2017, 11:31
Можно и так:


stock PlayerTextDrawsDestroy(playerid)
{

if(0 == IsPlayerConnected(playerid))
return 1;

new
PlayerText:ptd_old_id = CreatePlayerTextDraw(playerid, 0.0, 0.0, !"_");

for(new i; i < (ptd_old_id+1); i++)
{
PlayerTextDrawDestroy(playerid, PlayerText:i);
}
return 1;
}

vovandolg
15.02.2017, 21:06
Причем тут дисконект? Ты сам пишешь, не зная суть проблемы.

А как по твоему образовываются проблемы с ТД?
Ты что думаешь баг в сампце самом?
У меня вот лично были проблемы с ними когда я не шарил и не включал логику как правильно ими пользоваться,
это как на мусорить и убраться за собой, так и тут создал в одну переменную будь добр удали перед очередным созданием, не сделал этого получи второй не удаляемый ТД, так как мод пишется на сторону сервера и все данные основные обрабатываются там, ты отключился от сервера и по сути в клиенте нету не ккого ТД, а на сервере он под твоим ID есть якобы вот из за этого и начинаются проблемы.
Делайте всё логически, не пихайте разом в одну переменную много TD, создал - удалил и т.д.

Edward Morra
15.02.2017, 21:43
А как по твоему образовываются проблемы с ТД?
Ты что думаешь баг в сампце самом?
У меня вот лично были проблемы с ними когда я не шарил и не включал логику как правильно ими пользоваться,
это как на мусорить и убраться за собой, так и тут создал в одну переменную будь добр удали перед очередным созданием, не сделал этого получи второй не удаляемый ТД, так как мод пишется на сторону сервера и все данные основные обрабатываются там, ты отключился от сервера и по сути в клиенте нету не ккого ТД, а на сервере он под твоим ID есть якобы вот из за этого и начинаются проблемы.
Делайте всё логически, не пихайте разом в одну переменную много TD, создал - удалил и т.д.

И опять же повторюсь - не зная суть проблемы, не лезь на коня верхом.
Даже если ты сделаешь удаление при дисконекте или релоге сервера, то если при спавне сделать создание этих текстдравов и спавн calling 2 раза, все равно он будет наложен друг на друга.
Вникни в саму проблему vovandolg, если люди обращаются, значит мысли закончились по исправлению. Может кто идею и поддаст. Для этого форум и существует, чтобы задавать вопросы.

vovandolg
16.02.2017, 09:36
И опять же повторюсь - не зная суть проблемы, не лезь на коня верхом.
Даже если ты сделаешь удаление при дисконекте или релоге сервера, то если при спавне сделать создание этих текстдравов и спавн calling 2 раза, все равно он будет наложен друг на друга.
Вникни в саму проблему vovandolg, если люди обращаются, значит мысли закончились по исправлению. Может кто идею и поддаст. Для этого форум и существует, чтобы задавать вопросы.

Задом наперёд читаешь мои сообщения?
Дело твоё, я просто уже разобрал эти TD знаю от чего такие проблемы,
тебе остаётся лишь прочитать советы с переда на конец и проверить то что я говорю.

Я мягко намекнул что если ты рак в павн и у тебя нету защиты от двойного создания то тебе надо сделать систему такого подобия:


new PlayerText:Draw1, CheckCreateDraw;

if(CheckCreateDraw == 1)
{
CheckCreateDraw = 0;
//Draw1 удаляется
}
else
{
CheckCreateDraw = 1;
//Draw1 создаётся
}

Чушь, но так хотя бы дойдет до тебя что ты был не прав ...

Edward Morra
16.02.2017, 11:57
Задом наперёд читаешь мои сообщения?
Дело твоё, я просто уже разобрал эти TD знаю от чего такие проблемы,
тебе остаётся лишь прочитать советы с переда на конец и проверить то что я говорю.

Я мягко намекнул что если ты рак в павн и у тебя нету защиты от двойного создания то тебе надо сделать систему такого подобия:


new PlayerText:Draw1, CheckCreateDraw;

if(CheckCreateDraw == 1)
{
CheckCreateDraw = 0;
//Draw1 удаляется
}
else
{
CheckCreateDraw = 1;
//Draw1 создаётся
}

Чушь, но так хотя бы дойдет до тебя что ты был не прав ...

Ладно, не будем разводить демагогии.
Все равно спасибо за то, что откликнулся на проблему.
Решение , да, актуальное.
Всем спасибо.
Тему CLOSED.