You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openmw-tes3mp/components/openmw-mp/Base/BaseWorldstate.hpp

240 lines
5.7 KiB
C++

#ifndef OPENMW_BASEWORLDSTATE_HPP
#define OPENMW_BASEWORLDSTATE_HPP
#include <vector>
#include <components/esm/loadalch.hpp>
#include <components/esm/loadarmo.hpp>
#include <components/esm/loadbook.hpp>
#include <components/esm/loadclot.hpp>
#include <components/esm/loadcrea.hpp>
#include <components/esm/loadench.hpp>
#include <components/esm/loadmisc.hpp>
#include <components/esm/loadnpc.hpp>
#include <components/esm/loadspel.hpp>
#include <components/esm/loadweap.hpp>
#include <components/openmw-mp/Base/BaseStructs.hpp>
#include <RakNetTypes.h>
namespace mwmp
{
enum RECORD_TYPE
{
ARMOR,
BOOK,
CLOTHING,
CREATURE,
ENCHANTMENT,
MISCELLANEOUS,
NPC,
POTION,
SPELL,
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 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 hasFaction = false;
bool hasLevel = false;
bool hasMagicka = false;
bool hasFatigue = false;
bool hasAiFight = false;
};
struct ArmorRecord
{
ESM::Armor data;
std::string baseId;
BaseOverrides baseOverrides;
};
struct BookRecord
{
ESM::Book data;
std::string baseId;
BaseOverrides baseOverrides;
};
struct ClothingRecord
{
ESM::Clothing data;
std::string baseId;
BaseOverrides baseOverrides;
};
struct CreatureRecord
{
ESM::Creature data;
std::string baseId;
std::string inventoryBaseId;
std::vector<mwmp::Item> inventory;
BaseOverrides baseOverrides;
};
struct EnchantmentRecord
{
ESM::Enchantment 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<mwmp::Item> inventory;
BaseOverrides baseOverrides;
};
struct PotionRecord
{
ESM::Potion data;
std::string baseId;
BaseOverrides baseOverrides;
};
struct SpellRecord
{
ESM::Spell 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<char> imageData;
};
struct Weather
{
std::string region;
unsigned int currentWeather;
unsigned int nextWeather;
unsigned int queuedWeather;
float transitionFactor;
};
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;
bool hasPlayerCollision;
bool hasActorCollision;
bool hasPlacedObjectCollision;
bool useActorCollisionForPlacedObjects;
std::string authorityRegion;
std::vector<std::string> enforcedCollisionRefIds;
std::vector<MapTile> mapTiles;
bool forceWeather;
Weather weather;
unsigned short recordsType;
unsigned int recordsCount;
std::vector<ArmorRecord> armorRecords;
std::vector<BookRecord> bookRecords;
std::vector<ClothingRecord> clothingRecords;
std::vector<CreatureRecord> creatureRecords;
std::vector<EnchantmentRecord> enchantmentRecords;
std::vector<MiscellaneousRecord> miscellaneousRecords;
std::vector<NpcRecord> npcRecords;
std::vector<PotionRecord> potionRecords;
std::vector<SpellRecord> spellRecords;
std::vector<WeaponRecord> weaponRecords;
bool isValid;
};
}
#endif //OPENMW_BASEWORLDSTATE_HPP