SetObjectMaterialText
#1

Проблема с SetObjectMaterialText.
После нескольких подряд изменений одного из параметров одного и тоже объекта перестаёт работать ф-ия SetObjectMaterialText.

Допустим поменял цвет шрифта, через пару секунд поменял снова цвет шрифта этого же объекта и ф-ия SetObjectMaterialText перестаёт работать полностью.

Кто сталкивался?

Пробовал ставить перед SetObjectMaterialText(objectid, text, materialindex, materialsize, fontface, fontsize, bold, fontcolor, backcolor, textalignment);

SetObjectMaterial(objectid, 0, 0, "none", "none", 0);
и
SetObjectMaterialText(objectid, "none", materialindex, materialsize, "Calibri", 28, 0, 0xFFFF8200, 0xFFFAFAFA, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
и
защиту от ввода одинаковых параметров
Ни чего не помогает.

вот полный код
pawn Код:
stock SetObjectMaterialTextEx(playerid, objectid, text[], materialindex, materialsize,
    fontface[], fontsize, bold, fontcolor, backcolor, textalignment)
{
    new timers = GetTickCount();
    if(ANTIFLOOD == 1)
    {
        if((GetTickCount() - GetPVarInt(playerid, "ObjectMaterial")) < 2000)
        {
            SendClientMessage(playerid, COLOR_RED, "CEPBEP: {800000}Вы можете использовать SetObjectMaterialText только раз в две секунды.");
            return 0;
        }

    }//флуд конец

    /*format(strings, sizeof(strings), "SetObjectMaterialText(%d[%d], %s[%s])",
        objectid, LastPosterInfo[NP[playerid]][ppObjectID],
        text, LastPosterInfo[NP[playerid]][ppText]);
    SendClientMessage(playerid, -1, strings);

    format(strings, sizeof(strings), "SetObjectMaterialText(fontface: %s[%s], fontsize: %d[%d])",
        fontface, LastPosterInfo[NP[playerid]][ppFont],
        fontsize, LastPosterInfo[NP[playerid]][ppSize]);
    SendClientMessage(playerid, -1, strings);

    format(strings, sizeof(strings), "SetObjectMaterialText(fontcolor: %x[%x], backcolor: %x[%x])",
        fontcolor, LastPosterInfo[NP[playerid]][ppColor],
        backcolor, LastPosterInfo[NP[playerid]][ppBack]);
    SendClientMessage(playerid, -1, strings);*/

   
    if( objectid == LastPosterInfo[NP[playerid]][ppObjectID] &&
        !strcmp(text, LastPosterInfo[NP[playerid]][ppText], true) &&
        !strcmp(fontface, LastPosterInfo[NP[playerid]][ppFont], true) &&
        fontsize == LastPosterInfo[NP[playerid]][ppSize] &&
        fontcolor == LastPosterInfo[NP[playerid]][ppColor] &&
        backcolor == LastPosterInfo[NP[playerid]][ppBack]
      ) { SendClientMessage(playerid, -1, "Ни чего не изменено"); return 0; }
     
    LastPosterInfo[NP[playerid]][ppObjectID] = objectid;
    strmid(LastPosterInfo[NP[playerid]][ppText], text, 0, 128, 255);
    strmid(LastPosterInfo[NP[playerid]][ppFont], fontface, 0, 16, 255);
    LastPosterInfo[NP[playerid]][ppSize] = fontsize;
    LastPosterInfo[NP[playerid]][ppColor] = fontcolor;
    LastPosterInfo[NP[playerid]][ppBack] = backcolor;

    //SetObjectMaterial(objectid, 0, 0, "none", "none", 0);
    //SetObjectMaterialText(objectid, "none", materialindex, materialsize, "Calibri", 28, 0, 0xFFFF8200, 0xFFFAFAFA, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
    SetPVarInt(playerid, "ObjectMaterial", GetTickCount());
    return SetObjectMaterialText(objectid, text, materialindex, materialsize, fontface, fontsize, bold, fontcolor, backcolor, textalignment);
    //return 1;
}
Такое ощущение что надо ставить защиту от частого изменения параметров.
Reply
#2

Попробуй пересоздавать объект.
Reply
#3

Quote:
Originally Posted by White_116
Посмотреть сообщение
Попробуй пересоздавать объект.
Спасибо.

Вы можете использовать SetObjectMaterialText только раз в две секунды вроде помогло.
Reply
#4

Насколько я помню, смена материала происходит не более 16 раз за "жизненный цикл объекта", а также не работает для слоёв выше 12 (кажется).
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)