PDA

Просмотр полной версии : [Вопрос] Не создаётся PTD



execution
01.08.2019, 09:09
Существует ли лимит на CreatePlayerTextDraw или можно ли его обойти? Почему-то не создаются PTD, которые создаются самые последние, я так понял, что это лимит. (ибо менял последнее создание PTD с предпоследним и всё нормально)

Kovshevoy
01.08.2019, 09:59
wiki.sa-mp.com/wiki/Limits

verteich
01.08.2019, 10:23
Лимит PlayerTextDraw 256, лично я создаю тд когда это нужно (к примеру игрок открыл инвентарь) и уничтожаю когда игрок закрывает инвентарь.
А маленькие PlayerTextDraw создаются при коннекте.

DeimoS
01.08.2019, 10:24
Текстдравы игроков имеют хорошую особенность - их можно создавать только перед самым моментом использования, а после сразу удалять. Тогда и лимит никогда не исчерпается. Такое можно и с глобальными текстдравами проворачивать, но там придётся самостоятельно контролировать то, скольким людям показан текстдрав.
Ну и важно использовать с умом текстравы игроков, не лепя на них то, что можно и через глобальные текстдравы создать.

И да, не забывайте, что отрисовка текстдравов кушает FPS. Поэтому не стоит делать системы, в которых показывается сразу множество текстдравов. Игроки со слабыми ПК не одобрят :)

execution
02.08.2019, 14:43
UPD:

Создаю перед просмотром, потом показываю - ничего не происходит.
Создаю при подключении, потом показываю - всё нормально.

Создаю 83 PTD, думал не успевает создаваться или ещё что-то, сделал показ через таймер на 1сек - всё равно не показывает.

DeimoS
02.08.2019, 15:47
Всё должно успевать показываться. Ищи ошибку в коде.

execution
02.08.2019, 16:25
Показываю:

CDS_CreateTextDraw(playerid);
CDS_UpdateCarInfo(playerid, pSelectedCarDealerShip{playerid});
CDS_TextDrawShow(playerid);

SelectTextDraw(playerid, 0xD4D4D470);


Функции:

stock CDS_TextDrawShow(playerid)
{
for (new i = 0, c1 = 0, c2 = 0; i < sizeof BUY_AUTO[]; i++)
{
if (TD_MIN_CDS_COLOR_NUMBER_1 <= i <= TD_MAX_CDS_COLOR_NUMBER_1)
{
PlayerTextDrawColor(playerid, BUY_AUTO[playerid][i], CAR_DEALER_SHIP_COLOR_RGB[c1++]);
}
else if (TD_MIN_CDS_COLOR_NUMBER_2 <= i <= TD_MAX_CDS_COLOR_NUMBER_2)
{
PlayerTextDrawColor(playerid, BUY_AUTO[playerid][i], CAR_DEALER_SHIP_COLOR_RGB[c2++]);
}

PlayerTextDrawShow(playerid, BUY_AUTO[playerid][i]);
pShowPlayerCarDealerShipTD{playerid} = true;
}
}

stock CDS_UpdateCarInfo(playerid, selectModel)
{
stringer = "Model: ~y~";
strcat(stringer, VehicleNames[CAR_DEALER_SHIP_MODEL[selectModel] - 400]);
PlayerTextDrawSetString(playerid, BUY_AUTO[playerid][TD_CDS_CAR_MODEL_INFO_TD], stringer);

new
car_speed[7];
itos(gVehicleMaxSpeed[CAR_DEALER_SHIP_MODEL[selectModel] - 400], car_speed);

stringer = "MAX_SPEED: ~y~";
strcat(stringer, car_speed);
strcat(stringer, "_km/h");
PlayerTextDrawSetString(playerid, BUY_AUTO[playerid][TD_CDS_CAR_MAX_SPEED_TD], stringer);

new
car_price[16];
itos(CAR_DEALER_SHIP_PRICE[selectModel], car_price);

stringer = "COST: ~y~$";
strcat(stringer, car_price);
PlayerTextDrawSetString(playerid, BUY_AUTO[playerid][TD_CDS_CAR_MODEL_PRICE_TD], stringer);

PlayerTextDrawHide(playerid, BUY_AUTO[playerid][TD_CDS_PREVIEW_CAR_MODEL_ID]);
PlayerTextDrawSetPreviewModel(playerid, BUY_AUTO[playerid][TD_CDS_PREVIEW_CAR_MODEL_ID], CAR_DEALER_SHIP_MODEL[selectModel]);
PlayerTextDrawSetPreviewVehCol(playerid, BUY_AUTO[playerid][TD_CDS_PREVIEW_CAR_MODEL_ID],
pSelectedCarDealerShipColor_1{playerid},
pSelectedCarDealerShipColor_2{playerid});
PlayerTextDrawShow(playerid, BUY_AUTO[playerid][TD_CDS_PREVIEW_CAR_MODEL_ID]);
}

stock CDS_CreateTextDraw(playerid)
{
BUY_AUTO[playerid][0] = CreatePlayerTextDraw(playerid, 159.500000, 204.437500, "");
PlayerTextDrawLetterSize(playerid, BUY_AUTO[playerid][0], 0.000000, 0.000000);
PlayerTextDrawTextSize(playerid, BUY_AUTO[playerid][0], 170.000000, 69.000000);
PlayerTextDrawAlignment(playerid, BUY_AUTO[playerid][0], 1);
PlayerTextDrawColor(playerid, BUY_AUTO[playerid][0], 252645375);
PlayerTextDrawSetShadow(playerid, BUY_AUTO[playerid][0], 0);
PlayerTextDrawSetOutline(playerid, BUY_AUTO[playerid][0], 0);
PlayerTextDrawBackgroundColor(playerid, BUY_AUTO[playerid][0], 0);
PlayerTextDrawFont(playerid, BUY_AUTO[playerid][0], 5);
PlayerTextDrawSetProportional(playerid, BUY_AUTO[playerid][0], 0);
PlayerTextDrawSetShadow(playerid, BUY_AUTO[playerid][0], 0);
PlayerTextDrawSetPreviewModel(playerid, BUY_AUTO[playerid][0], 2153);
PlayerTextDrawSetPreviewRot(playerid, BUY_AUTO[playerid][0], 0.000000, 284.000000, 76.000000, 1.564944);
//etc
}

Опять таки, если создавать при подключении, то всё нормально

DeimoS
02.08.2019, 20:09
Ну тот же TDEditor создаёт и тут же показывает текстдрав без каких-либо задержек между этими двумя действиями :)

Логируй создаваемые ID и ID, которые выгружаются из переменных в PlayerTextDrawShow. Проблема точно в коде. В SA-MP нет проблем с тем, что текстдрав сразу показывается после создания.

execution
03.08.2019, 13:05
Решено. Оказывается лимит уже был превышен и более позднее созданные PTD уже не показывались.