openmw-tes3coop/components/openmw-mp/Base/BaseEvent.hpp
David Cernat 420dab10e1 [General] Track objects directly placed by players in ObjectPlace
This allows the OnPCDrop variable to get set correctly even when object placements have to go through the server first in order to gain a unique multiplayer index (mpNum).

Among other things, this makes it possible to roll marijuana joints in the popular mod "Tribunal Code Patch".
2018-01-28 17:46:51 +02:00

102 lines
2 KiB
C++

#ifndef OPENMW_BASEEVENT_HPP
#define OPENMW_BASEEVENT_HPP
#include <components/esm/loadcell.hpp>
#include <components/openmw-mp/Base/BaseStructs.hpp>
#include <RakNetTypes.h>
namespace mwmp
{
struct ContainerItem
{
std::string refId;
int count;
int charge;
double enchantmentCharge;
int actionCount;
inline bool operator==(const ContainerItem& rhs)
{
return refId == rhs.refId && count == rhs.count && charge == rhs.charge && enchantmentCharge == rhs.enchantmentCharge;
}
};
struct WorldObject
{
std::string refId;
int refNumIndex;
int mpNum;
int count;
int charge;
double enchantmentCharge;
int goldValue;
ESM::Position position;
bool objectState;
int doorState;
int lockLevel;
float scale;
std::string filename;
bool allowSkipping;
std::string animGroup;
int animMode;
int index;
int shortVal;
float floatVal;
std::string varName;
bool isDisarmed;
bool droppedByPlayer;
Target master;
bool hasMaster;
std::vector<ContainerItem> containerItems;
unsigned int containerItemCount;
RakNet::RakNetGUID guid; // only for events that can also affect players
bool isPlayer;
};
class BaseEvent
{
public:
BaseEvent(RakNet::RakNetGUID guid) : guid(guid)
{
}
BaseEvent()
{
}
enum WORLD_ACTION
{
SET = 0,
ADD = 1,
REMOVE = 2,
REQUEST = 3
};
RakNet::RakNetGUID guid;
std::vector<WorldObject> worldObjects;
unsigned int worldObjectCount;
ESM::Cell cell;
std::string consoleCommand;
unsigned char action; // 0 - Clear and set in entirety, 1 - Add item, 2 - Remove item, 3 - Request items
bool isValid;
};
}
#endif //OPENMW_BASEEVENT_HPP