*Descriere:
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:
Inlocuieste cu:
Deschide Server/game/src/item_manager.h si cauta:
Adauga sub:
Deschide Server/game/src/item_manager.cpp si cauta in functia:
Cauta:
Adauga sub:
In acelasi fisier, cauta:
Adauga sub:
Deschide Server/game/src/item_manager.cpp si cauta:
Inlocuieste toata functia cu:
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.
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:
Conținut: Ascuns
Reacționează
la acest mesaj și conținutul se va afișa automat.
la acest mesaj și conținutul se va afișa automat.Deschide Server/db/src/ClientManager.h si cauta:
Cod: Selectaţi tot
std::map<DWORD, TItemTable *> m_map_itemTableByVnum;
Conținut: Ascuns
Reacționează
la acest mesaj și conținutul se va afișa automat.
la acest mesaj și conținutul se va afișa automat.Deschide Server/game/src/item_manager.h si cauta:
Cod: Selectaţi tot
std::vector<TItemTable*> m_vec_item_vnum_range_info;
Conținut: Ascuns
Reacționează
la acest mesaj și conținutul se va afișa automat.
la acest mesaj și conținutul se va afișa automat.Deschide Server/game/src/item_manager.cpp si cauta in functia:
Cod: Selectaţi tot
bool ITEM_MANAGER::Initialize(TItemTable * table, int size)
Cod: Selectaţi tot
m_vec_prototype.resize(size);
thecore_memcpy(&m_vec_prototype[0], table, sizeof(TItemTable) * size);
Conținut: Ascuns
Reacționează
la acest mesaj și conținutul se va afișa automat.
la acest mesaj și conținutul se va afișa automat.In acelasi fisier, cauta:
Cod: Selectaţi tot
for (int i = 0; i < size; i++)
{
Conținut: Ascuns
Reacționează
la acest mesaj și conținutul se va afișa automat.
la acest mesaj și conținutul se va afișa automat.Deschide Server/game/src/item_manager.cpp si cauta:
Cod: Selectaţi tot
TItemTable * ITEM_MANAGER::GetTable(DWORD vnum)
Conținut: Ascuns
Reacționează
la acest mesaj și conținutul se va afișa automat.
la acest mesaj și conținutul se va afișa automat.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.




