159 lines
4.6 KiB
Lua
Executable File
159 lines
4.6 KiB
Lua
Executable File
----------------------------------------------------------------------
|
|
-- Eggwars by wilkgr --
|
|
-- with additional code by shivajiva101@hotmail.com --
|
|
-- Licensed under the AGPL v3 --
|
|
-- You MUST make any changes you make open source --
|
|
-- even if you just run it on your server without publishing it --
|
|
-- Supports a maximum of 8 players per instance and 8 concurrent --
|
|
-- instances for a max of 64 players --
|
|
----------------------------------------------------------------------
|
|
|
|
eggwars = eggwars
|
|
|
|
--- Displays message for items that cannot be dropped
|
|
-- @return nothing
|
|
eggwars.drop_msg = function(itemstack, player)
|
|
local name = player:get_player_name()
|
|
minetest.chat_send_player(name, "Don't be silly, you can't drop that!")
|
|
end
|
|
|
|
------------------------
|
|
-- on_timer functions --
|
|
------------------------
|
|
|
|
local function goldspawner(pos, elapsed)
|
|
local sp = vector.new(pos.x, pos.y + 3, pos.z)
|
|
minetest.add_item(sp, "default:gold_ingot")
|
|
return true
|
|
end
|
|
|
|
local function rubyspawner(pos, elapsed)
|
|
local sp = vector.new(pos.x, pos.y + 3, pos.z)
|
|
minetest.add_item(sp, "eggwars:ruby")
|
|
return true
|
|
end
|
|
|
|
local function diamondspawner(pos, elapsed)
|
|
local sp = vector.new(pos.x, pos.y + 3, pos.z)
|
|
minetest.add_item(sp, "default:diamond")
|
|
return true
|
|
end
|
|
|
|
-----------------
|
|
-- craft items --
|
|
-----------------
|
|
|
|
minetest.register_craftitem("eggwars:ruby", {
|
|
description = "Ruby",
|
|
inventory_image = "eggwars_ruby.png",
|
|
})
|
|
|
|
------------------------
|
|
-- node registrations --
|
|
------------------------
|
|
|
|
-- Arena eggs
|
|
for i, v in ipairs(eggwars.arena[1].cs) do
|
|
|
|
minetest.register_node("eggwars:egg" .. i, {
|
|
description = eggwars.arena[1].cs[i][1] .. " egg",
|
|
tiles = {"eggwars_shell.png^[colorize:" .. eggwars.arena[1].cs[i][2]},
|
|
drawtype = "mesh",
|
|
mesh = "eggwars_egg.obj",
|
|
groups = {crumbly = 3, not_in_creative_inventory = 1},
|
|
paramtype = "light",
|
|
--light_source = 14,
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.35, -0.5, -0.35, 0.35, 0.45, 0.35} -- right, bottom, back, left, top, front
|
|
},
|
|
collision_box = {
|
|
type = "fixed",
|
|
fixed = {-0.35, -0.5, -0.35, 0.35, 0.45, 0.35}
|
|
},
|
|
drop = {},
|
|
on_drop = eggwars.drop_msg,
|
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
|
local victim, attacker, msg, key, match, eggs
|
|
victim = oldmetadata.fields.owner
|
|
attacker = digger:get_player_name()
|
|
key = eggwars.player[victim]
|
|
match = eggwars.match[key]
|
|
match.player[victim].egg = false
|
|
eggs = match.player[attacker].eggs + 1
|
|
match.player[attacker].eggs = eggs
|
|
msg = victim .. "'s egg was destroyed by " .. attacker
|
|
eggwars.add_tmp_image(victim, 'eggwars_destroyed.png', 5)
|
|
minetest.sound_play("eggwars_crack", {
|
|
to_player = victim,
|
|
gain = 1.0,
|
|
})
|
|
eggwars.chat_send_match(key, msg)
|
|
eggwars.update_hud(key, match.player[victim].id)
|
|
eggwars.match[key] = match
|
|
end,
|
|
can_dig = function(pos, player)
|
|
local meta = minetest.get_meta(pos)
|
|
local name = meta:get_string("owner")
|
|
local pname = player:get_player_name()
|
|
if name == pname then
|
|
return false
|
|
else
|
|
return true
|
|
end
|
|
end
|
|
})
|
|
|
|
end
|
|
|
|
-- Spawners
|
|
minetest.register_node("eggwars:gold_spawner", {
|
|
description = "Gold ingot spawner",
|
|
tiles = {"default_stone.png^default_mineral_gold.png"},
|
|
groups = {unbreakable = 1, not_in_creative_inventory = 1},
|
|
on_timer = goldspawner
|
|
})
|
|
|
|
minetest.register_node("eggwars:ruby_spawner", {
|
|
description = "Ruby gemstone spawner",
|
|
tiles = {"default_stone.png^eggwars_mineral_ruby.png"},
|
|
groups = {unbreakable = 1, not_in_creative_inventory = 1},
|
|
on_timer = rubyspawner
|
|
})
|
|
|
|
minetest.register_node("eggwars:diamond_spawner", {
|
|
description = "Diamond gemstone spawner",
|
|
tiles = {"default_stone.png^default_mineral_diamond.png"},
|
|
groups = {unbreakable = 1, not_in_creative_inventory = 1},
|
|
on_timer = diamondspawner
|
|
})
|
|
|
|
-- Misc
|
|
minetest.register_node("eggwars:kill", {
|
|
description = "Kill Block",
|
|
range = 12,
|
|
stack_max = 10000,
|
|
inventory_image = "default_steel_block.png^dye_black.png",
|
|
drawtype = "airlike",
|
|
walkable = false,
|
|
pointable = false,
|
|
damage_per_second = 20,
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
drop = "",
|
|
groups = {unbreakable = 1, not_in_creative_inventory = 1},
|
|
})
|
|
|
|
minetest.register_node("eggwars:playerclip", {
|
|
description = "Player Clip",
|
|
range = 12,
|
|
stack_max = 10000,
|
|
inventory_image = "default_steel_block.png^dye_green.png",
|
|
drawtype = "airlike",
|
|
paramtype = "light",
|
|
pointable = false,
|
|
sunlight_propagates = true,
|
|
drop = "",
|
|
groups = {unbreakable = 1, not_in_creative_inventory = 1},
|
|
})
|