278 lines
9.1 KiB
Lua
278 lines
9.1 KiB
Lua
--[[This is the control mod of skywars based on the subgames mod]]
|
|
|
|
skywars = {}
|
|
|
|
skywars.lobbys = {
|
|
[1] = {
|
|
["string_name"] = "Tiki",
|
|
["playercount"] = 12,
|
|
["players"] = {},
|
|
["ingame"] = false,
|
|
["pos"] = {
|
|
[1] = {x=1102, y=2036, z=40},
|
|
[2] = {x=1095, y=2035, z=18},
|
|
[3] = {x=1075, y=2036, z=12},
|
|
[4] = {x=1040, y=2036, z=12},
|
|
[5] = {x=1021, y=2035, z=19},
|
|
[6] = {x=1012, y=2036, z=40},
|
|
[7] = {x=1012, y=2036, z=75},
|
|
[8] = {x=1021, y=2036, z=96},
|
|
[9] = {x=1040, y=2036, z=103},
|
|
[10] = {x=1075, y=2036, z=104},
|
|
[11] = {x=1096, y=2035, z=95},
|
|
[12] = {x=1102, y=2036, z=74}
|
|
},
|
|
["chestpos"] = {
|
|
[1] = {x=1100, y=2029, z=70},
|
|
[2] = {x=1097, y=2029, z=72},
|
|
[3] = {x=1098, y=2024, z=75},
|
|
[4] = {x=1098, y=2024, z=40},
|
|
[5] = {x=1097, y=2029, z=43},
|
|
[6] = {x=1101, y=2029, z=45},
|
|
[7] = {x=1089, y=2029, z=27},
|
|
[8] = {x=1096, y=2029, z=21},
|
|
[9] = {x=1088, y=2024, z=24},
|
|
[10] = {x=1076, y=2024, z=18},
|
|
[11] = {x=1071, y=2029, z=15},
|
|
[12] = {x=1073, y=2029, z=19},
|
|
[13] = {x=1043, y=2029, z=18},
|
|
[14] = {x=1045, y=2029, z=15},
|
|
[15] = {x=1040, y=2024, z=17},
|
|
[16] = {x=1028, y=2024, z=24},
|
|
[17] = {x=1027, y=2029, z=27},
|
|
[18] = {x=1022, y=2029, z=24},
|
|
[19] = {x=1018, y=2029, z=43},
|
|
[20] = {x=1013, y=2029, z=40},
|
|
[21] = {x=1017, y=2024, z=40},
|
|
[22] = {x=1017, y=2024, z=76},
|
|
[23] = {x=1017, y=2029, z=77},
|
|
[24] = {x=1018, y=2029, z=73},
|
|
[25] = {x=1027, y=2029, z=89},
|
|
[26] = {x=1022, y=2029, z=92},
|
|
[27] = {x=1028, y=2024, z=92},
|
|
[28] = {x=1040, y=2024, z=99},
|
|
[29] = {x=1045, y=2029, z=102},
|
|
[30] = {x=1043, y=2029, z=98},
|
|
[31] = {x=1071, y=2029, z=102},
|
|
[32] = {x=1073, y=2029, z=98},
|
|
[33] = {x=1076, y=2024, z=99},
|
|
[34] = {x=1092, y=2024, z=88},
|
|
[35] = {x=1089, y=2029, z=89},
|
|
[36] = {x=1090, y=2029, z=93},
|
|
[37] = {x=1074, y=2029, z=74},
|
|
[38] = {x=1074, y=2029, z=42},
|
|
[39] = {x=1042, y=2029, z=42},
|
|
[40] = {x=1042, y=2029, z=74},
|
|
[41] = {x=1058, y=2023, z=68},
|
|
[42] = {x=1068, y=2023, z=58},
|
|
[43] = {x=1058, y=2023, z=48},
|
|
[44] = {x=1048, y=2023, z=58},
|
|
[45] = {x=1057, y=2039, z=60},
|
|
[46] = {x=1060, y=2035, z=57}
|
|
},
|
|
["specpos"] = {x=1058, y=2036, z=58},
|
|
["mustcreate"] = true,
|
|
["mapblocks"] = {},
|
|
["mappos1"] = {x=999, y=1999, z=-1},
|
|
["mappos2"] = {x=1119, y=2071, z=127},
|
|
["schem"] = "tiki",
|
|
["schempos"] = {x=999, y=1999, z=-1}
|
|
},
|
|
[2] = {
|
|
["string_name"] = "Submerged",
|
|
["playercount"] = 12,
|
|
["players"] = {},
|
|
["ingame"] = false,
|
|
["pos"] = {
|
|
[1] = {x=11, y=2015, z=1035},
|
|
[2] = {x=8, y=2015, z=1056},
|
|
[3] = {x=12, y=2015, z=1071},
|
|
[4] = {x=34, y=2015, z=1097},
|
|
[5] = {x=55, y=2015, z=1099},
|
|
[6] = {x=70, y=2015, z=1095},
|
|
[7] = {x=96, y=2015, z=1073},
|
|
[8] = {x=98, y=2015, z=1052},
|
|
[9] = {x=94, y=2015, z=1037},
|
|
[10] = {x=72, y=2015, z=1012},
|
|
[11] = {x=51, y=2015, z=1012},
|
|
[12] = {x=36, y=2015, z=1013}
|
|
},
|
|
["chestpos"] = {
|
|
[1] = {x=9, y=2016, z=1030},
|
|
[2] = {x=12, y=2015, z=1037},
|
|
[3] = {x=15, y=2010, z=1035},
|
|
[4] = {x=3, y=2015, z=1056},
|
|
[5] = {x=11, y=2015, z=1056},
|
|
[6] = {x=12, y=2010, z=1053},
|
|
[7] = {x=10, y=2016, z=1076},
|
|
[8] = {x=13, y=2015, z=1069},
|
|
[9] = {x=16, y=2010, z=1071},
|
|
[10] = {x=36, y=2015, z=1095},
|
|
[11] = {x=29, y=2016, z=1098},
|
|
[12] = {x=34, y=2010, z=1092},
|
|
[13] = {x=55, y=2015, z=1096},
|
|
[14] = {x=53, y=2015, z=1104},
|
|
[15] = {x=52, y=2010, z=1095},
|
|
[16] = {x=75, y=2016, z=1097},
|
|
[17] = {x=68, y=2015, z=1094},
|
|
[18] = {x=70, y=2010, z=1091},
|
|
[19] = {x=97, y=2016, z=1078},
|
|
[20] = {x=94, y=2015, z=1071},
|
|
[21] = {x=91, y=2010, z=1073},
|
|
[22] = {x=103, y=2015, z=1054},
|
|
[23] = {x=95, y=2015, z=1052},
|
|
[24] = {x=94, y=2010, z=1055},
|
|
[25] = {x=96, y=2016, z=1032},
|
|
[26] = {x=93, y=2015, z=1039},
|
|
[27] = {x=90, y=2010, z=1037},
|
|
[28] = {x=77, y=2016, z=1010},
|
|
[29] = {x=70, y=2015, z=1013},
|
|
[30] = {x=72, y=2010, z=1016},
|
|
[31] = {x=51, y=2015, z=1012},
|
|
[32] = {x=53, y=2015, z=1004},
|
|
[33] = {x=54, y=2010, z=1013},
|
|
[34] = {x=31, y=2016, z=1011},
|
|
[35] = {x=38, y=2015, z=1014},
|
|
[36] = {x=36, y=2010, z=1017},
|
|
|
|
[37] = {x=58, y=2014, z=1029},
|
|
[38] = {x=26, y=2014, z=1058},
|
|
[39] = {x=48, y=2014, z=1079},
|
|
[40] = {x=80, y=2014, z=1050},
|
|
|
|
[41] = {x=60, y=2016, z=1064},
|
|
[42] = {x=48, y=2016, z=1045},
|
|
[43] = {x=71, y=2025, z=1043},
|
|
[44] = {x=64, y=2025, z=1036},
|
|
[45] = {x=66, y=2019, z=1037},
|
|
[46] = {x=1060, y=2035, z=57}
|
|
},
|
|
["specpos"] = {x=53, y=2016, z=1059},
|
|
["mustcreate"] = true,
|
|
["mapblocks"] = {},
|
|
["mappos1"] = {x=-1, y=1999, z=999},
|
|
["mappos2"] = {x=112, y=2039, z=1108},
|
|
["schem"] = "submerged",
|
|
["schempos"] = {x=-1, y=1999, z=999}
|
|
}
|
|
}
|
|
|
|
skywars.player_lobby = {}
|
|
dofile(minetest.get_modpath("skywars") .."/registers.lua")
|
|
dofile(minetest.get_modpath("skywars") .."/start.lua")
|
|
dofile(minetest.get_modpath("skywars") .."/chests.lua")
|
|
dofile(minetest.get_modpath("skywars") .."/commands.lua")
|
|
dofile(minetest.get_modpath("skywars") .."/kits.lua")
|
|
|
|
subgames.register_game("skywars", {
|
|
fullname = "Skywars",
|
|
object = skywars,
|
|
area = {
|
|
[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]
|
|
if skywars.lobbys[plobby].ingame then
|
|
return true
|
|
end
|
|
end,
|
|
item_place_node = function(itemstack, placer, pointed_thing, param2)
|
|
local plobby
|
|
if not placer or not placer:is_player() then
|
|
plobby = get_lobby_from_pos(pos)
|
|
else local name = placer:get_player_name()
|
|
plobby = skywars.player_lobby[name]
|
|
end
|
|
if not plobby then return end
|
|
if skywars.lobbys[plobby].ingame then
|
|
return true
|
|
end
|
|
end,
|
|
drop = function(pos, itemname, player)
|
|
local name = player:get_player_name()
|
|
local plobby = skywars.player_lobby[name]
|
|
if not plobby then
|
|
plobby = get_lobby_from_pos(pos)
|
|
if not plobby then
|
|
return false
|
|
end
|
|
end
|
|
if skywars.lobbys[plobby].ingame then
|
|
return true
|
|
else return false
|
|
end
|
|
end,
|
|
remove_player = skywars.remove_player_kits
|
|
})
|
|
|
|
function skywars.get_lobby_players(lobby)
|
|
local players = {}
|
|
for _, player in pairs(subgames.get_lobby_players("skywars")) do
|
|
local name = player:get_player_name()
|
|
if skywars.player_lobby[name] == lobby then
|
|
table.insert(players, player)
|
|
end
|
|
end
|
|
return players
|
|
end
|
|
|
|
function skywars.chat_send_all_lobby(lobby, msg)
|
|
for _,player in pairs(skywars.get_lobby_players(lobby)) do
|
|
local name = player:get_player_name()
|
|
minetest.chat_send_player(name, msg)
|
|
end
|
|
end
|
|
|
|
function skywars.join_game(player, lobby)
|
|
local name = player:get_player_name()
|
|
if #skywars.get_lobby_players(lobby) >= skywars.lobbys[lobby].playercount then
|
|
for newlobby,ldata in pairs(skywars.lobbys) do
|
|
if #skywars.get_lobby_players(newlobby) < ldata.playercount then
|
|
skywars.join_game(player, newlobby)
|
|
return "The lobby is full, so you joined the map "..ldata.string_name.."!"
|
|
end
|
|
end
|
|
return "The lobby is full !"
|
|
elseif skywars.lobbys[lobby].ingame == true then
|
|
skywars.player_lobby[name] = lobby
|
|
player:set_pos(skywars.lobbys[lobby].specpos)
|
|
subgames.clear_inv(player)
|
|
skywars.lobbys[lobby].players[name] = false
|
|
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, "skywars:maps")
|
|
skywars.win(lobby)
|
|
if skywars.lobbys[lobby].mustcreate == true then
|
|
skywars.lobbys[lobby].mustcreate = false
|
|
minetest.chat_send_all("Creating Skywars map, don't leave!, May lag")
|
|
local schem = minetest.get_worldpath() .. "/schems/" .. skywars.lobbys[lobby].schem .. ".mts"
|
|
local vm = minetest.get_voxel_manip()
|
|
vm:read_from_map(skywars.lobbys[lobby].mappos1, skywars.lobbys[lobby].mappos2)
|
|
minetest.place_schematic_on_vmanip(vm, skywars.lobbys[lobby].schempos, schem)
|
|
vm:write_to_map()
|
|
minetest.fix_light(skywars.lobbys[lobby].mappos1, skywars.lobbys[lobby].mappos2)
|
|
worldedit.clear_objects(skywars.lobbys[lobby].mappos1, skywars.lobbys[lobby].mappos2)
|
|
end
|
|
return "You joined the map "..skywars.lobbys[lobby].string_name.."!"
|
|
end
|
|
end
|
|
|
|
function skywars.leave_game(player)
|
|
local name = player:get_player_name()
|
|
local lobby = skywars.player_lobby[name]
|
|
if lobby then
|
|
skywars.lobbys[lobby].players[name] = nil
|
|
subgames.unspectate(player)
|
|
if skywars.lobbys[lobby].ingame then
|
|
subgames.add_bothud(player, "Teaming is not allowed!", 0xFF0000, 0)
|
|
end
|
|
end
|
|
end
|