ScreenMaker от neugomona проблемы с меню!

Сообщения
148
Реакции
48
Помог
4 раз(а)
Добрый день, форумчане! Подскажите как исправить, в меню Скрин Меню при первом открытии все хорошо показывает, но если переключиться между страницами, то дублирует привилегию.
 

Download all Attachments

Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
Stas, с чем работать то? Что править? Опять гадать? Или угадывать?
 
Сообщения
148
Реакции
48
Помог
4 раз(а)
wopox1337, извиняюсь, забыл. Скрины прикрепил, на автомате подумал, что и исходник прикрепил. Прикрепляю щас.
 

Вложения

Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
как нибудь так

либо сейвить все пункты меню и сравнивать длину, если отличается - добавлять, а если нет то увы
 

Вложения

Сообщения
148
Реакции
48
Помог
4 раз(а)
neygomon, Ванек, щас получается вот так: Открываю меню, всего 4 страницы. На первой и четвертой странице нет привилегий, на второй и третей есть. Начинаю переключаться между всеми страницами и получается, что на второй странице не дублируется, а на третьей дублируется.
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Stas, ну это не оч логично.
либо работает везде либо не работает вовсе.
ибо через callback проходит каждый пункт меню
 
Сообщения
148
Реакции
48
Помог
4 раз(а)
neygomon, щас вообще рандомно получается, где то пишет, а где то нет. Вот несколько раз переключал между страницами, и меню по новой переоткрывал.
 

Download all Attachments

  • 11.2 KB Просмотры: 55
  • 9.2 KB Просмотры: 54
  • 11.2 KB Просмотры: 50
  • 11.1 KB Просмотры: 44
  • 10.8 KB Просмотры: 42
  • 10.9 KB Просмотры: 41
  • 12.5 KB Просмотры: 36
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Stas, ну еще так можно
 

Вложения

  • Нравится
Реакции: Stas
Сообщения
148
Реакции
48
Помог
4 раз(а)
neygomon, нет Ванек, такая же ситуация, где как((
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Stas, ну тогда никак.
только переписывать на старую систему меню
 
  • Нравится
Реакции: Stas
Сообщения
148
Реакции
48
Помог
4 раз(а)
neygomon, все равно спасибо (сорян, благодарность не могу нажать, не дорос еще)))). Переписывать плагин сколько стоить будет? И возьмешься ли?))
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Stas, оно того не стоит :)
это не тот плагин где такие косяки нужно переписывать :)
кроме админов этого никто не видит
 
Сообщения
65
Реакции
4
Помог
2 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
А если слова [Админ] заменить звёздочкой или:
[*] или [#] или [!] и т.д
или флагами:
[t] - вип
 
Сообщения
148
Реакции
48
Помог
4 раз(а)
eduardglotov, я так понимаю это ты мне помог на неугомоне? Да огромное спасибо, все отлично работает.
Прикрепляю файлик сделанный с надписями Вы, Вип, Админ. Вдруг кому то нужен будет.

Код:
#include <amxmodx>

#define SCREENS_NUM    5            // Количество скринов
#define LINK_TO_UNBAN     "vk.com/vit9zi"    // Ссылка, куда скидывать

forward user_banned_pre(id);
forward fbans_player_banned_pre(id, userid);

public plugin_init()
{
    register_plugin("ScreenMaker", "1.1", "neygomon");
    register_clcmd("amx_screenmenu", "CmdScreenMenu", ADMIN_BAN);
}

public plugin_cfg()
{
    //server_cmd("amx_addmenuitem ^"Сделать скрины^" ^"amx_screenmenu^" ^"d^" ^"ScreenMaker^"");
    //server_exec();
    
    set_task(1.0, "SetKickDelay");
}

public SetKickDelay()
{
    server_cmd("pb_kick_delay %d", SCREENS_NUM + 1);
    server_cmd("fb_kick_delay %d", SCREENS_NUM + 1);
}

public user_banned_pre(id)
    ScreenAction(id, 0, 1);

public fbans_player_banned_pre(id, userid)
    if(is_user_connected(id) && get_user_userid(id) == userid)
        ScreenAction(id, 0, 1);

public CmdScreenMenu(id, level)
{
    if(~get_user_flags(id) & level)
    {
        client_print(id, print_notify, "* Недостаточно прав для использования этой команды!");
        return PLUGIN_HANDLED;
    }
    
    new menu = menu_create("\d[\rScreenMenu\d] \yВыберите игрока", "players_menu");
    new call = menu_makecallback("players_callback");
    
    menu_setprop(menu, MPROP_EXITNAME, "Выход");
    menu_setprop(menu, MPROP_BACKNAME, "Назад");
    menu_setprop(menu, MPROP_NEXTNAME, "Далее");
    
    new pl[32], pnum;
    get_players(pl, pnum, "ch");
    
-    for(new i, pid[2], name[32]; i < pnum; i++)
-    {
-        pid[0] = pl[i];
-        get_user_name(pl[i], name, charsmax(name));
-        menu_additem(menu, name, pid, 0, call);
-    }
-   
+    for(new i; i < pnum; i++)
+        menu_additem(menu, "", pl[i], 0, call);
    
    menu_display(id, menu, 0);
    return PLUGIN_HANDLED;
}

public players_callback(id, menu, item)
{
    new pid[2], _access, callback;
    new szItem[32], szNewItem[64];
-    menu_item_getinfo(menu, item, _access, pid, charsmax(pid), szItem, charsmax(szItem), callback);
+    menu_item_getinfo(menu, item, _access, pid, charsmax(pid), _, _, callback);
+   
+    new status = ITEM_ENABLED;
+    get_user_name(pid[0], szItem, charsmax(szItem));
    
    if(pid[0] == id)
    {
        formatex(szNewItem, charsmax(szNewItem), "%s \d[\yВы\d]", szItem);
-        menu_item_setname(menu, item, szNewItem);
-        return ITEM_DISABLED;
+        status = ITEM_DISABLED;
    }
    else
    {
        new flags = get_user_flags(pid[0]);
        static lastId, flagsId; if(id != lastId) flagsId = get_user_flags(id);
        
        if(flags & ADMIN_MENU)
        {
            formatex(szNewItem, charsmax(szNewItem), "%s \d[\yАдмин\d]", szItem);
-            menu_item_setname(menu, item, szNewItem);                                   
-            return (flagsId & ADMIN_KICK) ? ITEM_ENABLED : ITEM_DISABLED;
+            status = (flagsId & ADMIN_KICK) ? ITEM_ENABLED : ITEM_DISABLED;
        }
        else if(flags & ADMIN_IMMUNITY)
        {
            formatex(szNewItem, charsmax(szNewItem), "%s \d[\yВип\d]", szItem);
-            menu_item_setname(menu, item, szNewItem);
-            return (flagsId & ADMIN_KICK) ? ITEM_ENABLED : ITEM_DISABLED;
+            status = (flagsId & ADMIN_KICK) ? ITEM_ENABLED : ITEM_DISABLED;
        }
    }
-    return ITEM_ENABLED;
+
+    menu_item_setname(menu, item, szNewItem[0] ? szNewItem : szItem);
+    return status;
}

public players_menu(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
    new pid[2], _access, call;
    menu_item_getinfo(menu, item, _access, pid, charsmax(pid), .callback = call);
    
    if(!is_user_connected(pid[0]))
        client_print(id, print_chat, "* Игрок покинул сервер");
    else
    {
        new name[32];     get_user_name(id, name, charsmax(name));
        new name2[32];     get_user_name(pid[0], name2, charsmax(name2));
        log_to_file("screen_maker.log", "Администратор %s сделал скрины игроку %s", name, name2);
        
        ScreenAction(pid[0], id, 0);
    }
    
    menu_destroy(menu);
    return PLUGIN_HANDLED;
}

public MakeScreen(id)
{
    if(is_user_connected(id))
        client_cmd(id, "snapshot");
    else    remove_task(id);   
}

ScreenAction(id, admin, ban)
{
    new szTime[22];
    get_time("%d.%m.%Y - %H:%M:%S", szTime, charsmax(szTime));
    
    new szAdmin[64];
    get_user_name(admin, szAdmin, charsmax(szAdmin));
    
    new szMap[32];
    get_mapname(szMap, charsmax(szMap));
    
    new szHUD[190];
    if(admin)
        formatex(szHUD, charsmax(szHUD), "Время %s^nАдминистратор %s^nКарта %s^nДля разбана скинь скрины и демо в группу VK: %s", szTime, szAdmin, szMap, LINK_TO_UNBAN);
    else    formatex(szHUD, charsmax(szHUD), "Время %s^nСервер %s^nКарта %s^nДля разбана скинь скрины и демо в группу VK: %s", szTime, szAdmin, szMap, LINK_TO_UNBAN);
    
    set_hudmessage(0, 200, 0, -1.0, 0.2, 0, 0.0, float(SCREENS_NUM + 1), 0.0, 0.1, -1);
    show_hudmessage(id, szHUD);
        
    if(ban) client_cmd(id, "stop");
    set_task(1.0, "MakeScreen", id, .flags = "a", .repeat = SCREENS_NUM);
}
 

Вложения

Последнее редактирование модератором:
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
Stas выделил измененные строки в сообщении
 
  • Нравится
Реакции: Stas
Сообщения
368
Реакции
5
Предупреждения
5
Помог
1 раз(а)
Кто-нибудь хочет обновить код?
Добавить конфигурацию
plugins/screen.cfg -
#define SCREENS_NUM 5 // Количество экранов
#define LINK_TO_UNBAN "dev-cs.ru" // Ссылка, куда скидивать
 

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

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