*Problemă: Dispar itemele dupa restart, itemele se afla inca in baza de date dar cred ca le incarca in server.
Tipologie server:
*Resursă folosită: arhiva-resurse/special-storage-metin2-t63858.html
*ServerFiles utilizat: Nu este pe net.
*Syserr: Nu are
Poză: Las mai jos la detalii.
*Detalii suplimentare:
Salutare, dupa cum spune si subiectul, am o problema cu special storage.
In prima faza, sistemul functioneaza fara probleme totul se salveaza unde trebuie si sa updateaza tot in baza de date (poza inainte de rr:
Problema apare atunci cand dau un restart la server, itemele raman in baza de date dar nu isi dau load in server sa le pot vedea in special storage (poza dupa rr:
Itemele le am in baza de date, dar dupa acel restart, nu le mai vad in special storage.
Daca mut itemele in inventar dupa ce le primesc se actualizeaza totul perfect, dar daca mut iar in special storage, dupa restart iar imi dispar din acesta.
Problema special storage(dispar itemele dupa restart)
- tyger
-

- Mesaje: 134
- Membru din: 26 Noi 2013, 17:19
- Regat: Jinno
- Aprecieri: 115
- Mulţumiri: 3
- Rezolvări prob.: 1
- Discord: Copiază ID
- Contact:
- tyger
-

- Mesaje: 134
- Membru din: 26 Noi 2013, 17:19
- Regat: Jinno
- Aprecieri: 115
- Mulţumiri: 3
- Rezolvări prob.: 1
- Discord: Copiază ID
- Contact:
Asta am:
void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoadPacket * packet)
{
CPlayerTableCache * c;
TPlayerTable * pTab;
CLoginData * pLoginData = GetLoginDataByAID(packet->account_id);
if (pLoginData)
{
for (int n = 0; n < PLAYER_PER_ACCOUNT; ++n)
if (pLoginData->GetAccountRef().players[n].dwID != 0)
DeleteLogoutPlayer(pLoginData->GetAccountRef().players[n].dwID);
}
if ((c = GetPlayerCache(packet->player_id)))
{
CLoginData * pkLD = GetLoginDataByAID(packet->account_id);
if (!pkLD || pkLD->IsPlay())
{
sys_log(0, "PLAYER_LOAD_ERROR: LoginData %p IsPlay %d", pkLD, pkLD ? pkLD->IsPlay() : 0);
peer->EncodeHeader(HEADER_DG_PLAYER_LOAD_FAILED, dwHandle, 0);
return;
}
pTab = c->Get();
pkLD->SetPlay(true);
SendLoginToBilling(pkLD, true);
thecore_memcpy(pTab->aiPremiumTimes, pkLD->GetPremiumPtr(), sizeof(pTab->aiPremiumTimes));
peer->EncodeHeader(HEADER_DG_PLAYER_LOAD_SUCCESS, dwHandle, sizeof(TPlayerTable));
peer->Encode(pTab, sizeof(TPlayerTable));
if (packet->player_id != pkLD->GetLastPlayerID())
{
TPacketNeedLoginLogInfo logInfo;
logInfo.dwPlayerID = packet->player_id;
pkLD->SetLastPlayerID(packet->player_id);
peer->EncodeHeader( HEADER_DG_NEED_LOGIN_LOG, dwHandle, sizeof(TPacketNeedLoginLogInfo) );
peer->Encode( &logInfo, sizeof(TPacketNeedLoginLogInfo) );
}
char szQuery[1024] = { 0, };
TItemCacheSet * pSet = GetItemCacheSet(pTab->id);
sys_log(0, "[PLAYER_LOAD] ID %s pid %d gold %lld ", pTab->name, pTab->id, pTab->gold);
if (pSet)
{
static std::vector<TPlayerItem> s_items;
s_items.resize(pSet->size());
DWORD dwCount = 0;
TItemCacheSet::iterator it = pSet->begin();
while (it != pSet->end())
{
CItemCache * c = *it++;
TPlayerItem * p = c->Get();
if (p->vnum)
thecore_memcpy(&s_items[dwCount++], p, sizeof(TPlayerItem));
}
if (g_test_server)
sys_log(0, "ITEM_CACHE: HIT! %s count: %u", pTab->name, dwCount);
peer->EncodeHeader(HEADER_DG_ITEM_LOAD, dwHandle, sizeof(DWORD) + sizeof(TPlayerItem) * dwCount);
peer->EncodeDWORD(dwCount);
if (dwCount)
peer->Encode(&s_items[0], sizeof(TPlayerItem) * dwCount);
snprintf(szQuery, sizeof(szQuery),
"SELECT dwPID,szName,szState,lValue FROM quest%s WHERE dwPID=%d AND lValue<>0",
GetTablePostfix(), pTab->id);
CDBManager::instance().ReturnQuery(szQuery, QID_QUEST, peer->GetHandle(), new ClientHandleInfo(dwHandle,0,packet->account_id));
snprintf(szQuery, sizeof(szQuery), "SELECT dwPID,bType,bApplyOn,lApplyValue,dwFlag,lDuration,lSPCost FROM affect%s WHERE dwPID=%d", GetTablePostfix(), pTab->id);
CDBManager::instance().ReturnQuery(szQuery, QID_AFFECT, peer->GetHandle(), new ClientHandleInfo(dwHandle));
}
else
{
snprintf(szQuery, sizeof(szQuery),
"SELECT id,window+0,pos,count,vnum,socket0,socket1,socket2,attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6,applytype0,applyvalue0,applytype1,applyvalue1,applytype2,applyvalue2,applytype3,applyvalue3,applytype4,applyvalue4,applytype5,applyvalue5,applytype6,applyvalue6,applytype7,applyvalue7 "
#ifdef ENABLE_SPECIAL_STORAGE
"FROM item%s WHERE owner_id=%d AND (window < %d or window = %d or window = %d or window = %d or window = %d)",
GetTablePostfix(), pTab->id, SAFEBOX, DRAGON_SOUL_INVENTORY, UPGRADE_INVENTORY, BOOK_INVENTORY, STONE_INVENTORY);
#else
"FROM item%s WHERE owner_id=%d AND (window < %d or window = %d)",
GetTablePostfix(), pTab->id, SAFEBOX, DRAGON_SOUL_INVENTORY);
#endif
CDBManager::instance().ReturnQuery(szQuery, QID_ITEM, peer->GetHandle(), new ClientHandleInfo(dwHandle, pTab->id));
snprintf(szQuery, sizeof(szQuery), "SELECT dwPID, szName, szState, lValue FROM quest%s WHERE dwPID=%d", GetTablePostfix(), pTab->id);
CDBManager::instance().ReturnQuery(szQuery, QID_QUEST, peer->GetHandle(), new ClientHandleInfo(dwHandle, pTab->id));
snprintf(szQuery, sizeof(szQuery), "SELECT dwPID, bType, bApplyOn, lApplyValue, dwFlag, lDuration, lSPCost FROM affect%s WHERE dwPID=%d", GetTablePostfix(), pTab->id);
CDBManager::instance().ReturnQuery(szQuery, QID_AFFECT, peer->GetHandle(), new ClientHandleInfo(dwHandle, pTab->id));
}
}
else
{
sys_log(0, "[PLAYER_LOAD] Load from PlayerDB pid[%d]", packet->player_id);
char queryStr[QUERY_MAX_LEN + QUERY_MAX_LEN];
snprintf(queryStr, sizeof(queryStr),
"SELECT "
"id, "
"name, "
"job, "
"voice, "
"dir, "
"x, "
"y, "
"z, "
"map_index, "
"exit_x, "
"exit_y, "
"exit_map_index, "
"hp, "
"mp, "
"stamina, "
"random_hp, "
"random_sp, "
"playtime, "
"gold, "
"level, "
"level_step, "
"st, "
"ht, "
"dx, "
"iq, "
"exp, "
"stat_point, "
"skill_point, "
"sub_skill_point, "
"stat_reset_count, "
"part_base, "
"part_hair, "
#ifdef __SASH_SYSTEM__
"part_sash, "
#endif
"skill_level, "
"quickslot, "
"skill_group, "
"alignment, "
#ifdef ENABLE_REBORN_SYSTEM
"reborn, "
#endif
"mobile, "
"horse_level, "
"horse_riding, "
"horse_hp, "
"horse_hp_droptime, "
"horse_stamina, "
"UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(last_play), "
"horse_skill_point "
"FROM player%s WHERE id=%d"
,
GetTablePostfix(),
packet->player_id
);
ClientHandleInfo * pkInfo = new ClientHandleInfo(dwHandle, packet->player_id);
pkInfo->account_id = packet->account_id;
CDBManager::instance().ReturnQuery(queryStr, QID_PLAYER, peer->GetHandle(), pkInfo);
snprintf(queryStr, sizeof(queryStr),
"SELECT id,window+0,pos,count,vnum,socket0,socket1,socket2,attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6,applytype0,applyvalue0,applytype1,applyvalue1,applytype2,applyvalue2,applytype3,applyvalue3,applytype4,applyvalue4,applytype5,applyvalue5,applytype6,applyvalue6,applytype7,applyvalue7 "
#ifdef ENABLE_SPECIAL_STORAGE
"FROM item%s WHERE owner_id=%d AND (window < %d or window = %d or window = %d or window = %d or window = %d)",
GetTablePostfix(), packet->player_id, SAFEBOX, DRAGON_SOUL_INVENTORY, UPGRADE_INVENTORY, BOOK_INVENTORY, STONE_INVENTORY);
#else
"FROM item%s WHERE owner_id=%d AND (window < %d or window = %d)",
GetTablePostfix(), packet->player_id, SAFEBOX, DRAGON_SOUL_INVENTORY);
#endif
CDBManager::instance().ReturnQuery(queryStr, QID_ITEM, peer->GetHandle(), new ClientHandleInfo(dwHandle, packet->player_id));
snprintf(queryStr, sizeof(queryStr),
"SELECT dwPID,szName,szState,lValue FROM quest%s WHERE dwPID=%d",
GetTablePostfix(), packet->player_id);
CDBManager::instance().ReturnQuery(queryStr, QID_QUEST, peer->GetHandle(), new ClientHandleInfo(dwHandle, packet->player_id,packet->account_id));
snprintf(queryStr, sizeof(queryStr),
"SELECT dwPID,bType,bApplyOn,lApplyValue,dwFlag,lDuration,lSPCost FROM affect%s WHERE dwPID=%d",
GetTablePostfix(), packet->player_id);
CDBManager::instance().ReturnQuery(queryStr, QID_AFFECT, peer->GetHandle(), new ClientHandleInfo(dwHandle, packet->player_id));
}
}
- zWn
-

- Mesaje: 975
- Membru din: 19 Mai 2018, 15:40
- Server: selenem2.com
- Regat: Jinno
- Aprecieri: 348
- Mulţumiri: 4333
- Discord: Copiază ID
Câteva buguri:
1. Nu poţi muta obiectele între ele. ( nu cred că e major)
2.Dacă ai cărţile stivuite dispar toate la citire.(asta este o problemă)
3.Poţi pune arme în inventare şi nu le mai poţi scoate.
1. Nu poţi muta obiectele între ele. ( nu cred că e major)
2.Dacă ai cărţile stivuite dispar toate la citire.(asta este o problemă)
3.Poţi pune arme în inventare şi nu le mai poţi scoate.
- tyger
-

- Mesaje: 134
- Membru din: 26 Noi 2013, 17:19
- Regat: Jinno
- Aprecieri: 115
- Mulţumiri: 3
- Rezolvări prob.: 1
- Discord: Copiază ID
- Contact:
Crede-ma ca astea sunt rezolvate, am dat 20 de euro la un tehnician sa bage sistemul dar asta a ramas ultimul bug si nu a stiut nici el sa il rezolve.
Am avut serverul on o luna cu sistemul pana la un restart, dupa restart am realizat ca au disparut la toti itemele din special storage.
- Titan
-

- Mesaje: 2783
- Membru din: 01 Iun 2015, 15:09
- Server: In curand.
- Regat: Chunjo
- Aprecieri: 42
- Mulţumiri: 377
- Rezolvări prob.: 3
- Discord: Copiază ID
- Contact:
Frumos ar fi să dai și numele "tehnicianului", cel mai probabil ai funcțiile aiurea prin db.
- tyger
-

- Mesaje: 134
- Membru din: 26 Noi 2013, 17:19
- Regat: Jinno
- Aprecieri: 115
- Mulţumiri: 3
- Rezolvări prob.: 1
- Discord: Copiază ID
- Contact:
Profilul lui este member/Florentyn/ dar a rezolvat toate bugurile inafara de asta, si am ramas cu serverul in mentenanta ca nu gasesc o rezolvare. M-am saturat sa tot dau atatia bani la toti tehnicienii si dupa sa ma trezesc imi apar resursele pe net. Am mai platit un tehnician de mi-a reparat functii multe din client si dupa o saptamana mi-a postat clientul decriptat pe net.
- Ionuţ M.
-

- Mesaje: 2680
- Membru din: 28 Noi 2015, 22:02
- Aprecieri: 170
- Mulţumiri: 12723
- Rezolvări prob.: 2
- Discord: Copiază ID
- Contact:
Problema ta vine din sursa db mai exact din fisierul ClientManagerPlayer.cpp.
Spune-i tehnicianului sa l refaca cu multa atentie.
Spune-i tehnicianului sa l refaca cu multa atentie.
- tyger
-

- Mesaje: 134
- Membru din: 26 Noi 2013, 17:19
- Regat: Jinno
- Aprecieri: 115
- Mulţumiri: 3
- Rezolvări prob.: 1
- Discord: Copiază ID
- Contact:
Cat as vrea, acum cica "s-a lasat" ca nu se mai ocupa de metin.k1dorasuuuuu scrie: ↑24 Sep 2019, 19:19 Problema ta vine din sursa db mai exact din fisierul ClientManagerPlayer.cpp.
Spune-i tehnicianului sa l refaca cu multa atentie.
O sa refac eu dupa tutorial tot sa vedem daca gasesc ceva gresit.
Daca nu reusesc si am nevoie, pot plati daca vrea cineva sa se ofere sa ajute.
EDIT:
Am verificat totul este la fel ca in toate sistemele de special storage de pe net.
Răspunsuri
3 Vizualizări
137
3 Vizualizări
137
-
- Informaţie
-
Cine este conectat
Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 62 vizitatori





de