Acest tutorial iti arata cum sa activezi optimizarea pentru item_proto in sursa Metin2.
Prin aceasta modificare, serverul va cauta itemele mult mai rapid dupa vnum, folosind unordered_map in locul metodei clasice.
Este o optimizare utila mai ales in zonele unde se fac foarte multe operatii cu iteme, cum ar fi shop, quest, cube, char_item sau sisteme speciale.
*Link download / Code:
Deschide Server/common/CommonDefines.h sau service.h si adauga:
Deschide Server/db/src/ClientManager.h si cauta:
Code:
std::map<DWORD, TItemTable *> m_map_itemTableByVnum;
Deschide Server/game/src/item_manager.h si cauta:
Code:
std::vector<TItemTable*> m_vec_item_vnum_range_info;
Deschide Server/game/src/item_manager.cpp si cauta in functia:
Code:
bool ITEM_MANAGER::Initialize(TItemTable * table, int size)
Code:
m_vec_prototype.resize(size);
thecore_memcpy(&m_vec_prototype[0], table, sizeof(TItemTable) * size);
In acelasi fisier, cauta:
Code:
for (int i = 0; i < size; i++)
{
Deschide Server/game/src/item_manager.cpp si cauta:
Code:
TItemTable * ITEM_MANAGER::GetTable(DWORD vnum)
Aceasta optimizare face ca lookup-ul pentru item_proto sa fie mult mai rapid pentru vnum-urile exacte. Pentru itemele bazate pe range, sistemul pastreaza fallback-ul vechi si adauga si un cache separat, astfel incat performanta sa fie mai buna si in acele cazuri.
La reload de proto, map-urile sunt golite si refacute, ca sa nu ramana pointeri vechi sau invalizi. Este o optimizare buna pentru sursele Metin2 unde serverul face foarte multe operatii cu iteme.


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


