mirror of
https://github.com/mt-mods/hangglider.git
synced 2025-07-23 02:40:24 +02:00
Compare commits
1 Commits
fly_checks
...
master
Author | SHA1 | Date | |
---|---|---|---|
071fe93cf5 |
@ -8,5 +8,6 @@ read_globals = {
|
|||||||
"vector", "ItemStack",
|
"vector", "ItemStack",
|
||||||
|
|
||||||
"player_monoids",
|
"player_monoids",
|
||||||
|
"pova",
|
||||||
"unifieddyes",
|
"unifieddyes",
|
||||||
}
|
}
|
||||||
|
14
README.md
14
README.md
@ -31,17 +31,3 @@ The hang glider will wear out every time you use it. The hang glider can be repa
|
|||||||
If the `areas` mod is installed, airspace restrictions can be added to areas using the `/area_flak` command.
|
If the `areas` mod is installed, airspace restrictions can be added to areas using the `/area_flak` command.
|
||||||
|
|
||||||
When using a hang glider in an area with flak enabled, you will get shot down a few seconds after entering the area, this reduces your HP to 1 and destroys your hang glider.
|
When using a hang glider in an area with flak enabled, you will get shot down a few seconds after entering the area, this reduces your HP to 1 and destroys your hang glider.
|
||||||
|
|
||||||
## API
|
|
||||||
|
|
||||||
#### Custom "can fly" checks
|
|
||||||
|
|
||||||
```lua
|
|
||||||
hangglider.add_fly_check(function(name, player)
|
|
||||||
-- `name` is the playername
|
|
||||||
-- `player` is the PlayerRef
|
|
||||||
-- Add your code here
|
|
||||||
-- Must return `true` (can fly) or `false` (can't fly)
|
|
||||||
return true
|
|
||||||
end)
|
|
||||||
```
|
|
||||||
|
54
init.lua
54
init.lua
@ -1,4 +1,3 @@
|
|||||||
hangglider = {}
|
|
||||||
|
|
||||||
hangglider = {
|
hangglider = {
|
||||||
translator = minetest.get_translator('hangglider'),
|
translator = minetest.get_translator('hangglider'),
|
||||||
@ -6,6 +5,7 @@ hangglider = {
|
|||||||
local S = hangglider.translator
|
local S = hangglider.translator
|
||||||
|
|
||||||
local has_player_monoids = minetest.get_modpath("player_monoids")
|
local has_player_monoids = minetest.get_modpath("player_monoids")
|
||||||
|
local has_pova = minetest.get_modpath("pova")
|
||||||
local has_areas = minetest.get_modpath("areas")
|
local has_areas = minetest.get_modpath("areas")
|
||||||
|
|
||||||
local enable_hud_overlay = minetest.settings:get_bool("hangglider.enable_hud_overlay", true)
|
local enable_hud_overlay = minetest.settings:get_bool("hangglider.enable_hud_overlay", true)
|
||||||
@ -66,6 +66,10 @@ local function set_physics_overrides(player, overrides)
|
|||||||
for name, value in pairs(overrides) do
|
for name, value in pairs(overrides) do
|
||||||
player_monoids[name]:add_change(player, value, "hangglider:glider")
|
player_monoids[name]:add_change(player, value, "hangglider:glider")
|
||||||
end
|
end
|
||||||
|
elseif has_pova then
|
||||||
|
pova.add_override(player:get_player_name(), "hangglider:glider",
|
||||||
|
{jump = 0, speed = overrides.speed, gravity = overrides.gravity})
|
||||||
|
pova.do_override(player)
|
||||||
else
|
else
|
||||||
player:set_physics_override(overrides)
|
player:set_physics_override(overrides)
|
||||||
end
|
end
|
||||||
@ -76,41 +80,28 @@ local function remove_physics_overrides(player)
|
|||||||
for _, name in pairs({"jump", "speed", "gravity"}) do
|
for _, name in pairs({"jump", "speed", "gravity"}) do
|
||||||
player_monoids[name]:del_change(player, "hangglider:glider")
|
player_monoids[name]:del_change(player, "hangglider:glider")
|
||||||
end
|
end
|
||||||
|
elseif has_pova then
|
||||||
|
pova.del_override(player:get_player_name(), "hangglider:glider")
|
||||||
|
pova.do_override(player)
|
||||||
else
|
else
|
||||||
player:set_physics_override({jump = 1, speed = 1, gravity = 1})
|
player:set_physics_override({jump = 1, speed = 1, gravity = 1})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local fly_checks = {}
|
local function can_fly(pos, name)
|
||||||
|
if not enable_flak then
|
||||||
function hangglider.add_fly_check(func)
|
return true
|
||||||
table.insert(fly_checks, func)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function can_fly_flak(name, pos)
|
|
||||||
-- Area flak check
|
|
||||||
if enable_flak then
|
|
||||||
local flak = false
|
|
||||||
local owners = {}
|
|
||||||
for _, area in pairs(areas:getAreasAtPos(pos)) do
|
|
||||||
if area.flak then
|
|
||||||
flak = true
|
|
||||||
end
|
|
||||||
owners[area.owner] = true
|
|
||||||
end
|
|
||||||
if flak and not owners[name] then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
local flak = false
|
||||||
|
local owners = {}
|
||||||
local function can_fly_custom(name, player)
|
for _, area in pairs(areas:getAreasAtPos(pos)) do
|
||||||
-- Custom checks set by other mods
|
if area.flak then
|
||||||
for _, func in ipairs(fly_checks) do
|
flak = true
|
||||||
local ret = func(name, player)
|
|
||||||
if ret == false then
|
|
||||||
return false
|
|
||||||
end
|
end
|
||||||
|
owners[area.owner] = true
|
||||||
|
end
|
||||||
|
if flak and not owners[name] then
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
@ -166,7 +157,7 @@ local function hangglider_step(self, dtime)
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if not can_fly_flak(name, pos) then
|
if not can_fly(pos, name) then
|
||||||
if not self.flak_timer then
|
if not self.flak_timer then
|
||||||
self.flak_timer = 0
|
self.flak_timer = 0
|
||||||
shoot_flak_sound(pos)
|
shoot_flak_sound(pos)
|
||||||
@ -181,9 +172,6 @@ local function hangglider_step(self, dtime)
|
|||||||
gliding = false
|
gliding = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if not can_fly_custom(name, player) then
|
|
||||||
gliding = false
|
|
||||||
end
|
|
||||||
if not gliding then
|
if not gliding then
|
||||||
remove_physics_overrides(player)
|
remove_physics_overrides(player)
|
||||||
hanggliding_players[name] = nil
|
hanggliding_players[name] = nil
|
||||||
|
2
mod.conf
2
mod.conf
@ -1,5 +1,5 @@
|
|||||||
name = hangglider
|
name = hangglider
|
||||||
description = Adds a functional hang glider for exploring
|
description = Adds a functional hang glider for exploring
|
||||||
depends = default, wool, dye
|
depends = default, wool, dye
|
||||||
optional_depends = areas, player_monoids, unifieddyes
|
optional_depends = areas, player_monoids, pova, unifieddyes
|
||||||
min_minetest_version = 5.0
|
min_minetest_version = 5.0
|
||||||
|
Reference in New Issue
Block a user