diff --git a/rsc/scripts/setup_server.sql b/rsc/scripts/setup_server.sql index e8f1ec3..d672072 100644 --- a/rsc/scripts/setup_server.sql +++ b/rsc/scripts/setup_server.sql @@ -1,6 +1,6 @@ --TODO: (3) An archive table of all dead characters -CREATE TABLE IF NOT EXISTS Accounts ( +CREATE TABLE IF NOT EXISTS UserAccounts ( uid INTEGER PRIMARY KEY AUTOINCREMENT, username varchar(100) UNIQUE, --TODO: (3) Swap username for email address @@ -15,7 +15,7 @@ CREATE TABLE IF NOT EXISTS Accounts ( admin BIT DEFAULT 0 ); -CREATE TABLE IF NOT EXISTS Characters ( +CREATE TABLE IF NOT EXISTS LiveCharacters ( uid INTEGER PRIMARY KEY AUTOINCREMENT, --metadata @@ -31,18 +31,30 @@ CREATE TABLE IF NOT EXISTS Characters ( boundsX INTEGER DEFAULT 0, boundsY INTEGER DEFAULT 0, boundsW INTEGER DEFAULT 0, - boundsH INTEGER DEFAULT 0, + boundsH INTEGER DEFAULT 0 - --statistics - baseStats INTEGER REFERENCES StatisticSets(uid), + --TODO: statistics +-- baseStats INTEGER REFERENCES StatisticSets(uid) - --equipment - weapon INTEGER REFERENCES WornEquipment(uid), - helmet INTEGER REFERENCES WornEquipment(uid), - armour INTEGER REFERENCES WornEquipment(uid) + --TODO: equipment +-- weapon INTEGER REFERENCES WornEquipment(uid) +-- helmet INTEGER REFERENCES WornEquipment(uid) +-- armour INTEGER REFERENCES WornEquipment(uid) --etc. ); +CREATE TABLE IF NOT EXISTS DeadCharacters ( + uid INTEGER PRIMARY KEY AUTOINCREMENT +); + +CREATE TABLE IF NOT EXISTS LiveMonsters ( + uid INTEGER PRIMARY KEY AUTOINCREMENT +); + +CREATE TABLE IF NOT EXISTS DeadMonsters ( + uid INTEGER PRIMARY KEY AUTOINCREMENT +); + ------------------------- --Utility tables ------------------------- diff --git a/server/accounts/account_manager.cpp b/server/accounts/account_manager.cpp index 328ca48..bf67d41 100644 --- a/server/accounts/account_manager.cpp +++ b/server/accounts/account_manager.cpp @@ -27,7 +27,7 @@ //Define the queries //------------------------- -static const char* CREATE_USER_ACCOUNT = "INSERT INTO Accounts (username) VALUES (?);"; +static const char* CREATE_USER_ACCOUNT = "INSERT INTO UserAccounts (username) VALUES (?);"; static const char* LOAD_USER_ACCOUNT = "SELECT " "uid, " @@ -35,18 +35,18 @@ static const char* LOAD_USER_ACCOUNT = "SELECT " "whitelisted, " "mod, " "admin " - " FROM Accounts WHERE username = ?;"; + " FROM UserAccounts WHERE username = ?;"; -static const char* SAVE_USER_ACCOUNT = "UPDATE OR FAIL Accounts SET " +static const char* SAVE_USER_ACCOUNT = "UPDATE OR FAIL UserAccounts SET " "blacklisted = ?2, " "whitelisted = ?3, " "mod = ?4, " "admin = ?5 " "WHERE uid = ?1;"; -static const char* DELETE_USER_ACCOUNT = "DELETE FROM Accounts WHERE uid = ?;"; +static const char* DELETE_USER_ACCOUNT = "DELETE FROM UserAccounts WHERE uid = ?;"; -static const char* COUNT_USER_ACCOUNT_RECORDS = "SELECT COUNT(*) FROM Accounts;"; +static const char* COUNT_USER_ACCOUNT_RECORDS = "SELECT COUNT(*) FROM UserAccounts;"; //------------------------- //Define the public methods diff --git a/server/characters/character_manager.cpp b/server/characters/character_manager.cpp index a094f51..2f9d150 100644 --- a/server/characters/character_manager.cpp +++ b/server/characters/character_manager.cpp @@ -35,7 +35,7 @@ //NOTE: Programmer set variables are NOT zero-indexed //NOTE: SQLite3 returned variables (i.e. loading) ARE zero-indexed -static const char* CREATE_CHARACTER = "INSERT INTO Characters (" +static const char* CREATE_CHARACTER = "INSERT INTO LiveCharacters (" "owner, " "handle, " "avatar, " @@ -57,9 +57,9 @@ static const char* LOAD_CHARACTER = "SELECT " "boundsY, " "boundsW, " "boundsH " - "FROM Characters WHERE handle = ?;"; + "FROM LiveCharacters WHERE handle = ?;"; -static const char* SAVE_CHARACTER = "UPDATE OR FAIL Characters SET " +static const char* SAVE_CHARACTER = "UPDATE OR FAIL LiveCharacters SET " "roomIndex = ?2, " "originX = ?3, " "originY = ?4, " @@ -69,9 +69,9 @@ static const char* SAVE_CHARACTER = "UPDATE OR FAIL Characters SET " "boundsH = ?8 " "WHERE uid = ?1;"; -static const char* DELETE_CHARACTER = "DELETE FROM Characters WHERE uid = ?;"; +static const char* DELETE_CHARACTER = "DELETE FROM LiveCharacters WHERE uid = ?;"; -static const char* COUNT_CHARACTER_RECORDS = "SELECT COUNT(*) FROM Characters;"; +static const char* COUNT_CHARACTER_RECORDS = "SELECT COUNT(*) FROM LiveCharacters;"; //------------------------- //Define the methods diff --git a/server/monsters/monster_api.cpp b/server/monsters/monster_api.cpp index 915b0c3..c5c4d93 100644 --- a/server/monsters/monster_api.cpp +++ b/server/monsters/monster_api.cpp @@ -28,7 +28,7 @@ static int setAvatar(lua_State* L) { MonsterData* monster = static_cast(lua_touserdata(L, 1)); monster->SetAvatar(lua_tostring(L, 2)); - //TODO: send an update to the clients? + //TODO: (1) send an update to the clients? return 0; } diff --git a/server/monsters/monster_manager.cpp b/server/monsters/monster_manager.cpp index cd54bc1..a8cf51c 100644 --- a/server/monsters/monster_manager.cpp +++ b/server/monsters/monster_manager.cpp @@ -29,46 +29,60 @@ MonsterManager::~MonsterManager() { UnloadAll(); } -int MonsterManager::Create(std::string) { - //TODO: (9) MonsterManager::Create() +int MonsterManager::Create(std::string s) { + //TODO: (1) MonsterManager::Create() } void MonsterManager::Unload(int uid) { - //TODO: (9) MonsterManager::Unload() + elementMap.erase(uid); } void MonsterManager::UnloadAll() { - //TODO: (9) MonsterManager::UnloadAll() + elementMap.clear(); } void MonsterManager::UnloadIf(std::function)> fn) { - //TODO: (9) MonsterManager::UnloadIf() + std::map::iterator it = elementMap.begin(); + while (it != elementMap.end()) { + if (fn(*it)) { + it = elementMap.erase(it); + } + else { + ++it; + } + } } MonsterData* MonsterManager::Get(int uid) { - //TODO: (9) MonsterManager::Get() + std::map::iterator it = elementMap.find(uid); + + if (it == elementMap.end()) { + return nullptr; + } + + return &it->second; } int MonsterManager::GetLoadedCount() { - //TODO: (9) MonsterManager::GetLoadedCount() + return elementMap.size(); } std::map* MonsterManager::GetContainer() { - //TODO: (9) MonsterManager::GetContainer() + return &elementMap; } lua_State* MonsterManager::SetLuaState(lua_State* L) { - //TODO: (9) MonsterManager::SetLuaState() + return lua = L; } lua_State* MonsterManager::GetLuaState() { - //TODO: (9) MonsterManager::GetLuaState() + return lua; } sqlite3* MonsterManager::SetDatabase(sqlite3* db) { - //TODO: (9) MonsterManager::SetDatabase() + return database = db; } sqlite3* MonsterManager::GetDatabase() { - //TODO: (9) MonsterManager::GetDatabase() + return database; } diff --git a/server/network_api.cpp b/server/network_api.cpp index 9975cd0..83d2d80 100644 --- a/server/network_api.cpp +++ b/server/network_api.cpp @@ -62,8 +62,13 @@ static int pumpCharacterUpdate(lua_State* L) { return 1; } +static int pumpMonsterUpdate(lua_State* L) { + //TODO: (0) send the info about a specific monster instance +} + static const luaL_Reg networkLib[] = { {"PumpCharacterUpdate", pumpCharacterUpdate}, + {"PumpMonsterUpdate", pumpMonsterUpdate}, {nullptr, nullptr} };