Существует ли лимит на CreatePlayerTextDraw или можно ли его обойти? Почему-то не создаются PTD, которые создаются самые последние, я так понял, что это лимит. (ибо менял последнее создание PTD с предпоследним и всё нормально)
Вид для печати
Существует ли лимит на CreatePlayerTextDraw или можно ли его обойти? Почему-то не создаются PTD, которые создаются самые последние, я так понял, что это лимит. (ибо менял последнее создание PTD с предпоследним и всё нормально)
wiki.sa-mp.com/wiki/Limits
Лимит PlayerTextDraw 256, лично я создаю тд когда это нужно (к примеру игрок открыл инвентарь) и уничтожаю когда игрок закрывает инвентарь.
А маленькие PlayerTextDraw создаются при коннекте.
Текстдравы игроков имеют хорошую особенность - их можно создавать только перед самым моментом использования, а после сразу удалять. Тогда и лимит никогда не исчерпается. Такое можно и с глобальными текстдравами проворачивать, но там придётся самостоятельно контролировать то, скольким людям показан текстдрав.
Ну и важно использовать с умом текстравы игроков, не лепя на них то, что можно и через глобальные текстдравы создать.
И да, не забывайте, что отрисовка текстдравов кушает FPS. Поэтому не стоит делать системы, в которых показывается сразу множество текстдравов. Игроки со слабыми ПК не одобрят :)
UPD:
Создаю перед просмотром, потом показываю - ничего не происходит.
Создаю при подключении, потом показываю - всё нормально.
Создаю 83 PTD, думал не успевает создаваться или ещё что-то, сделал показ через таймер на 1сек - всё равно не показывает.
Всё должно успевать показываться. Ищи ошибку в коде.
Показываю:
CDS_CreateTextDraw(playerid); CDS_UpdateCarInfo(playerid, pSelectedCarDealerShip{playerid}); CDS_TextDrawShow(playerid);
Функции:
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) { } else if (TD_MIN_CDS_COLOR_NUMBER_2 <= i <= TD_MAX_CDS_COLOR_NUMBER_2) { } pShowPlayerCarDealerShipTD{playerid} = true; } } stock CDS_UpdateCarInfo(playerid, selectModel) { stringer = "Model: ~y~"; new car_speed[7]; itos(gVehicleMaxSpeed[CAR_DEALER_SHIP_MODEL[selectModel] - 400], car_speed); stringer = "MAX_SPEED: ~y~"; new car_price[16]; itos(CAR_DEALER_SHIP_PRICE[selectModel], car_price); stringer = "COST: ~y~$"; PlayerTextDrawSetPreviewModel(playerid, BUY_AUTO[playerid][TD_CDS_PREVIEW_CAR_MODEL_ID], CAR_DEALER_SHIP_MODEL[selectModel]); pSelectedCarDealerShipColor_1{playerid}, pSelectedCarDealerShipColor_2{playerid}); } stock CDS_CreateTextDraw(playerid) { PlayerTextDrawSetPreviewRot(playerid, BUY_AUTO[playerid][0], 0.000000, 284.000000, 76.000000, 1.564944); //etc }
Опять таки, если создавать при подключении, то всё нормально
Ну тот же TDEditor создаёт и тут же показывает текстдрав без каких-либо задержек между этими двумя действиями :)
Логируй создаваемые ID и ID, которые выгружаются из переменных в PlayerTextDrawShow. Проблема точно в коде. В SA-MP нет проблем с тем, что текстдрав сразу показывается после создания.
Решено. Оказывается лимит уже был превышен и более позднее созданные PTD уже не показывались.