Moin,
Ich hab leider noch nicht ganz verstanden, wo meine mob_proto von der Binary eingelesen wird und vor allem der Inhalt auf die Variablen gemappt wird.
Was ich bisher weiß:
PythonApplication ruft in "bool LoadLocaleData(const char* localePath)" PythonNonPlayer mit "if (!rkNPCMgr.LoadNonPlayerData(szMobProto))"
Was macht LoadNonPlayerData alles ?
Code
- 1. CEterPackManager::Instance().Get(file, c_szFileName, &pvData)
- Hier wird der Inhalt der mob_proto nach file "gemappt", denn file ist vom Typ: CMappedFile
- ***FRAGE: Ich kann hier keine Zuweisung oder Ähnliches finden in Get() ***
- 2. file.Read(&dwFourCC, sizeof(DWORD));
- file.Read(&dwElements, sizeof(DWORD));
- file.Read(&dwDataSize, sizeof(DWORD));
- Ich glaube, es wird geprüft, ob der FourCC stimmt und die Size. Also wahrscheinlich nur zur Prüfung der Konsistenz.
- 3. BYTE * pbData = new BYTE[dwDataSize];
- file.Read(pbData, dwDataSize);
- Hier wird der Inhalt der mob_proto nach pbData "gelesen".
- 4. CLZO::Instance().Decompress(zObj, pbData, s_adwMobProtoKey)
- Hier ist mir nicht ganz klar, in welcher Weise er die pbData dekomprimiert.
- 5. Hier kommt auch schon mein "Fehler":
- TMobTable * pTable = (TMobTable *) zObj.GetBuffer();
- for (DWORD i = 0; i < dwElements; ++i, ++pTable)
- {
- TMobTable * pNonPlayerData = new TMobTable;
- memcpy(pNonPlayerData, pTable, sizeof(TMobTable));
- if(pNonPlayerData->dwVnum==101)
- TraceError("%d : %s type[%d] level[%d] %d AI:%d MountCap:%d Race:%d", pNonPlayerData->dwVnum, pNonPlayerData->szLocaleName, pNonPlayerData->bType, pNonPlayerData->bLevel, pNonPlayerData->bSize, pNonPlayerData->dwAIFlag,pNonPlayerData->bMountCapacity,pNonPlayerData->dwRaceFlag);
- m_NonPlayerDataMap.insert(TNonPlayerDataMap::value_type(pNonPlayerData->dwVnum, pNonPlayerData));
- }
- Ihr seht, ich hab ne Ausgabe eingebaut, welche mir vom Wildhund die Daten gibt, z.b. RaceFlag.
Was passiert, wenn ich das so laufen lasse ?
Bitte melden Sie sich an, um dieses Bild zu sehen.
mob_proto:
Bitte melden Sie sich an, um dieses Bild zu sehen.
Die Size konnte er lesen mit Big->3
Aber beim RaceFlag bringt er mir immer riesige Zahlen =(
Wo kann die Stelle sein, wo er die mob_proto (aus locale) falsch einliest/ verarbeitet.
Hier noch jeweils die Wildhund Zeile:
Damit isses das selbe: