diff --git a/plugins/Dfusion/include/lua_VersionInfo.h b/plugins/Dfusion/include/lua_VersionInfo.h index 26cdc96db..e221eff04 100644 --- a/plugins/Dfusion/include/lua_VersionInfo.h +++ b/plugins/Dfusion/include/lua_VersionInfo.h @@ -28,6 +28,7 @@ public: int getName(lua_State *L); int getFullName(lua_State *L); int getParent(lua_State *L); + int getKeys(lua_State *L); DEF_LUNE(OffsetGroup); }; diff --git a/plugins/Dfusion/src/lua_VersionInfo.cpp b/plugins/Dfusion/src/lua_VersionInfo.cpp index 538de7360..d6f90be15 100644 --- a/plugins/Dfusion/src/lua_VersionInfo.cpp +++ b/plugins/Dfusion/src/lua_VersionInfo.cpp @@ -96,6 +96,29 @@ int OffsetGroup::getParent(lua_State *L) st.pcall(2,1); return 1; } +int OffsetGroup::getKeys(lua_State *L) +{ + const char* invalids[]={"notset","invalid","valid"}; + const char* keytypes[]={"offset","address","hexval","string","group"}; + lua::state st(L); + std::vector t= p->getKeys(); + st.newtable(); + for(size_t i=0;igetGroup(st.as(1)); - st.getglobal("OffsetGroup"); - st.getfield("new"); - st.getglobal("OffsetGroup"); - st.pushlightuserdata(t); - st.pcall(2,1); + if(st.as(1)=="") //if no argument, return version info as a groupoffset (dynamic cast) + { + st.getglobal("OffsetGroup"); + st.getfield("new"); + st.getglobal("OffsetGroup"); + st.pushlightuserdata(dynamic_cast(DFHack::Core::getInstance().vinfo)); + st.pcall(2,1); + } + else + { + DFHack::OffsetGroup* t= DFHack::Core::getInstance().vinfo->getGroup(st.as(1)); + st.getglobal("OffsetGroup"); + st.getfield("new"); + st.getglobal("OffsetGroup"); + st.pushlightuserdata(t); + st.pcall(2,1); + } return 1; } static int __lua_getParent(lua_State *S)