forked from mirror/openmw-tes3mp
[General] Add enchantmentCharge to worldObjects and items
This commit is contained in:
parent
fef6bddc68
commit
993081ba1e
14 changed files with 276 additions and 151 deletions
|
@ -163,6 +163,11 @@ int ActorFunctions::GetActorEquipmentItemCharge(unsigned int i, unsigned short s
|
||||||
return readActorList->baseActors.at(i).equipedItems[slot].charge;
|
return readActorList->baseActors.at(i).equipedItems[slot].charge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ActorFunctions::GetActorEquipmentItemEnchantmentCharge(unsigned int i, unsigned short slot) noexcept
|
||||||
|
{
|
||||||
|
return readActorList->baseActors.at(i).equipedItems[slot].enchantmentCharge;
|
||||||
|
}
|
||||||
|
|
||||||
bool ActorFunctions::DoesActorHavePosition(unsigned int i) noexcept
|
bool ActorFunctions::DoesActorHavePosition(unsigned int i) noexcept
|
||||||
{
|
{
|
||||||
return readActorList->baseActors.at(i).hasPositionData;
|
return readActorList->baseActors.at(i).hasPositionData;
|
||||||
|
@ -262,16 +267,17 @@ void ActorFunctions::SetActorFatigueModified(double value) noexcept
|
||||||
tempActor.creatureStats.mDynamic[2].mMod = value;
|
tempActor.creatureStats.mDynamic[2].mMod = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActorFunctions::EquipActorItem(unsigned short slot, const char *refId, unsigned int count, int charge) noexcept
|
void ActorFunctions::EquipActorItem(unsigned short slot, const char *refId, unsigned int count, int charge, int enchantmentCharge) noexcept
|
||||||
{
|
{
|
||||||
tempActor.equipedItems[slot].refId = refId;
|
tempActor.equipedItems[slot].refId = refId;
|
||||||
tempActor.equipedItems[slot].count = count;
|
tempActor.equipedItems[slot].count = count;
|
||||||
tempActor.equipedItems[slot].charge = charge;
|
tempActor.equipedItems[slot].charge = charge;
|
||||||
|
tempActor.equipedItems[slot].enchantmentCharge = enchantmentCharge;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActorFunctions::UnequipActorItem(unsigned short slot) noexcept
|
void ActorFunctions::UnequipActorItem(unsigned short slot) noexcept
|
||||||
{
|
{
|
||||||
ActorFunctions::EquipActorItem(slot, "", 0, -1);
|
ActorFunctions::EquipActorItem(slot, "", 0, -1, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActorFunctions::AddActor() noexcept
|
void ActorFunctions::AddActor() noexcept
|
||||||
|
|
|
@ -2,76 +2,77 @@
|
||||||
#define OPENMW_ACTORAPI_HPP
|
#define OPENMW_ACTORAPI_HPP
|
||||||
|
|
||||||
#define ACTORAPI \
|
#define ACTORAPI \
|
||||||
{"ReadLastActorList", ActorFunctions::ReadLastActorList},\
|
{"ReadLastActorList", ActorFunctions::ReadLastActorList},\
|
||||||
{"ReadCellActorList", ActorFunctions::ReadCellActorList},\
|
{"ReadCellActorList", ActorFunctions::ReadCellActorList},\
|
||||||
{"InitializeActorList", ActorFunctions::InitializeActorList},\
|
{"InitializeActorList", ActorFunctions::InitializeActorList},\
|
||||||
\
|
\
|
||||||
{"GetActorListSize", ActorFunctions::GetActorListSize},\
|
{"GetActorListSize", ActorFunctions::GetActorListSize},\
|
||||||
{"GetActorListAction", ActorFunctions::GetActorListAction},\
|
{"GetActorListAction", ActorFunctions::GetActorListAction},\
|
||||||
\
|
\
|
||||||
{"GetActorCell", ActorFunctions::GetActorCell},\
|
{"GetActorCell", ActorFunctions::GetActorCell},\
|
||||||
{"GetActorRefId", ActorFunctions::GetActorRefId},\
|
{"GetActorRefId", ActorFunctions::GetActorRefId},\
|
||||||
{"GetActorRefNumIndex", ActorFunctions::GetActorRefNumIndex},\
|
{"GetActorRefNumIndex", ActorFunctions::GetActorRefNumIndex},\
|
||||||
{"GetActorMpNum", ActorFunctions::GetActorMpNum},\
|
{"GetActorMpNum", ActorFunctions::GetActorMpNum},\
|
||||||
\
|
\
|
||||||
{"GetActorPosX", ActorFunctions::GetActorPosX},\
|
{"GetActorPosX", ActorFunctions::GetActorPosX},\
|
||||||
{"GetActorPosY", ActorFunctions::GetActorPosY},\
|
{"GetActorPosY", ActorFunctions::GetActorPosY},\
|
||||||
{"GetActorPosZ", ActorFunctions::GetActorPosZ},\
|
{"GetActorPosZ", ActorFunctions::GetActorPosZ},\
|
||||||
{"GetActorRotX", ActorFunctions::GetActorRotX},\
|
{"GetActorRotX", ActorFunctions::GetActorRotX},\
|
||||||
{"GetActorRotY", ActorFunctions::GetActorRotY},\
|
{"GetActorRotY", ActorFunctions::GetActorRotY},\
|
||||||
{"GetActorRotZ", ActorFunctions::GetActorRotZ},\
|
{"GetActorRotZ", ActorFunctions::GetActorRotZ},\
|
||||||
\
|
\
|
||||||
{"GetActorHealthBase", ActorFunctions::GetActorHealthBase},\
|
{"GetActorHealthBase", ActorFunctions::GetActorHealthBase},\
|
||||||
{"GetActorHealthCurrent", ActorFunctions::GetActorHealthCurrent},\
|
{"GetActorHealthCurrent", ActorFunctions::GetActorHealthCurrent},\
|
||||||
{"GetActorHealthModified", ActorFunctions::GetActorHealthModified},\
|
{"GetActorHealthModified", ActorFunctions::GetActorHealthModified},\
|
||||||
{"GetActorMagickaBase", ActorFunctions::GetActorMagickaBase},\
|
{"GetActorMagickaBase", ActorFunctions::GetActorMagickaBase},\
|
||||||
{"GetActorMagickaCurrent", ActorFunctions::GetActorMagickaCurrent},\
|
{"GetActorMagickaCurrent", ActorFunctions::GetActorMagickaCurrent},\
|
||||||
{"GetActorMagickaModified", ActorFunctions::GetActorMagickaModified},\
|
{"GetActorMagickaModified", ActorFunctions::GetActorMagickaModified},\
|
||||||
{"GetActorFatigueBase", ActorFunctions::GetActorFatigueBase},\
|
{"GetActorFatigueBase", ActorFunctions::GetActorFatigueBase},\
|
||||||
{"GetActorFatigueCurrent", ActorFunctions::GetActorFatigueCurrent},\
|
{"GetActorFatigueCurrent", ActorFunctions::GetActorFatigueCurrent},\
|
||||||
{"GetActorFatigueModified", ActorFunctions::GetActorFatigueModified},\
|
{"GetActorFatigueModified", ActorFunctions::GetActorFatigueModified},\
|
||||||
\
|
\
|
||||||
{"GetActorEquipmentItemRefId", ActorFunctions::GetActorEquipmentItemRefId},\
|
{"GetActorEquipmentItemRefId", ActorFunctions::GetActorEquipmentItemRefId},\
|
||||||
{"GetActorEquipmentItemCount", ActorFunctions::GetActorEquipmentItemCount},\
|
{"GetActorEquipmentItemCount", ActorFunctions::GetActorEquipmentItemCount},\
|
||||||
{"GetActorEquipmentItemCharge", ActorFunctions::GetActorEquipmentItemCharge},\
|
{"GetActorEquipmentItemCharge", ActorFunctions::GetActorEquipmentItemCharge},\
|
||||||
|
{"GetActorEquipmentItemEnchantmentCharge", ActorFunctions::GetActorEquipmentItemEnchantmentCharge},\
|
||||||
\
|
\
|
||||||
{"DoesActorHavePosition", ActorFunctions::DoesActorHavePosition},\
|
{"DoesActorHavePosition", ActorFunctions::DoesActorHavePosition},\
|
||||||
{"DoesActorHaveStatsDynamic", ActorFunctions::DoesActorHaveStatsDynamic},\
|
{"DoesActorHaveStatsDynamic", ActorFunctions::DoesActorHaveStatsDynamic},\
|
||||||
\
|
\
|
||||||
{"SetActorListCell", ActorFunctions::SetActorListCell},\
|
{"SetActorListCell", ActorFunctions::SetActorListCell},\
|
||||||
{"SetActorListAction", ActorFunctions::SetActorListAction},\
|
{"SetActorListAction", ActorFunctions::SetActorListAction},\
|
||||||
\
|
\
|
||||||
{"SetActorCell", ActorFunctions::SetActorCell},\
|
{"SetActorCell", ActorFunctions::SetActorCell},\
|
||||||
{"SetActorRefId", ActorFunctions::SetActorRefId},\
|
{"SetActorRefId", ActorFunctions::SetActorRefId},\
|
||||||
{"SetActorRefNumIndex", ActorFunctions::SetActorRefNumIndex},\
|
{"SetActorRefNumIndex", ActorFunctions::SetActorRefNumIndex},\
|
||||||
{"SetActorMpNum", ActorFunctions::SetActorMpNum},\
|
{"SetActorMpNum", ActorFunctions::SetActorMpNum},\
|
||||||
\
|
\
|
||||||
{"SetActorPosition", ActorFunctions::SetActorPosition},\
|
{"SetActorPosition", ActorFunctions::SetActorPosition},\
|
||||||
{"SetActorRotation", ActorFunctions::SetActorRotation},\
|
{"SetActorRotation", ActorFunctions::SetActorRotation},\
|
||||||
\
|
\
|
||||||
{"SetActorHealthBase", ActorFunctions::SetActorHealthBase},\
|
{"SetActorHealthBase", ActorFunctions::SetActorHealthBase},\
|
||||||
{"SetActorHealthCurrent", ActorFunctions::SetActorHealthCurrent},\
|
{"SetActorHealthCurrent", ActorFunctions::SetActorHealthCurrent},\
|
||||||
{"SetActorHealthModified", ActorFunctions::SetActorHealthModified},\
|
{"SetActorHealthModified", ActorFunctions::SetActorHealthModified},\
|
||||||
{"SetActorMagickaBase", ActorFunctions::SetActorMagickaBase},\
|
{"SetActorMagickaBase", ActorFunctions::SetActorMagickaBase},\
|
||||||
{"SetActorMagickaCurrent", ActorFunctions::SetActorMagickaCurrent},\
|
{"SetActorMagickaCurrent", ActorFunctions::SetActorMagickaCurrent},\
|
||||||
{"SetActorMagickaModified", ActorFunctions::SetActorMagickaModified},\
|
{"SetActorMagickaModified", ActorFunctions::SetActorMagickaModified},\
|
||||||
{"SetActorFatigueBase", ActorFunctions::SetActorFatigueBase},\
|
{"SetActorFatigueBase", ActorFunctions::SetActorFatigueBase},\
|
||||||
{"SetActorFatigueCurrent", ActorFunctions::SetActorFatigueCurrent},\
|
{"SetActorFatigueCurrent", ActorFunctions::SetActorFatigueCurrent},\
|
||||||
{"SetActorFatigueModified", ActorFunctions::SetActorFatigueModified},\
|
{"SetActorFatigueModified", ActorFunctions::SetActorFatigueModified},\
|
||||||
\
|
\
|
||||||
{"EquipActorItem", ActorFunctions::EquipActorItem},\
|
{"EquipActorItem", ActorFunctions::EquipActorItem},\
|
||||||
{"UnequipActorItem", ActorFunctions::UnequipActorItem},\
|
{"UnequipActorItem", ActorFunctions::UnequipActorItem},\
|
||||||
\
|
\
|
||||||
{"AddActor", ActorFunctions::AddActor},\
|
{"AddActor", ActorFunctions::AddActor},\
|
||||||
\
|
\
|
||||||
{"SendActorList", ActorFunctions::SendActorList},\
|
{"SendActorList", ActorFunctions::SendActorList},\
|
||||||
{"SendActorAuthority", ActorFunctions::SendActorAuthority},\
|
{"SendActorAuthority", ActorFunctions::SendActorAuthority},\
|
||||||
{"SendActorPosition", ActorFunctions::SendActorPosition},\
|
{"SendActorPosition", ActorFunctions::SendActorPosition},\
|
||||||
{"SendActorStatsDynamic", ActorFunctions::SendActorStatsDynamic},\
|
{"SendActorStatsDynamic", ActorFunctions::SendActorStatsDynamic},\
|
||||||
{"SendActorEquipment", ActorFunctions::SendActorEquipment},\
|
{"SendActorEquipment", ActorFunctions::SendActorEquipment},\
|
||||||
{"SendActorCellChange", ActorFunctions::SendActorCellChange}
|
{"SendActorCellChange", ActorFunctions::SendActorCellChange}
|
||||||
|
|
||||||
class ActorFunctions
|
class ActorFunctions
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -299,6 +300,16 @@ public:
|
||||||
*/
|
*/
|
||||||
static int GetActorEquipmentItemCharge(unsigned int i, unsigned short slot) noexcept;
|
static int GetActorEquipmentItemCharge(unsigned int i, unsigned short slot) noexcept;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Get the enchantment charge of the item in a certain slot of the equipment of the actor at a
|
||||||
|
* certain index in the read actor list.
|
||||||
|
*
|
||||||
|
* \param i The index of the actor.
|
||||||
|
* \param slot The slot of the equipment item.
|
||||||
|
* \return The enchantment charge.
|
||||||
|
*/
|
||||||
|
static int GetActorEquipmentItemEnchantmentCharge(unsigned int i, unsigned short slot) noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Check whether there is any positional data for the actor at a certain index in
|
* \brief Check whether there is any positional data for the actor at a certain index in
|
||||||
* the read actor list.
|
* the read actor list.
|
||||||
|
@ -478,9 +489,10 @@ public:
|
||||||
* \param refId The refId of the item.
|
* \param refId The refId of the item.
|
||||||
* \param count The count of the item.
|
* \param count The count of the item.
|
||||||
* \param charge The charge of the item.
|
* \param charge The charge of the item.
|
||||||
|
* \param enchantmentCharge The enchantment charge of the item.
|
||||||
* \return void
|
* \return void
|
||||||
*/
|
*/
|
||||||
static void EquipActorItem(unsigned short slot, const char* refId, unsigned int count, int charge) noexcept;
|
static void EquipActorItem(unsigned short slot, const char* refId, unsigned int count, int charge, int enchantmentCharge = -1) noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Unequip the item in a certain slot of the equipment of the temporary actor stored
|
* \brief Unequip the item in a certain slot of the equipment of the temporary actor stored
|
||||||
|
|
|
@ -35,7 +35,7 @@ unsigned int ItemFunctions::GetInventoryChangesSize(unsigned short pid) noexcept
|
||||||
return player->inventoryChanges.count;
|
return player->inventoryChanges.count;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemFunctions::EquipItem(unsigned short pid, unsigned short slot, const char *refId, unsigned int count, int charge) noexcept
|
void ItemFunctions::EquipItem(unsigned short pid, unsigned short slot, const char *refId, unsigned int count, int charge, int enchantmentCharge) noexcept
|
||||||
{
|
{
|
||||||
Player *player;
|
Player *player;
|
||||||
GET_PLAYER(pid, player,);
|
GET_PLAYER(pid, player,);
|
||||||
|
@ -43,6 +43,7 @@ void ItemFunctions::EquipItem(unsigned short pid, unsigned short slot, const cha
|
||||||
player->equipedItems[slot].refId = refId;
|
player->equipedItems[slot].refId = refId;
|
||||||
player->equipedItems[slot].count = count;
|
player->equipedItems[slot].count = count;
|
||||||
player->equipedItems[slot].charge = charge;
|
player->equipedItems[slot].charge = charge;
|
||||||
|
player->equipedItems[slot].enchantmentCharge = enchantmentCharge;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemFunctions::UnequipItem(unsigned short pid, unsigned short slot) noexcept
|
void ItemFunctions::UnequipItem(unsigned short pid, unsigned short slot) noexcept
|
||||||
|
@ -50,10 +51,10 @@ void ItemFunctions::UnequipItem(unsigned short pid, unsigned short slot) noexcep
|
||||||
Player *player;
|
Player *player;
|
||||||
GET_PLAYER(pid, player, );
|
GET_PLAYER(pid, player, );
|
||||||
|
|
||||||
ItemFunctions::EquipItem(pid, slot, "", 0, -1);
|
ItemFunctions::EquipItem(pid, slot, "", 0, -1, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemFunctions::AddItem(unsigned short pid, const char* refId, unsigned int count, int charge) noexcept
|
void ItemFunctions::AddItem(unsigned short pid, const char* refId, unsigned int count, int charge, int enchantmentCharge) noexcept
|
||||||
{
|
{
|
||||||
Player *player;
|
Player *player;
|
||||||
GET_PLAYER(pid, player, );
|
GET_PLAYER(pid, player, );
|
||||||
|
@ -62,6 +63,7 @@ void ItemFunctions::AddItem(unsigned short pid, const char* refId, unsigned int
|
||||||
item.refId = refId;
|
item.refId = refId;
|
||||||
item.count = count;
|
item.count = count;
|
||||||
item.charge = charge;
|
item.charge = charge;
|
||||||
|
item.enchantmentCharge = enchantmentCharge;
|
||||||
|
|
||||||
player->inventoryChanges.items.push_back(item);
|
player->inventoryChanges.items.push_back(item);
|
||||||
player->inventoryChanges.action = InventoryChanges::ADD;
|
player->inventoryChanges.action = InventoryChanges::ADD;
|
||||||
|
@ -115,6 +117,14 @@ int ItemFunctions::GetEquipmentItemCharge(unsigned short pid, unsigned short slo
|
||||||
return player->equipedItems[slot].charge;
|
return player->equipedItems[slot].charge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ItemFunctions::GetEquipmentItemEnchantmentCharge(unsigned short pid, unsigned short slot) noexcept
|
||||||
|
{
|
||||||
|
Player *player;
|
||||||
|
GET_PLAYER(pid, player, 0);
|
||||||
|
|
||||||
|
return player->equipedItems[slot].enchantmentCharge;
|
||||||
|
}
|
||||||
|
|
||||||
const char *ItemFunctions::GetInventoryItemRefId(unsigned short pid, unsigned int i) noexcept
|
const char *ItemFunctions::GetInventoryItemRefId(unsigned short pid, unsigned int i) noexcept
|
||||||
{
|
{
|
||||||
Player *player;
|
Player *player;
|
||||||
|
@ -142,6 +152,14 @@ int ItemFunctions::GetInventoryItemCharge(unsigned short pid, unsigned int i) no
|
||||||
return player->inventoryChanges.items.at(i).charge;
|
return player->inventoryChanges.items.at(i).charge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ItemFunctions::GetInventoryItemEnchantmentCharge(unsigned short pid, unsigned int i) noexcept
|
||||||
|
{
|
||||||
|
Player *player;
|
||||||
|
GET_PLAYER(pid, player, 0);
|
||||||
|
|
||||||
|
return player->inventoryChanges.items.at(i).enchantmentCharge;
|
||||||
|
}
|
||||||
|
|
||||||
void ItemFunctions::SendEquipment(unsigned short pid) noexcept
|
void ItemFunctions::SendEquipment(unsigned short pid) noexcept
|
||||||
{
|
{
|
||||||
Player *player;
|
Player *player;
|
||||||
|
|
|
@ -6,29 +6,31 @@
|
||||||
#define OPENMW_ITEMAPI_HPP
|
#define OPENMW_ITEMAPI_HPP
|
||||||
|
|
||||||
#define ITEMAPI \
|
#define ITEMAPI \
|
||||||
{"InitializeInventoryChanges", ItemFunctions::InitializeInventoryChanges},\
|
{"InitializeInventoryChanges", ItemFunctions::InitializeInventoryChanges},\
|
||||||
\
|
\
|
||||||
{"GetEquipmentSize", ItemFunctions::GetEquipmentSize},\
|
{"GetEquipmentSize", ItemFunctions::GetEquipmentSize},\
|
||||||
{"GetInventoryChangesSize", ItemFunctions::GetInventoryChangesSize},\
|
{"GetInventoryChangesSize", ItemFunctions::GetInventoryChangesSize},\
|
||||||
\
|
\
|
||||||
{"EquipItem", ItemFunctions::EquipItem},\
|
{"EquipItem", ItemFunctions::EquipItem},\
|
||||||
{"UnequipItem", ItemFunctions::UnequipItem},\
|
{"UnequipItem", ItemFunctions::UnequipItem},\
|
||||||
\
|
\
|
||||||
{"AddItem", ItemFunctions::AddItem},\
|
{"AddItem", ItemFunctions::AddItem},\
|
||||||
{"RemoveItem", ItemFunctions::RemoveItem},\
|
{"RemoveItem", ItemFunctions::RemoveItem},\
|
||||||
\
|
\
|
||||||
{"HasItemEquipped", ItemFunctions::HasItemEquipped},\
|
{"HasItemEquipped", ItemFunctions::HasItemEquipped},\
|
||||||
\
|
\
|
||||||
{"GetEquipmentItemRefId", ItemFunctions::GetEquipmentItemRefId},\
|
{"GetEquipmentItemRefId", ItemFunctions::GetEquipmentItemRefId},\
|
||||||
{"GetEquipmentItemCount", ItemFunctions::GetEquipmentItemCount},\
|
{"GetEquipmentItemCount", ItemFunctions::GetEquipmentItemCount},\
|
||||||
{"GetEquipmentItemCharge", ItemFunctions::GetEquipmentItemCharge},\
|
{"GetEquipmentItemCharge", ItemFunctions::GetEquipmentItemCharge},\
|
||||||
|
{"GetEquipmentItemEnchantmentCharge", ItemFunctions::GetEquipmentItemEnchantmentCharge},\
|
||||||
\
|
\
|
||||||
{"GetInventoryItemRefId", ItemFunctions::GetInventoryItemRefId},\
|
{"GetInventoryItemRefId", ItemFunctions::GetInventoryItemRefId},\
|
||||||
{"GetInventoryItemCount", ItemFunctions::GetInventoryItemCount},\
|
{"GetInventoryItemCount", ItemFunctions::GetInventoryItemCount},\
|
||||||
{"GetInventoryItemCharge", ItemFunctions::GetInventoryItemCharge},\
|
{"GetInventoryItemCharge", ItemFunctions::GetInventoryItemCharge},\
|
||||||
|
{"GetInventoryItemEnchantmentCharge", ItemFunctions::GetInventoryItemEnchantmentCharge},\
|
||||||
\
|
\
|
||||||
{"SendEquipment", ItemFunctions::SendEquipment},\
|
{"SendEquipment", ItemFunctions::SendEquipment},\
|
||||||
{"SendInventoryChanges", ItemFunctions::SendInventoryChanges}
|
{"SendInventoryChanges", ItemFunctions::SendInventoryChanges}
|
||||||
|
|
||||||
class ItemFunctions
|
class ItemFunctions
|
||||||
{
|
{
|
||||||
|
@ -39,10 +41,10 @@ public:
|
||||||
static int GetEquipmentSize() noexcept;
|
static int GetEquipmentSize() noexcept;
|
||||||
static unsigned int GetInventoryChangesSize(unsigned short pid) noexcept;
|
static unsigned int GetInventoryChangesSize(unsigned short pid) noexcept;
|
||||||
|
|
||||||
static void EquipItem(unsigned short pid, unsigned short slot, const char* refId, unsigned int count, int charge) noexcept;
|
static void EquipItem(unsigned short pid, unsigned short slot, const char* refId, unsigned int count, int charge, int enchantmentCharge = -1) noexcept;
|
||||||
static void UnequipItem(unsigned short pid, unsigned short slot) noexcept;
|
static void UnequipItem(unsigned short pid, unsigned short slot) noexcept;
|
||||||
|
|
||||||
static void AddItem(unsigned short pid, const char* refId, unsigned int count, int charge) noexcept;
|
static void AddItem(unsigned short pid, const char* refId, unsigned int count, int charge, int enchantmentCharge = -1) noexcept;
|
||||||
static void RemoveItem(unsigned short pid, const char* refId, unsigned short count) noexcept;
|
static void RemoveItem(unsigned short pid, const char* refId, unsigned short count) noexcept;
|
||||||
|
|
||||||
static bool HasItemEquipped(unsigned short pid, const char* refId);
|
static bool HasItemEquipped(unsigned short pid, const char* refId);
|
||||||
|
@ -50,10 +52,12 @@ public:
|
||||||
static const char *GetEquipmentItemRefId(unsigned short pid, unsigned short slot) noexcept;
|
static const char *GetEquipmentItemRefId(unsigned short pid, unsigned short slot) noexcept;
|
||||||
static int GetEquipmentItemCount(unsigned short pid, unsigned short slot) noexcept;
|
static int GetEquipmentItemCount(unsigned short pid, unsigned short slot) noexcept;
|
||||||
static int GetEquipmentItemCharge(unsigned short pid, unsigned short slot) noexcept;
|
static int GetEquipmentItemCharge(unsigned short pid, unsigned short slot) noexcept;
|
||||||
|
static int GetEquipmentItemEnchantmentCharge(unsigned short pid, unsigned short slot) noexcept;
|
||||||
|
|
||||||
static const char *GetInventoryItemRefId(unsigned short pid, unsigned int i) noexcept;
|
static const char *GetInventoryItemRefId(unsigned short pid, unsigned int i) noexcept;
|
||||||
static int GetInventoryItemCount(unsigned short pid, unsigned int i) noexcept;
|
static int GetInventoryItemCount(unsigned short pid, unsigned int i) noexcept;
|
||||||
static int GetInventoryItemCharge(unsigned short pid, unsigned int i) noexcept;
|
static int GetInventoryItemCharge(unsigned short pid, unsigned int i) noexcept;
|
||||||
|
static int GetInventoryItemEnchantmentCharge(unsigned short pid, unsigned int i) noexcept;
|
||||||
|
|
||||||
static void SendEquipment(unsigned short pid) noexcept;
|
static void SendEquipment(unsigned short pid) noexcept;
|
||||||
static void SendInventoryChanges(unsigned short pid, bool toOthers = false) noexcept;
|
static void SendInventoryChanges(unsigned short pid, bool toOthers = false) noexcept;
|
||||||
|
|
|
@ -69,6 +69,11 @@ int WorldFunctions::GetObjectCharge(unsigned int i) noexcept
|
||||||
return readEvent->worldObjects.at(i).charge;
|
return readEvent->worldObjects.at(i).charge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int WorldFunctions::GetObjectEnchantmentCharge(unsigned int i) noexcept
|
||||||
|
{
|
||||||
|
return readEvent->worldObjects.at(i).enchantmentCharge;
|
||||||
|
}
|
||||||
|
|
||||||
int WorldFunctions::GetObjectGoldValue(unsigned int i) noexcept
|
int WorldFunctions::GetObjectGoldValue(unsigned int i) noexcept
|
||||||
{
|
{
|
||||||
return readEvent->worldObjects.at(i).goldValue;
|
return readEvent->worldObjects.at(i).goldValue;
|
||||||
|
@ -147,6 +152,12 @@ int WorldFunctions::GetContainerItemCharge(unsigned int objectIndex, unsigned in
|
||||||
.containerItems.at(itemIndex).charge;
|
.containerItems.at(itemIndex).charge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int WorldFunctions::GetContainerItemEnchantmentCharge(unsigned int objectIndex, unsigned int itemIndex) noexcept
|
||||||
|
{
|
||||||
|
return readEvent->worldObjects.at(objectIndex)
|
||||||
|
.containerItems.at(itemIndex).enchantmentCharge;
|
||||||
|
}
|
||||||
|
|
||||||
int WorldFunctions::GetContainerItemActionCount(unsigned int objectIndex, unsigned int itemIndex) noexcept
|
int WorldFunctions::GetContainerItemActionCount(unsigned int objectIndex, unsigned int itemIndex) noexcept
|
||||||
{
|
{
|
||||||
return readEvent->worldObjects.at(objectIndex)
|
return readEvent->worldObjects.at(objectIndex)
|
||||||
|
@ -193,6 +204,11 @@ void WorldFunctions::SetObjectCharge(int charge) noexcept
|
||||||
tempWorldObject.charge = charge;
|
tempWorldObject.charge = charge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WorldFunctions::SetObjectEnchantmentCharge(int enchantmentCharge) noexcept
|
||||||
|
{
|
||||||
|
tempWorldObject.enchantmentCharge = enchantmentCharge;
|
||||||
|
}
|
||||||
|
|
||||||
void WorldFunctions::SetObjectGoldValue(int goldValue) noexcept
|
void WorldFunctions::SetObjectGoldValue(int goldValue) noexcept
|
||||||
{
|
{
|
||||||
tempWorldObject.goldValue = goldValue;
|
tempWorldObject.goldValue = goldValue;
|
||||||
|
@ -266,6 +282,11 @@ void WorldFunctions::SetContainerItemCharge(int charge) noexcept
|
||||||
tempContainerItem.charge = charge;
|
tempContainerItem.charge = charge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WorldFunctions::SetContainerItemEnchantmentCharge(int enchantmentCharge) noexcept
|
||||||
|
{
|
||||||
|
tempContainerItem.enchantmentCharge = enchantmentCharge;
|
||||||
|
}
|
||||||
|
|
||||||
void WorldFunctions::AddWorldObject() noexcept
|
void WorldFunctions::AddWorldObject() noexcept
|
||||||
{
|
{
|
||||||
writeEvent.worldObjects.push_back(tempWorldObject);
|
writeEvent.worldObjects.push_back(tempWorldObject);
|
||||||
|
|
|
@ -2,78 +2,82 @@
|
||||||
#define OPENMW_WORLDAPI_HPP
|
#define OPENMW_WORLDAPI_HPP
|
||||||
|
|
||||||
#define WORLDAPI \
|
#define WORLDAPI \
|
||||||
{"ReadLastEvent", WorldFunctions::ReadLastEvent},\
|
{"ReadLastEvent", WorldFunctions::ReadLastEvent},\
|
||||||
{"InitializeEvent", WorldFunctions::InitializeEvent},\
|
{"InitializeEvent", WorldFunctions::InitializeEvent},\
|
||||||
\
|
\
|
||||||
{"GetObjectChangesSize", WorldFunctions::GetObjectChangesSize},\
|
{"GetObjectChangesSize", WorldFunctions::GetObjectChangesSize},\
|
||||||
{"GetEventAction", WorldFunctions::GetEventAction},\
|
{"GetEventAction", WorldFunctions::GetEventAction},\
|
||||||
\
|
\
|
||||||
{"GetObjectRefId", WorldFunctions::GetObjectRefId},\
|
{"GetObjectRefId", WorldFunctions::GetObjectRefId},\
|
||||||
{"GetObjectRefNumIndex", WorldFunctions::GetObjectRefNumIndex},\
|
{"GetObjectRefNumIndex", WorldFunctions::GetObjectRefNumIndex},\
|
||||||
{"GetObjectMpNum", WorldFunctions::GetObjectMpNum},\
|
{"GetObjectMpNum", WorldFunctions::GetObjectMpNum},\
|
||||||
{"GetObjectCount", WorldFunctions::GetObjectCount},\
|
{"GetObjectCount", WorldFunctions::GetObjectCount},\
|
||||||
{"GetObjectCharge", WorldFunctions::GetObjectCharge},\
|
{"GetObjectCharge", WorldFunctions::GetObjectCharge},\
|
||||||
{"GetObjectGoldValue", WorldFunctions::GetObjectGoldValue},\
|
{"GetObjectEnchantmentCharge", WorldFunctions::GetObjectEnchantmentCharge},\
|
||||||
{"GetObjectScale", WorldFunctions::GetObjectScale},\
|
{"GetObjectGoldValue", WorldFunctions::GetObjectGoldValue},\
|
||||||
{"GetObjectState", WorldFunctions::GetObjectState},\
|
{"GetObjectScale", WorldFunctions::GetObjectScale},\
|
||||||
{"GetObjectDoorState", WorldFunctions::GetObjectDoorState},\
|
{"GetObjectState", WorldFunctions::GetObjectState},\
|
||||||
{"GetObjectLockLevel", WorldFunctions::GetObjectLockLevel},\
|
{"GetObjectDoorState", WorldFunctions::GetObjectDoorState},\
|
||||||
{"GetObjectPosX", WorldFunctions::GetObjectPosX},\
|
{"GetObjectLockLevel", WorldFunctions::GetObjectLockLevel},\
|
||||||
{"GetObjectPosY", WorldFunctions::GetObjectPosY},\
|
{"GetObjectPosX", WorldFunctions::GetObjectPosX},\
|
||||||
{"GetObjectPosZ", WorldFunctions::GetObjectPosZ},\
|
{"GetObjectPosY", WorldFunctions::GetObjectPosY},\
|
||||||
{"GetObjectRotX", WorldFunctions::GetObjectRotX},\
|
{"GetObjectPosZ", WorldFunctions::GetObjectPosZ},\
|
||||||
{"GetObjectRotY", WorldFunctions::GetObjectRotY},\
|
{"GetObjectRotX", WorldFunctions::GetObjectRotX},\
|
||||||
{"GetObjectRotZ", WorldFunctions::GetObjectRotZ},\
|
{"GetObjectRotY", WorldFunctions::GetObjectRotY},\
|
||||||
|
{"GetObjectRotZ", WorldFunctions::GetObjectRotZ},\
|
||||||
\
|
\
|
||||||
{"GetContainerChangesSize", WorldFunctions::GetContainerChangesSize},\
|
{"GetContainerChangesSize", WorldFunctions::GetContainerChangesSize},\
|
||||||
{"GetContainerItemRefId", WorldFunctions::GetContainerItemRefId},\
|
{"GetContainerItemRefId", WorldFunctions::GetContainerItemRefId},\
|
||||||
{"GetContainerItemCount", WorldFunctions::GetContainerItemCount},\
|
{"GetContainerItemCount", WorldFunctions::GetContainerItemCount},\
|
||||||
{"GetContainerItemCharge", WorldFunctions::GetContainerItemCharge},\
|
{"GetContainerItemCharge", WorldFunctions::GetContainerItemCharge},\
|
||||||
{"GetContainerItemActionCount", WorldFunctions::GetContainerItemActionCount},\
|
{"GetContainerItemEnchantmentCharge", WorldFunctions::GetContainerItemEnchantmentCharge},\
|
||||||
|
{"GetContainerItemActionCount", WorldFunctions::GetContainerItemActionCount},\
|
||||||
\
|
\
|
||||||
{"SetEventCell", WorldFunctions::SetEventCell},\
|
{"SetEventCell", WorldFunctions::SetEventCell},\
|
||||||
{"SetEventAction", WorldFunctions::SetEventAction},\
|
{"SetEventAction", WorldFunctions::SetEventAction},\
|
||||||
{"SetEventConsoleCommand", WorldFunctions::SetEventConsoleCommand},\
|
{"SetEventConsoleCommand", WorldFunctions::SetEventConsoleCommand},\
|
||||||
\
|
\
|
||||||
{"SetObjectRefId", WorldFunctions::SetObjectRefId},\
|
{"SetObjectRefId", WorldFunctions::SetObjectRefId},\
|
||||||
{"SetObjectRefNumIndex", WorldFunctions::SetObjectRefNumIndex},\
|
{"SetObjectRefNumIndex", WorldFunctions::SetObjectRefNumIndex},\
|
||||||
{"SetObjectMpNum", WorldFunctions::SetObjectMpNum},\
|
{"SetObjectMpNum", WorldFunctions::SetObjectMpNum},\
|
||||||
{"SetObjectCount", WorldFunctions::SetObjectCount},\
|
{"SetObjectCount", WorldFunctions::SetObjectCount},\
|
||||||
{"SetObjectCharge", WorldFunctions::SetObjectCharge},\
|
{"SetObjectCharge", WorldFunctions::SetObjectCharge},\
|
||||||
{"SetObjectGoldValue", WorldFunctions::SetObjectGoldValue},\
|
{"SetObjectEnchantmentCharge", WorldFunctions::SetObjectEnchantmentCharge},\
|
||||||
{"SetObjectScale", WorldFunctions::SetObjectScale},\
|
{"SetObjectGoldValue", WorldFunctions::SetObjectGoldValue},\
|
||||||
{"SetObjectState", WorldFunctions::SetObjectState},\
|
{"SetObjectScale", WorldFunctions::SetObjectScale},\
|
||||||
{"SetObjectDoorState", WorldFunctions::SetObjectDoorState},\
|
{"SetObjectState", WorldFunctions::SetObjectState},\
|
||||||
{"SetObjectLockLevel", WorldFunctions::SetObjectLockLevel},\
|
{"SetObjectDoorState", WorldFunctions::SetObjectDoorState},\
|
||||||
{"SetObjectDisarmState", WorldFunctions::SetObjectDisarmState},\
|
{"SetObjectLockLevel", WorldFunctions::SetObjectLockLevel},\
|
||||||
{"SetObjectMasterState", WorldFunctions::SetObjectMasterState},\
|
{"SetObjectDisarmState", WorldFunctions::SetObjectDisarmState},\
|
||||||
{"SetObjectPosition", WorldFunctions::SetObjectPosition},\
|
{"SetObjectMasterState", WorldFunctions::SetObjectMasterState},\
|
||||||
{"SetObjectRotation", WorldFunctions::SetObjectRotation},\
|
{"SetObjectPosition", WorldFunctions::SetObjectPosition},\
|
||||||
{"SetPlayerAsObject", WorldFunctions::SetPlayerAsObject},\
|
{"SetObjectRotation", WorldFunctions::SetObjectRotation},\
|
||||||
|
{"SetPlayerAsObject", WorldFunctions::SetPlayerAsObject},\
|
||||||
\
|
\
|
||||||
{"SetContainerItemRefId", WorldFunctions::SetContainerItemRefId},\
|
{"SetContainerItemRefId", WorldFunctions::SetContainerItemRefId},\
|
||||||
{"SetContainerItemCount", WorldFunctions::SetContainerItemCount},\
|
{"SetContainerItemCount", WorldFunctions::SetContainerItemCount},\
|
||||||
{"SetContainerItemCharge", WorldFunctions::SetContainerItemCharge},\
|
{"SetContainerItemCharge", WorldFunctions::SetContainerItemCharge},\
|
||||||
|
{"SetContainerItemEnchantmentCharge", WorldFunctions::SetContainerItemEnchantmentCharge},\
|
||||||
\
|
\
|
||||||
{"AddWorldObject", WorldFunctions::AddWorldObject},\
|
{"AddWorldObject", WorldFunctions::AddWorldObject},\
|
||||||
{"AddContainerItem", WorldFunctions::AddContainerItem},\
|
{"AddContainerItem", WorldFunctions::AddContainerItem},\
|
||||||
\
|
\
|
||||||
{"SendObjectPlace", WorldFunctions::SendObjectPlace},\
|
{"SendObjectPlace", WorldFunctions::SendObjectPlace},\
|
||||||
{"SendObjectSpawn", WorldFunctions::SendObjectSpawn},\
|
{"SendObjectSpawn", WorldFunctions::SendObjectSpawn},\
|
||||||
{"SendObjectDelete", WorldFunctions::SendObjectDelete},\
|
{"SendObjectDelete", WorldFunctions::SendObjectDelete},\
|
||||||
{"SendObjectLock", WorldFunctions::SendObjectLock},\
|
{"SendObjectLock", WorldFunctions::SendObjectLock},\
|
||||||
{"SendObjectTrap", WorldFunctions::SendObjectTrap},\
|
{"SendObjectTrap", WorldFunctions::SendObjectTrap},\
|
||||||
{"SendObjectScale", WorldFunctions::SendObjectScale},\
|
{"SendObjectScale", WorldFunctions::SendObjectScale},\
|
||||||
{"SendObjectState", WorldFunctions::SendObjectState},\
|
{"SendObjectState", WorldFunctions::SendObjectState},\
|
||||||
{"SendDoorState", WorldFunctions::SendDoorState},\
|
{"SendDoorState", WorldFunctions::SendDoorState},\
|
||||||
{"SendContainer", WorldFunctions::SendContainer},\
|
{"SendContainer", WorldFunctions::SendContainer},\
|
||||||
{"SendConsoleCommand", WorldFunctions::SendConsoleCommand},\
|
{"SendConsoleCommand", WorldFunctions::SendConsoleCommand},\
|
||||||
\
|
\
|
||||||
{"SetHour", WorldFunctions::SetHour},\
|
{"SetHour", WorldFunctions::SetHour},\
|
||||||
{"SetMonth", WorldFunctions::SetMonth},\
|
{"SetMonth", WorldFunctions::SetMonth},\
|
||||||
{"SetDay", WorldFunctions::SetDay}
|
{"SetDay", WorldFunctions::SetDay}
|
||||||
|
|
||||||
class WorldFunctions
|
class WorldFunctions
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -148,6 +152,14 @@ public:
|
||||||
*/
|
*/
|
||||||
static int GetObjectCharge(unsigned int i) noexcept;
|
static int GetObjectCharge(unsigned int i) noexcept;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Get the enchantment charge of the object at a certain index in the read event's object changes.
|
||||||
|
*
|
||||||
|
* \param i The index of the object.
|
||||||
|
* \return The enchantment charge.
|
||||||
|
*/
|
||||||
|
static int GetObjectEnchantmentCharge(unsigned int i) noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Get the gold value of the object at a certain index in the read event's object
|
* \brief Get the gold value of the object at a certain index in the read event's object
|
||||||
* changes.
|
* changes.
|
||||||
|
@ -287,6 +299,16 @@ public:
|
||||||
*/
|
*/
|
||||||
static int GetContainerItemCharge(unsigned int objectIndex, unsigned int itemIndex) noexcept;
|
static int GetContainerItemCharge(unsigned int objectIndex, unsigned int itemIndex) noexcept;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Get the enchantment charge of the container item at a certain itemIndex in the container changes
|
||||||
|
* of the object at a certain objectIndex in the read event's object changes.
|
||||||
|
*
|
||||||
|
* \param objectIndex The index of the object.
|
||||||
|
* \param itemIndex The index of the container item.
|
||||||
|
* \return The enchantment charge.
|
||||||
|
*/
|
||||||
|
static int GetContainerItemEnchantmentCharge(unsigned int objectIndex, unsigned int itemIndex) noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Get the action count of the container item at a certain itemIndex in the container
|
* \brief Get the action count of the container item at a certain itemIndex in the container
|
||||||
* changes of the object at a certain objectIndex in the read event's object changes.
|
* changes of the object at a certain objectIndex in the read event's object changes.
|
||||||
|
@ -384,6 +406,16 @@ public:
|
||||||
*/
|
*/
|
||||||
static void SetObjectCharge(int charge) noexcept;
|
static void SetObjectCharge(int charge) noexcept;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Set the enchantment charge of the temporary world object stored on the server.
|
||||||
|
*
|
||||||
|
* Object durabilities are set through this value.
|
||||||
|
*
|
||||||
|
* \param charge The enchantment charge.
|
||||||
|
* \return void
|
||||||
|
*/
|
||||||
|
static void SetObjectEnchantmentCharge(int enchantmentCharge) noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Set the gold value of the temporary world object stored on the server.
|
* \brief Set the gold value of the temporary world object stored on the server.
|
||||||
*
|
*
|
||||||
|
@ -504,6 +536,14 @@ public:
|
||||||
*/
|
*/
|
||||||
static void SetContainerItemCharge(int charge) noexcept;
|
static void SetContainerItemCharge(int charge) noexcept;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Set the enchantment charge of the temporary container item stored on the server.
|
||||||
|
*
|
||||||
|
* \param charge The enchantment charge.
|
||||||
|
* \return void
|
||||||
|
*/
|
||||||
|
static void SetContainerItemEnchantmentCharge(int enchantmentCharge) noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Add a copy of the server's temporary world object to the server's temporary event.
|
* \brief Add a copy of the server's temporary world object to the server's temporary event.
|
||||||
*
|
*
|
||||||
|
|
|
@ -450,6 +450,8 @@ void LocalPlayer::updateEquipment(bool forceUpdate)
|
||||||
|
|
||||||
item.refId = it->getCellRef().getRefId();
|
item.refId = it->getCellRef().getRefId();
|
||||||
item.charge = it->getCellRef().getCharge();
|
item.charge = it->getCellRef().getCharge();
|
||||||
|
item.enchantmentCharge = it->getCellRef().getEnchantmentCharge();
|
||||||
|
|
||||||
if (slot == MWWorld::InventoryStore::Slot_CarriedRight)
|
if (slot == MWWorld::InventoryStore::Slot_CarriedRight)
|
||||||
{
|
{
|
||||||
MWMechanics::WeaponType weaptype;
|
MWMechanics::WeaponType weaptype;
|
||||||
|
@ -467,7 +469,8 @@ void LocalPlayer::updateEquipment(bool forceUpdate)
|
||||||
equipmentChanged = true;
|
equipmentChanged = true;
|
||||||
item.refId = "";
|
item.refId = "";
|
||||||
item.count = 0;
|
item.count = 0;
|
||||||
item.charge = 0;
|
item.charge = -1;
|
||||||
|
item.enchantmentCharge = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -496,6 +499,7 @@ void LocalPlayer::updateInventory(bool forceUpdate)
|
||||||
return true;
|
return true;
|
||||||
item.count = iter.getRefData().getCount();
|
item.count = iter.getRefData().getCount();
|
||||||
item.charge = iter.getCellRef().getCharge();
|
item.charge = iter.getCellRef().getCharge();
|
||||||
|
item.enchantmentCharge = iter.getCellRef().getEnchantmentCharge();
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -671,6 +675,9 @@ void LocalPlayer::addItems()
|
||||||
MWWorld::Ptr itemPtr = *ptrStore.add(item.refId, item.count, ptrPlayer);
|
MWWorld::Ptr itemPtr = *ptrStore.add(item.refId, item.count, ptrPlayer);
|
||||||
if (item.charge != -1)
|
if (item.charge != -1)
|
||||||
itemPtr.getCellRef().setCharge(item.charge);
|
itemPtr.getCellRef().setCharge(item.charge);
|
||||||
|
|
||||||
|
if (item.enchantmentCharge != -1)
|
||||||
|
itemPtr.getCellRef().setEnchantmentCharge(item.enchantmentCharge);
|
||||||
}
|
}
|
||||||
catch (std::exception&)
|
catch (std::exception&)
|
||||||
{
|
{
|
||||||
|
@ -1188,6 +1195,7 @@ void LocalPlayer::sendInventory()
|
||||||
|
|
||||||
item.count = iter.getRefData().getCount();
|
item.count = iter.getRefData().getCount();
|
||||||
item.charge = iter.getCellRef().getCharge();
|
item.charge = iter.getCellRef().getCharge();
|
||||||
|
item.enchantmentCharge = iter.getCellRef().getEnchantmentCharge();
|
||||||
|
|
||||||
inventoryChanges.items.push_back(item);
|
inventoryChanges.items.push_back(item);
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,6 +95,9 @@ void WorldEvent::editContainers(MWWorld::CellStore* cellStore)
|
||||||
if (containerItem.charge > -1)
|
if (containerItem.charge > -1)
|
||||||
newPtr.getCellRef().setCharge(containerItem.charge);
|
newPtr.getCellRef().setCharge(containerItem.charge);
|
||||||
|
|
||||||
|
if (containerItem.enchantmentCharge > -1)
|
||||||
|
newPtr.getCellRef().setEnchantmentCharge(containerItem.enchantmentCharge);
|
||||||
|
|
||||||
containerStore.add(newPtr, containerItem.count, ownerPtr, true);
|
containerStore.add(newPtr, containerItem.count, ownerPtr, true);
|
||||||
}
|
}
|
||||||
else if (action == BaseEvent::REMOVE)
|
else if (action == BaseEvent::REMOVE)
|
||||||
|
@ -105,8 +108,9 @@ void WorldEvent::editContainers(MWWorld::CellStore* cellStore)
|
||||||
{
|
{
|
||||||
if (Misc::StringUtils::ciEqual(ptr.getCellRef().getRefId(), containerItem.refId))
|
if (Misc::StringUtils::ciEqual(ptr.getCellRef().getRefId(), containerItem.refId))
|
||||||
{
|
{
|
||||||
if (ptr.getCellRef().getCharge() == containerItem.charge &&
|
if (ptr.getRefData().getCount() == containerItem.count &&
|
||||||
ptr.getRefData().getCount() == containerItem.count)
|
ptr.getCellRef().getCharge() == containerItem.charge &&
|
||||||
|
ptr.getCellRef().getEnchantmentCharge() == containerItem.enchantmentCharge)
|
||||||
{
|
{
|
||||||
// Is this an actor's container? If so, unequip this item if it was equipped
|
// Is this an actor's container? If so, unequip this item if it was equipped
|
||||||
if (ptrFound.getClass().isActor())
|
if (ptrFound.getClass().isActor())
|
||||||
|
@ -153,8 +157,8 @@ void WorldEvent::placeObjects(MWWorld::CellStore* cellStore)
|
||||||
{
|
{
|
||||||
for (const auto &worldObject : worldObjects)
|
for (const auto &worldObject : worldObjects)
|
||||||
{
|
{
|
||||||
LOG_APPEND(Log::LOG_VERBOSE, "- cellRef: %s, %i, %i, charge: %i, count: %i", worldObject.refId.c_str(),
|
LOG_APPEND(Log::LOG_VERBOSE, "- cellRef: %s, %i, %i, count: %i, charge: %i, enchantmentCharge: %i", worldObject.refId.c_str(),
|
||||||
worldObject.refNumIndex, worldObject.mpNum, worldObject.charge, worldObject.count);
|
worldObject.refNumIndex, worldObject.mpNum, worldObject.count, worldObject.charge, worldObject.enchantmentCharge);
|
||||||
|
|
||||||
MWWorld::Ptr ptrFound = cellStore->searchExact(0, worldObject.mpNum);
|
MWWorld::Ptr ptrFound = cellStore->searchExact(0, worldObject.mpNum);
|
||||||
|
|
||||||
|
@ -164,11 +168,14 @@ void WorldEvent::placeObjects(MWWorld::CellStore* cellStore)
|
||||||
MWWorld::ManualRef ref(MWBase::Environment::get().getWorld()->getStore(), worldObject.refId, 1);
|
MWWorld::ManualRef ref(MWBase::Environment::get().getWorld()->getStore(), worldObject.refId, 1);
|
||||||
MWWorld::Ptr newPtr = ref.getPtr();
|
MWWorld::Ptr newPtr = ref.getPtr();
|
||||||
|
|
||||||
|
if (worldObject.count > 1)
|
||||||
|
newPtr.getRefData().setCount(worldObject.count);
|
||||||
|
|
||||||
if (worldObject.charge > -1)
|
if (worldObject.charge > -1)
|
||||||
newPtr.getCellRef().setCharge(worldObject.charge);
|
newPtr.getCellRef().setCharge(worldObject.charge);
|
||||||
|
|
||||||
if (worldObject.count > 1)
|
if (worldObject.enchantmentCharge > -1)
|
||||||
newPtr.getRefData().setCount(worldObject.count);
|
newPtr.getCellRef().setEnchantmentCharge(worldObject.enchantmentCharge);
|
||||||
|
|
||||||
newPtr.getCellRef().setGoldValue(worldObject.goldValue);
|
newPtr.getCellRef().setGoldValue(worldObject.goldValue);
|
||||||
newPtr = MWBase::Environment::get().getWorld()->placeObject(newPtr, cellStore, worldObject.position);
|
newPtr = MWBase::Environment::get().getWorld()->placeObject(newPtr, cellStore, worldObject.position);
|
||||||
|
@ -580,6 +587,7 @@ void WorldEvent::addObjectPlace(const MWWorld::Ptr& ptr)
|
||||||
worldObject.refNumIndex = ptr.getCellRef().getRefNum().mIndex;
|
worldObject.refNumIndex = ptr.getCellRef().getRefNum().mIndex;
|
||||||
worldObject.mpNum = 0;
|
worldObject.mpNum = 0;
|
||||||
worldObject.charge = ptr.getCellRef().getCharge();
|
worldObject.charge = ptr.getCellRef().getCharge();
|
||||||
|
worldObject.enchantmentCharge = ptr.getCellRef().getEnchantmentCharge();
|
||||||
|
|
||||||
// Make sure we send the RefData position instead of the CellRef one, because that's what
|
// Make sure we send the RefData position instead of the CellRef one, because that's what
|
||||||
// we actually see on this client
|
// we actually see on this client
|
||||||
|
@ -944,6 +952,7 @@ void WorldEvent::sendContainers(MWWorld::CellStore* cellStore)
|
||||||
containerItem.refId = itemPtr.getCellRef().getRefId();
|
containerItem.refId = itemPtr.getCellRef().getRefId();
|
||||||
containerItem.count = itemPtr.getRefData().getCount();
|
containerItem.count = itemPtr.getRefData().getCount();
|
||||||
containerItem.charge = itemPtr.getCellRef().getCharge();
|
containerItem.charge = itemPtr.getCellRef().getCharge();
|
||||||
|
containerItem.enchantmentCharge = itemPtr.getCellRef().getEnchantmentCharge();
|
||||||
|
|
||||||
worldObject.containerItems.push_back(containerItem);
|
worldObject.containerItems.push_back(containerItem);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,12 +12,13 @@ namespace mwmp
|
||||||
std::string refId;
|
std::string refId;
|
||||||
int count;
|
int count;
|
||||||
int charge;
|
int charge;
|
||||||
|
int enchantmentCharge;
|
||||||
|
|
||||||
int actionCount;
|
int actionCount;
|
||||||
|
|
||||||
inline bool operator==(const ContainerItem& rhs)
|
inline bool operator==(const ContainerItem& rhs)
|
||||||
{
|
{
|
||||||
return refId == rhs.refId && count == rhs.count && charge == rhs.charge;
|
return refId == rhs.refId && count == rhs.count && charge == rhs.charge && enchantmentCharge == rhs.enchantmentCharge;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -28,6 +29,7 @@ namespace mwmp
|
||||||
int mpNum;
|
int mpNum;
|
||||||
int count;
|
int count;
|
||||||
int charge;
|
int charge;
|
||||||
|
int enchantmentCharge;
|
||||||
int goldValue;
|
int goldValue;
|
||||||
|
|
||||||
ESM::Position position;
|
ESM::Position position;
|
||||||
|
|
|
@ -12,10 +12,11 @@ namespace mwmp
|
||||||
std::string refId;
|
std::string refId;
|
||||||
int count;
|
int count;
|
||||||
int charge;
|
int charge;
|
||||||
|
int enchantmentCharge;
|
||||||
|
|
||||||
inline bool operator==(const Item& rhs)
|
inline bool operator==(const Item& rhs)
|
||||||
{
|
{
|
||||||
return refId == rhs.refId && count == rhs.count && charge == rhs.charge;
|
return refId == rhs.refId && count == rhs.count && charge == rhs.charge && enchantmentCharge == rhs.enchantmentCharge;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -16,5 +16,6 @@ void PacketActorEquipment::Actor(BaseActor &actor, bool send)
|
||||||
RW(actor.equipedItems[j].refId, send);
|
RW(actor.equipedItems[j].refId, send);
|
||||||
RW(actor.equipedItems[j].count, send);
|
RW(actor.equipedItems[j].count, send);
|
||||||
RW(actor.equipedItems[j].charge, send);
|
RW(actor.equipedItems[j].charge, send);
|
||||||
|
RW(actor.equipedItems[j].enchantmentCharge, send);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ void PacketPlayerInventory::Packet(RakNet::BitStream *bs, bool send)
|
||||||
RW(item.refId, send, 1);
|
RW(item.refId, send, 1);
|
||||||
RW(item.count, send);
|
RW(item.count, send);
|
||||||
RW(item.charge, send);
|
RW(item.charge, send);
|
||||||
|
RW(item.enchantmentCharge, send);
|
||||||
|
|
||||||
if (!send)
|
if (!send)
|
||||||
player->inventoryChanges.items.push_back(item);
|
player->inventoryChanges.items.push_back(item);
|
||||||
|
|
|
@ -48,6 +48,7 @@ void PacketContainer::Packet(RakNet::BitStream *bs, bool send)
|
||||||
RW(containerItem.refId, send);
|
RW(containerItem.refId, send);
|
||||||
RW(containerItem.count, send);
|
RW(containerItem.count, send);
|
||||||
RW(containerItem.charge, send);
|
RW(containerItem.charge, send);
|
||||||
|
RW(containerItem.enchantmentCharge, send);
|
||||||
RW(containerItem.actionCount, send);
|
RW(containerItem.actionCount, send);
|
||||||
|
|
||||||
if (!send)
|
if (!send)
|
||||||
|
|
|
@ -14,6 +14,7 @@ void PacketObjectPlace::Object(WorldObject &worldObject, bool send)
|
||||||
WorldPacket::Object(worldObject, send);
|
WorldPacket::Object(worldObject, send);
|
||||||
RW(worldObject.count, send);
|
RW(worldObject.count, send);
|
||||||
RW(worldObject.charge, send);
|
RW(worldObject.charge, send);
|
||||||
|
RW(worldObject.enchantmentCharge, send);
|
||||||
RW(worldObject.goldValue, send);
|
RW(worldObject.goldValue, send);
|
||||||
RW(worldObject.position, send);
|
RW(worldObject.position, send);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue