]> git.lizzy.rs Git - hangglider.git/commitdiff
Merge branch 'master' of https://notabug.org/Piezo_/minetest-hangglider
authorPiezo_ <orderofthefourthwall@gmail.com>
Sat, 29 Dec 2018 01:52:01 +0000 (17:52 -0800)
committerPiezo_ <orderofthefourthwall@gmail.com>
Sat, 29 Dec 2018 01:52:01 +0000 (17:52 -0800)
1  2 
init.lua

diff --combined init.lua
index 876b4f5f39258e1e985fa202350e9070b2c6380a,30b3ec9a5bf76d59216721b72d7bbe20a965aa11..8284a9b09fedf873596f3b55d666cefd3217764f
+++ b/init.lua
  -- Removed airbreak until minetest devs are smart enough to implement better serverside players.
  -- Simplified liquid check.
  
+ -- Modifications by gpcf
+ -- 2018-12-09
+ -- get shot down while flying over protected areas marked as no-fly-zones (flak, from German Flugabwehrkanone)
+ --  set these areas with the /area_flak command
  local HUD_Overlay = true --show glider struts as overlay on HUD
  local debug = false --show debug info in top-center of hud
  local moveModelUp = false
@@@ -88,6 -95,31 +95,31 @@@ minetest.register_entity("hangglider:ai
        end
  })]]
  
+ if areas then
+       hangglider.flak = true
+       -- chat command definition essentially copied from areas mod.
+       minetest.register_chatcommand("area_flak",{
+               params = "<ID>",
+               description = "Toggle airspace restrictions for area <ID>",
+               func = function(name, param)
+                       local id = tonumber(param)
+                       if not id then
+                               return false, "Invalid usage, see /help area_flak."
+                       end
+                       
+                       if not areas:isAreaOwner(id, name) then
+                               return false, "Area "..id.." does not exist"
+                                       .." or is not owned by you."
+                       end
+                       local open = not areas.areas[id].flak
+                       -- Save false as nil to avoid inflating the DB.
+                       areas.areas[id].flak = open or nil
+                       areas:save()
+                       return true, ("Area's airspace %s."):format(open and "closed" or "opened")
+               end
+       })
+ end
  if minetestd and minetestd.services.gravityctl.enabled then
  minetestd.gravityctl.register_gravity_effect("hangglider", 
        function(player) 
  )
  end
  
+ hangglider.can_fly = function (pname, pos)
+       -- Checks if the player will get shot down at the position
+       if minetest.is_protected(vector.round(pos), pname) then
+               if hangglider.flak then 
+                       for id, area in pairs(areas:getAreasAtPos(pos)) do
+                               if area.flak then
+                                       return false
+                               end
+                       end
+               end
+       end
+       return true
+ end
+ hangglider.shot_sound = function (pos)
+       minetest.sound_play("hangglider_flak_shot", {
+                                                       pos = pos,
+                                                       max_hear_distance = 30,
+                                                       gain = 10.0,
+       })
+ end
  local step_v
  minetest.register_entity("hangglider:glider", {
        visual = "mesh",
        immortal = true,
        static_save = false,
        textures = {"wool_white.png","default_wood.png"},
-       on_step = function(self, _)
+       on_step = function(self, dtime)
                local canExist = false
                if self.object:get_attach() then
                        local player = self.object:get_attach("parent")
                                                ]]end
                                        end
                                end
+                               if not hangglider.can_fly(pname,pos) then
+                                   if not self.warned then -- warning shot
+                                               self.warned = 0
+                                               hangglider.shot_sound(pos)
+                                               minetest.chat_send_player(pname, "Protected area! You will be shot down in two seconds by anti-aircraft guns!")
+                                   end
+                                   self.warned = self.warned + dtime
+                                   if self.warned > 2 then -- shoot down
+                                               player:set_hp(1)
+                                               player:get_inventory():remove_item("main", ItemStack("hangglider:hangglider"))
+                                               hangglider.shot_sound(pos)
+                                               canExist = false
+                                   end
+                               end
                                if not canExist then
                                        player:set_physics_override({
                                                jump = 1,
@@@ -219,7 -287,7 +287,7 @@@ minetest.register_tool("hangglider:hang
                end
                local pos = player:get_pos()
                local pname = player:get_player_name()
 -              if minetest.get_node(pos).name == "air" and not hangglider.use[pname] then --Equip
 +              if not hangglider.use[pname] then --Equip
                        minetest.sound_play("bedsheet", {pos=pos, max_hear_distance = 8, gain = 1.0})
                        if HUD_Overlay then player:hud_change(hangglider.id[pname], "text", "glider_struts.png") end
                        local airbreak = false
@@@ -270,4 -338,4 +338,4 @@@ minetest.register_craft(
                {"default:stick", "", "default:stick"},
                {"", "default:stick", ""},
        }
- })
+ })