Removed MonsterManager's Singleton status, RoomData now has mgr members
RoomData now has monsterMgr and waypointMgr members, so that it can compare it's characters to the monster & waypoints, etc. RoomManager has been updated. It now has a database reference, which is passed to the monsterMgr of new rooms. The room API also has functions which expose these managers to lua.
This commit is contained in:
@@ -26,7 +26,6 @@
|
|||||||
#include "character_manager.hpp"
|
#include "character_manager.hpp"
|
||||||
#include "client_manager.hpp"
|
#include "client_manager.hpp"
|
||||||
#include "config_utility.hpp"
|
#include "config_utility.hpp"
|
||||||
#include "monster_manager.hpp"
|
|
||||||
#include "room_manager.hpp"
|
#include "room_manager.hpp"
|
||||||
#include "udp_network_utility.hpp"
|
#include "udp_network_utility.hpp"
|
||||||
#include "waypoint_manager.hpp"
|
#include "waypoint_manager.hpp"
|
||||||
@@ -43,7 +42,6 @@ int main(int argc, char* argv[]) {
|
|||||||
CharacterManager::CreateSingleton();
|
CharacterManager::CreateSingleton();
|
||||||
ClientManager::CreateSingleton();
|
ClientManager::CreateSingleton();
|
||||||
ConfigUtility::CreateSingleton();
|
ConfigUtility::CreateSingleton();
|
||||||
MonsterManager::CreateSingleton();
|
|
||||||
RoomManager::CreateSingleton();
|
RoomManager::CreateSingleton();
|
||||||
UDPNetworkUtility::CreateSingleton();
|
UDPNetworkUtility::CreateSingleton();
|
||||||
|
|
||||||
@@ -62,7 +60,6 @@ int main(int argc, char* argv[]) {
|
|||||||
CharacterManager::DeleteSingleton();
|
CharacterManager::DeleteSingleton();
|
||||||
ClientManager::DeleteSingleton();
|
ClientManager::DeleteSingleton();
|
||||||
ConfigUtility::DeleteSingleton();
|
ConfigUtility::DeleteSingleton();
|
||||||
MonsterManager::DeleteSingleton();
|
|
||||||
RoomManager::DeleteSingleton();
|
RoomManager::DeleteSingleton();
|
||||||
UDPNetworkUtility::DeleteSingleton();
|
UDPNetworkUtility::DeleteSingleton();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,14 @@
|
|||||||
*/
|
*/
|
||||||
#include "monster_manager.hpp"
|
#include "monster_manager.hpp"
|
||||||
|
|
||||||
|
MonsterManager::MonsterManager() {
|
||||||
|
//EMPTY
|
||||||
|
}
|
||||||
|
|
||||||
|
MonsterManager::~MonsterManager() {
|
||||||
|
UnloadAll();
|
||||||
|
}
|
||||||
|
|
||||||
int MonsterManager::Create(std::string) {
|
int MonsterManager::Create(std::string) {
|
||||||
//TODO
|
//TODO
|
||||||
}
|
}
|
||||||
@@ -49,14 +57,6 @@ std::map<int, MonsterData>* MonsterManager::GetContainer() {
|
|||||||
//TODO
|
//TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlite3* MonsterManager::SetDatabase(sqlite3* db) {
|
|
||||||
//TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
sqlite3* MonsterManager::GetDatabase() {
|
|
||||||
//TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
lua_State* MonsterManager::SetLuaState(lua_State* L) {
|
lua_State* MonsterManager::SetLuaState(lua_State* L) {
|
||||||
//TODO
|
//TODO
|
||||||
}
|
}
|
||||||
@@ -64,3 +64,11 @@ lua_State* MonsterManager::SetLuaState(lua_State* L) {
|
|||||||
lua_State* MonsterManager::GetLuaState() {
|
lua_State* MonsterManager::GetLuaState() {
|
||||||
//TODO
|
//TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sqlite3* MonsterManager::SetDatabase(sqlite3* db) {
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlite3* MonsterManager::GetDatabase() {
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
#define MONSTERMANAGER_HPP_
|
#define MONSTERMANAGER_HPP_
|
||||||
|
|
||||||
#include "monster_data.hpp"
|
#include "monster_data.hpp"
|
||||||
#include "singleton.hpp"
|
|
||||||
|
|
||||||
#include "lua.hpp"
|
#include "lua.hpp"
|
||||||
#include "sqlite3.h"
|
#include "sqlite3.h"
|
||||||
@@ -32,8 +31,11 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class MonsterManager: public Singleton<MonsterManager> {
|
class MonsterManager {
|
||||||
public:
|
public:
|
||||||
|
MonsterManager();
|
||||||
|
~MonsterManager();
|
||||||
|
|
||||||
//common public methods
|
//common public methods
|
||||||
int Create(std::string);
|
int Create(std::string);
|
||||||
void Unload(int uid);
|
void Unload(int uid);
|
||||||
@@ -47,21 +49,16 @@ public:
|
|||||||
std::map<int, MonsterData>* GetContainer();
|
std::map<int, MonsterData>* GetContainer();
|
||||||
|
|
||||||
//hooks
|
//hooks
|
||||||
sqlite3* SetDatabase(sqlite3* db);
|
|
||||||
sqlite3* GetDatabase();
|
|
||||||
lua_State* SetLuaState(lua_State* L);
|
lua_State* SetLuaState(lua_State* L);
|
||||||
lua_State* GetLuaState();
|
lua_State* GetLuaState();
|
||||||
|
sqlite3* SetDatabase(sqlite3* db);
|
||||||
|
sqlite3* GetDatabase();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend Singleton<MonsterManager>;
|
|
||||||
|
|
||||||
MonsterManager() = default;
|
|
||||||
~MonsterManager() = default;
|
|
||||||
|
|
||||||
//members
|
//members
|
||||||
std::map<int, MonsterData> elementMap;
|
std::map<int, MonsterData> elementMap;
|
||||||
sqlite3* database = nullptr;
|
|
||||||
lua_State* lua = nullptr;
|
lua_State* lua = nullptr;
|
||||||
|
sqlite3* database = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#config
|
#config
|
||||||
INCLUDES+=. ../entities ../server_utilities ../../common/map ../../common/utilities
|
INCLUDES+=. ../entities ../monsters ../server_utilities ../waypoints ../../common/map ../../common/utilities
|
||||||
LIBS+=
|
LIBS+=
|
||||||
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,18 @@ static int getPager(lua_State* L) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int getMonsterMgr(lua_State* L) {
|
||||||
|
RoomData* room = reinterpret_cast<RoomData*>(lua_touserdata(L, 1));
|
||||||
|
lua_pushlightuserdata(L, reinterpret_cast<void*>(room->GetMonsterMgr()) );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int getWaypointMgr(lua_State* L) {
|
||||||
|
RoomData* room = reinterpret_cast<RoomData*>(lua_touserdata(L, 1));
|
||||||
|
lua_pushlightuserdata(L, reinterpret_cast<void*>(room->GetWaypointMgr()) );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int initialize(lua_State* L) {
|
static int initialize(lua_State* L) {
|
||||||
//set the members of the given room
|
//set the members of the given room
|
||||||
RoomData* room = static_cast<RoomData*>(lua_touserdata(L, 1));
|
RoomData* room = static_cast<RoomData*>(lua_touserdata(L, 1));
|
||||||
@@ -70,11 +82,15 @@ static int initialize(lua_State* L) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const luaL_Reg roomLib[] = {
|
static const luaL_Reg roomLib[] = {
|
||||||
{"GetPager",getPager},
|
|
||||||
{"SetName", setRoomName},
|
{"SetName", setRoomName},
|
||||||
{"GetName", getRoomName},
|
{"GetName", getRoomName},
|
||||||
{"SetTileset", setTilesetName},
|
{"SetTileset", setTilesetName},
|
||||||
{"GetTileset", getTilesetName},
|
{"GetTileset", getTilesetName},
|
||||||
|
|
||||||
|
{"GetPager",getPager},
|
||||||
|
{"GetMonsterMgr",getMonsterMgr},
|
||||||
|
{"GetWaypointMgr",getWaypointMgr},
|
||||||
|
|
||||||
{"Initialize", initialize},
|
{"Initialize", initialize},
|
||||||
{nullptr, nullptr}
|
{nullptr, nullptr}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -41,6 +41,14 @@ RegionPagerLua* RoomData::GetPager() {
|
|||||||
return &pager;
|
return &pager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MonsterManager* RoomData::GetMonsterMgr() {
|
||||||
|
return &monsterMgr;
|
||||||
|
}
|
||||||
|
|
||||||
|
WaypointManager* RoomData::GetWaypointMgr() {
|
||||||
|
return &waypointMgr;
|
||||||
|
}
|
||||||
|
|
||||||
std::list<Entity*>* RoomData::GetEntityList() {
|
std::list<Entity*>* RoomData::GetEntityList() {
|
||||||
return &entityList;
|
return &entityList;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,9 @@
|
|||||||
#define ROOMDATA_HPP_
|
#define ROOMDATA_HPP_
|
||||||
|
|
||||||
#include "entity.hpp"
|
#include "entity.hpp"
|
||||||
|
#include "monster_manager.hpp"
|
||||||
#include "region_pager_lua.hpp"
|
#include "region_pager_lua.hpp"
|
||||||
|
#include "waypoint_manager.hpp"
|
||||||
|
|
||||||
#include "lua.hpp"
|
#include "lua.hpp"
|
||||||
|
|
||||||
@@ -43,6 +45,8 @@ public:
|
|||||||
std::string GetTileset();
|
std::string GetTileset();
|
||||||
|
|
||||||
RegionPagerLua* GetPager();
|
RegionPagerLua* GetPager();
|
||||||
|
MonsterManager* GetMonsterMgr();
|
||||||
|
WaypointManager* GetWaypointMgr();
|
||||||
std::list<Entity*>* GetEntityList();
|
std::list<Entity*>* GetEntityList();
|
||||||
|
|
||||||
//TODO: triggers for unload, save, per-second, player enter, player exit, etc.
|
//TODO: triggers for unload, save, per-second, player enter, player exit, etc.
|
||||||
@@ -55,6 +59,8 @@ private:
|
|||||||
std::string tilesetName;
|
std::string tilesetName;
|
||||||
|
|
||||||
RegionPagerLua pager;
|
RegionPagerLua pager;
|
||||||
|
MonsterManager monsterMgr;
|
||||||
|
WaypointManager waypointMgr;
|
||||||
std::list<Entity*> entityList;
|
std::list<Entity*> entityList;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ int RoomManager::Create(std::string roomName, std::string tileset) {
|
|||||||
newRoom->SetTileset(tileset);
|
newRoom->SetTileset(tileset);
|
||||||
|
|
||||||
newRoom->pager.SetLuaState(lua);
|
newRoom->pager.SetLuaState(lua);
|
||||||
|
newRoom->monsterMgr.SetLuaState(lua);
|
||||||
|
newRoom->monsterMgr.SetDatabase(database);
|
||||||
|
newRoom->waypointMgr.SetLuaState(lua);
|
||||||
|
|
||||||
//finish the routine
|
//finish the routine
|
||||||
return counter++;
|
return counter++;
|
||||||
@@ -122,3 +125,11 @@ lua_State* RoomManager::SetLuaState(lua_State* L) {
|
|||||||
lua_State* RoomManager::GetLuaState() {
|
lua_State* RoomManager::GetLuaState() {
|
||||||
return lua;
|
return lua;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sqlite3* RoomManager::SetDatabase(sqlite3* db) {
|
||||||
|
return database = db;
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlite3* RoomManager::GetDatabase() {
|
||||||
|
return database;
|
||||||
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
#include "singleton.hpp"
|
#include "singleton.hpp"
|
||||||
|
|
||||||
#include "lua.hpp"
|
#include "lua.hpp"
|
||||||
|
#include "sqlite3.h"
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <map>
|
#include <map>
|
||||||
@@ -51,6 +52,8 @@ public:
|
|||||||
//hooks
|
//hooks
|
||||||
lua_State* SetLuaState(lua_State* L);
|
lua_State* SetLuaState(lua_State* L);
|
||||||
lua_State* GetLuaState();
|
lua_State* GetLuaState();
|
||||||
|
sqlite3* SetDatabase(sqlite3* db);
|
||||||
|
sqlite3* GetDatabase();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend Singleton<RoomManager>;
|
friend Singleton<RoomManager>;
|
||||||
@@ -61,6 +64,7 @@ private:
|
|||||||
//members
|
//members
|
||||||
std::map<int, RoomData> elementMap;
|
std::map<int, RoomData> elementMap;
|
||||||
lua_State* lua = nullptr;
|
lua_State* lua = nullptr;
|
||||||
|
sqlite3* database = nullptr;
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -114,10 +114,9 @@ private:
|
|||||||
lua_State* luaState = nullptr;
|
lua_State* luaState = nullptr;
|
||||||
|
|
||||||
//ugly references; I hate this
|
//ugly references; I hate this
|
||||||
|
ClientManager& clientMgr = ClientManager::GetSingleton();
|
||||||
AccountManager& accountMgr = AccountManager::GetSingleton();
|
AccountManager& accountMgr = AccountManager::GetSingleton();
|
||||||
CharacterManager& characterMgr = CharacterManager::GetSingleton();
|
CharacterManager& characterMgr = CharacterManager::GetSingleton();
|
||||||
ClientManager& clientMgr = ClientManager::GetSingleton();
|
|
||||||
MonsterManager& monsterMgr = MonsterManager::GetSingleton();
|
|
||||||
RoomManager& roomMgr = RoomManager::GetSingleton();
|
RoomManager& roomMgr = RoomManager::GetSingleton();
|
||||||
|
|
||||||
ConfigUtility& config = ConfigUtility::GetSingleton();
|
ConfigUtility& config = ConfigUtility::GetSingleton();
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ void ServerApplication::Init(int argc, char* argv[]) {
|
|||||||
characterMgr.SetDatabase(database);
|
characterMgr.SetDatabase(database);
|
||||||
|
|
||||||
roomMgr.SetLuaState(luaState);
|
roomMgr.SetLuaState(luaState);
|
||||||
|
roomMgr.SetDatabase(database);
|
||||||
|
|
||||||
std::cout << "Internal managers initialized" << std::endl;
|
std::cout << "Internal managers initialized" << std::endl;
|
||||||
|
|
||||||
@@ -201,7 +202,6 @@ void ServerApplication::Quit() {
|
|||||||
accountMgr.UnloadAll();
|
accountMgr.UnloadAll();
|
||||||
characterMgr.UnloadAll();
|
characterMgr.UnloadAll();
|
||||||
clientMgr.UnloadAll();
|
clientMgr.UnloadAll();
|
||||||
monsterMgr.UnloadAll();
|
|
||||||
roomMgr.UnloadAll();
|
roomMgr.UnloadAll();
|
||||||
|
|
||||||
//APIs
|
//APIs
|
||||||
|
|||||||
Reference in New Issue
Block a user