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

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

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

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

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

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

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

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

Zp - Проблема с аммо-банком, крашит сервер

Статус пользователя ifx
сообщение 22.2.2016, 20:18
Сообщение #1


Стаж: 10 лет

Сообщений: 250
Благодарностей: 137
Полезность: 798

Ребята, привет!

У меня на зомби сервере ZP 4.3 стоит вот такой плагин - https://forums.alliedmods.net/showthread.php?t=240152
Сохраняет аммопаки в банк через бд и подгружает их соотв тоже. Перебопровабовал все возможные банки которые работают с mysql и этот пожалуй лучший, который сохраняет и при падении сервера и при выходе\коннекте игрока, все вроде *** если бы не одно НО - он крашит сервер черт знает как.

Вот лог:
Цитата
[AMXX] Run time error 1: forced exit
[AMXX] [1] zp_yaab.sma::plugin_init (line 47)
[AMXX] [0] zp_yaab.sma::MySql_Init (line 65)



Вот код плагина
код
Код
//-----------------DEFINES--------------------------------------
//--Comment out ZP50 if you're using zp50 base plugins. Commend out ZPA is using Zombie Plague Advanced.
//--Keep the both commented it you're using ZP4.3
//#define ZP50
//#define ZPA
//--Comment out USINGAUTHID if you want to save with authid, else saving by name(default)
#define USINGAUTHID
//--------------------------------------------------------------


#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#if defined ZP50
    #include <zp50_ammopacks>
#else
    #if defined ZPA
        #include <zombie_plague_advance>
    #else
        #include <zombieplague>
    #endif
#endif

#define DB_NONE 0
#define DB_CONNECTING 1
#define DB_READY 2
#define TASK_BANK 78956

new Handle:Conexiune = Empty_Handle
new Handle:SqlConnection
new g_Error[512], g_db_status
new Host[64], User[64], Pass[64], Db[64]
new authid[33][32]
public plugin_init()
{
    register_plugin("[ZP] Yet Another Ammo Bank", "1.2", "EDUTz")
    new configsDi[64], configfile[128]
    get_configsdir(configsDi, 63)    
    format(configfile, 127, "%s/sql.cfg", configsDi)
    if(file_exists(configfile))
    {
        server_cmd("exec %s", configfile)
    }
    else log_amx("[AMXX] zp_yaab.amxx : sql.cfg not found in the config folder.")
    register_cvar("yaab", "EDUTz", (FCVAR_SERVER|FCVAR_SPONLY));
    g_db_status = DB_NONE
    MySql_Init()
}

public MySql_Init()
{
    if(g_db_status == DB_CONNECTING)
        return
    g_db_status = DB_CONNECTING
    new ErrorCode
    
    get_cvar_string("amx_sql_host", Host, 63)
    get_cvar_string("amx_sql_user", User, 63)
    get_cvar_string("amx_sql_pass", Pass, 63)
    get_cvar_string("amx_sql_db", Db, 63)
    
    Conexiune = SQL_MakeDbTuple(Host,User,Pass,Db)
    SqlConnection = SQL_Connect(Conexiune,ErrorCode,g_Error,charsmax(g_Error))
    if(SqlConnection == Empty_Handle)
        set_fail_state(g_Error)
    new Handle:Queries
    Queries = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS zombie_ammo_bank (user varchar(32),ammo INT(11))")
    if(!SQL_Execute(Queries))
    {
        SQL_QueryError(Queries,g_Error,charsmax(g_Error))
        set_fail_state(g_Error)
        g_db_status = DB_NONE
    }
    else g_db_status = DB_READY
    SQL_FreeHandle(Queries)
    SQL_FreeHandle(SqlConnection)  
}

public client_putinserver(id)
{
    get_user_authid(id, authid[id], 31);
    Load_MySql(id)
    set_task(60.0, "SaveAmmobank", id+TASK_BANK, _, _, "b")
}

public plugin_end()
{
    if(g_db_status == DB_READY)
    SQL_FreeHandle(Conexiune)
}

public client_disconnect(id)
{
    if(Conexiune != Empty_Handle)
        Save_MySql(id);
    remove_task(id+TASK_BANK)
}

public Load_MySql(id)
{
    if(g_db_status != DB_READY)
    return
    
    new Data[1], szTemp[512]
    Data[0] = id
    #if defined USINGAUTHID
    format(szTemp,charsmax(szTemp),"SELECT * FROM zombie_ammo_bank WHERE zombie_ammo_bank.user = ^"%s^";", authid[id])
    #else
    new szName[32]
    get_user_name(id, szName, charsmax(szName))
    format(szTemp,charsmax(szTemp),"SELECT * FROM zombie_ammo_bank WHERE zombie_ammo_bank.user = ^"%s^";", szName)
    #endif
    SQL_ThreadQuery(Conexiune,"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, szTemp[512]
    id = Data[0]
    
    if(SQL_NumResults(Query) < 1)
    {
        #if defined USINGAUTHID
        format(szTemp,charsmax(szTemp),"INSERT INTO zombie_ammo_bank ( user , ammo )VALUES (^"%s^", %i);", authid[id], get_cvar_num("zp_starting_ammo_packs") )
        #else
        new szName[32]
        get_user_name(id, szName, charsmax(szName))
        format(szTemp,charsmax(szTemp),"INSERT INTO zombie_ammo_bank ( user , ammo )VALUES (^"%s^", %i);", szName, get_cvar_num("zp_starting_ammo_packs") )
        #endif
        SQL_ThreadQuery(Conexiune,"IgnoreHandle",szTemp)    
    }
    else
    {
        #if defined ZP50
        zp_ammopacks_set(id, SQL_ReadResult(Query, 1))
        #else
        zp_set_user_ammo_packs(id, SQL_ReadResult(Query, 1))    
        #endif
    }
    return PLUGIN_HANDLED
}


public SaveAmmobank(id)
{
    id -= TASK_BANK
    if(!is_user_connected(id))
    return
    if(g_db_status != DB_READY)
    return
    #if defined ZP50
    new packs = zp_ammopacks_get(id)
    #else
    new packs = zp_get_user_ammo_packs(id)
    #endif
    new szTemp[512]
    if ( packs > get_cvar_num("zp_starting_ammo_packs") )
    {
        #if defined USINGAUTHID
        format(szTemp,charsmax(szTemp),"UPDATE zombie_ammo_bank SET ammo = %i WHERE zombie_ammo_bank.user = ^"%s^";", packs, authid[id])
        #else
        new szName[32]
        get_user_name(id, szName, charsmax(szName))
        format(szTemp,charsmax(szTemp),"UPDATE zombie_ammo_bank SET ammo = %i WHERE zombie_ammo_bank.user = ^"%s^";", packs, szName)
        #endif
        SQL_ThreadQuery(Conexiune,"IgnoreHandle",szTemp)
    }
}

public IgnoreHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    SQL_FreeHandle(Query)
    return PLUGIN_HANDLED
}

public Save_MySql(id)
{
    if(!is_user_connected(id))
    return
    if(g_db_status != DB_READY)
    return
    #if defined ZP50
    new packs = zp_ammopacks_get(id)
    #else
    new packs = zp_get_user_ammo_packs(id)
    #endif
    new szTemp[512]
    if ( packs > get_cvar_num("zp_starting_ammo_packs") )
    {
        #if defined USINGAUTHID
        format(szTemp,charsmax(szTemp),"UPDATE zombie_ammo_bank SET ammo = %i WHERE zombie_ammo_bank.user = ^"%s^";",packs, authid[id])
        #else
        new szNume[32]
        get_user_name(id, szNume, charsmax(szNume))
        format(szTemp,charsmax(szTemp),"UPDATE zombie_ammo_bank SET ammo = %i WHERE zombie_ammo_bank.user = ^"%s^";",packs, szNume)
        #endif
        SQL_ThreadQuery(Conexiune,"IgnoreHandle",szTemp)
    }
}


Как я понимаю где-то при коннекте к БД идет сбой и все падает нахрен. Есть кто разбирается, может подсказать куда копать?
Автор плагина на оленях не был 3 месяца, помощи оттуда ждать бестолку.

Отредактировал: meloman, - 22.2.2016, 21:30
Причина: Выдано устное предупреждение!


держать паблик сервер кс 1.6 экономически не выгодно
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя ifx
сообщение 22.2.2016, 20:53
Сообщение #2


Стаж: 10 лет

Сообщений: 250
Благодарностей: 137
Полезность: 798

блин, к сожалению не хватает сообщений, дабы отредактировать пост, пишу ниже.

моя конфа: amx 1.8.2, metamod 1.21-p37, zp 4.3
если есть кто может поправить этот плагин или переписать на основе этого за деньги - дайте контакты человека, пожалуйста.


держать паблик сервер кс 1.6 экономически не выгодно
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: