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

mysql_stats ZP 4.3  [Решено]

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

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

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

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

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

mysql_stats ZP 4.3

Сообщение Максим_SerJanT » 26 фев 2020, 18:49

Помогите пожалуйста. Такая проблема, нашел сайт как вписать в мод лвл систему. Вписал. Скачал плагин для сохранения к нему, вписал туда свои данные, а лвл не сохраняется. В самой БД пустая вкладка save_lvl.
Код: Выделить всё
#include <amxmodx>
#include <sqlx>

native zp_set_user_lvl(id, set)


native zp_get_user_lvl(id)


#define DB_HOST "" //хост
#define DB_USER "" //пользователь
#define DB_PASSWORD "" //пароль
#define DB_NAME "" //имя базы

new Handle:g_hDBHandle, Handle:g_hDBInfo

public plugin_init
() DBConnect()

public client_putinserver(id) load_sql(id)

public client_disconnect(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));
    
    replace
(NAME, 31, "'", "")
    
    new Handle
:hQuery = SQL_PrepareQuery(g_hDBHandle, "SELECT `L` FROM save_lvl 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)
        
        SQL_FreeHandle
(hQuery);
            
        new ip
[16];
        get_user_ip(id, ip, charsmax(ip), 1);
        hQuery = SQL_PrepareQuery(g_hDBHandle, "INSERT INTO `sql_bzshka` (`name`, `steamid`, `ip`, `L` ) VALUES ('%s', '%s', '%s', '%d')", NAME, ID, IP, 1)
        if (!SQL_Execute(hQuery)) 
        
{
            server_print("Error due registering user!");
        }
        SQL_FreeHandle(hQuery)
        
        return
;
    }
    
    natives_call
(id, SQL_ReadResult(hQuery, 0))
    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 `save_lvl` (`name` VARCHAR(35) NOT NULL default '',  `steamid` VARCHAR(25) NOT NULL default '', `ip` VARCHAR(20) NOT NULL default '', `L` 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() 
{
    for (new id = 1; id <= 32; id++) 
    
{
        if(is_user_connected(id) && !is_user_bot(id))
        {
            UpdateDB(id)
        }
    }
    
    SQL_FreeHandle
(g_hDBHandle)
}

stock UpdateDB(id)
{
    
    new NAME
[32]
    get_user_authid(id, NAME, charsmax(NAME));
    
    replace
(NAME, 31, "'", "")
    
    new Handle
:hQuery = SQL_PrepareQuery(g_hDBHandle, "UPDATE `sql_bzshka` SET `L`=%i WHERE `steamid` = '%s'", zp_get_user_lvl(id), NAME)
    
    if 
(!SQL_Execute(hQuery))
    {
        new Error[192];
        SQL_QueryError(hQuery, Error, charsmax(Error));
    }
    SQL_FreeHandle(hQuery);
}

stock natives_call(id, L=1)
{
    zp_set_user_lvl(id, L)
}



Помогите плиз, пытался много чего делать как в исходе так и в БД, ничего(
Аватара пользователя
Максим_SerJanT
 
Сообщения: 75
Зарегистрирован: 16 авг 2017, 01:32
Благодарил (а): 7 раз.
Поблагодарили: 1 раз.

Re: mysql_stats ZP 4.3

Сообщение Fedcomp » 26 фев 2020, 18:55

Зачем вписывать лвл систему в мод, если можно прикрутить ее сбоку на ZP 5.*? Почему вы как с ссаной торбой с этим 4.3 бегаете? Он же монолитное дерьмо.
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 813 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

Re: mysql_stats ZP 4.3

Сообщение Максим_SerJanT » 26 фев 2020, 19:34

НУ помогите пж(
Аватара пользователя
Максим_SerJanT
 
Сообщения: 75
Зарегистрирован: 16 авг 2017, 01:32
Благодарил (а): 7 раз.
Поблагодарили: 1 раз.

Re: mysql_stats ZP 4.3

Сообщение xbass13 » 26 фев 2020, 19:53

sql_bzshka => save_lvl
В остальном вроде все правильно
Аватара пользователя
xbass13
 
Сообщения: 96
Зарегистрирован: 13 июн 2012, 21:20
Благодарил (а): 36 раз.
Поблагодарили: 35 раз.
Опыт программирования: Больше трех лет
Языки программирования: pawn, c++, js, php

Re: mysql_stats ZP 4.3

Сообщение Максим_SerJanT » 26 фев 2020, 21:06

Еще один вопрос, можно как то чтобы в бд сохранялся не только LVL а и EXP
Аватара пользователя
Максим_SerJanT
 
Сообщения: 75
Зарегистрирован: 16 авг 2017, 01:32
Благодарил (а): 7 раз.
Поблагодарили: 1 раз.

Re: mysql_stats ZP 4.3

Сообщение Fedcomp » 26 фев 2020, 22:03

Да
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 813 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

Re: mysql_stats ZP 4.3

Сообщение Максим_SerJanT » 27 фев 2020, 14:24

Не подскажите как, а то слишком сложно(
Аватара пользователя
Максим_SerJanT
 
Сообщения: 75
Зарегистрирован: 16 авг 2017, 01:32
Благодарил (а): 7 раз.
Поблагодарили: 1 раз.

Re: mysql_stats ZP 4.3

Сообщение httpeace// » 27 фев 2020, 15:55

register_native("zp_get_user_exp", "native_get_user_exp", 1)
register_native("zp_set_user_exp", "native_set_user_exp", 1)
скромность украшает, но оставляет голодным
________________________________
Аватара пользователя
httpeace//
 
Сообщения: 179
Зарегистрирован: 01 окт 2013, 14:31
Откуда: Владивосток
Благодарил (а): 51 раз.
Поблагодарили: 15 раз.
Опыт программирования: Больше трех лет
Языки программирования: Lua

Re: mysql_stats ZP 4.3

Сообщение Максим_SerJanT » 27 фев 2020, 16:19

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

native zp_set_user_lvl(idset)
native zp_set_user_exp(idset)
native zp_get_user_exp(id)
native zp_get_user_lvl(id)


#define DB_HOST "" //хост
#define DB_USER "" //пользователь
#define DB_PASSWORD "" //пароль
#define DB_NAME "" //имя базы

new Handle:g_hDBHandleHandle:g_hDBInfo

public plugin_init() DBConnect()

public 
client_putinserver(idload_sql(id)

public 
client_disconnect(idUpdateDB(id)

public 
load_sql(id)
{
    new 
ID[32], NAME[32], IP[32]
    
get_user_authid(idIDcharsmax(ID));
    
get_user_ip(idIPcharsmax(IP));
    
get_user_name(idNAMEcharsmax(NAME));
    
    
replace(NAME31"'""")
    
    new 
Handle:hQuery SQL_PrepareQuery(g_hDBHandle"SELECT `L` `E` FROM save_lvl1 WHERE steamid = '%s'"ID);
        
    if (!
SQL_Execute(hQuery)) 
    {
        new 
Error[192];
        
SQL_QueryError(hQueryErrorcharsmax(Error))
        
set_fail_state(Error)
        
SQL_FreeHandle(hQuery)
        return;
    }
        
    if (!
SQL_NumResults(hQuery)) 
    {
        
natives_call(id)
        
        
SQL_FreeHandle(hQuery);
            
        new 
ip[16];
        
get_user_ip(idipcharsmax(ip), 1);
        
hQuery SQL_PrepareQuery(g_hDBHandle"INSERT INTO `save_lvl1` (`name`, `steamid`, `ip`, `L`, `E`) VALUES ('%s', '%s', '%s', '%d', '%d')"NAMEIDIP1)
        if (!
SQL_Execute(hQuery)) 
        {
            
server_print("Error due registering user!");
        }
        
SQL_FreeHandle(hQuery)
        
        return;
    }
    
    
natives_call(idSQL_ReadResult(hQuery0))
    
SQL_FreeHandle(hQuery);
}

DBConnect()
{
    new 
Error[128], errno;
    
g_hDBInfo SQL_MakeDbTuple(DB_HOSTDB_USERDB_PASSWORDDB_NAME)
    
g_hDBHandle SQL_Connect(g_hDBInfoerrnoErrorcharsmax(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 `save_lvl1` (`name` VARCHAR(35) NOT NULL default '',  `steamid` VARCHAR(25) NOT NULL default '', `ip` VARCHAR(20) NOT NULL default '', `L` INT(6) NOT NULL), `E` 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() 
{
    for (new 
id 1id <= 32id++) 
    {
        if(
is_user_connected(id) && !is_user_bot(id))
        {
            
UpdateDB(id)
        }
    }
    
    
SQL_FreeHandle(g_hDBHandle)
}

stock UpdateDB(id)
{    
    new 
NAME[32]
    
get_user_authid(idNAMEcharsmax(NAME));
    
    
replace(NAME31"'""")
    
    new 
Handle:hQuery SQL_PrepareQuery(g_hDBHandle"UPDATE `save_lvl1` SET `L`=%i WHERE SET `E`=%i WHERE SET `steamid` = '%s'"zp_get_user_lvl(id), native zp_get_user_exp(id), NAME)
    
    if (!
SQL_Execute(hQuery))
    {
        new 
Error[192];
        
SQL_QueryError(hQueryErrorcharsmax(Error));
    }
    
SQL_FreeHandle(hQuery);
}

stock natives_call(idL=1)
{
    
zp_set_user_lvl(idL)
}
stock natives_call(idE=0)
{
    
zp_set_user_exp(idE)
}

 


Что то типо выставил EXP на Е, оно не хочет компилить
Аватара пользователя
Максим_SerJanT
 
Сообщения: 75
Зарегистрирован: 16 авг 2017, 01:32
Благодарил (а): 7 раз.
Поблагодарили: 1 раз.

Re: mysql_stats ZP 4.3

Сообщение xbass13 » 27 фев 2020, 16:55

Запросы неправильные
"SELECT `L` `E` FROM save_lvl1 WHERE
Запятую между `L` `E`

INSERT INTO `save_lvl1` (`name`, `steamid`, `ip`, `L`, `E`) VALUES ('%s', '%s', '%s', '%d', '%d')", NAME, ID, IP, 1)
Конец должен быть такой: NAME, ID, IP, 1, 0)

natives_call должен быть в одном экземпляре, не может быть две одинаковых функции с одинаковым количеством параметров.
Код: Выделить всё

stock natives_call
(id, L=1, E=)
{
    zp_set_user_lvl(id, L)
    zp_set_user_exp(id, E)
}
 


Там, где select 'l', 'e'
Код: Выделить всё
natives_call(id, SQL_ReadResult(hQuery, 0))

Заменить на
Код: Выделить всё
natives_call(id, SQL_ReadResult(hQuery, 0), SQL_ReadResult(hQuery, 1))



Код: Выделить всё
new Handle:hQuery = SQL_PrepareQuery(g_hDBHandle, "UPDATE `save_lvl1` SET `L`=%i WHERE SET `E`=%i WHERE SET `steamid` = '%s'", zp_get_user_lvl(id), native zp_get_user_exp(id), NAME)

Это безобразие должно выглядить так:
Код: Выделить всё
new Handle:hQuery = SQL_PrepareQuery(g_hDBHandle, "UPDATE `save_lvl1` SET `L`=%i, `E`=%i WHERE `steamid` = '%s'", zp_get_user_lvl(id), zp_get_user_exp(id), NAME)


все запросы к бд синхронные, сервер будет ожидать результатов запроса => фризы в зависимости от удаленности/загруженности БД
Последний раз редактировалось xbass13 27 фев 2020, 17:02, всего редактировалось 2 раз(а).
Аватара пользователя
xbass13
 
Сообщения: 96
Зарегистрирован: 13 июн 2012, 21:20
Благодарил (а): 36 раз.
Поблагодарили: 35 раз.
Опыт программирования: Больше трех лет
Языки программирования: pawn, c++, js, php

След.

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

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

Сейчас этот форум просматривают: Bing [Bot], Yandex [Bot] и гости: 11