ofs | hex dump | ascii |
---|
0000 | 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 01 6d 00 00 00 cd 08 06 00 00 00 73 6a 21 | .PNG........IHDR...m.........sj! |
0020 | 78 00 00 00 04 73 42 49 54 08 08 08 08 7c 08 64 88 00 00 20 00 49 44 41 54 78 9c ed dd 7b ac 66 | x....sBIT....|.d.....IDATx...{.f |
0040 | 57 79 df f1 ef 5a fb f2 de ce 6d 6e c7 f6 f8 6e 6e c6 06 43 cc 80 4d cc a5 48 51 52 b7 a2 25 8a | Wy...Z....mn...nn..C..M..HQR..%. |
0060 | e2 26 29 71 43 92 56 75 d2 e6 8f a4 55 22 c7 24 a4 8a 50 d2 28 2a 01 57 16 4a 03 45 34 44 32 34 | .&)qC.Vu....U".$..P.(*.W.J.E4D24 |
0080 | 10 81 32 a9 12 1a 42 1b d3 04 8c c1 60 6c 2e c1 18 c6 97 99 33 33 e7 f6 de f7 de 6b f5 8f bd df | ..2...B.....`l......33.....k.... |
00a0 | db 99 39 87 99 f7 9c 39 73 f6 cc ef 23 d9 b3 df 77 bd 97 7d b6 b6 9e 77 ed 67 3f 6b 2d 73 e4 c8 | ..9....9s...#...w..}...w.g?k-s.. |
00c0 | 11 8f 88 88 94 82 bd d8 3b 20 22 22 e7 4e 41 5b 44 a4 44 14 b4 45 44 4a 44 41 5b 44 a4 44 14 b4 | ........;."".NA[D.D..EDJDA[D.D.. |
00e0 | 45 44 4a 44 41 5b 44 a4 44 14 b4 45 44 4a 44 41 5b 44 a4 44 14 b4 45 44 4a 44 41 5b 44 a4 44 c2 | EDJDA[D.D..EDJDA[D.D..EDJDA[D.D. |
0100 | 69 df f8 9d a7 8f ed e4 7e ec 59 37 dc 78 cd 79 bd 5e c7 e5 ec 74 5c 44 76 c6 d4 41 1b a0 31 53 | i.......~.Y7.x.y.^...t\Dv..A..1S |
0120 | d9 a9 fd d8 93 5a cd de 54 ef d3 71 39 3b 1d 17 91 ed 53 7a 44 44 a4 44 14 b4 45 44 4a 44 41 5b | .....Z..T..q9;....SzDD.D..EDJDA[ |
0140 | 44 a4 44 14 b4 45 44 4a 44 41 5b 44 a4 44 14 b4 45 44 4a 64 5b 25 7f 17 d3 dd 77 df bd 69 db d1 | D.D..EDJDA[D.D..EDJd[%....w..i.. |
0160 | a3 47 77 71 4f ca eb f6 c3 d9 70 fb f8 52 73 a2 ed d9 64 7e b7 77 e7 82 d2 f9 22 97 0a f5 b4 45 | .GwqO.....p..Rs...d~.w...."....E |
0180 | 44 4a 44 41 5b 44 a4 44 f6 74 7a 64 ab 4b da 87 1e 7a 68 d3 b6 fb ee bb 6f d3 b6 cb f9 52 78 3c | DJDA[D.D.tzd.K...zh.....o....Rx< |
01a0 | 1d 02 70 f5 42 67 b8 7d 7c 69 b7 f7 66 e7 e9 7c 91 cb 81 7a da 22 22 25 a2 a0 2d 22 52 22 0a da | ..p.Bg.}|i..f..|...z.""%..-"R".. |
01c0 | 22 22 25 72 d1 73 da d3 e6 21 b7 a2 fc e5 c8 78 1e 7b 3c 87 0d f0 e4 31 33 dc 2e 4b 89 9f ce 17 | ""%r.s...!.....x.{<....13..K.... |
01e0 | b9 dc a9 a7 2d 22 52 22 0a da 22 22 25 b2 2b e9 91 0b 71 49 bb 95 a3 9f fa d3 89 c7 9f f9 ec e7 | ....-"R"..""%.+...qI............ |
0200 | 86 db ef fe ed 77 4d b4 dd ff c0 e4 e3 b2 db aa ac 6f 3c 1d 02 f0 ad b5 c6 ae ec d3 f9 d2 f9 22 | .....wM..........o<............" |
0220 | b2 39 f5 b4 45 44 4a 44 41 5b 44 a4 44 14 b4 45 44 4a 64 c7 72 da bb 9d 87 7c ff 43 0f 6e da 76 | .9..EDJDA[D.D..EDJd.r....|.C.n.v |
0240 | cf 3d 3f 3e f1 f8 ce d7 df 35 dc 5e 5d 3e 3d d1 f6 8e 9f fe c9 4d 3f e7 63 1f fd c4 94 7b b7 bb | .=?>.....5.^]>=......M?.c....{.. |
0260 | b6 2a eb fb e2 37 47 6d 7b a9 ac 4f e7 8b c8 74 d4 d3 16 11 29 11 05 6d 11 91 12 b9 60 25 7f 0f | .*...7Gm{..O...t....)..m....`%.. |
0280 | be ef 3d c3 ed df 7a d7 6f 4c b4 05 41 30 dc 7e e0 9d bf b9 e9 67 9c cf 25 ed b8 8d 97 b4 ed ce | ..=...z.oL..A0.~.....g..%....... |
02a0 | 28 65 d0 5c 6f 6e 7c 79 e9 6c 55 d6 37 9e 0e 81 bd 95 12 d9 8a ce 17 91 73 a3 9e b6 88 48 89 28 | (e.\on|y.lU.7...........s....H.( |
02c0 | 68 8b 88 94 88 82 b6 88 48 89 6c 2b a7 3d 5e b6 f5 ab bf f2 4b 13 6d 9d 76 7b b8 fd c0 03 bf be | h.......H.l+.=^.....K.m.v{...... |
02e0 | e9 67 7c e8 03 7f b8 69 db 85 c8 43 7e f0 c3 7f b2 69 db 5e 9e b5 ad 8c 65 7d 1b e9 7c 11 d9 3e | .g|....i...C~....i.^....e}..|..> |
0300 | f5 b4 45 44 4a 44 41 5b 44 a4 44 76 ac e4 ef c4 89 a5 4d 1f 2f 2e 1e 9a 68 3b b8 78 e5 70 fb ed | ..EDJDA[D.Dv......M./...h;.x.p.. |
0320 | f7 de 3b d1 76 ff fd 0f 0c b7 df fc a6 cb f7 92 f6 52 2c eb 1b a7 f3 45 64 3a ea 69 8b 88 94 88 | ..;.v............R,....Ed:.i.... |
0340 | 82 b6 88 48 89 28 68 8b 88 94 c8 b6 72 da e7 9a ef db 38 33 da 56 f9 cb ad 9c 3a 79 72 b8 fd 91 | ...H.(h.....r.....83.V....:yr... |
0360 | 87 3f be ed fd da 6b 2e 85 b2 be ad e8 7c 11 d9 3e f5 b4 45 44 4a 44 41 5b 44 a4 44 76 ac e4 6f | .?....k......|..>..EDJDA[D.Dv..o |
0380 | da 4b cc 8d 97 c2 3f f6 b6 b7 0e b7 7f f7 f7 df bb e3 df b7 97 5c ea 65 7d 5b d1 f9 22 32 1d f5 | .K....?..............\.e}[.."2.. |
03a0 | b4 45 44 4a 44 41 5b 44 a4 44 14 b4 45 44 4a e4 82 ad 5c 33 6e a7 f2 89 97 42 5e f2 52 2f eb db | .EDJDA[D.D..EDJ...\3n....B^.R/.. |
03c0 | 09 3a 5f 44 36 a7 9e b6 88 48 89 28 68 8b 88 94 c8 ae a4 47 b6 72 b9 5d c2 1e 5f 6a 8e 6d 4f b6 | .:_D6....H.(h......G.r.].._j.mO. |
03e0 | 5d ce 29 91 73 75 b9 9d 2f 22 1b a9 a7 2d 22 52 22 0a da 22 22 25 a2 a0 2d 22 52 22 17 3d a7 7d | ].).su../"...-"R"..""%..-"R".=.} |
0400 | b9 51 de 5a 44 b6 43 3d 6d 11 91 12 51 d0 16 11 29 11 05 6d 11 91 12 51 d0 16 11 29 11 05 6d 11 | .Q.ZD.C=m...Q...)..m...Q...)..m. |
0420 | 91 12 51 d0 16 11 29 91 6d 95 fc b5 9a bd 9d da 8f 4b 8a 8e cb d9 e9 b8 88 6c 9f 39 72 e4 88 bf | ..Q...).m........K.......l.9r... |
0440 | d8 3b 21 22 22 e7 46 e9 11 11 91 12 51 d0 16 11 29 11 05 6d 11 91 12 51 d0 16 11 29 11 05 6d 11 | .;!"".F.....Q...)..m...Q...)..m. |
0460 | 91 12 99 ba e4 ef 3b 4f 1f db c9 fd d8 b3 6e b8 f1 9a f3 7a bd 8e cb d9 e9 b8 c8 f9 d0 f9 b2 b9 | ......;O......n....z............ |
0480 | 6d d5 69 37 66 2a db 79 fb 9e 37 6d 5d b1 8e cb d9 e9 b8 c8 f9 78 df 7f fd 0c 33 33 e0 8b a2 64 | m.i7f*.y..7m]........x....33...d |
04a0 | 63 60 6d cd d0 69 2f b1 7c fa 49 ae be e6 3a c0 b0 ba ba c2 fc dc 3c 8f 7e f1 ef 68 b6 d6 69 b7 | c`m..i/.|.I...:.......<.~..h..i. |
04c0 | db 78 e7 30 d6 12 45 11 b3 b3 0b d4 6b 33 38 97 b1 b2 72 8a 2c 4b 87 9f 77 ea d4 12 9d 4e 1b 63 | .x.0..E.....k38...r.,K..w....N.c |
04e0 | 0c 95 ca 2c de 7b 1a 8d 3a 95 6a 4c 14 d6 f1 80 31 0e 70 18 c0 39 4f 10 04 04 41 80 f7 9e 66 ab | /*
Minetest
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "lua_api/l_nodemeta.h"
#include "lua_api/l_internal.h"
#include "lua_api/l_inventory.h"
#include "common/c_content.h"
#include "serverenvironment.h"
#include "map.h"
#include "mapblock.h"
#include "server.h"
/*
NodeMetaRef
*/
NodeMetaRef* NodeMetaRef::checkobject=.....m...<..W:x7HQ...j.S.....0. |
0680 | 70 6a ad 4f d2 ec d1 a8 da 61 e8 4c 32 3f 0c 96 00 18 e8 f4 21 cb 20 da 10 fd 96 96 c7 bf 7b f8 | pj.O.....a.L2?......!.........{. |
06a0 | 72 32 07 ad 6e ca a6 71 db 58 6e 9a 4d 39 b0 30 7a ca 5a 4b ab 67 f9 fc 33 6b 78 9f 61 8a cf 34 | r2..n..q.Xn.M9.0z.ZK.g..3kx.a..4 |
06c0 | c6 d0 e9 74 39 7c 57 76 de c7 63 40 41 5b 44 f6 a4 d5 56 9f e7 4e 2c d3 4d dc e8 49 ef 88 e7 7a | ...t9|Wv..c@A[D...V..N,.M..I...z |
06e0 | 1c b8 32 ef d5 1a 33 08 e7 9e 6e 62 69 b6 12 d6 3b 01 71 98 a7 48 ac b5 38 1f e0 7d 1e 7c bd f7 | ..2...3...nbi...;.q..H..8..}.|.. |
0700 | 64 c5 c7 8d f5 89 f1 26 a4 9b 9a e1 7b 6a 95 10 63 0c 49 e6 30 d6 51 af bb a2 2d c0 98 fc 7b 01 | d......&....{j..c.I.0.Q...-...{. |
0720 | b2 cc e1 31 04 41 00 c6 60 8d 21 73 19 59 96 51 6f cc 72 e8 fa 97 92 a4 19 d6 78 9c 33 78 3c fd | ...1.A..`.!s.Y.Qo.r.......x.3x<. |
0740 | 34 38 f7 ec cb 59 28 68 8b c8 9e 74 c3 2d 6f 63 ff e2 ad 54 e2 00 57 04 da 7a cd b0 d2 6c 73 ec | 48...Y(h...t.-oc...T..W..z...ls. |
0760 | f8 49 2a 95 6a 1e 40 83 00 7c 46 ed 8a 1f 64 35 5b 24 88 ab 24 26 af f4 48 d2 04 e7 0c ce 5b f0 | .I*.j.@..|F...d5[$..$&..H.....[. |
0780 | 9e f5 f5 53 b8 2c c5 e0 49 3b 19 58 4b 9e 97 8e e8 f5 7b 78 ef b9 e2 8a ab 59 98 39 40 b7 db c6 | ...S.,..I;.XK.....{x.....Y.9@... |
07a0 | 84 86 7e bf 4b a7 db 06 a0 56 6f 10 45 15 1a 8d 39 00 9a cd 75 32 97 71 65 b0 40 68 2d 8f 7d f5 | ..~.K....Vo.E...9...u2.qe.@h-.}. |
07c0 | 31 82 20 c4 58 48 fd d5 5c ff 8a 9f 22 8c 0d 87 f6 1b 56 d7 0d dd 2e 04 61 1d 1f 06 53 1f 97 d2 | 1...XH..\...".....V.....a...S... |
07e0 | 06 ed bb ef be 7b d3 b6 a3 47 8f ee e2 9e 94 d7 ed 87 47 97 68 c7 97 9a 13 6d 97 da aa f1 3a 5f | .....{...G........G.h....m....:_ |
0800 | ca c7 84 87 98 bf f2 d0 c4 73 33 33 86 24 7a 96 e8 f4 97 88 e3 98 76 bb 45 6f bd cb 5c 63 96 be | .........s33.$z.......v.Eo..\c.. |
0820 | a9 d3 b7 07 09 e3 3a c6 58 5c 96 d1 4f 5b 79 50 27 c0 b9 8c 4e d6 25 4d 13 f0 1e 9f 65 60 83 61 | ......:.X\..O[yP'...N.%M....e`.a |
0840 | c2 ba d3 cb ab 4e 12 5f c3 44 73 24 5d 87 c1 90 62 c9 f2 98 4f 66 1a 04 b6 02 e1 6c fe 83 11 79 | .....N._.Ds$]...b...Of.....l...y |
0860 | 48 13 8e 1f 3f ce f2 f2 32 37 bf fc 36 ac b5 24 49 8f 95 d5 84 20 aa 11 84 86 b8 6a 08 bb 06 9b | H...?...27..6..$I..........j.... |
0880 | e6 bd 74 e7 dc 59 fe e2 73 53 da a0 2d 22 97 36 63 c6 6f 0c e6 bc 87 30 8c 99 9b 9b 67 7e 61 1f | ..t..Y..sS..-".6c.o....0....g~a. |
08a0 | f3 0b 07 78 fc cb 9f a7 f9 8d af d2 6c e6 1d 0f e7 1c c6 78 bc 2f 4a fb 86 e9 0c 43 14 c5 d8 e2 | ...x........l......x./J....C.... |
08c0 | ae a4 25 af be 1e 7c 87 f7 0e ef 3d 61 18 0e d3 1f a3 7d 09 b0 36 cf 9f 67 59 4a 92 f4 00 43 96 | ..%...|....=a.....}..6..gYJ...C. |
08e0 | a5 38 e7 a8 54 6a 5c 75 f8 ea fc 7d 06 30 96 20 80 6a 05 6c 08 69 9a 77 ea ab d5 a2 74 b1 3f fd | .8..Tj\u...}.0...j.l.i.w....t.?. |
0900 | 71 51 d0 16 91 3d a9 56 83 4e 67 32 70 77 3a d0 2b c6 30 79 ef f1 3e e3 9a 6b ae 67 ff 81 83
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 | ;.&YX..5.zk.l.J.+^.j^..[q....... |
1240 | 5e 4c 92 24 34 5b eb 64 69 4a 9a a6 f9 6a ea 49 8f 5e af 4b bb dd 2c f6 29 9c 98 6e d6 b9 3c 25 | ^L.$4[.diJ...j.I.^.K..,.)..n..<% |
1260 | 94 07 e4 35 d2 34 25 8a 62 aa d5 5a 31 48 27 c5 b9 8c 20 08 87 cb 91 65 59 96 a7 3a 18 8d d2 ac | ...5.4%.b..Z1H'........eY..:.... |
1280 | d7 67 b8 ea aa 6b 39 79 6a 89 03 07 0e 92 65 19 cf 3f 7b 0c 9b 97 7d 17 83 77 8a c0 3d e5 71 1d | .g...k9yj.....e..?{...}..w..=.q. |
12a0 | d8 56 d0 1e 2f db fa d5 5f f9 a5 89 b6 4e bb 3d dc 7e e0 81 cd 57 69 f8 d0 07 fe 70 d3 b6 0b 91 | .V../..._....N.=.~...Wi....p.... |
12c0 | 87 fc e0 87 ff 64 d3 b6 bd 3c 6b 5b 19 cb fa 36 d2 f9 72 79 18 f4 b8 9f 7c f2 c9 61 70 9c 86 b5 | .....d...<k[...6..ry....|..ap... |
12e0 | 16 13 e4 13 61 db e1 6d 0d 03 3e cb 47 33 1a 3f bc 79 ea bc a7 52 ad e3 7c 30 9a 85 cf 58 30
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}
};
|