]> git.lizzy.rs Git - minetest.git/blob - src/script/common/c_internal.cpp
Weather support
[minetest.git] / src / script / common / c_internal.cpp
1 /*
2 Minetest
3 Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #include "common/c_internal.h"
21 #include "server.h"
22 #include "cpp_api/scriptapi.h"
23
24 ScriptApi* get_scriptapi(lua_State *L)
25 {
26         // Get server from registry
27         lua_getfield(L, LUA_REGISTRYINDEX, "scriptapi");
28         ScriptApi* sapi_ptr = (ScriptApi*) lua_touserdata(L, -1);
29         lua_pop(L, 1);
30         return sapi_ptr;
31 }
32
33 std::string script_get_backtrace(lua_State *L)
34 {
35         std::string s;
36         lua_getfield(L, LUA_GLOBALSINDEX, "debug");
37         if(lua_istable(L, -1)){
38                 lua_getfield(L, -1, "traceback");
39                 if(lua_isfunction(L, -1)){
40                         lua_call(L, 0, 1);
41                         if(lua_isstring(L, -1)){
42                                 s += lua_tostring(L, -1);
43                         }
44                         lua_pop(L, 1);
45                 }
46                 else{
47                         lua_pop(L, 1);
48                 }
49         }
50         lua_pop(L, 1);
51         return s;
52 }
53
54 void script_error(lua_State* L,const char *fmt, ...)
55 {
56         va_list argp;
57         va_start(argp, fmt);
58         char buf[10000];
59         vsnprintf(buf, 10000, fmt, argp);
60         va_end(argp);
61         //errorstream<<"SCRIPT ERROR: "<<buf;
62         throw LuaError(L, buf);
63 }
64
65