Add fireworks when raid complete

This commit is contained in:
cora 2022-11-18 07:02:00 +01:00
parent 8564a12398
commit 93e5034317
2 changed files with 62 additions and 2 deletions

View file

@ -55,7 +55,9 @@ local function start_event(p,e)
active_events[idx].percent = 100
active_events[idx].bars = {}
active_events[idx].time_start = os.time()
active_events[idx]:on_start(p.pos)
if active_events[idx].on_start then
active_events[idx]:on_start(p.pos)
end
addbars(active_events[idx])
end
@ -91,7 +93,7 @@ function check_events(dtime)
ae:on_stage_begin()
end
elseif not ae.finished and ae.on_step then
ae:on_step()
ae:on_step(dtime)
end
addbars(ae)
end

View file

@ -226,6 +226,27 @@ function mcl_raids.find_village(pos)
end
end
local function get_point_on_circle(pos,r,n)
local rt = {}
for i=1, n do
table.insert(rt,vector.offset(pos,r * math.cos(((i-1)/n) * (2*math.pi)),0, r* math.sin(((i-1)/n) * (2*math.pi)) ))
end
table.shuffle(rt)
return rt[1]
end
local function start_firework_rocket(pos)
local pp = get_point_on_circle(pos,math.random(32,64),32)
local o = minetest.add_entity(pp,"mcl_bows:rocket_entity")
o:set_acceleration(vector.new(math.random(0,2),math.random(30,50),math.random(0,2)))
end
local function make_firework(pos)
for i=1,math.random(25) do
minetest.after(math.random(i),start_firework_rocket,pos)
end
end
mcl_events.register_event("raid",{
readable_name = "Raid",
max_stage = 5,
@ -290,6 +311,7 @@ mcl_events.register_event("raid",{
on_complete = function(self)
awards.unlock(self.player,"mcl:hero_of_the_village")
mcl_potions.player_clear_effect(minetest.get_player_by_name(self.player),"bad_omen")
make_firework(self.pos)
end,
})
@ -315,3 +337,39 @@ minetest.register_chatcommand("dump_banner_layers",{
end
end
})
local function is_new_years()
local d = os.date("*t")
return d.month == 1 and d.day == 1 and d.hour < 1
end
mcl_events.register_event("new_years",{
stage = 0,
max_stage = 1,
readable_name = "New Years",
pos = vector.new(0,0,0),
exclusive_to_area = 256,
cond_start = function(event)
if not is_new_years() then return false end
local r = {}
for _,p in pairs(minetest.get_connected_players()) do
table.insert(r,{ player = p:get_player_name(), pos = p:get_pos()})
end
return r
end,
on_start = function(self)
minetest.chat_send_player(self.player,"<cora> Happy new year <3")
end,
on_step = function(self,dtime)
if not self.timer or self.timer < 0 then
self.timer = math.random(1,5)
for i=1,math.random(8) do
minetest.after(math.random(i),start_firework_rocket,minetest.get_player_by_name(self.player):get_pos())
end
end
self.timer = self.timer - dtime
end,
cond_complete = function(event)
return not is_new_years()
end, --return success
})