#ifndef OPENMW_BASEWORLDSTATE_HPP #define OPENMW_BASEWORLDSTATE_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace mwmp { enum RECORD_TYPE { ACTIVATOR, APPARATUS, ARMOR, BODYPART, BOOK, CELL, CLOTHING, CONTAINER, CREATURE, DOOR, ENCHANTMENT, INGREDIENT, LIGHT, LOCKPICK, MISCELLANEOUS, NPC, POTION, PROBE, REPAIR, SCRIPT, SPELL, STATIC, WEAPON }; // When using an existing record as a base, this struct tracks which changes // need to be made to it // // Note: These can't be replaced with checks for empty strings or numerical // values of 0 because you want to be able to blank out strings or // set values of 0 through overrides, i.e. if someone is in the // Mages Guild faction, you want to be able to remove them from it // by using a blank faction string as an override // // There are, however, a few values that are not allowed to be blanked // out in a record, such as races or classes for NPCs, and those // should rely on checks for empty strings instead of having a // boolean here struct BaseOverrides { bool hasSubtype = false; bool hasName = false; bool hasModel = false; bool hasIcon = false; bool hasScript = false; bool hasEnchantmentId = false; bool hasEnchantmentCharge = false; bool hasEffects = false; bool hasBodyParts = false; bool hasInventory = false; bool hasAutoCalc = false; bool hasCharge = false; bool hasCost = false; bool hasFlags = false; bool hasValue = false; bool hasWeight = false; bool hasQuality = false; bool hasUses = false; bool hasTime = false; bool hasRadius = false; bool hasColor = false; bool hasArmorRating = false; bool hasHealth = false; bool hasDamageChop = false; bool hasDamageSlash = false; bool hasDamageThrust = false; bool hasReach = false; bool hasSpeed = false; bool hasKeyState = false; bool hasScrollState = false; bool hasSkillId = false; bool hasText = false; bool hasHair = false; bool hasHead = false; bool hasGender = false; bool hasRace = false; bool hasFaction = false; bool hasScale = false; bool hasBloodType = false; bool hasBodyPartType = false; bool hasVampireState = false; bool hasLevel = false; bool hasMagicka = false; bool hasFatigue = false; bool hasAiFight = false; bool hasAiFlee = false; bool hasAiAlarm = false; bool hasAiServices = false; bool hasSound = false; bool hasOpenSound = false; bool hasCloseSound = false; bool hasScriptText = false; }; struct ActivatorRecord { ESM::Activator data; std::string baseId; BaseOverrides baseOverrides; }; struct ApparatusRecord { ESM::Apparatus data; std::string baseId; BaseOverrides baseOverrides; }; struct ArmorRecord { ESM::Armor data; std::string baseId; BaseOverrides baseOverrides; }; struct BodyPartRecord { ESM::BodyPart data; std::string baseId; BaseOverrides baseOverrides; }; struct BookRecord { ESM::Book data; std::string baseId; BaseOverrides baseOverrides; }; struct CellRecord { ESM::Cell data; std::string baseId; BaseOverrides baseOverrides; }; struct ClothingRecord { ESM::Clothing data; std::string baseId; BaseOverrides baseOverrides; }; struct ContainerRecord { ESM::Container data; std::string baseId; std::vector inventory; BaseOverrides baseOverrides; }; struct CreatureRecord { ESM::Creature data; std::string baseId; std::string inventoryBaseId; std::vector inventory; BaseOverrides baseOverrides; }; struct DoorRecord { ESM::Door data; std::string baseId; BaseOverrides baseOverrides; }; struct EnchantmentRecord { ESM::Enchantment data; std::string baseId; BaseOverrides baseOverrides; }; struct IngredientRecord { ESM::Ingredient data; std::string baseId; BaseOverrides baseOverrides; }; struct LightRecord { ESM::Light data; std::string baseId; BaseOverrides baseOverrides; }; struct LockpickRecord { ESM::Lockpick data; std::string baseId; BaseOverrides baseOverrides; }; struct MiscellaneousRecord { ESM::Miscellaneous data; std::string baseId; BaseOverrides baseOverrides; }; struct NpcRecord { ESM::NPC data; std::string baseId; std::string inventoryBaseId; std::vector inventory; BaseOverrides baseOverrides; }; struct PotionRecord { ESM::Potion data; std::string baseId; BaseOverrides baseOverrides; }; struct ProbeRecord { ESM::Probe data; std::string baseId; BaseOverrides baseOverrides; }; struct RepairRecord { ESM::Repair data; std::string baseId; BaseOverrides baseOverrides; }; struct ScriptRecord { ESM::Script data; std::string baseId; BaseOverrides baseOverrides; }; struct SpellRecord { ESM::Spell data; std::string baseId; BaseOverrides baseOverrides; }; struct StaticRecord { ESM::Static data; std::string baseId; BaseOverrides baseOverrides; }; struct WeaponRecord { ESM::Weapon data; std::string baseId; BaseOverrides baseOverrides; }; static const int maxImageDataSize = 1800; struct MapTile { int x; int y; std::vector imageData; }; struct Weather { std::string region; int currentWeather; int nextWeather; int queuedWeather; float transitionFactor; }; struct Kill { std::string refId; int number; }; class BaseWorldstate { public: BaseWorldstate() { time.year = -1; time.month = -1; time.day = -1; time.hour = -1; time.daysPassed = -1; time.timeScale = -1; } RakNet::RakNetGUID guid; mwmp::Time time; std::vector synchronizedClientScriptIds; std::vector synchronizedClientGlobalIds; bool hasPlayerCollision; bool hasActorCollision; bool hasPlacedObjectCollision; bool useActorCollisionForPlacedObjects; std::string authorityRegion; std::vector killChanges; std::vector enforcedCollisionRefIds; std::map destinationOverrides; std::vector mapTiles; bool forceWeather; Weather weather; unsigned short recordsType; unsigned int recordsCount; std::vector activatorRecords; std::vector apparatusRecords; std::vector armorRecords; std::vector bodyPartRecords; std::vector bookRecords; std::vector cellRecords; std::vector clothingRecords; std::vector containerRecords; std::vector creatureRecords; std::vector doorRecords; std::vector enchantmentRecords; std::vector ingredientRecords; std::vector lightRecords; std::vector lockpickRecords; std::vector miscellaneousRecords; std::vector npcRecords; std::vector potionRecords; std::vector probeRecords; std::vector repairRecords; std::vector scriptRecords; std::vector spellRecords; std::vector staticRecords; std::vector weaponRecords; bool isValid; }; } #endif //OPENMW_BASEWORLDSTATE_HPP