// hud_get(self, id) int ObjectRef::l_hud_get(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) return 0; u32 id = lua_tonumber(L, -1); HudElement *e = player->getHud(id); if (!e) return 0; lua_newtable(L); lua_pushstring(L, es_HudElementType[(u8)e->type].str); lua_setfield(L, -2, "type"); push_v2f(L, e->pos); lua_setfield(L, -2, "position"); lua_pushstring(L, e->name.c_str()); lua_setfield(L, -2, "name"); push_v2f(L, e->scale); lua_setfield(L, -2, "scale"); lua_pushstring(L, e->text.c_str()); lua_setfield(L, -2, "text"); lua_pushnumber(L, e->number); lua_setfield(L, -2, "number"); lua_pushnumber(L, e->item); lua_setfield(L, -2, "item"); lua_pushnumber(L, e->dir); lua_setfield(L, -2, "direction"); // Deprecated, only for compatibility's sake lua_pushnumber(L, e->dir); lua_setfield(L, -2, "dir"); push_v3f(L, e->world_pos); lua_setfield(L, -2, "world_pos"); return 1; }
// hud_get(self, id) int ObjectRef::l_hud_get(lua_State *L) { ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) return 0; u32 id = lua_tonumber(L, -1); if (id >= player->hud.size()) return 0; HudElement *e = player->hud[id]; if (!e) return 0; lua_newtable(L); lua_pushstring(L, es_HudElementType[(u8)e->type].str); lua_setfield(L, -2, "type"); push_v2f(L, e->pos); lua_setfield(L, -2, "position"); lua_pushstring(L, e->name.c_str()); lua_setfield(L, -2, "name"); push_v2f(L, e->scale); lua_setfield(L, -2, "scale"); lua_pushstring(L, e->text.c_str()); lua_setfield(L, -2, "text"); lua_pushnumber(L, e->number); lua_setfield(L, -2, "number"); lua_pushnumber(L, e->item); lua_setfield(L, -2, "item"); lua_pushnumber(L, e->dir); lua_setfield(L, -2, "dir"); push_v3f(L, e->world_pos); lua_setfield(L, -2, "world_pos"); return 1; }
void push_object_properties(lua_State *L, ObjectProperties *prop) { lua_newtable(L); lua_pushnumber(L, prop->hp_max); lua_setfield(L, -2, "hp_max"); lua_pushboolean(L, prop->physical); lua_setfield(L, -2, "physical"); lua_pushboolean(L, prop->collideWithObjects); lua_setfield(L, -2, "collide_with_objects"); lua_pushnumber(L, prop->weight); lua_setfield(L, -2, "weight"); push_aabb3f(L, prop->collisionbox); lua_setfield(L, -2, "collisionbox"); lua_pushlstring(L, prop->visual.c_str(), prop->visual.size()); lua_setfield(L, -2, "visual"); lua_pushlstring(L, prop->mesh.c_str(), prop->mesh.size()); lua_setfield(L, -2, "mesh"); push_v2f(L, prop->visual_size); lua_setfield(L, -2, "visual_size"); lua_newtable(L); u16 i = 1; for (std::vector<std::string>::iterator it = prop->textures.begin(); it != prop->textures.end(); ++it) { lua_pushlstring(L, it->c_str(), it->size()); lua_rawseti(L, -2, i); } lua_setfield(L, -2, "textures"); lua_newtable(L); i = 1; for (std::vector<video::SColor>::iterator it = prop->colors.begin(); it != prop->colors.end(); ++it) { push_ARGB8(L, *it); lua_rawseti(L, -2, i); } lua_setfield(L, -2, "colors"); push_v2s16(L, prop->spritediv); lua_setfield(L, -2, "spritediv"); push_v2s16(L, prop->initial_sprite_basepos); lua_setfield(L, -2, "initial_sprite_basepos"); lua_pushboolean(L, prop->is_visible); lua_setfield(L, -2, "is_visible"); lua_pushboolean(L, prop->makes_footstep_sound); lua_setfield(L, -2, "makes_footstep_sound"); lua_pushnumber(L, prop->automatic_rotate); lua_setfield(L, -2, "automatic_rotate"); lua_pushnumber(L, prop->stepheight / BS); lua_setfield(L, -2, "stepheight"); if (prop->automatic_face_movement_dir) lua_pushnumber(L, prop->automatic_face_movement_dir_offset); else lua_pushboolean(L, false); lua_setfield(L, -2, "automatic_face_movement_dir"); }
// get_animation(self) int ObjectRef::l_get_animation(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); if (co == NULL) return 0; // Do it v2f frames = v2f(1,1); float frame_speed = 15; float frame_blend = 0; bool frame_loop = true; co->getAnimation(&frames, &frame_speed, &frame_blend, &frame_loop); push_v2f(L, frames); lua_pushnumber(L, frame_speed); lua_pushnumber(L, frame_blend); lua_pushboolean(L, frame_loop); return 4; }