Меню (if esle)

rxki

Пользователь
Регистрация
5 Янв 2019
Сообщения
208
Симпатии
5
Пол
Мужской
Всем доброго времени суток, господа. Столкнулся с проблемой в меню. В двух словах о менюшке. На 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.jpg20190112153920_1.jpg


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

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

kapangaIII

Код невозможно редактировать, но попробуй так:
Код:
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
Сообщения
426
Симпатии
293
Пол
Мужской
rxki,
Если можна, то после окончательного перевода поделитесь ним
 

rxki

Пользователь
Регистрация
5 Янв 2019
Сообщения
208
Симпатии
5
Пол
Мужской
Код невозможно редактировать, но попробуй так:
Код:
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
}
Не помогло. Так же, при нажатии на турель, находясь не рядом с ней, просто ничего не показывает. Только появляется радиус поражения выбранной турели и все.[DOUBLEPOST=1547407128][/DOUBLEPOST]
rxki,
Если можна, то после окончательного перевода поделитесь ним
переводом? или плагином? или модом?
 
K

kapangaIII

rxki

Пользователь
Регистрация
5 Янв 2019
Сообщения
208
Симпатии
5
Пол
Мужской
screen[DOUBLEPOST=1547407490][/DOUBLEPOST]
Странно что у тебя не крашит сервер.
Ведь formatex не умеет же сам себя переопределять.
20190113212516_1.jpg20190113212521_1.jpg

Первый скрин - меню перед выбором турели. Второй скрин - нажал на единицу.[DOUBLEPOST=1547407731][/DOUBLEPOST]
screen[DOUBLEPOST=1547407490][/DOUBLEPOST]
Странно что у тебя не крашит сервер.
Ведь formatex не умеет же сам себя переопределять.
на счет этого не могу ничего сказать, так как не знаю его поведение. Да, сервер не ложится
 
K

kapangaIII

Ничего не понятно, у тебя меню перестало открываться? Или как?
 

rxki

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

kapangaIII

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
Сообщения
208
Симпатии
5
Пол
Мужской
, получилось, только надпись все равно, почему то, не полностью отображается
20190113222614_1.jpg
 

Mistrick

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

rxki

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

rxki

Пользователь
Регистрация
5 Янв 2019
Сообщения
208
Симпатии
5
Пол
Мужской
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...
 
K

kapangaIII

Добавляй menu addtext и ITEM_ENABLED на ITEM_DISABLED меняй.
 

rxki

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