AES. Вывод требуемого количества бонусов в меню

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
263
Реакции
335
Помог
4 раз(а)
Задача состоит в том, чтобы добавить в каждый пункт меню, информацию о необходимом количестве бонусов для получения.
Сейчас же плагин aes_bonus_system.amxx автоматически подставляет лишь то, чего не хватает.
Например у нас 90 опыта (4й уровень), нет бонусов, ну и идёт первый раунд. В настройках bonus.ini пишем:
Код:

<call>
plugin = aes_bonus_cstrike.amxx
name = LANG_AES_BONUS_10000M
function = pointBonus_Give10000M
points = 2
exp = 1500
levels = 5
round = 3

В таком варианте пункт меню в /anew будет след вида:
10000$ (1500 оп.)
Если мы достигаем 1500 опыта, то пишет след.:
10000$ (3 рнд.)
Ну и после 3-го раунда будет писать след:
10000$ (2 бон.)

Покопав исходник aes_bonus_system.sma нашел место где он формирует это:
Код:
public Format_ItemsCallback(id,menu,item)
{
new info[10],item_name[256],dummy
menu_item_getinfo(menu,item,dummy,info,charsmax(info),item_name,charsmax(item_name),dummy)

new itemData[itemFieldsStruct]
ArrayGetArray(g_PointsBonusItems,str_to_num(info),itemData)

new limit_fields = Bonus_CheckLimits(id,itemData)

for(new i = 1; i <= 5 ; i++)
{
if(limit_fields & (1<<i))
{
new tmpLang[128],lang_key[16]
formatex(lang_key,charsmax(lang_key),"AES_ANEW_INFO%d",i)

formatex(tmpLang,charsmax(tmpLang)," %L",id,lang_key,itemData[IB_POINTS + (i - 1)])
add(item_name,charsmax(item_name),tmpLang)

menu_item_setname(menu,item,item_name)

return ITEM_DISABLED
}
}

return ITEM_ENABLED
}
На скок я понял, вся магия происходит тут AES_ANEW_INFO%d т.к. в ланге след.

Код:
AES_ANEW_INFO1 = \w(\r%d бон.\w)
AES_ANEW_INFO2 = \w(\r%.2f оп.\w)
AES_ANEW_INFO3 = \w(\r%d уров.\w)
AES_ANEW_INFO4 = \w(\r%d рнд.\w)
AES_ANEW_INFO5 = \w(\rвремя\w)
AES_ANEW_INFO6 = Ваши бонусы:
AES_ANEW_INFO7 = и %d других.


Каким образом можно реализовать постоянный вывод необходимого кол. бонусов? Что бы писало например так:
10000$ [2](3 рнд.)

Спасибо serfreeman1337 за помощь. Решение
 

Download all Attachments

Последнее редактирование:
Сообщения
287
Реакции
223
Помог
6 раз(а)
Тут и в код не лезь, можно сделать в ланге: AES_BONUS_10000M = 10000$ [2]
 
Сообщения
263
Реакции
335
Помог
4 раз(а)
Phantom, Тогда если не будет хватать бонусов, будет дубль
10000$ [2] (2 бон.)
 
Сообщения
287
Реакции
223
Помог
6 раз(а)
Код:
for(new i = 1; i <= 5 ; i++)

->
Код:
for(new i = 1; i <= 4 ; i++)


Код:
AES_ANEW_INFO1 = \w(\r%d бон.\w)
AES_ANEW_INFO2 = \w(\r%.2f оп.\w)
AES_ANEW_INFO3 = \w(\r%d уров.\w)
AES_ANEW_INFO4 = \w(\r%d рнд.\w)
AES_ANEW_INFO5 = \w(\rвремя\w)
AES_ANEW_INFO6 = Ваши бонусы:
AES_ANEW_INFO7 = и %d других.

->
Код:
AES_ANEW_INFO1 = \w(\r%.2f оп.\w)
AES_ANEW_INFO2 = \w(\r%d уров.\w)
AES_ANEW_INFO3 = \w(\r%d рнд.\w)
AES_ANEW_INFO4 = \w(\rвремя\w)
AES_ANEW_INFO5 = Ваши бонусы:
AES_ANEW_INFO6 = и %d других.


Тогда уже остальным пунктам в меню в ланге /anew тоже пропиши [кол-во бонусов]
 
Сообщения
263
Реакции
335
Помог
4 раз(а)
Phantom, О, спасибо за помощь, действительно можно же просто исключить AES_ANEW_INFO1 и всё)
Сделал сперва как ты написал, но пишет так:
10000$ [2] (оп.)

Решил след. образом
Код:
for(new i = 1; i <= 5 ; i++)

==>
Код:
for(new i = 2; i <= 5 ; i++)

И в итоге не нужно править ланг
Код:
AES_ANEW_INFO1 = \w(\r%d бон.\w)
AES_ANEW_INFO2 = \w(\r%.2f оп.\w)
AES_ANEW_INFO3 = \w(\r%d уров.\w)
AES_ANEW_INFO4 = \w(\r%d рнд.\w)
AES_ANEW_INFO5 = \w(\rвремя\w)
AES_ANEW_INFO6 = Ваши бонусы:
AES_ANEW_INFO7 = и %d других.


UPD (13.12.17):
Это не решение, а костыль на костылях. Таким образом вы исключите проверку на кол. требуемых бонусов!
 
Последнее редактирование:
Сообщения
287
Реакции
223
Помог
6 раз(а)
SonG, да не за что, ты сам себе помог
 
Сообщения
263
Реакции
335
Помог
4 раз(а)
Спустя время обнаружил багу. Если следовать моему решению из этого поста, то у вас пропадёт проверка на требуемое количество бонусов, а значит игроки могут покупать в минус.
 
Сообщения
77
Реакции
127
Помог
12 раз(а)
Вроде так.
Если проверяем количество бонусов и нам их хватает, то дописывает их количество к названию предмета в меню.
Код:
public Format_ItemsCallback(id,menu,item)
{
    new info[10],item_name[256],dummy
    menu_item_getinfo(menu,item,dummy,info,charsmax(info),item_name,charsmax(item_name),dummy)
 
    new itemData[itemFieldsStruct]
    ArrayGetArray(g_PointsBonusItems,str_to_num(info),itemData)
 
    new limit_fields = Bonus_CheckLimits(id,itemData)
 
    for(new i = 1; i <= 5 ; i++)
    {
        new tmpLang[128];
        if(limit_fields & (1<<i))
        {
            new lang_key[16]
            formatex(lang_key,charsmax(lang_key),"AES_ANEW_INFO%d",i)
            
            formatex(tmpLang,charsmax(tmpLang)," %L",id,lang_key,itemData[IB_POINTS + (i - 1)])
            add(item_name,charsmax(item_name),tmpLang)
 
            menu_item_setname(menu,item,item_name)
        
            return ITEM_DISABLED
        } else if(i == 1) {
            formatex(tmpLang,charsmax(tmpLang)," [%d]",itemData[IB_POINTS])
            add(item_name,charsmax(item_name),tmpLang)
            menu_item_setname(menu,item,item_name)
         }
    }

    return ITEM_ENABLED
}
// VERNITE TAB BibleThump
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу