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

Сохранение ника  [Решено]

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

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

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

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

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

Сохранение ника

Сообщение Papito » 11 авг 2018, 18:27

Не понимаю из-за чего не сохраняет ник в базу данных. Все данные сохраняет, а ячейка с ником пустая остается...
Код: Выделить всё
#include < amxmodx >
#include < hamsandwich >
#include < cstrike >
#include < sqlx >

enum _:NUMZ{ STARTBY, KILLS, DIES, EXP }
new g_UserName[ 33 ][ 32 ], g_Loaded[ 33 ], g_szSteam[ 33 ][ 40 ], g_Total[ 33 ][ NUMZ ], Handle:SQL_Tuple;
new const 
Host
[ ]= "host",    // Хост
Db[ ]= "vps22808",            // База данных
User[ ]= "vps22808",        // Пользователь
Pass[ ]= "",        // Пароль
Table[ ] = "stats",        // Таблица
AuthRow[ ] = "steam",
MoneyRow[ ]= "user_money";

public plugin_init( )
{
    RegisterHam( Ham_Killed, "player", "fw_HamKilled" );
    set_task( 15.0, "Load_Debug" );
    //register_clcmd( "say /stats", "show_stats" );
}

public fw_HamKilled( id, attacker )
{
    if( !is_user_connected( id ) || !is_user_connected( attacker ) )
    return;
    
    g_Total
[ attacker ][ KILLS ]++;
    g_Total[ attacker ][ EXP ]++;
    g_Total[ id ][ DIES ]++;
}

public Load_Debug( )
{
    static g_Error[ 15 ];
    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 );
    
    SQL_FreeHandle
( SqlConnection );
}
public QueryHandler( FailState, Handle:Query, Error[ ], ErrCode, data[ ], size, Float:querytime )
{
    if( !CheckQuery( FailState, ErrCode, Error ) )
    {
        SQL_FreeHandle( Query );
        return 1;
    }
    
    static id
;
    id = data[ 0 ];
    
    if
( !is_user_connected( id ) )
    return 1;
    
    if
( SQL_NumResults( Query ) < 1 )
    {
        new Query[ 1024 ];
        format( Query, 1023, "INSERT INTO `%s` (`%s`, `%s`) VALUES ('%s', '0');", Table, AuthRow, MoneyRow, g_szSteam[ id ] );
        SQL_ThreadQueryFormatNoData( SQL_Tuple, "IgnoreHandle", Query );
    }
    else
    
{
        cs_set_user_money( id, 0 );
        cs_set_user_money( id, SQL_ReadResult( Query, 0 ) );
        if( equal( g_szSteam[ id ], "STEAM_ID_LAN" ) || equal( g_szSteam[ id ], "VALVE_ID_LAN" ) )
        set_user_money( id, 0 );
    }
    
    SQL_FreeHandle
( Query );
    g_Loaded[ id ] = true;
    return 0;
}

public LoadData( task )
{
    new id = task - 73218 ;
    if( !is_user_connected( id ) )
    return;
    
    g_szSteam
[ id ][ 0 ] = '^0';
    set_user_money( id, 0 );
    get_user_authid( id, g_szSteam[ id ], charsmax( g_szSteam ) );
    g_UserName[ id ][ 0 ] = '^0';
    get_user_name( id, g_UserName[ id ], 31 );
    new Query[ 1024 ];
    static data[ 1 ];
    data[ 0 ] = id;
    format( Query, 255, "SELECT `%s` FROM `%s` WHERE `%s`='%s'", MoneyRow, Table, AuthRow, g_szSteam[ id ] );
    SQL_ThreadQueryFormat( SQL_Tuple, "QueryHandler", Query, data, 1 );
}

public Save_Data( id )
{
    if( !g_Loaded[ id ] )
    return;
    
    static sQuery
[ 4096 ], iLen, iValue;
    iLen = 0;
    new current_time = get_systime( );
    iValue = cs_get_user_money( id );
    iLen += formatex( sQuery[ iLen ], charsmax( sQuery ) - iLen, "UPDATE `%s` SET `%s` = '%i', `kills` = `kills` + %d,", Table, MoneyRow, iValue, g_Total[ id ][ KILLS ] );
    iLen += formatex( sQuery[ iLen ], charsmax( sQuery ) - iLen, "`joined` = %d, `leaved` = %d, `seconline` = `seconline` + %d, `nick` = ^"%s^", `dies` = `dies` + %d, `exp` = `exp` + %d WHERE `%s`.`%s` = '%s'",
    g_Total[ id ][ STARTBY ],
    current_time,
    ( current_time - g_Total[ id ][ STARTBY ] ),
    g_UserName[ id ],
    g_Total[ id ][ DIES ],
    g_Total[ id ][ EXP ],
    Table,
    AuthRow,
    g_szSteam[ id ] );
    SQL_ThreadQueryFormatNoData( SQL_Tuple, "IgnoreHandle", sQuery );
    g_Total[ id ][ KILLS ] = 0;
    g_Total[ id ][ STARTBY ] = 0;
    g_Total[ id ][ DIES ] = 0;
    g_Total[ id ][ EXP ] = 0;
}

public IgnoreHandle( FailState, Handle:Query, Error[ ], ErrCode, Data[ ], DataSize )
{
    CheckQuery( FailState, ErrCode, Error );
    SQL_FreeHandle( Query );
    return 1;
}

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

public client_putinserver( id )
{
    g_Loaded[ id ] = false;
    cs_set_user_money( id, 0 );
    set_task( random_float( 16.0, 19.0 ), "LoadData", id + 73218 );
    g_Total[ id ][ KILLS ] = 0;
    g_Total[ id ][ STARTBY ] = 0;
    g_Total[ id ][ STARTBY ] = get_systime( );
    g_Total[ id ][ DIES ] = 0;
    g_Total[ id ][ EXP ] = 0;
}

public client_disconnect( id )
{
    if( !g_Loaded[ id ] )
    {
        if( task_exists( id + 73218 ) )
        {
            remove_task( id + 73218 );
        }
    }
    
    Save_Data
( id );
}

public set_user_money( id, value )
cs_set_user_money( id, value );

stock bool:CheckQuery( FailState, ErrCode, Error[ ] )
{
    if( FailState == 0 )
    return true;
    
    else if
( FailState ==- 2 )
    log_amx( "Load - Could not connect to SQL database.  [%d] %s", ErrCode, Error );
    
    else if
( FailState ==- 1 )
    log_amx( "Load Query failed. [%d] %s", ErrCode, Error );
    
    return false
;
}

stock SQL_ThreadQueryFormat( Handle:Db_Tuple, const handler[ ], const query[ ], const data[ ] ="", dataSize = 0, any:... )
{
    static szQueryFormat[ 1024 ];
    vformat( szQueryFormat, charsmax( szQueryFormat ), query, 6 );
    return SQL_ThreadQuery( Db_Tuple, handler, szQueryFormat, data, dataSize );
}

stock SQL_ThreadQueryFormatNoData( Handle:Db_Tuple, const handler[ ], const query[ ], any:... )
{
    static szQueryFormat[ 5000 ];
    vformat( szQueryFormat, charsmax( szQueryFormat ), query, 4 );
    return SQL_ThreadQuery( Db_Tuple, handler, szQueryFormat );
}

после выхода с сервера, в mysql сохраняет вот так:
Может кто поможет?
Аватара пользователя
Papito
 
Сообщения: 545
Зарегистрирован: 09 ноя 2012, 16:28
Откуда: Montana
Благодарил (а): 44 раз.
Поблагодарили: 121 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter Strike 1.6
SAMP

Re: Сохранение ника

Сообщение RevCrew » 11 авг 2018, 18:38

Papito, ну так и не охраняешь ник
Код: Выделить всё
 formatQuery1023"INSERT INTO `%s` (`%s`, `%s`) VALUES ('%s', '0');"TableAuthRowMoneyRowg_szSteamid ] ); 

ГДЕ здесь ник?
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Сохранение ника

Сообщение Papito » 11 авг 2018, 18:44

RevCrew писал(а):Papito, ну так и не охраняешь ник
Код: Выделить всё
 format( Query, 1023, "INSERT INTO `%s` (`%s`, `%s`) VALUES ('%s', '0');", Table, AuthRow, MoneyRow, g_szSteam[ id ] ); 

ГДЕ здесь ник?

Так ник сохраняю в пункте
Код: Выделить всё
Save_Data(id
Аватара пользователя
Papito
 
Сообщения: 545
Зарегистрирован: 09 ноя 2012, 16:28
Откуда: Montana
Благодарил (а): 44 раз.
Поблагодарили: 121 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter Strike 1.6
SAMP

Re: Сохранение ника

Сообщение RevCrew » 12 авг 2018, 00:09

Код: Выделить всё
`nick` = ^"%s^" 

>>>
Код: Выделить всё
`nick` = '%s' 
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Сохранение ника

Сообщение Papito » 12 авг 2018, 10:19

RevCrew писал(а):
Код: Выделить всё
`nick` = ^"%s^"

>>>
Код: Выделить всё
`nick` = '%s'

Не-а, та же проблема. :(
Аватара пользователя
Papito
 
Сообщения: 545
Зарегистрирован: 09 ноя 2012, 16:28
Откуда: Montana
Благодарил (а): 44 раз.
Поблагодарили: 121 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter Strike 1.6
SAMP

Re: Сохранение ника

Сообщение RevCrew » 12 авг 2018, 22:30

ну тогда дебаг делайте sql Запроса и поймете в чем ошибка. Еще стоит экранировать ник, а то ошибки в запросе будут
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Сохранение ника

Сообщение Dmitry Beast » 12 авг 2018, 22:59

Papito писал(а):
RevCrew писал(а):
Код: Выделить всё
`nick` = ^"%s^" 

>>>
Код: Выделить всё
`nick` = '%s' 

Не-а, та же проблема. :(

Код: Выделить всё
`nick` = '%s' 

>>>
RevCrew писал(а):
Код: Выделить всё
`nick` = '^"%s^"' 
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: Сохранение ника

Сообщение Papito » 14 авг 2018, 12:08

Dmitry Beast, твой вариант тоже не работает.
Аватара пользователя
Papito
 
Сообщения: 545
Зарегистрирован: 09 ноя 2012, 16:28
Откуда: Montana
Благодарил (а): 44 раз.
Поблагодарили: 121 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter Strike 1.6
SAMP

Re: Сохранение ника

Сообщение RevCrew » 14 авг 2018, 12:25

Papito, и не будет работать пока вы не продебажите что там за запрос выполняется
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Сохранение ника  [Решено]

Сообщение Papito » 15 авг 2018, 11:52

Разобрался сам. Всем спасибо!
Аватара пользователя
Papito
 
Сообщения: 545
Зарегистрирован: 09 ноя 2012, 16:28
Откуда: Montana
Благодарил (а): 44 раз.
Поблагодарили: 121 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter Strike 1.6
SAMP


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

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

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

cron