Merge pull request #446 from TES3MP/0.6.3 while resolving conflicts

Conflicts:
	apps/openmw-mp/Script/Functions/Cells.cpp
	apps/openmw-mp/Script/Functions/Cells.hpp
	apps/openmw-mp/Script/Functions/Worldstate.cpp
	apps/openmw-mp/Script/Functions/Worldstate.hpp
	apps/openmw-mp/Script/ScriptFunctions.hpp
	apps/openmw-mp/processors/player/ProcessorPlayerMap.hpp
	apps/openmw/mwmp/processors/player/ProcessorPlayerMap.hpp
	components/openmw-mp/Base/BasePlayer.hpp
	components/openmw-mp/Packets/Player/PacketPlayerMap.hpp
	components/openmw-mp/Packets/Worldstate/PacketWorldMap.cpp
sol2-server-rewrite
David Cernat 7 years ago
commit 176aa62b15

@ -87,6 +87,7 @@
Bug #4413: Moving with 0 strength uses all of your fatigue Bug #4413: Moving with 0 strength uses all of your fatigue
Bug #4420: Camera flickering when I open up and close menus while sneaking Bug #4420: Camera flickering when I open up and close menus while sneaking
Bug #4435: Item health is considered a signed integer Bug #4435: Item health is considered a signed integer
Bug #4441: Adding items to currently disabled weapon-wielding creatures crashes the game
Feature #1786: Round up encumbrance value in the encumbrance bar Feature #1786: Round up encumbrance value in the encumbrance bar
Feature #2694: Editor: rename "model" column to make its purpose clear Feature #2694: Editor: rename "model" column to make its purpose clear
Feature #3870: Editor: Terrain Texture Brush Button Feature #3870: Editor: Terrain Texture Brush Button

@ -4,12 +4,18 @@
#include "BaseMgr.hpp" #include "BaseMgr.hpp"
#include "Player.hpp" #include "Player.hpp"
#include "Worldstate.hpp"
BaseMgr::BaseMgr(Player *player) : player(player), changed(false) BaseMgr::BaseMgr(Player *player) : player(player), changed(false)
{ {
} }
BaseMgr::BaseMgr(Worldstate *worldstate) : worldstate(worldstate), changed(false)
{
}
void BaseMgr::update() void BaseMgr::update()
{ {
if (!changed) if (!changed)
@ -22,5 +28,7 @@ void BaseMgr::update()
void BaseMgr::setChanged() void BaseMgr::setChanged()
{ {
changed = true; changed = true;
player->addToUpdateQueue();
if (player != nullptr)
player->addToUpdateQueue();
} }

@ -5,17 +5,20 @@
#pragma once #pragma once
class Player; class Player;
class Worldstate;
class BaseMgr class BaseMgr
{ {
public: public:
explicit BaseMgr(Player *player); explicit BaseMgr(Player *player);
explicit BaseMgr(Worldstate *worldstate);
void update(); void update();
protected: protected:
bool isChanged() const { return changed; }; bool isChanged() const { return changed; };
void setChanged(); void setChanged();
virtual void processUpdate() = 0; virtual void processUpdate() = 0;
Player *player; Player *player;
Worldstate *worldstate;
private: private:
bool changed; bool changed;
}; };

@ -85,12 +85,12 @@ set(PROCESSORS_PLAYER
processors/player/ProcessorPlayerFaction.hpp processors/player/ProcessorPlayerInteraction.hpp processors/player/ProcessorPlayerFaction.hpp processors/player/ProcessorPlayerInteraction.hpp
processors/player/ProcessorPlayerInventory.hpp processors/player/ProcessorPlayerJournal.hpp processors/player/ProcessorPlayerInventory.hpp processors/player/ProcessorPlayerJournal.hpp
processors/player/ProcessorPlayerKillCount.hpp processors/player/ProcessorPlayerLevel.hpp processors/player/ProcessorPlayerKillCount.hpp processors/player/ProcessorPlayerLevel.hpp
processors/player/ProcessorPlayerMap.hpp processors/player/ProcessorPlayerMiscellaneous.hpp processors/player/ProcessorPlayerMiscellaneous.hpp processors/player/ProcessorPlayerPosition.hpp
processors/player/ProcessorPlayerPosition.hpp processors/player/ProcessorPlayerQuickKeys.hpp processors/player/ProcessorPlayerQuickKeys.hpp processors/player/ProcessorPlayerRest.hpp
processors/player/ProcessorPlayerRest.hpp processors/player/ProcessorPlayerResurrect.hpp processors/player/ProcessorPlayerResurrect.hpp processors/player/ProcessorPlayerShapeshift.hpp
processors/player/ProcessorPlayerShapeshift.hpp processors/player/ProcessorPlayerSkill.hpp processors/player/ProcessorPlayerSkill.hpp processors/player/ProcessorPlayerSpeech.hpp
processors/player/ProcessorPlayerSpeech.hpp processors/player/ProcessorPlayerSpellbook.hpp processors/player/ProcessorPlayerSpellbook.hpp processors/player/ProcessorPlayerStatsDynamic.hpp
processors/player/ProcessorPlayerStatsDynamic.hpp processors/player/ProcessorPlayerTopic.hpp processors/player/ProcessorPlayerTopic.hpp
) )
source_group(tes3mp-server\\processors\\player FILES ${PROCESSORS_PLAYER}) source_group(tes3mp-server\\processors\\player FILES ${PROCESSORS_PLAYER})
@ -111,7 +111,7 @@ set(PROCESSORS_OBJECT
source_group(tes3mp-server\\processors\\object FILES ${PROCESSORS_OBJECT}) source_group(tes3mp-server\\processors\\object FILES ${PROCESSORS_OBJECT})
set(PROCESSORS_WORLDSTATE set(PROCESSORS_WORLDSTATE
processors/worldstate/ProcessorRecordDynamic.hpp processors/worldstate/ProcessorRecordDynamic.hpp processors/worldstate/ProcessorWorldMap.hpp
) )
source_group(tes3mp-server\\processors\\worldstate FILES ${PROCESSORS_WORLDSTATE}) source_group(tes3mp-server\\processors\\worldstate FILES ${PROCESSORS_WORLDSTATE})
@ -132,7 +132,7 @@ include_directories("./")
add_executable(tes3mp-server add_executable(tes3mp-server
${SERVER} ${SERVER_HEADER} ${SERVER} ${SERVER_HEADER}
${PROCESSORS_ACTOR} ${PROCESSORS_PLAYER} ${PROCESSORS_OBJECT} ${PROCESSORS} ${PROCESSORS_ACTOR} ${PROCESSORS_PLAYER} ${PROCESSORS_OBJECT} ${PROCESSORS_WORLDSTATE} ${PROCESSORS}
${APPLE_BUNDLE_RESOURCES} ${APPLE_BUNDLE_RESOURCES}
) )

@ -277,103 +277,3 @@ void QuickKey::setItemId(const std::string &itemId)
{ {
quickKey.itemId = itemId; quickKey.itemId = itemId;
} }
void MapTiles::Init(LuaState &lua)
{
lua.getState()->new_usertype<MapTiles>("MapTiles",
"addMapTile", &MapTiles::addMapTile,
"getMapTile", &MapTiles::getMapTile,
"setMapTile", &MapTiles::setMapTile,
"clear", &MapTiles::clear,
"size", &MapTiles::size
);
}
MapTiles::MapTiles(Player *player) : BaseMgr(player)
{
}
void MapTiles::processUpdate()
{
auto packet = mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_MAP);
packet->setPlayer(player);
packet->Send(false);
clear();
}
void MapTiles::addMapTile(const MapTile &mapTile)
{
player->mapChanges.mapTiles.push_back(mapTile.mapTile);
setChanged();
}
MapTile MapTiles::getMapTile(int id) const
{
return MapTile(player->mapChanges.mapTiles.at(id));
}
void MapTiles::setMapTile(int id, const MapTile &mapTile)
{
player->mapChanges.mapTiles.at(id) = mapTile.mapTile;
setChanged();
}
void MapTiles::clear()
{
player->mapChanges.mapTiles.clear();
setChanged();
}
size_t MapTiles::size() const
{
return player->mapChanges.mapTiles.size();
}
void MapTile::Init(LuaState &lua)
{
lua.getState()->new_usertype<MapTile>("MapTile",
"cellX", sol::property(&MapTile::getCellX, &MapTile::setCellX),
"cellY", sol::property(&MapTile::getCellY, &MapTile::setCellY),
"loadImageFile", &MapTile::loadImageFile,
"saveImageFile", &MapTile::saveImageFile
);
}
MapTile::MapTile(mwmp::MapTile &mapTile) : mapTile(mapTile)
{
}
int MapTile::getCellX() const
{
return mapTile.x;
}
void MapTile::setCellX(int cellX)
{
mapTile.x = cellX;
}
int MapTile::getCellY() const
{
return mapTile.y;
}
void MapTile::setCellY(int cellY)
{
mapTile.y = cellY;
}
void MapTile::loadImageFile(const char* filePath)
{
std::ifstream inputFile(filePath, std::ios::binary);
mapTile.imageData = std::vector<char>(std::istreambuf_iterator<char>(inputFile), std::istreambuf_iterator<char>());
}
void MapTile::saveImageFile(const char* filePath)
{
std::ofstream outputFile(filePath, std::ios::binary);
std::ostream_iterator<char> outputIterator(outputFile);
std::copy(mapTile.imageData.begin(), mapTile.imageData.end(), outputIterator);
}

@ -80,40 +80,3 @@ public:
private: private:
void processUpdate() final; void processUpdate() final;
}; };
class MapTile
{
friend class MapTiles;
public:
static void Init(LuaState &lua);
public:
explicit MapTile(mwmp::MapTile &mapTile);
int getCellX() const;
void setCellX(int cellX);
int getCellY() const;
void setCellY(int cellY);
void loadImageFile(const char* filePath);
void saveImageFile(const char *filePath);
mwmp::MapTile mapTile;
};
class MapTiles final: public BaseMgr
{
public:
static void Init(LuaState &lua);
public:
explicit MapTiles(Player *player);
void addMapTile(const MapTile &mapTile);
MapTile getMapTile(int id) const;
void setMapTile(int id, const MapTile &mapTile);
size_t size() const;
void clear();
private:
void processUpdate() final;
};

@ -92,7 +92,6 @@ void Player::Init(LuaState &lua)
"getQuests", &Player::getQuests, "getQuests", &Player::getQuests,
"getSpells", &Player::getSpells, "getSpells", &Player::getSpells,
"getQuickKeys", &Player::getQuickKeys, "getQuickKeys", &Player::getQuickKeys,
"getMapTiles", &Player::getMapTiles,
"getWeatherMgr", &Player::getWeatherMgr, "getWeatherMgr", &Player::getWeatherMgr,
"getMark", &Player::getMark, "getMark", &Player::getMark,
@ -118,9 +117,9 @@ void Player::Init(LuaState &lua)
"leaveChannel", 3); "leaveChannel", 3);
} }
Player::Player(RakNet::RakNetGUID guid) : BasePlayer(guid), NetActor(), changedMap(false), cClass(this), Player::Player(RakNet::RakNetGUID guid) : BasePlayer(guid), NetActor(), cClass(this), settings(this), books(this), gui(this),
settings(this), books(this), gui(this), dialogue(this), factions(this), dialogue(this), factions(this), quests(this), spells(this), quickKeys(this),
quests(this), spells(this), quickKeys(this), mapTiles(this), weatherMgr(this) weatherMgr(this)
{ {
basePlayer = this; basePlayer = this;
netCreature = this; netCreature = this;
@ -277,14 +276,6 @@ void Player::update()
changedSelectedSpell = false; changedSelectedSpell = false;
} }
if (changedMap)
{
auto packet = mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_PLAYER_MAP);
packet->setPlayer(this);
packet->Send(/*toOthers*/ false);
changedMap = false;
}
settings.update(); settings.update();
books.update(); books.update();
gui.update(); gui.update();
@ -293,7 +284,6 @@ void Player::update()
quests.update(); quests.update();
spells.update(); spells.update();
quickKeys.update(); quickKeys.update();
mapTiles.update();
weatherMgr.update(); weatherMgr.update();
resetUpdateFlags(); resetUpdateFlags();
@ -835,11 +825,6 @@ QuickKeys &Player::getQuickKeys()
return quickKeys; return quickKeys;
} }
MapTiles &Player::getMapTiles()
{
return mapTiles;
}
WeatherMgr &Player::getWeatherMgr() WeatherMgr &Player::getWeatherMgr()
{ {
return weatherMgr; return weatherMgr;

@ -198,7 +198,6 @@ public:
Quests &getQuests(); Quests &getQuests();
Spells &getSpells(); Spells &getSpells();
QuickKeys &getQuickKeys(); QuickKeys &getQuickKeys();
MapTiles &getMapTiles();
WeatherMgr &getWeatherMgr(); WeatherMgr &getWeatherMgr();
void setAuthority(); void setAuthority();
@ -211,7 +210,7 @@ private:
CellController::TContainer cells; CellController::TContainer cells;
int loadState; int loadState;
int handshakeCounter; int handshakeCounter;
bool /*statsChanged, attributesChanged, skillsChanged, baseInfoChanged, positionChanged,*/ changedMarkLocation, changedSelectedSpell, changedMap; bool /*statsChanged, attributesChanged, skillsChanged, baseInfoChanged, positionChanged,*/ changedMarkLocation, changedSelectedSpell;
CharClass cClass; CharClass cClass;
GameSettings settings; GameSettings settings;
Books books; Books books;
@ -221,7 +220,6 @@ private:
Quests quests; Quests quests;
Spells spells; Spells spells;
QuickKeys quickKeys; QuickKeys quickKeys;
MapTiles mapTiles;
WeatherMgr weatherMgr; WeatherMgr weatherMgr;
sol::table storedData; sol::table storedData;
sol::table customData; sol::table customData;

@ -63,7 +63,6 @@ EventController::EventController(LuaState *luaCtrl)
ADD_CORE_EVENT(ON_PLAYER_DISPOSITION), ADD_CORE_EVENT(ON_PLAYER_DISPOSITION),
ADD_CORE_EVENT(ON_PLAYER_BOOK), ADD_CORE_EVENT(ON_PLAYER_BOOK),
ADD_CORE_EVENT(ON_PLAYER_MISCELLANEOUS), ADD_CORE_EVENT(ON_PLAYER_MISCELLANEOUS),
ADD_CORE_EVENT(ON_PLAYER_MAP),
ADD_CORE_EVENT(ON_PLAYER_INTERACTION), ADD_CORE_EVENT(ON_PLAYER_INTERACTION),
ADD_CORE_EVENT(ON_PLAYER_REST), ADD_CORE_EVENT(ON_PLAYER_REST),
ADD_CORE_EVENT(ON_PLAYER_SENDMESSAGE), ADD_CORE_EVENT(ON_PLAYER_SENDMESSAGE),
@ -88,7 +87,8 @@ EventController::EventController(LuaState *luaCtrl)
ADD_CORE_EVENT(ON_OBJECT_DELETE), ADD_CORE_EVENT(ON_OBJECT_DELETE),
ADD_CORE_EVENT(ON_OBJECT_LOCK), ADD_CORE_EVENT(ON_OBJECT_LOCK),
ADD_CORE_EVENT(ON_OBJECT_SCALE), ADD_CORE_EVENT(ON_OBJECT_SCALE),
ADD_CORE_EVENT(ON_OBJECT_TRAP) ADD_CORE_EVENT(ON_OBJECT_TRAP),
ADD_CORE_EVENT(ON_WORLD_MAP)
); );
sol::state &state = *luaCtrl->getState(); sol::state &state = *luaCtrl->getState();

@ -39,7 +39,6 @@ namespace CoreEvent
ON_PLAYER_DISPOSITION, ON_PLAYER_DISPOSITION,
ON_PLAYER_BOOK, ON_PLAYER_BOOK,
ON_PLAYER_MISCELLANEOUS, ON_PLAYER_MISCELLANEOUS,
ON_PLAYER_MAP,
ON_PLAYER_INTERACTION, ON_PLAYER_INTERACTION,
ON_PLAYER_REST, ON_PLAYER_REST,
ON_PLAYER_SENDMESSAGE, ON_PLAYER_SENDMESSAGE,
@ -71,6 +70,8 @@ namespace CoreEvent
ON_OBJECT_SCALE, ON_OBJECT_SCALE,
ON_OBJECT_TRAP, ON_OBJECT_TRAP,
ON_WORLD_MAP,
LAST, LAST,
}; };
const int FIRST = ON_EXIT; const int FIRST = ON_EXIT;

@ -5,10 +5,19 @@
using namespace std; using namespace std;
Worldstate::Worldstate() : mapTiles(this)
{
}
void Worldstate::Init(LuaState &lua) void Worldstate::Init(LuaState &lua)
{ {
sol::table worldstateTable = lua.getState()->create_named_table("Worldstate"); sol::table worldstateTable = lua.getState()->create_named_table("Worldstate");
//worldstateTable.set_function("getMapTiles", []() {
// mwmp::Networking::get().get().getServerWorldstate()->getMapTiles();
//});
worldstateTable.set_function("setHour", [](double hour) { worldstateTable.set_function("setHour", [](double hour) {
mwmp::Networking::get().get().getServerWorldstate()->setHour(hour); mwmp::Networking::get().get().getServerWorldstate()->setHour(hour);
}); });
@ -71,6 +80,13 @@ void Worldstate::update()
shouldUpdateCollisionOverrides = false; shouldUpdateCollisionOverrides = false;
} }
//mapTiles.update();
}
MapTiles &Worldstate::getMapTiles()
{
return mapTiles;
} }
void Worldstate::setHour(double inputHour) void Worldstate::setHour(double inputHour)
@ -131,3 +147,103 @@ void Worldstate::setActorCollisionForPlacedObjects(bool state)
useActorCollisionForPlacedObjects = state; useActorCollisionForPlacedObjects = state;
shouldUpdateCollisionOverrides = true; shouldUpdateCollisionOverrides = true;
} }
void MapTiles::Init(LuaState &lua)
{
lua.getState()->new_usertype<MapTiles>("MapTiles",
"addMapTile", &MapTiles::addMapTile,
"getMapTile", &MapTiles::getMapTile,
"setMapTile", &MapTiles::setMapTile,
"clear", &MapTiles::clear,
"size", &MapTiles::size
);
}
MapTiles::MapTiles(Worldstate *worldstate) : BaseMgr(worldstate)
{
}
void MapTiles::processUpdate()
{
auto packet = mwmp::Networking::get().getWorldstatePacketController()->GetPacket(ID_WORLD_MAP);
packet->Send(false);
clear();
}
void MapTiles::addMapTile(const MapTile &mapTile)
{
mwmp::Networking::get().get().getServerWorldstate()->mapChanges.mapTiles.push_back(mapTile.mapTile);
setChanged();
}
MapTile MapTiles::getMapTile(int id) const
{
return MapTile(mwmp::Networking::get().get().getServerWorldstate()->mapChanges.mapTiles.at(id));
}
void MapTiles::setMapTile(int id, const MapTile &mapTile)
{
mwmp::Networking::get().get().getServerWorldstate()->mapChanges.mapTiles.at(id) = mapTile.mapTile;
setChanged();
}
void MapTiles::clear()
{
mwmp::Networking::get().get().getServerWorldstate()->mapChanges.mapTiles.clear();
setChanged();
}
size_t MapTiles::size() const
{
return mwmp::Networking::get().get().getServerWorldstate()->mapChanges.mapTiles.size();
}
void MapTile::Init(LuaState &lua)
{
lua.getState()->new_usertype<MapTile>("MapTile",
"cellX", sol::property(&MapTile::getCellX, &MapTile::setCellX),
"cellY", sol::property(&MapTile::getCellY, &MapTile::setCellY),
"loadImageFile", &MapTile::loadImageFile,
"saveImageFile", &MapTile::saveImageFile
);
}
MapTile::MapTile(mwmp::BaseMapTile &mapTile) : mapTile(mapTile)
{
}
int MapTile::getCellX() const
{
return mapTile.x;
}
void MapTile::setCellX(int cellX)
{
mapTile.x = cellX;
}
int MapTile::getCellY() const
{
return mapTile.y;
}
void MapTile::setCellY(int cellY)
{
mapTile.y = cellY;
}
void MapTile::loadImageFile(const char* filePath)
{
std::ifstream inputFile(filePath, std::ios::binary);
mapTile.imageData = std::vector<char>(std::istreambuf_iterator<char>(inputFile), std::istreambuf_iterator<char>());
}
void MapTile::saveImageFile(const char* filePath)
{
std::ofstream outputFile(filePath, std::ios::binary);
std::ostream_iterator<char> outputIterator(outputFile);
std::copy(mapTile.imageData.begin(), mapTile.imageData.end(), outputIterator);
}

@ -6,17 +6,60 @@
#include <components/openmw-mp/Base/BaseWorldstate.hpp> #include <components/openmw-mp/Base/BaseWorldstate.hpp>
#include <components/openmw-mp/Packets/Worldstate/WorldstatePacket.hpp> #include <components/openmw-mp/Packets/Worldstate/WorldstatePacket.hpp>
#include "BaseMgr.hpp"
class LuaState; class LuaState;
class MapTile
{
friend class MapTiles;
public:
static void Init(LuaState &lua);
public:
explicit MapTile(mwmp::BaseMapTile &mapTile);
int getCellX() const;
void setCellX(int cellX);
int getCellY() const;
void setCellY(int cellY);
void loadImageFile(const char* filePath);
void saveImageFile(const char *filePath);
mwmp::BaseMapTile mapTile;
};
class MapTiles final : public BaseMgr
{
public:
static void Init(LuaState &lua);
public:
explicit MapTiles(Worldstate *worldstate);
void addMapTile(const MapTile &mapTile);
MapTile getMapTile(int id) const;
void setMapTile(int id, const MapTile &mapTile);
size_t size() const;
void clear();
private:
void processUpdate() final;
};
class Worldstate : public mwmp::BaseWorldstate class Worldstate : public mwmp::BaseWorldstate
{ {
public: public:
explicit Worldstate();
static void Init(LuaState &lua); static void Init(LuaState &lua);
void update(); void update();
MapTiles &getMapTiles();
void setHour(double hour); void setHour(double hour);
void setDay(int day); void setDay(int day);
void setMonth(int month); void setMonth(int month);
@ -33,4 +76,7 @@ private:
bool shouldUpdateTime, shouldUpdateCollisionOverrides; bool shouldUpdateTime, shouldUpdateCollisionOverrides;
MapTiles mapTiles;
}; };

@ -26,7 +26,6 @@
#include "player/ProcessorPlayerKillCount.hpp" #include "player/ProcessorPlayerKillCount.hpp"
#include "player/ProcessorPlayerInteraction.hpp" #include "player/ProcessorPlayerInteraction.hpp"
#include "player/ProcessorPlayerLevel.hpp" #include "player/ProcessorPlayerLevel.hpp"
#include "player/ProcessorPlayerMap.hpp"
#include "player/ProcessorPlayerMiscellaneous.hpp" #include "player/ProcessorPlayerMiscellaneous.hpp"
#include "player/ProcessorPlayerPosition.hpp" #include "player/ProcessorPlayerPosition.hpp"
#include "player/ProcessorPlayerQuickKeys.hpp" #include "player/ProcessorPlayerQuickKeys.hpp"
@ -76,6 +75,7 @@
#include "object/ProcessorVideoPlay.hpp" #include "object/ProcessorVideoPlay.hpp"
#include "WorldstateProcessor.hpp" #include "WorldstateProcessor.hpp"
#include "worldstate/ProcessorRecordDynamic.hpp" #include "worldstate/ProcessorRecordDynamic.hpp"
#include "worldstate/ProcessorWorldMap.hpp"
using namespace mwmp; using namespace mwmp;
@ -104,7 +104,6 @@ void ProcessorInitializer()
PlayerProcessor::AddProcessor(new ProcessorPlayerKillCount()); PlayerProcessor::AddProcessor(new ProcessorPlayerKillCount());
PlayerProcessor::AddProcessor(new ProcessorPlayerInteraction()); PlayerProcessor::AddProcessor(new ProcessorPlayerInteraction());
PlayerProcessor::AddProcessor(new ProcessorPlayerLevel()); PlayerProcessor::AddProcessor(new ProcessorPlayerLevel());
PlayerProcessor::AddProcessor(new ProcessorPlayerMap());
PlayerProcessor::AddProcessor(new ProcessorPlayerMiscellaneous()); PlayerProcessor::AddProcessor(new ProcessorPlayerMiscellaneous());
PlayerProcessor::AddProcessor(new ProcessorPlayerPosition()); PlayerProcessor::AddProcessor(new ProcessorPlayerPosition());
PlayerProcessor::AddProcessor(new ProcessorPlayerQuickKeys()); PlayerProcessor::AddProcessor(new ProcessorPlayerQuickKeys());
@ -154,4 +153,5 @@ void ProcessorInitializer()
ObjectProcessor::AddProcessor(new ProcessorVideoPlay()); ObjectProcessor::AddProcessor(new ProcessorVideoPlay());
WorldstateProcessor::AddProcessor(new ProcessorRecordDynamic()); WorldstateProcessor::AddProcessor(new ProcessorRecordDynamic());
WorldstateProcessor::AddProcessor(new ProcessorWorldMap());
} }

@ -0,0 +1,25 @@
#ifndef OPENMW_PROCESSORWORLDMAP_HPP
#define OPENMW_PROCESSORWORLDMAP_HPP
#include "../WorldstateProcessor.hpp"
namespace mwmp
{
class ProcessorWorldMap : public WorldstateProcessor
{
public:
ProcessorWorldMap()
{
BPP_INIT(ID_WORLD_MAP)
}
void Do(WorldstatePacket &packet, const std::shared_ptr<Player> &player, BaseWorldstate &worldstate) override
{
DEBUG_PRINTF(strPacketID.c_str());
Networking::get().getState().getEventCtrl().Call<CoreEvent::ON_WORLD_MAP>(player.get());
}
};
}
#endif //OPENMW_PROCESSORWORLDMAP_HPP

@ -119,9 +119,10 @@ add_openmw_dir (mwmp/processors/player ProcessorChatMessage ProcessorGUIMessageB
ProcessorPlayerBehavior ProcessorPlayerBook ProcessorPlayerBounty ProcessorPlayerCellChange ProcessorPlayerCellState ProcessorPlayerBehavior ProcessorPlayerBook ProcessorPlayerBounty ProcessorPlayerCellChange ProcessorPlayerCellState
ProcessorPlayerCharClass ProcessorPlayerCharGen ProcessorPlayerDeath ProcessorPlayerDisposition ProcessorPlayerEquipment ProcessorPlayerCharClass ProcessorPlayerCharGen ProcessorPlayerDeath ProcessorPlayerDisposition ProcessorPlayerEquipment
ProcessorPlayerFaction ProcessorPlayerInteraction ProcessorPlayerInventory ProcessorPlayerJail ProcessorPlayerJournal ProcessorPlayerFaction ProcessorPlayerInteraction ProcessorPlayerInventory ProcessorPlayerJail ProcessorPlayerJournal
ProcessorPlayerKillCount ProcessorPlayerLevel ProcessorPlayerMap ProcessorPlayerMiscellaneous ProcessorPlayerMomentum ProcessorPlayerKillCount ProcessorPlayerLevel ProcessorPlayerMiscellaneous ProcessorPlayerMomentum
ProcessorPlayerPosition ProcessorPlayerQuickKeys ProcessorPlayerReputation ProcessorPlayerResurrect ProcessorPlayerShapeshift ProcessorPlayerPosition ProcessorPlayerQuickKeys ProcessorPlayerReputation ProcessorPlayerResurrect
ProcessorPlayerSkill ProcessorPlayerSpeech ProcessorPlayerSpellbook ProcessorPlayerStatsDynamic ProcessorPlayerTopic ProcessorPlayerShapeshift ProcessorPlayerSkill ProcessorPlayerSpeech ProcessorPlayerSpellbook ProcessorPlayerStatsDynamic
ProcessorPlayerTopic
) )
add_openmw_dir (mwmp/processors/object BaseObjectProcessor ProcessorConsoleCommand ProcessorContainer add_openmw_dir (mwmp/processors/object BaseObjectProcessor ProcessorConsoleCommand ProcessorContainer
@ -132,7 +133,8 @@ add_openmw_dir (mwmp/processors/object BaseObjectProcessor ProcessorConsoleComma
ProcessorScriptMemberShort ProcessorScriptMemberFloat ProcessorScriptGlobalShort ProcessorScriptGlobalFloat ProcessorScriptMemberShort ProcessorScriptMemberFloat ProcessorScriptGlobalShort ProcessorScriptGlobalFloat
) )
add_openmw_dir (mwmp/processors/worldstate ProcessorRecordDynamic ProcessorWorldCollisionOverride ProcessorWorldTime add_openmw_dir (mwmp/processors/worldstate ProcessorRecordDynamic ProcessorWorldCollisionOverride ProcessorWorldMap
ProcessorWorldTime
) )
# Main executable # Main executable

@ -1297,22 +1297,6 @@ void LocalPlayer::setBooks()
ptrNpcStats.flagAsUsed(book.bookId); ptrNpcStats.flagAsUsed(book.bookId);
} }
void LocalPlayer::setMapExplored()
{
MWWorld::Ptr ptrPlayer = getPlayerPtr();
MWMechanics::NpcStats &ptrNpcStats = ptrPlayer.getClass().getNpcStats(ptrPlayer);
for (const auto &mapTile : mapChanges.mapTiles)
{
const MWWorld::CellStore *cellStore = MWBase::Environment::get().getWorld()->getExterior(mapTile.x, mapTile.y);
if (!cellStore->getCell()->mName.empty())
MWBase::Environment::get().getWindowManager()->addVisitedLocation(cellStore->getCell()->mName, mapTile.x, mapTile.y);
MWBase::Environment::get().getWindowManager()->setGlobalMapImage(mapTile.x, mapTile.y, mapTile.imageData);
}
}
void LocalPlayer::setShapeshift() void LocalPlayer::setShapeshift()
{ {
MWWorld::Ptr ptrPlayer = getPlayerPtr(); MWWorld::Ptr ptrPlayer = getPlayerPtr();
@ -1656,23 +1640,6 @@ void LocalPlayer::sendSelectedSpell(const std::string& newSelectedSpellId)
getNetworking()->getPlayerPacket(ID_PLAYER_MISCELLANEOUS)->Send(); getNetworking()->getPlayerPacket(ID_PLAYER_MISCELLANEOUS)->Send();
} }
void LocalPlayer::sendMapExplored(int x, int y, const std::vector<char>& imageData)
{
mapChanges.mapTiles.clear();
mwmp::MapTile mapTile;
mapTile.x = x;
mapTile.y = y;
mapTile.imageData = imageData;
LOG_MESSAGE_SIMPLE(Log::LOG_INFO, "Sending ID_PLAYER_MAP with x: %i, y: %i", x, y);
mapChanges.mapTiles.push_back(mapTile);
getNetworking()->getPlayerPacket(ID_PLAYER_MAP)->setPlayer(this);
getNetworking()->getPlayerPacket(ID_PLAYER_MAP)->Send();
}
void LocalPlayer::clearCellStates() void LocalPlayer::clearCellStates()
{ {
cellStateChanges.cellStates.clear(); cellStateChanges.cellStates.clear();

@ -67,7 +67,6 @@ namespace mwmp
void setShapeshift(); void setShapeshift();
void setMarkLocation(); void setMarkLocation();
void setSelectedSpell(); void setSelectedSpell();
void setMapExplored();
void sendClass(); void sendClass();
void sendInventory(); void sendInventory();
@ -90,7 +89,6 @@ namespace mwmp
void sendWerewolfState(bool isWerewolf); void sendWerewolfState(bool isWerewolf);
void sendMarkLocation(const ESM::Cell& newMarkCell, const ESM::Position& newMarkPosition); void sendMarkLocation(const ESM::Cell& newMarkCell, const ESM::Position& newMarkPosition);
void sendSelectedSpell(const std::string& newSelectedSpellId); void sendSelectedSpell(const std::string& newSelectedSpellId);
void sendMapExplored(int x, int y, const std::vector<char>& imageData);
void clearCellStates(); void clearCellStates();
void clearCurrentContainer(); void clearCurrentContainer();

@ -1,3 +1,11 @@
#include <components/openmw-mp/Log.hpp>
#include "../mwbase/environment.hpp"
#include "../mwgui/windowmanagerimp.hpp"
#include "../mwworld/worldimp.hpp"
#include "Worldstate.hpp" #include "Worldstate.hpp"
#include "Main.hpp" #include "Main.hpp"
#include "Networking.hpp" #include "Networking.hpp"
@ -22,3 +30,33 @@ Networking *Worldstate::getNetworking()
{ {
return mwmp::Main::get().getNetworking(); return mwmp::Main::get().getNetworking();
} }
void Worldstate::sendMapExplored(int x, int y, const std::vector<char>& imageData)
{
mapChanges.mapTiles.clear();
mwmp::BaseMapTile mapTile;
mapTile.x = x;
mapTile.y = y;
mapTile.imageData = imageData;
LOG_MESSAGE_SIMPLE(Log::LOG_INFO, "Sending ID_PLAYER_MAP with x: %i, y: %i", x, y);
mapChanges.mapTiles.push_back(mapTile);
getNetworking()->getWorldstatePacket(ID_WORLD_MAP)->setWorldstate(this);
getNetworking()->getWorldstatePacket(ID_WORLD_MAP)->Send();
}
void Worldstate::setMapExplored()
{
for (const auto &mapTile : mapChanges.mapTiles)
{
const MWWorld::CellStore *cellStore = MWBase::Environment::get().getWorld()->getExterior(mapTile.x, mapTile.y);
if (!cellStore->getCell()->mName.empty())
MWBase::Environment::get().getWindowManager()->addVisitedLocation(cellStore->getCell()->mName, mapTile.x, mapTile.y);
MWBase::Environment::get().getWindowManager()->setGlobalMapImage(mapTile.x, mapTile.y, mapTile.imageData);
}
}

@ -13,6 +13,10 @@ namespace mwmp
Worldstate(); Worldstate();
virtual ~Worldstate(); virtual ~Worldstate();
void setMapExplored();
void sendMapExplored(int x, int y, const std::vector<char>& imageData);
private: private:
Networking *getNetworking(); Networking *getNetworking();

@ -31,7 +31,6 @@
#include "player/ProcessorPlayerJournal.hpp" #include "player/ProcessorPlayerJournal.hpp"
#include "player/ProcessorPlayerKillCount.hpp" #include "player/ProcessorPlayerKillCount.hpp"
#include "player/ProcessorPlayerLevel.hpp" #include "player/ProcessorPlayerLevel.hpp"
#include "player/ProcessorPlayerMap.hpp"
#include "player/ProcessorPlayerMiscellaneous.hpp" #include "player/ProcessorPlayerMiscellaneous.hpp"
#include "player/ProcessorPlayerMomentum.hpp" #include "player/ProcessorPlayerMomentum.hpp"
#include "player/ProcessorPlayerPosition.hpp" #include "player/ProcessorPlayerPosition.hpp"
@ -93,6 +92,7 @@
#include "WorldstateProcessor.hpp" #include "WorldstateProcessor.hpp"
#include "worldstate/ProcessorRecordDynamic.hpp" #include "worldstate/ProcessorRecordDynamic.hpp"
#include "worldstate/ProcessorWorldCollisionOverride.hpp" #include "worldstate/ProcessorWorldCollisionOverride.hpp"
#include "worldstate/ProcessorWorldMap.hpp"
#include "worldstate/ProcessorWorldTime.hpp" #include "worldstate/ProcessorWorldTime.hpp"
using namespace mwmp; using namespace mwmp;
@ -129,7 +129,6 @@ void ProcessorInitializer()
PlayerProcessor::AddProcessor(new ProcessorPlayerJournal()); PlayerProcessor::AddProcessor(new ProcessorPlayerJournal());
PlayerProcessor::AddProcessor(new ProcessorPlayerKillCount()); PlayerProcessor::AddProcessor(new ProcessorPlayerKillCount());
PlayerProcessor::AddProcessor(new ProcessorPlayerLevel()); PlayerProcessor::AddProcessor(new ProcessorPlayerLevel());
PlayerProcessor::AddProcessor(new ProcessorPlayerMap());
PlayerProcessor::AddProcessor(new ProcessorPlayerMiscellaneous()); PlayerProcessor::AddProcessor(new ProcessorPlayerMiscellaneous());
PlayerProcessor::AddProcessor(new ProcessorPlayerMomentum()); PlayerProcessor::AddProcessor(new ProcessorPlayerMomentum());
PlayerProcessor::AddProcessor(new ProcessorPlayerPosition()); PlayerProcessor::AddProcessor(new ProcessorPlayerPosition());
@ -188,5 +187,6 @@ void ProcessorInitializer()
WorldstateProcessor::AddProcessor(new ProcessorRecordDynamic()); WorldstateProcessor::AddProcessor(new ProcessorRecordDynamic());
WorldstateProcessor::AddProcessor(new ProcessorWorldCollisionOverride()); WorldstateProcessor::AddProcessor(new ProcessorWorldCollisionOverride());
WorldstateProcessor::AddProcessor(new ProcessorWorldMap());
WorldstateProcessor::AddProcessor(new ProcessorWorldTime()); WorldstateProcessor::AddProcessor(new ProcessorWorldTime());
} }

@ -8,7 +8,7 @@ using namespace mwmp;
template<class T> template<class T>
typename BasePacketProcessor<T>::processors_t BasePacketProcessor<T>::processors; typename BasePacketProcessor<T>::processors_t BasePacketProcessor<T>::processors;
bool WorldstateProcessor::Process(RakNet::Packet &packet, BaseWorldstate &worldstate) bool WorldstateProcessor::Process(RakNet::Packet &packet, Worldstate &worldstate)
{ {
RakNet::BitStream bsIn(&packet.data[1], packet.length, false); RakNet::BitStream bsIn(&packet.data[1], packet.length, false);
bsIn.Read(guid); bsIn.Read(guid);

@ -11,9 +11,9 @@ namespace mwmp
class WorldstateProcessor : public BasePacketProcessor<WorldstateProcessor>, public BaseClientPacketProcessor class WorldstateProcessor : public BasePacketProcessor<WorldstateProcessor>, public BaseClientPacketProcessor
{ {
public: public:
virtual void Do(WorldstatePacket &packet, BaseWorldstate &worldstate) = 0; virtual void Do(WorldstatePacket &packet, Worldstate &worldstate) = 0;
static bool Process(RakNet::Packet &packet, BaseWorldstate &worldstate); static bool Process(RakNet::Packet &packet, Worldstate &worldstate);
}; };
} }

@ -13,7 +13,7 @@ namespace mwmp
BPP_INIT(ID_RECORD_DYNAMIC) BPP_INIT(ID_RECORD_DYNAMIC)
} }
virtual void Do(WorldstatePacket &packet, BaseWorldstate &worldstate) virtual void Do(WorldstatePacket &packet, Worldstate &worldstate)
{ {
// Placeholder // Placeholder
} }

@ -16,7 +16,7 @@ namespace mwmp
BPP_INIT(ID_WORLD_COLLISION_OVERRIDE) BPP_INIT(ID_WORLD_COLLISION_OVERRIDE)
} }
virtual void Do(WorldstatePacket &packet, BaseWorldstate &worldstate) virtual void Do(WorldstatePacket &packet, Worldstate &worldstate)
{ {
// Placeholder // Placeholder
} }

@ -0,0 +1,23 @@
#ifndef OPENMW_PROCESSORWORLDMAP_HPP
#define OPENMW_PROCESSORWORLDMAP_HPP
#include "../WorldstateProcessor.hpp"
namespace mwmp
{
class ProcessorWorldMap : public WorldstateProcessor
{
public:
ProcessorWorldMap()
{
BPP_INIT(ID_WORLD_MAP)
}
virtual void Do(WorldstatePacket &packet, Worldstate &worldstate)
{
worldstate.setMapExplored();
}
};
}
#endif //OPENMW_PROCESSORWORLDMAP_HPP

@ -16,7 +16,7 @@ namespace mwmp
BPP_INIT(ID_WORLD_TIME) BPP_INIT(ID_WORLD_TIME)
} }
virtual void Do(WorldstatePacket &packet, BaseWorldstate &worldstate) virtual void Do(WorldstatePacket &packet, Worldstate &worldstate)
{ {
MWBase::World *world = MWBase::Environment::get().getWorld(); MWBase::World *world = MWBase::Environment::get().getWorld();

@ -26,7 +26,8 @@
*/ */
#include <components/openmw-mp/Log.hpp> #include <components/openmw-mp/Log.hpp>
#include "../mwmp/Main.hpp" #include "../mwmp/Main.hpp"
#include "../mwmp/LocalPlayer.hpp" #include "../mwmp/Networking.hpp"
#include "../mwmp/Worldstate.hpp"
/* /*
End of tes3mp addition End of tes3mp addition
*/ */
@ -660,7 +661,7 @@ namespace MWRender
std::string stringData = ostream.str(); std::string stringData = ostream.str();
std::vector<char> vectorData = std::vector<char>(stringData.begin(), stringData.end()); std::vector<char> vectorData = std::vector<char>(stringData.begin(), stringData.end());
mwmp::Main::get().getLocalPlayer()->sendMapExplored(originToCellX.at(imageDest.mX), originToCellY.at(imageDest.mY), vectorData); mwmp::Main::get().getNetworking()->getWorldstate()->sendMapExplored(originToCellX.at(imageDest.mX), originToCellY.at(imageDest.mY), vectorData);
} }
/* /*
End of tes3mp addition End of tes3mp addition

@ -123,11 +123,12 @@ bool Objects::removeObject (const MWWorld::Ptr& ptr)
mObjects.erase(iter); mObjects.erase(iter);
if (ptr.getClass().isNpc()) if (ptr.getClass().isActor())
{ {
MWWorld::InventoryStore& store = ptr.getClass().getInventoryStore(ptr); if (ptr.getClass().hasInventoryStore(ptr))
store.setInvListener(NULL, ptr); ptr.getClass().getInventoryStore(ptr).setInvListener(NULL, ptr);
store.setContListener(NULL);
ptr.getClass().getContainerStore(ptr).setContListener(NULL);
} }
ptr.getRefData().getBaseNode()->getParent(0)->removeChild(ptr.getRefData().getBaseNode()); ptr.getRefData().getBaseNode()->getParent(0)->removeChild(ptr.getRefData().getBaseNode());

@ -184,9 +184,10 @@ add_component_dir (openmw-mp/Packets/Player
PacketPlayerAttack PacketPlayerAttribute PacketPlayerBehavior PacketPlayerBook PacketPlayerBounty PacketPlayerAttack PacketPlayerAttribute PacketPlayerBehavior PacketPlayerBook PacketPlayerBounty
PacketPlayerCellChange PacketPlayerCellState PacketPlayerClass PacketPlayerDeath PacketPlayerEquipment PacketPlayerCellChange PacketPlayerCellState PacketPlayerClass PacketPlayerDeath PacketPlayerEquipment
PacketPlayerFaction PacketPlayerInteraction PacketPlayerInventory PacketPlayerJail PacketPlayerJournal PacketPlayerFaction PacketPlayerInteraction PacketPlayerInventory PacketPlayerJail PacketPlayerJournal
PacketPlayerKillCount PacketPlayerLevel PacketPlayerMap PacketPlayerMiscellaneous PacketPlayerMomentum PacketPlayerKillCount PacketPlayerLevel PacketPlayerMiscellaneous PacketPlayerMomentum PacketPlayerPosition
PacketPlayerPosition PacketPlayerQuickKeys PacketPlayerRegionAuthority PacketPlayerReputation PacketPlayerRest PacketPlayerQuickKeys PacketPlayerRegionAuthority PacketPlayerReputation PacketPlayerRest PacketPlayerResurrect
PacketPlayerResurrect PacketPlayerShapeshift PacketPlayerSkill PacketPlayerSpeech PacketPlayerSpellbook PacketPlayerStatsDynamic PacketPlayerTopic PacketPlayerShapeshift PacketPlayerSkill PacketPlayerSpeech PacketPlayerSpellbook PacketPlayerStatsDynamic
PacketPlayerTopic
) )
add_component_dir (openmw-mp/Packets/Object add_component_dir (openmw-mp/Packets/Object
@ -202,7 +203,7 @@ add_component_dir (openmw-mp/Packets/Object
add_component_dir (openmw-mp/Packets/Worldstate add_component_dir (openmw-mp/Packets/Worldstate
WorldstatePacket WorldstatePacket
PacketRecordDynamic PacketWorldCollisionOverride PacketWorldTime PacketRecordDynamic PacketWorldCollisionOverride PacketWorldMap PacketWorldTime
) )
add_component_dir (fallback add_component_dir (fallback

@ -123,13 +123,6 @@ namespace mwmp
Type type; Type type;
}; };
struct MapTile
{
int x;
int y;
std::vector<char> imageData;
};
struct JournalChanges struct JournalChanges
{ {
std::vector<JournalItem> journalItems; std::vector<JournalItem> journalItems;
@ -155,11 +148,6 @@ namespace mwmp
std::vector<Book> books; std::vector<Book> books;
}; };
struct MapChanges
{
std::vector<MapTile> mapTiles;
};
struct SpellbookChanges struct SpellbookChanges
{ {
std::vector<ESM::Spell> spells; std::vector<ESM::Spell> spells;
@ -296,7 +284,6 @@ namespace mwmp
TopicChanges topicChanges; TopicChanges topicChanges;
KillChanges killChanges; KillChanges killChanges;
BookChanges bookChanges; BookChanges bookChanges;
MapChanges mapChanges;
CellStateChanges cellStateChanges; CellStateChanges cellStateChanges;
ESM::ActiveSpells activeSpells; ESM::ActiveSpells activeSpells;

@ -1,12 +1,25 @@
#ifndef OPENMW_BASEWORLDSTATE_HPP #ifndef OPENMW_BASEWORLDSTATE_HPP
#define OPENMW_BASEWORLDSTATE_HPP #define OPENMW_BASEWORLDSTATE_HPP
#include <vector>
#include <components/openmw-mp/Base/BaseStructs.hpp> #include <components/openmw-mp/Base/BaseStructs.hpp>
#include <RakNetTypes.h> #include <RakNetTypes.h>
namespace mwmp namespace mwmp
{ {
struct BaseMapTile
{
int x;
int y;
std::vector<char> imageData;
};
struct MapChanges
{
std::vector<BaseMapTile> mapTiles;
};
class BaseWorldstate class BaseWorldstate
{ {
@ -37,6 +50,8 @@ namespace mwmp
bool hasPlacedObjectCollision; bool hasPlacedObjectCollision;
bool useActorCollisionForPlacedObjects; bool useActorCollisionForPlacedObjects;
MapChanges mapChanges;
bool isValid; bool isValid;
}; };
} }

@ -29,7 +29,6 @@
#include "../Packets/Player/PacketPlayerJournal.hpp" #include "../Packets/Player/PacketPlayerJournal.hpp"
#include "../Packets/Player/PacketPlayerKillCount.hpp" #include "../Packets/Player/PacketPlayerKillCount.hpp"
#include "../Packets/Player/PacketPlayerLevel.hpp" #include "../Packets/Player/PacketPlayerLevel.hpp"
#include "../Packets/Player/PacketPlayerMap.hpp"
#include "../Packets/Player/PacketPlayerMiscellaneous.hpp" #include "../Packets/Player/PacketPlayerMiscellaneous.hpp"
#include "../Packets/Player/PacketPlayerMomentum.hpp" #include "../Packets/Player/PacketPlayerMomentum.hpp"
#include "../Packets/Player/PacketPlayerPosition.hpp" #include "../Packets/Player/PacketPlayerPosition.hpp"
@ -81,7 +80,6 @@ mwmp::PlayerPacketController::PlayerPacketController(RakNet::RakPeerInterface *p
AddPacket<PacketPlayerJournal>(&packets, peer); AddPacket<PacketPlayerJournal>(&packets, peer);
AddPacket<PacketPlayerKillCount>(&packets, peer); AddPacket<PacketPlayerKillCount>(&packets, peer);
AddPacket<PacketPlayerLevel>(&packets, peer); AddPacket<PacketPlayerLevel>(&packets, peer);
AddPacket<PacketPlayerMap>(&packets, peer);
AddPacket<PacketPlayerMiscellaneous>(&packets, peer); AddPacket<PacketPlayerMiscellaneous>(&packets, peer);
AddPacket<PacketPlayerMomentum>(&packets, peer); AddPacket<PacketPlayerMomentum>(&packets, peer);
AddPacket<PacketPlayerPosition>(&packets, peer); AddPacket<PacketPlayerPosition>(&packets, peer);

@ -1,5 +1,6 @@
#include "../Packets/Worldstate/PacketRecordDynamic.hpp" #include "../Packets/Worldstate/PacketRecordDynamic.hpp"
#include "../Packets/Worldstate/PacketWorldCollisionOverride.hpp" #include "../Packets/Worldstate/PacketWorldCollisionOverride.hpp"
#include "../Packets/Worldstate/PacketWorldMap.hpp"
#include "../Packets/Worldstate/PacketWorldTime.hpp" #include "../Packets/Worldstate/PacketWorldTime.hpp"
#include "WorldstatePacketController.hpp" #include "WorldstatePacketController.hpp"
@ -8,5 +9,6 @@ mwmp::WorldstatePacketController::WorldstatePacketController(RakNet::RakPeerInte
{ {
AddPacket<PacketRecordDynamic>(&packets, peer); AddPacket<PacketRecordDynamic>(&packets, peer);
AddPacket<PacketWorldCollisionOverride>(&packets, peer); AddPacket<PacketWorldCollisionOverride>(&packets, peer);
AddPacket<PacketWorldMap>(&packets, peer);
AddPacket<PacketWorldTime>(&packets, peer); AddPacket<PacketWorldTime>(&packets, peer);
} }

@ -44,7 +44,6 @@ enum GameMessages
ID_PLAYER_JOURNAL, ID_PLAYER_JOURNAL,
ID_PLAYER_KILL_COUNT, ID_PLAYER_KILL_COUNT,
ID_PLAYER_LEVEL, ID_PLAYER_LEVEL,
ID_PLAYER_MAP,
ID_PLAYER_MISCELLANEOUS, ID_PLAYER_MISCELLANEOUS,
ID_PLAYER_MOMENTUM, ID_PLAYER_MOMENTUM,
ID_PLAYER_POSITION, ID_PLAYER_POSITION,
@ -110,6 +109,7 @@ enum GameMessages
ID_RECORD_DYNAMIC, ID_RECORD_DYNAMIC,
ID_WORLD_COLLISION_OVERRIDE, ID_WORLD_COLLISION_OVERRIDE,
ID_WORLD_MAP,
ID_WORLD_TIME, ID_WORLD_TIME,
}; };

@ -1,7 +1,3 @@
//
// Created by koncord on 05.03.17.
//
#include <components/openmw-mp/NetworkMessages.hpp> #include <components/openmw-mp/NetworkMessages.hpp>
#include <boost/foreach.hpp> #include <boost/foreach.hpp>
#include "PacketPreInit.hpp" #include "PacketPreInit.hpp"

@ -1,7 +1,3 @@
//
// Created by koncord on 05.03.17.
//
#ifndef OPENMW_PACKETPREINIT_HPP #ifndef OPENMW_PACKETPREINIT_HPP
#define OPENMW_PACKETPREINIT_HPP #define OPENMW_PACKETPREINIT_HPP

@ -1,7 +1,3 @@
//
// Created by koncord on 15.01.16.
//
#include <components/openmw-mp/NetworkMessages.hpp> #include <components/openmw-mp/NetworkMessages.hpp>
#include "PacketPlayerAnimFlags.hpp" #include "PacketPlayerAnimFlags.hpp"

@ -1,7 +1,3 @@
//
// Created by koncord on 15.01.16.
//
#ifndef OPENMW_PACKETPLAYERANIMFLAGS_HPP #ifndef OPENMW_PACKETPLAYERANIMFLAGS_HPP
#define OPENMW_PACKETPLAYERANIMFLAGS_HPP #define OPENMW_PACKETPLAYERANIMFLAGS_HPP

@ -1,52 +0,0 @@
#include <components/openmw-mp/NetworkMessages.hpp>
#include "PacketPlayerMap.hpp"
using namespace std;
using namespace mwmp;
PacketPlayerMap::PacketPlayerMap(RakNet::RakPeerInterface *peer) : PlayerPacket(peer)
{
packetID = ID_PLAYER_MAP;
}
void PacketPlayerMap::Packet(RakNet::BitStream *bs, bool send)
{
PlayerPacket::Packet(bs, send);
uint32_t changesCount;
if (send)
changesCount = static_cast<uint32_t>(player->mapChanges.mapTiles.size());
RW(changesCount, send);
if (!send)
{
player->mapChanges.mapTiles.clear();
player->mapChanges.mapTiles.resize(changesCount);
}
for (auto &&mapTile : player->mapChanges.mapTiles)
{
RW(mapTile.x, send);
RW(mapTile.y, send);
uint32_t imageDataCount;
if (send)
imageDataCount = static_cast<uint32_t>(mapTile.imageData.size());
RW(imageDataCount, send);
if (!send)
{
mapTile.imageData.clear();
mapTile.imageData.resize(imageDataCount);
}
for (auto &&imageChar : mapTile.imageData)
{
RW(imageChar, send);
}
}
}

@ -1,17 +0,0 @@
#ifndef OPENMW_PACKETPLAYERMAP_HPP
#define OPENMW_PACKETPLAYERMAP_HPP
#include <components/openmw-mp/Packets/Player/PlayerPacket.hpp>
namespace mwmp
{
class PacketPlayerMap final: public PlayerPacket
{
public:
PacketPlayerMap(RakNet::RakPeerInterface *peer);
void Packet(RakNet::BitStream *bs, bool send) override;
};
}
#endif //OPENMW_PACKETPLAYERMAP_HPP

@ -0,0 +1,17 @@
#ifndef OPENMW_PACKETWORLDMAP_HPP
#define OPENMW_PACKETWORLDMAP_HPP
#include <components/openmw-mp/Packets/Worldstate/WorldstatePacket.hpp>
namespace mwmp
{
class PacketWorldMap : public WorldstatePacket
{
public:
PacketWorldMap(RakNet::RakPeerInterface *peer);
virtual void Packet(RakNet::BitStream *bs, bool send);
};
}
#endif //OPENMW_PACKETWORLDMAP_HPP

@ -1,5 +1,5 @@
#include "PacketWorldTime.hpp"
#include <components/openmw-mp/NetworkMessages.hpp> #include <components/openmw-mp/NetworkMessages.hpp>
#include "PacketWorldTime.hpp"
using namespace mwmp; using namespace mwmp;

Loading…
Cancel
Save