Add subgames.register_game function
parent
d563cd7b4e
commit
e16b448e3a
|
@ -39,6 +39,14 @@ minetest.register_chatcommand("build", {
|
|||
end,
|
||||
})
|
||||
|
||||
subgames.register_game("build", {
|
||||
fullname = "Build",
|
||||
area = {
|
||||
[1] = {x=0, y=(-10000), z=0},
|
||||
[2] = {x=0, y=(-10000), z=0}
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_privilege("invs", "Allows you to be fully invisible!")
|
||||
|
||||
function core.send_join_message(name)
|
||||
|
|
|
@ -6,6 +6,22 @@ dofile(minetest.get_modpath("hiddenseeker") .."/kits.lua")
|
|||
dofile(minetest.get_modpath("hiddenseeker") .."/ingame.lua")
|
||||
dofile(minetest.get_modpath("hiddenseeker") .."/commands.lua")
|
||||
|
||||
subgames.register_game("hiddenseeker", {
|
||||
fullname = "Hide and Seek",
|
||||
object = hiddenseeker,
|
||||
area = {
|
||||
[1] = {x=0, y=(-10000), z=0},
|
||||
[2] = {x=0, y=(-10000), z=0}
|
||||
},
|
||||
node_dig = function(pos, node, digger)
|
||||
return false
|
||||
end,
|
||||
item_place_node = function(itemstack, placer, pointed_thing, param2)
|
||||
return false
|
||||
end,
|
||||
remove_player = hiddenseeker.remove_player_kits
|
||||
})
|
||||
|
||||
hiddenseeker.lobbys = {
|
||||
[1] = {
|
||||
["string_name"] = "Hide and Seek Karsthafen",
|
||||
|
@ -106,14 +122,6 @@ subgames.register_on_leaveplayer(function(player, lobby)
|
|||
end
|
||||
end)
|
||||
|
||||
function areas.hiddenseeker.dig(pos, node, digger)
|
||||
return false
|
||||
end
|
||||
|
||||
function areas.hiddenseeker.place(itemstack, placer, pointed_thing, param2)
|
||||
return false
|
||||
end
|
||||
|
||||
subgames.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage, lobby)
|
||||
if lobby == "hiddenseeker" and player and hitter then
|
||||
if damage == 0 then
|
||||
|
|
|
@ -12,6 +12,21 @@ minetest.register_tool("main:teleporter", {
|
|||
end,
|
||||
})
|
||||
|
||||
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]" ..
|
||||
|
@ -95,14 +110,6 @@ subgames.register_on_leaveplayer(function(player, lobby)
|
|||
end
|
||||
end)
|
||||
|
||||
function areas.main.dig(pos, node, digger)
|
||||
return false
|
||||
end
|
||||
|
||||
function areas.main.place(itemstack, placer, pointed_thing, param2)
|
||||
return false
|
||||
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)
|
||||
|
|
|
@ -129,6 +129,50 @@ dofile(minetest.get_modpath("mesewars") .."/spawner.lua")
|
|||
dofile(minetest.get_modpath("mesewars") .."/commands.lua")
|
||||
dofile(minetest.get_modpath("mesewars") .."/kits.lua")
|
||||
|
||||
subgames.register_game("mesewars", {
|
||||
fullname = "Mesewars",
|
||||
object = mesewars,
|
||||
area = {
|
||||
[1] = {x=(-700), y=1000, z=-700},
|
||||
[2] = {x=75, y=1302, z=(-17)}
|
||||
},
|
||||
node_dig = function(pos, node, digger)
|
||||
local name = digger:get_player_name()
|
||||
local plobby = mesewars.player_lobby[name]
|
||||
local nodename = node.name
|
||||
if mesewars.lobbys[plobby].ingame and (mesewars.lobbys[plobby].mapblocks[minetest.pos_to_string(pos)] and (nodename == "default:sandstone" or nodename == "default:obsidian" or nodename == "default:glass" or nodename == "default:steelblock" or nodename == "default:chest")) or string.find(nodename, "mesewars:mese") 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 = mesewars.player_lobby[name]
|
||||
end
|
||||
if not plobby then return end
|
||||
if mesewars.lobbys[plobby].ingame then
|
||||
return true
|
||||
end
|
||||
end,
|
||||
drop = function(pos, itemname, player)
|
||||
local name = player:get_player_name()
|
||||
local plobby = mesewars.player_lobby[name]
|
||||
if not plobby then
|
||||
plobby = get_lobby_from_pos(pos)
|
||||
if not plobby then
|
||||
return false
|
||||
end
|
||||
end
|
||||
if mesewars.lobbys[plobby].ingame and itemname == "default:sandstone" or itemname == "default:obsidian" or itemname == "default:glass" or itemname == "default:steelblock" or itemname == "default:chest" then
|
||||
return true
|
||||
else return false
|
||||
end
|
||||
end,
|
||||
remove_player = mesewars.remove_player_kits
|
||||
})
|
||||
|
||||
function mesewars.get_lobby_players(lobby)
|
||||
local players = {}
|
||||
for _, player in pairs(subgames.get_lobby_players("mesewars")) do
|
||||
|
|
|
@ -62,49 +62,12 @@ subgames.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack
|
|||
end
|
||||
end)
|
||||
|
||||
function areas.mesewars.dig(pos, node, digger)
|
||||
local name = digger:get_player_name()
|
||||
local plobby = mesewars.player_lobby[name]
|
||||
local nodename = node.name
|
||||
if mesewars.lobbys[plobby].ingame and (mesewars.lobbys[plobby].mapblocks[minetest.pos_to_string(pos)] and (nodename == "default:sandstone" or nodename == "default:obsidian" or nodename == "default:glass" or nodename == "default:steelblock" or nodename == "default:chest")) or string.find(nodename, "mesewars:mese") then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function areas.mesewars.place(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 = mesewars.player_lobby[name]
|
||||
end
|
||||
if not plobby then return end
|
||||
if mesewars.lobbys[plobby].ingame then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
subgames.register_on_drop(function(itemstack, dropper, pos, lobby)
|
||||
if lobby == "mesewars" then
|
||||
return false
|
||||
end
|
||||
end)
|
||||
|
||||
function areas.mesewars.drop(pos, itemname, player)
|
||||
local name = player:get_player_name()
|
||||
local plobby = mesewars.player_lobby[name]
|
||||
if not plobby then
|
||||
plobby = get_lobby_from_pos(pos)
|
||||
if not plobby then
|
||||
return false
|
||||
end
|
||||
end
|
||||
if mesewars.lobbys[plobby].ingame and itemname == "default:sandstone" or itemname == "default:obsidian" or itemname == "default:glass" or itemname == "default:steelblock" or itemname == "default:chest" then
|
||||
return true
|
||||
else return false
|
||||
end
|
||||
end
|
||||
|
||||
function mesewars.get_team_base(name)
|
||||
local lobby = mesewars.player_lobby[name]
|
||||
if lobby and mesewars.lobbys[lobby] and mesewars.lobbys[lobby].players[name] and mesewars.lobbys[lobby].pos[mesewars.lobbys[lobby].players[name]] then
|
||||
|
|
|
@ -164,6 +164,49 @@ 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)}
|
||||
},
|
||||
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
|
||||
|
|
|
@ -74,27 +74,6 @@ subgames.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack
|
|||
end
|
||||
end)
|
||||
|
||||
function areas.skywars.dig(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
|
||||
|
||||
function areas.skywars.place(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
|
||||
|
||||
subgames.register_on_drop(function(itemstack, dropper, pos, lobby)
|
||||
if lobby == "skywars" then
|
||||
local name = dropper:get_player_name()
|
||||
|
@ -105,21 +84,6 @@ subgames.register_on_drop(function(itemstack, dropper, pos, lobby)
|
|||
end
|
||||
end)
|
||||
|
||||
function areas.skywars.drop(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
|
||||
|
||||
subgames.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage, lobby)
|
||||
if lobby == "skywars" and player and hitter then
|
||||
if damage == 0 then
|
||||
|
|
|
@ -13,6 +13,7 @@ function table.contains(table, element)
|
|||
else return false
|
||||
end
|
||||
end
|
||||
|
||||
function subgames.concatornil(toconcat)
|
||||
if type(toconcat) == "table" then
|
||||
return table.concat(toconcat, ",")
|
||||
|
@ -21,6 +22,7 @@ function subgames.concatornil(toconcat)
|
|||
else return toconcat
|
||||
end
|
||||
end
|
||||
|
||||
function round(num, numDecimalPlaces)
|
||||
local mult = 10^(numDecimalPlaces or 0)
|
||||
return math.floor(num * mult + 0.5) / mult
|
||||
|
@ -48,29 +50,13 @@ function is_inside_area(pos1, pos2, mainpos)
|
|||
end
|
||||
|
||||
function subgames.get_lobby_from_pos(pos)
|
||||
for lname in pairs(areas) do
|
||||
if is_inside_area(areas[lname][1], areas[lname][2], pos) then
|
||||
for lname, area in pairs(subgames.areas) do
|
||||
if is_inside_area(area[1], area[2], pos) then
|
||||
return lname
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function subgames.check_drop(pos, itemname, player)
|
||||
local name = player:get_player_name()
|
||||
local lobby = player_lobby[name]
|
||||
if not lobby then
|
||||
lobby = subgames.get_lobby_from_pos(pos)
|
||||
if not lobby then
|
||||
return false
|
||||
end
|
||||
end
|
||||
local func = areas[lobby].drop
|
||||
if not func then
|
||||
return false
|
||||
else return func(pos, itemname, player)
|
||||
end
|
||||
end
|
||||
|
||||
function subgames.get_lobby_players(lobby)
|
||||
local players = {}
|
||||
for _,value in ipairs(minetest.get_connected_players()) do
|
||||
|
@ -166,10 +152,11 @@ function subgames.remove_all_player(name)
|
|||
remove_rule_accepted(name)
|
||||
playtime.remove_playtime(name)
|
||||
skins.remove_player(name)
|
||||
hiddenseeker.remove_player_kits(name)
|
||||
mesewars.remove_player_kits(name)
|
||||
skywars.remove_player_kits(name)
|
||||
survivalgames.remove_player_kits(name)
|
||||
for _, d in pairs(subgames.games) do
|
||||
if d.remove_player then
|
||||
d.remove_player(name)
|
||||
end
|
||||
end
|
||||
money.remove(name)
|
||||
return true
|
||||
end
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
-- This is the controll mod of Subgames for all!
|
||||
subgames={}
|
||||
subgames = {}
|
||||
|
||||
player_lobby = {}
|
||||
death = {}
|
||||
areas={
|
||||
subgames.games = {}
|
||||
subgames.areas={
|
||||
["mesewars"] = {
|
||||
[1] = {x=(-700), y=1000, z=-700},
|
||||
[2] = {x=75, y=1302, z=(-17)}
|
||||
|
@ -36,16 +36,39 @@ dofile(minetest.get_modpath("subgames") .."/sfinv.lua")
|
|||
dofile(minetest.get_modpath("subgames") .."/functions.lua")
|
||||
dofile(minetest.get_modpath("subgames") .."/map.lua")
|
||||
|
||||
-- Add a register on chat message
|
||||
--[[
|
||||
Def should be:
|
||||
{
|
||||
fullname = "Mesewars"
|
||||
object = mesewars
|
||||
area = {
|
||||
[1] = {x=(-700), y=1000, z=-700},
|
||||
[2] = {x=75, y=1302, z=(-17)}
|
||||
}
|
||||
|
||||
optional...
|
||||
node_dig = function(pos, node, digger)
|
||||
item_place_node = function(itemstack, placer, pointed_thing, param2)
|
||||
drop = function(pos, itemname, player)
|
||||
remove_player = function(name)
|
||||
}
|
||||
|
||||
]]
|
||||
function subgames.register_game(name, def)
|
||||
def.name = name
|
||||
subgames.games[name] = def
|
||||
end
|
||||
|
||||
-- Add a register on chat message (name, message)
|
||||
subgames.on_chat_message = {}
|
||||
function subgames.register_on_chat_message(func, name, message, lobby)
|
||||
function subgames.register_on_chat_message(func)
|
||||
table.insert(subgames.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
|
||||
for _, value in pairs(subgames.on_chat_message) do
|
||||
if value(name, message, player_lobby[name]) == true then
|
||||
toreturn = true
|
||||
end
|
||||
|
@ -53,22 +76,25 @@ minetest.register_on_chat_message(function(name, message)
|
|||
return toreturn
|
||||
end)
|
||||
|
||||
-- Add a register on dieplayer
|
||||
-- Add a register on dieplayer (player)
|
||||
subgames.on_dieplayer = {}
|
||||
function subgames.register_on_dieplayer(func, player, lobby)
|
||||
function subgames.register_on_dieplayer(func)
|
||||
table.insert(subgames.on_dieplayer, func)
|
||||
end
|
||||
|
||||
minetest.register_on_dieplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
for _,value in pairs(subgames.on_dieplayer) do
|
||||
for _, value in pairs(subgames.on_dieplayer) do
|
||||
value(player, player_lobby[name])
|
||||
end
|
||||
end)
|
||||
|
||||
-- Add a register on kill player
|
||||
local death = {}
|
||||
local redeath = {}
|
||||
|
||||
-- Add a register on kill player (killer, killed)
|
||||
subgames.on_kill_player = {}
|
||||
function subgames.register_on_kill_player(func, killer, killed, lobby)
|
||||
function subgames.register_on_kill_player(func)
|
||||
table.insert(subgames.on_kill_player, func)
|
||||
end
|
||||
|
||||
|
@ -92,10 +118,9 @@ minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch,
|
|||
end
|
||||
end)
|
||||
|
||||
local redeath = {}
|
||||
-- Add a register on respawn player
|
||||
-- Add a register on respawn player (player)
|
||||
subgames.on_respawnplayer = {}
|
||||
function subgames.register_on_respawnplayer(func, player, lobby)
|
||||
function subgames.register_on_respawnplayer(func)
|
||||
table.insert(subgames.on_respawnplayer, func)
|
||||
end
|
||||
|
||||
|
@ -103,21 +128,21 @@ minetest.register_on_respawnplayer(function(player)
|
|||
local name = player:get_player_name()
|
||||
death[name] = nil
|
||||
redeath[name] = nil
|
||||
for _,value in pairs(subgames.on_respawnplayer) do
|
||||
for _, value in pairs(subgames.on_respawnplayer) do
|
||||
value(player, player_lobby[name])
|
||||
end
|
||||
end)
|
||||
|
||||
-- Add a register on dig node
|
||||
-- Add a register on dig node (pos, oldnode, digger)
|
||||
subgames.on_dignode = {}
|
||||
function subgames.register_on_dignode(func, pos, oldnode, digger, lobby)
|
||||
function subgames.register_on_dignode(func)
|
||||
table.insert(subgames.on_dignode, func)
|
||||
end
|
||||
|
||||
minetest.register_on_dignode(function(pos, oldnode, digger)
|
||||
if digger and digger:is_player() then
|
||||
local name = digger:get_player_name()
|
||||
for _,value in pairs(subgames.on_dignode) do
|
||||
for _, value in pairs(subgames.on_dignode) do
|
||||
value(pos, oldnode, digger, player_lobby[name])
|
||||
end
|
||||
end
|
||||
|
@ -132,8 +157,8 @@ function minetest.node_dig(pos, node, digger)
|
|||
else lobby = subgames.get_lobby_from_pos(pos)
|
||||
end
|
||||
if not lobby then return end
|
||||
if areas[lobby].dig then
|
||||
local result = areas[lobby].dig(pos, node, digger)
|
||||
if subgames.games[lobby].node_dig then
|
||||
local result = subgames.games[lobby].node_dig(pos, node, digger)
|
||||
if result == true then
|
||||
return old_node_dig(pos, node, digger)
|
||||
else return
|
||||
|
@ -142,9 +167,9 @@ function minetest.node_dig(pos, node, digger)
|
|||
end
|
||||
end
|
||||
|
||||
-- Add a register on place node
|
||||
-- Add a register on place node (pos, newnode, placer, oldnode, itemstack, pointed_thing)
|
||||
subgames.on_placenode = {}
|
||||
function subgames.register_on_placenode(func, pos, newnode, placer, oldnode, itemstack, pointed_thing, lobby)
|
||||
function subgames.register_on_placenode(func)
|
||||
table.insert(subgames.on_placenode, func)
|
||||
end
|
||||
|
||||
|
@ -176,8 +201,8 @@ function minetest.item_place_node(itemstack, placer, pointed_thing, param2)
|
|||
lobby = subgames.get_lobby_from_pos(pos)
|
||||
end
|
||||
if not lobby then return end
|
||||
if areas[lobby].place then
|
||||
local result = areas[lobby].place(itemstack, placer, pointed_thing, param2)
|
||||
if subgames.games[lobby].item_place_node then
|
||||
local result = subgames.games[lobby].item_place_node(itemstack, placer, pointed_thing, param2)
|
||||
if result == true then
|
||||
return old_node_place(itemstack, placer, pointed_thing, param2)
|
||||
else return
|
||||
|
@ -186,9 +211,9 @@ function minetest.item_place_node(itemstack, placer, pointed_thing, param2)
|
|||
end
|
||||
end
|
||||
|
||||
-- Add a register on punchplayer
|
||||
-- Add a register on punchplayer (player, hitter, time_from_last_punch, tool_capabilities, dir, damage)
|
||||
subgames.on_punchplayer = {}
|
||||
function subgames.register_on_punchplayer(func, player, hitter, time_from_last_punch, tool_capabilities, dir, damage, lobby)
|
||||
function subgames.register_on_punchplayer(func)
|
||||
table.insert(subgames.on_punchplayer, func)
|
||||
end
|
||||
|
||||
|
@ -208,9 +233,9 @@ minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch,
|
|||
end
|
||||
end)
|
||||
|
||||
-- Add a register on join player
|
||||
-- Add a register on join player (player)
|
||||
subgames.on_joinplayer = {}
|
||||
function subgames.register_on_joinplayer(func, player)
|
||||
function subgames.register_on_joinplayer(func)
|
||||
table.insert(subgames.on_joinplayer, func)
|
||||
end
|
||||
|
||||
|
@ -245,9 +270,9 @@ minetest.register_on_joinplayer(function(player)
|
|||
subgames.call_join_callbacks(player, "main")
|
||||
end)
|
||||
|
||||
-- Add a register on leave player
|
||||
-- Add a register on leave player (player)
|
||||
subgames.on_leaveplayer = {}
|
||||
function subgames.register_on_leaveplayer(func, player)
|
||||
function subgames.register_on_leaveplayer(func)
|
||||
table.insert(subgames.on_leaveplayer, func)
|
||||
end
|
||||
|
||||
|
@ -313,9 +338,9 @@ function subgames.register_chatcommand(cname, def)
|
|||
end
|
||||
|
||||
|
||||
-- Add a register on item eat
|
||||
-- Add a register on item eat (hp_change, replace_with_item, itemstack, user, pointed_thing)
|
||||
subgames.on_item_eat = {}
|
||||
function subgames.register_on_item_eat(func, hp_change, replace_with_item, itemstack, user, pointed_thing, lobby)
|
||||
function subgames.register_on_item_eat(func)
|
||||
table.insert(subgames.on_item_eat, func)
|
||||
end
|
||||
|
||||
|
@ -326,9 +351,9 @@ minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack,
|
|||
end
|
||||
end)
|
||||
|
||||
-- Add a register on punch node
|
||||
-- Add a register on punch node (pos, node, puncher, pointed_thing)
|
||||
subgames.on_punchnode = {}
|
||||
function subgames.register_on_punchnode(func, pos, node, puncher, pointed_thing, lobby)
|
||||
function subgames.register_on_punchnode(func)
|
||||
table.insert(subgames.on_punchnode, func)
|
||||
end
|
||||
|
||||
|
@ -339,8 +364,9 @@ minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing)
|
|||
end
|
||||
end)
|
||||
|
||||
-- Add a register on drop (itemstack, dropper, pos)
|
||||
subgames.on_drop = {}
|
||||
function subgames.register_on_drop(func, itemstack, dropper, pos, lobby)
|
||||
function subgames.register_on_drop(func)
|
||||
table.insert(subgames.on_drop, func)
|
||||
end
|
||||
local dropfuncs = {}
|
||||
|
@ -365,9 +391,27 @@ function subgames.handle_drop(itemstack, dropper, pos)
|
|||
end
|
||||
end
|
||||
|
||||
function subgames.check_drop(pos, itemname, player)
|
||||
local name = player:get_player_name()
|
||||
local lobby = player_lobby[name]
|
||||
if not lobby then
|
||||
lobby = subgames.get_lobby_from_pos(pos)
|
||||
if not lobby then
|
||||
return false
|
||||
end
|
||||
end
|
||||
local func = subgames.games[lobby].drop
|
||||
if not func then
|
||||
return false
|
||||
else return func(pos, itemname, player)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.override_item("tnt:tnt_burning", {description="TNT"})
|
||||
|
||||
-- Register on blas (pos, intensity)
|
||||
subgames.on_blast = {}
|
||||
function subgames.register_on_blast(func, pos, intensity, lobby)
|
||||
function subgames.register_on_blast(func)
|
||||
table.insert(subgames.on_blast, func)
|
||||
end
|
||||
local blastfuncs = {}
|
||||
|
@ -414,14 +458,7 @@ minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv
|
|||
end)
|
||||
|
||||
minetest.unregister_chatcommand("me")
|
||||
minetest.register_chatcommand("crash", {
|
||||
params = "",
|
||||
description = "Use it to crash the server without bad followings.",
|
||||
privs = {ban=true},
|
||||
func = function(user)
|
||||
crash.crash = crash.crash +1
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_chatcommand("say", {
|
||||
params = "",
|
||||
description = "Use it to say something in the global chat.",
|
||||
|
@ -430,34 +467,8 @@ minetest.register_chatcommand("say", {
|
|||
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_tool("subgames:leaver", {
|
||||
description = "Game leaver",
|
||||
inventory_image = "dye_red.png",
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
subgames.leaver(user)
|
||||
return ""
|
||||
end,
|
||||
on_secondary_use = function(itemstack, user, pointed_thing)
|
||||
subgames.leaver(user)
|
||||
return ""
|
||||
end,
|
||||
})
|
||||
|
||||
function subgames.leaver(player)
|
||||
local name = player:get_player_name()
|
||||
local lobby = player_lobby[name]
|
||||
if lobby == "hiddenseeker" then
|
||||
hiddenseeker.leave_game(player)
|
||||
hiddenseeker.win(hiddenseeker.player_lobby[name])
|
||||
hiddenseeker.join_game(player, 0)
|
||||
elseif lobby == "skywars" then
|
||||
skywars.leave_game(player)
|
||||
skywars.win(skywars.player_lobby[name])
|
||||
skywars.join_game(player, 0)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -21,6 +21,47 @@ survivalgames.player_lobby = {}
|
|||
survivalgames.max_players = 20
|
||||
survivalgames.protectiontime = 60
|
||||
|
||||
subgames.register_game("survivalgames", {
|
||||
fullname = "Survivalgames",
|
||||
object = survivalgames,
|
||||
area = {
|
||||
[1] = {x=31000, y=-50, z=31000},
|
||||
[2] = {x=(-31000), y=110, z=(-31000)}
|
||||
},
|
||||
node_dig = function(pos, node, digger)
|
||||
local name = digger:get_player_name()
|
||||
local plobby = survivalgames.player_lobby[name]
|
||||
if name and plobby and survivalgames.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 = survivalgames.player_lobby[name]
|
||||
end
|
||||
if not plobby then return end
|
||||
if survivalgames.lobbys[plobby].protection then
|
||||
if itemstack:get_name() == "tnt:tnt_burning" or itemstack:get_name() == "default:lava_source" then
|
||||
return
|
||||
end
|
||||
end
|
||||
if survivalgames.lobbys[plobby].ingame then
|
||||
return true
|
||||
end
|
||||
end,
|
||||
drop = function(pos, itemname, player)
|
||||
local name = player:get_player_name()
|
||||
local plobby = survivalgames.player_lobby[name]
|
||||
if survivalgames.lobbys[plobby].ingame then
|
||||
return true
|
||||
end
|
||||
end,
|
||||
remove_player = survivalgames.remove_player_kits
|
||||
})
|
||||
|
||||
function survivalgames.get_lobby_players(lobby)
|
||||
local players = {}
|
||||
for _, player in pairs(subgames.get_lobby_players("survivalgames")) do
|
||||
|
@ -90,39 +131,6 @@ local function get_lobby_from_pos(pos)
|
|||
end
|
||||
end
|
||||
|
||||
function areas.survivalgames.dig(pos, node, digger)
|
||||
local name = digger:get_player_name()
|
||||
local plobby = survivalgames.player_lobby[name]
|
||||
if name and plobby and survivalgames.lobbys[plobby].ingame then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function areas.survivalgames.drop(pos, name, player)
|
||||
local name = player:get_player_name()
|
||||
local plobby = survivalgames.player_lobby[name]
|
||||
if survivalgames.lobbys[plobby].ingame then
|
||||
return true
|
||||
end
|
||||
end
|
||||
function areas.survivalgames.place(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 = survivalgames.player_lobby[name]
|
||||
end
|
||||
if not plobby then return end
|
||||
if survivalgames.lobbys[plobby].protection then
|
||||
if itemstack:get_name() == "tnt:tnt_burning" or itemstack:get_name() == "default:lava_source" then
|
||||
return
|
||||
end
|
||||
end
|
||||
if survivalgames.lobbys[plobby].ingame then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
subgames.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage, lobby)
|
||||
if lobby == "survivalgames" and player and hitter then
|
||||
if damage == 0 then
|
||||
|
|
Loading…
Reference in New Issue