Metin2 Lazy Item ID - Optimizare consum ID-uri item
Acest sistem schimba modul in care sunt generate ID-urile pentru iteme. In loc ca fiecare item creat sa primeasca instant un ID, acesta este generat doar cand item-ul chiar are nevoie de el, de exemplu la salvare sau cand intra intr-un slot persistent.
- reduce consumul inutil de item ID-uri;
- itemele temporare pot ramane fara ID;
- elimina ID-urile consumate de drop-uri care dispar sau intra direct intr-un stack;
- evita pachetele inutile de destroy pentru iteme care nu au fost salvate;
- nu necesita modificarea tuturor apelurilor existente de GetID.
*Link download / Code:
Deschide game/src/char_item.cpp si cauta:
Code:
sys_log(LOG_DEBUG, "No empty inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());Deschide game/src/item.cpp si cauta:
Code:
m_dwID = 0;Cauta functia:
Code:
void CItem::SetExchanging(bool bOn)Cauta:
Code:
LogManager::instance().ItemLog(i, v, 0, GetID(), "SET_SOCKET", "", "", GetOriginalVnum());Cauta functia:
Code:
void CItem::ForceFlush()Code:
db_clientdesc->Packet(&m_dwID, sizeof(DWORD));Deschide game/src/item.h si cauta:
Code:
void SetID(DWORD id) { m_dwID = id; }
DWORD GetID() const { return m_dwID; }Cauta:
Code:
DWORD m_dwID;Deschide game/src/item_attribute.cpp si cauta:
Code:
LOG_LEVEL_CHECK(LOG_LEVEL_MAX, LogManager::instance().ItemLog(i, bType, sValue, GetID(), "SET_ATTR", "", pszIP ? pszIP : "", GetOriginalVnum()));Cauta:
Code:
LOG_LEVEL_CHECK(LOG_LEVEL_MAX, LogManager::instance().ItemLog(i, bType, sValue, GetID(), "SET_FORCE_ATTR", "", pszIP ? pszIP : "", GetOriginalVnum()));Deschide game/src/item_manager.cpp si cauta in functia ITEM_MANAGER::CreateItem:
Code:
item->SetID(GetNewID());In aceeasi functie cauta:
Code:
if (item->GetID() != 0 && bSkipSave == false)
m_map_pkItemByID.emplace(item->GetID(), item);Dupa functia ITEM_MANAGER::CreateItem adauga:
Cauta functia:
Code:
void ITEM_MANAGER::DelayedSave(LPITEM item)Code:
if (item->GetID() != 0)
m_set_pkItemForDelayedSave.emplace(item);Cauta functia:
Code:
bool ITEM_MANAGER::SaveSingleItem(LPITEM item) constCode:
const DWORD dwID = item->GetID();
const DWORD dwOwnerID = item->GetLastOwnerPID();In aceeasi functie cauta:
Code:
sys_log(1, "ITEM_SAVE %s:%d in %s window %d", item->GetName(), item->GetID(), item->GetOwner()->GetName(), item->GetWindow());
TPlayerItem t;
t.id = item->GetID();Cauta functia:
Code:
void ITEM_MANAGER::DestroyItem(LPITEM item)Code:
const DWORD dwID = item->GetID();Deschide game/src/item_manager.h si cauta:
Code:
DWORD GetNewID();

la acest mesaj și conținutul se va afișa automat.
