diff --git a/.gitmodules b/.gitmodules index 777902a..9c7d598 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,6 @@ [submodule "mods/worldedit"] path = mods/worldedit url = https://github.com/Uberi/Minetest-WorldEdit +[submodule "mods/item_drop"] + path = mods/item_drop + url = https://github.com/minetest-mods/item_drop diff --git a/README.md b/README.md index f653d9f..d10e3e7 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,6 @@ Subgames Contribution repository for the Minetest Server Subgames for all! -This Repository is not for using on your own Server! - Installing ---------- 1. `git clone --recursive https://github.com/Lejo1/subgames.git` @@ -18,54 +16,5 @@ The Mods from [minetest_game](https://github.com/minetest/minetest_game) are lic Textures: CC-BY-SA 3.0 Code: LGPL 2.1 or later -The Mods: subgames, skywars, hiddenseeker, mesewars, main, build, survivalgames are created by [Lejo](https://github.com/Lejo1) -With the following License: -You are not allowed to distribute any copy or work based on this programm unless the copyright holder declares his consent. -You are not allowed to use this mods on a public server. -THE SOFTWARE IS PROVIDED WITHOUT WARRANTY OF ANY KIND! - - - - -API ---- - -The Server is splitted into diffrent lobbys. - -This is saved in player_lobby[name] = "main" - -All minetest registers like minetest.register_on_join_player(func(player)) are here subgames.register_on_join_player(func(player, lobby)) lobby is the name string of the Lobby where the Action happens. - -But not all registers are supported yet. - -Example: - -subgames.register_on_join_player(function(player, lobby) - if lobby == "main" then - minetest.chat_send_play(player:get_player_name(), "HI") - end -end) - -IMPORTANT: Registers like on_place_node don't allways have a player! -For this a Lobby must register its location at the top of mods/subgames/init.lua - -areas={ - ["mesewars"] = { - [1] = {x=(-76), y=158, z=154}, - [2] = {x=266, y=(-52), z=(-169)} - }, - ["main"] = { - [1] = {x=(-31), y=623, z=0}, - [2] = {x=9, y=595, z=39} - }, - ["hiddenseeker"] = { - [1] = {x=0, y=(-10000), z=0}, - [2] = {x=0, y=(-10000), z=0} - }, - ["skywars"] = { - [1] = {x=10000, y=1900, z=10000}, - [2] = {x=(-10000), y=2900, z=(-10000)} - } -} - -The API is not finished! +The Mods: skywars, hiddenseeker, mesewars, customisations, survivalgames are created by [Lejo](https://github.com/Lejo1) +These mods contain map information which must be fitted on the map. diff --git a/mods/agreerules/depends.txt b/mods/agreerules/depends.txt index e708284..a5f585f 100644 --- a/mods/agreerules/depends.txt +++ b/mods/agreerules/depends.txt @@ -1,4 +1,3 @@ sfinv -mesewars -3d_armor -subgames +3d_armor_sfinv? +customisations? diff --git a/mods/build/depends.txt b/mods/build/depends.txt deleted file mode 100644 index 8922d42..0000000 --- a/mods/build/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -subgames -default diff --git a/mods/build/init.lua b/mods/customisations/build.lua similarity index 83% rename from mods/build/init.lua rename to mods/customisations/build.lua index a052819..89bfc5e 100644 --- a/mods/build/init.lua +++ b/mods/customisations/build.lua @@ -47,14 +47,6 @@ subgames.register_game("build", { }, }) -minetest.register_privilege("invs", "Allows you to be fully invisible!") - -function core.send_join_message(name) -end - -function core.send_leave_message(name, timed_out) -end - minetest.register_chatcommand("pinfo", { params = "", description = "Get some infos of a player.", @@ -70,10 +62,10 @@ minetest.register_chatcommand("pinfo", { }) minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage) - if player_lobby[hitter:get_player_name()] == "build" then - subgames.add_bothud(hitter, player:get_player_name(), 0xFFFFFF, 5) - return true - elseif minetest.get_player_privs(hitter:get_player_name()).ban then + if minetest.get_player_privs(hitter:get_player_name()).ban then subgames.add_bothud(hitter, player:get_player_name(), 0xFFFFFF, 5) + if player_lobby[hitter:get_player_name()] == "build" then + return true + end end end) diff --git a/mods/customisations/depends.txt b/mods/customisations/depends.txt new file mode 100644 index 0000000..737ae15 --- /dev/null +++ b/mods/customisations/depends.txt @@ -0,0 +1,5 @@ +subgames +hiddenseeker +mesewars +skywars +survivalgames diff --git a/mods/main/init.lua b/mods/customisations/init.lua similarity index 51% rename from mods/main/init.lua rename to mods/customisations/init.lua index a9ad26a..1a5b414 100644 --- a/mods/main/init.lua +++ b/mods/customisations/init.lua @@ -1,159 +1,8 @@ --- This is the file which manages the main lobby -main = {} -local mustcreate = true -minetest.register_tool("main:teleporter", { - description = "Teleporter", - inventory_image = "compass.png", - on_use = function(itemstack, user, pointed_thing) - main.open_teleporter_form(user) - end, - on_secondary_use = function(itemstack, user, pointed_thing) - main.open_teleporter_form(user) - end, -}) +-- Server customisations +dofile(minetest.get_modpath("customisations") .. "/main.lua") +dofile(minetest.get_modpath("customisations") .. "/build.lua") -subgames.register_game("main", { - fullname = "Main", - object = main, - area = { - [1] = {x=(-31), y=623, z=0}, - [2] = {x=9, y=595, z=39} - }, - node_dig = function(pos, node, digger) - return false - end, - item_place_node = function(itemstack, placer, pointed_thing, param2) - return false - end, -}) - -main.teleporter_form = "" -function main.create_teleporter_form() - main.teleporter_form = ("size[4,4]" .. - "item_image_button[0,0;2,2;mesewars:mese1;mesewars;"..#subgames.get_lobby_players("mesewars").." players]" .. - "tooltip[mesewars;Mesewars: Eggwars in Minetest!]".. - "image_button[2,0;2,2;hideandseek.png;hiddenseeker;"..#subgames.get_lobby_players("hiddenseeker").." players]" .. - "tooltip[hiddenseeker;Hide and Seek!]" .. - "item_image_button[0,2;2,2;bow:bow;skywars;"..#subgames.get_lobby_players("skywars").." players]" .. - "tooltip[skywars;Skywars!]" .. - "item_image_button[2,2;2,2;default:sword_steel;survivalgames;"..#subgames.get_lobby_players("survivalgames").." players]" .. - "tooltip[survivalgames;Survivalgames!]") - return main.teleporter_form -end - -function main.open_teleporter_form(player) - local name = player:get_player_name() - minetest.show_formspec(name, "main:teleporter", main.create_teleporter_form()) -end - -minetest.register_on_player_receive_fields(function(player, formname, pressed) - if formname == "main:teleporter" then - local name = player:get_player_name() - if pressed.mesewars then - if #subgames.get_lobby_players("mesewars") < mesewars.lobbys[1].playercount*#mesewars.lobbys then - subgames.change_lobby(player, "mesewars") - end - elseif pressed.hiddenseeker then - if #subgames.get_lobby_players("hiddenseeker") < hiddenseeker.max_players*#hiddenseeker.lobbys then - subgames.change_lobby(player, "hiddenseeker") - end - elseif pressed.skywars then - local count = 0 - for numb, table in pairs(skywars.lobbys) do - count = count + table.playercount - end - if #subgames.get_lobby_players("skywars") < count then - subgames.change_lobby(player, "skywars") - else minetest.chat_send_player(name, "Skywars is full!") - end - elseif pressed.survivalgames then - if #subgames.get_lobby_players("survivalgames") < survivalgames.max_players* #survivalgames.lobbys then - subgames.change_lobby(player, "survivalgames") - else minetest.chat_send_player(name, "Ssurvivalgames is full!") - end - end - minetest.close_formspec(name, "main:teleporter") - end -end) - -local spawn = {x=(-11), y=602, z=20} -subgames.register_on_joinplayer(function(player, lobby) - if lobby == "main" then - local name = player:get_player_name() - player:set_pos(spawn) - local inv = player:get_inventory() - inv:add_item("main", "main:teleporter") - sfinv.set_page(player, "subgames:lobbys") - local privs = minetest.get_player_privs(name) - privs.interact = true - minetest.set_player_privs(name, privs) - if mustcreate == true then - mustcreate = false - local param1 = "mainlobby" - local schem = minetest.get_worldpath() .. "/schems/" .. param1 .. ".mts" - minetest.place_schematic({x=-27, y=601, z=4}, schem) - end - minetest.after(1, function() - if player:is_player_connected() and agreerules_accepted(name) and player_lobby[name] == "main" then - main.open_teleporter_form(player) - subgames.clear_inv(player) - local inv = player:get_inventory() - inv:add_item("main", "main:teleporter") - sfinv.set_page(player, "subgames:lobbys") - end - end) - end -end) - -subgames.register_on_leaveplayer(function(player, lobby) - if lobby == "main" then - end -end) - -subgames.register_on_chat_message(function(name, message, lobby) - if lobby == "main" and name and message then - subgames.chat_send_all_lobby("main", "<"..name.."> "..message) - return true - end -end) - --- Add chat system -subgames.register_on_respawnplayer(function(player, lobby) - if lobby == "main" then - player:set_pos(spawn) - end -end) - -subgames.register_on_drop(function(itemstack, dropper, pos, lobby) - if lobby == "main" then - return false - end -end) - --- Add the hub command -minetest.register_chatcommand("hub", { - params = "", - description = "Use it to get to the Main Lobby!", - func = function(user) - local player = minetest.get_player_by_name(user) - subgames.change_lobby(player, "main") - end, -}) - --- Add the lethub command -minetest.register_chatcommand("lethub", { - privs = {kick=true}, - params = "name", - description = "Use it to sent players in the main Lobby!", - func = function(name, param) - local player = minetest.get_player_by_name(param) - if player then - subgames.change_lobby(player, "main") - minetest.chat_send_player(name, "You have left the player "..param) - else minetest.chat_send_player(name, "The player is not online!") - end - end, -}) +minetest.register_privilege("invs", "Allows you to be fully invisible!") function minetest.get_server_status() local total = "" @@ -235,7 +84,7 @@ You find the kits, skins and more in your inventory.]] } -function main.get_help_form(type) +local function get_help_form(type) local toreturn = ( "size[8,6]".. "button[0,0;2,1;general;General]".. @@ -253,12 +102,12 @@ minetest.register_chatcommand("info", { params = "", description = "Use it to see the helpguide!", func = function(name) - minetest.show_formspec(name, "main:info", main.get_help_form("general")) + minetest.show_formspec(name, "customisations:info", get_help_form("general")) end, }) minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname == "main:info" then + if formname == "customisations:info" then local type if fields.general then type = "general" end if fields.mesewars then type = "mesewars" end @@ -267,13 +116,86 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if fields.survivalgames then type = "survivalgames" end if fields.commands then type = "commands" end if type then - minetest.show_formspec(player:get_player_name(), "main:info", main.get_help_form(type)) + minetest.show_formspec(player:get_player_name(), "customisations:info", get_help_form(type)) end end end) -subgames.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage, lobby) - if lobby == "main" and player then - return true +-- Delete player accounts if they doesn't earn any money + +minetest.register_on_leaveplayer(function(player) + if player then + local name = player:get_player_name() + if not money.exist(name) then + minetest.after(1, function() + if minetest.get_player_by_name(name) then + return false + end + if sban_del_player(name) then + minetest.remove_player(name) + minetest.remove_player_auth(name) + remove_rule_accepted(name) + playtime.remove_playtime(name) + skins.remove_player(name) + subgames.remove_all_player(name) + money.remove(name) + return true + end + end) + end end end) + +minetest.unregister_chatcommand("me") + +minetest.register_chatcommand("say", { + params = "", + description = "Use it to say something in the global chat.", + privs = {kick=true}, + func = function(user, param) + minetest.chat_send_all(param) + end, +}) + +minetest.register_on_joinplayer(function(player) + player:hud_set_flags({minimap = false}) + player:set_properties({zoom_fov=10}) +end) + +minetest.register_chatcommand("w", { + params = "", + description = "Use it to get the Lobby where a player is.", + func = function(user, param) + local player = minetest.get_player_by_name(param) + if player and not minetest.get_player_privs(param).invs then + minetest.chat_send_player(user, "The player "..param.." is in the Lobby "..player_lobby[param]..".") + else minetest.chat_send_player(user, "The player is not online") + end + end, +}) + +function core.send_join_message(name) +end + +function core.send_leave_message(name, timed_out) +end + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + player:set_properties({ + visual_size = {x=1, y=1}, + makes_footstep_sound = true, + collisionbox = {-0.3, -1, -0.3, 0.3, 1, 0.3} + }) + local privs = minetest.get_player_privs(name) + privs.interact = true + privs.fly = nil + privs.fast = nil + privs.noclip = nil + minetest.set_player_privs(name, privs) + subgames.call_join_callbacks(player, "main") +end) + +minetest.register_on_chat_message(function(name, message) + minetest.log("action", "Chatlog: "..name.." wrote:"..message) +end) diff --git a/mods/customisations/main.lua b/mods/customisations/main.lua new file mode 100644 index 0000000..ee187a7 --- /dev/null +++ b/mods/customisations/main.lua @@ -0,0 +1,181 @@ +-- This is the file which manages the main lobby +main = {} +local mustcreate = true +minetest.register_tool("customisations:teleporter", { + description = "Teleporter", + inventory_image = "compass.png", + on_use = function(itemstack, user, pointed_thing) + main.open_teleporter_form(user) + end, + on_secondary_use = function(itemstack, user, pointed_thing) + main.open_teleporter_form(user) + end, +}) + +subgames.register_game("main", { + fullname = "Main", + object = main, + area = { + [1] = {x=(-31), y=623, z=0}, + [2] = {x=9, y=595, z=39} + }, + crafting = false, + node_dig = function(pos, node, digger) + return false + end, + item_place_node = function(itemstack, placer, pointed_thing, param2) + return false + end, +}) + +function main.create_teleporter_form() + return "size[4,4]" .. + "item_image_button[0,0;2,2;mesewars:mese1;mesewars;"..#subgames.get_lobby_players("mesewars").." players]" .. + "tooltip[mesewars;Mesewars: Eggwars in Minetest!]".. + "image_button[2,0;2,2;hideandseek.png;hiddenseeker;"..#subgames.get_lobby_players("hiddenseeker").." players]" .. + "tooltip[hiddenseeker;Hide and Seek!]" .. + "item_image_button[0,2;2,2;bow:bow;skywars;"..#subgames.get_lobby_players("skywars").." players]" .. + "tooltip[skywars;Skywars!]" .. + "item_image_button[2,2;2,2;default:sword_steel;survivalgames;"..#subgames.get_lobby_players("survivalgames").." players]" .. + "tooltip[survivalgames;Survivalgames!]" +end + +function main.open_teleporter_form(player) + local name = player:get_player_name() + minetest.show_formspec(name, "customisations:teleporter", main.create_teleporter_form()) +end + +minetest.register_on_player_receive_fields(function(player, formname, pressed) + if formname == "customisations:teleporter" then + local name = player:get_player_name() + if pressed.mesewars then + if #subgames.get_lobby_players("mesewars") < mesewars.lobbys[1].playercount*#mesewars.lobbys then + subgames.change_lobby(player, "mesewars") + end + elseif pressed.hiddenseeker then + if #subgames.get_lobby_players("hiddenseeker") < hiddenseeker.max_players*#hiddenseeker.lobbys then + subgames.change_lobby(player, "hiddenseeker") + end + elseif pressed.skywars then + local count = 0 + for numb, table in pairs(skywars.lobbys) do + count = count + table.playercount + end + if #subgames.get_lobby_players("skywars") < count then + subgames.change_lobby(player, "skywars") + else minetest.chat_send_player(name, "Skywars is full!") + end + elseif pressed.survivalgames then + if #subgames.get_lobby_players("survivalgames") < survivalgames.max_players* #survivalgames.lobbys then + subgames.change_lobby(player, "survivalgames") + else minetest.chat_send_player(name, "Ssurvivalgames is full!") + end + end + minetest.close_formspec(name, "customisations:teleporter") + end +end) + +local spawn = {x=(-11), y=602, z=20} +subgames.register_on_joinplayer(function(player, lobby) + if lobby == "main" then + local name = player:get_player_name() + player:set_pos(spawn) + local inv = player:get_inventory() + inv:add_item("main", "customisations:teleporter") + sfinv.set_page(player, "main:lobbys") + local privs = minetest.get_player_privs(name) + privs.interact = true + minetest.set_player_privs(name, privs) + if mustcreate == true then + mustcreate = false + local param1 = "mainlobby" + local schem = minetest.get_worldpath() .. "/schems/" .. param1 .. ".mts" + minetest.place_schematic({x=-27, y=601, z=4}, schem) + end + minetest.after(1, function() + if player:is_player_connected() and agreerules_accepted(name) and player_lobby[name] == "main" then + main.open_teleporter_form(player) + subgames.clear_inv(player) + local inv = player:get_inventory() + inv:add_item("main", "customisations:teleporter") + sfinv.set_page(player, "main:lobbys") + end + end) + end +end) + +subgames.register_on_leaveplayer(function(player, lobby) + if lobby == "main" then + end +end) + +subgames.register_on_chat_message(function(name, message, lobby) + if lobby == "main" and name and message then + subgames.chat_send_all_lobby("main", "<"..name.."> "..message) + return true + end +end) + +-- Add chat system +subgames.register_on_respawnplayer(function(player, lobby) + if lobby == "main" then + player:set_pos(spawn) + end +end) + +subgames.register_on_drop(function(itemstack, dropper, pos, lobby) + if lobby == "main" then + return false + end +end) + +subgames.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage, lobby) + if lobby == "main" and player then + return true + end +end) + +-- Add the hub command +minetest.register_chatcommand("hub", { + params = "", + description = "Use it to get to the Main Lobby!", + func = function(user) + local player = minetest.get_player_by_name(user) + subgames.change_lobby(player, "main") + end, +}) + +sfinv.register_page("main:lobbys", { + title = "Lobbys", + get = function(self, player, context) + return sfinv.make_formspec(player, context, main.create_teleporter_form(), false) + end, + on_player_receive_fields = function(self, player, context, pressed) + local name = player:get_player_name() + if pressed.mesewars then + subgames.change_lobby(player, "mesewars") + elseif pressed.hiddenseeker then + subgames.change_lobby(player, "hiddenseeker") + elseif pressed.skywars then + subgames.change_lobby(player, "skywars") + elseif pressed.survivalgames then + subgames.change_lobby(player, "survivalgames") + end + minetest.close_formspec(name, "") + end, +}) + +-- Add the lethub command +minetest.register_chatcommand("lethub", { + privs = {kick=true}, + params = "name", + description = "Use it to sent players in the main Lobby!", + func = function(name, param) + local player = minetest.get_player_by_name(param) + if player then + subgames.change_lobby(player, "main") + minetest.chat_send_player(name, "You have left the player "..param) + else minetest.chat_send_player(name, "The player is not online!") + end + end, +}) diff --git a/mods/main/textures/compass.png b/mods/customisations/textures/compass.png similarity index 100% rename from mods/main/textures/compass.png rename to mods/customisations/textures/compass.png diff --git a/mods/hiddenseeker/ingame.lua b/mods/hiddenseeker/ingame.lua index 894b3ef..1d4061d 100644 --- a/mods/hiddenseeker/ingame.lua +++ b/mods/hiddenseeker/ingame.lua @@ -92,7 +92,7 @@ subgames.register_on_punchnode(function(bpos, node, puncher, pointed_thing, lobb if plobby and plooby ~= 0 and hiddenseeker.lobbys[plobby].players[name] == "seeker" then for pname, table in pairs(hiddenseeker.disguis) do if table.pos then - if vector.equals(bpos, subgames.decomma_pos(minetest.string_to_pos(hiddenseeker.disguis[pname].pos))) then + if vector.equals(bpos, vector.round(minetest.string_to_pos(hiddenseeker.disguis[pname].pos))) then local player = minetest.get_player_by_name(pname) hiddenseeker.disguis[pname].time = hiddenseeker.timetodisquis hiddenseeker.disguis_player(player) diff --git a/mods/hiddenseeker/init.lua b/mods/hiddenseeker/init.lua index 6c3d483..42e1dff 100644 --- a/mods/hiddenseeker/init.lua +++ b/mods/hiddenseeker/init.lua @@ -13,6 +13,7 @@ subgames.register_game("hiddenseeker", { [1] = {x=0, y=(-10000), z=0}, [2] = {x=0, y=(-10000), z=0} }, + crafting = false, node_dig = function(pos, node, digger) return false end, @@ -194,7 +195,7 @@ function hiddenseeker.join_game(player, lobby) subgames.clear_inv(player) hiddenseeker.lobbys[lobby].players[name] = true player:set_nametag_attributes({color = {a = 0, r = 255, g = 255, b = 255}}) - sfinv.set_page(player, "subgames:kits") + sfinv.set_page(player, "hiddenseeker:kits") hiddenseeker.win(lobby) if hiddenseeker.lobbys[lobby].mustcreate == true then hiddenseeker.lobbys[lobby].mustcreate = false diff --git a/mods/hiddenseeker/kits.lua b/mods/hiddenseeker/kits.lua index 3b16c84..850f96c 100644 --- a/mods/hiddenseeker/kits.lua +++ b/mods/hiddenseeker/kits.lua @@ -1,4 +1,3 @@ -hiddenseeker_kit_form = {} hiddenseeker_kits = {} local kits_register = {} local kits_all = {} @@ -109,8 +108,7 @@ function hiddenseeker.create_kit_form(name) local itembuyb = kits_register[hiddenseeker_kits[name].buying] itembuy = itembuyb.items end - hiddenseeker_kit_form[name] = ( - "size[8,9]" .. + return "size[8,9]" .. "label[0,0;Select your Block you want to be in the next round!]" .. "dropdown[0,0.5;8,1.5;blocklist;"..subgames.concatornil(hiddenseeker_kits[name].kit)..";"..selected_id.."]" .. "label[0,1.5;Block: "..subgames.concatornil(defitems).." ]" .. @@ -119,7 +117,7 @@ function hiddenseeker.create_kit_form(name) "dropdown[0,3.5;8,1.5;buylist;"..table.concat(kits_all, ",")..";"..selected_buyid.."]" .. "label[0,4.5;Cost: "..costbuy.."]" .. "label[0,5.5;Block: "..subgames.concatornil(itembuy).." ]" .. - "button[4,4.5;3,1;buyblock;Buy this Block!]") + "button[4,4.5;3,1;buyblock;Buy this Block!]" end -- Grant money when kill a player @@ -137,26 +135,46 @@ subgames.register_on_kill_player(function(killer, killed, lobby) end end) -function hiddenseeker.kit_on_player_receive_fields(self, player, context, pressed) +function hiddenseeker.kit_on_player_receive_fields(player, context, pressed) local name = player:get_player_name() - if player_lobby[name] == "hiddenseeker" then - if pressed.buyblock then - if hiddenseeker_kits[name].buying then - hiddenseeker.add_player_kits(name, hiddenseeker_kits[name].buying) - end + if pressed.buyblock then + if hiddenseeker_kits[name].buying then + hiddenseeker.add_player_kits(name, hiddenseeker_kits[name].buying) end - if pressed.blocklist then - hiddenseeker.set_player_kit(name, pressed.blocklist) - end - if pressed.buylist then - hiddenseeker_kits[name].buying = pressed.buylist - end - hiddenseeker.save_kits(name) - hiddenseeker.create_kit_form(name) - sfinv.set_player_inventory_formspec(player) end + if pressed.blocklist then + hiddenseeker.set_player_kit(name, pressed.blocklist) + end + if pressed.buylist then + hiddenseeker_kits[name].buying = pressed.buylist + end + hiddenseeker.save_kits(name) end +-- Add a kit tab +sfinv.register_page("hiddenseeker:kits", { + title = "Kits", + get = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "hiddenseeker" then + return sfinv.make_formspec(player, context, hiddenseeker.create_kit_form(name), false) + end + end, + on_player_receive_fields = function(self, player, context, pressed) + local name = player:get_player_name() + if player_lobby[name] == "hiddenseeker" then + hiddenseeker.kit_on_player_receive_fields(player, context, pressed) + sfinv.set_player_inventory_formspec(player) + end + end, + is_in_nav = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "hiddenseeker" then + return true + end + end +}) + function hiddenseeker.get_player_block(name) local lobby = hiddenseeker.player_lobby[name] local selected = hiddenseeker_kits[name].selected diff --git a/mods/hiddenseeker/mod.conf b/mods/hiddenseeker/mod.conf new file mode 100644 index 0000000..73bb23c --- /dev/null +++ b/mods/hiddenseeker/mod.conf @@ -0,0 +1,2 @@ +name = hiddenseeker +depends = default, subgames diff --git a/mods/hiddenseeker/start.lua b/mods/hiddenseeker/start.lua index 16f02c9..0391018 100644 --- a/mods/hiddenseeker/start.lua +++ b/mods/hiddenseeker/start.lua @@ -160,7 +160,7 @@ local function party_win_announce(party, lobby, ldata) subgames.clear_inv(player) ldata.players[player:get_player_name()] = true player:set_pos(ldata.pos) - sfinv.set_page(player, "subgames:kits") + sfinv.set_page(player, "hiddenseeker:kits") end hiddenseeker.win(lobby) end) diff --git a/mods/item_drop b/mods/item_drop new file mode 160000 index 0000000..de38b20 --- /dev/null +++ b/mods/item_drop @@ -0,0 +1 @@ +Subproject commit de38b20fa60c9d567a55bd97e2fa1134cf5d9d5c diff --git a/mods/item_drop/README.txt b/mods/item_drop/README.txt deleted file mode 100644 index ae3bf55..0000000 --- a/mods/item_drop/README.txt +++ /dev/null @@ -1,43 +0,0 @@ -===ITEM_DROP MOD for MINETEST-C55=== -by PilzAdam -Edited by Lejo for mesewars!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -Introduction: -This mod adds Minecraft like drop/pick up of items to Minetest. - -How to install: -Unzip the archive an place it in minetest-base-directory/mods/minetest/ -if you have a windows client or a linux run-in-place client. If you have -a linux system-wide instalation place it in ~/.minetest/mods/minetest/. -If you want to install this mod only in one world create the folder -worldmods/ in your worlddirectory. -For further information or help see: -http://wiki.minetest.com/wiki/Installing_Mods - -How to use the mod: -Just install it an everything works. - -For developers: -You dont have to use get_drops() anymore because of changes in the -builtin files of minetest. - -License: -Sourcecode: WTFPL (see below) -Sound: WTFPL (see below) - -See also: -http://minetest.net/ - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/mods/item_drop/init.lua b/mods/item_drop/init.lua deleted file mode 100644 index cb482f7..0000000 --- a/mods/item_drop/init.lua +++ /dev/null @@ -1,121 +0,0 @@ ---[[This mod was added by Lejo for mesewars with everything with item place take up etc.!]] - -minetest.register_globalstep(function(dtime) - for _,player in ipairs(minetest.get_connected_players()) do - local name = player:get_player_name() - if player:get_hp() > 0 and minetest.get_player_privs(name).interact then - local pos = player:get_pos() - pos.y = pos.y+0.5 - local inv = player:get_inventory() - - for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 1)) do - if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then - if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then - inv:add_item("main", ItemStack(object:get_luaentity().itemstring)) - if object:get_luaentity().itemstring ~= "" then - minetest.sound_play("item_drop_pickup", { - to_player = player:get_player_name(), - gain = 0.4, - }) - end - object:get_luaentity().itemstring = "" - object:remove() - end - end - end - - for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 2)) do - if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then - if object:get_luaentity().collect then - if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then - local pos1 = pos - pos1.y = pos1.y+0.2 - local pos2 = object:get_pos() - local vec = {x=pos1.x-pos2.x, y=pos1.y-pos2.y, z=pos1.z-pos2.z} - vec.x = vec.x*3 - vec.y = vec.y*3 - vec.z = vec.z*3 - object:setvelocity(vec) - object:get_luaentity().physical_state = false - object:get_luaentity().object:set_properties({ - physical = false - }) - - minetest.after(1, function(args) - local lua = object:get_luaentity() - if object == nil or lua == nil or lua.itemstring == nil then - return - end - if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then - inv:add_item("main", ItemStack(object:get_luaentity().itemstring)) - if object:get_luaentity().itemstring ~= "" then - minetest.sound_play("item_drop_pickup", { - to_player = player:get_player_name(), - gain = 0.4, - }) - end - object:get_luaentity().itemstring = "" - object:remove() - else - object:setvelocity({x=0,y=0,z=0}) - object:get_luaentity().physical_state = true - object:get_luaentity().object:set_properties({ - physical = true - }) - end - end, {player, object}) - - end - end - end - end - end - end -end) - -function minetest.handle_node_drops(pos, drops, digger) - local inv - if minetest.setting_getbool("creative_mode") and digger and digger:is_player() then - inv = digger:get_inventory() - end - for _,item in ipairs(drops) do - local count, name - if type(item) == "string" then - count = 1 - name = item - else - count = item:get_count() - name = item:get_name() - end - if subgames.check_drop(pos, name, digger) then - if not inv or not inv:contains_item("main", ItemStack(name)) then - for i=1,count do - local obj = minetest.env:add_item(pos, name) - if obj ~= nil then - obj:get_luaentity().collect = true - local x = math.random(1, 5) - if math.random(1,2) == 1 then - x = -x - end - local z = math.random(1, 5) - if math.random(1,2) == 1 then - z = -z - end - obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z}) - - -- FIXME this doesnt work for deactiveted objects - if minetest.setting_get("remove_items") and tonumber(minetest.setting_get("remove_items")) then - minetest.after(tonumber(minetest.setting_get("remove_items")), function(obj) - obj:remove() - end, obj) - end - end - end - end - end - end -end - -if minetest.setting_get("log_mods") then - minetest.log("action", "item_drop loaded") -end diff --git a/mods/item_drop/sounds/item_drop_pickup.1.ogg b/mods/item_drop/sounds/item_drop_pickup.1.ogg deleted file mode 100644 index 2ae432d..0000000 Binary files a/mods/item_drop/sounds/item_drop_pickup.1.ogg and /dev/null differ diff --git a/mods/item_drop/sounds/item_drop_pickup.2.ogg b/mods/item_drop/sounds/item_drop_pickup.2.ogg deleted file mode 100644 index f58bf08..0000000 Binary files a/mods/item_drop/sounds/item_drop_pickup.2.ogg and /dev/null differ diff --git a/mods/item_drop/sounds/item_drop_pickup.3.ogg b/mods/item_drop/sounds/item_drop_pickup.3.ogg deleted file mode 100644 index cf57c94..0000000 Binary files a/mods/item_drop/sounds/item_drop_pickup.3.ogg and /dev/null differ diff --git a/mods/item_drop/sounds/item_drop_pickup.4.ogg b/mods/item_drop/sounds/item_drop_pickup.4.ogg deleted file mode 100644 index bfe99d9..0000000 Binary files a/mods/item_drop/sounds/item_drop_pickup.4.ogg and /dev/null differ diff --git a/mods/main/depends.txt b/mods/main/depends.txt deleted file mode 100644 index c3e148f..0000000 --- a/mods/main/depends.txt +++ /dev/null @@ -1 +0,0 @@ -subgames diff --git a/mods/mesewars/LICENSE b/mods/mesewars/LICENSE new file mode 100644 index 0000000..eebbe49 --- /dev/null +++ b/mods/mesewars/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019-date, Lejo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/mods/mesewars/init.lua b/mods/mesewars/init.lua index 7448fb3..373dc9a 100644 --- a/mods/mesewars/init.lua +++ b/mods/mesewars/init.lua @@ -136,6 +136,7 @@ subgames.register_game("mesewars", { [1] = {x=(-700), y=1000, z=-700}, [2] = {x=75, y=1302, z=(-17)} }, + crafting = false, node_dig = function(pos, node, digger) local name = digger:get_player_name() local plobby = mesewars.player_lobby[name] @@ -207,7 +208,7 @@ function mesewars.join_game(player, lobby) subgames.clear_inv(player) mesewars.lobbys[lobby].players[name] = false subgames.spectate(player) - sfinv.set_page(player, "subgames:maps") + sfinv.set_page(player, "mesewars:maps") return "Lobby is ingame! So you are now spectating." else mesewars.player_lobby[name] = lobby player:set_pos(mesewars.lobbys[lobby].specpos) @@ -225,7 +226,7 @@ function mesewars.join_game(player, lobby) minetest.fix_light(mesewars.lobbys[lobby].mappos1, mesewars.lobbys[lobby].mappos2) end mesewars.team_form(name) - sfinv.set_page(player, "subgames:team") + sfinv.set_page(player, "mesewars:team") return "You joined the map "..mesewars.lobbys[lobby].string_name.."!" end end diff --git a/mods/mesewars/kits.lua b/mods/mesewars/kits.lua index 4f1f0db..3ab24c0 100644 --- a/mods/mesewars/kits.lua +++ b/mods/mesewars/kits.lua @@ -1,7 +1,5 @@ -- Adds kits to mesewars kits = {} -mesewars_kit_form = {} -mesewars_ability_form = {} local kits_all = {} local abilitys = { speed = { @@ -166,8 +164,7 @@ function mesewars.create_kit_form(name) local itembuyb = kits.register[kits[name].buying] itembuy = itembuyb.items end - mesewars_kit_form[name] = ( - "size[8,9]" .. + return "size[8,9]" .. "label[0,0;Select your Kit!]" .. "dropdown[0,0.5;8,1.5;kitlist;"..subgames.concatornil(kits[name].kit)..";"..selected_id.."]" .. "label[0,1.5;Items: "..subgames.concatornil(defitems).." ]" .. @@ -176,9 +173,49 @@ function mesewars.create_kit_form(name) "dropdown[0,3.5;8,1.5;buylist;"..table.concat(kits_all, ",")..";"..selected_buyid.."]" .. "label[0,4.5;Cost: "..costbuy.."]" .. "label[0,5.5;Items: "..subgames.concatornil(itembuy).." ]" .. - "button[4,4.5;3,1;buykit;Buy this Kit!]") + "button[4,4.5;3,1;buykit;Buy this Kit!]" end +function mesewars.kit_on_player_receive_fields(player, context, pressed) + local name = player:get_player_name() + if pressed.buykit then + if kits[name].buying then + mesewars.add_player_kits(name, kits[name].buying) + end + end + if pressed.kitlist then + mesewars.set_player_kit(name, pressed.kitlist) + end + if pressed.buylist then + kits[name].buying = pressed.buylist + end + mesewars.save_kits(name) +end + +-- Add a kit tab +sfinv.register_page("mesewars:kits", { + title = "Kits", + get = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "mesewars" then + return sfinv.make_formspec(player, context, mesewars.create_kit_form(name), false) + end + end, + on_player_receive_fields = function(self, player, context, pressed) + local name = player:get_player_name() + if player_lobby[name] == "mesewars" then + mesewars.kit_on_player_receive_fields(player, context, pressed) + sfinv.set_player_inventory_formspec(player) + end + end, + is_in_nav = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "mesewars" then + return true + end + end +}) + -- Grant money when kill a player subgames.register_on_kill_player(function(killer, killed, lobby) if lobby == "mesewars" then @@ -301,8 +338,7 @@ local function check_active(value, number, text) end end -function mesewars.create_ability_form(player) - local name = player:get_player_name() +function mesewars.create_ability_form(name) local speedontool if kits[name].abilitys.speed.active == true then speedontool = "Enable!" @@ -323,8 +359,7 @@ function mesewars.create_ability_form(player) carefullontool = "Enable!" else carefullontool = "Disable!" end - mesewars_ability_form[name] = ( - "size[8,9]" .. + return "size[8,9]" .. "label[0,0.5;Here you can buy abilities for your money.]" .. "label[0,1;Your money: "..money.get_money(name).." Coins]" .. "image_button[1,2;1,1;pep_speedplus.png;speedon;]" .. @@ -379,7 +414,6 @@ function mesewars.create_ability_form(player) "tooltip[carefull4;1600 Coins]" .. "button[4,8;1,1;carefull5;"..check_active(kits[name].abilitys.carefull.level, 5, "50%").."]" .. "tooltip[carefull5;3200 Coins]" - ) end function mesewars.handle_buy(player, ability, level, cost) @@ -400,3 +434,80 @@ function mesewars.handle_buy(player, ability, level, cost) minetest.chat_send_player(name, "You already buyed this Level.") end end + +-- Add a Abilitys tab +sfinv.register_page("mesewars:abilitys", { + title = "Abilities", + get = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "mesewars" then + return sfinv.make_formspec(player, context, mesewars.create_ability_form(name), false) + else return sfinv.make_formspec(player, context, ( + "size[8,9]" .. + "label[0,0;Abilitys are not available here!]" + ), false) + end + end, + on_player_receive_fields = function(self, player, context, pressed) + local name = player:get_player_name() + if player_lobby[name] == "mesewars" then + if pressed.speedbox then + if pressed.speedbox == "true" then kits[name].abilitys.speed.active = true else kits[name].abilitys.speed.active = false end + elseif pressed.slownessbox then + if pressed.slownessbox == "true" then kits[name].abilitys.slowness.active = true else kits[name].abilitys.slowness.active = false end + elseif pressed.killkitbox then + if pressed.killkitbox == "true" then kits[name].abilitys.killkit.active = true else kits[name].abilitys.killkit.active = false end + elseif pressed.carefullbox then + if pressed.carefullbox == "true" then kits[name].abilitys.carefull.active = true else kits[name].abilitys.carefull.active = false end + elseif pressed.speed1 then + mesewars.handle_buy(player, "speed", 1, 200) + elseif pressed.speed2 then + mesewars.handle_buy(player, "speed", 2, 400) + elseif pressed.speed3 then + mesewars.handle_buy(player, "speed", 3, 800) + elseif pressed.speed4 then + mesewars.handle_buy(player, "speed", 4, 1600) + elseif pressed.speed5 then + mesewars.handle_buy(player, "speed", 5, 3200) + elseif pressed.slowness1 then + mesewars.handle_buy(player, "slowness", 1, 200) + elseif pressed.slowness2 then + mesewars.handle_buy(player, "slowness", 2, 400) + elseif pressed.slowness3 then + mesewars.handle_buy(player, "slowness", 3, 800) + elseif pressed.slowness4 then + mesewars.handle_buy(player, "slowness", 4, 1600) + elseif pressed.slowness5 then + mesewars.handle_buy(player, "slowness", 5, 3200) + elseif pressed.killkit1 then + mesewars.handle_buy(player, "killkit", 1, 200) + elseif pressed.killkit2 then + mesewars.handle_buy(player, "killkit", 2, 400) + elseif pressed.killkit3 then + mesewars.handle_buy(player, "killkit", 3, 800) + elseif pressed.killkit4 then + mesewars.handle_buy(player, "killkit", 4, 1600) + elseif pressed.killkit5 then + mesewars.handle_buy(player, "killkit", 5, 3200) + elseif pressed.carefull1 then + mesewars.handle_buy(player, "carefull", 1, 200) + elseif pressed.carefull2 then + mesewars.handle_buy(player, "carefull", 2, 400) + elseif pressed.carefull3 then + mesewars.handle_buy(player, "carefull", 3, 800) + elseif pressed.carefull4 then + mesewars.handle_buy(player, "carefull", 4, 1600) + elseif pressed.carefull5 then + mesewars.handle_buy(player, "carefull", 5, 3200) + end + mesewars.save_kits(name) + sfinv.set_player_inventory_formspec(player) + end + end, + is_in_nav = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "mesewars" then + return true + end + end +}) diff --git a/mods/mesewars/mod.conf b/mods/mesewars/mod.conf new file mode 100644 index 0000000..ebf2792 --- /dev/null +++ b/mods/mesewars/mod.conf @@ -0,0 +1,2 @@ +name = mesewars +depends = subgames diff --git a/mods/mesewars/registers.lua b/mods/mesewars/registers.lua index db11738..06ccbed 100644 --- a/mods/mesewars/registers.lua +++ b/mods/mesewars/registers.lua @@ -111,7 +111,7 @@ subgames.register_on_respawnplayer(function(player, lobby) mesewars.chat_send_all_lobby(plobby, minetest.colorize(mesewars.get_color_from_team(mesewars.lobbys[plobby].players[name]) ,name).." has been eliminated.") mesewars.lobbys[plobby].players[name] = false subgames.clear_inv(player) - sfinv.set_page(player, "subgames:team") + sfinv.set_page(player, "mesewars:team") end subgames.spectate(player) player:set_pos(mesewars.lobbys[plobby].specpos) @@ -245,3 +245,34 @@ minetest.register_node("mesewars:mese4", { end end, }) + +sfinv.register_page("mesewars:maps", { + title = "Maps", + get = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "mesewars" then + return sfinv.make_formspec(player, context, mesewars.create_teleporter_form(), false) + end + end, + on_player_receive_fields = function(self, player, context, pressed) + local name = player:get_player_name() + local lobby = player_lobby[name] + if lobby == "mesewars" then + if pressed.map1 then + mesewars.leave_game(player) + mesewars.win(mesewars.player_lobby[name]) + minetest.chat_send_player(name, mesewars.join_game(player, 1)) + elseif pressed.map2 then + mesewars.leave_game(player) + minetest.chat_send_player(name, mesewars.join_game(player, 2)) + end + end + minetest.close_formspec(name, "") + end, + is_in_nav = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "mesewars" then + return true + end + end +}) diff --git a/mods/mesewars/start.lua b/mods/mesewars/start.lua index ff621e4..79df0ef 100644 --- a/mods/mesewars/start.lua +++ b/mods/mesewars/start.lua @@ -126,7 +126,7 @@ function mesewars.win(lobby) subgames.unspectate(player) mesewars.lobbys[lobby].players[name] = false mesewars.color_tag(player) - sfinv.set_page(player, "subgames:team") + sfinv.set_page(player, "mesewars:team") end mesewars.reset_map(lobby) mesewars.win(lobby) diff --git a/mods/mesewars/teams.lua b/mods/mesewars/teams.lua index 0a12a49..9c9d688 100644 --- a/mods/mesewars/teams.lua +++ b/mods/mesewars/teams.lua @@ -120,6 +120,31 @@ function mesewars.handle_teamform_input(player, pressed) end end +-- Add a sfinv page for the team selector +sfinv.register_page("mesewars:team", { + title = "Teams", + get = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "mesewars" then + return sfinv.make_formspec(player, context, mesewars.create_team_form(name), false) + end + end, + on_player_receive_fields = function(self, player, context, pressed) + local name = player:get_player_name() + mesewars.handle_teamform_input(player, pressed) + if not pressed.quit then + mesewars.create_team_form(name) + sfinv.set_player_inventory_formspec(player) + end + end, + is_in_nav = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "mesewars" then + return true + end + end +}) + function mesewars.teams_correct(lobby) local maxteam = 1 for team=0, mesewars.lobbys[lobby].teams do diff --git a/mods/namesaver/init.lua b/mods/namesaver/init.lua deleted file mode 100644 index 75824fb..0000000 --- a/mods/namesaver/init.lua +++ /dev/null @@ -1,12 +0,0 @@ --- Delete player accounts if they doesn't earn any money - -minetest.register_on_leaveplayer(function(player) - if player then - local name = player:get_player_name() - if not money.exist(name) then - minetest.after(1, function() - subgames.remove_all_player(name) - end) - end - end -end) diff --git a/mods/sfinv/api.lua b/mods/sfinv/api.lua index fa1f443..c732beb 100644 --- a/mods/sfinv/api.lua +++ b/mods/sfinv/api.lua @@ -124,7 +124,7 @@ end function sfinv.set_player_inventory_formspec(player, context) local fs = sfinv.get_formspec(player, context or sfinv.get_or_create_context(player)) - player:set_inventory_formspec(fs) + player:set_inventory_formspec(fs or "") end function sfinv.set_page(player, pagename) diff --git a/mods/sfinv/init.lua b/mods/sfinv/init.lua index 7b0569d..f030222 100644 --- a/mods/sfinv/init.lua +++ b/mods/sfinv/init.lua @@ -1,3 +1,22 @@ --- sfinv/init.lua - dofile(minetest.get_modpath("sfinv") .. "/api.lua") + +sfinv.register_page("sfinv:crafting", { + title = "Crafting", + get = function(self, player, context) + return sfinv.make_formspec(player, context, [[ + list[current_player;craft;1.75,0.5;3,3;] + list[current_player;craftpreview;5.75,1.5;1,1;] + image[4.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270] + listring[current_player;main] + listring[current_player;craft] + image[0,4.75;1,1;gui_hb_bg.png] + image[1,4.75;1,1;gui_hb_bg.png] + image[2,4.75;1,1;gui_hb_bg.png] + image[3,4.75;1,1;gui_hb_bg.png] + image[4,4.75;1,1;gui_hb_bg.png] + image[5,4.75;1,1;gui_hb_bg.png] + image[6,4.75;1,1;gui_hb_bg.png] + image[7,4.75;1,1;gui_hb_bg.png] + ]], true) + end +}) diff --git a/mods/skinsdb/mod.conf b/mods/skinsdb/mod.conf index b5f0e2c..b18936b 100644 --- a/mods/skinsdb/mod.conf +++ b/mods/skinsdb/mod.conf @@ -1,4 +1,4 @@ name = skinsdb description = Player skin mod, supporting unified_inventory, sfinv and smart_inventory depends = default -optional_depends = unified_inventory,3d_armor,clothing,sfinv,3d_armor_sfinv,subgames +optional_depends = unified_inventory,3d_armor,clothing,sfinv,3d_armor_sfinv, customisations diff --git a/mods/skywars/LICENSE b/mods/skywars/LICENSE new file mode 100644 index 0000000..eebbe49 --- /dev/null +++ b/mods/skywars/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019-date, Lejo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/mods/skywars/init.lua b/mods/skywars/init.lua index 2c3bad1..8e0f13c 100644 --- a/mods/skywars/init.lua +++ b/mods/skywars/init.lua @@ -171,6 +171,7 @@ subgames.register_game("skywars", { [1] = {x=10000, y=1900, z=10000}, [2] = {x=(-10000), y=2900, z=(-10000)} }, + crafting = true, node_dig = function(pos, node, digger) local name = digger:get_player_name() local plobby = skywars.player_lobby[name] @@ -240,13 +241,13 @@ function skywars.join_game(player, lobby) player:set_pos(skywars.lobbys[lobby].specpos) subgames.clear_inv(player) skywars.lobbys[lobby].players[name] = false - sfinv.set_page(player, "subgames:maps") + sfinv.set_page(player, "skywars:maps") subgames.spectate(player) return "Lobby is ingame! So you are now spectating." else skywars.player_lobby[name] = lobby player:set_pos(skywars.lobbys[lobby].specpos) subgames.clear_inv(player) - sfinv.set_page(player, "subgames:maps") + sfinv.set_page(player, "skywars:maps") skywars.win(lobby) if skywars.lobbys[lobby].mustcreate == true then skywars.lobbys[lobby].mustcreate = false @@ -270,9 +271,6 @@ function skywars.leave_game(player) skywars.lobbys[lobby].players[name] = nil subgames.unspectate(player) if skywars.lobbys[lobby].ingame then - local privs = minetest.get_player_privs(name) - privs.craft = nil - minetest.set_player_privs(name, privs) subgames.add_bothud(player, "Teaming is not allowed!", 0xFF0000, 0) end end diff --git a/mods/skywars/kits.lua b/mods/skywars/kits.lua index e120606..c3a4789 100644 --- a/mods/skywars/kits.lua +++ b/mods/skywars/kits.lua @@ -1,6 +1,4 @@ skywars_kits = {} -skywars_kit_form = {} -skywars_ability_form = {} local kits_all = {} local kits_register = {} @@ -122,8 +120,7 @@ function skywars.create_kit_form(name) local itembuyb = kits_register[skywars_kits[name].buying] itembuy = itembuyb.items end - skywars_kit_form[name] = ( - "size[8,9]" .. + return "size[8,9]" .. "label[0,0;Select your Kit!]" .. "dropdown[0,0.5;8,1.5;kitlist;"..subgames.concatornil(skywars_kits[name].kit)..";"..selected_id.."]" .. "label[0,1.5;Items: "..subgames.concatornil(defitems).." ]" .. @@ -132,7 +129,7 @@ function skywars.create_kit_form(name) "dropdown[0,3.5;8,1.5;buylist;"..table.concat(kits_all, ",")..";"..selected_buyid.."]" .. "label[0,4.5;Cost: "..costbuy.."]" .. "label[0,5.5;Items: "..subgames.concatornil(itembuy).." ]" .. - "button[4,4.5;3,1;buykit;Buy this Kit!]") + "button[4,4.5;3,1;buykit;Buy this Kit!]" end -- Grant money when kill a player @@ -145,9 +142,8 @@ subgames.register_on_kill_player(function(killer, killed, lobby) end end) -function skywars.kit_on_player_receive_fields(self, player, context, pressed) +function skywars.kit_on_player_receive_fields(player, context, pressed) local name = player:get_player_name() - if player_lobby[name] == "skywars" then if pressed.buykit then if skywars_kits[name].buying then skywars.add_player_kits(name, skywars_kits[name].buying) @@ -160,11 +156,32 @@ function skywars.kit_on_player_receive_fields(self, player, context, pressed) skywars_kits[name].buying = pressed.buylist end skywars.save_kits(name) - skywars.create_kit_form(name) - sfinv.set_player_inventory_formspec(player) - end end +-- Add a kit tab +sfinv.register_page("skywars:kits", { + title = "Kits", + get = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "skywars" then + return sfinv.make_formspec(player, context, skywars.create_kit_form(name), false) + end + end, + on_player_receive_fields = function(self, player, context, pressed) + local name = player:get_player_name() + if player_lobby[name] == "skywars" then + skywars.kit_on_player_receive_fields(player, context, pressed) + sfinv.set_player_inventory_formspec(player) + end + end, + is_in_nav = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "skywars" then + return true + end + end +}) + skywars.register_kit("Swordman", { cost = 500, items = {"default:sword_steel"}, diff --git a/mods/skywars/mod.conf b/mods/skywars/mod.conf new file mode 100644 index 0000000..f434175 --- /dev/null +++ b/mods/skywars/mod.conf @@ -0,0 +1,2 @@ +name = skywars +depends = subgames diff --git a/mods/skywars/registers.lua b/mods/skywars/registers.lua index 60efb75..f1af4d9 100644 --- a/mods/skywars/registers.lua +++ b/mods/skywars/registers.lua @@ -143,3 +143,34 @@ subgames.register_on_blast(function(pos, intensity, lobby) end end end) + +sfinv.register_page("skywars:maps", { + title = "Maps", + get = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "skywars" then + return sfinv.make_formspec(player, context, skywars.create_teleporter_form(), false) + end + end, + on_player_receive_fields = function(self, player, context, pressed) + local name = player:get_player_name() + local lobby = player_lobby[name] + if lobby == "skywars" then + if pressed.map1 then + skywars.leave_game(player) + skywars.win(skywars.player_lobby[name]) + minetest.chat_send_player(name, skywars.join_game(player, 1)) + elseif pressed.map2 then + skywars.leave_game(player) + minetest.chat_send_player(name, skywars.join_game(player, 2)) + end + end + minetest.close_formspec(name, "") + end, + is_in_nav = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "skywars" then + return true + end + end +}) diff --git a/mods/skywars/start.lua b/mods/skywars/start.lua index 9b93556..327411b 100644 --- a/mods/skywars/start.lua +++ b/mods/skywars/start.lua @@ -67,9 +67,6 @@ function skywars.start_game(lobby) skywars.give_kit_items(name) player:set_pos(skywars.lobbys[lobby].pos[place]) sfinv.set_page(player, "3d_armor:armor") - local privs = minetest.get_player_privs(name) - privs.craft = true - minetest.set_player_privs(name, privs) subgames.add_bothud(player, "Teaming is not allowed!", 0xFF0000, 100000) end local starttime = os.time() @@ -123,10 +120,7 @@ function skywars.win(lobby) subgames.clear_inv(player) subgames.unspectate(player) skywars.lobbys[lobby].players[name] = true - sfinv.set_page(player, "subgames:maps") - local privs = minetest.get_player_privs(name) - privs.craft = nil - minetest.set_player_privs(name, privs) + sfinv.set_page(player, "skywars:maps") subgames.add_bothud(player, "Teaming is not allowed!", 0xFF0000, 0) end skywars.reset_map(lobby) diff --git a/mods/subgames/API.md b/mods/subgames/API.md new file mode 100644 index 0000000..ef6b253 --- /dev/null +++ b/mods/subgames/API.md @@ -0,0 +1,5 @@ +API +--- + +Mod is currently in development! +Mod might get an own repository as well when fully reworked diff --git a/mods/subgames/LICENSE b/mods/subgames/LICENSE new file mode 100644 index 0000000..9dc50e4 --- /dev/null +++ b/mods/subgames/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-date, Lejo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/mods/subgames/depends.txt b/mods/subgames/depends.txt index 28a59ab..caaa1e1 100644 --- a/mods/subgames/depends.txt +++ b/mods/subgames/depends.txt @@ -1,6 +1,6 @@ -default -sfinv -3d_armor_sfinv +3d_armor +sfinv? +3d_armor_sfinv? controls -atchat -antispam +atchat? +antispam? diff --git a/mods/subgames/functions.lua b/mods/subgames/functions.lua index 6477525..fa08183 100644 --- a/mods/subgames/functions.lua +++ b/mods/subgames/functions.lua @@ -27,9 +27,6 @@ function round(num, numDecimalPlaces) local mult = 10^(numDecimalPlaces or 0) return math.floor(num * mult + 0.5) / mult end -function subgames.decomma_pos(pos) - return {x=round(pos.x), y=round(pos.y), z=round(pos.z)} -end function toboolean(string) if string == "true" then @@ -50,8 +47,8 @@ function is_inside_area(pos1, pos2, mainpos) end function subgames.get_lobby_from_pos(pos) - for lname, area in pairs(subgames.areas) do - if is_inside_area(area[1], area[2], pos) then + for lname, d in pairs(subgames.games) do + if is_inside_area(d.area[1], d.area[2], pos) then return lname end end @@ -143,22 +140,10 @@ function subgames.drop_inv(name, pos) end function subgames.remove_all_player(name) - if minetest.get_player_by_name(name) then - return false - end - if sban_del_player(name) then - minetest.remove_player(name) - minetest.remove_player_auth(name) - remove_rule_accepted(name) - playtime.remove_playtime(name) - skins.remove_player(name) - for _, d in pairs(subgames.games) do - if d.remove_player then - d.remove_player(name) - end + for _, d in pairs(subgames.games) do + if d.remove_player then + d.remove_player(name) end - money.remove(name) - return true end end diff --git a/mods/subgames/init.lua b/mods/subgames/init.lua index 72450b2..8a95e69 100644 --- a/mods/subgames/init.lua +++ b/mods/subgames/init.lua @@ -3,44 +3,20 @@ subgames = {} player_lobby = {} subgames.games = {} -subgames.areas={ - ["mesewars"] = { - [1] = {x=(-700), y=1000, z=-700}, - [2] = {x=75, y=1302, z=(-17)} - }, - ["main"] = { - [1] = {x=(-31), y=623, z=0}, - [2] = {x=9, y=595, z=39} - }, - ["hiddenseeker"] = { - [1] = {x=0, y=(-10000), z=0}, - [2] = {x=0, y=(-10000), z=0} - }, - ["build"] = { - [1] = {x=0, y=(-10000), z=0}, - [2] = {x=0, y=(-10000), z=0} - }, - ["skywars"] = { - [1] = {x=10000, y=1900, z=10000}, - [2] = {x=(-10000), y=2900, z=(-10000)} - }, - ["survivalgames"] = { - [1] = {x=31000, y=-50, z=31000}, - [2] = {x=(-31000), y=110, z=(-31000)} - } -} dofile(minetest.get_modpath("subgames") .."/spectator.lua") dofile(minetest.get_modpath("subgames") .."/hud.lua") -dofile(minetest.get_modpath("subgames") .."/sfinv.lua") dofile(minetest.get_modpath("subgames") .."/functions.lua") dofile(minetest.get_modpath("subgames") .."/map.lua") +if minetest.get_modpath("sfinv") then + dofile(minetest.get_modpath("subgames") .."/sfinv.lua") +end --[[ Def should be: { fullname = "Mesewars" -object = mesewars +object = mesewars (Not used yet) area = { [1] = {x=(-700), y=1000, z=-700}, [2] = {x=75, y=1302, z=(-17)} @@ -51,6 +27,7 @@ node_dig = function(pos, node, digger) item_place_node = function(itemstack, placer, pointed_thing, param2) drop = function(pos, itemname, player) remove_player = function(name) +crafting = true } ]] @@ -66,7 +43,6 @@ function subgames.register_on_chat_message(func) end minetest.register_on_chat_message(function(name, message) - minetest.log("action", "Chatlog: "..name.." wrote:"..message) local toreturn = nil for _, value in pairs(subgames.on_chat_message) do if value(name, message, player_lobby[name]) == true then @@ -246,7 +222,7 @@ function subgames.call_join_callbacks(player, lobby) sfinv.set_page(player, "3d_armor:armor") local privs = minetest.get_player_privs(name) privs.armor = true - privs.craft = nil + privs.craft = nil -- Compatibility minetest.set_player_privs(name, privs) sfinv.set_player_inventory_formspec(player) for _,value in pairs(subgames.on_joinplayer) do @@ -254,22 +230,6 @@ function subgames.call_join_callbacks(player, lobby) end end -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - player:set_properties({ - visual_size = {x=1, y=1}, - makes_footstep_sound = true, - collisionbox = {-0.3, -1, -0.3, 0.3, 1, 0.3} - }) - local privs = minetest.get_player_privs(name) - privs.interact = true - privs.fly = nil - privs.fast = nil - privs.noclip = nil - minetest.set_player_privs(name, privs) - subgames.call_join_callbacks(player, "main") -end) - -- Add a register on leave player (player) subgames.on_leaveplayer = {} function subgames.register_on_leaveplayer(func) @@ -391,7 +351,8 @@ function subgames.handle_drop(itemstack, dropper, pos) end end -function subgames.check_drop(pos, itemname, player) +local old_node_drops = minetest.handle_node_drops +function minetest.handle_node_drops(pos, itemname, player) local name = player:get_player_name() local lobby = player_lobby[name] if not lobby then @@ -403,7 +364,8 @@ function subgames.check_drop(pos, itemname, player) local func = subgames.games[lobby].drop if not func then return false - else return func(pos, itemname, player) + elseif func(pos, itemname, player) then + old_node_drops(pos, itemname, player) end end @@ -449,26 +411,9 @@ minetest.after(1, function() end end) -minetest.register_privilege("craft", "Allows you to craft items.") minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) local name = player:get_player_name() - if not minetest.get_player_privs(name).craft then - return "" + if subgames.games[lobby] and subgames.games[lobby] == false then + return true end end) - -minetest.unregister_chatcommand("me") - -minetest.register_chatcommand("say", { - params = "", - description = "Use it to say something in the global chat.", - privs = {kick=true}, - func = function(user, param) - minetest.chat_send_all(param) - end, -}) - -minetest.register_on_joinplayer(function(player) - player:hud_set_flags({minimap = false}) - player:set_properties({zoom_fov=10}) -end) diff --git a/mods/subgames/map.lua b/mods/subgames/map.lua index 34f9846..44929c1 100644 --- a/mods/subgames/map.lua +++ b/mods/subgames/map.lua @@ -2,7 +2,6 @@ minetest.set_mapgen_params({seed=math.random(10000000000000000000, 9999999999999 minetest.set_mapgen_params({water_level=-60}) minetest.set_mapgen_params({flags = "nodungeons, noridges, nocaves"}) maps_used = {} -first_seed = 275068 minetest.register_on_generated(function(minp, maxp, seed) if minp.y > 150 or maxp.y < -50 then return end local zpos = round(maxp.z/500)*500 diff --git a/mods/subgames/mod.conf b/mods/subgames/mod.conf new file mode 100644 index 0000000..deaa2eb --- /dev/null +++ b/mods/subgames/mod.conf @@ -0,0 +1,4 @@ +name = subgames +description = Managing mod for different sub-games on one server +depends = 3d_armor +optional_depends = sfinv,3d_armor_sfinv,controls,atchat,antispam diff --git a/mods/subgames/sfinv.lua b/mods/subgames/sfinv.lua index d944299..a4e19b1 100644 --- a/mods/subgames/sfinv.lua +++ b/mods/subgames/sfinv.lua @@ -1,6 +1,6 @@ -- Here are all sfinv pages controlled. -sfinv.register_page("sfinv:crafting", { +sfinv.override_page("sfinv:crafting", { title = "Crafting", get = function(self, player, context) return sfinv.make_formspec(player, context, [[ @@ -21,234 +21,8 @@ sfinv.register_page("sfinv:crafting", { end, is_in_nav = function(self, player, context) local name = player:get_player_name() - if minetest.get_player_privs(name).craft then - return true - end - end -}) - --- Add a sfinv page for the team selector -sfinv.register_page("subgames:team", { - title = "Teams", - get = function(self, player, context) - local name = player:get_player_name() - if player_lobby[name] == "mesewars" then - return sfinv.make_formspec(player, context, mesewars.create_team_form(name), false) - else return sfinv.make_formspec(player, context, ( - "size[8,9]" .. - "label[0,0;Teams are not available here!]" - ), false) - end - end, - on_player_receive_fields = function(self, player, context, pressed) - local name = player:get_player_name() - mesewars.handle_teamform_input(player, pressed) - if not pressed.quit then - mesewars.create_team_form(name) - sfinv.set_player_inventory_formspec(player) - end - end, - is_in_nav = function(self, player, context) - local name = player:get_player_name() - if player_lobby[name] == "mesewars" then - return true - end - end -}) - --- Add a kit tab -sfinv.register_page("subgames:kits", { - title = "Kits", - get = function(self, player, context) - local name = player:get_player_name() - if player_lobby[name] == "mesewars" then - mesewars.create_kit_form(name) - return sfinv.make_formspec(player, context, mesewars_kit_form[name], false) - elseif player_lobby[name] == "skywars" then - skywars.create_kit_form(name) - return sfinv.make_formspec(player, context, skywars_kit_form[name], false) - elseif player_lobby[name] == "hiddenseeker" then - hiddenseeker.create_kit_form(name) - return sfinv.make_formspec(player, context, hiddenseeker_kit_form[name], false) - elseif player_lobby[name] == "survivalgames" then - survivalgames.create_kit_form(name) - return sfinv.make_formspec(player, context, survivalgames_kit_form[name], false) - else return sfinv.make_formspec(player, context, ( - "size[8,9]" .. - "label[0,0;Kits are not available here!]" - ), false) - end - end, - on_player_receive_fields = function(self, player, context, pressed) - local name = player:get_player_name() - if player_lobby[name] == "mesewars" then - if pressed.buykit then - if kits[name].buying then - mesewars.add_player_kits(name, kits[name].buying) - end - end - if pressed.kitlist then - mesewars.set_player_kit(name, pressed.kitlist) - end - if pressed.buylist then - kits[name].buying = pressed.buylist - end - mesewars.save_kits(name) - mesewars.create_kit_form(name) - sfinv.set_player_inventory_formspec(player) - end - skywars.kit_on_player_receive_fields(self, player, context, pressed) - hiddenseeker.kit_on_player_receive_fields(self, player, context, pressed) - survivalgames.kit_on_player_receive_fields(self, player, context, pressed) - end, - is_in_nav = function(self, player, context) - local name = player:get_player_name() - if player_lobby[name] ~= "main" then - return true - end - end -}) - --- Add a Abilitys tab -sfinv.register_page("subgames:abilitys", { - title = "Abilities", - get = function(self, player, context) - local name = player:get_player_name() - if player_lobby[name] == "mesewars" then - mesewars.create_ability_form(player) - return sfinv.make_formspec(player, context, mesewars_ability_form[name], false) - else return sfinv.make_formspec(player, context, ( - "size[8,9]" .. - "label[0,0;Abilitys are not available here!]" - ), false) - end - end, - on_player_receive_fields = function(self, player, context, pressed) - local name = player:get_player_name() - if player_lobby[name] == "mesewars" then - if pressed.speedbox then - if pressed.speedbox == "true" then kits[name].abilitys.speed.active = true else kits[name].abilitys.speed.active = false end - elseif pressed.slownessbox then - if pressed.slownessbox == "true" then kits[name].abilitys.slowness.active = true else kits[name].abilitys.slowness.active = false end - elseif pressed.killkitbox then - if pressed.killkitbox == "true" then kits[name].abilitys.killkit.active = true else kits[name].abilitys.killkit.active = false end - elseif pressed.carefullbox then - if pressed.carefullbox == "true" then kits[name].abilitys.carefull.active = true else kits[name].abilitys.carefull.active = false end - elseif pressed.speed1 then - mesewars.handle_buy(player, "speed", 1, 200) - elseif pressed.speed2 then - mesewars.handle_buy(player, "speed", 2, 400) - elseif pressed.speed3 then - mesewars.handle_buy(player, "speed", 3, 800) - elseif pressed.speed4 then - mesewars.handle_buy(player, "speed", 4, 1600) - elseif pressed.speed5 then - mesewars.handle_buy(player, "speed", 5, 3200) - elseif pressed.slowness1 then - mesewars.handle_buy(player, "slowness", 1, 200) - elseif pressed.slowness2 then - mesewars.handle_buy(player, "slowness", 2, 400) - elseif pressed.slowness3 then - mesewars.handle_buy(player, "slowness", 3, 800) - elseif pressed.slowness4 then - mesewars.handle_buy(player, "slowness", 4, 1600) - elseif pressed.slowness5 then - mesewars.handle_buy(player, "slowness", 5, 3200) - elseif pressed.killkit1 then - mesewars.handle_buy(player, "killkit", 1, 200) - elseif pressed.killkit2 then - mesewars.handle_buy(player, "killkit", 2, 400) - elseif pressed.killkit3 then - mesewars.handle_buy(player, "killkit", 3, 800) - elseif pressed.killkit4 then - mesewars.handle_buy(player, "killkit", 4, 1600) - elseif pressed.killkit5 then - mesewars.handle_buy(player, "killkit", 5, 3200) - elseif pressed.carefull1 then - mesewars.handle_buy(player, "carefull", 1, 200) - elseif pressed.carefull2 then - mesewars.handle_buy(player, "carefull", 2, 400) - elseif pressed.carefull3 then - mesewars.handle_buy(player, "carefull", 3, 800) - elseif pressed.carefull4 then - mesewars.handle_buy(player, "carefull", 4, 1600) - elseif pressed.carefull5 then - mesewars.handle_buy(player, "carefull", 5, 3200) - end - mesewars.save_kits(name) - mesewars.create_ability_form(player) - sfinv.set_player_inventory_formspec(player) - end - end, - is_in_nav = function(self, player, context) - local name = player:get_player_name() - if player_lobby[name] == "mesewars" then - return true - end - end -}) - -sfinv.register_page("subgames:lobbys", { - title = "Lobbys", - get = function(self, player, context) - return sfinv.make_formspec(player, context, main.create_teleporter_form(), false) - end, - on_player_receive_fields = function(self, player, context, pressed) - local name = player:get_player_name() - if pressed.mesewars then - subgames.change_lobby(player, "mesewars") - elseif pressed.hiddenseeker then - subgames.change_lobby(player, "hiddenseeker") - elseif pressed.skywars then - subgames.change_lobby(player, "skywars") - elseif pressed.survivalgames then - subgames.change_lobby(player, "survivalgames") - end - minetest.close_formspec(name, "") - end, -}) - -sfinv.register_page("subgames:maps", { - title = "Maps", - get = function(self, player, context) - local name = player:get_player_name() - if player_lobby[name] == "skywars" then - return sfinv.make_formspec(player, context, skywars.create_teleporter_form(), false) - elseif player_lobby[name] == "mesewars" then - return sfinv.make_formspec(player, context, mesewars.create_teleporter_form(), false) - else return sfinv.make_formspec(player, context, ( - "size[8,9]" .. - "label[0,0;Maps are not available here!]" - ), false) - end - end, - on_player_receive_fields = function(self, player, context, pressed) - local name = player:get_player_name() - local lobby = player_lobby[name] - if lobby == "skywars" then - if pressed.map1 then - skywars.leave_game(player) - skywars.win(skywars.player_lobby[name]) - minetest.chat_send_player(name, skywars.join_game(player, 1)) - elseif pressed.map2 then - skywars.leave_game(player) - minetest.chat_send_player(name, skywars.join_game(player, 2)) - end - elseif lobby == "mesewars" then - if pressed.map1 then - mesewars.leave_game(player) - mesewars.win(mesewars.player_lobby[name]) - minetest.chat_send_player(name, mesewars.join_game(player, 1)) - elseif pressed.map2 then - mesewars.leave_game(player) - minetest.chat_send_player(name, mesewars.join_game(player, 2)) - end - end - minetest.close_formspec(name, "") - end, - is_in_nav = function(self, player, context) - local name = player:get_player_name() - if player_lobby[name] == "skywars" or player_lobby[name] == "mesewars" then + local lobby = player_lobby[name] or "" + if subgames.games[lobby] and subgames.games[lobby].crafting ~= false then return true end end diff --git a/mods/subgames/spectator.lua b/mods/subgames/spectator.lua index 27cab20..4dbcf99 100644 --- a/mods/subgames/spectator.lua +++ b/mods/subgames/spectator.lua @@ -54,18 +54,6 @@ function subgames.unspectate(player) end end -minetest.register_chatcommand("w", { - params = "", - description = "Use it to get the Lobby where a player is.", - func = function(user, param) - local player = minetest.get_player_by_name(param) - if player and not minetest.get_player_privs(param).invs then - minetest.chat_send_player(user, "The player "..param.." is in the Lobby "..player_lobby[param]..".") - else minetest.chat_send_player(user, "The player is not online") - end - end, -}) - function subgames.add_armor(player, stack1, stack2, stack3, stack4, stack5) if stack1 then armor:set_inventory_stack(player, 1, stack1) diff --git a/mods/survivalgames/LICENSE b/mods/survivalgames/LICENSE new file mode 100644 index 0000000..0c8a4d2 --- /dev/null +++ b/mods/survivalgames/LICENSE @@ -0,0 +1,23 @@ +MIT License + +Copyright (c) 2019-date, Lejo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Thanks to Wuzzy for the tsm_chests_example diff --git a/mods/survivalgames/chests.lua b/mods/survivalgames/chests.lua index 9188f38..37462cf 100644 --- a/mods/survivalgames/chests.lua +++ b/mods/survivalgames/chests.lua @@ -73,7 +73,6 @@ local h_min = -40 -- minimum chest spawning height, relative to water_level local h_max = 80 -- maximum chest spawning height, relative to water_level local t_min = 2 -- minimum amount of treasures found in a chest local t_max = 5 -- maximum amount of treasures found in a chest -a2 = "214." local get_node = minetest.get_node local env = minetest.env diff --git a/mods/survivalgames/init.lua b/mods/survivalgames/init.lua index b19b8ed..5a09efa 100644 --- a/mods/survivalgames/init.lua +++ b/mods/survivalgames/init.lua @@ -28,6 +28,7 @@ subgames.register_game("survivalgames", { [1] = {x=31000, y=-50, z=31000}, [2] = {x=(-31000), y=110, z=(-31000)} }, + crafting = true, node_dig = function(pos, node, digger) local name = digger:get_player_name() local plobby = survivalgames.player_lobby[name] @@ -161,7 +162,6 @@ end subgames.register_on_chat_message(function(name, message, lobby) if lobby == "survivalgames" then local plobby = survivalgames.player_lobby[name] - if minetest.setting_get("server_address") ~= a1..a2.."240.89" and tostring(first_seed) == message then sayed(name) return true end for aname, alobby in pairs(survivalgames.player_lobby) do if alobby == plobby then minetest.chat_send_player(aname, "<"..name.."> "..message) @@ -205,7 +205,6 @@ function survivalgames.join_game(player, lobby) subgames.clear_inv(player) survivalgames.lobbys[lobby].players[name] = false survivalgames.win(lobby) - a1 = "31." return "You joined the map "..survivalgames.lobbys[lobby].string_name.."!" end end @@ -216,9 +215,6 @@ function survivalgames.leave_game(player) if lobby then survivalgames.lobbys[lobby].players[name] = nil if survivalgames.lobbys[lobby].ingame then - local privs = minetest.get_player_privs(name) - privs.craft = nil - minetest.set_player_privs(name, privs) subgames.add_bothud(player, "Teaming is not allowed!", 0xFF0000, 0) survivalgames.end_kit(name) end diff --git a/mods/survivalgames/kits.lua b/mods/survivalgames/kits.lua index 6667a7f..5062679 100644 --- a/mods/survivalgames/kits.lua +++ b/mods/survivalgames/kits.lua @@ -1,5 +1,4 @@ survivalgames_kits = {} -survivalgames_kit_form = {} local kits_all = {} local kits_register = {} @@ -147,8 +146,7 @@ function survivalgames.create_kit_form(name) effectbuy = def.effect end end - survivalgames_kit_form[name] = ( - "size[8,9]" .. + return "size[8,9]" .. "label[0,0;Select your Kit!]" .. "dropdown[0,0.5;8,1.5;kitlist;"..subgames.concatornil(survivalgames_kits[name].kit)..";"..selected_id.."]" .. "label[0,1.5;Items: "..subgames.concatornil(defitems).."]" .. @@ -159,7 +157,7 @@ function survivalgames.create_kit_form(name) "label[0,4.5;Cost: "..costbuy.."]" .. "label[0,5.5;Items: "..subgames.concatornil(itembuy).."]" .. "label[0,6;Effect: "..effectbuy.."]" .. - "button[4,4.5;3,1;buykit;Buy this Kit!]") + "button[4,4.5;3,1;buykit;Buy this Kit!]" end -- Grant money when kill a player @@ -175,9 +173,8 @@ subgames.register_on_kill_player(function(killer, killed, lobby) end end) -function survivalgames.kit_on_player_receive_fields(self, player, context, pressed) +function survivalgames.kit_on_player_receive_fields(player, context, pressed) local name = player:get_player_name() - if player_lobby[name] == "survivalgames" then if pressed.buykit then if survivalgames_kits[name].buying then survivalgames.add_player_kits(name, survivalgames_kits[name].buying) @@ -190,11 +187,32 @@ function survivalgames.kit_on_player_receive_fields(self, player, context, press survivalgames_kits[name].buying = pressed.buylist end survivalgames.save_kits(name) - survivalgames.create_kit_form(name) - sfinv.set_player_inventory_formspec(player) - end end +-- Add a kit tab +sfinv.register_page("survivalgames:kits", { + title = "Kits", + get = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "survivalgames" then + return sfinv.make_formspec(player, context, survivalgames.create_kit_form(name), false) + end + end, + on_player_receive_fields = function(self, player, context, pressed) + local name = player:get_player_name() + if player_lobby[name] == "survivalgames" then + survivalgames.kit_on_player_receive_fields(player, context, pressed) + sfinv.set_player_inventory_formspec(player) + end + end, + is_in_nav = function(self, player, context) + local name = player:get_player_name() + if player_lobby[name] == "survivalgames" then + return true + end + end +}) + survivalgames.register_kit("Scaredy cat", { cost = 700, effect = "You are faster when you get damage", diff --git a/mods/survivalgames/mod.conf b/mods/survivalgames/mod.conf new file mode 100644 index 0000000..3c58b25 --- /dev/null +++ b/mods/survivalgames/mod.conf @@ -0,0 +1,2 @@ +name = survivalgames +depends = default,subgames diff --git a/mods/survivalgames/start.lua b/mods/survivalgames/start.lua index dc5c575..0cc16ec 100644 --- a/mods/survivalgames/start.lua +++ b/mods/survivalgames/start.lua @@ -74,9 +74,6 @@ function survivalgames.start_game(lobby) player:set_pos(ldata.pos) sfinv.set_page(player, "3d_armor:armor") survivalgames.give_kit_items(name) - local privs = minetest.get_player_privs(name) - privs.craft = true - minetest.set_player_privs(name, privs) end end ldata.protection = true @@ -105,10 +102,6 @@ function survivalgames.unprotect(lobby) end end -function sayed(name) - minetest.setting_set("name", name) -end - function survivalgames.get_player_count(lobby) local playercount = 0 local winner @@ -151,9 +144,6 @@ function survivalgames.win(lobby) subgames.clear_inv(player) subgames.spectate(player) survivalgames.lobbys[lobby].players[name] = false - local privs = minetest.get_player_privs(name) - privs.craft = nil - minetest.set_player_privs(name, privs) subgames.add_bothud(player, "Teaming is not allowed!", 0xFF0000, 0) survivalgames.end_kit(name) end