diff --git a/server/main.cpp b/server/main.cpp index befb95a..b7a8953 100644 --- a/server/main.cpp +++ b/server/main.cpp @@ -26,7 +26,6 @@ #include "character_manager.hpp" #include "client_manager.hpp" #include "config_utility.hpp" -#include "monster_manager.hpp" #include "room_manager.hpp" #include "udp_network_utility.hpp" #include "waypoint_manager.hpp" @@ -43,7 +42,6 @@ int main(int argc, char* argv[]) { CharacterManager::CreateSingleton(); ClientManager::CreateSingleton(); ConfigUtility::CreateSingleton(); - MonsterManager::CreateSingleton(); RoomManager::CreateSingleton(); UDPNetworkUtility::CreateSingleton(); @@ -62,7 +60,6 @@ int main(int argc, char* argv[]) { CharacterManager::DeleteSingleton(); ClientManager::DeleteSingleton(); ConfigUtility::DeleteSingleton(); - MonsterManager::DeleteSingleton(); RoomManager::DeleteSingleton(); UDPNetworkUtility::DeleteSingleton(); } diff --git a/server/monsters/monster_manager.cpp b/server/monsters/monster_manager.cpp index 2031fe2..5717e45 100644 --- a/server/monsters/monster_manager.cpp +++ b/server/monsters/monster_manager.cpp @@ -21,6 +21,14 @@ */ #include "monster_manager.hpp" +MonsterManager::MonsterManager() { + //EMPTY +} + +MonsterManager::~MonsterManager() { + UnloadAll(); +} + int MonsterManager::Create(std::string) { //TODO } @@ -49,14 +57,6 @@ std::map* MonsterManager::GetContainer() { //TODO } -sqlite3* MonsterManager::SetDatabase(sqlite3* db) { - //TODO -} - -sqlite3* MonsterManager::GetDatabase() { - //TODO -} - lua_State* MonsterManager::SetLuaState(lua_State* L) { //TODO } @@ -64,3 +64,11 @@ lua_State* MonsterManager::SetLuaState(lua_State* L) { lua_State* MonsterManager::GetLuaState() { //TODO } + +sqlite3* MonsterManager::SetDatabase(sqlite3* db) { + //TODO +} + +sqlite3* MonsterManager::GetDatabase() { + //TODO +} diff --git a/server/monsters/monster_manager.hpp b/server/monsters/monster_manager.hpp index 07d9602..5d74e4c 100644 --- a/server/monsters/monster_manager.hpp +++ b/server/monsters/monster_manager.hpp @@ -23,7 +23,6 @@ #define MONSTERMANAGER_HPP_ #include "monster_data.hpp" -#include "singleton.hpp" #include "lua.hpp" #include "sqlite3.h" @@ -32,8 +31,11 @@ #include #include -class MonsterManager: public Singleton { +class MonsterManager { public: + MonsterManager(); + ~MonsterManager(); + //common public methods int Create(std::string); void Unload(int uid); @@ -47,21 +49,16 @@ public: std::map* GetContainer(); //hooks - sqlite3* SetDatabase(sqlite3* db); - sqlite3* GetDatabase(); lua_State* SetLuaState(lua_State* L); lua_State* GetLuaState(); + sqlite3* SetDatabase(sqlite3* db); + sqlite3* GetDatabase(); private: - friend Singleton; - - MonsterManager() = default; - ~MonsterManager() = default; - //members std::map elementMap; - sqlite3* database = nullptr; lua_State* lua = nullptr; + sqlite3* database = nullptr; }; #endif \ No newline at end of file diff --git a/server/rooms/makefile b/server/rooms/makefile index 514e483..a0dda5d 100644 --- a/server/rooms/makefile +++ b/server/rooms/makefile @@ -1,5 +1,5 @@ #config -INCLUDES+=. ../entities ../server_utilities ../../common/map ../../common/utilities +INCLUDES+=. ../entities ../monsters ../server_utilities ../waypoints ../../common/map ../../common/utilities LIBS+= CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES)) diff --git a/server/rooms/room_api.cpp b/server/rooms/room_api.cpp index b6606f8..bee2689 100644 --- a/server/rooms/room_api.cpp +++ b/server/rooms/room_api.cpp @@ -53,6 +53,18 @@ static int getPager(lua_State* L) { return 1; } +static int getMonsterMgr(lua_State* L) { + RoomData* room = reinterpret_cast(lua_touserdata(L, 1)); + lua_pushlightuserdata(L, reinterpret_cast(room->GetMonsterMgr()) ); + return 1; +} + +static int getWaypointMgr(lua_State* L) { + RoomData* room = reinterpret_cast(lua_touserdata(L, 1)); + lua_pushlightuserdata(L, reinterpret_cast(room->GetWaypointMgr()) ); + return 1; +} + static int initialize(lua_State* L) { //set the members of the given room RoomData* room = static_cast(lua_touserdata(L, 1)); @@ -70,11 +82,15 @@ static int initialize(lua_State* L) { } static const luaL_Reg roomLib[] = { - {"GetPager",getPager}, {"SetName", setRoomName}, {"GetName", getRoomName}, {"SetTileset", setTilesetName}, {"GetTileset", getTilesetName}, + + {"GetPager",getPager}, + {"GetMonsterMgr",getMonsterMgr}, + {"GetWaypointMgr",getWaypointMgr}, + {"Initialize", initialize}, {nullptr, nullptr} }; diff --git a/server/rooms/room_data.cpp b/server/rooms/room_data.cpp index 8919564..87a9502 100644 --- a/server/rooms/room_data.cpp +++ b/server/rooms/room_data.cpp @@ -41,6 +41,14 @@ RegionPagerLua* RoomData::GetPager() { return &pager; } +MonsterManager* RoomData::GetMonsterMgr() { + return &monsterMgr; +} + +WaypointManager* RoomData::GetWaypointMgr() { + return &waypointMgr; +} + std::list* RoomData::GetEntityList() { return &entityList; } diff --git a/server/rooms/room_data.hpp b/server/rooms/room_data.hpp index 8a8e094..b5d9d9f 100644 --- a/server/rooms/room_data.hpp +++ b/server/rooms/room_data.hpp @@ -23,7 +23,9 @@ #define ROOMDATA_HPP_ #include "entity.hpp" +#include "monster_manager.hpp" #include "region_pager_lua.hpp" +#include "waypoint_manager.hpp" #include "lua.hpp" @@ -43,6 +45,8 @@ public: std::string GetTileset(); RegionPagerLua* GetPager(); + MonsterManager* GetMonsterMgr(); + WaypointManager* GetWaypointMgr(); std::list* GetEntityList(); //TODO: triggers for unload, save, per-second, player enter, player exit, etc. @@ -55,6 +59,8 @@ private: std::string tilesetName; RegionPagerLua pager; + MonsterManager monsterMgr; + WaypointManager waypointMgr; std::list entityList; }; diff --git a/server/rooms/room_manager.cpp b/server/rooms/room_manager.cpp index b173ed8..65df378 100644 --- a/server/rooms/room_manager.cpp +++ b/server/rooms/room_manager.cpp @@ -36,6 +36,9 @@ int RoomManager::Create(std::string roomName, std::string tileset) { newRoom->SetTileset(tileset); newRoom->pager.SetLuaState(lua); + newRoom->monsterMgr.SetLuaState(lua); + newRoom->monsterMgr.SetDatabase(database); + newRoom->waypointMgr.SetLuaState(lua); //finish the routine return counter++; @@ -122,3 +125,11 @@ lua_State* RoomManager::SetLuaState(lua_State* L) { lua_State* RoomManager::GetLuaState() { return lua; } + +sqlite3* RoomManager::SetDatabase(sqlite3* db) { + return database = db; +} + +sqlite3* RoomManager::GetDatabase() { + return database; +} diff --git a/server/rooms/room_manager.hpp b/server/rooms/room_manager.hpp index 7fe75a6..1b51c23 100644 --- a/server/rooms/room_manager.hpp +++ b/server/rooms/room_manager.hpp @@ -27,6 +27,7 @@ #include "singleton.hpp" #include "lua.hpp" +#include "sqlite3.h" #include #include @@ -51,6 +52,8 @@ public: //hooks lua_State* SetLuaState(lua_State* L); lua_State* GetLuaState(); + sqlite3* SetDatabase(sqlite3* db); + sqlite3* GetDatabase(); private: friend Singleton; @@ -61,6 +64,7 @@ private: //members std::map elementMap; lua_State* lua = nullptr; + sqlite3* database = nullptr; int counter = 0; }; diff --git a/server/server_application.hpp b/server/server_application.hpp index aa26406..2756be3 100644 --- a/server/server_application.hpp +++ b/server/server_application.hpp @@ -114,10 +114,9 @@ private: lua_State* luaState = nullptr; //ugly references; I hate this + ClientManager& clientMgr = ClientManager::GetSingleton(); AccountManager& accountMgr = AccountManager::GetSingleton(); CharacterManager& characterMgr = CharacterManager::GetSingleton(); - ClientManager& clientMgr = ClientManager::GetSingleton(); - MonsterManager& monsterMgr = MonsterManager::GetSingleton(); RoomManager& roomMgr = RoomManager::GetSingleton(); ConfigUtility& config = ConfigUtility::GetSingleton(); diff --git a/server/server_logic.cpp b/server/server_logic.cpp index 8a3505b..d4d96fa 100644 --- a/server/server_logic.cpp +++ b/server/server_logic.cpp @@ -105,6 +105,7 @@ void ServerApplication::Init(int argc, char* argv[]) { characterMgr.SetDatabase(database); roomMgr.SetLuaState(luaState); + roomMgr.SetDatabase(database); std::cout << "Internal managers initialized" << std::endl; @@ -201,7 +202,6 @@ void ServerApplication::Quit() { accountMgr.UnloadAll(); characterMgr.UnloadAll(); clientMgr.UnloadAll(); - monsterMgr.UnloadAll(); roomMgr.UnloadAll(); //APIs