Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер
2 страниц V   1 2

Mysql Save ?

Статус пользователя soneekk
сообщение 20.7.2016, 1:28
Сообщение #1


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

здравствуйте, вот нашел такой код для сохранение в mysql, переделал под моего сервера, сохраняет lvl+exp & points. все вроде работает, сейчас интересно:
очень ли грузить такой код сервер?
можно ли улучшить kod?
в каком случае не будут сохраняться?
будет ли в каком то в ситуации подать serv?

спасибо большое заранее.

Mysql_save.sma
Код:
#include <amxmodx>
#include <sqlx>

native set_user_level(id, set)
native set_user_exp(id, set)
native set_user_points(id, set)

native get_user_level(id)
native get_user_exp(id)
native get_user_points(id)

#define DB_HOST "" //HOST
#define DB_USER "" //USER
#define DB_PASSWORD "" //PASS
#define DB_NAME "" //DB NAME

new Handle:g_hDBHandle, Handle:g_hDBInfo

public plugin_init() DBConnect()

public client_putinserver(id) if(!is_user_bot(id)) load_sql(id)

public client_disconnect(id) if(!is_user_bot(id)) UpdateDB(id)

public load_sql(id)
{
new ID[32], NAME[32], IP[32]
get_user_authid(id, ID, charsmax(ID));
get_user_ip(id, IP, charsmax(IP));
get_user_name(id, NAME, charsmax(NAME));

new Stats[13]

new Handle:hQuery = SQL_PrepareQuery(g_hDBHandle, "SELECT `Level`, `Exp`, `Points` FROM lvl_table WHERE steamid = '%s'", ID);

if (!SQL_Execute(hQuery))
{
new Error[192];
SQL_QueryError(hQuery, Error, charsmax(Error))
set_fail_state(Error)
SQL_FreeHandle(hQuery)
return;
}

if (!SQL_NumResults(hQuery))
{
natives_call(id, 1, 0, 0)

SQL_FreeHandle(hQuery);

new ip[16];
get_user_ip(id, ip, charsmax(ip), 1);
hQuery = SQL_PrepareQuery(g_hDBHandle, "INSERT INTO `lvl_table` (`name`, `steamid`, `ip`, `Level`, `Exp`, `Points` ) VALUES ('%s', '%s', '%s', '%d', '%d', '%d' )", NAME, ID, IP, 1, 0, 0);

if (!SQL_Execute(hQuery))
{
server_print("Error due registering user!");
}
SQL_FreeHandle(hQuery)

return;
}

for(new i=0; i < 3; i++) Stats[i]=SQL_ReadResult(hQuery, i);

natives_call(id, Stats[0], Stats[1], Stats[2])
SQL_FreeHandle(hQuery);
}

DBConnect()
{
new Error[128], errno;
g_hDBInfo = SQL_MakeDbTuple(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
g_hDBHandle = SQL_Connect(g_hDBInfo, errno, Error, charsmax(Error));
SQL_FreeHandle(g_hDBInfo)
if (g_hDBHandle == Empty_Handle){
set_fail_state(Error)
return
}

new Handle:ResultT

ResultT=SQL_PrepareQuery(g_hDBHandle, "CREATE TABLE IF NOT EXISTS `lvl_table` (`name` VARCHAR(35) NOT NULL default '', `steamid` VARCHAR(25) NOT NULL default '', `ip` VARCHAR(20) NOT NULL default '', `Level` INT(6) NOT NULL, `Exp` INT(6) NOT NULL, `Points` INT(6) NOT NULL)")

if(!SQL_Execute(ResultT)){
SQL_QueryError(ResultT,Error,127)
SQL_FreeHandle(ResultT)
set_fail_state(Error)
return
}
SQL_FreeHandle(ResultT)
}

public plugin_end()
{
SQL_FreeHandle(g_hDBHandle);
}

stock UpdateDB(id)
{
new ID[32]
get_user_authid(id, ID, charsmax(ID));

new Handle:hQuery = SQL_PrepareQuery(g_hDBHandle, "UPDATE `lvl_table` SET `Level`=%i, `Exp`=%i, `Points`=%i WHERE `steamid` = '%s'", get_user_level(id),get_user_exp(id), get_user_points(id), ID);

if (!SQL_Execute(hQuery))
{
new Error[192];
SQL_QueryError(hQuery, Error, charsmax(Error));
}
SQL_FreeHandle(hQuery);
}

stock natives_call(id, Level=1, Exp=0, Points=0)
{
set_user_level(id, Level)
set_user_exp(id, Exp)
set_user_points(id, Points)
}


Отредактировал: soneekk, - 20.7.2016, 1:28
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
voed
сообщение 20.7.2016, 1:37
Сообщение #2
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Все запросы заменить на threadquery, иначе сервер будет виснуть на время выполнения запроса
client_disconnect не срабатывает, если игрок не послал команду drop, насколько я помню
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя soneekk
сообщение 20.7.2016, 2:18
Сообщение #3


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

Цитата(voed @ 20.7.2016, 1:37) *
Все запросы заменить на threadquery, иначе сервер будет виснуть на время выполнения запроса
client_disconnect не срабатывает, если игрок не послал команду drop, насколько я помню


можно поточнее? что заменит на SQL_PrepareQuery ? какой код отвечает на запросы ?

Отредактировал: soneekk, - 20.7.2016, 2:40
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 20.7.2016, 3:35
Сообщение #4
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

soneekk, PrepareQuery и Execute заменяются на ThreadQuery. При этом данные получаются асинхронно в отдельной функции-хэндлере
Как это работает можно посмотреть здесь
Там, правда, для новичка хэндлер может показаться немного непонятным, но ничего другого в голову не приходит, дальше гугл smile.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя soneekk
сообщение 20.7.2016, 4:07
Сообщение #5


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

voed,
вот что скажешь вот таком коде?

code
Код:
#include < amxmodx >
#include < mysql >
#include < zombieplague >
#include <sqlx2>

#define get_ammo(%1) zp_get_user_ammo_packs(%1)
#define set_ammo(%1,%2) zp_set_user_ammo_packs(%1,%2)

#define get_class(%1) zp_get_user_next_class(%1)
#define set_class(%1,%2) zp_set_user_zombie_class(%1,%2)

#define PLUGIN_NAME "Save Ammo & Class zombies"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "Opo4uMapy"

#define LIMIT_AMMO 30000

new const
Host[]= "p21303",
User[]= "p2",
Pass[]= "529",
Db[]= "p2ave";

new const
Table[] = "zm_new",
AuthRow[] = "steam",
MoneyRow[]= "user_money",
ClassRow[]= "user_class"

new Handle:SQL_Tuple;

new g_szSteam[33][35]

public plugin_init( )
register_plugin ( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR );

public client_putinserver( id )
set_task(5.0, "LoadData", id+73718)

public plugin_cfg()
set_task(1.0, "Load_Debug")

public Load_Debug()
{
new g_Error[512]
SQL_Tuple = SQL_MakeDbTuple(Host, User, Pass, Db);
new ErrorCode,Handle:SqlConnection = SQL_Connect(SQL_Tuple,ErrorCode,g_Error,charsmax(g_Error))

if(SqlConnection == Empty_Handle)
set_fail_state(g_Error)

if(!SQL_TableExists(SqlConnection, Table))
{
new Handle:Queries;
new Query[256]
format( Query, 255, "CREATE TABLE `%s`.`%s` (`%s` VARCHAR(40) CHARACTER SET cp1250 COLLATE cp1250_general_ci NOT NULL, `%s` INT NOT NULL, `%s` INT NOT NULL, PRIMARY KEY (`%s`))", Db, Table, AuthRow, MoneyRow, ClassRow, AuthRow);
Queries = SQL_PrepareQuery( SqlConnection, Query )

if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,charsmax(g_Error))
set_fail_state(g_Error);
}

SQL_FreeHandle(Queries)
}

SQL_FreeHandle(SqlConnection)
}

public QueryHandler(FailState, Handle:Query, Error[], ErrCode, data[], size, Float:querytime)
{

if(!CheckQuery(FailState, ErrCode, Error))
{
SQL_FreeHandle(Query);
return PLUGIN_HANDLED;
}

static id; id = data[0];

if(SQL_NumResults(Query) < 1)
{
new Query[270]
format( Query, 255, "INSERT INTO `%s` ( `%s` , `%s`, `%s`) VALUES ('%s', '5', '0');", Table, AuthRow, MoneyRow, ClassRow, g_szSteam[id] );
SQL_ThreadQueryFormatNoData(SQL_Tuple, "IgnoreHandle", Query )

set_class(id, 0)
set_ammo(id, 5)
}
else
{
set_ammo(id, SQL_ReadResult(Query, 0))
set_class(id, SQL_ReadResult(Query, 1))
}

SQL_FreeHandle(Query);

return PLUGIN_CONTINUE;
}

public LoadData(task)
{
new id=task-73718

if(!is_user_connected(id))
return;

g_szSteam[id][0] = '^0'

get_user_authid(id, g_szSteam[id] ,charsmax(g_szSteam))

new Query[256]
static data[1]; data[0]=id
format( Query, 255, "SELECT `%s`, `%s` FROM `%s` WHERE `%s` = '%s'", MoneyRow, ClassRow, Table, AuthRow, g_szSteam[id] );

SQL_ThreadQueryFormat(SQL_Tuple,"QueryHandler", Query, data, 1 )
}

public Save_Data(id)
{
SQL_ThreadQueryFormatNoData(SQL_Tuple, "IgnoreHandle", "UPDATE `%s` SET `%s` = '%i', `%s` = '%i' WHERE `%s`.`%s` = '%s'", Table, MoneyRow, get_ammo(id), ClassRow, get_class(id), Table, AuthRow, g_szSteam[id] );
}

public client_disconnect(id)
{
if(!equal(g_szSteam[id], "STEAM_ID_LAN") && !equal(g_szSteam[id], "BOT") && !equal(g_szSteam[id], "VALVE_ID_LAN"))
Save_Data(id)
}

public IgnoreHandle(FailState,Handle:Query,Error[],ErrCode,Data[],DataSize)
{
CheckQuery(FailState, ErrCode, Error)

SQL_FreeHandle(Query)

return PLUGIN_HANDLED
}

public plugin_end()
{
if(SQL_Tuple)
SQL_FreeHandle(SQL_Tuple);
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 20.7.2016, 4:43
Сообщение #6
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

soneekk, в качестве примера сойдет
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя soneekk
сообщение 21.7.2016, 2:45
Сообщение #7


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

помогите исправить ошибку пожалуйста .

был вот так :
Code1
Код:
public QueryHandler(FailState, Handle:Query, Error[], ErrCode, data[], size, Float:querytime)
{

if(!CheckQuery(FailState, ErrCode, Error))
{
SQL_FreeHandle(Query);
return PLUGIN_HANDLED;
}

static id; id = data[0];

if(SQL_NumResults(Query) < 1)
{
new Query[270]
format( Query, 255, "INSERT INTO `%s` ( `%s` , `%s`, `%s`) VALUES ('%s', '5', '0');", Table, AuthRow, MoneyRow, ClassRow, g_szSteam[id] );
SQL_ThreadQueryFormatNoData(SQL_Tuple, "IgnoreHandle", Query )

set_class(id, 0)
set_ammo(id, 5)
}
else
{
set_ammo(id, SQL_ReadResult(Query, 0))
set_class(id, SQL_ReadResult(Query, 1))
}

SQL_FreeHandle(Query);

return PLUGIN_CONTINUE;
}

переделал вот так:
Code 2
Код:
public QueryHandler(FailState, Handle:Query, Error[], ErrCode, data[], size, Float:querytime)
{
if(!CheckQuery(FailState, ErrCode, Error))
{
SQL_FreeHandle(Query);
return PLUGIN_HANDLED;
}

static id; id = data[0];

new NAME[32], IP[32];
get_user_ip(id, IP, charsmax(IP));
get_user_name(id, NAME, charsmax(NAME));

if(SQL_NumResults(Query) < 1)
{
new ip[16];
get_user_ip(id, ip, charsmax(ip), 1);

new Query[270]
format( Query, 255, "INSERT INTO `%s` ( `%s`, `%s` , `%s`, `%s`, `%s`, `%s`) VALUES ('%s', '%s', '%s', '5', '0', '0');", Table, Name, SteamID, Ip, Level, Exp, Point, g_szSteam[id] );
SQL_ThreadQueryFormatNoData(SQL_Tuple, "IgnoreHandle", Query )

set_lvl(id, 5)
set_exp(id, 0)
set_points(id, 0)
}
else
{
set_lvl(id, SQL_ReadResult(Query, 0))
set_exp(id, SQL_ReadResult(Query, 1))
set_points(id, SQL_ReadResult(Query, 2))
}

SQL_FreeHandle(Query);

return PLUGIN_CONTINUE;
}


ошибка в логах:
String formatted incorrectly - parameter 12 (total 11)
[AMXX] Displaying debug trace (plugin "SaveMYSQL.amxx")
[AMXX] Run time error 25: parameter error
[AMXX] [0] SaveMYSQL.sma::QueryHandler (line 104)



вес .sma
Код:

#include < amxmodx >
#include < mysql >
#include <sqlx2>

native set_user_level(id, set)
native set_user_exp(id, set)
native set_user_points(id, set)

native get_user_level(id)
native get_user_exp(id)
native get_user_points(id)

#define get_lvl(%1) get_user_level(%1)
#define set_lvl(%1,%2) set_user_level(%1,%2)

#define get_points(%1) get_user_points(%1)
#define set_points(%1,%2) set_user_points(%1,%2)

#define get_exp(%1) get_user_exp(%1)
#define set_exp(%1,%2) set_user_exp(%1,%2)

#define PLUGIN_NAME "Save Ammo & Class zombies"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "Opo4uMapy"

#define LIMIT_AMMO 30000

new const
Host[]= "ip",
User[]= "login",
Pass[]= "password",
Db[]= "login";

new const
Table[] = "JCTF_SAVE",
Name[] = "Name",
SteamID[] = "SteamID",
Ip[] = "IP",
Level[]= "Level",
Exp[]= "Exp",
Point[]= "Points"

new Handle:SQL_Tuple;

new g_szSteam[33][35]

public plugin_init( )
register_plugin ( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR );

public client_putinserver( id )
set_task(5.0, "LoadData", id+73718)

public plugin_cfg()
set_task(1.0, "Load_Debug")

public Load_Debug()
{
new g_Error[512]
SQL_Tuple = SQL_MakeDbTuple(Host, User, Pass, Db);
new ErrorCode,Handle:SqlConnection = SQL_Connect(SQL_Tuple,ErrorCode,g_Error,charsmax(g_Error))

if(SqlConnection == Empty_Handle)
set_fail_state(g_Error)

if(!SQL_TableExists(SqlConnection, Table))
{
new Handle:Queries;
new Query[256]
format( Query, 255, "CREATE TABLE `%s`.`%s` (`%s` INT NOT NULL, `%s` VARCHAR(40) CHARACTER SET cp1250 COLLATE cp1250_general_ci NOT NULL, `%s` INT NOT NULL, `%s` INT NOT NULL, `%s` INT NOT NULL, `%s` INT NOT NULL, PRIMARY KEY (`%s`))", Db, Table, Name, SteamID, Ip, Level, Exp, Point, SteamID);
Queries = SQL_PrepareQuery( SqlConnection, Query )

if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,charsmax(g_Error))
set_fail_state(g_Error);
}

SQL_FreeHandle(Queries)
}

SQL_FreeHandle(SqlConnection)
}

public QueryHandler(FailState, Handle:Query, Error[], ErrCode, data[], size, Float:querytime)
{
if(!CheckQuery(FailState, ErrCode, Error))
{
SQL_FreeHandle(Query);
return PLUGIN_HANDLED;
}

static id; id = data[0];

new NAME[32], IP[32];
get_user_ip(id, IP, charsmax(IP));
get_user_name(id, NAME, charsmax(NAME));

if(SQL_NumResults(Query) < 1)
{
new ip[16];
get_user_ip(id, ip, charsmax(ip), 1);

new Query[270]
format( Query, 255, "INSERT INTO `%s` ( `%s`, `%s` , `%s`, `%s`, `%s`, `%s`) VALUES ('%s', '%s', '%s', '5', '0', '0');", Table, Name, SteamID, Ip, Level, Exp, Point, g_szSteam[id] );
format( Query, 255, "INSERT INTO `%s` ( `%s` , `%s`, `%s`) VALUES ('%s', '5', '0');", Table, AuthRow, MoneyRow, ClassRow, g_szSteam[id] );
SQL_ThreadQueryFormatNoData(SQL_Tuple, "IgnoreHandle", Query )

set_lvl(id, 5)
set_exp(id, 0)
set_points(id, 0)
}
else
{
set_lvl(id, SQL_ReadResult(Query, 0))
set_exp(id, SQL_ReadResult(Query, 1))
set_points(id, SQL_ReadResult(Query, 2))
}

SQL_FreeHandle(Query);

return PLUGIN_CONTINUE;
}

public LoadData(task)
{
new id=task-73718

if(!is_user_connected(id))
return;

g_szSteam[id][0] = '^0'

get_user_authid(id, g_szSteam[id] ,charsmax(g_szSteam))

new Query[256]
static data[1]; data[0]=id
format( Query, 255, "SELECT `%s`, `%s`, `%s` FROM `%s` WHERE `%s` = '%s'", Level, Exp, Point, Table, SteamID, g_szSteam[id] );

SQL_ThreadQueryFormat(SQL_Tuple,"QueryHandler", Query, data, 1 )
}

public Save_Data(id)
{
SQL_ThreadQueryFormatNoData(SQL_Tuple, "IgnoreHandle", "UPDATE `%s` SET `%s` = '%i', `%s` = '%i', `%s` = '%i' WHERE `%s`.`%s` = '%s'", Table, Level, get_lvl(id), Exp, get_exp(id), Point, get_points(id), Table, SteamID, g_szSteam[id] );
}

public client_disconnect(id)
{
if(!equal(g_szSteam[id], "STEAM_ID_LAN") && !equal(g_szSteam[id], "BOT") && !equal(g_szSteam[id], "VALVE_ID_LAN"))
Save_Data(id)
}

public IgnoreHandle(FailState,Handle:Query,Error[],ErrCode,Data[],DataSize)
{
CheckQuery(FailState, ErrCode, Error)

SQL_FreeHandle(Query)

return PLUGIN_HANDLED
}

public plugin_end()
{
if(SQL_Tuple)
SQL_FreeHandle(SQL_Tuple);
}


Отредактировал: iShot, - 22.7.2016, 14:53
Причина: убрал данные от БД.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 21.7.2016, 17:08
Сообщение #8
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Код:
"INSERT INTO `%s` ( `%s`, `%s` , `%s`, `%s`, `%s`, `%s`) VALUES ('%s', '%s', '%s', '5', '0', '0');", Table, Name, SteamID, Ip, Level, Exp, Point, g_szSteam[id] );

У тебя количество аргументов не совпадает с заданным в формате(%s 10 штук, а переменных всего 8)
И в CREATE TABLE ты тоже что-то напутал с аргументами, у тебя там имя это INT NOT NULL
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя soneekk
сообщение 21.7.2016, 18:21
Сообщение #9


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

voed,
помоги добавить ip & name пожалуйста.

делаю вот так:
Код:
format( Query, 255, "INSERT INTO `%s` ( `%s` , `%s`, `%s`, `%s`) VALUES ('%s', '5', '0', '0');", Table, SteamID, Level, Exp, Point, g_szSteam[id] );

всьо работает: steamid, level,exp & points.

хочу добавить ip & name никак не получается:

Код:
format( Query, 255, "INSERT INTO `%s` (`%s` ,  `%s` , `%s` , `%s`, `%s`, `%s`) VALUES (`%s` , '%s', `%s` , '5', '0', '0');", Table,  Name, SteamID, Ip, Level, Exp, Point, g_szSteam[id] );


code
Код:
public QueryHandler(FailState, Handle:Query, Error[], ErrCode, data[], size, Float:querytime)
{
if(!CheckQuery(FailState, ErrCode, Error))
{
SQL_FreeHandle(Query);
return PLUGIN_HANDLED;
}

static id; id = data[0];

new NAME[32], IP[32];
get_user_ip(id, IP, charsmax(IP));
get_user_name(id, NAME, charsmax(NAME));

if(SQL_NumResults(Query) < 1)
{
new ip[16];
get_user_ip(id, ip, charsmax(ip), 1);

new Query[270]
format( Query, 255, "INSERT INTO `%s` ( `%s` , `%s`, `%s`, `%s`) VALUES ('%s', '5', '0', '0');", Table, SteamID, Level, Exp, Point, g_szSteam[id] );
SQL_ThreadQueryFormatNoData(SQL_Tuple, "IgnoreHandle", Query )

set_lvl(id, 5)
set_exp(id, 0)
set_points(id, 0)
}
else
{
set_lvl(id, SQL_ReadResult(Query, 0))
set_exp(id, SQL_ReadResult(Query, 1))
set_points(id, SQL_ReadResult(Query, 2))
}

SQL_FreeHandle(Query);

return PLUGIN_CONTINUE;
}


Отредактировал: soneekk, - 21.7.2016, 18:21
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 21.7.2016, 18:49
Сообщение #10
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Цитата
get_user_name(id, player_name, charsmax(player_name))
get_user_ip(id, player_ip, charsmax(player_ip), 1)
format( Query, 255, "INSERT INTO `%s` (`%s` , `%s` , `%s` , `%s`, `%s`, `%s`) VALUES (`%s` , '%s', `%s` , '5', '0', '0');", Table, Name, SteamID, Ip, Level, Exp, Point, player_name, g_szSteam[id], player_ip );
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя soneekk
сообщение 21.7.2016, 19:46
Сообщение #11


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

voed,

в консоле:
Load Query failed. [1054] Unknown column 'soneekk' in 'field list'

вроде он не может найти где эта вписать да ?

что здесь неправильно ?

code
Код:
#include < amxmodx >
#include < mysql >
#include <sqlx2>
#include <sqlx>

native set_user_level(id, set)
native set_user_exp(id, set)
native set_user_points(id, set)

native get_user_level(id)
native get_user_exp(id)
native get_user_points(id)

#define get_lvl(%1) get_user_level(%1)
#define set_lvl(%1,%2) set_user_level(%1,%2)

#define get_points(%1) get_user_points(%1)
#define set_points(%1,%2) set_user_points(%1,%2)

#define get_exp(%1) get_user_exp(%1)
#define set_exp(%1,%2) set_user_exp(%1,%2)

#define PLUGIN_NAME "Save Ammo & Class zombies"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "Opo4uMapy"

#define LIMIT_AMMO 30000

new const
Host[]= "ip",
User[]= "login",
Pass[]= "password",
Db[]= "login";

new const
Table[] = "JCTF_SAVE",
Name[] = "Name",
SteamID[] = "SteamID",
Ip[] = "IP",
Level[]= "Level",
Exp[]= "Exp",
Point[]= "Points"

new Handle:SQL_Tuple;

new g_szSteam[33][35]

public plugin_init( )
register_plugin ( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR );

public client_putinserver( id )
set_task(5.0, "LoadData", id+73718)

public plugin_cfg()
set_task(1.0, "Load_Debug")

public Load_Debug()
{
new g_Error[512]
SQL_Tuple = SQL_MakeDbTuple(Host, User, Pass, Db);
new ErrorCode,Handle:SqlConnection = SQL_Connect(SQL_Tuple,ErrorCode,g_Error,charsmax(g_Error))

if(SqlConnection == Empty_Handle)
set_fail_state(g_Error)

if(!SQL_TableExists(SqlConnection, Table))
{
new Handle:Queries;
new Query[256]
format( Query, 255, "CREATE TABLE `%s`.`%s` (`%s` INT NOT NULL, `%s` VARCHAR(40) CHARACTER SET cp1250 COLLATE cp1250_general_ci NOT NULL, `%s` INT NOT NULL, `%s` INT NOT NULL, `%s` INT NOT NULL, `%s` INT NOT NULL, PRIMARY KEY (`%s`))", Db, Table, Name, SteamID, Ip, Level, Exp, Point, SteamID);
Queries = SQL_PrepareQuery( SqlConnection, Query )

if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,charsmax(g_Error))
set_fail_state(g_Error);
}

SQL_FreeHandle(Queries)
}

SQL_FreeHandle(SqlConnection)
}

public QueryHandler(FailState, Handle:Query, Error[], ErrCode, data[], size, Float:querytime)
{
if(!CheckQuery(FailState, ErrCode, Error))
{
SQL_FreeHandle(Query);
return PLUGIN_HANDLED;
}

static id; id = data[0];

if(SQL_NumResults(Query) < 1)
{
new player_name[32], player_ip[32]
get_user_name(id, player_name, charsmax(player_name));
get_user_ip(id, player_ip, charsmax(player_ip), 1);

new Query[270]
format( Query, 255, "INSERT INTO `%s` (`%s` , `%s` , `%s` , `%s`, `%s`, `%s`) VALUES (`%s` , '%s', `%s` , '5', '0', '0');", Table, Name, SteamID, Ip, Level, Exp, Point, player_name, g_szSteam[id], player_ip );
SQL_ThreadQueryFormatNoData(SQL_Tuple, "IgnoreHandle", Query )

set_lvl(id, 5)
set_exp(id, 0)
set_points(id, 0)
}
else
{
set_lvl(id, SQL_ReadResult(Query, 0))
set_exp(id, SQL_ReadResult(Query, 1))
set_points(id, SQL_ReadResult(Query, 2))
}

SQL_FreeHandle(Query);

return PLUGIN_CONTINUE;
}

public LoadData(task)
{
new id=task-73718

if(!is_user_connected(id))
return;

g_szSteam[id][0] = '^0'

get_user_authid(id, g_szSteam[id] ,charsmax(g_szSteam))

new Query[256]
static data[1]; data[0]=id
format( Query, 255, "SELECT `%s`, `%s`, `%s` FROM `%s` WHERE `%s` = '%s'", Level, Exp, Point, Table, SteamID, g_szSteam[id] );

SQL_ThreadQueryFormat(SQL_Tuple,"QueryHandler", Query, data, 1 )
}

public Save_Data(id)
{
SQL_ThreadQueryFormatNoData(SQL_Tuple, "IgnoreHandle", "UPDATE `%s` SET `%s` = '%i', `%s` = '%i', `%s` = '%i' WHERE `%s`.`%s` = '%s'", Table, Level, get_lvl(id), Exp, get_exp(id), Point, get_points(id), Table, SteamID, g_szSteam[id] );
}

public client_disconnect(id)
{
if(!equal(g_szSteam[id], "STEAM_ID_LAN") && !equal(g_szSteam[id], "BOT") && !equal(g_szSteam[id], "VALVE_ID_LAN"))
Save_Data(id)
}

public IgnoreHandle(FailState,Handle:Query,Error[],ErrCode,Data[],DataSize)
{
CheckQuery(FailState, ErrCode, Error)

SQL_FreeHandle(Query)

return PLUGIN_HANDLED
}

public plugin_end()
{
if(SQL_Tuple)
SQL_FreeHandle(SQL_Tuple);
}


Отредактировал: iShot, - 22.7.2016, 14:54
Причина: убрал данные от БД.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 21.7.2016, 20:06
Сообщение #12
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

soneekk, кавычки кривые
` != '
Код:
format( Query, 255, "INSERT INTO `%s` (`%s` , `%s` , `%s` , `%s`, `%s`, `%s`) VALUES ('%s' , '%s', '%s' , '5', '0', '0');", Table, Name, SteamID, Ip, Level, Exp, Point, player_name, g_szSteam[id], player_ip );
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя soneekk
сообщение 22.7.2016, 11:13
Сообщение #13


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

сейчас все работает без проблем, здесь можно еще что то улучшить? client_putinserver на set_task, оставить так или же прямо прописать?
.sma
Код:
#include < amxmodx >
#include < mysql >
#include <sqlx2>

native set_user_level(id, set)
native set_user_exp(id, set)
native set_user_points(id, set)

native get_user_level(id)
native get_user_exp(id)
native get_user_points(id)

#define get_lvl(%1) get_user_level(%1)
#define set_lvl(%1,%2) set_user_level(%1,%2)

#define get_points(%1) get_user_points(%1)
#define set_points(%1,%2) set_user_points(%1,%2)

#define get_exp(%1) get_user_exp(%1)
#define set_exp(%1,%2) set_user_exp(%1,%2)

#define PLUGIN_NAME "SQL Save LVL+EXP+POINTS"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "Opo4uMapy, Edit SoNeeKK1"

new const
Host[]= "ip",
User[]= "login",
Pass[]= "password",
Db[]= "login";

new const
Table[] = "JCTF_SAVE",
Name[] = "Name",
SteamID[] = "SteamID",
Ip[] = "IP",
Level[]= "Level",
Exp[]= "Exp",
Point[]= "Points"

new Handle:SQL_Tuple;

new g_szSteam[33][35]

public plugin_init( )
{
register_plugin ( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR );
}

public client_putinserver( id )
{
if(!is_user_bot(id))
{
set_task(5.0, "LoadData", id+73718)
}
}

public plugin_cfg()
{
set_task(1.0, "Load_Debug")
}

public Load_Debug()
{
new g_Error[512]
SQL_Tuple = SQL_MakeDbTuple(Host, User, Pass, Db);
new ErrorCode,Handle:SqlConnection = SQL_Connect(SQL_Tuple,ErrorCode,g_Error,charsmax(g_Error))

if(SqlConnection == Empty_Handle)
set_fail_state(g_Error)

if(!SQL_TableExists(SqlConnection, Table))
{
new Handle:Queries;
new Query[256]
format( Query, 255, "CREATE TABLE `%s`.`%s` (`%s` VARCHAR(40), `%s` VARCHAR(25), `%s` VARCHAR(20), `%s` INT NOT NULL, `%s` INT NOT NULL, `%s` INT NOT NULL, PRIMARY KEY (`%s`))", Db, Table, Name, SteamID, Ip, Level, Exp, Point, SteamID);
Queries = SQL_PrepareQuery( SqlConnection, Query )

if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,charsmax(g_Error))
set_fail_state(g_Error);
}

SQL_FreeHandle(Queries)
}

SQL_FreeHandle(SqlConnection)
}

public QueryHandler(FailState, Handle:Query, Error[], ErrCode, data[], size, Float:querytime)
{
if(!CheckQuery(FailState, ErrCode, Error))
{
SQL_FreeHandle(Query);
return PLUGIN_HANDLED;
}

static id; id = data[0];

new player_name[32], player_ip[32]
get_user_name(id, player_name, charsmax(player_name));
get_user_ip(id, player_ip, charsmax(player_ip), 1);

if(SQL_NumResults(Query) < 1)
{
new Query[270]
format( Query, 255, "INSERT INTO `%s` (`%s` , `%s` , `%s` , `%s`, `%s`, `%s`) VALUES ('%s' , '%s', '%s' , '1', '0', '0');", Table, Name, SteamID, Ip, Level, Exp, Point, player_name, g_szSteam[id], player_ip );
SQL_ThreadQueryFormatNoData(SQL_Tuple, "IgnoreHandle", Query )

set_lvl(id, 1)
set_exp(id, 0)
set_points(id, 0)
}
else
{
set_lvl(id, SQL_ReadResult(Query, 0))
set_exp(id, SQL_ReadResult(Query, 1))
set_points(id, SQL_ReadResult(Query, 2))
}

SQL_FreeHandle(Query);

return PLUGIN_CONTINUE;
}

public LoadData(task)
{
new id=task-73718

if(!is_user_connected(id))
return;

g_szSteam[id][0] = '^0'

get_user_authid(id, g_szSteam[id] ,charsmax(g_szSteam))

new Query[256]
static data[1]; data[0]=id
format( Query, 255, "SELECT `%s`, `%s`, `%s` FROM `%s` WHERE `%s` = '%s'", Level, Exp, Point, Table, SteamID, g_szSteam[id] );

SQL_ThreadQueryFormat(SQL_Tuple,"QueryHandler", Query, data, 1 )
}

public Save_Data(id)
{
SQL_ThreadQueryFormatNoData(SQL_Tuple, "IgnoreHandle", "UPDATE `%s` SET `%s` = '%i', `%s` = '%i', `%s` = '%i' WHERE `%s`.`%s` = '%s'", Table, Level, get_lvl(id), Exp, get_exp(id), Point, get_points(id), Table, SteamID, g_szSteam[id] );
}

public client_disconnect(id)
{
if(!is_user_bot(id))
{
Save_Data(id)
}
}

public IgnoreHandle(FailState,Handle:Query,Error[],ErrCode,Data[],DataSize)
{
CheckQuery(FailState, ErrCode, Error)

SQL_FreeHandle(Query)

return PLUGIN_HANDLED
}

public plugin_end()
{
if(SQL_Tuple)
SQL_FreeHandle(SQL_Tuple);
}


Отредактировал: iShot, - 22.7.2016, 14:42
Причина: убрал данные от БД.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 22.7.2016, 13:45
Сообщение #14
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

soneekk, убери из кода данные от бд и пароль смени smile.gif
Таск пусть будет, только время таска сделай 1 секунду или 0.5
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя soneekk
сообщение 22.7.2016, 13:50
Сообщение #15


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

voed,

Спасибо.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 22.7.2016, 14:49
Сообщение #16


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Зачем нужен task при подключении игрока?

Код:
public client_putinserver( id )
{
if(!is_user_bot(id))
{
set_task(5.0, "LoadData", id+73718)
}
}


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 22.7.2016, 15:09
Сообщение #17


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

set_task следует использовать только в том случаи, когда не знаешь точный момент вызова функции
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 22.7.2016, 15:10
Сообщение #18


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

У себя реализовал вот так:
Код:
public client_putinserver( id )
{
if(!is_user_connected(id))
return;

new szSteam[33]
get_user_authid(id,szSteam,32);

new Query[256]
static data[1]; data[0]=id
format( Query, 255, "SELECT Поле_параметр FROM Таблица WHERE поле_стимИД = '%s'", szSteam );

SQL_ThreadQueryFormat(SQL_Tuple,"QueryHandler", Query, data, 1 )
}


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя soneekk
сообщение 22.7.2016, 15:49
Сообщение #19


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

ssx,

в начальном коде уже был там set task, так и оставил.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя soneekk
сообщение 27.7.2016, 13:38
Сообщение #20


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

ребята всё сохраняется вот кроме одного игрока на него выскакивает логи иво chota база не принимает:
LOGS
Код
Load Query failed. [1064] You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':' , 'STEAM_0:0:29995...', '92.241...' , '1', '0', '0')' at line 1


вроде проблема в nick?

sql.sma
Код:
#include < amxmodx >
#include < mysql >
#include <sqlx2>

native set_user_level(id, set)
native set_user_exp(id, set)
native set_user_points(id, set)

native get_user_level(id)
native get_user_exp(id)
native get_user_points(id)

#define get_lvl(%1) get_user_level(%1)
#define set_lvl(%1,%2) set_user_level(%1,%2)

#define get_points(%1) get_user_points(%1)
#define set_points(%1,%2) set_user_points(%1,%2)

#define get_exp(%1) get_user_exp(%1)
#define set_exp(%1,%2) set_user_exp(%1,%2)

#define PLUGIN_NAME "SQL Save LVL+EXP+POINTS"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "Opo4uMapy, Edit SoNeeKK1"

new const
Host[]= "78.47.196.180",
User[]= "lh5798_csdmlvl",
Pass[]= "chemylesgatexav",
Db[]= "lh5798_csdmlvl";

new const
Table[] = "JCTF_SAVE",
Name[] = "Name",
SteamID[] = "SteamID",
Ip[] = "IP",
Level[]= "Level",
Exp[]= "Exp",
Point[]= "Points"

new Handle:SQL_Tuple;

new g_szSteam[33][35]

public plugin_init( )
{
register_plugin ( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR );
}

public client_putinserver( id )
{
if(!is_user_bot(id))
{
LoadData(id)
}
}

public plugin_cfg()
{
set_task(1.0, "Load_Debug")
}

public Load_Debug()
{
new g_Error[512]
SQL_Tuple = SQL_MakeDbTuple(Host, User, Pass, Db);
new ErrorCode,Handle:SqlConnection = SQL_Connect(SQL_Tuple,ErrorCode,g_Error,charsmax(g_Error))

if(SqlConnection == Empty_Handle)
set_fail_state(g_Error)

if(!SQL_TableExists(SqlConnection, Table))
{
new Handle:Queries;
new Query[256]
format( Query, 255, "CREATE TABLE `%s`.`%s` (`%s` VARCHAR(40), `%s` VARCHAR(25), `%s` VARCHAR(20), `%s` INT NOT NULL, `%s` INT NOT NULL, `%s` INT NOT NULL, PRIMARY KEY (`%s`))", Db, Table, Name, SteamID, Ip, Level, Exp, Point, SteamID);
Queries = SQL_PrepareQuery( SqlConnection, Query )

if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,charsmax(g_Error))
set_fail_state(g_Error);
}

SQL_FreeHandle(Queries)
}

SQL_FreeHandle(SqlConnection)
}

public QueryHandler(FailState, Handle:Query, Error[], ErrCode, data[], size, Float:querytime)
{
if(!CheckQuery(FailState, ErrCode, Error))
{
SQL_FreeHandle(Query);
return PLUGIN_HANDLED;
}

static id; id = data[0];

new player_name[32], player_ip[32]
get_user_name(id, player_name, charsmax(player_name));
get_user_ip(id, player_ip, charsmax(player_ip), 1);

if(SQL_NumResults(Query) < 1)
{
new Query[270]
format( Query, 255, "INSERT INTO `%s` (`%s` , `%s` , `%s` , `%s`, `%s`, `%s`) VALUES ('%s' , '%s', '%s' , '1', '0', '0');", Table, Name, SteamID, Ip, Level, Exp, Point, player_name, g_szSteam[id], player_ip );
SQL_ThreadQueryFormatNoData(SQL_Tuple, "IgnoreHandle", Query )

set_lvl(id, 1)
set_exp(id, 0)
set_points(id, 0)
}
else
{
set_lvl(id, SQL_ReadResult(Query, 0))
set_exp(id, SQL_ReadResult(Query, 1))
set_points(id, SQL_ReadResult(Query, 2))
}

SQL_FreeHandle(Query);

return PLUGIN_CONTINUE;
}

public LoadData(id)
{
if(!is_user_connected(id))
return;

g_szSteam[id][0] = '^0'

get_user_authid(id, g_szSteam[id] ,charsmax(g_szSteam))

new Query[256]
static data[1]; data[0]=id
format( Query, 255, "SELECT `%s`, `%s`, `%s` FROM `%s` WHERE `%s` = '%s'", Level, Exp, Point, Table, SteamID, g_szSteam[id] );

SQL_ThreadQueryFormat(SQL_Tuple,"QueryHandler", Query, data, 1 )
}

public Save_Data(id)
{
SQL_ThreadQueryFormatNoData(SQL_Tuple, "IgnoreHandle", "UPDATE `%s` SET `%s` = '%i', `%s` = '%i', `%s` = '%i' WHERE `%s`.`%s` = '%s'", Table, Level, get_lvl(id), Exp, get_exp(id), Point, get_points(id), Table, SteamID, g_szSteam[id] );
}

public client_disconnect(id)
{
if(!is_user_bot(id))
{
Save_Data(id)
}
}

public IgnoreHandle(FailState,Handle:Query,Error[],ErrCode,Data[],DataSize)
{
CheckQuery(FailState, ErrCode, Error)

SQL_FreeHandle(Query)

return PLUGIN_HANDLED
}

public plugin_end()
{
if(SQL_Tuple)
SQL_FreeHandle(SQL_Tuple);
}


Отредактировал: soneekk, - 27.7.2016, 13:40
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: