Skip to content

Commit

Permalink
add peaceful player privs and settings (thanks sfence)
Browse files Browse the repository at this point in the history
  • Loading branch information
tenplus1 committed Jan 4, 2021
1 parent 00ac9ef commit 76ee3d0
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 2 deletions.
23 changes: 21 additions & 2 deletions api.lua
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ local use_cmi = minetest.global_exists("cmi")

mobs = {
mod = "redo",
version = "20210102",
version = "20210104",
intllib = S,
invis = minetest.global_exists("invisibility") and invisibility or {}
}
Expand Down Expand Up @@ -65,6 +65,7 @@ local max_per_block = tonumber(settings:get("max_objects_per_block") or 99)
local mob_nospawn_range = tonumber(settings:get("mob_nospawn_range") or 12)
local active_limit = tonumber(settings:get("mob_active_limit") or 0)
local mob_chance_multiplier = tonumber(settings:get("mob_chance_multiplier") or 1)
local peaceful_player_enabled = settings:get_bool("enable_peaceful_player")
local active_mobs = 0


Expand Down Expand Up @@ -1848,6 +1849,23 @@ function mob_class:smart_mobs(s, p, dist, dtime)
end


-- peaceful player privilege support
local function is_peaceful_player(player)

if peaceful_player_enabled then

local player_name = player:get_player_name()

if player_name
and minetest.check_player_privs(player_name, "peaceful_player") then
return true
end
end

return false
end


-- general attack function for all mobs
function mob_class:general_attack()

Expand Down Expand Up @@ -1920,7 +1938,8 @@ function mob_class:general_attack()
-- choose closest player to attack that isnt self
if dist ~= 0
and dist < min_dist
and self:line_of_sight(sp, p, 2) == true then
and self:line_of_sight(sp, p, 2) == true
and not is_peaceful_player(player) then
min_dist = dist
min_player = player
end
Expand Down
6 changes: 6 additions & 0 deletions init.lua
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@

local path = minetest.get_modpath("mobs")

-- Peaceful player privilege
minetest.register_privilege("peaceful_player", {
description = "Prevents Mobs Redo mobs from attacking player",
give_to_singleplayer = false
})

-- Mob API
dofile(path .. "/api.lua")

Expand Down
1 change: 1 addition & 0 deletions readme.MD
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ Lucky Blocks: 9


Changelog:
- 1.55 - Add 'peaceful_player' privelage and setting so mobs don't attack specific players (thanks sfence)
- 1.54 - Simplified animal breeding function, added editable settings (thanks Wuzzy), Child mobs now take 20 mins to grow up, reverted to simple mob spawning with setting to use area checks, on_flop added, air_damage added.
- 1.53 - Added 'on_map_load' settings to mobs:spawn so that mobs will only spawn when new areas of map are loaded.
- 1.52 - Added 'mob_active_limit' in settings to set number of mobs in game,
Expand Down
3 changes: 3 additions & 0 deletions settingtypes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,6 @@ mob_active_limit (Mob Active Limit) float 0

# Enables area check when spawning mobs
mob_area_spawn (Mob Area Spawn) bool false

# Enable peaceful player attack prevention
enable_peaceful_player (Mobs do not attack peaceful player without reason) bool false

0 comments on commit 76ee3d0

Please sign in to comment.