[ZP] Hook

Сообщения
382
Реакции
-8
Пробовал сделать так, чтобы игрок с Владельцем, при выдаче паутинки игроку, писало всем в чат [ZP] Владелец %s забрал паутинку у %s. Аналогично с выдал.. Также чтобы игрок с Создателем, при выдаче паутинки игроку, писало всем в чат [ZP] Создатель %s забрал или выдал паутинку %s Но вместо этого мне выписывает
[ZP] Владелец RedGamer забрал паутинку у RedGamer (проверял на себя) и сразу же вместе с этим
[ZP] Создатель RedGamer выдал паутинку RedGamer (как это исправить)

1681583020565.png
15 Апр 2023
1681583057682.png
Мои попытки что-то сделать:
15 Апр 2023
Имею макросы

#define OneFlag ADMIN_LEVEL_G
#define TwoFlag ADMIN_MENU
15 Апр 2023
Вот данные из data/lang
1681583247697.png
 

Download all Attachments

Сообщения
862
Реакции
144
Помог
25 раз(а)
Ну, проверку на вкл/выкл можно сделать так:
C++:
g_iHookEnable ^= true
и сделать так:
C++:
if(get_user_flags(id) & OneFlag || get_user_flags(id) & TwoFlag)
{
    g_iHookEnable ^= true
    сюда свой текст с никами и тд.
}
Вместо get_user_name получать ник можно так:
C++:
ChatColor(0, "UserName: %n", index);
//index = id игрока
 
Сообщения
382
Реакции
-8
ImmortalAmxx, Ну так задумка то, в том, что если Владелец выдаст или заберёт паутинку, то напишет всем в чат, что Владелец выдал/забрал, аналогично с Создателем.. но использовать || как "или" мне немного не то нужно
 
Сообщения
658
Реакции
230
Помог
11 раз(а)
RedGamer, у тебя логика вообще не верна, кинь кусок код этой функции
 
Сообщения
382
Реакции
-8
C++:
public Handle_AdvancedHookMenu(id, iKey)
{
    switch(iKey)
    {
        case 0:
        {
            if(g_iHookEnable)
            {
                ++szPlayerColor[id]
                if(szPlayerColor[id] == g_HookColorNum + 1)
                szPlayerColor[id] = 1
            }
        }
        case 1:
        {
            if(g_iHookEnable)
            {
                ++szPlayerSprite[id]
                if(szPlayerSprite[id] == g_HookSpriteNum + 1)
                szPlayerSprite[id] = 1
            }
        }
        case 2:
        {
            if(g_iHookEnable)
            {
                ++szPlayerSize[id]
                if(szPlayerSize[id] == 4)
                szPlayerSize[id] = 0
            }
        }
        case 3:
        {
            if(g_iHookEnable)
            {
                ++szPlayerSound[id]
                if(szPlayerSound[id] == g_HookSoundNum + 1)
                szPlayerSound[id] = 1
            }
        }
        case 4:
        {
            if(g_iHookEnable)
            {
                ++szPlayerSpeed[id]
                if(szPlayerSpeed[id] == 3)
                szPlayerSpeed[id] = 0
            }
        }
        case 5:
        {
            if(g_iHookEnable)
            {
                ++szPlayerView[id]
                if(szPlayerView[id] == 3)
                szPlayerView[id] = 0
            }
        }
        case 6:
        {
            if(g_iHookEnable)
            {
                ++szPlayerSprite[id]
                if(szPlayerSprite[id] == 5)
                szPlayerSprite[id] = 0
            }
        }
        case 7:
        {
            if(g_iHookEnable)
            return Cmd_AdvancedHookTargetMenu(id)
        }
        case 8:
        {
            new szName[32]
            get_user_name(id, szName, charsmax(szName))

            if(g_iHookEnable && get_user_flags(id) & OneFlag)
            {
                g_iHookEnable = false
                ChatColor(0, "%L", id, "ADVANCED_MENU_MODE_HOOK_OFF_CHAT_OWNER", szName)
                server_print("off_chat_owner: %d", g_iHookEnable)
            }
            else
            {
                g_iHookEnable = true
                ChatColor(0, "%L", id, "ADVANCED_MENU_MODE_HOOK_ON_CHAT_OWNER", szName)
            }

            if(g_iHookEnable && get_user_flags(id) & TwoFlag)
            {
                g_iHookEnable = false
                ChatColor(0, "%L", id, "ADVANCED_MENU_MODE_HOOK_OFF_CHAT_CREATOR", szName)
            }
            else
            {
                g_iHookEnable = true
                ChatColor(0, "%L", id, "ADVANCED_MENU_MODE_HOOK_ON_CHAT_CREATOR", szName)
            }
            return PLUGIN_HANDLED
        }
        case 9: return PLUGIN_HANDLED
    }
    return Show_AdvancedHookMenu(id)
}
15 Апр 2023
Ребят, прошу извинения, понял, не та часть кода, вот нормальная (по теме вопроса)

C++:
public Handle_AdvancedHookTargetMenu(id, iKey)
{
    switch(iKey)
    {
        case 8: return Show_AdvancedHookTargetMenu(id, ++g_iMenuPosition[id]);
        case 9: return Show_AdvancedHookTargetMenu(id, --g_iMenuPosition[id]);
        default:
        {
            new iTarget = g_iMenuPlayers[id][g_iMenuPosition[id] * PLAYERS_PER_PAGE + iKey];
            new szName[32], szTargetName[32];
            get_user_name(id, szName, charsmax(szName))
            get_user_name(iTarget, szTargetName, charsmax(szTargetName))
            if(!szPlayerHook[iTarget])
            {
                szPlayerSpeed[iTarget] = szPlayerSpeed[id]
                szPlayerSize[iTarget] = szPlayerSize[id]
                szPlayerColor[iTarget] = szPlayerColor[id]
                szPlayerSound[iTarget] = szPlayerSound[id]
                szPlayerSprite[iTarget] = szPlayerSprite[id]
                szPlayerEndSprite[iTarget] = szPlayerEndSprite[id]
                szPlayerView[iTarget] = szPlayerView[id]
                szPlayerHook[iTarget] = true
                
                if(get_user_flags(id) & OneFlag)
                {
                    ChatColor(0, "%L", LANG_PLAYER, "ADVANCED_HOOK_MODE_HOOK_GIVE_CHAT_OWNER", szName, szTargetName)
                }
            }
            else
            {
                szPlayerHook[iTarget] = false
                ChatColor(0, "%L", LANG_PLAYER, "ADVANCED_HOOK_MODE_HOOK_TAKE_CHAT_OWNER", szName, szTargetName)
            }

            if(!szPlayerHook[iTarget])
            {
                szPlayerSpeed[iTarget] = szPlayerSpeed[id]
                szPlayerSize[iTarget] = szPlayerSize[id]
                szPlayerColor[iTarget] = szPlayerColor[id]
                szPlayerSound[iTarget] = szPlayerSound[id]
                szPlayerSprite[iTarget] = szPlayerSprite[id]
                szPlayerEndSprite[iTarget] = szPlayerEndSprite[id]
                szPlayerView[iTarget] = szPlayerView[id]
                szPlayerHook[iTarget] = true

                if(get_user_flags(id) & TwoFlag)
                {
                    ChatColor(0, "%L", LANG_PLAYER, "ADVANCED_HOOK_MODE_HOOK_GIVE_CHAT_CREATOR", szName, szTargetName)
                }
            }
            else
            {
                szPlayerHook[iTarget] = false
                ChatColor(0, "%L", LANG_PLAYER, "ADVANCED_HOOK_MODE_HOOK_TAKE_CHAT_CREATOR", szName, szTargetName)
            }
        }
    }
    return Show_AdvancedHookTargetMenu(id, g_iMenuPosition[id]);
}
 
Сообщения
3,381
Реакции
1,479
Помог
124 раз(а)
Не хватает return'a
 
Сообщения
3,381
Реакции
1,479
Помог
124 раз(а)
RedGamer, учимся думать логически и понимать написанный код. Читаем сверху вниз: если нет хука, ты его выдаешь, сначала за owner. Иначе - забираешь хук. Выполнение кода идёт дальше, и опять проверяется твоё условие - если нет хука (а его нет, так как ты выше его забрал), то он выдаётся.
Теперь подумай как сделать так, чтобы выполнение кода не шло дальше.
 
Сообщения
382
Реакции
-8
Nordic Warrior,
C++:
public Handle_AdvancedHookTargetMenu(id, iKey)
{
    switch(iKey)
    {
        case 8: return Show_AdvancedHookTargetMenu(id, ++g_iMenuPosition[id]);
        case 9: return Show_AdvancedHookTargetMenu(id, --g_iMenuPosition[id]);
        default:
        {
            new iTarget = g_iMenuPlayers[id][g_iMenuPosition[id] * PLAYERS_PER_PAGE + iKey];
            new szName[32], szTargetName[32];
            get_user_name(id, szName, charsmax(szName))
            get_user_name(iTarget, szTargetName, charsmax(szTargetName))
            if(!szPlayerHook[iTarget])
            {
                szPlayerSpeed[iTarget] = szPlayerSpeed[id]
                szPlayerSize[iTarget] = szPlayerSize[id]
                szPlayerColor[iTarget] = szPlayerColor[id]
                szPlayerSound[iTarget] = szPlayerSound[id]
                szPlayerSprite[iTarget] = szPlayerSprite[id]
                szPlayerEndSprite[iTarget] = szPlayerEndSprite[id]
                szPlayerView[iTarget] = szPlayerView[id]
                szPlayerHook[iTarget] = true
                
                if(get_user_flags(id) & OneFlag)
                {
                    ChatColor(0, "%L", LANG_PLAYER, "ADVANCED_HOOK_MODE_HOOK_GIVE_CHAT_OWNER", szName, szTargetName)
                }
            }
            else
            {
                szPlayerHook[iTarget] = false
                ChatColor(0, "%L", LANG_PLAYER, "ADVANCED_HOOK_MODE_HOOK_TAKE_CHAT_OWNER", szName, szTargetName)
                return Show_AdvancedHookTargetMenu(id, g_iMenuPosition[id])
            }

            if(!szPlayerHook[iTarget])
            {
                szPlayerSpeed[iTarget] = szPlayerSpeed[id]
                szPlayerSize[iTarget] = szPlayerSize[id]
                szPlayerColor[iTarget] = szPlayerColor[id]
                szPlayerSound[iTarget] = szPlayerSound[id]
                szPlayerSprite[iTarget] = szPlayerSprite[id]
                szPlayerEndSprite[iTarget] = szPlayerEndSprite[id]
                szPlayerView[iTarget] = szPlayerView[id]
                szPlayerHook[iTarget] = false

                if(get_user_flags(id) & TwoFlag)
                {
                    ChatColor(0, "%L", LANG_PLAYER, "ADVANCED_HOOK_MODE_HOOK_TAKE_CHAT_CREATOR", szName, szTargetName)
                }
            }
            else
            {
                szPlayerHook[iTarget] = true
                ChatColor(0, "%L", LANG_PLAYER, "ADVANCED_HOOK_MODE_HOOK_GIVE_CHAT_CREATOR", szName, szTargetName)
                return Show_AdvancedHookTargetMenu(id, g_iMenuPosition[id])
            }
        }
    }
    return Show_AdvancedHookTargetMenu(id, g_iMenuPosition[id]);
}
 
Сообщения
658
Реакции
230
Помог
11 раз(а)
Код:
public Handle_AdvancedHookTargetMenu(id, iKey)
{
    switch(iKey)
    {
        case 8: return Show_AdvancedHookTargetMenu(id, ++g_iMenuPosition[id]);
        case 9: return Show_AdvancedHookTargetMenu(id, --g_iMenuPosition[id]);
        default:
        {
            new iTarget = g_iMenuPlayers[id][g_iMenuPosition[id] * PLAYERS_PER_PAGE + iKey];
            new szName[32], szTargetName[32];
            get_user_name(id, szName, charsmax(szName))
            get_user_name(iTarget, szTargetName, charsmax(szTargetName))
           
           
            if(!szPlayerHook[iTarget])
            {
                szPlayerSpeed[iTarget] = szPlayerSpeed[id]
                szPlayerSize[iTarget] = szPlayerSize[id]
                szPlayerColor[iTarget] = szPlayerColor[id]
                szPlayerSound[iTarget] = szPlayerSound[id]
                szPlayerSprite[iTarget] = szPlayerSprite[id]
                szPlayerEndSprite[iTarget] = szPlayerEndSprite[id]
                szPlayerView[iTarget] = szPlayerView[id]
                szPlayerHook[iTarget] = true
               
                if(get_user_flags(id) & OneFlag)
                {
                    ChatColor(0, "%L", LANG_PLAYER, "ADVANCED_HOOK_MODE_HOOK_GIVE_CHAT_OWNER", szName, szTargetName)
                }
                else
                if(get_user_flags(id) & TwoFlag)
                {
                    ChatColor(0, "%L", LANG_PLAYER, "ADVANCED_HOOK_MODE_HOOK_GIVE_CHAT_CREATOR", szName, szTargetName)
                }
            }
            else
            {
                szPlayerHook[iTarget] = false
               
                if(get_user_flags(id) & OneFlag)
                {
                    ChatColor(0, "%L", LANG_PLAYER, "ADVANCED_HOOK_MODE_HOOK_TAKE_CHAT_OWNER", szName, szTargetName)
                }
                else
                if(get_user_flags(id) & TwoFlag)
                {
                    ChatColor(0, "%L", LANG_PLAYER, "ADVANCED_HOOK_MODE_HOOK_TAKE_CHAT_CREATOR", szName, szTargetName)
                }
               
               
                return Show_AdvancedHookTargetMenu(id, g_iMenuPosition[id])
            }
        }
    }
    return Show_AdvancedHookTargetMenu(id, g_iMenuPosition[id]);
}
 
Сообщения
3,381
Реакции
1,479
Помог
124 раз(а)
RedGamer, вспоминаем порядок проверок из другой темы
 
Сообщения
658
Реакции
230
Помог
11 раз(а)
RedGamer, так кто главнее? местами поменяй если необходимо

также какие флаги у создателя и какие у владельца
 
Сообщения
382
Реакции
-8
Limbooc, главнее создатель) попробую..
15 Апр 2023
Limbooc, выше спойлер: макросы, кстати помогло спасибо, я немного логику не понял. но работает) есть похожая чепуха с лимитом использования, думаю сам разберусь)
 

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

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