Jump to content
  • 0
Sign in to follow this  
Theboost

Problème pour remettre les protos en SQL

Question

Version des Files / Type d’Émulateur : Files 2016 Saejin

Domaine ( Base de Données, Client, Core, Sources... ) : Sources

Niveau : Débutant, Intermédiaire ou Avancé ? Intermédiaire

 

1. Description du dysfonctionnement / Question :

 

Bonjour, après avoir suivi le tutoriel pour passer ses protos en SQL, je reçois plusieurs erreurs concernant le code qui a été placé dans mon fichier. J'ai déjà essayé de suivre les instructions données par la machine mais ça n'a pas été efficace.

 

Tutoriel utilisé

 

funky-emu.net/topic/19323-c-remettre-les-protos-en-sql/?tab=comments#comment-211014

 

2. SysErr ( Client / Server ) / SysLog ( Server )

 

Révélation

Voir screenshot

 

3. Comment le reproduire ?

 

En compilant.

 

4. Screenshots ?

 

Révélation

90nb.bmp

 

J'affirme avoir lu et accepté le règlement de Funky Émulation

Edited by Theboost (see edit history)

Share this post


Link to post

7 answers to this question

Recommended Posts

  • 0
Guest

Tu pourrais nous envoyer ton fichier ? Ça serait beaucoup plus simple pour voir ! 

Share this post


Link to post
  • 0
// vim:ts=4 sw=4
#include <map>
#include "stdafx.h"
#include "ClientManager.h"
#include "Main.h"
#include "Monarch.h"
#include "CsvReader.h"
#include "ProtoReader.h"

using namespace std;

extern int g_test_server;
extern std::string g_stLocaleNameColumn;

bool CClientManager::InitializeTables()
{
    if (!InitializeMobTable())
    {
        sys_err("InitializeMobTable FAILED");
        return false;
    }
    if (!MirrorMobTableIntoDB())
    {
        sys_err("MirrorMobTableIntoDB FAILED");
        return false; 
    }

    if (!InitializeItemTable())
    {
        sys_err("InitializeItemTable FAILED");
        return false; 
    }

    if (!MirrorItemTableIntoDB())
    {
        sys_err("MirrorItemTableIntoDB FAILED");
        return false; 
    }

    if (!InitializeShopTable())
    {
        sys_err("InitializeShopTable FAILED");
        return false;
    }

    if (!InitializeSkillTable())
    {
        sys_err("InitializeSkillTable FAILED");
        return false;
    }

    if (!InitializeRefineTable())
    {
        sys_err("InitializeRefineTable FAILED");
        return false;
    }

    if (!InitializeItemAttrTable())
    {
        sys_err("InitializeItemAttrTable FAILED");
        return false;
    }

    if (!InitializeItemRareTable())
    {
        sys_err("InitializeItemRareTable FAILED");
        return false;
    }

    if (!InitializeBanwordTable())
    {
        sys_err("InitializeBanwordTable FAILED");
        return false;
    }

    if (!InitializeLandTable())
    {
        sys_err("InitializeLandTable FAILED");
        return false;
    }

    if (!InitializeObjectProto())
    {
        sys_err("InitializeObjectProto FAILED");
        return false;
    }

    if (!InitializeObjectTable())
    {
        sys_err("InitializeObjectTable FAILED");
        return false;
    }

    if (!InitializeMonarch())
    {
        sys_err("InitializeMonarch FAILED");
        return false;
    }


    return true;
}

bool CClientManager::InitializeRefineTable()
{
    char query[2048];

    snprintf(query, sizeof(query),
            "SELECT id, cost, prob, vnum0, count0, vnum1, count1, vnum2, count2,  vnum3, count3, vnum4, count4 FROM refine_proto%s",
            GetTablePostfix());

    std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    SQLResult * pRes = pkMsg->Get();

    if (!pRes->uiNumRows)
        return true;

    if (m_pRefineTable)
    {
        sys_log(0, "RELOAD: refine_proto");
        delete [] m_pRefineTable;
        m_pRefineTable = NULL;
    }

    m_iRefineTableSize = pRes->uiNumRows;

    m_pRefineTable    = new TRefineTable[m_iRefineTableSize];
    memset(m_pRefineTable, 0, sizeof(TRefineTable) * m_iRefineTableSize);

    TRefineTable* prt = m_pRefineTable;
    MYSQL_ROW data;

    while ((data = mysql_fetch_row(pRes->pSQLResult)))
    {
        //const char* s_szQuery = "SELECT src_vnum, result_vnum, cost, prob, "
        //"vnum0, count0, vnum1, count1, vnum2, count2,  vnum3, count3, vnum4, count4 "

        int col = 0;
        //prt->src_vnum = atoi(data[col++]);
        //prt->result_vnum = atoi(data[col++]);
        str_to_number(prt->id, data[col++]);
        str_to_number(prt->cost, data[col++]);
        str_to_number(prt->prob, data[col++]);

        for (int i = 0; i < REFINE_MATERIAL_MAX_NUM; i++)
        {
            str_to_number(prt->materials.vnum, data[col++]);
            str_to_number(prt->materials.count, data[col++]);
            if (prt->materials.vnum == 0)
            {
                prt->material_count = i;
                break;
            }
        }

        sys_log(0, "REFINE: id %ld cost %d prob %d mat1 %lu cnt1 %d", prt->id, prt->cost, prt->prob, prt->materials[0].vnum, prt->materials[0].count);

        prt++;
    }
    return true;
}

class FCompareVnum
{
    public:
        bool operator () (const TEntityTable & a, const TEntityTable & b) const
        {
            return (a.dwVnum < b.dwVnum);
        }
};

bool CClientManager::InitializeMobTable()
{
    char query[2048];
    fprintf(stderr,"Loading mob_proto from MySQL ");
    snprintf(query, sizeof(query),
            "SELECT vnum,name,%s,rank,type,battle_type,level,size,ai_flag,setRaceFlag,setImmuneFlag,"
"empire,folder,on_click,st,dx,ht,iq,damage_min,damage_max,max_hp,regen_cycle,regen_percent,gold_min,"
"gold_max,exp,def,attack_speed,move_speed,aggressive_hp_pct,aggressive_sight,attack_range,drop_item,"
"resurrection_vnum,enchant_curse,enchant_slow,enchant_poison,enchant_stun,enchant_critical,enchant_penetrate,"
"resist_sword,resist_twohand,resist_dagger,resist_bell,resist_fan,resist_bow,resist_fire,resist_elect,"
"resist_magic,resist_wind,resist_poison,dam_multiply,summon,drain_sp,polymorph_item,skill_level0,"
"skill_vnum0,skill_level1,skill_vnum1,sp_berserk,sp_stoneskin,sp_godspeed,sp_deathblow,sp_revive,skill_level2,"
"skill_vnum2,skill_level3,skill_vnum3,skill_level4,skill_vnum4 FROM mob_proto%s"
,g_stLocaleNameColumn.c_str(),
            GetTablePostfix());

    std::auto_ptr pkMsg(CDBManager::instance().DirectQuery(query));
    SQLResult * pRes = pkMsg->Get();

    if (!pRes->uiNumRows)
        return false;

    if (!m_vec_mobTable.empty())
    {
        sys_log(0, "RELOAD: mob_proto");
        m_vec_mobTable.clear();
    }
    int size = pRes->uiNumRows;
    m_vec_mobTable.resize(size);
    memset(&m_vec_mobTable[0], 0, sizeof(TMobTable) * m_vec_mobTable.size());
    TMobTable * mob_table = &m_vec_mobTable[0];
   
    MYSQL_ROW data;
    //return true;
    set vnumSet;
    while ((data = mysql_fetch_row(pRes->pSQLResult)))
    {
       
        /*
        "SELECT vnum,name,locale_name,rank,type,battle_type,level,size,ai_flag,mount_capacity,setRaceFlag,setImmuneFlag,"
"empire,folder,on_click,st,dx,ht,iq,damage_min,damage_max,max_hp,regen_cycle,regen_percent,gold_min,"
"gold_max,exp,def,attack_speed,move_speed,aggressive_hp_pct,aggressive_sight,attack_range,drop_item,"
"resurrection_vnum,enchant_curse,enchant_slow,enchant_poison,enchant_stun,enchant_critical,enchant_penetrate,"
"resist_sword,resist_twohand,resist_dagger,resist_bell,resist_fan,resist_bow,resist_fire,resist_elect,"
"resist_magic,resist_wind,resist_poison,dam_multiply,summon,drain_sp,mob_color,polymorph_item,skill_level0,"
"skill_vnum0,skill_level1,skill_vnum1,sp_berserk,sp_stoneskin,sp_godspeed,sp_deathblow,sp_revive,skill_level2,"
"skill_vnum2,skill_level3,skill_vnum3,skill_level4,skill_vnum4 FROM mob_proto%s */
        int col = 0;
        str_to_number(mob_table->dwVnum, data[col++]);
        if(mob_table->dwVnum ==0) continue;
        strlcpy(mob_table->szName,data[col++] , sizeof(mob_table->szName));
        strlcpy(mob_table->szLocaleName, data[col++], sizeof(mob_table->szLocaleName));
        str_to_number(mob_table->bRank,data[col++]);
        str_to_number(mob_table->bType,data[col++]);
        str_to_number(mob_table->bBattleType,data[col++]);
        str_to_number(mob_table->bLevel,data[col++]);
        str_to_number(mob_table->bSize,data[col++]);
        //AI_FLAG
        mob_table->dwAIFlag = get_Mob_AIFlag_Value(data[col++]);
        //mount_capacity;
        //col++;
        //RACE_FLAG
        mob_table->dwRaceFlag = get_Mob_RaceFlag_Value(data[col++]);
        //IMMUNE_FLAG
        mob_table->dwImmuneFlag = get_Mob_ImmuneFlag_Value(data[col++]);
        mob_table->bEmpire = atoi(data[col++]);
        strlcpy(mob_table->szFolder, data[col++], sizeof(mob_table->szFolder));
        mob_table->bOnClickType = atoi(data[col++]);
        mob_table->bStr = atoi(data[col++]);
        mob_table->bDex = atoi(data[col++]);
        mob_table->bCon = atoi(data[col++]);
        mob_table->bInt = atoi(data[col++]);
        mob_table->dwDamageRange[0] = atoi(data[col++]);
        mob_table->dwDamageRange[1] = atoi(data[col++]);
        mob_table->dwMaxHP = atoi(data[col++]);
        mob_table->bRegenCycle = atoi(data[col++]);
        mob_table->bRegenPercent = atoi(data[col++]);
        mob_table->dwGoldMin = atoi(data[col++]);
        mob_table->dwGoldMax = atoi(data[col++]);
        mob_table->dwExp = atoi(data[col++]);
        mob_table->wDef = atoi(data[col++]);
        mob_table->sAttackSpeed = atoi(data[col++]);
        mob_table->sMovingSpeed = atoi(data[col++]);
        mob_table->bAggresiveHPPct = atoi(data[col++]);
        mob_table->wAggressiveSight = atoi(data[col++]);
        mob_table->wAttackRange = atoi(data[col++]);    
        str_to_number(mob_table->dwDropItemVnum, data[col++]);    //32
        str_to_number(mob_table->dwResurrectionVnum, data[col++]);
        for (int i = 0; i < MOB_ENCHANTS_MAX_NUM; ++i)
            str_to_number(mob_table->cEnchants, data[col++]);

        for (int i = 0; i < MOB_RESISTS_MAX_NUM; ++i)
            str_to_number(mob_table->cResists, data[col++]);

        str_to_number(mob_table->fDamMultiply, data[col++]);
        str_to_number(mob_table->dwSummonVnum, data[col++]);
        str_to_number(mob_table->dwDrainSP, data[col++]);

        //Mob_Color
        //++col;

        str_to_number(mob_table->dwPolymorphItemVnum, data[col++]);

        str_to_number(mob_table->Skills[0].bLevel, data[col++]);
        str_to_number(mob_table->Skills[0].dwVnum, data[col++]);
        str_to_number(mob_table->Skills[1].bLevel, data[col++]);
        str_to_number(mob_table->Skills[1].dwVnum, data[col++]);
        str_to_number(mob_table->Skills[2].bLevel, data[col++]);
        str_to_number(mob_table->Skills[2].dwVnum, data[col++]);
        str_to_number(mob_table->Skills[3].bLevel, data[col++]);
        str_to_number(mob_table->Skills[3].dwVnum, data[col++]);
        str_to_number(mob_table->Skills[4].bLevel, data[col++]);
        str_to_number(mob_table->Skills[4].dwVnum, data[col++]);

        str_to_number(mob_table->bBerserkPoint, data[col++]);
        str_to_number(mob_table->bStoneSkinPoint, data[col++]);
        str_to_number(mob_table->bGodSpeedPoint, data[col++]);
        str_to_number(mob_table->bDeathBlowPoint, data[col++]);
        str_to_number(mob_table->bRevivePoint, data[col++]);

        //?A?ˇ vnum ?ß°ˇ
        vnumSet.insert(mob_table->dwVnum);
       
       
        //fprintf(stderr, "MOB #%d %s %s level: %u rank: %u empire: %d\n", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire);
        sys_log(0, "MOB #%-5d %-24s %-24s level: %-3u rank: %u empire: %d", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire);
        ++mob_table;
    }
    fprintf(stderr," Complete! %d/%d Mobs loaded.\r\n",size,vnumSet.size());
    sort(m_vec_mobTable.begin(), m_vec_mobTable.end(), FCompareVnum());
    return true;

} 

bool CClientManager::InitializeShopTable()
{
MYSQL_ROW    data;
int        col;

static const char * s_szQuery = 
    "SELECT "
    "shop.vnum, "
    "shop.npc_vnum, "
    "shop_item.item_vnum, "
    "shop_item.count "
    "FROM shop LEFT JOIN shop_item "
    "ON shop.vnum = shop_item.shop_vnum ORDER BY shop.vnum, shop_item.item_vnum";

std::auto_ptr pkMsg2(CDBManager::instance().DirectQuery(s_szQuery));

// shop의 vnum은 있는데 shop_item 이 없을경우... 실패로 처리되니 주의 요망.
// 고처야할부분
SQLResult * pRes2 = pkMsg2->Get();

if (!pRes2->uiNumRows)
{
    sys_err("InitializeShopTable : Table count is zero.");
    return false;
}

std::map map_shop;

if (m_pShopTable)
{
    delete [] (m_pShopTable);
    m_pShopTable = NULL;
}

TShopTable * shop_table = m_pShopTable;

while ((data = mysql_fetch_row(pRes2->pSQLResult)))
{
    col = 0;

    int iShopVnum = 0;
    str_to_number(iShopVnum, data[col++]);

    if (map_shop.end() == map_shop.find(iShopVnum))
    {
        shop_table = new TShopTable;
        memset(shop_table, 0, sizeof(TShopTable));
        shop_table->dwVnum    = iShopVnum;

        map_shop[iShopVnum] = shop_table;
    }
    else
        shop_table = map_shop[iShopVnum];

    str_to_number(shop_table->dwNPCVnum, data[col++]);

    if (!data[col])    // 아이템이 하나도 없으면 NULL이 리턴 되므로..
        continue;

    TShopItemTable * pItem = &shop_table->items[shop_table->byItemCount];

    str_to_number(pItem->vnum, data[col++]);
    str_to_number(pItem->count, data[col++]);

    ++shop_table->byItemCount;
}

m_pShopTable = new TShopTable[map_shop.size()];
m_iShopTableSize = map_shop.size();

typeof(map_shop.begin()) it = map_shop.begin();

int i = 0;

while (it != map_shop.end())
{
    thecore_memcpy((m_pShopTable + i), (it++)->second, sizeof(TShopTable));
    sys_log(0, "SHOP: #%d items: %d", (m_pShopTable + i)->dwVnum, (m_pShopTable + i)->byItemCount);
    ++i;
}

return true;
}

bool CClientManager::InitializeQuestItemTable()
{
using namespace std;

static const char * s_szQuery = "SELECT vnum, name, %s FROM quest_item_proto ORDER BY vnum";

char query[1024];
snprintf(query, sizeof(query), s_szQuery, g_stLocaleNameColumn.c_str());

std::auto_ptr pkMsg(CDBManager::instance().DirectQuery(query));
SQLResult * pRes = pkMsg->Get();

if (!pRes->uiNumRows)
{
    sys_err("query error or no rows: %s", query);
    return false;
}

MYSQL_ROW row;

while ((row = mysql_fetch_row(pRes->pSQLResult)))
{
    int col = 0;

    TItemTable tbl;
    memset(&tbl, 0, sizeof(tbl));

    str_to_number(tbl.dwVnum, row[col++]);

    if (row[col])
        strlcpy(tbl.szName, row[col], sizeof(tbl.szName));

    col++;

    if (row[col])
        strlcpy(tbl.szLocaleName, row[col], sizeof(tbl.szLocaleName));

    col++;

    if (m_map_itemTableByVnum.find(tbl.dwVnum) != m_map_itemTableByVnum.end())
    {
        sys_err("QUEST_ITEM_ERROR! %lu vnum already exist! (name %s)", tbl.dwVnum, tbl.szLocaleName);
        continue;
    }

    tbl.bType = ITEM_QUEST; // quest_item_proto 테이블에 있는 것들은 모두 ITEM_QUEST 유형
    tbl.bSize = 1;

    m_vec_itemTable.push_back(tbl);
}

return true;
}

bool CClientManager::InitializeItemTable()
    {
            char query[2048];
            fprintf(stderr,"Loading item_proto from MySQL");
            snprintf(query, sizeof(query),
            "SELECT vnum,name,%s,type,subtype,weight,size,antiflag,flag,wearflag,immuneflag+0,gold,shop_buy_price,refined_vnum,"
            "refine_set,magic_pct,limittype0,limitvalue0,limittype1,limitvalue1,applytype0,applyvalue0,"
            "applytype1,applyvalue1,applytype2,applyvalue2,value0,value1,value2,value3,value4,value5,socket_pct,addon_type FROM item_proto%s  ORDER BY vnum",
            g_stLocaleNameColumn.c_str(),
            GetTablePostfix());

                        std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
            SQLResult * pRes = pkMsg->Get();

            if (!pRes->uiNumRows)
                    return false;
            int addNumber = pRes->uiNumRows;
            if (!m_vec_itemTable.empty())
            {
                    sys_log(0, "RELOAD: item_proto");
                    m_vec_itemTable.clear();
                    m_map_itemTableByVnum.clear();
            }

            m_vec_itemTable.resize(addNumber-1);
            memset(&m_vec_itemTable[0], 0, sizeof(TItemTable) * m_vec_itemTable.size());
            TItemTable * item_table = &m_vec_itemTable[0];

            MYSQL_ROW data;
            //return true;
            set<int> vnumSet;
            while ((data = mysql_fetch_row(pRes->pSQLResult)))
            {
                    str_to_number(item_table->dwVnum, data[0]);
                    strlcpy(item_table->szName,data[1] , sizeof(item_table->szName));
                    strlcpy(item_table->szLocaleName, data[2], sizeof(item_table->szLocaleName));
                    str_to_number(item_table->bType, data[3]);
                    str_to_number(item_table->bSubType, data[4]);
                    str_to_number(item_table->bWeight, data[5]);
                    str_to_number(item_table->bSize, data[6]);
                    str_to_number(item_table->dwAntiFlags, data[7]);
                    str_to_number(item_table->dwFlags, data[8]);
                    str_to_number(item_table->dwWearFlags, data[9]);
                    str_to_number(item_table->dwImmuneFlag, data[10]);
                    str_to_number(item_table->dwGold, data[11]);
                    str_to_number(item_table->dwShopBuyPrice, data[12]);
                    str_to_number(item_table->dwRefinedVnum, data[13]);
                    str_to_number(item_table->wRefineSet, data[14]);
                    str_to_number(item_table->bAlterToMagicItemPct, data[15]);
                    item_table->cLimitRealTimeFirstUseIndex = -1;
                    item_table->cLimitTimerBasedOnWearIndex = -1;

                    str_to_number(item_table->aLimits[0].bType, data[16]);
                    str_to_number(item_table->aLimits[0].lValue, data[17]);
                    if (LIMIT_REAL_TIME_START_FIRST_USE == item_table->aLimits[0].bType)
                            item_table->cLimitRealTimeFirstUseIndex = (char)0;
                    if (LIMIT_TIMER_BASED_ON_WEAR == item_table->aLimits[0].bType)
                            item_table->cLimitTimerBasedOnWearIndex = (char)0;

                    str_to_number(item_table->aLimits[1].bType, data[18]);
                    str_to_number(item_table->aLimits[1].lValue, data[19]);
                    if (LIMIT_REAL_TIME_START_FIRST_USE == item_table->aLimits[1].bType)
                            item_table->cLimitRealTimeFirstUseIndex = (char)1;
                    if (LIMIT_TIMER_BASED_ON_WEAR == item_table->aLimits[1].bType)
                            item_table->cLimitTimerBasedOnWearIndex = (char)1;


                    str_to_number(item_table->aApplies[0].bType, data[20]);
                    str_to_number(item_table->aApplies[0].lValue, data[21]);

                    str_to_number(item_table->aApplies[1].bType, data[22]);
                    str_to_number(item_table->aApplies[1].lValue, data[23]);

                    str_to_number(item_table->aApplies[2].bType, data[24]);
                    str_to_number(item_table->aApplies[2].lValue, data[25]);


                    str_to_number(item_table->alValues[0], data[26]);
                    str_to_number(item_table->alValues[1], data[27]);
                    str_to_number(item_table->alValues[2], data[28]);
                    str_to_number(item_table->alValues[3], data[29]);
                    str_to_number(item_table->alValues[4], data[30]);
            str_to_number(item_table->alValues[5], data[31]);

                    str_to_number(item_table->bGainSocketPct, data[32]);
                    str_to_number(item_table->sAddonType, data[33]);


                    vnumSet.insert(item_table->dwVnum);
                    m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table));
                                //         test_map_mobTableByVnum.insert(std::map<DWORD, TMobTable *>::value_type(test_mob_table->dwVnum, test_mob_table));
                    sys_log(0, "ITEM: #%-5lu %-24s %-24s VAL: %d %ld %d %d %d %d WEAR %d ANTI %d IMMUNE %d REFINE %lu REFINE_SET %u MAGIC_PCT %u",
                                    item_table->dwVnum,
                                    item_table->szName,
                                    item_table->szLocaleName,
                                    item_table->alValues[0],
                                    item_table->alValues[1],
                                    item_table->alValues[2],
                                    item_table->alValues[3],
                                    item_table->alValues[4],
                                    item_table->alValues[5],
                                    item_table->dwWearFlags,
                                    item_table->dwAntiFlags,
                                    item_table->dwImmuneFlag,
                                    item_table->dwRefinedVnum,
                                    item_table->wRefineSet,
                                    item_table->bAlterToMagicItemPct);

                    item_table++;
            }
            fprintf(stderr,"Complete LOAD ITEM ! %d Items loaded.\r\n",addNumber);
            return true;

}

bool CClientManager::InitializeItemAttrTable()
{
    char query[4096];
    snprintf(query, sizeof(query),
            "SELECT apply, apply+0, prob, lv1, lv2, lv3, lv4, lv5, weapon, body, wrist, foots, neck, head, shield, ear FROM item_attr%s ORDER BY apply",
            GetTablePostfix());

    std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    SQLResult * pRes = pkMsg->Get();

    if (!pRes->uiNumRows)
    {
        sys_err("no result from item_attr");
        return false;
    }

    if (!m_vec_itemAttrTable.empty())
    {
        sys_log(0, "RELOAD: item_attr");
        m_vec_itemAttrTable.clear();
    }

    m_vec_itemAttrTable.reserve(pRes->uiNumRows);

    MYSQL_ROW    data;

    while ((data = mysql_fetch_row(pRes->pSQLResult)))
    {
        TItemAttrTable t;

        memset(&t, 0, sizeof(TItemAttrTable));

        int col = 0;

        strlcpy(t.szApply, data[col++], sizeof(t.szApply));
        str_to_number(t.dwApplyIndex, data[col++]);
        str_to_number(t.dwProb, data[col++]);
        str_to_number(t.lValues[0], data[col++]);
        str_to_number(t.lValues[1], data[col++]);
        str_to_number(t.lValues[2], data[col++]);
        str_to_number(t.lValues[3], data[col++]);
        str_to_number(t.lValues[4], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_BODY], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_NECK], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_EAR], data[col++]);

        sys_log(0, "ITEM_ATTR: %-20s %4lu { %3d %3d %3d %3d %3d } { %d %d %d %d %d %d %d }",
                t.szApply,
                t.dwProb,
                t.lValues[0],
                t.lValues[1],
                t.lValues[2],
                t.lValues[3],
                t.lValues[4],
                t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON],
                t.bMaxLevelBySet[ATTRIBUTE_SET_BODY],
                t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST],
                t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS],
                t.bMaxLevelBySet[ATTRIBUTE_SET_NECK],
                t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD],
                t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD],
                t.bMaxLevelBySet[ATTRIBUTE_SET_EAR]);

        m_vec_itemAttrTable.push_back(t);
    }

    return true;
}

bool CClientManager::InitializeItemRareTable()
{
    char query[4096];
    snprintf(query, sizeof(query),
            "SELECT apply, apply+0, prob, lv1, lv2, lv3, lv4, lv5, weapon, body, wrist, foots, neck, head, shield, ear FROM item_attr_rare%s ORDER BY apply",
            GetTablePostfix());

    std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    SQLResult * pRes = pkMsg->Get();

    if (!pRes->uiNumRows)
    {
        sys_err("no result from item_attr_rare");
        return false;
    }

    if (!m_vec_itemRareTable.empty())
    {
        sys_log(0, "RELOAD: item_attr_rare");
        m_vec_itemRareTable.clear();
    }

    m_vec_itemRareTable.reserve(pRes->uiNumRows);

    MYSQL_ROW    data;

    while ((data = mysql_fetch_row(pRes->pSQLResult)))
    {
        TItemAttrTable t;

        memset(&t, 0, sizeof(TItemAttrTable));

        int col = 0;

        strlcpy(t.szApply, data[col++], sizeof(t.szApply));
        str_to_number(t.dwApplyIndex, data[col++]);
        str_to_number(t.dwProb, data[col++]);
        str_to_number(t.lValues[0], data[col++]);
        str_to_number(t.lValues[1], data[col++]);
        str_to_number(t.lValues[2], data[col++]);
        str_to_number(t.lValues[3], data[col++]);
        str_to_number(t.lValues[4], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_BODY], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_NECK], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD], data[col++]);
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_EAR], data[col++]);

        sys_log(0, "ITEM_RARE: %-20s %4lu { %3d %3d %3d %3d %3d } { %d %d %d %d %d %d %d }",
                t.szApply,
                t.dwProb,
                t.lValues[0],
                t.lValues[1],
                t.lValues[2],
                t.lValues[3],
                t.lValues[4],
                t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON],
                t.bMaxLevelBySet[ATTRIBUTE_SET_BODY],
                t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST],
                t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS],
                t.bMaxLevelBySet[ATTRIBUTE_SET_NECK],
                t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD],
                t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD],
                t.bMaxLevelBySet[ATTRIBUTE_SET_EAR]);

        m_vec_itemRareTable.push_back(t);
    }

    return true;
}

bool CClientManager::InitializeLandTable()
{
    using namespace building;

    char query[4096];

    snprintf(query, sizeof(query),
        "SELECT id, map_index, x, y, width, height, guild_id, guild_level_limit, price "
        "FROM land%s WHERE enable='YES' ORDER BY id",
        GetTablePostfix());

    std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    SQLResult * pRes = pkMsg->Get();

    if (!m_vec_kLandTable.empty())
    {
        sys_log(0, "RELOAD: land");
        m_vec_kLandTable.clear();
    }

    m_vec_kLandTable.reserve(pRes->uiNumRows);

    MYSQL_ROW    data;

    if (pRes->uiNumRows > 0)
        while ((data = mysql_fetch_row(pRes->pSQLResult)))
        {
            TLand t;

            memset(&t, 0, sizeof(t));

            int col = 0;

            str_to_number(t.dwID, data[col++]);
            str_to_number(t.lMapIndex, data[col++]);
            str_to_number(t.x, data[col++]);
            str_to_number(t.y, data[col++]);
            str_to_number(t.width, data[col++]);
            str_to_number(t.height, data[col++]);
            str_to_number(t.dwGuildID, data[col++]);
            str_to_number(t.bGuildLevelLimit, data[col++]);
            str_to_number(t.dwPrice, data[col++]);

            sys_log(0, "LAND: %lu map %-4ld %7ldx%-7ld w %-4ld h %-4ld", t.dwID, t.lMapIndex, t.x, t.y, t.width, t.height);

            m_vec_kLandTable.push_back(t);
        }

    return true;
}

void parse_pair_number_string(const char * c_pszString, std::vector<std::pair<int, int> > & vec)
{
    // format: 10,1/20,3/300,50
    const char * t = c_pszString;
    const char * p = strchr(t, '/');
    std::pair<int, int> k;

    char szNum[32 + 1];
    char * comma;

    while (p)
    {
        if (isnhdigit(*t))
        {
            strlcpy(szNum, t, MIN(sizeof(szNum), (p-t)+1));

            comma = strchr(szNum, ',');

            if (comma)
            {
                *comma = '\0';
                str_to_number(k.second, comma+1);
            }
            else
                k.second = 0;

            str_to_number(k.first, szNum);
            vec.push_back(k);
        }

        t = p + 1;
        p = strchr(t, '/');
    }

    if (isnhdigit(*t))
    {
        strlcpy(szNum, t, sizeof(szNum));

        comma = strchr(const_cast<char*>(t), ',');

        if (comma)
        {
            *comma = '\0';
            str_to_number(k.second, comma+1);
        }
        else
            k.second = 0;

        str_to_number(k.first, szNum);
        vec.push_back(k);
    }
}

bool CClientManager::InitializeObjectProto()
{
    using namespace building;

    char query[4096];
    snprintf(query, sizeof(query),
            "SELECT vnum, price, materials, upgrade_vnum, upgrade_limit_time, life, reg_1, reg_2, reg_3, reg_4, npc, group_vnum, dependent_group "
            "FROM object_proto%s ORDER BY vnum",
            GetTablePostfix());

    std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    SQLResult * pRes = pkMsg->Get();

    if (!m_vec_kObjectProto.empty())
    {
        sys_log(0, "RELOAD: object_proto");
        m_vec_kObjectProto.clear();
    }

    m_vec_kObjectProto.reserve(MAX(0, pRes->uiNumRows));

    MYSQL_ROW    data;

    if (pRes->uiNumRows > 0)
        while ((data = mysql_fetch_row(pRes->pSQLResult)))
        {
            TObjectProto t;

            memset(&t, 0, sizeof(t));

            int col = 0;

            str_to_number(t.dwVnum, data[col++]);
            str_to_number(t.dwPrice, data[col++]);

            std::vector<std::pair<int, int> > vec;
            parse_pair_number_string(data[col++], vec);

            for (unsigned int i = 0; i < OBJECT_MATERIAL_MAX_NUM && i < vec.size(); ++i)
            {
                std::pair<int, int> & r = vec;

                t.kMaterials.dwItemVnum = r.first;
                t.kMaterials.dwCount = r.second;
            }

            str_to_number(t.dwUpgradeVnum, data[col++]);
            str_to_number(t.dwUpgradeLimitTime, data[col++]);
            str_to_number(t.lLife, data[col++]);
            str_to_number(t.lRegion[0], data[col++]);
            str_to_number(t.lRegion[1], data[col++]);
            str_to_number(t.lRegion[2], data[col++]);
            str_to_number(t.lRegion[3], data[col++]);

            // ADD_BUILDING_NPC
            str_to_number(t.dwNPCVnum, data[col++]);
            str_to_number(t.dwGroupVnum, data[col++]);
            str_to_number(t.dwDependOnGroupVnum, data[col++]);

            t.lNPCX = 0;
            t.lNPCY = MAX(t.lRegion[1], t.lRegion[3])+300;
            // END_OF_ADD_BUILDING_NPC

            sys_log(0, "OBJ_PROTO: vnum %lu price %lu mat %lu %lu",
                    t.dwVnum, t.dwPrice, t.kMaterials[0].dwItemVnum, t.kMaterials[0].dwCount);

            m_vec_kObjectProto.push_back(t);
        }

    return true;
}

bool CClientManager::InitializeObjectTable()
{
    using namespace building;

    char query[4096];
    snprintf(query, sizeof(query), "SELECT id, land_id, vnum, map_index, x, y, x_rot, y_rot, z_rot, life FROM object%s ORDER BY id", GetTablePostfix());

    std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    SQLResult * pRes = pkMsg->Get();

    if (!m_map_pkObjectTable.empty())
    {
        sys_log(0, "RELOAD: object");
        m_map_pkObjectTable.clear();
    }

    MYSQL_ROW data;

    if (pRes->uiNumRows > 0)
        while ((data = mysql_fetch_row(pRes->pSQLResult)))
        {
            TObject * k = new TObject;

            memset(k, 0, sizeof(TObject));

            int col = 0;

            str_to_number(k->dwID, data[col++]);
            str_to_number(k->dwLandID, data[col++]);
            str_to_number(k->dwVnum, data[col++]);
            str_to_number(k->lMapIndex, data[col++]);
            str_to_number(k->x, data[col++]);
            str_to_number(k->y, data[col++]);
            str_to_number(k->xRot, data[col++]);
            str_to_number(k->yRot, data[col++]);
            str_to_number(k->zRot, data[col++]);
            str_to_number(k->lLife, data[col++]);

            sys_log(0, "OBJ: %lu vnum %lu map %-4ld %7ldx%-7ld life %ld", 
                    k->dwID, k->dwVnum, k->lMapIndex, k->x, k->y, k->lLife);

            m_map_pkObjectTable.insert(std::make_pair(k->dwID, k));
        }

    return true;
}

bool CClientManager::InitializeMonarch()
{
    CMonarch::instance().LoadMonarch();

    return true;
}

bool CClientManager::MirrorMobTableIntoDB()
{
    for (itertype(m_vec_mobTable) it = m_vec_mobTable.begin(); it != m_vec_mobTable.end(); it++)
    {
        const TMobTable& t = *it;
        char query[4096];
        if (g_stLocaleNameColumn == "name")
        {
            snprintf(query, sizeof(query),
                "replace into mob_proto%s "
                "("
                "vnum, name, type, rank, battle_type, level, size, ai_flag, setRaceFlag, setImmuneFlag, "
                "on_click, empire, drop_item, resurrection_vnum, folder, "
                "st, dx, ht, iq, damage_min, damage_max, max_hp, regen_cycle, regen_percent, exp, "
                "gold_min, gold_max, def, attack_speed, move_speed, aggressive_hp_pct, aggressive_sight, attack_range, polymorph_item, "

                "enchant_curse, enchant_slow, enchant_poison, enchant_stun, enchant_critical, enchant_penetrate, "
                "resist_sword, resist_twohand, resist_dagger, resist_bell, resist_fan, resist_bow, "
                "resist_fire, resist_elect, resist_magic, resist_wind, resist_poison, "
                "dam_multiply, summon, drain_sp, "

                "skill_vnum0, skill_level0, skill_vnum1, skill_level1, skill_vnum2, skill_level2, "
                "skill_vnum3, skill_level3, skill_vnum4, skill_level4, "
                "sp_berserk, sp_stoneskin, sp_godspeed, sp_deathblow, sp_revive"
                ") "
                "values ("

                "%d, \"%s\", %d, %d, %d, %d, %d, %u, %u, %u, " 
                "%d, %d, %d, %d, '%s', "
                "%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, "
                "%d, %d, %d, %d, %d, %d, %d, %d, %d, "

                "%d, %d, %d, %d, %d, %d, "
                "%d, %d, %d, %d, %d, %d, "
                "%d, %d, %d, %d, %d, "
                "%f, %d, %d, "

                "%d, %d, %d, %d, %d, %d, "
                "%d, %d, %d, %d, "
                "%d, %d, %d, %d, %d"
                ")",
                GetTablePostfix(), /*g_stLocaleNameColumn.c_str(),*/

                t.dwVnum, t.szName, /*t.szLocaleName, */t.bType, t.bRank, t.bBattleType, t.bLevel, t.bSize, t.dwAIFlag, t.dwRaceFlag, t.dwImmuneFlag,
                t.bOnClickType, t.bEmpire, t.dwDropItemVnum, t.dwResurrectionVnum, t.szFolder,
                t.bStr, t.bDex, t.bCon, t.bInt, t.dwDamageRange[0], t.dwDamageRange[1], t.dwMaxHP, t.bRegenCycle, t.bRegenPercent, t.dwExp,

                t.dwGoldMin, t.dwGoldMax, t.wDef, t.sAttackSpeed, t.sMovingSpeed, t.bAggresiveHPPct, t.wAggressiveSight, t.wAttackRange, t.dwPolymorphItemVnum,
                t.cEnchants[0], t.cEnchants[1], t.cEnchants[2], t.cEnchants[3], t.cEnchants[4], t.cEnchants[5],
                t.cResists[0], t.cResists[1], t.cResists[2], t.cResists[3], t.cResists[4], t.cResists[5],
                t.cResists[6], t.cResists[7], t.cResists[8], t.cResists[9], t.cResists[10], 
                t.fDamMultiply, t.dwSummonVnum, t.dwDrainSP, 

                t.Skills[0].dwVnum, t.Skills[0].bLevel, t.Skills[1].dwVnum, t.Skills[1].bLevel, t.Skills[2].dwVnum, t.Skills[2].bLevel, 
                t.Skills[3].dwVnum, t.Skills[3].bLevel, t.Skills[4].dwVnum, t.Skills[4].bLevel, 
                t.bBerserkPoint, t.bStoneSkinPoint, t.bGodSpeedPoint, t.bDeathBlowPoint, t.bRevivePoint
                );
        }
        else
        {
            snprintf(query, sizeof(query),
                "replace into mob_proto%s "
                "("
                "vnum, name, %s, type, rank, battle_type, level, size, ai_flag, setRaceFlag, setImmuneFlag, "
                "on_click, empire, drop_item, resurrection_vnum, folder, "
                "st, dx, ht, iq, damage_min, damage_max, max_hp, regen_cycle, regen_percent, exp, "
                "gold_min, gold_max, def, attack_speed, move_speed, aggressive_hp_pct, aggressive_sight, attack_range, polymorph_item, "

                "enchant_curse, enchant_slow, enchant_poison, enchant_stun, enchant_critical, enchant_penetrate, "
                "resist_sword, resist_twohand, resist_dagger, resist_bell, resist_fan, resist_bow, "
                "resist_fire, resist_elect, resist_magic, resist_wind, resist_poison, "
                "dam_multiply, summon, drain_sp, "

                "skill_vnum0, skill_level0, skill_vnum1, skill_level1, skill_vnum2, skill_level2, "
                "skill_vnum3, skill_level3, skill_vnum4, skill_level4, "
                "sp_berserk, sp_stoneskin, sp_godspeed, sp_deathblow, sp_revive"
                ") "
                "values ("

                "%d, \"%s\", \"%s\", %d, %d, %d, %d, %d, %u, %u, %u, " 
                "%d, %d, %d, %d, '%s', "
                "%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, "
                "%d, %d, %d, %d, %d, %d, %d, %d, %d, "

                "%d, %d, %d, %d, %d, %d, "
                "%d, %d, %d, %d, %d, %d, "
                "%d, %d, %d, %d, %d, "
                "%f, %d, %d, "

                "%d, %d, %d, %d, %d, %d, "
                "%d, %d, %d, %d, "
                "%d, %d, %d, %d, %d"
                ")",
                GetTablePostfix(), g_stLocaleNameColumn.c_str(),

                t.dwVnum, t.szName, t.szLocaleName, t.bType, t.bRank, t.bBattleType, t.bLevel, t.bSize, t.dwAIFlag, t.dwRaceFlag, t.dwImmuneFlag,
                t.bOnClickType, t.bEmpire, t.dwDropItemVnum, t.dwResurrectionVnum, t.szFolder,
                t.bStr, t.bDex, t.bCon, t.bInt, t.dwDamageRange[0], t.dwDamageRange[1], t.dwMaxHP, t.bRegenCycle, t.bRegenPercent, t.dwExp,

                t.dwGoldMin, t.dwGoldMax, t.wDef, t.sAttackSpeed, t.sMovingSpeed, t.bAggresiveHPPct, t.wAggressiveSight, t.wAttackRange, t.dwPolymorphItemVnum,
                t.cEnchants[0], t.cEnchants[1], t.cEnchants[2], t.cEnchants[3], t.cEnchants[4], t.cEnchants[5],
                t.cResists[0], t.cResists[1], t.cResists[2], t.cResists[3], t.cResists[4], t.cResists[5],
                t.cResists[6], t.cResists[7], t.cResists[8], t.cResists[9], t.cResists[10], 
                t.fDamMultiply, t.dwSummonVnum, t.dwDrainSP, 

                t.Skills[0].dwVnum, t.Skills[0].bLevel, t.Skills[1].dwVnum, t.Skills[1].bLevel, t.Skills[2].dwVnum, t.Skills[2].bLevel, 
                t.Skills[3].dwVnum, t.Skills[3].bLevel, t.Skills[4].dwVnum, t.Skills[4].bLevel, 
                t.bBerserkPoint, t.bStoneSkinPoint, t.bGodSpeedPoint, t.bDeathBlowPoint, t.bRevivePoint
                );
        }

        CDBManager::instance().AsyncQuery(query);
    }
    return true;
}

bool CClientManager::MirrorItemTableIntoDB()
{
    for (itertype(m_vec_itemTable) it = m_vec_itemTable.begin(); it != m_vec_itemTable.end(); it++)
    {
        if (g_stLocaleNameColumn != "name")
        {
            const TItemTable& t = *it;
            char query[4096];
            snprintf(query, sizeof(query),
                "replace into item_proto%s ("
                "vnum, type, subtype, name, %s, gold, shop_buy_price, weight, size, "
                "flag, wearflag, antiflag, immuneflag, "
                "refined_vnum, refine_set, magic_pct, socket_pct, addon_type, "
                "limittype0, limitvalue0, limittype1, limitvalue1, "
                "applytype0, applyvalue0, applytype1, applyvalue1, applytype2, applyvalue2, "
                "value0, value1, value2, value3, value4, value5 ) "
                "values ("
                "%d, %d, %d, \"%s\", \"%s\", %d, %d, %d, %d, "
                "%d, %d, %d, %d, "
                "%d, %d, %d, %d, %d, "
                "%d, %ld, %d, %ld, "
                "%d, %ld, %d, %ld, %d, %ld, "
                "%ld, %ld, %ld, %ld, %ld, %ld )",
                GetTablePostfix(), g_stLocaleNameColumn.c_str(), 
                t.dwVnum, t.bType, t.bSubType, t.szName, t.szLocaleName, t.dwGold, t.dwShopBuyPrice, t.bWeight, t.bSize,
                t.dwFlags, t.dwWearFlags, t.dwAntiFlags, t.dwImmuneFlag, 
                t.dwRefinedVnum, t.wRefineSet, t.bAlterToMagicItemPct, t.bGainSocketPct, t.sAddonType,
                t.aLimits[0].bType, t.aLimits[0].lValue, t.aLimits[1].bType, t.aLimits[1].lValue,
                t.aApplies[0].bType, t.aApplies[0].lValue, t.aApplies[1].bType, t.aApplies[1].lValue, t.aApplies[2].bType, t.aApplies[2].lValue,
                t.alValues[0], t.alValues[1], t.alValues[2], t.alValues[3], t.alValues[4], t.alValues[5]);
            CDBManager::instance().AsyncQuery(query);
        }
        else
        {
            const TItemTable& t = *it;
            char query[4096];
            snprintf(query, sizeof(query),
                "replace into item_proto%s ("
                "vnum, type, subtype, name, gold, shop_buy_price, weight, size, "
                "flag, wearflag, antiflag, immuneflag, "
                "refined_vnum, refine_set, magic_pct, socket_pct, addon_type, "
                "limittype0, limitvalue0, limittype1, limitvalue1, "
                "applytype0, applyvalue0, applytype1, applyvalue1, applytype2, applyvalue2, "
                "value0, value1, value2, value3, value4, value5 ) "
                "values ("
                "%d, %d, %d, \"%s\", %d, %d, %d, %d, "
                "%d, %d, %d, %d, "
                "%d, %d, %d, %d, %d, "
                "%d, %ld, %d, %ld, "
                "%d, %ld, %d, %ld, %d, %ld, "
                "%ld, %ld, %ld, %ld, %ld, %ld )",
                GetTablePostfix(), 
                t.dwVnum, t.bType, t.bSubType, t.szName, t.dwGold, t.dwShopBuyPrice, t.bWeight, t.bSize,
                t.dwFlags, t.dwWearFlags, t.dwAntiFlags, t.dwImmuneFlag, 
                t.dwRefinedVnum, t.wRefineSet, t.bAlterToMagicItemPct, t.bGainSocketPct, t.sAddonType,
                t.aLimits[0].bType, t.aLimits[0].lValue, t.aLimits[1].bType, t.aLimits[1].lValue,
                t.aApplies[0].bType, t.aApplies[0].lValue, t.aApplies[1].bType, t.aApplies[1].lValue, t.aApplies[2].bType, t.aApplies[2].lValue,
                t.alValues[0], t.alValues[1], t.alValues[2], t.alValues[3], t.alValues[4], t.alValues[5]);
            CDBManager::instance().AsyncQuery(query);
        }
    }
    return true;
}

 

Le voici.

Je tiens à préciser que j'ai utilisé les deux codes fournis par @Mandrilux

Share this post


Link to post
  • 0

Merci, je cherchais justement cette fonctionnalité quand j'ai placé mon code, mais j'arrivais pas à la trouver^^

Share this post


Link to post
  • 0

Tu semble avoir des erreurs dans le "mobload" , hors je n'ai pas publié de code pour mob proto Donc non ce n'est pas moi qui est fourni le code que tu as.

j'ai publié uniquement item proto.

 

déja à la ligne 188 remplace  

 std::auto_ptr pkMsg(CDBManager::instance().DirectQuery(query));

par 
 

    std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));

Les autres erreurs semble etre la meme chose , le template "sqlMSg qui n'est pas déclaré

Share this post


Link to post
  • 0

J'avais utilisé le code que tu avais partagé auparavant pour les files 2014 FE, dans lequel il y avait 3 bool de comprise, dont le mob_proto. Je viens de remplacer ce code par l'initial et tous les problèmes concernant les 3 bool ont disparues. 

Merci beaucoup pour ton code, après l'avoir essayé, il a réussi à régler le problème spécifique à la ligne 188.

Pour le problème du vnumSet, il m'a suffit d'ajouter <int> pour régler le problème dans le code du mob_proto. 

 

Problème résolu, je laisse le code opérationnel ci-dessous en espérant que le tutoriel soit adapté.

 

Code mob_proto :

bool CClientManager::InitializeMobTable()
{
char query[2048];
fprintf(stderr,"Loading mob_proto from MySQL ");
snprintf(query, sizeof(query),
		"SELECT vnum,name,%s,rank,type,battle_type,level,size,ai_flag,mount_capacity,setRaceFlag,setImmuneFlag,"
"empire,folder,on_click,st,dx,ht,iq,damage_min,damage_max,max_hp,regen_cycle,regen_percent,gold_min,"
"gold_max,exp,def,attack_speed,move_speed,aggressive_hp_pct,aggressive_sight,attack_range,drop_item,"
"resurrection_vnum,enchant_curse,enchant_slow,enchant_poison,enchant_stun,enchant_critical,enchant_penetrate,"
"resist_sword,resist_twohand,resist_dagger,resist_bell,resist_fan,resist_bow,resist_fire,resist_elect,"
"resist_magic,resist_wind,resist_poison,dam_multiply,summon,drain_sp,mob_color,polymorph_item,skill_level0,"
"skill_vnum0,skill_level1,skill_vnum1,sp_berserk,sp_stoneskin,sp_godspeed,sp_deathblow,sp_revive,skill_level2,"
"skill_vnum2,skill_level3,skill_vnum3,skill_level4,skill_vnum4 FROM mob_proto%s"
,g_stLocaleNameColumn.c_str(),
		GetTablePostfix());

std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
SQLResult * pRes = pkMsg->Get();

if (!pRes->uiNumRows)
	return false;

if (!m_vec_mobTable.empty())
{
	sys_log(0, "RELOAD: mob_proto");
	m_vec_mobTable.clear();
}
int size = pRes->uiNumRows;
m_vec_mobTable.resize(size);
memset(&m_vec_mobTable[0], 0, sizeof(TMobTable) * m_vec_mobTable.size());
TMobTable * mob_table = &m_vec_mobTable[0];

MYSQL_ROW data;
//return true;
set <int>vnumSet;
while ((data = mysql_fetch_row(pRes->pSQLResult)))
{

	/*
	"SELECT vnum,name,locale_name,rank,type,battle_type,level,size,ai_flag,mount_capacity,setRaceFlag,setImmuneFlag,"
"empire,folder,on_click,st,dx,ht,iq,damage_min,damage_max,max_hp,regen_cycle,regen_percent,gold_min,"
"gold_max,exp,def,attack_speed,move_speed,aggressive_hp_pct,aggressive_sight,attack_range,drop_item,"
"resurrection_vnum,enchant_curse,enchant_slow,enchant_poison,enchant_stun,enchant_critical,enchant_penetrate,"
"resist_sword,resist_twohand,resist_dagger,resist_bell,resist_fan,resist_bow,resist_fire,resist_elect,"
"resist_magic,resist_wind,resist_poison,dam_multiply,summon,drain_sp,mob_color,polymorph_item,skill_level0,"
"skill_vnum0,skill_level1,skill_vnum1,sp_berserk,sp_stoneskin,sp_godspeed,sp_deathblow,sp_revive,skill_level2,"
"skill_vnum2,skill_level3,skill_vnum3,skill_level4,skill_vnum4 FROM mob_proto%s */
	int col = 0;
	str_to_number(mob_table->dwVnum, data[col++]);
	if(mob_table->dwVnum ==0) continue;
	strlcpy(mob_table->szName,data[col++] , sizeof(mob_table->szName));
	strlcpy(mob_table->szLocaleName, data[col++], sizeof(mob_table->szLocaleName));
	str_to_number(mob_table->bRank,data[col++]);
	str_to_number(mob_table->bType,data[col++]);
	str_to_number(mob_table->bBattleType,data[col++]);
	str_to_number(mob_table->bLevel,data[col++]);
	str_to_number(mob_table->bSize,data[col++]);
	//AI_FLAG
	mob_table->dwAIFlag = get_Mob_AIFlag_Value(data[col++]);
	//mount_capacity;
	col++;
	//RACE_FLAG
	mob_table->dwRaceFlag = get_Mob_RaceFlag_Value(data[col++]);
	//IMMUNE_FLAG
	mob_table->dwImmuneFlag = get_Mob_ImmuneFlag_Value(data[col++]);
	mob_table->bEmpire = atoi(data[col++]);
	strlcpy(mob_table->szFolder, data[col++], sizeof(mob_table->szFolder));
	mob_table->bOnClickType = atoi(data[col++]);
	mob_table->bStr = atoi(data[col++]);
	mob_table->bDex = atoi(data[col++]);
	mob_table->bCon = atoi(data[col++]);
	mob_table->bInt = atoi(data[col++]);
	mob_table->dwDamageRange[0] = atoi(data[col++]);
	mob_table->dwDamageRange[1] = atoi(data[col++]);
	mob_table->dwMaxHP = atoi(data[col++]);
	mob_table->bRegenCycle = atoi(data[col++]);
	mob_table->bRegenPercent = atoi(data[col++]);
	mob_table->dwGoldMin = atoi(data[col++]);
	mob_table->dwGoldMax = atoi(data[col++]);
	mob_table->dwExp = atoi(data[col++]);
	mob_table->wDef = atoi(data[col++]);
	mob_table->sAttackSpeed = atoi(data[col++]);
	mob_table->sMovingSpeed = atoi(data[col++]);
	mob_table->bAggresiveHPPct = atoi(data[col++]);
	mob_table->wAggressiveSight = atoi(data[col++]);
	mob_table->wAttackRange = atoi(data[col++]);	
	str_to_number(mob_table->dwDropItemVnum, data[col++]);	//32
	str_to_number(mob_table->dwResurrectionVnum, data[col++]);
	for (int i = 0; i < MOB_ENCHANTS_MAX_NUM; ++i)
		str_to_number(mob_table->cEnchants[i], data[col++]);

	for (int i = 0; i < MOB_RESISTS_MAX_NUM; ++i)
		str_to_number(mob_table->cResists[i], data[col++]);

	str_to_number(mob_table->fDamMultiply, data[col++]);
	str_to_number(mob_table->dwSummonVnum, data[col++]);
	str_to_number(mob_table->dwDrainSP, data[col++]);

	//Mob_Color
	++col;

	str_to_number(mob_table->dwPolymorphItemVnum, data[col++]);

	str_to_number(mob_table->Skills[0].bLevel, data[col++]);
	str_to_number(mob_table->Skills[0].dwVnum, data[col++]);
	str_to_number(mob_table->Skills[1].bLevel, data[col++]);
	str_to_number(mob_table->Skills[1].dwVnum, data[col++]);
	str_to_number(mob_table->Skills[2].bLevel, data[col++]);
	str_to_number(mob_table->Skills[2].dwVnum, data[col++]);
	str_to_number(mob_table->Skills[3].bLevel, data[col++]);
	str_to_number(mob_table->Skills[3].dwVnum, data[col++]);
	str_to_number(mob_table->Skills[4].bLevel, data[col++]);
	str_to_number(mob_table->Skills[4].dwVnum, data[col++]);

	str_to_number(mob_table->bBerserkPoint, data[col++]);
	str_to_number(mob_table->bStoneSkinPoint, data[col++]);
	str_to_number(mob_table->bGodSpeedPoint, data[col++]);
	str_to_number(mob_table->bDeathBlowPoint, data[col++]);
	str_to_number(mob_table->bRevivePoint, data[col++]);

	//?A?ˇ vnum ?ß°ˇ
	vnumSet.insert(mob_table->dwVnum);


	//fprintf(stderr, "MOB #%d %s %s level: %u rank: %u empire: %d\n", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire);
	sys_log(0, "MOB #%-5d %-24s %-24s level: %-3u rank: %u empire: %d", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire);
	++mob_table;
}
fprintf(stderr," Complete! %d/%d Mobs loaded.\r\n",size,vnumSet.size());
sort(m_vec_mobTable.begin(), m_vec_mobTable.end(), FCompareVnum());
return true;

}

 

 

  • Like 1

Share this post


Link to post
  • 0
Résolu - Le sujet étant résolu, il se voit verrouillé et déplacé dans le forum Résolu ou sans réponse...

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.