Compare commits

..

4 Commits

Author SHA1 Message Date
Kayne Ruse 9d5a668045 Merge branch 'develop', read more
The trigger system has been fully implemented, as well as a few other
tweaks as the occasional thought came to mind.

Multiple rooms are now fully functional, mostly as a way to test the
triggers. Although there are still no real generation algorithms, a
utility for creating door pairs between given rooms is included in the
scripts directory.

Other changes in this merge include:

* Network updates via lua
* Entity types can be determined in lua
* Database columns are now order independant

It should be noted that only two types of userdata will work as far as
entity names are concerned: Characters and Monsters. I tried getting it to
work for all objects passed to lua, but it proved to be too obtuse.

In theory, I could create a teleport puzzle using what I've written here.
That might be a side project, or a way to test saving & loading systems. I
don't see any reason to delay monsters any longer; hopefully, I can get
them going soon too.
2015-03-13 21:28:05 +11:00
Kayne Ruse 894b53e760 Merge branch 'develop' 2015-02-27 02:45:19 +11:00
Kayne Ruse eff23352aa Merge branch 'develop'
Changes:

* "ticking" rooms
* character API
* bare-bones character manager API
* bounds checking in serial_utility.cpp

I have an idea for swapping the existing utility/singleton classes for
namesapces, as I think this would reduce the verbosity that I have to deal
with.
2015-02-23 01:54:46 +11:00
Kayne Ruse fa4ccb6596 Merge branch 'develop' 2015-02-14 23:54:35 +11:00
5 changed files with 0 additions and 148 deletions
-6
View File
@@ -23,7 +23,6 @@
//utility functions //utility functions
#include "sql_tools.hpp" #include "sql_tools.hpp"
#include "userdata.hpp"
//std & STL //std & STL
#include <stdexcept> #include <stdexcept>
@@ -79,11 +78,6 @@ void ServerApplication::Init(int argc, char* argv[]) {
std::cout << "Initialized lua" << std::endl; std::cout << "Initialized lua" << std::endl;
//create the userdata metatable
createUserdataMetatable(luaState);
std::cout << "\tCreated userdata metatable" << std::endl;
//append config["dir.scripts"] to the module path //append config["dir.scripts"] to the module path
if (config["dir.scripts"].size() > 0) { if (config["dir.scripts"].size() > 0) {
//get the original path //get the original path
-113
View File
@@ -1,113 +0,0 @@
/* Copyright: (c) Kayne Ruse 2013-2015
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#include "userdata.hpp"
#define METAMETA "__metameta"
static int index(lua_State* L) {
//get __metameta
lua_getmetatable(L, 1); //get the userdata metatable
lua_pushstring(L, METAMETA); //push the __metameta name
lua_gettable(L, -2); //get the __metameta field from the metatable
//get __metameta[userdata]
lua_pushvalue(L, 1); //copy of the userdata
lua_gettable(L, -2); //get the table at __metameta[userdata]
//table doesn't exist yet
if (lua_isnil(L, -1)) {
return 1;
}
//get the value at __metameta[userdata][key]
lua_pushvalue(L, 2); //copy the key
lua_gettable(L, -2); //get value from the deepest table
//return
return 1;
}
static int newindex(lua_State* L) {
//get __metameta
lua_getmetatable(L, 1); //get the userdata metatable
lua_pushstring(L, METAMETA); //push the __metameta name
lua_gettable(L, -2); //get the __metameta field from the metatable
//get __metameta[userdata]
lua_pushvalue(L, 1); //copy of the userdata
lua_gettable(L, -2); //get the table at __metameta[userdata]
//if this table doesn't exist yet
if (lua_isnil(L, -1)) {
lua_pop(L, 1); //pop nil
lua_pushvalue(L, 1); //copy userdata (key)
lua_createtable(L, 0, 0); //new table (value)
lua_settable(L, -3); //create the new table in __metameta
lua_pushvalue(L, 1); //copy userdata (key)
lua_gettable(L, -2); //get the newly created table
}
//set the value at __metameta[userdata][key] = value
lua_pushvalue(L, 2); //copy the key
lua_pushvalue(L, 3); //copy the value
lua_settable(L, -3); //set value in the deepest table
//return
return 0;
}
static luaL_Reg metatable[] = {
{"__index", index},
{"__newindex", newindex},
{nullptr, nullptr}
};
int createUserdataMetatable(lua_State* L) {
//create the userdata metatable
lua_pushlightuserdata(L, nullptr); //anon userdata
lua_createtable(L, 0, 0); //table
//insert meta-metatable
lua_pushstring(L, METAMETA);
lua_createtable(L, 0, 0);
lua_settable(L, -3);
//insert metatable blocker
lua_pushstring(L, "__metatable");
lua_createtable(L, 0, 0);
lua_settable(L, -3);
//insert metamethods
for (luaL_Reg* it = metatable; it->name; it++) {
lua_pushstring(L, it->name);
lua_pushcfunction(L, it->func);
lua_settable(L, -3);
}
//set in the object & pop the anon userdata
lua_setmetatable(L, -2); //set the metatable for userdata
lua_pop(L, 1); //pop the anon userdata
return 0;
}
-29
View File
@@ -1,29 +0,0 @@
/* Copyright: (c) Kayne Ruse 2013-2015
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#ifndef METATABLES_HPP_
#define METATABLES_HPP_
#include "lua.hpp"
int createUserdataMetatable(lua_State* L);
#endif