*Problemă/Întrebare: Salut. Am o problema. Am cateva iteme care daca sunt ridicate de pe jos se stacheaza, dar cand sunt dropate din cufar direct in inventar, nu se stacheaza.
Tipologie server: PVM
*Resursă folosită:
*ServerFiles utilizat: 2Metin
*Syserr:
Poză:
*Detalii suplimentare:
Multumesc.
Iteme din cufere nu se stacheaza
- exo.
-

- Mesaje: 1038
- Membru din: 29 Ian 2017, 12:38
- Aprecieri: 289
- Mulţumiri: 1314
- Discord: Copiază ID
ai un model de urmat presupun modifica topicul cu modelul dat, il gasesti aici.
probleme/model-postare-intrebare-sau-pr ... 67107.html
probleme/model-postare-intrebare-sau-pr ... 67107.html
- Alcinous
-

- Mesaje: 670
- Membru din: 13 Noi 2020, 23:46
- Server: None
- Regat: Jinno
- Aprecieri: 322
- Mulţumiri: 487
- Discord: Copiază ID
ClientManageBoot.cpp
[ Postat de pe iPhone ]
bool CClientManager::InitializeItemTable()
{
char query[4096];
snprintf(query, sizeof(query),
"SELECT vnum, name, %s, type, subtype, gold, shop_buy_price, weight, size, flag, wearflag, "
"antiflag, immuneflag+0, 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, vnum_range "
"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)
{
sys_err("Could not load item_proto. No results!");
return false;
}
sys_log(0, "ITEM_PROTO loading...");
if (!m_vec_itemTable.empty())
{
sys_log(0, "RELOAD: item_proto");
m_vec_itemTable.clear();
m_map_itemTableByVnum.clear();
}
m_vec_itemTable.resize(pRes->uiNumRows);
memset(&m_vec_itemTable[0], 0, sizeof(TItemTable) * m_vec_itemTable.size());
TItemTable * item_table = &m_vec_itemTable[0];
MYSQL_ROW data;
int col;
while ((data = mysql_fetch_row(pRes->pSQLResult)))
{
col = 0;
str_to_number(item_table->dwVnum, data[col++]);
strlcpy(item_table->szName, data[col++], sizeof(item_table->szName));
strlcpy(item_table->szLocaleName, data[col++], sizeof(item_table->szLocaleName));
str_to_number(item_table->bType, data[col++]);
str_to_number(item_table->bSubType, data[col++]);
str_to_number(item_table->dwGold, data[col++]);
str_to_number(item_table->dwShopBuyPrice, data[col++]);
str_to_number(item_table->bWeight, data[col++]);
str_to_number(item_table->bSize, data[col++]);
str_to_number(item_table->dwFlags, data[col++]);
str_to_number(item_table->dwWearFlags, data[col++]);
str_to_number(item_table->dwAntiFlags, data[col++]);
str_to_number(item_table->dwImmuneFlag, data[col++]);
str_to_number(item_table->dwRefinedVnum, data[col++]);
str_to_number(item_table->wRefineSet, data[col++]);
str_to_number(item_table->bAlterToMagicItemPct, data[col++]);
str_to_number(item_table->bGainSocketPct, data[col++]);
str_to_number(item_table->sAddonType, data[col++]);
item_table->cLimitRealTimeFirstUseIndex = -1;
item_table->cLimitTimerBasedOnWearIndex = -1;
int i;
for (i = 0; i < ITEM_LIMIT_MAX_NUM; ++i)
{
str_to_number(item_table->aLimits.bType, data[col++]);
str_to_number(item_table->aLimits.lValue, data[col++]);
if (LIMIT_REAL_TIME_START_FIRST_USE == item_table->aLimits.bType)
item_table->cLimitRealTimeFirstUseIndex = (char)i;
if (LIMIT_TIMER_BASED_ON_WEAR == item_table->aLimits.bType)
item_table->cLimitTimerBasedOnWearIndex = (char)i;
}
for (i = 0; i < ITEM_APPLY_MAX_NUM; ++i)
{
str_to_number(item_table->aApplies.bType, data[col++]);
str_to_number(item_table->aApplies.lValue, data[col++]);
}
for (i = 0; i < ITEM_VALUES_MAX_NUM; ++i)
str_to_number(item_table->alValues, data[col++]);
sys_log(1, "ITEM: #%-5lu %-24s %-24s VAL: %ld %ld %ld %ld %ld %ld WEAR %lu ANTI %lu IMMUNE %lu 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);
m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table));
++item_table;
}
sort(m_vec_itemTable.begin(), m_vec_itemTable.end(), FCompareVnum());
sys_log(0, "CClientManager::InitializeMobTable:: %d items loaded.\n", m_vec_itemTable.size());
fprintf(stderr,"Database load complete! %d items loaded.\r\n", m_vec_itemTable.size());
const char* sMessage_1 = "Database -----";
const char* sMessage_2 = "rev. perforce 40250";
fprintf(stderr,"-- %s || %s --\r\n", sMessage_1, sMessage_2);
return true;
}[ Postat de pe iPhone ]

Manah scrie: ↑26 Noi 2020, 10:30 ClientManageBoot.cppbool CClientManager::InitializeItemTable() { char query[4096]; snprintf(query, sizeof(query), "SELECT vnum, name, %s, type, subtype, gold, shop_buy_price, weight, size, flag, wearflag, " "antiflag, immuneflag+0, 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, vnum_range " "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) { sys_err("Could not load item_proto. No results!"); return false; } sys_log(0, "ITEM_PROTO loading..."); if (!m_vec_itemTable.empty()) { sys_log(0, "RELOAD: item_proto"); m_vec_itemTable.clear(); m_map_itemTableByVnum.clear(); } m_vec_itemTable.resize(pRes->uiNumRows); memset(&m_vec_itemTable[0], 0, sizeof(TItemTable) * m_vec_itemTable.size()); TItemTable * item_table = &m_vec_itemTable[0]; MYSQL_ROW data; int col; while ((data = mysql_fetch_row(pRes->pSQLResult))) { col = 0; str_to_number(item_table->dwVnum, data[col++]); strlcpy(item_table->szName, data[col++], sizeof(item_table->szName)); strlcpy(item_table->szLocaleName, data[col++], sizeof(item_table->szLocaleName)); str_to_number(item_table->bType, data[col++]); str_to_number(item_table->bSubType, data[col++]); str_to_number(item_table->dwGold, data[col++]); str_to_number(item_table->dwShopBuyPrice, data[col++]); str_to_number(item_table->bWeight, data[col++]); str_to_number(item_table->bSize, data[col++]); str_to_number(item_table->dwFlags, data[col++]); str_to_number(item_table->dwWearFlags, data[col++]); str_to_number(item_table->dwAntiFlags, data[col++]); str_to_number(item_table->dwImmuneFlag, data[col++]); str_to_number(item_table->dwRefinedVnum, data[col++]); str_to_number(item_table->wRefineSet, data[col++]); str_to_number(item_table->bAlterToMagicItemPct, data[col++]); str_to_number(item_table->bGainSocketPct, data[col++]); str_to_number(item_table->sAddonType, data[col++]); item_table->cLimitRealTimeFirstUseIndex = -1; item_table->cLimitTimerBasedOnWearIndex = -1; int i; for (i = 0; i < ITEM_LIMIT_MAX_NUM; ++i) { str_to_number(item_table->aLimits.bType, data[col++]); str_to_number(item_table->aLimits.lValue, data[col++]); if (LIMIT_REAL_TIME_START_FIRST_USE == item_table->aLimits.bType) item_table->cLimitRealTimeFirstUseIndex = (char)i; if (LIMIT_TIMER_BASED_ON_WEAR == item_table->aLimits.bType) item_table->cLimitTimerBasedOnWearIndex = (char)i; } for (i = 0; i < ITEM_APPLY_MAX_NUM; ++i) { str_to_number(item_table->aApplies.bType, data[col++]); str_to_number(item_table->aApplies.lValue, data[col++]); } for (i = 0; i < ITEM_VALUES_MAX_NUM; ++i) str_to_number(item_table->alValues, data[col++]); sys_log(1, "ITEM: #%-5lu %-24s %-24s VAL: %ld %ld %ld %ld %ld %ld WEAR %lu ANTI %lu IMMUNE %lu 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); m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table)); ++item_table; } sort(m_vec_itemTable.begin(), m_vec_itemTable.end(), FCompareVnum()); sys_log(0, "CClientManager::InitializeMobTable:: %d items loaded.\n", m_vec_itemTable.size()); fprintf(stderr,"Database load complete! %d items loaded.\r\n", m_vec_itemTable.size()); const char* sMessage_1 = "Database -----"; const char* sMessage_2 = "rev. perforce 40250"; fprintf(stderr,"-- %s || %s --\r\n", sMessage_1, sMessage_2); return true; }
[ Postat de pe iPhone ]![]()
Nu este ce il intereseaza...
Bug-ul e cunoscut si rezolvarea e de mult pe net:
char_item.cpp
in CHARACTER::AutoGiveItem cauta if (item->GetType() == ITEM_BLEND)
inclocuieste tot cu:
if (item->IsStackable())
{
for (int i=0; i < INVENTORY_MAX_NUM; i++)
{
LPITEM inv_item = GetInventoryItem(i);
if (inv_item == NULL)
continue;
if (inv_item->GetVnum() == item->GetVnum())
{
if (inv_item->GetSocket(0) == item->GetSocket(0) &&
inv_item->GetSocket(1) == item->GetSocket(1) &&
inv_item->GetSocket(2) == item->GetSocket(2) &&
inv_item->GetCount() < ITEM_MAX_COUNT)
{
inv_item->SetCount(inv_item->GetCount() + item->GetCount());
M2_DESTROY_ITEM(item);
return inv_item;
}
}
}
}exemplu:

Problema e ca nu gasesc nicaieri char_item.cpp ( am gasit pe net cum ca mi-ar trebui sursa, eu am server-ul hostat la o firma de hosting, care mi-a pus la dispozitie tot ce am si nu cred ca mi-au pus la dispozitie si sursa ). Cum fac sa gasesc acest fisier? Pot sa il descarc de pe internet si sa il copiez eu in/game/src ? Sau aveti alta solutie?
Ultima oară modificat 26 Noi 2020, 11:06 de către thewolf01, modificat 1 dată în total.
Trebuie sa ai acces la sursa game a serverului, nu il poti lua de pe netthewolf01 scrie: ↑26 Noi 2020, 11:02 Problema e ca nu gasesc nicaieri char_item.cpp ( am gasit pe net cum ca mi-ar trebui sursa, eu am server-ul hostat la o firma de hosting, care mi-a pus la dispozitie tot ce am si nu cred ca mi-au pus la dispozitie si sura ). Cum fac sa gasesc acest fisier? Pot sa il descarc de pe internet si sa il copiez eu in/game/src ? Sau aveti alta solutie?
cei de la host mi-au zis ca nu au sursele la sv standard...deci nu prea am cum sa rezolv sa inteleg?Bjergsen scrie: ↑26 Noi 2020, 11:05Trebuie sa ai acces la sursa game a serverului, nu il poti lua de pe netthewolf01 scrie: ↑26 Noi 2020, 11:02 Problema e ca nu gasesc nicaieri char_item.cpp ( am gasit pe net cum ca mi-ar trebui sursa, eu am server-ul hostat la o firma de hosting, care mi-a pus la dispozitie tot ce am si nu cred ca mi-au pus la dispozitie si sura ). Cum fac sa gasesc acest fisier? Pot sa il descarc de pe internet si sa il copiez eu in/game/src ? Sau aveti alta solutie?
Din pacate nu, nu poti face nici o modificare pe sursathewolf01 scrie: ↑26 Noi 2020, 11:07cei de la host mi-au zis ca nu au sursele la sv standard...deci nu prea am cum sa rezolv sa inteleg?Bjergsen scrie: ↑26 Noi 2020, 11:05Trebuie sa ai acces la sursa game a serverului, nu il poti lua de pe netthewolf01 scrie: ↑26 Noi 2020, 11:02 Problema e ca nu gasesc nicaieri char_item.cpp ( am gasit pe net cum ca mi-ar trebui sursa, eu am server-ul hostat la o firma de hosting, care mi-a pus la dispozitie tot ce am si nu cred ca mi-au pus la dispozitie si sura ). Cum fac sa gasesc acest fisier? Pot sa il descarc de pe internet si sa il copiez eu in/game/src ? Sau aveti alta solutie?
-
- Informaţie
-
Cine este conectat
Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 83 vizitatori


