Столкнулся со следующей проблемой, не сохраняет инфы таблицы в мускул
где я мог допустить ошибку
- Код: Выделить всё
#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)!=2 && !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 игрок блокируется и заносят в мускул.Спасибо за помощь.