// is_player(self) int ObjectRef::l_is_player(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); lua_pushboolean(L, (player != NULL)); return 1; }
static int play_cmd(void) { struct player *other; natid cnum; struct natstr *natp; char **ap; char buf[128]; ap = player->argp; if (*++ap) { strncpy(player->userid, *ap, sizeof(player->userid) - 1); player->userid[sizeof(player->userid) - 1] = '\0'; player->authenticated = 0; } if (*++ap) { if (natbyname(*ap, &cnum) < 0) { pr_id(player, C_CMDERR, "country %s does not exist\n", *ap); return RET_FAIL; } } if (*++ap) { if (!natpass(cnum, *ap)) { pr_id(player, C_CMDERR, "password bad, logging entry\n"); logerror("%s tried country #%d with %s", praddr(player), cnum, *ap); return RET_FAIL; } player->cnum = cnum; player->authenticated = 1; } if (!may_play()) return RET_FAIL; other = getplayer(player->cnum); if (other) { natp = getnatp(player->cnum); if (natp->nat_stat != STAT_VIS) { pr_id(player, C_EXIT, "country in use by %s\n", praddr(other)); } else { pr_id(player, C_EXIT, "country in use\n"); } return RET_FAIL; } snprintf(buf, sizeof(buf), "Play#%d", player->cnum); logerror("%s logged in as country #%d", praddr(player), player->cnum); journal_login(); empth_set_name(empth_self(), buf); pr_id(player, C_INIT, "%d\n", CLIENTPROTO); empth_rwlock_rdlock(shutdown_lock); player->state = PS_PLAYING; player_main(player); journal_logout(); logerror("%s logged out, country #%d", praddr(player), player->cnum); if (!io_eof(player->iop) && !io_error(player->iop)) io_set_eof(player->iop); return RET_OK; }
// get_look_yaw(self) int ObjectRef::l_get_look_yaw(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) return 0; // Do it lua_pushnumber(L, player->getRadYaw()); return 1; }
// hud_get_hotbar_selected_image(self) int ObjectRef::l_hud_get_hotbar_selected_image(lua_State *L) { ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) return 0; std::string name = getServer(L)->hudGetHotbarSelectedImage(player); lua_pushlstring(L, name.c_str(), name.size()); return 1; }
// hud_get_hotbar_itemcount(self) int ObjectRef::l_hud_get_hotbar_itemcount(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (player == NULL) return 0; lua_pushnumber(L, player->getHotbarItemcount()); return 1; }
// get_inventory_formspec(self) -> formspec int ObjectRef::l_get_inventory_formspec(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (player == NULL) return 0; std::string formspec = player->inventory_formspec; lua_pushlstring(L, formspec.c_str(), formspec.size()); return 1; }
// hud_get_hotbar_itemcount(self) int ObjectRef::l_hud_get_hotbar_itemcount(lua_State *L) { ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) return 0; s32 hotbar_itemcount = getServer(L)->hudGetHotbarItemcount(player); lua_pushnumber(L, hotbar_itemcount); return 1; }
// hud_set_hotbar_selected_image(self, name) int ObjectRef::l_hud_set_hotbar_selected_image(lua_State *L) { ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) return 0; std::string name = lua_tostring(L, 2); getServer(L)->hudSetHotbarSelectedImage(player, name); return 1; }
// hud_get_hotbar_selected_image(self) int ObjectRef::l_hud_get_hotbar_selected_image(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (player == NULL) return 0; const std::string &name = player->getHotbarSelectedImage(); lua_pushlstring(L, name.c_str(), name.size()); return 1; }
// get_eye_offset(self) int ObjectRef::l_get_eye_offset(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (player == NULL) return 0; // Do it push_v3f(L, player->eye_offset_first); push_v3f(L, player->eye_offset_third); return 2; }
// hud_get_hotbar_image(self) int ObjectRef::l_hud_get_hotbar_image(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (player == NULL) return 0; std::string name = getServer(L)->hudGetHotbarImage(player); lua_pushlstring(L, name.c_str(), name.size()); return 1; }
// get_player_velocity(self) int ObjectRef::l_get_player_velocity(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (player == NULL) { lua_pushnil(L); return 1; } // Do it push_v3f(L, player->getSpeed() / BS); return 1; }
// get_look_dir(self) int ObjectRef::l_get_look_dir(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) return 0; // Do it float pitch = player->getRadPitch(); float yaw = player->getRadYaw(); v3f v(cos(pitch)*cos(yaw), sin(pitch), cos(pitch)*sin(yaw)); push_v3f(L, v); return 1; }
// get_player_control_bits(self) int ObjectRef::l_get_player_control_bits(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (player == NULL) { lua_pushlstring(L, "", 0); return 1; } // Do it lua_pushnumber(L, player->keyPressed); return 1; }
// hud_set_hotbar_selected_image(self, name) int ObjectRef::l_hud_set_hotbar_selected_image(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (player == NULL) return 0; std::string name = readParam<std::string>(L, 2); getServer(L)->hudSetHotbarSelectedImage(player, name); return 1; }
// hud_set_hotbar_image(self, name) int ObjectRef::l_hud_set_hotbar_image(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) return 0; std::string name = lua_tostring(L, 2); auto items = lua_tonumber(L, 3); getServer(L)->hudSetHotbarImage(player, name, items); return 1; }
// set_inventory_formspec(self, formspec) int ObjectRef::l_set_inventory_formspec(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (player == NULL) return 0; std::string formspec = luaL_checkstring(L, 2); player->inventory_formspec = formspec; getServer(L)->reportInventoryFormspecModified(player->getName()); lua_pushboolean(L, true); return 1; }
// get_player_name(self) int ObjectRef::l_get_player_name(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (player == NULL) { lua_pushlstring(L, "", 0); return 1; } // Do it lua_pushstring(L, player->getName()); return 1; }
// DEPRECATED // get_look_yaw(self) int ObjectRef::l_get_look_yaw(lua_State *L) { NO_MAP_LOCK_REQUIRED; log_deprecated(L, "Deprecated call to get_look_yaw, use get_look_horizontal instead"); ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (player == NULL) return 0; // Do it lua_pushnumber(L, player->getRadYawDep()); return 1; }
// 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_set_hotbar_itemcount(self, hotbar_itemcount) int ObjectRef::l_hud_set_hotbar_itemcount(lua_State *L) { ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) return 0; s32 hotbar_itemcount = lua_tonumber(L, 2); if (!getServer(L)->hudSetHotbarItemcount(player, hotbar_itemcount)) return 0; lua_pushboolean(L, true); return 1; }
// hud_get(self, id) int ObjectRef::l_hud_get(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (player == NULL) return 0; u32 id = lua_tonumber(L, -1); HudElement *e = player->getHud(id); if (!e) return 0; push_hud_element(L, e); return 1; }
static void coun_list(struct natstr *natp) { char *status; natid cn = natp->nat_cnum; pr("%3d ", cn); if (getplayer(cn) && (player->god || natp->nat_stat == STAT_GOD || relations_with(cn, player->cnum) == ALLIED)) pr(" Now logged on "); else if (player->god) { if (natp->nat_last_login == 0) pr(" Never logged on "); else { pr("%.16s - ", ctime(&natp->nat_last_login)); pr("%-16.16s", natp->nat_last_login <= natp->nat_last_logout ? ctime(&natp->nat_last_logout) : "?"); } } else pr(" Unknown "); if (player->god) pr(" %4d", natp->nat_btu); if (natp->nat_stat == STAT_GOD) status = "DEITY"; else if (natp->nat_stat == STAT_NEW) status = "New"; else if (natp->nat_stat == STAT_SANCT) status = "Sanctuary"; else if (natp->nat_stat == STAT_ACTIVE) { status = "Active"; if (!opt_HIDDEN || player->god) { if (influx(natp)) status = "In flux"; else if (natp->nat_money < 0) status = "Broke"; } } else { status = "Visitor"; } pr(" %-9.9s %s\n", status, natp->nat_cnam); }
// hud_add(self, form) int ObjectRef::l_hud_add(lua_State *L) { ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) return 0; HudElement *elem = new HudElement; elem->type = (HudElementType)getenumfield(L, 2, "hud_elem_type", es_HudElementType, HUD_ELEM_TEXT); lua_getfield(L, 2, "position"); elem->pos = lua_istable(L, -1) ? read_v2f(L, -1) : v2f(); lua_pop(L, 1); lua_getfield(L, 2, "scale"); elem->scale = lua_istable(L, -1) ? read_v2f(L, -1) : v2f(); lua_pop(L, 1); elem->name = getstringfield_default(L, 2, "name", ""); elem->text = getstringfield_default(L, 2, "text", ""); elem->number = getintfield_default(L, 2, "number", 0); elem->item = getintfield_default(L, 2, "item", 0); elem->dir = getintfield_default(L, 2, "dir", 0); lua_getfield(L, 2, "alignment"); elem->align = lua_istable(L, -1) ? read_v2f(L, -1) : v2f(); lua_pop(L, 1); lua_getfield(L, 2, "offset"); elem->offset = lua_istable(L, -1) ? read_v2f(L, -1) : v2f(); lua_pop(L, 1); lua_getfield(L, 2, "world_pos"); elem->world_pos = lua_istable(L, -1) ? read_v3f(L, -1) : v3f(); lua_pop(L, 1); u32 id = getServer(L)->hudAdd(player, elem); if (id == (u32)-1) { delete elem; return 0; } lua_pushnumber(L, id); return 1; }
// set_clouds(self, {density=, color=, ambient=, height=, thickness=, speed=}) int ObjectRef::l_set_clouds(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (!player) return 0; if (!lua_istable(L, 2)) return 0; CloudParams cloud_params = player->getCloudParams(); cloud_params.density = getfloatfield_default(L, 2, "density", cloud_params.density); lua_getfield(L, 2, "color"); if (!lua_isnil(L, -1)) read_color(L, -1, &cloud_params.color_bright); lua_pop(L, 1); lua_getfield(L, 2, "ambient"); if (!lua_isnil(L, -1)) read_color(L, -1, &cloud_params.color_ambient); lua_pop(L, 1); cloud_params.height = getfloatfield_default(L, 2, "height", cloud_params.height ); cloud_params.thickness = getfloatfield_default(L, 2, "thickness", cloud_params.thickness); lua_getfield(L, 2, "speed"); if (lua_istable(L, -1)) { v2f new_speed; new_speed.X = getfloatfield_default(L, -1, "x", 0); new_speed.Y = getfloatfield_default(L, -1, "y", 0); cloud_params.speed = new_speed; } lua_pop(L, 1); if (!getServer(L)->setClouds(player, cloud_params.density, cloud_params.color_bright, cloud_params.color_ambient, cloud_params.height, cloud_params.thickness, cloud_params.speed)) return 0; player->setCloudParams(cloud_params); lua_pushboolean(L, true); 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; }
// hud_remove(self, id) int ObjectRef::l_hud_remove(lua_State *L) { ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) return 0; u32 id = -1; if (!lua_isnil(L, 2)) id = lua_tonumber(L, 2); if (!getServer(L)->hudRemove(player, id)) return 0; lua_pushboolean(L, true); return 1; }
// get_day_night_ratio(self) int ObjectRef::l_get_day_night_ratio(lua_State *L) { ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) return 0; bool do_override; float ratio; player->getDayNightRatio(&do_override, &ratio); if (do_override) lua_pushnumber(L, ratio); else lua_pushnil(L); return 1; }
// get_local_animation(self) int ObjectRef::l_get_local_animation(lua_State *L) { NO_MAP_LOCK_REQUIRED ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (player == NULL) return 0; v2s32 frames[4]; float frame_speed; player->getLocalAnimations(frames, &frame_speed); for (const v2s32 &frame : frames) { push_v2s32(L, frame); } lua_pushnumber(L, frame_speed); return 5; }
// hud_add(self, form) int ObjectRef::l_hud_add(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); if (player == NULL) return 0; HudElement *elem = new HudElement; read_hud_element(L, elem); u32 id = getServer(L)->hudAdd(player, elem); if (id == U32_MAX) { delete elem; return 0; } lua_pushnumber(L, id); return 1; }