void TemplateManager::loadSlotDefinitions() { info("Loading slot definitions"); IffStream* iffStream = openIffFile("abstract/slot/slot_definition/slot_definitions.iff"); if (iffStream == NULL) { error("Slot definitions can't be found."); ERROR_CODE = SLOT_DEFINITION_FILE_NOT_FOUND; return; } //TODO: Should we fool with encapsulating this within a SlotDefinitionsMap? //Note: There is no parent form type, just the version: 0006... iffStream->openForm('0006'); Chunk* data = iffStream->openChunk('DATA'); while (data->hasData()) { Reference<SlotId*> slotId = new SlotId(); slotId->readObject(data); slotDefinitions.put(slotId->getSlotName(), slotId); } iffStream->closeChunk('DATA'); iffStream->closeForm('0006'); delete iffStream; info("Loaded " + String::valueOf(slotDefinitions.size()) + " slot definitions.", true); }
void PlayerCreationManager::loadDefaultCharacterItems() { IffStream* iffStream = TemplateManager::instance()->openIffFile( "creation/default_pc_equipment.iff"); if (iffStream == NULL) { error("Couldn't load creation default items."); return; } iffStream->openForm('LOEQ'); uint32 version = iffStream->getNextFormType(); Chunk* versionChunk = iffStream->openForm(version); for (int i = 0; i < versionChunk->getChunksSize(); ++i) { Chunk* ptmpChunk = iffStream->openForm('PTMP'); String templateName; Chunk* nameChunk = iffStream->openChunk('NAME'); nameChunk->readString(templateName); iffStream->closeChunk('NAME'); SortedVector < String > items; for (int j = 1; j < ptmpChunk->getChunksSize(); ++j) { Chunk* itemChunk = iffStream->openChunk('ITEM'); String itemTemplate; int unk1 = itemChunk->readInt(); itemChunk->readString(itemTemplate); itemTemplate = itemTemplate.replaceFirst("shared_", ""); items.put(itemTemplate); iffStream->closeChunk('ITEM'); } defaultCharacterEquipment.put(templateName, items); iffStream->closeForm('PTMP'); } iffStream->closeForm(version); iffStream->closeForm('LOEQ'); delete iffStream; }
void ChatManagerImplementation::loadSpatialChatTypes() { TemplateManager* templateManager = TemplateManager::instance(); IffStream* iffStream = templateManager->openIffFile("chat/spatial_chat_types.iff"); if (iffStream == NULL) { error("Could not open chat/spatial_chat_types.iff"); return; } iffStream->openForm('SPCT'); Chunk* version = iffStream->openForm('0000'); Chunk* data = iffStream->openChunk('TYPS'); int i = 0; while (data->hasData()) { String key; data->readString(key); i++; spatialChatTypes.put(key, i); } iffStream->closeChunk('TYPS'); Chunk* version2 = iffStream->openForm('VOLS'); for (int j = 0; j < version2->getChunksSize(); j++) { Chunk* data2 = version2->getNextChunk(); String name; data2->readString(name); uint16 distance = 0; distance = data2->readShort(); if (name.isEmpty()) { defaultSpatialChatDistance = distance; } else { uint32 chatType = spatialChatTypes.get(name); spatialChatDistances.put(chatType, distance); } } iffStream->closeForm('VOLS'); iffStream->closeForm('0000'); iffStream->closeForm('SPCT'); delete iffStream; }