From f551b51c14deb7af83ca16f42dab3933f5967420 Mon Sep 17 00:00:00 2001 From: PrairieWind Date: Thu, 20 Oct 2022 13:17:19 -0600 Subject: [PATCH 1/2] Raid defs and spawn command --- init.lua | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 init.lua diff --git a/init.lua b/init.lua new file mode 100644 index 000000000..7f7770875 --- /dev/null +++ b/init.lua @@ -0,0 +1,65 @@ +-- mcl_raids + +mcl_raids = {} + +-- Define the amount of illagers to spawn each wave. +mcl_raids.wave_definitions = { + -- Pillager + { + illager_name = "mobs_mc:pillager", + wave_1 = 5, + wave_2 = 4, + wave_3 = 4, + wave_4 = 5, + wave_5 = 5, + extra_wave = 5, + }, + -- Vindicator aka Angry Axeman + { + illager_name = "mobs_mc:vindicator", + wave_1 = 1, + wave_2 = 3, + wave_3 = 1, + wave_4 = 2, + wave_5 = 5, + extra_wave = 5, + }, + --{"mobs_mc:ravager", 0, 0, 1, 0, 0, 2}, + -- Witch + { + illager_name = "mobs_mc:witch", + wave_1 = 0, + wave_2 = 0, + wave_3 = 1, + wave_4 = 3, + wave_5 = 1, + extra_wave = 1, + }, + -- Evoker + { + illager_name = "mobs_mc:evoker", + wave_1 = 0, + wave_2 = 0, + wave_3 = 0, + wave_4 = 0, + wave_5 = 1, + extra_wave = 1, + }, +} + +minetest.register_chatcommand("spawn_raid", { + privs = { + server = true, + }, + func = function(name) + local wave = 1 + local player = minetest.get_player_by_name(name) + local player_pos = player:get_pos() + for _, raiddefs in pairs(mcl_raids.wave_definitions) do + local wave_count = raiddefs.wave_1 + for i = 0, wave_count do + minetest.add_entity(player_pos, raiddefs.illager_name) + end + end + end +}) From 983056cdb0a88878e89ec0df3819c236d756c3d2 Mon Sep 17 00:00:00 2001 From: PrairieWind Date: Sat, 22 Oct 2022 12:12:28 -0600 Subject: [PATCH 2/2] Offset Raid Spawning Thanks to cora for helping with the vectors and math --- init.lua | 36 +++++++++++++++++++++++++++++++----- mod.conf | 1 + 2 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 mod.conf diff --git a/init.lua b/init.lua index 7f7770875..073628a6c 100644 --- a/init.lua +++ b/init.lua @@ -53,13 +53,39 @@ minetest.register_chatcommand("spawn_raid", { }, func = function(name) local wave = 1 + local illager_count = 0 local player = minetest.get_player_by_name(name) - local player_pos = player:get_pos() - for _, raiddefs in pairs(mcl_raids.wave_definitions) do - local wave_count = raiddefs.wave_1 - for i = 0, wave_count do - minetest.add_entity(player_pos, raiddefs.illager_name) + local pos = player:get_pos() + local spawnable = false + local r = 32 + local n = 12 + local i = math.random(1, n) + local raid_pos = vector.offset(pos,r * math.cos(((i-1)/n) * (2*math.pi)),0, r * math.sin(((i-1)/n) * (2*math.pi))) + local sn = minetest.find_nodes_in_area_under_air(vector.offset(raid_pos,0,100,0), vector.offset(raid_pos,0,-100,0), {"group:grass_block", "group:grass_block_snow", "group:snow_cover", "group:sand"}) + if sn and #sn > 0 then + spawn_pos = sn[1] + if spawn_pos then + minetest.log("action", "[mcl_raids] Raid Spawn Position chosen at " .. minetest.pos_to_string(spawn_pos) .. ".") + spawnable = true + else + minetest.log("action", "[mcl_raids] Raid Spawn Postion not chosen.") end + elseif not sn then + minetest.log("action", "[mcl_raids] Raid Spawn Position error, no appropriate site found.") + end + if spawnable and spawn_pos then + for _, raiddefs in pairs(mcl_raids.wave_definitions) do + local wave_count = raiddefs.wave_1 + for i = 0, wave_count do + local entity = minetest.add_entity(spawn_pos, raiddefs.illager_name) + if entity then + local l = entity:get_luaentity() + l.raidmember = true + illager_count = illager_count + 1 + end + end + end + minetest.log("action", "[mcl_raids] Raid Spawned. Illager Count: " .. illager_count .. ".") end end }) diff --git a/mod.conf b/mod.conf new file mode 100644 index 000000000..f04ef142a --- /dev/null +++ b/mod.conf @@ -0,0 +1 @@ +name = mcl_raids \ No newline at end of file