mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-22 11:09:40 +00:00
[Client] Reply to ActorList request with list of NPCs
This commit is contained in:
parent
8f18dc87c4
commit
ca92be14a5
5 changed files with 45 additions and 0 deletions
|
@ -842,7 +842,17 @@ void Networking::processWorldPacket(RakNet::Packet *packet)
|
||||||
{
|
{
|
||||||
case ID_ACTOR_LIST:
|
case ID_ACTOR_LIST:
|
||||||
{
|
{
|
||||||
|
MWWorld::CellStore *ptrCellStore = Main::get().getWorldController()->getCell(worldEvent.cell);
|
||||||
|
|
||||||
|
if (!ptrCellStore) return;
|
||||||
|
|
||||||
LOG_MESSAGE_SIMPLE(Log::LOG_VERBOSE, "Received ID_ACTOR_LIST about %s", worldEvent.cell.getDescription().c_str());
|
LOG_MESSAGE_SIMPLE(Log::LOG_VERBOSE, "Received ID_ACTOR_LIST about %s", worldEvent.cell.getDescription().c_str());
|
||||||
|
LOG_APPEND(Log::LOG_VERBOSE, "- action: %i", worldEvent.action);
|
||||||
|
|
||||||
|
// If we've received a request for information, comply with it
|
||||||
|
if (worldEvent.action == mwmp::BaseEvent::REQUEST)
|
||||||
|
worldEvent.sendActors(ptrCellStore);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ID_ACTOR_AUTHORITY:
|
case ID_ACTOR_AUTHORITY:
|
||||||
|
|
|
@ -40,6 +40,31 @@ void WorldEvent::addObject(WorldObject worldObject)
|
||||||
objectChanges.objects.push_back(worldObject);
|
objectChanges.objects.push_back(worldObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WorldEvent::sendActors(MWWorld::CellStore* cellStore)
|
||||||
|
{
|
||||||
|
mwmp::WorldEvent *worldEvent = mwmp::Main::get().getNetworking()->resetWorldEvent();
|
||||||
|
worldEvent->cell = *cellStore->getCell();
|
||||||
|
worldEvent->action = BaseEvent::SET;
|
||||||
|
|
||||||
|
MWWorld::CellRefList<ESM::NPC> *npcList = cellStore->getNpcs();
|
||||||
|
|
||||||
|
for (typename MWWorld::CellRefList<ESM::NPC>::List::iterator listIter(npcList->mList.begin());
|
||||||
|
listIter != npcList->mList.end(); ++listIter)
|
||||||
|
{
|
||||||
|
MWWorld::Ptr npc(&*listIter, 0);
|
||||||
|
|
||||||
|
mwmp::WorldObject worldObject;
|
||||||
|
worldObject.refId = npc.getCellRef().getRefId();
|
||||||
|
worldObject.refNumIndex = npc.getCellRef().getRefNum().mIndex;
|
||||||
|
worldObject.mpNum = npc.getCellRef().getMpNum();
|
||||||
|
|
||||||
|
worldEvent->addObject(worldObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
mwmp::Main::get().getNetworking()->getWorldPacket(ID_ACTOR_LIST)->setEvent(worldEvent);
|
||||||
|
mwmp::Main::get().getNetworking()->getWorldPacket(ID_ACTOR_LIST)->Send();
|
||||||
|
}
|
||||||
|
|
||||||
void WorldEvent::sendContainers(MWWorld::CellStore* cellStore)
|
void WorldEvent::sendContainers(MWWorld::CellStore* cellStore)
|
||||||
{
|
{
|
||||||
mwmp::WorldEvent *worldEvent = mwmp::Main::get().getNetworking()->resetWorldEvent();
|
mwmp::WorldEvent *worldEvent = mwmp::Main::get().getNetworking()->resetWorldEvent();
|
||||||
|
|
|
@ -17,6 +17,7 @@ namespace mwmp
|
||||||
|
|
||||||
void addObject(WorldObject worldObject);
|
void addObject(WorldObject worldObject);
|
||||||
|
|
||||||
|
void sendActors(MWWorld::CellStore* cellStore);
|
||||||
void sendContainers(MWWorld::CellStore* cellStore);
|
void sendContainers(MWWorld::CellStore* cellStore);
|
||||||
|
|
||||||
void editContainers(MWWorld::CellStore* cellStore);
|
void editContainers(MWWorld::CellStore* cellStore);
|
||||||
|
|
|
@ -481,6 +481,12 @@ namespace MWWorld
|
||||||
return searchVisitor.mFound;
|
return searchVisitor.mFound;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Added by tes3mp and used to get all the NPCs in the cell
|
||||||
|
CellRefList<ESM::NPC> *CellStore::getNpcs()
|
||||||
|
{
|
||||||
|
return &mNpcs;
|
||||||
|
}
|
||||||
|
|
||||||
// Added by tes3mp and used to get all the containers in the cell
|
// Added by tes3mp and used to get all the containers in the cell
|
||||||
CellRefList<ESM::Container> *CellStore::getContainers()
|
CellRefList<ESM::Container> *CellStore::getContainers()
|
||||||
{
|
{
|
||||||
|
|
|
@ -237,6 +237,9 @@ namespace MWWorld
|
||||||
Ptr searchExact (const std::string& id, unsigned int refNumIndex, unsigned int mpNum);
|
Ptr searchExact (const std::string& id, unsigned int refNumIndex, unsigned int mpNum);
|
||||||
///< Added by tes3mp and used to find an object by both its ID and its reference number
|
///< Added by tes3mp and used to find an object by both its ID and its reference number
|
||||||
|
|
||||||
|
CellRefList<ESM::NPC> *getNpcs();
|
||||||
|
// Added by tes3mp and used to get all the NPCs in the cell
|
||||||
|
|
||||||
CellRefList<ESM::Container> *getContainers();
|
CellRefList<ESM::Container> *getContainers();
|
||||||
// Added by tes3mp and used to get all the containers in the cell
|
// Added by tes3mp and used to get all the containers in the cell
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue