Problema special storage(dispar itemele dupa restart)

Totalitatea subiectelor care nu respectă regulamentul impus in sectiunea "Probleme şi Întrebări" vor fi stocate aici.
Avatar utilizator
tyger
Nivel 1

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

*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.
Contact Discord: qwiztuber
Grup Discord: https://discord.gg/7aGQUSJ
Fondator server: www.five-host.com
Afișează semnătura
Avatar utilizator
Moț
Ţepar / Untrusted User

Ţepar / Untrusted User
Mesaje: 2825
Membru din: 03 Apr 2017, 15:00
Aprecieri: 216  
Mulţumiri: 3040  
Discord: Copiază ID
Medalii

arata functia CClientManager::QUERY_PLAYER_LOAD
Imagine
Afișează semnătura
Avatar utilizator
tyger
Nivel 1

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

Moț scrie: ↑21 Sep 2019, 18:01 arata functia CClientManager::QUERY_PLAYER_LOAD
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));
	}
}
Contact Discord: qwiztuber
Grup Discord: https://discord.gg/7aGQUSJ
Fondator server: www.five-host.com
Afișează semnătura
Avatar utilizator
zWn
Mister Just4Metin

Mister Just4Metin
Mesaje: 975
Membru din: 19 Mai 2018, 15:40
Server: selenem2.com
Regat: Jinno
Aprecieri: 348  
Mulţumiri: 4333  
Discord: Copiază ID
Medalii

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.
Imagine
Afișează semnătura
Avatar utilizator
tyger
Nivel 1

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

zWn scrie: ↑22 Sep 2019, 12:45 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.
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.
Contact Discord: qwiztuber
Grup Discord: https://discord.gg/7aGQUSJ
Fondator server: www.five-host.com
Afișează semnătura
Avatar utilizator
Ley
Nivel 9

Nivel 9
Mesaje: 1934
Membru din: 09 Feb 2017, 22:30
Server: Colossus2
Regat: Jinno
Aprecieri: 221  
Mulţumiri: 1338  
Medalii

Eu zic că mai bine cumpărai sistemul de la autor şi nu aveai nici un fel de problemă, dacă ai dat bani pe el şi e şi bugat în halul ăsta, nu ştiu ce fel de *tehnician* era. :)
Imagine
Afișează semnătura
Avatar utilizator
Titan
Metin Master

Metin Master
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:
Medalii

Frumos ar fi să dai și numele "tehnicianului", cel mai probabil ai funcțiile aiurea prin db.
Imagine
Afișează semnătura
Avatar utilizator
tyger
Nivel 1

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

Titan scrie: ↑22 Sep 2019, 15:47 Frumos ar fi să dai și numele "tehnicianului", cel mai probabil ai funcțiile aiurea prin db.
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.
Contact Discord: qwiztuber
Grup Discord: https://discord.gg/7aGQUSJ
Fondator server: www.five-host.com
Afișează semnătura
Avatar utilizator
Ionuţ M.
Metin Master

Metin Master
Mesaje: 2680
Membru din: 28 Noi 2015, 22:02
Aprecieri: 170  
Mulţumiri: 12723  
  Rezolvări prob.: 2
Discord: Copiază ID
 Contact:
Medalii

Problema ta vine din sursa db mai exact din fisierul ClientManagerPlayer.cpp.
Spune-i tehnicianului sa l refaca cu multa atentie.
Imagine
Afișează semnătura
Avatar utilizator
tyger
Nivel 1

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

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.
Cat as vrea, acum cica "s-a lasat" ca nu se mai ocupa de metin.
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.
Contact Discord: qwiztuber
Grup Discord: https://discord.gg/7aGQUSJ
Fondator server: www.five-host.com
Afișează semnătura
Închis
Răspunsuri
5
Vizualizări
129
Răspunsuri
2
Vizualizări
276
Răspunsuri
19
Vizualizări
1633

Înapoi la “Arhivă Probleme şi Întrebări”

  • Informaţie
  • Cine este conectat

    Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 62 vizitatori