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

[MySql] Блок КТ. Где то сделал ошибку...

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

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

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

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

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

[MySql] Блок КТ. Где то сделал ошибку...

Сообщение limbooc » 12 май 2018, 22:20

Добрый вечер форумчане
Столкнулся со следующей проблемой, не сохраняет инфы таблицы в мускул

где я мог допустить ошибку

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

#define INFORMER_POS                //если в моде вшите положение информера при открытие меню
#if defined INFORMER_POS
native jbe_informer_offset_up(id)
#endif
native jbe_set_user_team(id, iTeam)


new PLUGIN[]  = "Block"
new AUTHOR[]  = "Author"
new VERSION[] = "1.1"

new Host[]        = ""
new User[]        = ""
new Pass[]        = ""
new Db[]       = ""

new Block[33];
new bool:iStart[33];

new Handle:g_SqlConnection
new Handle
:g_SqlTuple
new g_Error
[512]
new g_authed[33]
new g_sql_ready = false
new bool
:g_loaded[33]

new maxplayers;


public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    maxplayers 
= get_maxplayers()
    set_task(0.1, "MySql_Init")
    register_clcmd("blockmenu", "BlockMenu");
}

public plugin_natives()
{
    register_native("jbe_block_for_player", "jbe_block_for_player", 1)
    register_native("jbe_block_menu", "jbe_block_menu", 1)
}
public jbe_block_menu(id) return BlockMenu(id)
public jbe_block_for_player(id) return Block[id]

public MySql_Init()
{
    // we tell the API that id is the information we want to connect to,
    // just not yet. basically it's like storing it in global variables
    g_SqlTuple = SQL_MakeDbTuple(Host,User,Pass,Db)
    
    
// ok, we're ready to connect
    new ErrorCode
    g_SqlConnection 
= SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error))
    if(g_SqlConnection == Empty_Handle)
    {
        // stop the plugin with an error message
        set_fail_state(g_Error)
    }
    
    new Handle
:Queries
    
// we must now prepare some random queries
    Queries = SQL_PrepareQuery(g_SqlConnection,"CREATE TABLE IF NOT EXISTS blockuser (steamid varchar(32), name varchar(64), money INT(11))")
    
    if
(!SQL_Execute(Queries))
    {
        // if there were any problems
        SQL_QueryError(Queries,g_Error,charsmax(g_Error))
        set_fail_state(g_Error)
    }
    
    
// close the handle
    SQL_FreeHandle(Queries)
    
    g_sql_ready 
= true
    for
(new i=1; i<=maxplayers; i++)
    {
        if(g_authed[i])
        {
            Load_MySql(i)
        }
    }
}

public Load_MySql(id)
{
    if(g_sql_ready)
    {
        if(g_SqlTuple == Empty_Handle)
        {
            set_fail_state(g_Error)
        }
        
        new szSteamId
[32], szTemp[512]
        get_user_authid(id, szSteamId, charsmax(szSteamId))
        
        new Data
[1]
        Data[0] = id
        
        
//we will now select from the table `furienmoney` where the steamid match
        format(szTemp,charsmax(szTemp),"SELECT * FROM `blockuser` WHERE (`blockuser`.`steamid` = '%s')", szSteamId)
        SQL_ThreadQuery(g_SqlTuple,"register_client",szTemp,Data,1)
    }
}

public register_client(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    if(FailState == TQUERY_CONNECT_FAILED)
    {
        log_amx("Load - Could not connect to SQL database.  [%d] %s", Errcode, Error)
    }
    else if(FailState == TQUERY_QUERY_FAILED)
    {
        log_amx("Load Query failed. [%d] %s", Errcode, Error)
    }
    new id
    id 
= Data[0]
    if(SQL_NumResults(Query) < 1)
    {
        //.if there are no results found
        
        new szSteamId
[32], szName[32], szQuotedName[64]
        get_user_authid(id, szSteamId, charsmax(szSteamId)) // get user's steamid
        get_user_name(id, szName, 31) // get user's name
        SQL_QuoteString(g_SqlConnection, szQuotedName, 63, szName)
        
        
//  if its still pending we can't do anything with it
        if (equal(szSteamId,"ID_PENDING"))
        {
            return PLUGIN_HANDLED
        
}
        
        new szTemp
[512]
        
        
// now we will insert the values into our table.
        format(szTemp,charsmax(szTemp),"INSERT INTO `coins` ( `steamid` , `name` , `blockuser`) VALUES ('%s','%s','0');",szSteamId, szQuotedName)
        SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
    }
    else
    
{
        // if there are results found
        Block[id]        = SQL_ReadResult(Query, 2)
    }
    g_loaded[id] = true
    return PLUGIN_HANDLED
}

public Save_MySql(id)
{
    if(g_loaded[id])
    {
        new szSteamId[32], szTemp[512], szName[32], szQuotedName[64]
        get_user_authid(id, szSteamId, charsmax(szSteamId))
        get_user_name(id, szName, 31)
        SQL_QuoteString(g_SqlConnection, szQuotedName, 63, szName)
        
        
// Here we will update the user hes information in the database where the steamid matches.
        format(szTemp,charsmax(szTemp),"UPDATE `coins` SET `name` = '%s', `blockuser` = '%i' WHERE `coins`.`steamid` = '%s';",szQuotedName,Block[id],szSteamId)
        SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
    }
}

public IgnoreHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    SQL_FreeHandle(Query)
    
    return PLUGIN_HANDLED
}

public plugin_end()
{
    if(g_SqlConnection != Empty_Handle)
    {
        SQL_FreeHandle(g_SqlConnection) //free connection handle here
    }
}

public client_disconnected(id)
{
    
    Save_MySql
(id)
    Block[id] = 0
    iStart
[id] = false
}

public client_authorized(id)
{
    g_authed[id] = true
    Load_MySql
(id)
}
  

public BlockMenu
(id)
{
    #if defined INFORMER_POS
    jbe_informer_offset_up(id);
    #endif
    new szText[555 char]
    formatex( szText, charsmax( szText ), "Меню блокировки игрока")
    new menu = menu_create( szText, "BlockMenu_handler" )

    new s_Players[32], i_Num, i_Player,
        s_Name[32], s_Player[10]

    get_players(s_Players, i_Num)

    for (new i; i < i_Num; i++)
    { 
        i_Player 
= s_Players[i]

        if(get_user_team(i_Player)!=&& !Block[i_Player])
            continue

        get_user_name
(i_Player, s_Name, charsmax(s_Name))
        num_to_str(i_Player, s_Player, charsmax(s_Player))

        if(!Block[i_Player])
        {    
            if
(get_user_flags(i_Player) & ADMIN_IMMUNITY || get_user_flags(i_Player) & ADMIN_BAN)
            {
                formatex( szText, charsmax( szText ), "\d%s \r[Admin]", s_Name)
                menu_additem(menu, szText, s_Player, ADMIN_RCON)
            }
            else menu_additem(menu, s_Name, s_Player, 0)
        }
        else
        
{
            formatex( szText, charsmax( szText ), "%s - \rРазблокировать", s_Name)
            menu_additem(menu, szText, s_Player, 0)
        }
    }
    menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
    menu_setprop( menu, MPROP_NEXTNAME, "Далее") 
    menu_setprop
( menu, MPROP_BACKNAME, "Назад")
    menu_setprop( menu, MPROP_EXITNAME, "Выход")

    //if(get_user_flags(id) & ADMIN_BAN)
    //{
        menu_display(id, menu, 0)
    //} else ChatColor(id, "Нет доступа")
    return PLUGIN_HANDLED
}

public BlockMenu_handler(id, menu, item)
{
    if (item == MENU_EXIT)
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    
}

    new s_Data[6], s_Name[64], i_Access, i_Callback, i_Name[32]
    menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
    
    new i_Player 
= str_to_num(s_Data)
    get_user_name(id, s_Name, 31)
    get_user_name(i_Player, i_Name, 31)

    if(Block[i_Player])
    {
        Block[i_Player] = false
        ChatColor
(0, "!g[Block] !g%s!y Разблокировал вход за охрану игроку !g%s",s_Name, i_Name)
    }
    else
    
{
    Block[i_Player] = true
    ChatColor
(0, "!g[Block] !g%s!y Заблокировл вход за охрану игроку !g%s",s_Name, i_Name)
    jbe_set_user_team(i_Player, 1)
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
} 


stock ChatColor
(const id, const input[], any:...)
{
    new count = 1, players[32]
    static msg[191]
    vformat(msg, 190, input, 3)
    
    replace_all
(msg, 190, "!g", "^4")
    replace_all(msg, 190, "!y", "^1")
    replace_all(msg, 190, "!team", "^3")
    
    if 
(id) players[0] = id; else get_players(players, count, "ch")
    {
        for (new i = 0; i < count; i++)
        {
            if (is_user_connected(players[i]))
            {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
                write_byte(players[i]);
                write_string(msg);
                message_end();
            }
        }
    }
}


при Block[id] = true игрок блокируется и заносят в мускул.Спасибо за помощь.
Аватара пользователя
limbooc
 
Сообщения: 71
Зарегистрирован: 15 мар 2017, 07:45
Благодарил (а): 13 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Pawn

Re: [MySql] Блок КТ. Где то сделал ошибку...

Сообщение limbooc » 16 май 2018, 18:34

UP :bravo:
Аватара пользователя
limbooc
 
Сообщения: 71
Зарегистрирован: 15 мар 2017, 07:45
Благодарил (а): 13 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Pawn


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12