From 8e97de69797b1935b24df4138e53061bd3ed1522 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Mon, 29 Sep 2014 23:42:40 +1000 Subject: [PATCH 1/3] Added the scripts directory to lua's path This will allow modules. --- rsc/scripts/map_maker.lua | 7 +++++++ rsc/scripts/setup_server.lua | 3 +++ server/server_logic.cpp | 20 ++++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 rsc/scripts/map_maker.lua diff --git a/rsc/scripts/map_maker.lua b/rsc/scripts/map_maker.lua new file mode 100644 index 0000000..ccbd0a8 --- /dev/null +++ b/rsc/scripts/map_maker.lua @@ -0,0 +1,7 @@ +local mapMaker = {} + +function mapMaker.foo() + print("--> Hello map maker! <--") +end + +return mapMaker \ No newline at end of file diff --git a/rsc/scripts/setup_server.lua b/rsc/scripts/setup_server.lua index ab851c1..4b24ba9 100644 --- a/rsc/scripts/setup_server.lua +++ b/rsc/scripts/setup_server.lua @@ -1,5 +1,8 @@ print("Lua script check") +mapMaker = require "map_maker" +mapMaker.foo() + --uber lazy declarations function math.sqr(x) return x*x end function math.dist(x, y, i, j) return math.sqrt(math.sqr(x - i) + math.sqr(y - j)) end diff --git a/server/server_logic.cpp b/server/server_logic.cpp index 51ed785..6e45929 100644 --- a/server/server_logic.cpp +++ b/server/server_logic.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include //------------------------- @@ -71,8 +72,27 @@ void ServerApplication::Init(int argc, char* argv[]) { throw(std::runtime_error("Failed to initialize lua")); } luaL_openlibs(luaState); + std::cout << "Initialized lua" << std::endl; + //append config["dir.scripts"] to the module path + if (config["dir.scripts"].size() > 0) { + //get the original path + lua_getglobal(luaState, "package"); + lua_getfield(luaState, -1, "path"); + + //build & push the message + std::ostringstream path; + path << lua_tostring(luaState, -1) << ";" << config["dir.scripts"] << "?.lua"; + lua_pushstring(luaState, path.str().c_str()); + + //set the new path and clean up the stack + lua_setfield(luaState, -3, "path"); + lua_pop(luaState, 2); + + std::cout << "\tLua script directory appended" << std::endl; + } + //------------------------- //Setup the objects //------------------------- From 87ef03d512a8d1af606a0b8cfe3bef288da912f9 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Tue, 30 Sep 2014 00:44:54 +1000 Subject: [PATCH 2/3] Moved the debug island into a module --- client/scenes/in_world.cpp | 2 +- rsc/graphics/tilesets/overworld.bmp | Bin 0 -> 786486 bytes rsc/scripts/map_maker.lua | 34 ++++++++++++++++++-- rsc/scripts/setup_server.lua | 46 +--------------------------- 4 files changed, 34 insertions(+), 48 deletions(-) create mode 100644 rsc/graphics/tilesets/overworld.bmp diff --git a/client/scenes/in_world.cpp b/client/scenes/in_world.cpp index 78cb8d8..028d5bd 100644 --- a/client/scenes/in_world.cpp +++ b/client/scenes/in_world.cpp @@ -71,7 +71,7 @@ InWorld::InWorld( //load the tilesheet //TODO: add the tilesheet to the map system? //TODO: Tile size and tile sheet should be loaded elsewhere - tileSheet.Load(config["dir.tilesets"] + "terrain.bmp", 32, 32); + tileSheet.Load(config["dir.tilesets"] + "overworld.bmp", 32, 32); //send this player's character info CharacterPacket newPacket; diff --git a/rsc/graphics/tilesets/overworld.bmp b/rsc/graphics/tilesets/overworld.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d9cc0c6ebab8853254282098d12c584fdd467a29 GIT binary patch literal 786486 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 zdZ(^;+85f;7uw)@r>=L}7uwJl+TePpu6NoO+Rzu;;CiR7ciI=)&==a^dZ(^;+85f; z7uw)@r>=L}7uwJl+TePpu6NoO+Rzu;;CiR7ciI=)&==a^dZ(^;+85f;7uw)@r>=L} z7uwJl+TePpu6NoO+Rzu;;CiR7ciI=)&==a^dZ(^;+85f;7uw)@r>=L}7uwJl+TePp zu6NoO+Rzu;;CiR7ciI=)&==a^dZ(^;+85f;7uw)@r>=L}7uwJl+TePpu6NoO+Rzu; z;CiR7ciI=)&==a^dZ(^;+85f;7uw)@r>=L}7uwJl+TePpu6NoO+Rzu;;CiR7ciI=) z&==a^dZ(^;+85f;7uw)@r>=L}7uwJl+TePpu6NoO+Rzu;;CiR7ciI=)&==a^dZ(^; z+85f;7uw)@r>=L}7uwJl+TePpu6NoO+Rzu;;CiR7ciI=)&==a^dZ(^;+85f;7uw)@ zr>=L}7uwJl+TePpu6NoO+Rzu;;CiR7ciI=)&==a^dZ(^;+85f;7uw)@r>=L}7uwJl z+TePpu6NoO+Rzu;;CiR7ciI=)&==a^dZ(^;+85f;7uw)@r>=L}7uwJl+TePpu6NoO z+Rzu;;CiR7ciI=)&==a^dZ(^;+85f;7uw)@r>=L}7uwJl+TePpu6NoO+Rzu;;CiR7 zciI=)&==a^dZ(^;+85f;7uw)@r>=L}7uwJl+TePpu6NoO+Rzu;;CiR7ciI=)&==a^ zdZ(^;+85f;7uw)@r>=L}7uwJl+TePpu6NoO+Rzu;;CiR7ciI=)&==a^dZ(^;+85f; z7uw)@r>=L}7uwJl+TePpu6NoO+Rzu;;CiR7ciI=)&==a^dZ(^;+85f;7uw)@r>=L} z7uwJl+TePpu6NoO+Rzu;;CiR7ciI=)&==a^dZ(^;+85f;7uw)@r>=L}7uwJl+TePp zu6NoO+Rzu;;CiR7ciI=)&==a^dZ(^;+85f;7uw)@r>=L}7uwJl+TePpu6NoO+Rzu; z;CiR7ciI=)&==a^dZ(^;+85f;7uw)@r>=L}7uwJl+TePpu6NoO+Rzu;;CiR7ciI=) z&==a^dZ(^;+85f;7uw)@r>=L}7uwJl+TePpu6NoO+Rzu;;CiR7ciI=)&==a^dZ(^; z+85f;7uw)@r>=L}7uwJl+TePpu6NoO+Rzu;;CiR7ciI=)&==a^dZ(^;+85f;7uw)@ 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 zPF?S`FSMaAw88aGUGKCnw4pDw!SzmE@3b$pp)a(-^-f*yv@f)wFSNn+PF?S`FSMaA zw88aGUGKCnw4pDw!SzmE@3b$pp)a(-^-f*yv@f)wFSNn+PF?S`FSMaAw88aGUGKCn zw4pDw!SzmE@3b$pp)a(-^-f*yv@f)wFSNn+PF?S`FSMaAw88aGUGKCnw4pDw!SzmE z@3b$pp)a(-^-f*yv@f)wFSNn+PF?S`FSMaAw88aGUGKCnw4pDw!SzmE@3b$pp)a(- z^-f*yv@f)wFSNn+PF?S`FSMaAw88aGUGKCnw4pDw!SzmE@3b$pp)a(-^-f*yv@f)w zFSNn+PF?S`FSMaAw88aGUGKCnw4pDw!SzmE@3b$pp)a(-^-f*yv@f)wFSNn+PF?S` zFSMaAw88aGUGKCnw4pDw!SzmE@3b$pp)a(-^-f*yv@f)wFSNn+PF?S`FSMaAw88aG zUGKCnw4pDw!SzmE@3b$pp)a(-^-f*yv@f)wFSNn+PF?S`FSMaAw88aGUGKCnw4pDw z!SzmE@3b$pp)a(-^-f*yv@f)wFSNn+PF?S`FSMaAw88aGUGKCnw4pDw!SzmE@3b$p zp)a(-^-f*yv@f)wFSNn+PF?S`FSMaAw88aGUGKCnw4pDw!SzmE@3b$pp)a(-^-f*y zv@f)wFSNn+PF?S`FSMaAw88aGUGKCnw4pDw!SzmE@3b$pp)a(-^-f*yv@f)wFSNn+ zPF?S`FSMaAw88aGUGKCnw4pDw!SzmE@3b$pp)a(-^-f*yv@f)wFSNn+PF?S`FSMaA zw88aGUGKCnw4pDw!SzmE@3b$pp)a(-^-f*yv@f)wFSNn+PF?S`FSMaAw88aGUGKCn zw4pDw!SzmE@3b$pp)a(-^-f*yv@f)wFSNn+PF?S`FSMaAw88aGUGKCnw4pDw!SzmE z@3b$pp)a(-^-f*yv@f)wFSNn+PF?S`FSMaAw88aGUGKCnw4pDw!SzmE@3b$pp)a(- z^-f*yv@f)wFSNn+PF?S`FSMaAw88aGUGKCnw4pDw!SzmE@3b$pp)a(-^-f*yv@f)w zFSNn+PF?S`FSMaAw88aGUGKCnw4pDw!SzmE@3b$pp)a(-^-f*yv@f)wFSNn+PF?S` zFSMaAw88aGUGKCnw4pDw!SzmE@3b$pp)a(-^-f*yv@f)wFSNn+PF?S`FSMaAw88aG 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 zy;Ija?F((_3vF<{Q`bA~3vK8NZE(F)*E{VCZRiVaaJ^I4JM9Z?=nHLdy;Ija?F((_ z3vF<{Q`bA~3vK8NZE(F)*E{VCZRiVaaJ^I4JM9Z?=nHLdy;Ija?F((_3vF<{Q`bA~ z3vK8NZE(F)*E{VCZRiVaaJ^I4JM9Z?=nHLdy;Ija?F((_3vF<{Q`bA~3vK8NZE(F) z*E{VCZRiVaaJ^I4JM9Z?=nHLdy;Ija?F((_3vF<{Q`bA~3vK8NZE(F)*E{VCZRiVa zaJ^I4JM9Z?=nHLdy;Ija?F((_3vF<{Q`bA~3vK8NZE(F)*E{VCZRiVaaJ^I4JM9Z? z=nHLdy;Ija?F((_3vF<{Q`bA~3vK8NZE(F)*E{VCZRiVaaJ^I4JM9Z?=nHLdy;Ija z?F((_3vF<{Q`bA~3vK8NZE(F)*E{VCZRiVaaJ^I4JM9Z?=nHLdy;Ija?F((_3vF<{ zQ`bA~3vK8NZE(F)*E{VCZRiVaaJ^I4JM9Z?=nHLdy;Ija?F((_3vF<{Q`bA~3vK8N zZE(F)*E{VCZRiVaaJ^I4JM9Z?=nHLdy;Ija?F((_3vF<{Q`bA~3vK8NZE(F)*E{VC zZRiVaaJ^I4JM9Z?=nHLdy;Ija?F((_3vF<{Q`bA~3vK8NZE(F)*E{VCZRiVaaJ^I4 zJM9Z?=nHLdy;Ija?F((_3vF<{Q`bA~3vK8NZE(F)*E{VCZRiVaaJ^I4JM9Z?=nHLd zy;Ija?F((_3vF<{Q`bA~3vK8NZE(F)*E{VCZRiVaaJ^I4JM9Z?=nHLdy;Ija?F((_ z3vF<{Q`bA~3vK8NZE(F)*E{VCZRiVaaJ^I4JM9Z?=nHLdy;Ija?F((_3vF<{Q`bA~ z3vK8NZE(F)*E{VCZRiVaaJ^I4JM9Z?=nHLdy;Ija?F((_3vF<{Q`bA~3vK8NZE(F) z*E{VCZRiVaaJ^I4JM9Z?=nHLdy;Ija?F((_3vF<{Q`bA~3vK8NZE(F)*E{VCZRiVa zaJ^I4JM9Z?=nHLdy;Ija?F((_3vF<{Q`bA~3vK8NZE(F)*E{VCZRiVaaJ^I4JM9Z? z=nHLdy;Ija?F((_3vF<{Q`bA~3vK8NZE(F)*E{VCZRiVaaJ^I4JM9Z?=nHLdy;Ija z?F((_3vF<{Q`bA~3vK8NZE(F)*E{VCZRiVaaJ^I4JM9Z?=nHLdy;Ija?F((_3vF<{ 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 z>z($6HuQxyxZbJjo%V$`^o2IK-l^-I_Jua|g*Ld}sq3Bgg*NnsHn`rY>z($6HuQxy zxZbJjo%V$`^o2IK-l^-I_Jua|g*Ld}sq3Bgg*NnsHn`rY>z($6HuQxyxZbJjo%V$` z^o2IK-l^-I_Jua|g*Ld}sq3Bgg*NnsHn`rY>z($6HuQxyxZbJjo%V$`^o2IK-l^-I z_Jua|g*Ld}sq3Bgg*NnsHn`rY>z($6HuQxyxZbJjo%V$`^o2IK-l^-I_Jua|g*Ld} zsq3Bgg*NnsHn`rY>z($6HuQxyxZbJjo%V$`^o2IK-l^-I_Jua|g*Ld}sq3Bgg*Nns zHn`rY>z($6HuQxyxZbJjo%V$`^o2IK-l^-I_Jua|g*Ld}sq3Bgg*NnsHn`rY>z($6 zHuQxyxZbJjo%V$`^o2IK-l^-I_Jua|g*Ld}sq3Bgg*NnsHn`rY>z($6HuQxyxZbJj zo%V$`^o2IK-l^-I_Jua|g*Ld}sq3Bgg*NnsHn`rY>z($6HuQxyxZbJjo%V$`^o2IK z-l^-I_Jua|g*Ld}sq3Bgg*NnsHn`rY>z($6HuQxyxZbJjo%V$`^o2IK-l^-I_Jua| zg*Ld}sq3Bgg*NnsHn`rY>z($6HuQxyxZbJjo%V$`^o2IK-l^-I_Jua|g*Ld}sq3Bg zg*NnsHn`rY>z($6HuQxyxZbJjo%V$`^o2IK-l^-I_Jua|g*Ld}sq3Bgg*NnsHn`rY z>z($6HuQxyxZbJjo%V$`^o2IK-l^-I_Jua|g*Ld}sq3Bgg*NnsHn`rY>z($6HuQxy zxZbJjo%V$`^o2IK-l^-I_Jua|g*Ld}sq3Bgg*NnsHn`rY>z($6HuQxyxZbJjo%V$` z^o2IK-l^-I_Jua|g*Ld}sq3Bgg*NnsHn`rY>z($6HuQxyxZbJjo%V$`^o2IK-l^-I z_Jua|g*Ld}sq3Bgg*NnsHn`rY>z($6HuQxyxZbJjo%V$`^o2IK-l^-I_Jua|g*Ld} zsq3Bgg*NnsHn`rY>z($6HuQxyxZbJjo%V$`^o2IK-l^-I_Jua|g*Ld}sq3Bgg*Nns zHn`rY>z($6HuQxyxZbJjo%V$`^o2IK-l^-I_Jua|g*Ld}sq3Bgg*NnsHn`rY>z($6 zHuQxyxZbJjo%V$`^o2IK-l^-I_Jua|g*Ld}sq3Bgg*NnsHn`rY>z($6HuQxyxZbJj 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 z>UyVrp$&bZ4X$_UdZ&G%4Sk^vu6OEsr+uLfeW4Amcj|hleW49~p$)Eg>UyVrp$&bZ z4X$_UdZ&G%4Sk^vu6OEsr+uLfeW4Amcj|hleW49~p$)Eg>UyVrp$&bZ4X$_UdZ&G% z4Sk^vu6OEsr+uLfeW4Amcj|hleW49~p$)Eg>UyVrp$&bZ4X$_UdZ&G%4Sk^vu6OEs zr+uLfeW4Amcj|hleW49~p$)Eg>UyVrp$&bZ4X$_UdZ&G%4Sk^vu6OEsr+uLfeW4Am zcj|hleW49~p$)Eg>UyVrp$&bZ4X$_UdZ&G%4Sk^vu6OEsr+uLfeW4Amcj|hleW49~ zp$)Eg>UyVrp$&bZ4X$_UdZ&G%4Sk^vu6OEsr+uLfeW4Amcj|hleW49~p$)Eg>UyVr zp$&bZ4X$_UdZ&G%4Sk^vu6OEsr+uLfeW4Amcj|hleW49~p$)Eg>UyVrp$&bZ4X$_U zdZ&G%4Sk^vu6OEsr+uLfeW4Amcj|hleW49~p$)Eg>UyVrp$&bZ4X$_UdZ&G%4Sk^v zu6OEsr+uLfeW4Amcj|hleW49~p$)Eg>UyVrp$&bZ4X$_UdZ&G%4Sk^vu6OEsr+uLf zeW4Amcj|hleW49~p$)Eg>UyVrp$&bZ4X$_UdZ&G%4Sk^vu6OEsr+uLfeW4Amcj|hl zeW49~p$)Eg>UyVrp$&bZ4X$_UdZ&G%4Sk^vu6OEsr+uLfeW4Amcj|hleW49~p$)Eg z>UyVrp$&bZ4X$_UdZ&G%4Sk^vu6OEsr+uLfeW4Amcj|hleW49~p$)Eg>UyVrp$&bZ z4X$_UdZ&G%4Sk^vu6OEsr+uLfeW4Amcj|hleW49~p$)Eg>UyVrp$&bZ4X$_UdZ&G% z4Sk^vu6OEsr+uLfeW4Amcj|hleW49~p$)Eg>UyVrp$&bZ4X$_UdZ&G%4Sk^vu6OEs zr+uLfeW4Amcj|hleW49~p$)Eg>UyVrp$&bZ4X$_UdZ&G%4Sk^vu6OEsr+uLfeW4Am zcj|hleW49~p$)Eg>UyVrp$&bZ4X$_UdZ&G%4Sk^vu6OEsr+uLfeW4Amcj|hleW49~ zp$)Eg>UyVrp$&bZ4X$_UdZ&G%4Sk^vu6OEsr+uLfeW4Amcj|hleW49~p$)Eg>UyVr zp$&bZ4X$_UdZ&G%4Sk^vu6OEsr+uLfeW4Amcj|hleW49~p$)Eg>UyVrp$&bZ4X$_U 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 Hello map maker! <--") +--utility functions +function mapMaker.sqr(x) return x*x end +function mapMaker.dist(x, y, i, j) return math.sqrt(mapMaker.sqr(x - i) + mapMaker.sqr(y - j)) end + +--tile macros, mapped to the tilesheet "overworld.bmp" +mapMaker.edges = {} +mapMaker.edges.north = -16 +mapMaker.edges.south = 16 +mapMaker.edges.east = 1 +mapMaker.edges.west = -1 + +mapMaker.water = 18 + 3 * 0 +mapMaker.sand = 18 + 3 * 1 +mapMaker.plains = 18 + 3 * 2 +mapMaker.grass = 18 + 3 * 3 +mapMaker.dirt = 18 + 3 * 4 + +--custom generation systems here +function mapMaker.debugIsland(region) + for i = 1, Region.GetWidth(region) do + for j = 1, Region.GetHeight(region) do + local dist = mapMaker.dist(0, 0, i + Region.GetX(region) -1, j + Region.GetY(region) -1) + if dist < 10 then + Region.SetTile(region, i, j, 1, mapMaker.plains) + elseif dist < 12 then + Region.SetTile(region, i, j, 1, mapMaker.sand) + else + Region.SetTile(region, i, j, 1, mapMaker.water) + Region.SetSolid(region, i, j, true) + end + end + end end return mapMaker \ No newline at end of file diff --git a/rsc/scripts/setup_server.lua b/rsc/scripts/setup_server.lua index 4b24ba9..7190910 100644 --- a/rsc/scripts/setup_server.lua +++ b/rsc/scripts/setup_server.lua @@ -1,55 +1,11 @@ print("Lua script check") mapMaker = require "map_maker" -mapMaker.foo() ---uber lazy declarations -function math.sqr(x) return x*x end -function math.dist(x, y, i, j) return math.sqrt(math.sqr(x - i) + math.sqr(y - j)) end - ---tile macros, mapped to the tilesheet -local base = 14 -local shift = 36 -tiles = { - plains = base + shift * 0, - grass = base + shift * 1, - dirt = base + shift * 2, - sand = base + shift * 3, - water = base + shift * 4 -} - ---custom generation systems here -function islandGenerator(region) --- io.write("Generating (", Region.GetX(region), ", ", Region.GetY(region), ")\n") - for i = 1, Region.GetWidth(region) do - for j = 1, Region.GetHeight(region) do - local dist = math.dist(0, 0, i + Region.GetX(region) -1, j + Region.GetY(region) -1) - if dist < 10 then - Region.SetTile(region, i, j, 1, tiles.plains) - elseif dist < 12 then - Region.SetTile(region, i, j, 1, tiles.sand) - else - Region.SetTile(region, i, j, 1, tiles.water) - Region.SetSolid(region, i, j, true) - end - end - end -end - ---Get some regions --BUG: #35 The server fails without at least one room --TODO: Create rooms with names? newRoom = RoomManager.CreateRoom() pager = Room.GetPager(newRoom) -RegionPager.SetOnCreate(pager, islandGenerator) - ---[[ -regionTable = { - RegionPager.GetRegion(pager, Region.GetWidth() * 0, Region.GetHeight() * 0), - RegionPager.GetRegion(pager, Region.GetWidth() *-1, Region.GetHeight() * 0), - RegionPager.GetRegion(pager, Region.GetWidth() * 0, Region.GetHeight() *-1), - RegionPager.GetRegion(pager, Region.GetWidth() *-1, Region.GetHeight() *-1) -} -]] +RegionPager.SetOnCreate(pager, mapMaker.debugIsland) print("Finished the lua script") From db40f198be26e659f31364b104e165b74ac43012 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Tue, 30 Sep 2014 02:01:56 +1000 Subject: [PATCH 3/3] Moved heartbeat code to ServerApplication::CheckClientConnections() --- rsc/scripts/map_saver.lua | 0 rsc/scripts/setup_room.lua | 0 rsc/scripts/setup_server.lua | 3 ++- server/rooms/room_data.hpp | 6 ++++++ server/server_application.hpp | 1 + server/server_logic.cpp | 17 +---------------- server/server_methods.cpp | 19 +++++++++++++++++++ 7 files changed, 29 insertions(+), 17 deletions(-) create mode 100644 rsc/scripts/map_saver.lua create mode 100644 rsc/scripts/setup_room.lua diff --git a/rsc/scripts/map_saver.lua b/rsc/scripts/map_saver.lua new file mode 100644 index 0000000..e69de29 diff --git a/rsc/scripts/setup_room.lua b/rsc/scripts/setup_room.lua new file mode 100644 index 0000000..e69de29 diff --git a/rsc/scripts/setup_server.lua b/rsc/scripts/setup_server.lua index 7190910..78a9b32 100644 --- a/rsc/scripts/setup_server.lua +++ b/rsc/scripts/setup_server.lua @@ -1,10 +1,11 @@ print("Lua script check") mapMaker = require "map_maker" +mapSaver = require "map_saver" --BUG: #35 The server fails without at least one room --TODO: Create rooms with names? -newRoom = RoomManager.CreateRoom() +newRoom = RoomManager.CreateRoom("overworld", "overworld.bmp") pager = Room.GetPager(newRoom) RegionPager.SetOnCreate(pager, mapMaker.debugIsland) diff --git a/server/rooms/room_data.hpp b/server/rooms/room_data.hpp index 539a56e..1ced1be 100644 --- a/server/rooms/room_data.hpp +++ b/server/rooms/room_data.hpp @@ -25,6 +25,8 @@ //map system #include "region_pager_lua.hpp" +#include + class RoomData { public: RoomData() = default; @@ -33,11 +35,15 @@ public: //accessors and mutators RegionPagerLua* GetPager() { return &pager; } + std::string SetTilesetName(std::string s) { return tilesetName = s; } + std::string GetTilesetName() { return tilesetName; } + private: friend class RoomManager; //members RegionPagerLua pager; + std::string tilesetName; }; #endif diff --git a/server/server_application.hpp b/server/server_application.hpp index 3337588..8e1b200 100644 --- a/server/server_application.hpp +++ b/server/server_application.hpp @@ -80,6 +80,7 @@ private: void HandleSynchronize(ClientPacket* const); //utility methods + void CheckClientConnections(); //TODO: a function that only sends to characters in a certain proximity void CleanupLostConnection(int index); void PumpPacket(SerialPacket* const); diff --git a/server/server_logic.cpp b/server/server_logic.cpp index 6e45929..08aa8c1 100644 --- a/server/server_logic.cpp +++ b/server/server_logic.cpp @@ -168,23 +168,8 @@ void ServerApplication::Proc() { //update the internals //... - //TODO: This could be checked only every few seconds //Check connections - for (auto& it : clientMap) { - if (std::chrono::steady_clock::now() - it.second.GetLastBeat() > std::chrono::seconds(3)) { - ServerPacket newPacket; - newPacket.type = SerialPacketType::PING; - network.SendTo(it.second.GetAddress(), &newPacket); - it.second.IncrementAttempts(); - } - - if (it.second.GetAttempts() > 2) { - CleanupLostConnection(it.first); - - //all iterators are invalid, so we can't continue - break; - } - } + CheckClientConnections(); //give the computer a break SDL_Delay(10); diff --git a/server/server_methods.cpp b/server/server_methods.cpp index bf77776..5501d15 100644 --- a/server/server_methods.cpp +++ b/server/server_methods.cpp @@ -21,6 +21,7 @@ */ #include "server_application.hpp" +#include #include //------------------------- @@ -159,6 +160,7 @@ void ServerApplication::HandleRegionRequest(RegionPacket* const argPacket) { newPacket.x = argPacket->x; newPacket.y = argPacket->y; + //BUG: possibly related to #35 newPacket.region = roomMgr.GetRoom(argPacket->roomIndex)->GetPager()->GetRegion(argPacket->x, argPacket->y); //send the content @@ -280,6 +282,23 @@ void ServerApplication::HandleSynchronize(ClientPacket* const argPacket) { //utility methods //------------------------- +void ServerApplication::CheckClientConnections() { + for (auto& it : clientMap) { + if (std::chrono::steady_clock::now() - it.second.GetLastBeat() > std::chrono::seconds(3)) { + ServerPacket newPacket; + newPacket.type = SerialPacketType::PING; + network.SendTo(it.second.GetAddress(), &newPacket); + it.second.IncrementAttempts(); + } + + if (it.second.GetAttempts() > 2) { + CleanupLostConnection(it.first); + //all iterators are invalid, so we can't continue + break; + } + } +} + void ServerApplication::CleanupLostConnection(int clientIndex) { //NOTE: This assumes each player has only one account and character at a time //TODO: handle multiple characters (bots, etc.)