• Гость, перед открытием темы прочитай описание раздела, чтобы не ошибиться. Любые вопросы по настройке сервера создаются в разделе Технической Поддержки.

Помощь Ошибка в плагине, в нативе при подключении БД

theHex

Участник
Сообщения
14
Симпатии
0
Баллы
4
#1
Доброго времени суток, не могли бы вы подсказать, что не так? Ошибка выдается на 75 строчку ( [AMXX] Run time error 10: native error (native "SQL_PrepareQuery") )
 
Ошибка
[AMXX] Run time error 10: native error (native "SQL_PrepareQuery")
Плагины AMX
[ 1] Admin Loader v3.5 neygomon admin_loader.am running
[ 2] FreshBans v1.4.2b kanagava fresh_bans.amxx running
[ 3] Admin Chat v1.9.0.5263 AMXX Dev Team adminchat.amxx running
[ 4] Admin Commands v1.9.0.5263 AMXX Dev Team admincmd.amxx running
[ 5] Anti Flood v1.9.0.5263 AMXX Dev Team antiflood.amxx running
[ 6] Commands Menu v1.9.0.5263 AMXX Dev Team cmdmenu.amxx running
[ 7] Info. Messages v1.9.0.5263 AMXX Dev Team imessage.amxx running
[ 8] Menus Front-End v1.9.0.5263 AMXX Dev Team menufront.amxx running
[ 9] Maps Menu v1.9.0.5263 AMXX Dev Team mapsmenu.amxx running
[ 10] NextMap v1.9.0.5263 AMXX Dev Team nextmap.amxx running
[ 11] Nextmap Chooser v1.9.0.5263 AMXX Dev Team mapchooser.amxx running
[ 12] Players Menu v1.8.2 AMXX Dev Team plmenu.amxx running
[ 13] Plugin Menu v1.9.0.5263 AMXX Dev Team pluginmenu.amxx running
[ 14] Restrict Weapons v1.9.0.5263 AMXX Dev Team restmenu.amxx running
[ 15] TimeLeft v1.9.0.5263 AMXX Dev Team timeleft.amxx running
[ 16] Scrolling Message v1.9.0.5263 AMXX Dev Team scrollmsg.amxx running
[ 17] Admin Votes v1.9.0.5263 AMXX Dev Team adminvote.amxx running
[ 18] CS Misc. Stats v1.9.0.5263 AMXX Dev Team miscstats.amxx running
[ 19] CS Stats Logging v1.9.0.5263 AMXX Dev Team stats_logging.a running
[ 20] Stats Configuration v1.9.0.5263 AMXX Dev Team statscfg.amxx running
[ 21] MG Grab v2.0 Nickron dgrab.amxx running
[ 22] Lite Translit v2.3 neygomon lite_translit.a running
[ 23] [JBE] Core v1.0 Sanlerus jbe_mod.amxx running
[ 24] Change Game Name v1.2 ReHLDS Team change_game_nam running
[ 25] Bank v1.0 theHex bank.amxx debug
[ 26] [JBE_DM] Birth Day v1.1 Freedo.m jbe_dm_birthday running
[ 27] [JBE_DM] Ghosts v1.1 Freedo.m jbe_dm_ghosts.a running
[ 28] [JBE_DM] Hide And Seek v1.1 Freedo.m jbe_dm_hideands running
[ 29] [JBE_DM] Ringolevio v1.1 Freedo.m jbe_dm_ringolev running
[ 30] [JBE_DM] Sparta v1.1 Freedo.m jbe_dm_sparta.a running
30 plugins, 30 running
Плагины MetaMod
[ 1] VoiceTranscoder RUN - vtc.so v2017RC4 ini ANY
[ 2] Reunion RUN - reunion.so v0.1.0.135 ini Start Never
[ 3] AMX Mod X RUN - amxmodx.so v1.9.0.5263 ini Start ANY
[ 4] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5263 pl3 ANY
[ 5] CSX RUN - csx_amxx_i386.so v1.9.0.5263 pl3 ANY
[ 6] ReAPI RUN - reapi_amxx_i386.so v5.12.0.192-dev pl3 ANY Never
[ 7] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5263 pl3 ANY
[ 8] MySQL RUN - mysql_amxx_i386.so v1.9.0.5263 pl3 ANY
[ 9] Fun RUN - fun_amxx_i386.so v1.9.0.5263 pl3 ANY
[10] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5263 pl3 ANY ANY
[11] Engine RUN - engine_amxx_i386.so v1.9.0.5263 pl3 ANY ANY
11 plugins, 11 running
Версия Build
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.7.0.693-dev

ko1dun

Модератор
Сообщения
142
Симпатии
34
Баллы
104
#2
Добрый день. Это не вся ошибка, не могли бы вы отправить полный лог ошибки?
 

theHex

Участник
Сообщения
14
Симпатии
0
Баллы
4
#3
Добрый день. Это не вся ошибка, не могли бы вы отправить полный лог ошибки?
[AMXX] Displaying debug trace (plugin "bank.amxx", version "1.0")
L 02/17/2020 - 14:19:27: [AMXX] Run time error 10: native error (native "SQL_PrepareQuery")
L 02/17/2020 - 14:19:27: [AMXX] [0] bank.sma::CheckPlayer (line 75)
 

theHex

Участник
Сообщения
14
Симпатии
0
Баллы
4
#4
Добрый день. Это не вся ошибка, не могли бы вы отправить полный лог ошибки?
Вот код, если нужен
Код:
#include <amxmodx>
#include <amxmisc>
#include <sqlx>

#define PLUGIN "Bank"
#define VERSION "1.0"
#define AUTHOR "theHex"

new Handle:MYSQL_Tuple;
new Handle:MYSQL_Connect;

new g_Cvar[5];

new g_ActiveMysql;
new szPlayerData[33];
new szPlayerMysql[33];

new UMoney[32];

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)

    g_Cvar[1] = register_cvar("amx_mysql_hostname", "localhost")
    g_Cvar[2] = register_cvar("amx_mysql_username", "u926009sipp")
    g_Cvar[3] = register_cvar("amx_mysql_password", "censored")
    g_Cvar[4] = register_cvar("amx_mysql_database", "db926009")
    register_menucmd(register_menuid("Bank_Send"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9), "Handle_Bank_Send");
    register_clcmd("say /bank", "Bank_Send")
    set_task(1.0, "MYSQL_Load")
    
}

native jbe_get_user_money(pPlayer);
native jbe_set_user_money(pPlayer, iNum, iFlash);
native jbe_informer_offset_up(pPlayer);
native jbe_informer_offset_down(pPlayer);

public MYSQL_Load()   
{
    new szHostname[30], szUsername[30], szPassword[30], szDatabase[30]
    new szError[512], szErr

    get_pcvar_string(g_Cvar[1], szHostname, charsmax( szHostname ))
    get_pcvar_string(g_Cvar[2], szUsername, charsmax( szUsername ))
    get_pcvar_string(g_Cvar[3], szPassword, charsmax( szPassword ))
    get_pcvar_string(g_Cvar[4], szDatabase, charsmax( szDatabase ))

    MYSQL_Tuple = SQL_MakeDbTuple(szHostname, szUsername, szPassword, szDatabase)
    MYSQL_Connect = SQL_Connect(MYSQL_Tuple, szErr, szError, charsmax( szError ))

    if(MYSQL_Connect == Empty_Handle)
        set_fail_state( szError )

    g_ActiveMysql = true
}

public client_connect(id)
{
    if(!is_user_bot(id) || !is_user_hltv(id))
    {
        set_task(1.0, "CheckPlayer", id)
    }
}

public CheckPlayer(id)
{
    if(!g_ActiveMysql)
    {
        set_task(1.0, "CheckPlayer", id)
    }

    new szError[512]
    new szName[32], szMYSQLName[32]
    new Handle:szSelect = SQL_PrepareQuery(MYSQL_Connect, "SELECT * FROM jbe_bank")
    
    if(!SQL_Execute(szSelect))
    {
        SQL_QueryError(szSelect, szError, charsmax( szError ))
        set_fail_state( szError )
    }

    get_user_name(id, szName, charsmax( szName ))

    while(SQL_MoreResults(szSelect))
    {
        SQL_ReadResult(szSelect, 1, szMYSQLName, charsmax( szMYSQLName ))
    
        if(equal(szMYSQLName, szName))
        {
            szPlayerData[id] = SQL_ReadResult(szSelect, 2)
            szPlayerMysql[id] = true

            break
        }else{
            SQL_NextRow(szSelect)
        }
    }   

    if(!szPlayerMysql[id])
    {
        new Handle:szInsert
        szInsert = SQL_PrepareQuery(MYSQL_Connect, "INSERT INTO `jbe_bank` (`name`, `data`) VALUES  ('%s', '0');", szName) //Отправляем в базу его ник

        if(!SQL_Execute(szInsert))
        {
            SQL_QueryError(szInsert, szError, charsmax( szError ))
            set_fail_state( szError )
        }
        szPlayerMysql[id] = true
    }
}


Bank_Send(id)
{
    jbe_informer_offset_up(id);
    new szMenu[512], iKeys = (1<<1|1<<2|1<<3|1<<4|1<<5|1<<9),
    iLen = formatex(szMenu, charsmax(szMenu), "\yБанк^n^n\dВаш баланс: %d", szPlayerData[id]);
    
    if(jbe_get_user_money(id) >= 100){
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[1] \wПоложить \y$100^n");
    iKeys |= (1<<0);
    }
    else{
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[1] \dПоложить \r$100^n");
    }

    if(jbe_get_user_money(id) >= 200){
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[2] \wПоложить $200^n");
    iKeys |= (1<<1);
    }
    else{
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[2] \dПоложить \r$200^n");
    }
    
    if(jbe_get_user_money(id) >= 500){
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[3] \wПоложить $500^n");
    iKeys |= (1<<2);
    }
    else{
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[3] \dПоложить \r$500^n");
    }
    
    if(jbe_get_user_money(id) >= 1000){
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[4] \wПоложить $1000^n");
    iKeys |= (1<<3);
    }
    else{
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[4] \dПоложить \r$1000^n");
    }
    
    if(jbe_get_user_money(id) >= 5000){
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[5] \wПоложить $5000^n");
    iKeys |= (1<<4);
    }
    else{
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[5] \dПоложить \r$5000^n");
    }
    
    if(jbe_get_user_money(id) >= 100){
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[6] \wПоложить все^n^n^n");
    iKeys |= (1<<5);
    }
    else{
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[6] \dПоложить все^n^n^n");
    }
    formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y[0] \wВыход^n^n\dby theHex");
    return show_menu(id, iKeys, szMenu, -1, "Bank_Send");
}

public Handle_Bank_Send(id, iKey)
{
    UMoney[id] = jbe_get_user_money(id);
    switch(iKey)
    {
        case 0: if(UMoney[id] >= 100) {
        jbe_set_user_money(id, UMoney[id] - 100, 1);
        szPlayerData[id] += 100;
        }
        case 1: if(UMoney[id] >= 200) {
        jbe_set_user_money(id, UMoney[id] - 200, 1);
        szPlayerData[id] += 200;
        }
        case 2: if(UMoney[id] >= 500) {
        jbe_set_user_money(id, UMoney[id] - 500, 1);
        szPlayerData[id] += 500;
        }
        case 3: if(UMoney[id] >= 1000) {
        jbe_set_user_money(id, UMoney[id] - 1000, 1);
        szPlayerData[id] += 1000;
        }
        case 4: if(UMoney[id] >= 5000) {
        jbe_set_user_money(id, UMoney[id] - 5000, 1);
        szPlayerData[id] += 5000;
        }
        case 5: if(UMoney[id] >= 100) {
        szPlayerData[id] += UMoney[id];
        jbe_set_user_money(id, 0, 1);
        }
        case 9: {
        jbe_informer_offset_down(id);
        return PLUGIN_HANDLED;
        }
    }
    return Bank_Send(id);
}

public client_disconnect(id)
{
    new szError[512]
    new szName[32]
    new Handle:szUpdate

    get_user_name(id, szName, charsmax( szName ))

    szUpdate = SQL_PrepareQuery(MYSQL_Connect, "UPDATE `jbe_bank` SET `data` = '%i' WHERE `jbe_bank`.`name` = '%s';", szPlayerData[id], szName)

    if(!SQL_Execute(szUpdate))
    {
        SQL_QueryError(szUpdate, szError, charsmax( szError ))
        set_fail_state( szError )
    }
}
 

ko1dun

Модератор
Сообщения
142
Симпатии
34
Баллы
104
#5
theHex, мало, но скорей всего ошибка в активном соединении будет. А точная информация по ошибке как раз таки и находиться чуть выше
 

theHex

Участник
Сообщения
14
Симпатии
0
Баллы
4
#6
ko1dun, вот еще не скопировалось одно [MySQL] Invalid database handle: 0 , оно повторяется очень много раз
FireShot Capture 021 - Консоль сервера __ CSserv.ru - csserv.ru.png
 

ko1dun

Модератор
Сообщения
142
Симпатии
34
Баллы
104
#8
ko1dun, вот еще не скопировалось одно [MySQL] Invalid database handle: 0 , оно повторяется очень много раз Посмотреть вложение 1525
Ну вот, это самая главная строчка была. Не помешало бы в функции создать ещё одну проверку добавить
if(MYSQL_Tuple == Empty_Handle)
set_fail_state( "Error" )

public MYSQL_Load()
{
new szHostname[30], szUsername[30], szPassword[30], szDatabase[30]
new szError[512], szErr

get_pcvar_string(g_Cvar[1], szHostname, charsmax( szHostname ))
get_pcvar_string(g_Cvar[2], szUsername, charsmax( szUsername ))
get_pcvar_string(g_Cvar[3], szPassword, charsmax( szPassword ))
get_pcvar_string(g_Cvar[4], szDatabase, charsmax( szDatabase ))

MYSQL_Tuple = SQL_MakeDbTuple(szHostname, szUsername, szPassword, szDatabase)
if(MYSQL_Tuple == Empty_Handle)
set_fail_state( "Error" )

MYSQL_Connect = SQL_Connect(MYSQL_Tuple, szErr, szError, charsmax( szError ))

if(MYSQL_Connect == Empty_Handle)
set_fail_state( szError )

g_ActiveMysql = true
}
 

ko1dun

Модератор
Сообщения
142
Симпатии
34
Баллы
104
#10
Там явная ошибка с указанием не существующего соединения
 

theHex

Участник
Сообщения
14
Симпатии
0
Баллы
4
#11
ko1dun, не подскажешь решение этой проблемы? :) я окончательно запутался
 

lddnsk

Администратор
Сообщения
254
Симпатии
65
Баллы
104
#12
theHex, дело может быть в отсутствии таблицы в базе данных. В коде плагина нет функционала по ее созданию при отсутствии, в таком случае к плагинам как правило идут файлики sql, которые должны выполняться в менеджере баз данных (adminer, phpmyadmin и т.п.), они и создают структуру самой таблицы. Ну и перепроверь вообще данные для подключения, может они неверные
 
Сверху