Iteme din cufere nu se stacheaza

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

Nou Venit
Mesaje: 22
Membru din: 31 Mar 2014, 07:47
Aprecieri: 18  
Mulţumiri: 3  
Medalii

*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.
Ultima oară modificat 26 Noi 2020, 09:31 de către thewolf01, modificat 1 dată în total.
Avatar utilizator
exo.
Ţepar / Untrusted User

Ţepar / Untrusted User
Mesaje: 1038
Membru din: 29 Ian 2017, 12:38
Aprecieri: 289  
Mulţumiri: 1314  
Discord: Copiază ID
Medalii

ai un model de urmat presupun modifica topicul cu modelul dat, il gasesti aici.
probleme/model-postare-intrebare-sau-pr ... 67107.html
Avatar utilizator
Alcinous
Untrusted User

Untrusted User
Mesaje: 670
Membru din: 13 Noi 2020, 23:46
Server: None
Regat: Jinno
Aprecieri: 322  
Mulţumiri: 487  
Discord: Copiază ID

ClientManageBoot.cpp
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 ] Imagine
Avatar utilizator
Bjergsen
Nivel 2

Nivel 2
Mesaje: 240
Membru din: 18 Apr 2015, 17:02
Server: Ragnar2
Regat: Jinno
Aprecieri: 140  
Mulţumiri: 207  
Medalii

Manah scrie: ↑26 Noi 2020, 10:30 ClientManageBoot.cpp
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 ] Imagine


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: Imagine
Pentru acest mesaj, Bjergsen for the post:
thewolf01
Afișează semnătura
Avatar utilizator
thewolf01
Nou Venit

Nou Venit
Mesaje: 22
Membru din: 31 Mar 2014, 07:47
Aprecieri: 18  
Mulţumiri: 3  
Medalii

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.
Avatar utilizator
Bjergsen
Nivel 2

Nivel 2
Mesaje: 240
Membru din: 18 Apr 2015, 17:02
Server: Ragnar2
Regat: Jinno
Aprecieri: 140  
Mulţumiri: 207  
Medalii

thewolf01 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?
Trebuie sa ai acces la sursa game a serverului, nu il poti lua de pe net
Afișează semnătura
Avatar utilizator
thewolf01
Nou Venit

Nou Venit
Mesaje: 22
Membru din: 31 Mar 2014, 07:47
Aprecieri: 18  
Mulţumiri: 3  
Medalii

Bjergsen scrie: ↑26 Noi 2020, 11:05
thewolf01 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?
Trebuie sa ai acces la sursa game a serverului, nu il poti lua de pe net
cei de la host mi-au zis ca nu au sursele la sv standard...deci nu prea am cum sa rezolv sa inteleg?
Avatar utilizator
thewolf01
Nou Venit

Nou Venit
Mesaje: 22
Membru din: 31 Mar 2014, 07:47
Aprecieri: 18  
Mulţumiri: 3  
Medalii

Bjergsen, nu iti pot raspunde la mesaj, zice ca am cont nou ( chiar daca il am de 6 ani :)) )
Avatar utilizator
Bjergsen
Nivel 2

Nivel 2
Mesaje: 240
Membru din: 18 Apr 2015, 17:02
Server: Ragnar2
Regat: Jinno
Aprecieri: 140  
Mulţumiri: 207  
Medalii

thewolf01 scrie: ↑26 Noi 2020, 11:07
Bjergsen scrie: ↑26 Noi 2020, 11:05
thewolf01 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?
Trebuie sa ai acces la sursa game a serverului, nu il poti lua de pe net
cei de la host mi-au zis ca nu au sursele la sv standard...deci nu prea am cum sa rezolv sa inteleg?
Din pacate nu, nu poti face nici o modificare pe sursa
Afișează semnătura
Avatar utilizator
thewolf01
Nou Venit

Nou Venit
Mesaje: 22
Membru din: 31 Mar 2014, 07:47
Aprecieri: 18  
Mulţumiri: 3  
Medalii

Am inteles, multumesc de raspunspuri. O zi frumoasa va doresc.
T/C please.
Închis
Răspunsuri
2
Vizualizări
224
Răspunsuri
6
Vizualizări
461

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

  • Informaţie
  • Cine este conectat

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