aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
Commit message (Expand)AuthorAge
...
* Messed around with genmap.py. Now supports format version 17.Perttu Ahola2011-06-05
* documentation update (mapformat.txt mainly)Perttu Ahola2011-06-04
* In a globally installed build, debug.txt is now placed in userdata directory....Perttu Ahola2011-06-02
* 0.2.20110602_0Perttu Ahola2011-06-02
* Fixed the password crash on WindowsPerttu Ahola2011-06-02
* Reduced server CPU usage on NodeMetadata step()s. Also furnace now cooks whil...Perttu Ahola2011-05-31
* Reduced the CPU usage of the sent block selector algorithmPerttu Ahola2011-05-31
* updated commentsPerttu Ahola2011-05-29
* tuned grass growth ratePerttu Ahola2011-05-29
* player passwords and privileges in world/auth.txtPerttu Ahola2011-05-29
* a work-in-progress map modified callback interface (committing because i want...Perttu Ahola2011-05-24
* merged password change menuPerttu Ahola2011-05-23
|\
| * Added the ability to change your password (via pause menu)Ciaran Gultnieks2011-05-22
* | Some work-in-progress stuff and many comment updatesPerttu Ahola2011-05-22
|/
* Preliminary "active block" stuff + set up test code to grow grass.Perttu Ahola2011-05-22
* added a delay to menu loopPerttu Ahola2011-05-21
* Cleaned networking code a bit (had this one on the to-do list for like 4 mont...Perttu Ahola2011-05-21
* All textures are are now searched first from the directory specified by the t...Perttu Ahola2011-05-21
* Passwords - a few corrections to the previous commitCiaran Gultnieks2011-05-20
* Passwords - password entry at main menu, stored and checked by serverCiaran Gultnieks2011-05-20
* removed unnecessary commentPerttu Ahola2011-05-14
* Added key configuration in the configuration file.Perttu Ahola2011-05-14
* comment updatePerttu Ahola2011-05-03
* random comment updatesPerttu Ahola2011-04-30
* Maybe fixed the flood of "WARNING: StaticObjectList::remove(): id=13 not foun...Perttu Ahola2011-04-29
* Changed a bit of the code that is and should still be commented out.Perttu Ahola2011-04-27
* Optimized map saving and sending (server-side)Perttu Ahola2011-04-26
* Optimized smooth lighting calculation codePerttu Ahola2011-04-24
* updated menu a bit, and some other small fixesPerttu Ahola2011-04-24
* Made the main menu a bit more unique lookingPerttu Ahola2011-04-24
* fix to the previous commitPerttu Ahola2011-04-23
* tuned error reporting a bitPerttu Ahola2011-04-23
* port to be not set to 0 from configurationPerttu Ahola2011-04-23
* Code refactoring; split half of main.cpp to game.cpp.Perttu Ahola2011-04-23
* cleaning up main.cpp a bitPerttu Ahola2011-04-23
* Updated to-do list and added the give_initial_stuff setting for testingPerttu Ahola2011-04-22
* Removed IrrlichtWrapperPerttu Ahola2011-04-22
* Some work-in-progress in hp and mobs and a frightening amount of random fixes.Perttu Ahola2011-04-21
* Menu will now ignore an invalid port or the port 0.Perttu Ahola2011-04-15
* fixed port setting not being loaded from configuration file for clientPerttu Ahola2011-04-12
* Added installing build-essential to build instructions and modified the main....Perttu Ahola2011-04-11
* items now fall by gravity... also some other random updatingPerttu Ahola2011-04-10
* new object systemPerttu Ahola2011-04-10
* Some progress on transitioning from MapBlockObject to ActiveObject.Perttu Ahola2011-04-08
* stone shovel now needs cobble, not stone.Perttu Ahola2011-04-06
* cleaning notes and stuffPerttu Ahola2011-04-06
* Made mesh update on node addition asynchronous on client, to reduce frametime...Perttu Ahola2011-04-06
* fixed the bug of disabled removal of empty chestsPerttu Ahola2011-04-06
* changed node metadata format to better accomodate future needs and problemsPerttu Ahola2011-04-05
* Fixed chest contents not immediately updating to all playersPerttu Ahola2011-04-04
hl slc">// Inform other things that the metadata has changed NodeMetadata *meta = dynamic_cast<NodeMetadata*>(m_meta); MapEditEvent event; event.type = MEET_BLOCK_NODE_METADATA_CHANGED; event.p = m_p; event.is_private_change = name && meta && meta->isPrivate(*name); m_env->getMap().dispatchEvent(event); } // Exported functions // garbage collector int NodeMetaRef::gc_object(lua_State *L) { NodeMetaRef *o = *(NodeMetaRef **)(lua_touserdata(L, 1)); delete o; return 0; } // get_inventory(self) int NodeMetaRef::l_get_inventory(lua_State *L) { MAP_LOCK_REQUIRED; NodeMetaRef *ref = checkobject(L, 1); ref->getmeta(true); // try to ensure the metadata exists InvRef::createNodeMeta(L, ref->m_p); return 1; } // mark_as_private(self, <string> or {<string>, <string>, ...}) int NodeMetaRef::l_mark_as_private(lua_State *L) { MAP_LOCK_REQUIRED; NodeMetaRef *ref = checkobject(L, 1); NodeMetadata *meta = dynamic_cast<NodeMetadata*>(ref->getmeta(true)); assert(meta); if (lua_istable(L, 2)) { lua_pushnil(L); while (lua_next(L, 2) != 0) { // key at index -2 and value at index -1 luaL_checktype(L, -1, LUA_TSTRING); meta->markPrivate(readParam<std::string>(L, -1), true); // removes value, keeps key for next iteration lua_pop(L, 1); } } else if (lua_isstring(L, 2)) { meta->markPrivate(readParam<std::string>(L, 2), true); } ref->reportMetadataChange(); return 0; } void NodeMetaRef::handleToTable(lua_State *L, Metadata *_meta) { // fields MetaDataRef::handleToTable(L, _meta); NodeMetadata *meta = (NodeMetadata*) _meta; // inventory lua_newtable(L); Inventory *inv = meta->getInventory(); if (inv) { std::vector<const InventoryList *> lists = inv->getLists(); for(std::vector<const InventoryList *>::const_iterator i = lists.begin(); i != lists.end(); ++i) { push_inventory_list(L, inv, (*i)->getName().c_str()); lua_setfield(L, -2, (*i)->getName().c_str()); } } lua_setfield(L, -2, "inventory"); } // from_table(self, table) bool NodeMetaRef::handleFromTable(lua_State *L, int table, Metadata *_meta) { // fields if (!MetaDataRef::handleFromTable(L, table, _meta)) return false; NodeMetadata *meta = (NodeMetadata*) _meta; // inventory Inventory *inv = meta->getInventory(); lua_getfield(L, table, "inventory"); if (lua_istable(L, -1)) { int inventorytable = lua_gettop(L); lua_pushnil(L); while (lua_next(L, inventorytable) != 0) { // key at index -2 and value at index -1 std::string name = luaL_checkstring(L, -2); read_inventory_list(L, -1, inv, name.c_str(), getServer(L)); lua_pop(L, 1); // Remove value, keep key for next iteration } lua_pop(L, 1); } return true; } NodeMetaRef::NodeMetaRef(v3s16 p, ServerEnvironment *env): m_p(p), m_env(env) { } NodeMetaRef::NodeMetaRef(Metadata *meta): m_meta(meta), m_is_local(true) { } // Creates an NodeMetaRef and leaves it on top of stack // Not callable from Lua; all references are created on the C side. void NodeMetaRef::create(lua_State *L, v3s16 p, ServerEnvironment *env) { NodeMetaRef *o = new NodeMetaRef(p, env); //infostream<<"NodeMetaRef::create: o="<<o<<std::endl; *(void **)(lua_newuserdata(L, sizeof(void *))) = o; luaL_getmetatable(L, className); lua_setmetatable(L, -2); } // Client-sided version of the above void NodeMetaRef::createClient(lua_State *L, Metadata *meta) { NodeMetaRef *o = new NodeMetaRef(meta); *(void **)(lua_newuserdata(L, sizeof(void *))) = o; luaL_getmetatable(L, className); lua_setmetatable(L, -2); } const char NodeMetaRef::className[] = "NodeMetaRef"; void NodeMetaRef::RegisterCommon(lua_State *L) { lua_newtable(L); int methodtable = lua_gettop(L); luaL_newmetatable(L, className); int metatable = lua_gettop(L); lua_pushliteral(L, "__metatable"); lua_pushvalue(L, methodtable); lua_settable(L, metatable); // hide metatable from Lua getmetatable() lua_pushliteral(L, "metadata_class"); lua_pushlstring(L, className, strlen(className)); lua_settable(L, metatable); lua_pushliteral(L, "__index"); lua_pushvalue(L, methodtable); lua_settable(L, metatable); lua_pushliteral(L, "__gc"); lua_pushcfunction(L, gc_object); lua_settable(L, metatable); lua_pushliteral(L, "__eq"); lua_pushcfunction(L, l_equals); lua_settable(L, metatable); lua_pop(L, 1); // drop metatable } void NodeMetaRef::Register(lua_State *L) { RegisterCommon(L); luaL_openlib(L, 0, methodsServer, 0); // fill methodtable lua_pop(L, 1); // drop methodtable } const luaL_Reg NodeMetaRef::methodsServer[] = { luamethod(MetaDataRef, contains), luamethod(MetaDataRef, get), luamethod(MetaDataRef, get_string), luamethod(MetaDataRef, set_string), luamethod(MetaDataRef, get_int), luamethod(MetaDataRef, set_int), luamethod(MetaDataRef, get_float), luamethod(MetaDataRef, set_float), luamethod(MetaDataRef, to_table), luamethod(MetaDataRef, from_table), luamethod(NodeMetaRef, get_inventory), luamethod(NodeMetaRef, mark_as_private), luamethod(MetaDataRef, equals), {0,0} }; void NodeMetaRef::RegisterClient(lua_State *L) { RegisterCommon(L); luaL_openlib(L, 0, methodsClient, 0); // fill methodtable lua_pop(L, 1); // drop methodtable } const luaL_Reg NodeMetaRef::methodsClient[] = { luamethod(MetaDataRef, contains), luamethod(MetaDataRef, get), luamethod(MetaDataRef, get_string), luamethod(MetaDataRef, get_int), luamethod(MetaDataRef, get_float), luamethod(MetaDataRef, to_table), {0,0} };