Меню (if esle)

rxki

Пользователь
Регистрация
5 Янв 2019
Сообщения
170
Симпатии
3
Пол
Мужской
#1
Всем доброго времени суток, господа. Столкнулся с проблемой в меню. В двух словах о менюшке. На TD моде есть меню турели с ее характеристиками и функционалом. При локализации этого меню поехала строка с меню (видимо из-за превышенного кол байтов в массиве). В общем, когда стоишь возле турели и заходишь в меню - оно отображается исправно. Если находишься за пределами турели и вызываешь меню - оно становится некликабельным и сьезжает из-за добавленной информационной строки "ты должен оставаться возле турели". Креплю скриншоты ниже. Я решил сделать так, что бы при вызове меню за приделами турели выдавало только ее характеристики и надпись "ты должен оставаться возле турели", а само меню с опциями не показывало (так как оно и так недоступно при данном условии). Вот паблик этого меню:

PHP:
public ShowTurretMenu(id, iTurretIndex)
{   
    client_cmd(id, "spk sound/%s", g_SoundFile[SOUND_MENU_SELECT]);
    
    new szTitle[512], szFormat[128];
    new iEnt = g_PlayerTurretEnt[id][iTurretIndex];
    new iTurretType = entity_get_int(iEnt, EV_INT_turret_type)
    new iTurretAmmo = entity_get_int(iEnt, EV_INT_turret_ammo);
    new iDamageLevel = g_PlayerTurretDamageLevel[id][iTurretIndex]
    new Float:fFireRate = ((g_TurretsFreqData[iTurretType] / 100.0) * (g_TurretsFireRateData[iTurretType][g_PlayerTurretFireRateLevel[id][iTurretIndex]] / 100.0));

    entity_get_string(iEnt, EV_SZ_turret_name, szFormat, 32);

    formatex(szTitle, charsmax(szTitle), "\r[\y %s \r] [\y %s\r ]", szFormat, g_TurretsName[iTurretType]);

    CreateTurretRanger(id, iEnt, g_PlayerTurretRangeLevel[id][iTurretIndex]);

    new totemAbbilities[3];
    GetTurretAbilitiesFromTotem(iEnt, totemAbbilities);

    if(totemAbbilities[0] || totemAbbilities[1] || totemAbbilities[2])
        format(szTitle, charsmax(szTitle), "%s\w + Эффект тотема\r", szTitle);

    new iDamageMin = floatround(g_TurretsDamageData[iTurretType][iDamageLevel][0] * (1.0 + totemAbbilities[0] / 100.0));
    new iDamageMax = floatround(g_TurretsDamageData[iTurretType][iDamageLevel][1] * (1.0 + totemAbbilities[0] / 100.0));
    new iRange = floatround(g_TurretsRangeData[iTurretType][g_PlayerTurretRangeLevel[id][iTurretIndex]] * (1.0 + totemAbbilities[1] / 100.0));
    fFireRate *= (1.0 - (totemAbbilities[2] / 100.0));

    formatex(szTitle, charsmax(szTitle), "%s^n[ \yУровень: \w%d\r ] [ \yПатроны: \w%d\r ]^n[ \yУрон: \w%d\y ~\w %d\r ] [ \yРадиус:\w %d\r ]^n[ \yТочность: \w%d%%\r ] [\yПерезарядка: \w%0.2fs\r ]",
    szTitle, entity_get_int(iEnt, EV_INT_turret_level), iTurretAmmo ?  iTurretAmmo : 0,
    iDamageMin, iDamageMax, iRange, g_TurretsAccuracyData[iTurretType][ g_PlayerTurretAccuracyLevel[id][iTurretIndex]], fFireRate)
    
    if(g_PlayerTouchingTurret[id] !=  iEnt)
        formatex(szTitle, charsmax(szTitle), "%s^n\w- Ты должен оставаться возле турели -", szTitle);

    new iMenu = menu_create(szTitle, "ShowTurretMenuH")
    new cb = menu_makecallback("ShowTurretMenuCb")
    
    new szTurretIndex[4];
    num_to_str(iTurretIndex, szTurretIndex, 3)
    
    switch(iTurretType)
    {
        case TURRET_BULLET:        formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_BULLET_AMMO_NUM], g_ConfigValues[CFG_TURRET_BULLET_AMMO_COST])
        case TURRET_LASER:        formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_LASER_AMMO_NUM], g_ConfigValues[CFG_TURRET_LASER_AMMO_COST])
        case TURRET_LIGHTING:    formatex(szFormat, 128, "Купить %d патронов за [%d золота]", g_ConfigValues[CFG_TURRET_LIGHTING_AMMO_NUM], g_ConfigValues[CFG_TURRET_LIGHTING_AMMO_COST])
        case TURRET_MULTI_LASER:formatex(szFormat, 128, "Купить %d патронов за [%d золота]", g_ConfigValues[CFG_TURRET_M_LASER_AMMO_NUM], g_ConfigValues[CFG_TURRET_M_LASER_AMMO_COST])
        case TURRET_ROCKET:        formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_ROCKET_AMMO_NUM], g_ConfigValues[CFG_TURRET_ROCKET_AMMO_COST])
        case TURRET_GATLING:    formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_GATLING_AMMO_NUM], g_ConfigValues[CFG_TURRET_GATLING_AMMO_COST])
    }
    // 0
    menu_additem(iMenu, szFormat, szTurretIndex, _, cb);
    
    // 1
    menu_additem(iMenu, "Удалить турель", _, _, cb);

    // 2
    formatex(szFormat, 64, "Переместить [%d золота]", g_ConfigValues[CFG_TURRET_MOVE_COST])
    menu_additem(iMenu, szFormat, _, _, cb)
    
    // 3
    formatex(szFormat, 64, "Переименовать [%d золота]", g_ConfigValues[CFG_TURRET_CHANGE_NAME_COST])
    menu_additem(iMenu, szFormat, _, _, cb)
    
    // 4
    if(g_IsTurretUpgrading[id][iTurretIndex])
        menu_additem(iMenu, "Находится в фазе конфигурации", _, _, cb)
    else
        menu_additem(iMenu, "Прокачать турель", _, _, cb)
    
    if(g_PlayerTouchingTurret[id] != iEnt)
        menu_setprop(iMenu, MPROP_EXITNAME, "Назад")
    
    menu_display(id, iMenu);
    set_task(0.1, "reset", id + 7192);

    return PLUGIN_CONTINUE
}
20190112153913_1.jpg 20190112153920_1.jpg


Я сначала взял в скобки условие
if(g_PlayerTouchingTurret[id] != iEnt){
formatex(szTitle, charsmax(szTitle), "%s^n\w- Ты должен оставаться возле турели -", szTitle);
}

и ниже добавил esle и взял в скобки все, до return PLUGIN_CONTINUE. Но при вызове меню, будучи не в зоне турели ничего не происходило. А как сделать, что бы показывали хар-ки (написаны желтым цветом) и строку "Ты должен оставаться возле турели", без меню. Или же, сделать так, что бы показывало корректно и не съезжало (но макс кол байт в массиве 512, тут вроде ничего не поделаешь). Прошу помощи вашей. Если где то базарнул ахинею - прошу прощения, поправьте, я только учусь :)
 

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
970
Симпатии
319
#2
Код невозможно редактировать, но попробуй так:
Код:
public ShowTurretMenu(id, iTurretIndex)
{
    client_cmd(id, "spk sound/%s", g_SoundFile[SOUND_MENU_SELECT]);

    new szTitle[512], szFormat[128];
    new iEnt = g_PlayerTurretEnt[id][iTurretIndex];
    new iTurretType = entity_get_int(iEnt, EV_INT_turret_type)
    new iTurretAmmo = entity_get_int(iEnt, EV_INT_turret_ammo);
    new iDamageLevel = g_PlayerTurretDamageLevel[id][iTurretIndex]
    new Float:fFireRate = ((g_TurretsFreqData[iTurretType] / 100.0) * (g_TurretsFireRateData[iTurretType][g_PlayerTurretFireRateLevel[id][iTurretIndex]] / 100.0));

    entity_get_string(iEnt, EV_SZ_turret_name, szFormat, 32);

    formatex(szTitle, charsmax(szTitle), "\r[\y %s \r] [\y %s\r ]", szFormat, g_TurretsName[iTurretType]);

    CreateTurretRanger(id, iEnt, g_PlayerTurretRangeLevel[id][iTurretIndex]);

    new totemAbbilities[3];
    GetTurretAbilitiesFromTotem(iEnt, totemAbbilities);

    if(totemAbbilities[0] || totemAbbilities[1] || totemAbbilities[2])
        format(szTitle, charsmax(szTitle), "%s\w + Эффект тотема\r", szTitle);

    new iDamageMin = floatround(g_TurretsDamageData[iTurretType][iDamageLevel][0] * (1.0 + totemAbbilities[0] / 100.0));
    new iDamageMax = floatround(g_TurretsDamageData[iTurretType][iDamageLevel][1] * (1.0 + totemAbbilities[0] / 100.0));
    new iRange = floatround(g_TurretsRangeData[iTurretType][g_PlayerTurretRangeLevel[id][iTurretIndex]] * (1.0 + totemAbbilities[1] / 100.0));
    fFireRate *= (1.0 - (totemAbbilities[2] / 100.0));

    formatex(szTitle, charsmax(szTitle), "%s^n[ \yУровень: \w%d\r ] [ \yПатроны: \w%d\r ]^n[ \yУрон: \w%d\y ~\w %d\r ] [ \yРадиус:\w %d\r ]^n[ \yТочность: \w%d%%\r ] [\yПерезарядка: \w%0.2fs\r ]",
        szTitle, entity_get_int(iEnt, EV_INT_turret_level), iTurretAmmo ?  iTurretAmmo : 0,
        iDamageMin, iDamageMax, iRange, g_TurretsAccuracyData[iTurretType][ g_PlayerTurretAccuracyLevel[id][iTurretIndex]], fFireRate)
    new iMenu;
    if(g_PlayerTouchingTurret[id] !=  iEnt){
        formatex(szTitle, charsmax(szTitle), "%s^n\w- Ты должен оставаться возле турели -", szTitle);
        iMenu=menu_create(szTitle, "ShowTurretMenuH")
    }
    else{
        iMenu=menu_create(szTitle, "ShowTurretMenuH");
        new cb = menu_makecallback("ShowTurretMenuCb")

        new szTurretIndex[4];
        num_to_str(iTurretIndex, szTurretIndex, 3)

        switch(iTurretType)
        {
            case TURRET_BULLET:        formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_BULLET_AMMO_NUM], g_ConfigValues[CFG_TURRET_BULLET_AMMO_COST])
            case TURRET_LASER:        formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_LASER_AMMO_NUM], g_ConfigValues[CFG_TURRET_LASER_AMMO_COST])
            case TURRET_LIGHTING:    formatex(szFormat, 128, "Купить %d патронов за [%d золота]", g_ConfigValues[CFG_TURRET_LIGHTING_AMMO_NUM], g_ConfigValues[CFG_TURRET_LIGHTING_AMMO_COST])
            case TURRET_MULTI_LASER:formatex(szFormat, 128, "Купить %d патронов за [%d золота]", g_ConfigValues[CFG_TURRET_M_LASER_AMMO_NUM], g_ConfigValues[CFG_TURRET_M_LASER_AMMO_COST])
            case TURRET_ROCKET:        formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_ROCKET_AMMO_NUM], g_ConfigValues[CFG_TURRET_ROCKET_AMMO_COST])
            case TURRET_GATLING:    formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_GATLING_AMMO_NUM], g_ConfigValues[CFG_TURRET_GATLING_AMMO_COST])
        }
        // 0
        menu_additem(iMenu, szFormat, szTurretIndex, _, cb);

        // 1
        menu_additem(iMenu, "Удалить турель", _, _, cb);

        // 2
        formatex(szFormat, 64, "Переместить [%d золота]", g_ConfigValues[CFG_TURRET_MOVE_COST])
        menu_additem(iMenu, szFormat, _, _, cb)

        // 3
        formatex(szFormat, 64, "Переименовать [%d золота]", g_ConfigValues[CFG_TURRET_CHANGE_NAME_COST])
        menu_additem(iMenu, szFormat, _, _, cb)

        // 4
        if(g_IsTurretUpgrading[id][iTurretIndex])
            menu_additem(iMenu, "Находится в фазе конфигурации", _, _, cb);
        else
            menu_additem(iMenu, "Прокачать турель", _, _, cb);
    }
    if(g_PlayerTouchingTurret[id] != iEnt)
        menu_setprop(iMenu, MPROP_EXITNAME, "Назад");

    menu_display(id, iMenu);
    set_task(0.1, "reset", id + 7192);

    return PLUGIN_CONTINUE
}
 

fantom

Постоялец
Регистрация
11 Июн 2017
Сообщения
280
Симпатии
201
Пол
Мужской
#3
rxki,
Если можна, то после окончательного перевода поделитесь ним
 

rxki

Пользователь
Регистрация
5 Янв 2019
Сообщения
170
Симпатии
3
Пол
Мужской
#4
Код невозможно редактировать, но попробуй так:
Код:
public ShowTurretMenu(id, iTurretIndex)
{
    client_cmd(id, "spk sound/%s", g_SoundFile[SOUND_MENU_SELECT]);

    new szTitle[512], szFormat[128];
    new iEnt = g_PlayerTurretEnt[id][iTurretIndex];
    new iTurretType = entity_get_int(iEnt, EV_INT_turret_type)
    new iTurretAmmo = entity_get_int(iEnt, EV_INT_turret_ammo);
    new iDamageLevel = g_PlayerTurretDamageLevel[id][iTurretIndex]
    new Float:fFireRate = ((g_TurretsFreqData[iTurretType] / 100.0) * (g_TurretsFireRateData[iTurretType][g_PlayerTurretFireRateLevel[id][iTurretIndex]] / 100.0));

    entity_get_string(iEnt, EV_SZ_turret_name, szFormat, 32);

    formatex(szTitle, charsmax(szTitle), "\r[\y %s \r] [\y %s\r ]", szFormat, g_TurretsName[iTurretType]);

    CreateTurretRanger(id, iEnt, g_PlayerTurretRangeLevel[id][iTurretIndex]);

    new totemAbbilities[3];
    GetTurretAbilitiesFromTotem(iEnt, totemAbbilities);

    if(totemAbbilities[0] || totemAbbilities[1] || totemAbbilities[2])
        format(szTitle, charsmax(szTitle), "%s\w + Эффект тотема\r", szTitle);

    new iDamageMin = floatround(g_TurretsDamageData[iTurretType][iDamageLevel][0] * (1.0 + totemAbbilities[0] / 100.0));
    new iDamageMax = floatround(g_TurretsDamageData[iTurretType][iDamageLevel][1] * (1.0 + totemAbbilities[0] / 100.0));
    new iRange = floatround(g_TurretsRangeData[iTurretType][g_PlayerTurretRangeLevel[id][iTurretIndex]] * (1.0 + totemAbbilities[1] / 100.0));
    fFireRate *= (1.0 - (totemAbbilities[2] / 100.0));

    formatex(szTitle, charsmax(szTitle), "%s^n[ \yУровень: \w%d\r ] [ \yПатроны: \w%d\r ]^n[ \yУрон: \w%d\y ~\w %d\r ] [ \yРадиус:\w %d\r ]^n[ \yТочность: \w%d%%\r ] [\yПерезарядка: \w%0.2fs\r ]",
        szTitle, entity_get_int(iEnt, EV_INT_turret_level), iTurretAmmo ?  iTurretAmmo : 0,
        iDamageMin, iDamageMax, iRange, g_TurretsAccuracyData[iTurretType][ g_PlayerTurretAccuracyLevel[id][iTurretIndex]], fFireRate)
    new iMenu;
    if(g_PlayerTouchingTurret[id] !=  iEnt){
        formatex(szTitle, charsmax(szTitle), "%s^n\w- Ты должен оставаться возле турели -", szTitle);
        iMenu=menu_create(szTitle, "ShowTurretMenuH")
    }
    else{
        iMenu=menu_create(szTitle, "ShowTurretMenuH");
        new cb = menu_makecallback("ShowTurretMenuCb")

        new szTurretIndex[4];
        num_to_str(iTurretIndex, szTurretIndex, 3)

        switch(iTurretType)
        {
            case TURRET_BULLET:        formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_BULLET_AMMO_NUM], g_ConfigValues[CFG_TURRET_BULLET_AMMO_COST])
            case TURRET_LASER:        formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_LASER_AMMO_NUM], g_ConfigValues[CFG_TURRET_LASER_AMMO_COST])
            case TURRET_LIGHTING:    formatex(szFormat, 128, "Купить %d патронов за [%d золота]", g_ConfigValues[CFG_TURRET_LIGHTING_AMMO_NUM], g_ConfigValues[CFG_TURRET_LIGHTING_AMMO_COST])
            case TURRET_MULTI_LASER:formatex(szFormat, 128, "Купить %d патронов за [%d золота]", g_ConfigValues[CFG_TURRET_M_LASER_AMMO_NUM], g_ConfigValues[CFG_TURRET_M_LASER_AMMO_COST])
            case TURRET_ROCKET:        formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_ROCKET_AMMO_NUM], g_ConfigValues[CFG_TURRET_ROCKET_AMMO_COST])
            case TURRET_GATLING:    formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_GATLING_AMMO_NUM], g_ConfigValues[CFG_TURRET_GATLING_AMMO_COST])
        }
        // 0
        menu_additem(iMenu, szFormat, szTurretIndex, _, cb);

        // 1
        menu_additem(iMenu, "Удалить турель", _, _, cb);

        // 2
        formatex(szFormat, 64, "Переместить [%d золота]", g_ConfigValues[CFG_TURRET_MOVE_COST])
        menu_additem(iMenu, szFormat, _, _, cb)

        // 3
        formatex(szFormat, 64, "Переименовать [%d золота]", g_ConfigValues[CFG_TURRET_CHANGE_NAME_COST])
        menu_additem(iMenu, szFormat, _, _, cb)

        // 4
        if(g_IsTurretUpgrading[id][iTurretIndex])
            menu_additem(iMenu, "Находится в фазе конфигурации", _, _, cb);
        else
            menu_additem(iMenu, "Прокачать турель", _, _, cb);
    }
    if(g_PlayerTouchingTurret[id] != iEnt)
        menu_setprop(iMenu, MPROP_EXITNAME, "Назад");

    menu_display(id, iMenu);
    set_task(0.1, "reset", id + 7192);

    return PLUGIN_CONTINUE
}
Не помогло. Так же, при нажатии на турель, находясь не рядом с ней, просто ничего не показывает. Только появляется радиус поражения выбранной турели и все.
13 Янв 2019
rxki,
Если можна, то после окончательного перевода поделитесь ним
переводом? или плагином? или модом?
 

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
970
Симпатии
319
#5

rxki

Пользователь
Регистрация
5 Янв 2019
Сообщения
170
Симпатии
3
Пол
Мужской
#6
screen
13 Янв 2019

Странно что у тебя не крашит сервер.
Ведь formatex не умеет же сам себя переопределять.
20190113212516_1.jpg 20190113212521_1.jpg

Первый скрин - меню перед выбором турели. Второй скрин - нажал на единицу.
13 Янв 2019
screen
13 Янв 2019

Странно что у тебя не крашит сервер.
Ведь formatex не умеет же сам себя переопределять.
на счет этого не могу ничего сказать, так как не знаю его поведение. Да, сервер не ложится
 

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
970
Симпатии
319
#7
Ничего не понятно, у тебя меню перестало открываться? Или как?
 

rxki

Пользователь
Регистрация
5 Янв 2019
Сообщения
170
Симпатии
3
Пол
Мужской
#8
Ничего не понятно, у тебя меню перестало открываться? Или как?
перестало открывать меню турели, если игрок вызывает его находясь не рядом с ней. Если подойди к турели - открывает корректное меню (как на 2ом скрине 1ого моего сообщения). Если же отойти от турели на расстояние и зайти в меню этой турели - ничего не происходит, кроме как активации показа ее радиуса поражения. Изначально, при открытии меню, находясь вдали от турели показывало кривое меню (как на 1ом скриншоте моего 1ого сообщения). А хотелось бы, что бы показывало хар-ки (название турели, урон, точность и тд), надпись "Ты должен находиться возле турели" и кнопка "Назад"
 

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
970
Симпатии
319
#9
C++:
public ShowTurretMenu(id, iTurretIndex)
{
    client_cmd(id, "spk sound/%s", g_SoundFile[SOUND_MENU_SELECT]);

    new szTitle[512], szFormat[128];
    new iEnt = g_PlayerTurretEnt[id][iTurretIndex];
    new iTurretType = entity_get_int(iEnt, EV_INT_turret_type)
    new iTurretAmmo = entity_get_int(iEnt, EV_INT_turret_ammo);
    new iDamageLevel = g_PlayerTurretDamageLevel[id][iTurretIndex]
    new Float:fFireRate = ((g_TurretsFreqData[iTurretType] / 100.0) * (g_TurretsFireRateData[iTurretType][g_PlayerTurretFireRateLevel[id][iTurretIndex]] / 100.0));

    entity_get_string(iEnt, EV_SZ_turret_name, szFormat, 32);

    formatex(szTitle, charsmax(szTitle), "\r[\y %s \r] [\y %s\r ]", szFormat, g_TurretsName[iTurretType]);

    CreateTurretRanger(id, iEnt, g_PlayerTurretRangeLevel[id][iTurretIndex]);

    new totemAbbilities[3];
    GetTurretAbilitiesFromTotem(iEnt, totemAbbilities);

    if(totemAbbilities[0] || totemAbbilities[1] || totemAbbilities[2])
        format(szTitle, charsmax(szTitle), "%s\w + Эффект тотема\r", szTitle);

    new iDamageMin = floatround(g_TurretsDamageData[iTurretType][iDamageLevel][0] * (1.0 + totemAbbilities[0] / 100.0));
    new iDamageMax = floatround(g_TurretsDamageData[iTurretType][iDamageLevel][1] * (1.0 + totemAbbilities[0] / 100.0));
    new iRange = floatround(g_TurretsRangeData[iTurretType][g_PlayerTurretRangeLevel[id][iTurretIndex]] * (1.0 + totemAbbilities[1] / 100.0));
    fFireRate *= (1.0 - (totemAbbilities[2] / 100.0));

    formatex(szTitle, charsmax(szTitle), "%s^n[ \yУровень: \w%d\r ] [ \yПатроны: \w%d\r ]^n[ \yУрон: \w%d\y ~\w %d\r ] [ \yРадиус:\w %d\r ]^n[ \yТочность: \w%d%%\r ] [\yПерезарядка: \w%0.2fs\r ]",
        szTitle, entity_get_int(iEnt, EV_INT_turret_level), iTurretAmmo ?  iTurretAmmo : 0,
        iDamageMin, iDamageMax, iRange, g_TurretsAccuracyData[iTurretType][ g_PlayerTurretAccuracyLevel[id][iTurretIndex]], fFireRate)
    new iMenu;
    if(g_PlayerTouchingTurret[id] !=  iEnt){
        formatex(szTitle, charsmax(szTitle), "%s^n\w- Ты должен оставаться возле турели -", szTitle);
        iMenu=menu_create(szTitle, "ShowTurretMenuH2");
        new cb = menu_makecallback("ShowTurretMenuCb2");
        menu_additem(iMenu, "nothing there bitch", _, _, cb);
        menu_setprop(iMenu, MPROP_EXITNAME, "Назад");
    }
    else{
        iMenu=menu_create(szTitle, "ShowTurretMenuH");
        new cb = menu_makecallback("ShowTurretMenuCb")

        new szTurretIndex[4];
        num_to_str(iTurretIndex, szTurretIndex, 3)

        switch(iTurretType)
        {
            case TURRET_BULLET:        formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_BULLET_AMMO_NUM], g_ConfigValues[CFG_TURRET_BULLET_AMMO_COST])
            case TURRET_LASER:        formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_LASER_AMMO_NUM], g_ConfigValues[CFG_TURRET_LASER_AMMO_COST])
            case TURRET_LIGHTING:    formatex(szFormat, 128, "Купить %d патронов за [%d золота]", g_ConfigValues[CFG_TURRET_LIGHTING_AMMO_NUM], g_ConfigValues[CFG_TURRET_LIGHTING_AMMO_COST])
            case TURRET_MULTI_LASER:formatex(szFormat, 128, "Купить %d патронов за [%d золота]", g_ConfigValues[CFG_TURRET_M_LASER_AMMO_NUM], g_ConfigValues[CFG_TURRET_M_LASER_AMMO_COST])
            case TURRET_ROCKET:        formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_ROCKET_AMMO_NUM], g_ConfigValues[CFG_TURRET_ROCKET_AMMO_COST])
            case TURRET_GATLING:    formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_GATLING_AMMO_NUM], g_ConfigValues[CFG_TURRET_GATLING_AMMO_COST])
        }
        // 0
        menu_additem(iMenu, szFormat, szTurretIndex, _, cb);

        // 1
        menu_additem(iMenu, "Удалить турель", _, _, cb);

        // 2
        formatex(szFormat, 64, "Переместить [%d золота]", g_ConfigValues[CFG_TURRET_MOVE_COST])
        menu_additem(iMenu, szFormat, _, _, cb)

        // 3
        formatex(szFormat, 64, "Переименовать [%d золота]", g_ConfigValues[CFG_TURRET_CHANGE_NAME_COST])
        menu_additem(iMenu, szFormat, _, _, cb)

        // 4
        if(g_IsTurretUpgrading[id][iTurretIndex])
            menu_additem(iMenu, "Находится в фазе конфигурации", _, _, cb);
        else
            menu_additem(iMenu, "Прокачать турель", _, _, cb);
    }
    menu_display(id, iMenu);
    set_task(0.1, "reset", id + 7192);

    return PLUGIN_CONTINUE
}
public ShowTurretMenuCb2(id, menu, item)return ITEM_ENABLED;
public ShowTurretMenuH2(id,menu)menu_destroy(menu);
Попробуй так, хз.
 

rxki

Пользователь
Регистрация
5 Янв 2019
Сообщения
170
Симпатии
3
Пол
Мужской
#10
kapangaIII, получилось, только надпись все равно, почему то, не полностью отображается
20190113222614_1.jpg
 

Mistrick

Разработчик
Регистрация
8 Июн 2017
Сообщения
47
Симпатии
25
Пол
Мужской
#13
Нельзя перезаписывать в себя используя formatex,
formatex(szTitle, charsmax(szTitle), "%s^n\w- Ты должен оставаться возле турели -", szTitle);
->
format(szTitle, charsmax(szTitle), "%s^n\w- Ты должен оставаться возле турели -", szTitle);
Смысл выводить этот текст в новом меню? Напоролись на то, что меню не выводит без итемов.
Сделайте вывод на старом.
 

rxki

Пользователь
Регистрация
5 Янв 2019
Сообщения
170
Симпатии
3
Пол
Мужской
#14
Нельзя перезаписывать в себя используя formatex,
formatex(szTitle, charsmax(szTitle), "%s^n\w- Ты должен оставаться возле турели -", szTitle);
->
format(szTitle, charsmax(szTitle), "%s^n\w- Ты должен оставаться возле турели -", szTitle);
Смысл выводить этот текст в новом меню? Напоролись на то, что меню не выводит без итемов.
Сделайте вывод на старом.
изначально это же просто строка, которая выдается при условии. как совместить ее в старом меню, если само меню корректно отображается (когда игрок находится возле турели). format тоже не спас...
 

rxki

Пользователь
Регистрация
5 Янв 2019
Сообщения
170
Симпатии
3
Пол
Мужской
#16
alliedmodders/amxmodx
255 байт лимит на титул в новом меню.
еще лучше)

я вот не могу понять, почему не фурычит такой вариант
PHP:
public ShowTurretMenu(id, iTurretIndex)
{   
    client_cmd(id, "spk sound/%s", g_SoundFile[SOUND_MENU_SELECT]);
    
    new szTitle[512], szFormat[128];
    new iEnt = g_PlayerTurretEnt[id][iTurretIndex];
    new iTurretType = entity_get_int(iEnt, EV_INT_turret_type)
    new iTurretAmmo = entity_get_int(iEnt, EV_INT_turret_ammo);
    new iDamageLevel = g_PlayerTurretDamageLevel[id][iTurretIndex]
    new Float:fFireRate = ((g_TurretsFreqData[iTurretType] / 100.0) * (g_TurretsFireRateData[iTurretType][g_PlayerTurretFireRateLevel[id][iTurretIndex]] / 100.0));

    entity_get_string(iEnt, EV_SZ_turret_name, szFormat, 32);

    if(iTurretAmmo == -1)
    {
        iTurretAmmo = 0;
        formatex(szTitle, charsmax(szTitle), "\r[\y %s \r] [\y %s\r ]", szFormat, g_TurretsName[iTurretType]);
    }
    else if(g_PlayerAlarmStatus[id][iTurretIndex])
        formatex(szTitle, charsmax(szTitle), "\r[\y %s \r] [\y %s\r ]", szFormat, g_TurretsName[iTurretType]);
    else
        formatex(szTitle, charsmax(szTitle), "\r[\y %s \r] [\y %s\r ]", szFormat, g_TurretsName[iTurretType]);

    CreateTurretRanger(id, iEnt, g_PlayerTurretRangeLevel[id][iTurretIndex]);

    new totemAbbilities[3];
    GetTurretAbilitiesFromTotem(iEnt, totemAbbilities);

    if(totemAbbilities[0] || totemAbbilities[1] || totemAbbilities[2])
        format(szTitle, charsmax(szTitle), "%s\w + Эффект тотема\r", szTitle);

    new iDamageMin = floatround(g_TurretsDamageData[iTurretType][iDamageLevel][0] * (1.0 + totemAbbilities[0] / 100.0));
    new iDamageMax = floatround(g_TurretsDamageData[iTurretType][iDamageLevel][1] * (1.0 + totemAbbilities[0] / 100.0));
    new iRange = floatround(g_TurretsRangeData[iTurretType][g_PlayerTurretRangeLevel[id][iTurretIndex]] * (1.0 + totemAbbilities[1] / 100.0));
    fFireRate *= (1.0 - (totemAbbilities[2] / 100.0));

    formatex(szTitle, charsmax(szTitle), "%s^n[ \yУровень: \w%d\r ] [ \yПатроны: \w%d\r ]^n[ \yУрон: \w%d\y ~\w %d\r ] [ \yРадиус:\w %d\r ]^n[ \yТочность: \w%d%%\r ] [\yПерезарядка: \w%0.2fs\r ]",
    szTitle, entity_get_int(iEnt, EV_INT_turret_level), iTurretAmmo ?  iTurretAmmo : 0,
    iDamageMin, iDamageMax, iRange, g_TurretsAccuracyData[iTurretType][ g_PlayerTurretAccuracyLevel[id][iTurretIndex]], fFireRate)
    
    if(g_PlayerTouchingTurret[id] !=  iEnt)
    {
        new iMenu = menu_create(szTitle, "ShowTurretMenuH")
        
        formatex(szTitle, charsmax(szTitle), "%s^n\w- Ты должен оставаться возле турели -", szTitle);
        if(g_PlayerTouchingTurret[id] != iEnt)
        menu_setprop(iMenu, MPROP_EXITNAME, "Назад")
        menu_display(id, iMenu);
        set_task(0.1, "reset", id + 7192);
    }
    else
    {
    new iMenu = menu_create(szTitle, "ShowTurretMenuH")
    new cb = menu_makecallback("ShowTurretMenuCb")
    
    new szTurretIndex[4];
    num_to_str(iTurretIndex, szTurretIndex, 3)
    
    switch(iTurretType)
    {
        case TURRET_BULLET:        formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_BULLET_AMMO_NUM], g_ConfigValues[CFG_TURRET_BULLET_AMMO_COST])
        case TURRET_LASER:        formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_LASER_AMMO_NUM], g_ConfigValues[CFG_TURRET_LASER_AMMO_COST])
        case TURRET_LIGHTING:    formatex(szFormat, 128, "Купить %d патронов за [%d золота]", g_ConfigValues[CFG_TURRET_LIGHTING_AMMO_NUM], g_ConfigValues[CFG_TURRET_LIGHTING_AMMO_COST])
        case TURRET_MULTI_LASER:formatex(szFormat, 128, "Купить %d патронов за [%d золота]", g_ConfigValues[CFG_TURRET_M_LASER_AMMO_NUM], g_ConfigValues[CFG_TURRET_M_LASER_AMMO_COST])
        case TURRET_ROCKET:        formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_ROCKET_AMMO_NUM], g_ConfigValues[CFG_TURRET_ROCKET_AMMO_COST])
        case TURRET_GATLING:    formatex(szFormat, 128, "Купить %d патронов [%d золота]", g_ConfigValues[CFG_TURRET_GATLING_AMMO_NUM], g_ConfigValues[CFG_TURRET_GATLING_AMMO_COST])
    }
    // 0
    menu_additem(iMenu, szFormat, szTurretIndex, _, cb);
    
    // 1
    menu_additem(iMenu, "Удалить турель", _, _, cb);

    // 2
    formatex(szFormat, 64, "Переместить [%d золота]", g_ConfigValues[CFG_TURRET_MOVE_COST])
    menu_additem(iMenu, szFormat, _, _, cb)
    
    // 3
    formatex(szFormat, 64, "Переименовать [%d золота]", g_ConfigValues[CFG_TURRET_CHANGE_NAME_COST])
    menu_additem(iMenu, szFormat, _, _, cb)
    
    // 4
    if(g_IsTurretUpgrading[id][iTurretIndex])
        menu_additem(iMenu, "Находится в фазе конфигурации", _, _, cb)
    else
        menu_additem(iMenu, "Прокачать турель", _, _, cb)
    
    if(g_PlayerTouchingTurret[id] != iEnt)
        menu_setprop(iMenu, MPROP_EXITNAME, "Назад")
    
    menu_display(id, iMenu);
    set_task(0.1, "reset", id + 7192);
    }
    return PLUGIN_CONTINUE
}
все же вроде правильно указано, че оно не хочет показывать при if просто фразу и кнопку "Назад" на 0...
 

rxki

Пользователь
Регистрация
5 Янв 2019
Сообщения
170
Симпатии
3
Пол
Мужской
#18

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
970
Симпатии
319
#19
Добавляй menu addtext и ITEM_ENABLED на ITEM_DISABLED меняй.
 

rxki

Пользователь
Регистрация
5 Янв 2019
Сообщения
170
Симпатии
3
Пол
Мужской
#20