Skip to content

Commit 31143bd

Browse files
committed
Various SQLite Virtual Table Experiments
1 parent f5bbb38 commit 31143bd

11 files changed

+2103
-23
lines changed

NWNXLib/API/API/CNWSMessage.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ struct CNWSMessage : CNWMessage
5656

5757
CNWSMessage();
5858
~CNWSMessage();
59+
static BOOL GetLocStringServer(uint32_t dwPlayerID, CExoLocString sFirstLoc, CExoLocString sLastLoc, CExoString& sOut, float& fSoundLength, uint8_t nGender = 0);
5960
OBJECT_ID ReadOBJECTIDServer();
6061
void WriteCExoLocStringServer(const CExoLocString & sLocString, uint8_t nGender = 0);
6162
void WriteOBJECTIDServer(OBJECT_ID oidObjectId);

NWNXLib/Utils.cpp

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -548,11 +548,29 @@ int32_t NWScriptObjectTypeToEngineObjectType(int32_t nwscriptObjectType)
548548
}
549549
}
550550

551+
int32_t EngineObjectTypeToNWScriptObjectType(int32_t engineObjectType)
552+
{
553+
switch (engineObjectType)
554+
{
555+
case Constants::ObjectType::Creature: return 1;
556+
case Constants::ObjectType::Item: return 2;
557+
case Constants::ObjectType::Trigger: return 4;
558+
case Constants::ObjectType::Door: return 8;
559+
case Constants::ObjectType::AreaOfEffect: return 16;
560+
case Constants::ObjectType::Waypoint: return 32;
561+
case Constants::ObjectType::Placeable: return 64;
562+
case Constants::ObjectType::Store: return 128;
563+
case Constants::ObjectType::Encounter: return 256;
564+
case Constants::ObjectType::Sound: return 32767; // :(
565+
default: return 0;
566+
}
567+
}
568+
551569
void UpdateClientObjectForPlayer(ObjectID oidObject, CNWSPlayer* pPlayer)
552570
{
553571
for (auto* pLuo : pPlayer->m_lstActiveObjectsLastUpdate)
554572
{
555-
if (pLuo->m_nId == oidObject)
573+
if (pLuo->m_nId == oidObject)
556574
{
557575
pPlayer->m_lstActiveObjectsLastUpdate.Remove(pLuo);
558576
delete pLuo;
@@ -571,4 +589,23 @@ void UpdateClientObject(ObjectID oidObject)
571589
}
572590
}
573591

592+
CItemRepository* GetItemRepository(ObjectID oidTarget)
593+
{
594+
auto *pTarget = Utils::GetGameObject(oidTarget);
595+
if (!pTarget)
596+
return nullptr;
597+
598+
switch (pTarget->m_nObjectType)
599+
{
600+
case Constants::ObjectType::Creature:
601+
return Utils::AsNWSCreature(pTarget)->m_pcItemRepository;
602+
case Constants::ObjectType::Placeable:
603+
return Utils::AsNWSPlaceable(pTarget)->m_pcItemRepository;
604+
case Constants::ObjectType::Item:
605+
return Utils::AsNWSItem(pTarget)->m_pItemRepository;
606+
}
607+
608+
return nullptr;
609+
}
610+
574611
}

NWNXLib/nwnx.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,10 @@ namespace Utils
253253
CNWSDoor* PopDoor(ArgumentStack& args, bool throwOnFail=false);
254254

255255
int32_t NWScriptObjectTypeToEngineObjectType(int32_t nwscriptObjectType);
256+
int32_t EngineObjectTypeToNWScriptObjectType(int32_t engineObjectType);
256257
void UpdateClientObject(ObjectID oidObject);
257258
void UpdateClientObjectForPlayer(ObjectID oidObject, CNWSPlayer* oidPlayer);
259+
CItemRepository* GetItemRepository(ObjectID oidTarget);
258260
}
259261

260262
namespace POS

Plugins/Item/Item.cpp

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -275,24 +275,6 @@ NWNX_EXPORT ArgumentStack GetMinEquipLevel(ArgumentStack&& args)
275275
return -1;
276276
}
277277

278-
CItemRepository* GetObjectItemRepository(OBJECT_ID oidPossessor)
279-
{
280-
auto pPossessor = Utils::GetGameObject(oidPossessor);
281-
if (!pPossessor) return nullptr;
282-
283-
switch (pPossessor->m_nObjectType)
284-
{
285-
case Constants::ObjectType::Creature:
286-
return Utils::AsNWSCreature(pPossessor)->m_pcItemRepository;
287-
case Constants::ObjectType::Placeable:
288-
return Utils::AsNWSPlaceable(pPossessor)->m_pcItemRepository;
289-
case Constants::ObjectType::Item:
290-
return Utils::AsNWSItem(pPossessor)->m_pItemRepository;
291-
}
292-
293-
return nullptr;
294-
}
295-
296278
NWNX_EXPORT ArgumentStack MoveTo(ArgumentStack&& args)
297279
{
298280
if (auto *pItem = Utils::PopItem(args))
@@ -312,7 +294,7 @@ NWNX_EXPORT ArgumentStack MoveTo(ArgumentStack&& args)
312294
// Is the item already on/in the target?
313295
if (oidRealItemPossessor == oidRealTargetPossessor)
314296
{
315-
auto pTargetItemRepo = GetObjectItemRepository(pTarget->m_idSelf);
297+
auto pTargetItemRepo = Utils::GetItemRepository(pTarget->m_idSelf);
316298
if ((pTargetItemRepo) && (pTargetItemRepo->GetItemInRepository(pItem)))
317299
{
318300
LOG_DEBUG("NWNX_Item_MoveTo: Item is already on the target!");
@@ -360,7 +342,7 @@ NWNX_EXPORT ArgumentStack MoveTo(ArgumentStack&& args)
360342
case Constants::ObjectType::Store:
361343
{
362344
auto pTargetStore = Utils::AsNWSStore(pTarget);
363-
auto pOriginalOwnerRepository = GetObjectItemRepository(pItem->m_oidPossessor);
345+
auto pOriginalOwnerRepository = Utils::GetItemRepository(pItem->m_oidPossessor);
364346

365347
pTargetStore->AcquireItem(pItem, false, 0xFF, 0xFF);
366348

0 commit comments

Comments
 (0)