Русское сообщество по скриптингу

Free Hook in FreeDay JailBreak

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Free Hook in FreeDay JailBreak

Сообщение kuzyarosemead » 28 мар 2020, 13:00

Приветствую!
я не могу решить вопрос. Я взял меню hook у ar4mode новую версию с сохранениями, и мне пришла идея в голову, а что есть сделать так, чтобы у заключенных был хук во время Свободного дня (freeday), а когда свободный день кончается ,у них забирается паутинка (hook)
Прошу помогите! Не могу уже ничего сделать все перепродавал, сам в скриптах плохо лажу, так что сможете результат скинуть :(

Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <sqlx>

#define PLUGIN_NAME        "[cs-diamond] Hook Kuzya"
#define PLUGIN_AUTHOR    "Kuzya"
#define PLUGIN_VERSION    "2.0"

#pragma tabsize             0
#pragma semicolon             1

#define NUM_ITEM_PAGE         7
#define TASK_iHOOK             423578453

#define JBE                    // Закоментируйте "//", если вам не нужна привязка к JBE (Подходит к: Ar4Mode, UJBL)
//#define JBM                    // Закоментируйте "//", если вам не нужна привязка к JBM
#define SAVE_HOOK                // Закоментируйте "//", если вам не нужно сохранение

#if defined JBE
    
native jbe_is_user_wanted(pPlayer);
    
native jbe_get_day_mode();
#endif

#if defined JBM
    
native jbm_is_user_wanted(pPlayer);
    
native jbm_get_day_mode();
#endif

enum _:HOOK_SETTINGS
{
    
SPRITE,
    
SOUND,
    
TIP,
    
SIZE,
    
VIEW,
    
SPEED
}

enum _DATA_FLAGS
{
    
FLAG_HOOK[2],
    
FLAG_MENU[2],
    
FLAG_CONTROLE[2],
    
FLAG_MODE[2]
}

enum _:DATA_HOOK
{
    
NAME[42],
    
FLAG[2],
    
FILE[64],
    
TYPE[2],
    
VALUE
}

enum GLOBAL_SET
{
    
GIVE,    
    
WANTED    
}

new 
g_MaxPlayers
new 
g_HookUserSett[33][HOOK_SETTINGS];
new 
g_PlayerPageMenu[33], g_SettingsMenu[33];
new Array:
g_aHook[6], Float:g_vecHookOrigin[33][3];
new 
g_aSize[HOOK_SETTINGS], g_DataFlag[DATA_FLAGS];
new 
bool:g_HookUserHave[33], bool:g_ModeHook true;
new 
g_PlayersMenu[33][32], g_Hook[GLOBAL_SET];

#if defined SAVE_HOOK
    
new g_szPlayerSteam[33][34], g_szQuery[512]; 
    new 
Handle:g_SqlTupleHandle:g_SqlConnection;
    new 
g_szSaveSqlTable[32];
    new 
g_szSaveSqlUser[32];
    new 
g_szSaveSqlPassword[32]; 
    new 
g_szSaveSqlHost[32];
    new 
g_szSaveSqlDataBase[32];
#endif    

public plugin_init()
{
    
register_plugin(PLUGIN_NAMEPLUGIN_VERSIONPLUGIN_AUTHOR);
    
register_dictionary("iHOOK/iHOOK.txt");
    
g_MaxPlayers get_maxplayers();
    
    
register_clcmd("+rope""iHook_On");
    
register_clcmd("-rope""iHook_Off");
    
register_clcmd("+hook""iHook_On");
    
register_clcmd("-hook""iHook_Off");
    
register_clcmd("say /hook""iHook_Menu");
    
    
register_menucmd(register_menuid("Show_iHookMenu"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<9), "Handle_iHookMenu");
    
register_menucmd(register_menuid("Show_SettingsHookMenu"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9), "Handle_SettingsHookMenu");
    
register_menucmd(register_menuid("Show_ControleHookMenu"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9), "Handle_ControleHookMenu");
}

public 
client_putinserver(id
{
#if defined SAVE_HOOK    
    
if(get_user_flags(id) & read_flags(g_DataFlag[FLAG_MENU]) || !g_DataFlag[FLAG_MENU])
    {
        new 
iParams[1];
        
iParams[0] = id;
        
get_user_authid(idg_szPlayerSteam[id], charsmax(g_szPlayerSteam[]));
        
format(g_szQuerycharsmax(g_szQuery), "SELECT * FROM `%s` WHERE (`%s`.`STEAM_ID` = '%s')"g_szSaveSqlTableg_szSaveSqlTableg_szPlayerSteam[id]);
        
SQL_ThreadQuery(g_SqlTuple"SQL_QueryConnection"g_szQueryiParamssizeof iParams);
    }
#endif    
    
if(get_user_flags(id) & read_flags(g_DataFlag[FLAG_HOOK]) || !g_DataFlag[FLAG_HOOK])
        
g_HookUserHave[id] = true;
}

public 
client_disconnect(id)
{
#if defined SAVE_HOOK
    
if(get_user_flags(id) & read_flags(g_DataFlag[FLAG_MENU]) || !g_DataFlag[FLAG_MENU])
    {
        
formatex(g_szQuerycharsmax(g_szQuery), "UPDATE `%s` SET `SPRITE` = '%d', `SOUND` = '%d', `TIP` = '%d', `SIZE` = '%d', `VIEW` = '%d', `SPEED` = '%d' WHERE `%s`.`STEAM_ID` = '%s';"
        
g_szSaveSqlTableg_HookUserSett[id][SPRITE], g_HookUserSett[id][SOUND], g_HookUserSett[id][TIP], g_HookUserSett[id][SIZE], g_HookUserSett[id][VIEW], g_HookUserSett[id][SPEED], g_szSaveSqlTableg_szPlayerSteam[id]);
        
SQL_ThreadQuery(g_SqlTuple"ThreadQueryHandler"g_szQuery);
    }    
#endif    
    
for(new iHOOK_SETTINGSi++)
        
g_HookUserSett[id][i] = 0;
    
    
g_PlayerPageMenu[id] = 0;
    
g_SettingsMenu[id] = 0;
    for(new 
i3i++)
        
g_vecHookOrigin[id][i] = 0.0;
    
    if(
task_exists(id+TASK_iHOOK))
        
remove_task(id+TASK_iHOOK);
    
    if(
g_HookUserHave[id])
        
g_HookUserHave[id] = false;
#if defined SAVE_HOOK    
    
g_szPlayerSteam[id] = "";
#endif        
}

public 
iHook_Menu(id)
{
    if(
get_user_flags(id) & read_flags(g_DataFlag[FLAG_MENU]) || !g_DataFlag[FLAG_MENU]) return Show_iHookMenu(id);
    
UTIL_SendText(id"%L"LANG_SERVER"iHOOK_CHAT_YOU_NOT_HAVE_FLAG_MENU");
    return 
PLUGIN_HANDLED;
}    
Show_iHookMenu(id)
{
    new 
szMenu[512], iKeys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<9), iLenaData[HOOK_SETTINGS][DATA_HOOK];
    for(new 
iHOOK_SETTINGSi++)
        
ArrayGetArray(g_aHook[i], g_HookUserSett[id][i], aData[i]);

    
iLen formatex(szMenucharsmax(szMenu), "%L"id"iHOOK_MENU_HOOK_TITLE");
    
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_HOOK_SPRITES"aData[SPRITE][NAME]);
    
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_HOOK_SOUNDS"aData[SOUND][NAME]);
    
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_HOOK_TIPS"aData[TIP][NAME]);
    
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_HOOK_SIZE"aData[SIZE][NAME]);
    
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_HOOK_VIEW"aData[VIEW][NAME]);
    
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_HOOK_SPEED"aData[SPEED][NAME]);
    if(
get_user_flags(id) & read_flags(g_DataFlag[FLAG_CONTROLE]) || !g_DataFlag[FLAG_CONTROLE])
    {
        
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_HOOK_CONTROLE");
        
iKeys |= (1<<6);
    }
    else 
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_HOOK_CONTROLE_CLOSE");
    if(
get_user_flags(id) & read_flags(g_DataFlag[FLAG_MODE]) || !g_DataFlag[FLAG_MODE])
    {
        
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"idg_ModeHook "iHOOK_MENU_HOOK_MODE_ON" "iHOOK_MENU_HOOK_MODE_OFF");
        
iKeys |= (1<<7);
    }
    else 
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"idg_ModeHook "iHOOK_MENU_HOOK_MODE_CLOSE_ON" "iHOOK_MENU_HOOK_MODE_CLOSE_OFF");
    
formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_HOOK_EXIT");
    return 
show_menu(idiKeysszMenu, -1"Show_iHookMenu");
}

public 
Handle_iHookMenu(idiKey)
{
    switch(
iKey)
    {
        case 
6: if(get_user_flags(id) & read_flags(g_DataFlag[FLAG_CONTROLE]) || !g_DataFlag[FLAG_CONTROLE]) return Clcmd_ControleHookMenu(id);
        case 
7:
        {
            if(~
get_user_flags(id) & read_flags(g_DataFlag[FLAG_MODE]))
                return 
Show_iHookMenu(id);
            
            new 
szName[32];
            
get_user_name(idszNamecharsmax(szName));
            
g_ModeHook = !g_ModeHook;
            
UTIL_SendText(0"%L"LANG_SERVERg_ModeHook "iHOOK_CHAT_HOOK_MODE_ON" "iHOOK_CHAT_HOOK_MODE_OFF"szName);
        }
        case 
9: return PLUGIN_HANDLED;
        default: 
        {
            
g_SettingsMenu[id] = iKey;
            return 
Clcmd_SettingsHookMenu(id);
        }    
    }
    return 
Show_iHookMenu(id);
}

public 
Clcmd_SettingsHookMenu(id) return Show_SettingsHookMenu(idg_SettingsMenu[id], g_PlayerPageMenu[id] = 0);
Show_SettingsHookMenu(idiTypeiPos)
{
    if(
iPos 0)
        return 
Show_iHookMenu(id);
    
    new const 
szMenuHookSettingsTitle[][] =
    {
        
"iHOOK_MENU_SETTINGS_SPRITE",
        
"iHOOK_MENU_SETTINGS_SOUND",
        
"iHOOK_MENU_SETTINGS_TIP",
        
"iHOOK_MENU_SETTINGS_SIZE",
        
"iHOOK_MENU_SETTINGS_VIEW",
        
"iHOOK_MENU_SETTINGS_SPEED"
    
};
    
    new 
iStart iPos NUM_ITEM_PAGE;
    new 
iListSize g_aSize[iType] <= NUM_ITEM_PAGE g_aSize[iType] - g_aSize[iType];
    if(
iStart iListSizeiStart iListSize;
    
iStart iStart - (iStart NUM_ITEM_PAGE);
    
g_PlayerPageMenu[id] = iStart NUM_ITEM_PAGE;
    new 
iEnd iStart NUM_ITEM_PAGE;
    if(
iEnd iListSizeiEnd iListSize + (iPos 1);
    new 
szMenu[512], iLeniPagesNum = (iListSize NUM_ITEM_PAGE + ((iListSize NUM_ITEM_PAGE) ? 0));
    
iLen formatex(szMenucharsmax(szMenu), "%L"idszMenuHookSettingsTitle[iType], iPos 1iPagesNum);
    new 
iKeys = (1<<7|1<<9), baDataHook[DATA_HOOK];
    for(new 
iStartiEnda++)
    {
        
ArrayGetArray(g_aHook[iType], aaDataHook);
        if(~
get_user_flags(id) & read_flags(aDataHook[FLAG]))
            ++
biLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_NO_FLAGS"aDataHook[NAME]);
        else if(
g_HookUserSett[id][iType] == a)
            ++
biLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_ON"aDataHook[NAME]);
        else 
        {
            
iKeys |= (1<<b);
            
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_KEY", ++baDataHook[NAME]);
        }
    }
    for(new 
bNUM_ITEM_PAGEi++) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"^n");
    
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"idiPos "iHOOK_MENU_BACK" "iHOOK_MENU_BACK_MENU");
    if(
iEnd iListSize)
    {
        
iKeys |= (1<<8);
        
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_NEXT");
    }
    else 
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_NEXT_CLOSE");
    
formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_EXIT");
    return 
show_menu(idiKeysszMenu, -1"Show_SettingsHookMenu");
}

public 
Handle_SettingsHookMenu(idiKey)
{
    switch(
iKey)
    {
        case 
7: return Show_SettingsHookMenu(idg_SettingsMenu[id], --g_PlayerPageMenu[id]);
        case 
8: return Show_SettingsHookMenu(idg_SettingsMenu[id], ++g_PlayerPageMenu[id]);
        case 
9: return PLUGIN_HANDLED;
        default: 
g_HookUserSett[id][g_SettingsMenu[id]] = g_PlayerPageMenu[id] * NUM_ITEM_PAGE iKey;
    }
    return 
Show_SettingsHookMenu(idg_SettingsMenu[id], g_PlayerPageMenu[id]);
}

public 
Clcmd_ControleHookMenu(id) return Show_ControleHookMenu(idg_PlayerPageMenu[id] = 0);
Show_ControleHookMenu(idiPos)
{    
    if(
iPos || ~get_user_flags(id) & read_flags(g_DataFlag[FLAG_CONTROLE])) 
        return 
Show_iHookMenu(id);
    
    new 
iPlayersNum;
    for(new 
1<= g_MaxPlayersi++)
    {
        if(!
is_user_connected(i) || get_user_team(i) != && get_user_team(i) != 2
            continue;
        
        
g_PlayersMenu[id][iPlayersNum++] = i;
    }
    new 
iStart iPos NUM_ITEM_PAGE;
    if(
iStart iPlayersNumiStart iPlayersNum;
    
iStart iStart - (iStart NUM_ITEM_PAGE);
    
g_PlayerPageMenu[id] = iStart NUM_ITEM_PAGE;
    new 
iEnd iStart NUM_ITEM_PAGE;
    if(
iEnd iPlayersNumiEnd iPlayersNum;
    new 
szMenu[512], iLeniPagesNum = (iPlayersNum NUM_ITEM_PAGE + ((iPlayersNum NUM_ITEM_PAGE) ? 0));
    
iLen formatex(szMenucharsmax(szMenu), "%L"id"iHOOK_MENU_HOOK_CONTROLE_TITLE"iPos 1iPagesNum);
    new 
szName[32], iiKeys = (1<<7|1<<9), b;
    for(new 
iStartiEnda++)
    {
        
g_PlayersMenu[id][a];
        
get_user_name(iszNamecharsmax(szName));
        
iKeys |= (1<<b);
        
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"ig_HookUserHave[i] ? "iHOOK_PLAYER_HOOK_TAKE" "iHOOK_PLAYER_HOOK_GIVE", ++bszName);
    }
    for(new 
bNUM_ITEM_PAGEi++) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"^n");
    
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"idiPos "iHOOK_MENU_BACK" "iHOOK_MENU_BACK_MENU");
    if(
iEnd iPlayersNum)
    {
        
iKeys |= (1<<8);
        
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_NEXT");
    }
    else 
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_NEXT_CLOSE");
    
formatex(szMenu[iLen], charsmax(szMenu) - iLen"%L"id"iHOOK_MENU_EXIT");
    return 
show_menu(idiKeysszMenu, -1"Show_ControleHookMenu");
}

public 
Handle_ControleHookMenu(idiKey)
{
    if(~
get_user_flags(id) & read_flags(g_DataFlag[FLAG_CONTROLE])) 
        return 
Show_iHookMenu(id);
    
    switch(
iKey)
    {
        case 
7: return Show_ControleHookMenu(id, --g_PlayerPageMenu[id]);
        case 
8: return Show_ControleHookMenu(id, ++g_PlayerPageMenu[id]);
        case 
9: return PLUGIN_HANDLED;
        default:
        {
            new 
iTarget g_PlayersMenu[id][g_PlayerPageMenu[id] * NUM_ITEM_PAGE iKey];
            if(
get_user_team(iTarget) == || get_user_team(iTarget) == 2)
            {
                new 
szName[32], szTargetName[32];
                
get_user_name(idszNamecharsmax(szName));
                
get_user_name(iTargetszTargetNamecharsmax(szTargetName));
                
                
UTIL_SendText(0"%L"LANG_SERVERg_HookUserHave[iTarget] ? "iHOOK_CHAT_HOOK_PLAYER_TAKE" "iHOOK_CHAT_HOOK_PLAYER_GIVE"szNameszTargetName);
                
g_HookUserHave[iTarget] = !g_HookUserHave[iTarget];
                
                if(
g_Hook[GIVE])
                    for(new 
iHOOK_SETTINGSi++)
                        
g_HookUserSett[iTarget][i] = g_HookUserSett[id][i];
            }
        }
    }
    return 
Show_ControleHookMenu(idg_PlayerPageMenu[id]);
}

public 
iHook_On(id)
{
    if(!
g_HookUserHave[id])
    {
        
UTIL_SendText(id"%L"LANG_SERVER"iHOOK_CHAT_YOU_NOT_HAVE_FLAG_HOOK");
        return 
PLUGIN_HANDLED;
    }
    else if(!
g_ModeHook)
    {
        
UTIL_SendText(id"%L"id"iHOOK_CHAT_HOOK_MODE_NOT_WORK");
        return 
PLUGIN_HANDLED;
    }
    
#if defined JBE
    
if(jbe_is_user_wanted(id) && g_Hook[WANTED] || is_wanted_players() && !g_Hook[WANTED] || jbe_get_day_mode() == 3)
        return 
PLUGIN_HANDLED;
#endif
    
#if defined JBM
    
if(jbm_is_user_wanted(id) && g_Hook[WANTED] || is_wanted_players() && !g_Hook[WANTED] || jbm_get_day_mode() == 3)
        return 
PLUGIN_HANDLED;
#endif    
    
    
if(!is_user_alive(id) || task_exists(id+TASK_iHOOK)) 
        return 
PLUGIN_HANDLED;
    
    new 
iOrigin[3], aDataSound[DATA_HOOK], aDataTip[DATA_HOOK];
    
ArrayGetArray(g_aHook[1], g_HookUserSett[id][SOUND], aDataSound);
    
ArrayGetArray(g_aHook[2], g_HookUserSett[id][TIP], aDataTip);
    
get_user_origin(idiOrigin3);
    
g_vecHookOrigin[id][0] = float(iOrigin[0]);
    
g_vecHookOrigin[id][1] = float(iOrigin[1]);
    
g_vecHookOrigin[id][2] = float(iOrigin[2]);
    if(
str_to_num(aDataTip[TYPE]) > 0)
        
UTIL_CreateTipeNormal(g_vecHookOrigin[id], aDataTip[VALUE], 10255);
    else 
        
UTIL_CreateTipeBreak(g_vecHookOrigin[id], aDataTip[VALUE]);
    
    
emit_sound(idCHAN_STATICaDataSound[FILE], VOL_NORMATTN_NORM0PITCH_NORM);
    
iHook_task(id+TASK_iHOOK);
    
set_task(0.1"iHook_task"id+TASK_iHOOK__"b");
    return 
PLUGIN_HANDLED;
}

public 
iHook_task(id)
{
    
id -= TASK_iHOOK;
    
#if defined JBE
    
if(jbe_is_user_wanted(id))
        
remove_task(id+TASK_iHOOK);
#endif        
    
#if defined JBM
    
if(jbm_is_user_wanted(id))
        
remove_task(id+TASK_iHOOK);
#endif    
    
    
new Float:vecOrigin[3], Float:vecVelocity[3], Float:flYFloat:flX;
    
pev(idpev_originvecOrigin);
    
vecVelocity[0] = (g_vecHookOrigin[id][0] - vecOrigin[0]) * 3.0;
    
vecVelocity[1] = (g_vecHookOrigin[id][1] - vecOrigin[1]) * 3.0;
    
vecVelocity[2] = (g_vecHookOrigin[id][2] - vecOrigin[2]) * 3.0;
    
    new 
aDataSpeed[DATA_HOOK], aDataSize[DATA_HOOK], aDataView[DATA_HOOK], aDataSprite[DATA_HOOK];
    
ArrayGetArray(g_aHook[0], g_HookUserSett[id][SPRITE], aDataSprite);
    
ArrayGetArray(g_aHook[3], g_HookUserSett[id][SIZE], aDataSize);
    
ArrayGetArray(g_aHook[4], g_HookUserSett[id][VIEW], aDataView);
    
ArrayGetArray(g_aHook[5], g_HookUserSett[id][SPEED], aDataSpeed);
    
    
flY vecVelocity[0] * vecVelocity[0] + vecVelocity[1] * vecVelocity[1] + vecVelocity[2] * vecVelocity[2];
    
flX = (float(aDataSpeed[VALUE])) / floatsqroot(flY);
    
    
vecVelocity[0] *= flX;
    
vecVelocity[1] *= flX;
    
vecVelocity[2] *= flX;
    
set_pev(idpev_velocityvecVelocity);
    
    
UTIL_CreateHook(idg_vecHookOrigin[id], aDataSprite[VALUE], 011aDataSize[VALUE], aDataView[VALUE], 255255255210_);
}

public 
iHook_Off(id)
{
    if(
task_exists(id+TASK_iHOOK))
    {
        new 
aDataSound[DATA_HOOK];
        
ArrayGetArray(g_aHook[1], g_HookUserSett[id][SOUND], aDataSound);
        
remove_task(id+TASK_iHOOK);
        
emit_sound(idCHAN_STATICaDataSound[FILE], VOL_NORMATTN_NORMSND_STOPPITCH_NORM);
    }
    return 
PLUGIN_HANDLED;
}

public 
plugin_cfg()
{
    new 
szCfgDir[64], szCfgFile[128];
    
get_localinfo("amxx_configsdir"szCfgDircharsmax(szCfgDir));
    
formatex(szCfgFilecharsmax(szCfgFile), "%s/iHOOK/hook_config.ini"szCfgDir);
    if(!
file_exists(szCfgFile))
    {
        new 
szError[256];
        
formatex(szErrorcharsmax(szError), "[cs-diamond] Невозможно запустить сервер. Отсутсвует файл: %s!"szCfgFile);
        
set_fail_state(szError);
        return;
    }
    new 
szBuffer[512], szKey[64], szValue[64], iSection;
    new 
aDataSprite[DATA_HOOK], aDataSound[DATA_HOOK], aDataTip[DATA_HOOK], aDataSize[DATA_HOOK], aDataView[DATA_HOOK], aDataSpeed[DATA_HOOK];
    new 
iFile fopen(szCfgFile"rt");
    
    for(new 
iHOOK_SETTINGSi++)
        
g_aHook[i] = ArrayCreate(DATA_HOOK);
    
    while(!
feof(iFile))
    {
        
fgets(iFileszBuffercharsmax(szBuffer));
        if(
szBuffer[0] == ';' || szBuffer[0] == '{' || szBuffer[0] == '}' || szBuffer[0] == '/' || szBuffer[0] == '@' || szBuffer[0] == '#')
            continue;
        
        if(
szBuffer[0] == '[')
        {
            
iSection++;
            continue;
        }
        switch(
iSection)
        {
            case 
1:
            {
                
parse(szBufferszKeycharsmax(szKey), szValuecharsmax(szValue));
                
trim(szKey);
                
trim(szValue);
                if(
equal(szKey"FLAG_HOOK"))             copy(g_DataFlag[FLAG_HOOK],     charsmax(g_DataFlag[FLAG_HOOK]),         szValue);
                else if(
equal(szKey"FLAG_MENU"))         copy(g_DataFlag[FLAG_MENU],     charsmax(g_DataFlag[FLAG_MENU]),         szValue);
                else if(
equal(szKey"FLAG_CONTROLE"))     copy(g_DataFlag[FLAG_CONTROLE], charsmax(g_DataFlag[FLAG_CONTROLE]),     szValue);
                else if(
equal(szKey"FLAG_MODE"))         copy(g_DataFlag[FLAG_MODE],     charsmax(g_DataFlag[FLAG_MODE]),         szValue);
                else if(
equal(szKey"WANTED_HOOK"))     g_Hook[WANTED]                    = str_to_num(szValue);
                else if(
equal(szKey"HOOK_GIVE"))         g_Hook[GIVE]                    = str_to_num(szValue);
            
#if defined SAVE_HOOK
                
else if(equal(szKey"HOST"))            copy(g_szSaveSqlHost,         charsmax(g_szSaveSqlHost),             szValue);
                else if(
equal(szKey"USER"))             copy(g_szSaveSqlUser,         charsmax(g_szSaveSqlUser),             szValue);
                else if(
equal(szKey"PASSWORD"))        copy(g_szSaveSqlPassword,     charsmax(g_szSaveSqlPassword),         szValue);
                else if(
equal(szKey"DATABASE"))        copy(g_szSaveSqlDataBase,     charsmax(g_szSaveSqlDataBase),         szValue);
                else if(
equal(szKey"TABLE"))            copy(g_szSaveSqlTable,         charsmax(g_szSaveSqlTable),         szValue);
            
#endif
            
}
            case 
2
            {
                if(
parse(szBufferaDataSprite[NAME], charsmax(aDataSprite[NAME]), aDataSprite[FILE], charsmax(aDataSprite[FILE]), aDataSprite[FLAG], charsmax(aDataSprite[FLAG])))
                {
                    if(
aDataSprite[FILE])
                    {
                        
aDataSprite[VALUE] = engfunc(EngFunc_PrecacheModelaDataSprite[FILE]);
                        
ArrayPushArray(g_aHook[0], aDataSprite);    
                    }
                }
            }
            case 
3
            {
                if(
parse(szBufferaDataSound[NAME], charsmax(aDataSound[NAME]), aDataSound[FILE], charsmax(aDataSound[FILE]), aDataSound[FLAG], charsmax(aDataSound[FLAG])))
                {
                    if(
aDataSound[FILE])
                    {
                        
engfunc(EngFunc_PrecacheSoundaDataSound[FILE]);
                        
ArrayPushArray(g_aHook[1], aDataSound);
                    }
                }    
            }
            case 
4:
            {
                if(
parse(szBufferaDataTip[NAME], charsmax(aDataTip[NAME]), aDataTip[FILE], charsmax(aDataTip[FILE]), aDataTip[FLAG], charsmax(aDataTip[FLAG]), aDataTip[TYPE], charsmax(aDataTip[TYPE])))
                {
                    if(
aDataTip[FILE])
                    {
                        
aDataTip[VALUE] = engfunc(EngFunc_PrecacheModelaDataTip[FILE]);
                        
ArrayPushArray(g_aHook[2], aDataTip);    
                    }
                }
            }
            case 
5:
            {
                if(
parse(szBufferaDataSize[NAME], charsmax(aDataSize[NAME]), szValuecharsmax(szValue), aDataSize[FLAG], charsmax(aDataSize[FLAG])))
                {
                    
aDataSize[VALUE] = str_to_num(szValue);
                    
ArrayPushArray(g_aHook[3], aDataSize);
                }
            }
            case 
6:
            {
                if(
parse(szBufferaDataView[NAME], charsmax(aDataView[NAME]), szValuecharsmax(szValue), aDataView[FLAG], charsmax(aDataView[FLAG])))
                {
                    
aDataView[VALUE] = str_to_num(szValue);
                    
ArrayPushArray(g_aHook[4], aDataView);
                }
            }
            case 
7:
            {
                if(
parse(szBufferaDataSpeed[NAME], charsmax(aDataSpeed[NAME]), szValuecharsmax(szValue), aDataSpeed[FLAG], charsmax(aDataSpeed[FLAG])))
                {
                    
aDataSpeed[VALUE] = str_to_num(szValue);
                    
ArrayPushArray(g_aHook[5], aDataSpeed);
                }
            }
        }    
    }
    
fclose(iFile);
    for(new 
iHOOK_SETTINGSi++)
        
g_aSize[i] = ArraySize(g_aHook[i]);    
    
#if defined SAVE_HOOK    
    
iHook_SqlLoad();
#endif    
}

#if defined SAVE_HOOK    
public iHook_SqlLoad()
{
    new 
iErrorCodeszText[512];
    
g_SqlTuple         SQL_MakeDbTuple(g_szSaveSqlHostg_szSaveSqlUserg_szSaveSqlPasswordg_szSaveSqlDataBase);
    
g_SqlConnection SQL_Connect(g_SqlTupleiErrorCodeszTextcharsmax(szText));

    new 
Handle:hQueries;
    
format(g_szQuerycharsmax(g_szQuery), "CREATE TABLE IF NOT EXISTS `%s` (`id` INT(11) NOT NULL AUTO_INCREMENT, `STEAM_ID` VARCHAR(34) NOT NULL COLLATE 'utf8_unicode_ci', `SPRITE` INT NOT NULL, `SOUND` INT NOT NULL, `TIP` INT NOT NULL, `SIZE` INT NOT NULL, `VIEW` INT NOT NULL, `SPEED` INT NOT NULL, PRIMARY KEY (`id`)) COLLATE = 'utf8_unicode_ci' ENGINE = InnoDB;"g_szSaveSqlTable);
    
hQueries SQL_PrepareQuery(g_SqlConnectiong_szQuery);
    if(!
SQL_Execute(hQueries)) 
    {
        
SQL_QueryError(hQueriesszTextcharsmax(szText));
        
log_amx("%s"szText);
    }
    
SQL_FreeHandle(hQueries);
}    

public 
plugin_end() 
{
    if(
g_SqlTuple
        
SQL_FreeHandle(g_SqlTuple);
    
    if(
g_SqlConnection
        
SQL_FreeHandle(g_SqlConnection);
    
    return 
0;
}    

public 
SQL_QueryConnection(iStateHandle:hQuery, const szError[], iErrorCode, const szData[], iDataSize)
{
    if(
iState == TQUERY_CONNECT_FAILED || iState == TQUERY_QUERY_FAILED)
    {
        
log_amx("[cs-diamond] MySQL connection failed");
        
log_amx("[cs-diamond] ERROR %d | %s"iErrorCodeszError);
        if(
iDataSizelog_amx("Query state: %d"szData[iState == TQUERY_CONNECT_FAILED 1]);
        return 
PLUGIN_HANDLED;
    }
    new 
id szData[0];
    if(
SQL_NumResults(hQuery) < 1)
    {
        if(
equal(g_szPlayerSteam[id], "ID_PENDING"))
            return 
PLUGIN_HANDLED;
        
        
format(g_szQuerycharsmax(g_szQuery), "INSERT INTO `%s` (`STEAM_ID`, `SPRITE`, `SOUND`, `TIP`, `SIZE`, `VIEW`, `SPEED`) VALUES ('%s', '0', '0', '0', '0', '0', '0');"g_szSaveSqlTableg_szPlayerSteam[id]);
        
SQL_ThreadQuery(g_SqlTuple"ThreadQueryHandler"g_szQuery);
        return 
PLUGIN_HANDLED;
    }
    else
    {
        new const 
szDataSave[][] = { "SPRITE""SOUND""TIP""SIZE""VIEW""SPEED" };
        for(new 
iiNumHOOK_SETTINGSi++)
        {
            
iNum SQL_ReadResult(hQuerySQL_FieldNameToNum(hQueryszDataSave[i]));
            
g_HookUserSett[id][i] = (iNum <= g_aSize[i]) ? iNum 0;
        }    
    }
    return 
PLUGIN_HANDLED;
}

public 
ThreadQueryHandler(iStateHandlehQueryszError[], iErrorCodeiParams[], iParamsSize)
{
    if(
iState == 0)
        return;
    
    
log_amx("SQL Error: %d (%s)"iErrorCodeszError);
}
#endif    

public plugin_natives()
{
    
register_native("native_iHOOK_menu""iHook_Menu"1);
    
register_native("native_iHOOK_get_hook_sett""native_iHOOK_get_hook_sett"1);
    
register_native("native_iHOOK_get_hook_have""native_iHOOK_get_hook_have"1);
}

public 
native_iHOOK_get_hook_sett(idiType) return g_HookUserSett[id][iType];
public 
bool:native_iHOOK_get_hook_have(id) return g_HookUserHave[id];

#if defined JBE    
stock is_wanted_players()
{
    new 
bool:iWanted;
    for(new 
iPlayer 1iPlayer <= g_MaxPlayersiPlayer++)
    {    
        if(!
jbe_is_user_wanted(iPlayer))
            continue;
        
        
iWanted true;
        break;
    }
    return 
iWanted;
}
#endif

#if defined JBM
stock is_wanted_players()
{
    new 
bool:iWanted;
    for(new 
iPlayer 1iPlayer <= g_MaxPlayersiPlayer++)
    {    
        if(!
jbm_is_user_wanted(iPlayer))
            continue;
        
        
iWanted true;
        break;
    }
    return 
iWanted;
}
#endif

stock UTIL_CreateTipeBreak(Float:vecOrigin[3], pModel)
{
    
engfunc(EngFunc_MessageBeginMSG_ALLSVC_TEMPENTITYvecOrigin0);
    
write_byte(TE_SPRITETRAIL);
    
engfunc(EngFunc_WriteCoordvecOrigin[0]);
    
engfunc(EngFunc_WriteCoordvecOrigin[1]);
    
engfunc(EngFunc_WriteCoordvecOrigin[2] + 25);
    
engfunc(EngFunc_WriteCoordvecOrigin[0]);
    
engfunc(EngFunc_WriteCoordvecOrigin[1]);
    
engfunc(EngFunc_WriteCoordvecOrigin[2] + 80);
    
write_short(pModel);    
    
write_byte(25);    // Колличество
    
write_byte(20);    // Время
    
write_byte(2);
    
write_byte(20);    // Какой разброс
    
write_byte(8);    // На сколько сильно подлетает
    
message_end();
}

stock UTIL_CreateTipeNormal(Float:vecOrigin[3], pSptiteiWidthiAlpha)
{
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvecOrigin0);
    
write_byte(TE_SPRITE);
    
engfunc(EngFunc_WriteCoordvecOrigin[0]);
    
engfunc(EngFunc_WriteCoordvecOrigin[1]);
    
engfunc(EngFunc_WriteCoordvecOrigin[2]);
    
write_short(pSptite);
    
write_byte(iWidth);
    
write_byte(iAlpha);
    
message_end();
}

stock UTIL_CreateHook(pEntityFloat:vecOrigin[3], pSpriteiStartFrame 0iFrameRate 0iLifeiWidthiAmplitude 0iRediGreeniBlueiBrightnessiScrollSpeed 0)
{
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY);
    
write_byte(TE_BEAMENTPOINT);
    
write_short(pEntity);
    
engfunc(EngFunc_WriteCoordvecOrigin[0]);
    
engfunc(EngFunc_WriteCoordvecOrigin[1]);
    
engfunc(EngFunc_WriteCoordvecOrigin[2]);
    
write_short(pSprite);
    
write_byte(iStartFrame);
    
write_byte(iFrameRate); // 0.1's
    
write_byte(iLife); // 0.1's
    
write_byte(iWidth);
    
write_byte(iAmplitude); // 0.01's
    
write_byte(iRed);
    
write_byte(iGreen);
    
write_byte(iBlue);
    
write_byte(iBrightness);
    
write_byte(iScrollSpeed); // 0.1's
    
message_end();
}

stock UTIL_SendText(pPlayer, const szMessage[], any:...)
{
    new 
szBuffer[190];
    if(
numargs() > 2
        
vformat(szBuffercharsmax(szBuffer), szMessage3);
    else 
        
copy(szBuffercharsmax(szBuffer), szMessage);
    while(
replace(szBuffercharsmax(szBuffer), "!y""^1")) {}
    while(
replace(szBuffercharsmax(szBuffer), "!t""^3")) {}
    while(
replace(szBuffercharsmax(szBuffer), "!g""^4")) {}
    switch(
pPlayer)
    {
        case 
0:
        {
            for(new 
iPlayer 1iPlayer <= g_MaxPlayersiPlayer++)
            {
                if(!
is_user_connected(iPlayer)) 
                    continue;
                
                
engfunc(EngFunc_MessageBeginMSG_ONE_UNRELIABLE76, {0.00.00.0}, iPlayer);
                
write_byte(iPlayer);
                
write_string(szBuffer);
                
message_end();
            }
        }
        default:
        {
            
engfunc(EngFunc_MessageBeginMSG_ONE_UNRELIABLE76, {0.00.00.0}, pPlayer);
            
write_byte(pPlayer);
            
write_string(szBuffer);
            
message_end();
        }
    }
Аватара пользователя
kuzyarosemead
 
Сообщения: 28
Зарегистрирован: 27 мар 2020, 14:19
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Я ничего не знаю

Re: Free Hook in FreeDay JailBreak

Сообщение Leonidddd » 28 мар 2020, 14:31

kuzyarosemead, в событии iHook_On(id) вырежи лишние проверки, которые не нужно и сделай проверку на фри дей а ля

if(!g_HookUserHave[id] && !is_freeday_started() ) return PLUGIN_HANDLED;

Перевожу на человеческий: Если у игрока нету доступа к хуку и не начат фридэй, то блочим функцию.
Если же есть хоть что-либо одно из них - то создаем наш хук. Там же можешь добавить и проверку на is_user_wanted или какие там ещё в jb моде нужны для хука..
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2557
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 192 раз.
Поблагодарили: 718 раз.

Re: Free Hook in FreeDay JailBreak

Сообщение kuzyarosemead » 28 мар 2020, 16:24

я не знаю как (

Добавлено спустя 13 минут 41 секунду:
/hlds/web/www/amxxpc/work/scripting/iHOOK.sma(340) : error 017: undefined symbol "is_freeday_started"
как решить?

Добавлено спустя 23 минуты 1 секунду:
Код: Выделить всё
    native jbe_free_day_start();
public 
iHook_On(id)
{

    if(!
g_HookUserHave[id] && !is_freeday_started() ) return PLUGIN_HANDLED;

    
//if(!g_HookUserHave[id])
    //{
    //    UTIL_SendText(id, "%L", LANG_SERVER, "iHOOK_CHAT_YOU_NOT_HAVE_FLAG_HOOK");
    //    return PLUGIN_HANDLED;
    //}
    //else if(!g_ModeHook)
    //{
    //    UTIL_SendText(id, "%L", id, "iHOOK_CHAT_HOOK_MODE_NOT_WORK");
    //    return PLUGIN_HANDLED;
    //}
    
#if defined JBE
    
if(jbe_is_user_wanted(id) && g_Hook[WANTED] || is_wanted_players() && !g_Hook[WANTED] || jbe_get_day_mode() == 3)
        return 
PLUGIN_HANDLED;
#endif
    
#if defined JBM
    
if(jbm_is_user_wanted(id) && g_Hook[WANTED] || is_wanted_players() && !g_Hook[WANTED] || jbm_get_day_mode() == 3)
        return 
PLUGIN_HANDLED;
#endif    
    
    
if(!is_user_alive(id) || task_exists(id+TASK_iHOOK)) 
        return 
PLUGIN_HANDLED;
    
    new 
iOrigin[3], aDataSound[DATA_HOOK], aDataTip[DATA_HOOK];
    
ArrayGetArray(g_aHook[1], g_HookUserSett[id][SOUND], aDataSound);
    
ArrayGetArray(g_aHook[2], g_HookUserSett[id][TIP], aDataTip);
    
get_user_origin(idiOrigin3);
    
g_vecHookOrigin[id][0] = float(iOrigin[0]);
    
g_vecHookOrigin[id][1] = float(iOrigin[1]);
    
g_vecHookOrigin[id][2] = float(iOrigin[2]);
    if(
str_to_num(aDataTip[TYPE]) > 0)
        
UTIL_CreateTipeNormal(g_vecHookOrigin[id], aDataTip[VALUE], 10255);
    else 
        
UTIL_CreateTipeBreak(g_vecHookOrigin[id], aDataTip[VALUE]);
    
    
emit_sound(idCHAN_STATICaDataSound[FILE], VOL_NORMATTN_NORM0PITCH_NORM);
    
iHook_task(id+TASK_iHOOK);
    
set_task(0.1"iHook_task"id+TASK_iHOOK__"b");
    return 
PLUGIN_HANDLED;
}
stock is_freeday_started()
{
    new 
bool:iFreeDay;
    for(new 
iPlayer 1iPlayer <= g_MaxPlayersiPlayer++)
    {    
        if(!
jbe_free_day_start())
            continue;
        
        
iFreeDay true;
        break;
    }
    return 
iFreeDay;


Это все что я сделал, но до сих пор не работает
Аватара пользователя
kuzyarosemead
 
Сообщения: 28
Зарегистрирован: 27 мар 2020, 14:19
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Я ничего не знаю

Re: Free Hook in FreeDay JailBreak

Сообщение thezolotoi » 28 мар 2020, 18:23

Здраствуйте, для начала добавте инклуд своего мода в данном случии видемо у вас jbe_core:
#include jbe_core.inc
И удолите native jbe_free_day_start();

В конце добовляем
Код: Выделить всё
    
else if
(jbe_get_day_mode() == 2 ) continue;

Аватара пользователя
thezolotoi
 
Сообщения: 75
Зарегистрирован: 17 янв 2019, 13:04
Благодарил (а): 4 раз.
Поблагодарили: 4 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: AMXX / PAWN

Re: Free Hook in FreeDay JailBreak

Сообщение kuzyarosemead » 28 мар 2020, 19:51

в конце чего?

Добавлено спустя 4 минуты 33 секунды:
не понял куда именно вставлять
Аватара пользователя
kuzyarosemead
 
Сообщения: 28
Зарегистрирован: 27 мар 2020, 14:19
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Я ничего не знаю

Re: Free Hook in FreeDay JailBreak

Сообщение thezolotoi » 28 мар 2020, 19:56

Код: Выделить всё
    
if(!g_HookUserHave[id])
{
        
UTIL_SendText(id"%L"LANG_SERVER"iHOOK_CHAT_YOU_NOT_HAVE_FLAG_HOOK");
        return 
PLUGIN_HANDLED;
    }
    else if(!
g_ModeHook)
    {
        
UTIL_SendText(id"%L"id"iHOOK_CHAT_HOOK_MODE_NOT_WORK");
        return 
PLUGIN_HANDLED;
    }
    else if(
моя проверка)
 
Аватара пользователя
thezolotoi
 
Сообщения: 75
Зарегистрирован: 17 янв 2019, 13:04
Благодарил (а): 4 раз.
Поблагодарили: 4 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: AMXX / PAWN

Re: Free Hook in FreeDay JailBreak

Сообщение kuzyarosemead » 28 мар 2020, 21:24

/hlds/web/www/amxxpc/work/scripting/iHOOK.sma(346) : error 024: "break" or "continue" is out of context

Добавлено спустя 1 минуту 21 секунду:
опять ошибка
Аватара пользователя
kuzyarosemead
 
Сообщения: 28
Зарегистрирован: 27 мар 2020, 14:19
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Я ничего не знаю

Re: Free Hook in FreeDay JailBreak

Сообщение thezolotoi » 28 мар 2020, 21:45

if(!g_HookUserHave[id])
{
if(!jbe_get_day_mode() == 2 )
{
UTIL_SendText(id, "%L", LANG_SERVER, "iHOOK_CHAT_YOU_NOT_HAVE_FLAG_HOOK");
return PLUGIN_HANDLED;
}
}
else if(!g_ModeHook)
{
UTIL_SendText(id, "%L", id, "iHOOK_CHAT_HOOK_MODE_NOT_WORK");
return PLUGIN_HANDLED;
}

Попробуйте тогда так
Аватара пользователя
thezolotoi
 
Сообщения: 75
Зарегистрирован: 17 янв 2019, 13:04
Благодарил (а): 4 раз.
Поблагодарили: 4 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: AMXX / PAWN

Re: Free Hook in FreeDay JailBreak

Сообщение kuzyarosemead » 28 мар 2020, 22:02

Зашел на сервер при этом убрав все привилегии у себя, паутинка работает и после фд , только редактировать нельзя, А нужно чтобы он только во время фд давал не позже не раньше, и забирал хук когда фд кончается
Аватара пользователя
kuzyarosemead
 
Сообщения: 28
Зарегистрирован: 27 мар 2020, 14:19
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Я ничего не знаю

Re: Free Hook in FreeDay JailBreak

Сообщение kuzyarosemead » 29 мар 2020, 15:11

когда нет фд - хук есть
когда есть фд хука нет

Добавлено спустя 35 минут 38 секунд:
все сделал все
Аватара пользователя
kuzyarosemead
 
Сообщения: 28
Зарегистрирован: 27 мар 2020, 14:19
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Я ничего не знаю


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: nemec21 и гости: 16