diff --git a/static_spawn/init.lua b/static_spawn/init.lua index 4b03435..c05fd9e 100644 --- a/static_spawn/init.lua +++ b/static_spawn/init.lua @@ -1,107 +1,156 @@ -- twi_mods/static_spawn/init.lua --[[ Copyright (C) 2014-2021 AndrejIT, spfar, mightyjoe781 Copyright (C) 2024 1F616EMO This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ]] local S = core.get_translator("spawn") +local POS_ORIGIN = { x = 37, y = 18, z = -42 } +local POS_GRAPEHILLS = { x = -3292, y = 19, z = 1027 } + +-- Dynamic, teleport by static_spawn +--[[ core.register_chatcommand("spawn", { description = S("Teleport to the spawn point"), privs = { home = true }, func = function(name) local player = core.get_player_by_name(name) if not player then return false, S("Player object not found.") end local spawn_pos = core.setting_get_pos("static_spawnpoint") if not spawn_pos then return false, S("Spawn point not set. Consult moderators to set a proper static spawnpoint.") end player:set_pos(spawn_pos) background_music.set_start_play_gap(name, 2) background_music.decide_and_play(player, true) return true, S("Teleported to Spawn!") end }) +]] + +-- opt-in choice +core.register_chatcommand("spawn", { + description = S("Teleport to the spawn point, or opt-in to the new spawn"), + params = "[set grapehills|set origin]", + privs = { + home = true, + }, + func = function(name, params) + local player = core.get_player_by_name(name) + if not player then + return false, S("Player object not found.") + end + + local meta = player:get_meta() + local spawn_choice = meta:get_string("static_spawn_choice") + + if params ~= "" then + if params == "set grapehills" then + meta:set_string("static_spawn_choice", "grapehills") + return true, S("Spawn choice set to @1. Run /spawn again to teleport.", S("Grape Hills")) + elseif params == "set origin" then + meta:set_string("static_spawn_choice", "origin") + return true, S("Spawn choice set to @1. Run /spawn again to teleport.", S("Origin")) + else + return false, S("Invalid parameter. Only the following are allowed: @1.", + "set grapehills / set origin") + end + end + + local spawn_pos = POS_ORIGIN + local spawn_desc = S("Origin") + if spawn_choice == "grapehills" then + spawn_pos = POS_GRAPEHILLS + spawn_desc = S("Grape Hills") + end + + player:set_pos(spawn_pos) + background_music.set_start_play_gap(name, 2) + background_music.decide_and_play(player, true) + return true, S("Teleported to @1!", spawn_desc) + end +}) core.register_chatcommand("setspawn", { description = S("Override the static spawnpoint"), privs = { server = true }, param = "[]", func = function(name, param) if param == "" then local player = core.get_player_by_name(name) if not player then return false, S("Player object not found.") end param = core.pos_to_string(player:get_pos(), 0) else local pos = core.string_to_pos(param) if not pos then return false, S("Invalid position given.") end param = core.pos_to_string(pos) end core.settings:set("static_spawnpoint", param) return true, S("Static spawnpoint set to @1.", param) end }) core.register_chatcommand("origin", { description = S("Teleport to Origin"), privs = { home = true }, func = function(name) local player = core.get_player_by_name(name) if not player then return false, S("Player object not found.") end player:set_pos({ x = 37, y = 18, z = -42 }) background_music.set_start_play_gap(name, 2) background_music.decide_and_play(player, true) - return true, S("Teleported to Origin!") + return true, S("Teleported to @1!", S("Origin")) end }) core.register_chatcommand("grapehills", { description = S("Teleport to Grape Hills"), privs = { home = true }, func = function(name) local player = core.get_player_by_name(name) if not player then return false, S("Player object not found.") end player:set_pos({ x = -3292, y = 19, z = 1027 }) background_music.set_start_play_gap(name, 2) background_music.decide_and_play(player, true) - return true, S("Teleported to Grape Hills!") + return true, S("Teleported to @1!", S("Grape Hills")) end }) \ No newline at end of file