rxki
Пользователь
- Регистрация
- 5 Янв 2019
- Сообщения
- 208
- Симпатии
- 5
- Пол
- Мужской
Всем доброго времени суток, господа. Столкнулся с проблемой в меню. В двух словах о менюшке. На TD моде есть меню турели с ее характеристиками и функционалом. При локализации этого меню поехала строка с меню (видимо из-за превышенного кол байтов в массиве). В общем, когда стоишь возле турели и заходишь в меню - оно отображается исправно. Если находишься за пределами турели и вызываешь меню - оно становится некликабельным и сьезжает из-за добавленной информационной строки "ты должен оставаться возле турели". Креплю скриншоты ниже. Я решил сделать так, что бы при вызове меню за приделами турели выдавало только ее характеристики и надпись "ты должен оставаться возле турели", а само меню с опциями не показывало (так как оно и так недоступно при данном условии). Вот паблик этого меню:
Я сначала взял в скобки условие
if(g_PlayerTouchingTurret[id] != iEnt){
formatex(szTitle, charsmax(szTitle), "%s^n\w- Ты должен оставаться возле турели -", szTitle);
}
и ниже добавил esle и взял в скобки все, до return PLUGIN_CONTINUE. Но при вызове меню, будучи не в зоне турели ничего не происходило. А как сделать, что бы показывали хар-ки (написаны желтым цветом) и строку "Ты должен оставаться возле турели", без меню. Или же, сделать так, что бы показывало корректно и не съезжало (но макс кол байт в массиве 512, тут вроде ничего не поделаешь). Прошу помощи вашей. Если где то базарнул ахинею - прошу прощения, поправьте, я только учусь
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
}
Я сначала взял в скобки условие
if(g_PlayerTouchingTurret[id] != iEnt){
formatex(szTitle, charsmax(szTitle), "%s^n\w- Ты должен оставаться возле турели -", szTitle);
}
и ниже добавил esle и взял в скобки все, до return PLUGIN_CONTINUE. Но при вызове меню, будучи не в зоне турели ничего не происходило. А как сделать, что бы показывали хар-ки (написаны желтым цветом) и строку "Ты должен оставаться возле турели", без меню. Или же, сделать так, что бы показывало корректно и не съезжало (но макс кол байт в массиве 512, тут вроде ничего не поделаешь). Прошу помощи вашей. Если где то базарнул ахинею - прошу прощения, поправьте, я только учусь