You last visited: Today at 16:37
Advertisement
[RELEASE][C++] DB without .txt files
Discussion on [RELEASE][C++] DB without .txt files within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.
03/03/2014, 00:45
#16
elite*gold: 222
Join Date: Oct 2012
Posts: 2,361
Received Thanks: 3,388
Quote:
Originally Posted by
.Risan.
Kann ja auch Schlecht, hab ich selber so mir vor einiger Zeit so eingebaut..
Das solltest du dann aber auch dazu schreiben.
Naja der Source wird (jedenfalls war's bei mir so) nicht ohne Veränderungen funktionieren. Danke nochmal an Sanchez der's mir gefixt hat.
03/14/2014, 10:53
#17
elite*gold: 0
Join Date: Apr 2013
Posts: 130
Received Thanks: 16
can you tell me how can i add this function please
03/14/2014, 13:08
#18
elite*gold: 0
Join Date: May 2011
Posts: 24
Received Thanks: 2
work for me perfectly thx man !
03/14/2014, 13:10
#19
elite*gold: 0
Join Date: May 2009
Posts: 95
Received Thanks: 95
Quote:
Originally Posted by
fannan10
can you tell me how can i add this function please
You must replace functions in sources DB and compile it
03/14/2014, 14:36
#20
elite*gold: 0
Join Date: Apr 2013
Posts: 130
Received Thanks: 16
where can i find this "sources DB"
03/14/2014, 19:38
#21
elite*gold: 75
Join Date: Mar 2012
Posts: 2,655
Received Thanks: 742
Quote:
Originally Posted by
.Risan.
DISABLE_PROTOS = 1
Use SQL
DISABLE_PROTOS = 0
USE TXT
Ich habe es mal für die 34083 game versucht und es klappt. Danke :P
03/14/2014, 19:59
#22
elite*gold: 0
Join Date: Mar 2014
Posts: 130
Received Thanks: 205
thk!
03/15/2014, 00:53
#23
elite*gold: 198
Join Date: Mar 2011
Posts: 835
Received Thanks: 263
Nice but this looks like the source from iMer
03/15/2014, 03:26
#24
elite*gold: 0
Join Date: May 2009
Posts: 95
Received Thanks: 95
Quote:
Originally Posted by
ƬheGame
Nice but this looks like the source from iMer
No, i created this functions not imer
03/15/2014, 03:52
#25
elite*gold: 0
Join Date: Jan 2010
Posts: 416
Received Thanks: 95
Quote:
Originally Posted by
deco016
Hey, in last year i rewrite DB functions for loading item_proto and mob_proto from MySQL without .txt files, Here is source :
ClientManagerBoot.cpp
Code:
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++]);
//ĽÂżˇ 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::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));
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! %d Items loaded.\r\n",addNumber);
return true;
}
Imporant!
Remove from bool CClientManager::InitializeTables() two calls functions :
MirrorMobTableIntoDB() and
MirrorItemTableIntoDB()
Note:
Theard create for elitepvpers.com , do not copy for another board (like mpcforum.pl) !
Im feeling like a noob,
now. Where I put this?
03/15/2014, 04:05
#26
elite*gold: 0
Join Date: May 2009
Posts: 95
Received Thanks: 95
If you have sources of game/db open ClientManagerBoot.cpp and replace function bool CClientManager::InitializeMobTable() and bool CClientManager::InitializeItemTable() , save and compile it
03/15/2014, 10:36
#27
elite*gold: 0
Join Date: May 2013
Posts: 223
Received Thanks: 93
Works perfectly!
thanks
04/22/2014, 10:20
#28
elite*gold: 0
Join Date: Aug 2011
Posts: 61
Received Thanks: 13
You saved me!!
I don't like that ymir moved the item_proto and mob_proto into txt it looks messed up like that.
Anyway thanks
Edit:Getting some errors
PHP Code:
map is not a member of std dword was not declared in this scope value type was not declared
and many more.
Shall i replace the whole clientmanagerboot.cpp ??
What includes shall i do?
03/28/2015, 21:16
#29
elite*gold: 0
Join Date: Nov 2011
Posts: 15
Received Thanks: 0
#
03/30/2015, 02:46
#30
elite*gold: 0
Join Date: Mar 2015
Posts: 10
Received Thanks: 8
does not work / funktioniert nicht
kann jemand diesen code in meine datei einbauen / ersetzen?
Attached Files
ClientManager.txt
(140.7 KB, 54 views)
All times are GMT +2. The time now is 16:37 .