Codebase list minetest-mod-mobs-redo / 03e7ba6
New upstream snapshot. Debian Janitor 2 years ago
11 changed file(s) with 132 addition(s) and 72 deletion(s). Raw diff Collapse all Expand all
0 -- Load support for intllib.
10 local MP = minetest.get_modpath(minetest.get_current_modname())
2 local S = minetest.get_translator and minetest.get_translator("mobs_redo") or
3 dofile(MP .. "/intllib.lua")
1
2 -- Check for translation method
3 local S
4 if minetest.get_translator ~= nil then
5 S = minetest.get_translator("mobs") -- 5.x translation function
6 else
7 if minetest.get_modpath("intllib") then
8 dofile(minetest.get_modpath("intllib") .. "/init.lua")
9 if intllib.make_gettext_pair then
10 gettext, ngettext = intllib.make_gettext_pair() -- new gettext method
11 else
12 gettext = intllib.Getter() -- old text file method
13 end
14 S = gettext
15 else -- boilerplate function
16 S = function(str, ...)
17 local args = {...}
18 return str:gsub("@%d+", function(match)
19 return args[tonumber(match:sub(2))]
20 end)
21 end
22 end
23 end
424
525 -- CMI support check
626 local use_cmi = minetest.global_exists("cmi")
727
828 mobs = {
929 mod = "redo",
10 version = "20210920",
30 version = "20220314",
1131 intllib = S,
1232 invis = minetest.global_exists("invisibility") and invisibility or {}
1333 }
253273 return true
254274 end
255275
256 if str:find("group:") then
257
258 local group = str:split(":")[2]
276 if str and str:find("group:") then
277
278 local group = str:split(":")[2] or ""
259279
260280 if minetest.get_item_group(look_for, group) ~= 0 then
261281 return true
764784 end
765785
766786 self.infotext = "Health: " .. self.health .. " / " .. self.hp_max
767 .. "\n" .. "Owner: " .. self.owner
787 .. (self.owner == "" and "" or "\n" .. "Owner: " .. self.owner)
768788 .. text
769789
770790 -- set changes
10011021
10021022
10031023 -- Returns true is node can deal damage to self
1004 local is_node_dangerous = function(self, nodename)
1005
1006 if self.water_damage > 0
1024 function mobs:is_node_dangerous(mob_object, nodename)
1025
1026 if mob_object.water_damage > 0
10071027 and minetest.get_item_group(nodename, "water") ~= 0 then
10081028 return true
10091029 end
10101030
1011 if self.lava_damage > 0
1031 if mob_object.lava_damage > 0
10121032 and minetest.get_item_group(nodename, "lava") ~= 0 then
10131033 return true
10141034 end
10151035
1016 if self.fire_damage > 0
1036 if mob_object.fire_damage > 0
10171037 and minetest.get_item_group(nodename, "fire") ~= 0 then
10181038 return true
10191039 end
10231043 end
10241044
10251045 return false
1046 end
1047
1048 local function is_node_dangerous(mob_object, nodename)
1049 return mobs:is_node_dangerous(mob_object, nodename)
10261050 end
10271051
10281052
21072131
21082132 for n = 1, #players do
21092133
2110 if get_distance(players[n]:get_pos(), s) < self.view_range
2134 if players[n] and get_distance(players[n]:get_pos(), s) < self.view_range
21112135 and not is_invisible(self, players[n]:get_player_name()) then
21122136
21132137 self.following = players[n]
43364360 if def and def.on_rightclick then
43374361
43384362 return def.on_rightclick(
4339 pointed_thing.under, under, placer, itemstack)
4363 pointed_thing.under, under, placer, itemstack, pointed_thing)
43404364 end
43414365
43424366 if pos
43874411 if def and def.on_rightclick then
43884412
43894413 return def.on_rightclick(
4390 pointed_thing.under, under, placer, itemstack)
4414 pointed_thing.under, under, placer, itemstack, pointed_thing)
43914415 end
43924416
43934417 if pos
690690 otherwise nil is returned.
691691
692692
693 mobs:is_node_dangerous(mob_object, nodename)
694
695 This function returns true if the node name given is harmful to the mob (mob_object),
696 it is mainly used when a mob is near a node it has to avoid.
697
698
693699 External Settings for "minetest.conf"
694700 ------------------------------------
695701
0 minetest-mod-mobs-redo (20210923+git20220314.1.fb42be6-1) UNRELEASED; urgency=low
1
2 * New upstream snapshot.
3
4 -- Debian Janitor <janitor@jelmer.uk> Sat, 19 Mar 2022 14:44:49 -0000
5
06 minetest-mod-mobs-redo (20210923-1) unstable; urgency=medium
17
28 * Switch to debhelper-compat, level 13.
77 cmi?
88 toolranks?
99 pathfinder?
10 player_api?
2121 -- Lucky Blocks
2222 dofile(path .. "/lucky_block.lua")
2323
24 minetest.log("action", "[MOD] Mobs Redo loaded")
24 print("[MOD] Mobs Redo loaded")
+0
-3
intllib.lua less more
0 -- Support for the old multi-load method
1 dofile(minetest.get_modpath("intllib").."/init.lua")
2
1010 "PO-Revision-Date: 2017-07-02 14:27+0200\n"
1111 "Last-Translator: Wuzzy <almikes@aol.com>\n"
1212 "Language-Team: \n"
13 "Language: de_DE\n"
13 "Language: de\n"
1414 "MIME-Version: 1.0\n"
1515 "Content-Type: text/plain; charset=UTF-8\n"
1616 "Content-Transfer-Encoding: 8bit\n"
0 # textdomain:mobs
1 #** Peaceful Mode Active - No Monsters Will Spawn=
2 @1 (Tamed)=@1 (Gezähmt)
3 @1 at full health (@2)=@1 bei voller Gesundheit (@2)
4 @1 has been tamed!=@1 wurde gezähmt!
5 @1 is owner!=@1 ist der Besitzer!
6 #Active Mob Limit Reached!=
7 Already protected!=Bereits geschützt!
8 #Change=
9 #Command:=
10 Enter name:=Namen eingeben:
11 #Enter texture:=
12 Lasso (right-click animal to put in inventory)=Lasso (Rechtsklick auf Tier, um es zu nehmen)
13 Leather=Leder
14 Meat=Fleisch
15 Missed!=Daneben!
16 Mob Fence=Kreaturen Zaun
17 #Mob Fence Top=
18 Mob Protection Rune=Kreaturschutzrune
19 #Mob Reset Stick=
20 #Mob Spawner=
21 Mob Spawner settings failed!=Kreaturenspawner-Einstellungen gescheitert!
22 Mob has been protected!=Kreatur wurde geschützt!
23 Name Tag=Namensschild
24 Net (right-click animal to put in inventory)=Netz (Rechtsklick auf Tier, um es zu nehmen)
25 Not tamed!=Nicht gezähmt!
26 Raw Meat=Rohes Fleisch
27 Rename=Umbenennen
28 Saddle=Sattel
29 Spawner Active (@1)=Spawner aktiv (@1)
30 Spawner Not Active (enter settings)=Nicht aktiv (Einstellungen eingeben)
31 Steel Shears (right-click to shear)=Stahlschere (Rechtsklick zum Scheren)
32 #Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
33 #lifetimer expired, removed @1=
+0
-34
locale/mobs.de_DE.tr less more
0 # textdomain:mobs
1 #** Peaceful Mode Active - No Monsters Will Spawn=
2 @1 (Tamed)=@1 (Gezähmt)
3 @1 at full health (@2)=@1 bei voller Gesundheit (@2)
4 @1 has been tamed!=@1 wurde gezähmt!
5 @1 is owner!=@1 ist der Besitzer!
6 #Active Mob Limit Reached!=
7 Already protected!=Bereits geschützt!
8 #Change=
9 #Command:=
10 Enter name:=Namen eingeben:
11 #Enter texture:=
12 Lasso (right-click animal to put in inventory)=Lasso (Rechtsklick auf Tier, um es zu nehmen)
13 Leather=Leder
14 Meat=Fleisch
15 Missed!=Daneben!
16 Mob Fence=Kreaturen Zaun
17 #Mob Fence Top=
18 Mob Protection Rune=Kreaturschutzrune
19 #Mob Reset Stick=
20 #Mob Spawner=
21 Mob Spawner settings failed!=Kreaturenspawner-Einstellungen gescheitert!
22 Mob has been protected!=Kreatur wurde geschützt!
23 Name Tag=Namensschild
24 Net (right-click animal to put in inventory)=Netz (Rechtsklick auf Tier, um es zu nehmen)
25 Not tamed!=Nicht gezähmt!
26 Raw Meat=Rohes Fleisch
27 Rename=Umbenennen
28 Saddle=Sattel
29 Spawner Active (@1)=Spawner aktiv (@1)
30 Spawner Not Active (enter settings)=Nicht aktiv (Einstellungen eingeben)
31 Steel Shears (right-click to shear)=Stahlschere (Rechtsklick zum Scheren)
32 #Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] player_distance[1-20] y_offset[-10 to 10]”=
33 #lifetimer expired, removed @1=
00 name = mobs
11 depends =
2 optional_depends = default, tnt, dye, farming, invisibility, intllib, lucky_block, cmi, toolranks, pathfinder
2 optional_depends = default, tnt, dye, farming, invisibility, intllib, lucky_block, cmi, toolranks, pathfinder, player_api
33 description = Adds a mob api for mods to add animals or monsters etc.
00 -- lib_mount by Blert2112 (edited by TenPlus1)
1
2 local is_50 = minetest.get_modpath("player_api") -- 5.x compatibility
13
24 local abs, cos, floor, sin, sqrt, pi =
35 math.abs, math.cos, math.floor, math.sin, math.sqrt, math.pi
4 ------------------------------------------------------------------------------
56
67 --
78 -- Helper functions
89 --
910
1011 local node_ok = function(pos, fallback)
12
1113 fallback = fallback or mobs.fallback_node
1214
1315 local node = minetest.get_node_or_nil(pos)
4547
4648
4749 local function get_sign(i)
50
4851 i = i or 0
4952
5053 if i == 0 then
5659
5760
5861 local function get_velocity(v, yaw, y)
62
5963 local x = -sin(yaw) * v
6064 local z = cos(yaw) * v
6165
6973
7074
7175 local function force_detach(player)
76
77 if not player then return end
7278
7379 local attached_to = player:get_attach()
7480
8490 end
8591
8692 player:set_detach()
87 player_api.player_attached[player:get_player_name()] = false
93
94 local name = player:get_player_name()
95
96 if is_50 then
97 player_api.player_attached[name] = false
98 player_api.set_animation(player, "stand", 30)
99 else
100 default.player_attached[name] = false
101 default.player_set_animation(player, "stand", 30)
102 end
103
88104 player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
89 player_api.set_animation(player, "stand", 30)
90105 player:set_properties({visual_size = {x = 1, y = 1}})
91
92 end
93
94 -------------------------------------------------------------------------------
106 end
107
95108
96109 minetest.register_on_leaveplayer(function(player)
97110 force_detach(player)
98111 end)
99112
113
100114 minetest.register_on_shutdown(function()
101115
102116 local players = minetest.get_connected_players()
105119 force_detach(players[i])
106120 end
107121 end)
122
108123
109124 minetest.register_on_dieplayer(function(player)
110125 force_detach(player)
111126 return true
112127 end)
113128
114 -------------------------------------------------------------------------------
115129
116130 -- Just for correct detaching
117131 local function find_free_pos(pos)
146160 return pos
147161 end
148162
149 -------------------------------------------------------------------------------
150163
151164 function mobs.attach(entity, player)
152165
168181
169182 force_detach(player)
170183
184 if is_50 then
185 player_api.player_attached[player:get_player_name()] = true
186 else
187 default.player_attached[player:get_player_name()] = true
188 end
189
171190 player:set_attach(entity.object, "", attach_at, entity.player_rotation)
172 player_api.player_attached[player:get_player_name()] = true
173191 player:set_eye_offset(eye_offset, {x = 0, y = 0, z = 0})
174192
175193 player:set_properties({
182200 minetest.after(0.2, function()
183201
184202 if player and player:is_player() then
185 player_api.set_animation(player, "sit", 30)
203
204 if is_50 then
205 player_api.set_animation(player, "sit", 30)
206 else
207 default.player_set_animation(player, "sit", 30)
208 end
186209 end
187210 end)
188211
191214
192215
193216 function mobs.detach(player)
217
194218 force_detach(player)
195219
196220 minetest.after(0.1, function()
217241 end
218242
219243 local acce_y = 0
220 local velo = entity.object:get_velocity()
244 local velo = entity.object:get_velocity() ; if not velo then return end
221245
222246 entity.v = get_v(velo) * get_sign(entity.v)
223247
261285 entity.object:set_yaw(horz - entity.rotate)
262286
263287 if can_fly then
288
264289 -- fly up
265290 if ctrl.jump then
266291
426451 -- directional flying routine by D00Med (edited by TenPlus1)
427452 function mobs.fly(entity, _, speed, shoots, arrow, moving_anim, stand_anim)
428453
429 local ctrl = entity.driver:get_player_control()
454 local ctrl = entity.driver:get_player_control() ; if not ctrl then return end
430455 local velo = entity.object:get_velocity()
431456 local dir = entity.driver:get_look_dir()
432 local yaw = entity.driver:get_look_horizontal() + 1.57 -- offset fix between old and new commands
433
434 if not ctrl or not velo then return end
457 local yaw = entity.driver:get_look_horizontal() + 1.57
458
459 if not ctrl or not velo then return end
435460
436461 if ctrl.up then
462
437463 entity.object:set_velocity({
438464 x = dir.x * speed,
439465 y = dir.y * speed + 2,