forked from mtcontrib/mobs_redo
		
	added on_breed on_grown and do_punch custom functions
This commit is contained in:
		
							
								
								
									
										56
									
								
								api.lua
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								api.lua
									
									
									
									
									
								
							| @@ -1,9 +1,9 @@ | |||||||
|  |  | ||||||
| -- Mobs Api (8th September 2017) | -- Mobs Api (15th September 2017) | ||||||
|  |  | ||||||
| mobs = {} | mobs = {} | ||||||
| mobs.mod = "redo" | mobs.mod = "redo" | ||||||
| mobs.version = "20170908" | mobs.version = "20170915" | ||||||
|  |  | ||||||
|  |  | ||||||
| -- Intllib | -- Intllib | ||||||
| @@ -814,12 +814,17 @@ local breed = function(self) | |||||||
| 				collisionbox = self.base_colbox, | 				collisionbox = self.base_colbox, | ||||||
| 			}) | 			}) | ||||||
|  |  | ||||||
| 			-- jump when fully grown so not to fall into ground | 			-- custom function when child grows up | ||||||
| 			self.object:setvelocity({ | 			if self.on_grown then | ||||||
| 				x = 0, | 				self.on_grown(self) | ||||||
| 				y = self.jump_height, | 			else | ||||||
| 				z = 0 | 				-- jump when fully grown so as not to fall into ground | ||||||
| 			}) | 				self.object:setvelocity({ | ||||||
|  | 					x = 0, | ||||||
|  | 					y = self.jump_height, | ||||||
|  | 					z = 0 | ||||||
|  | 				}) | ||||||
|  | 			end | ||||||
| 		end | 		end | ||||||
|  |  | ||||||
| 		return | 		return | ||||||
| @@ -838,7 +843,7 @@ local breed = function(self) | |||||||
| 		end | 		end | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	-- find another same animal who is also horny and mate if close enough | 	-- find another same animal who is also horny and mate if nearby | ||||||
| 	if self.horny == true | 	if self.horny == true | ||||||
| 	and self.hornytimer <= 40 then | 	and self.hornytimer <= 40 then | ||||||
|  |  | ||||||
| @@ -892,14 +897,27 @@ local breed = function(self) | |||||||
| 				-- spawn baby | 				-- spawn baby | ||||||
| 				minetest.after(5, function() | 				minetest.after(5, function() | ||||||
|  |  | ||||||
|  | 					-- custom breed function | ||||||
|  | 					if self.on_breed then | ||||||
|  |  | ||||||
|  | 						-- when false skip going any further | ||||||
|  | 						if self.on_breed(self, ent) == false then | ||||||
|  | 								return | ||||||
|  | 						end | ||||||
|  | 					else | ||||||
|  | 						effect(pos, 15, "tnt_smoke.png", 1, 2, 2, 15, 5) | ||||||
|  | 					end | ||||||
|  |  | ||||||
| 					local mob = minetest.add_entity(pos, self.name) | 					local mob = minetest.add_entity(pos, self.name) | ||||||
| 					local ent2 = mob:get_luaentity() | 					local ent2 = mob:get_luaentity() | ||||||
| 					local textures = self.base_texture | 					local textures = self.base_texture | ||||||
|  |  | ||||||
|  | 					-- using specific child texture (if found) | ||||||
| 					if self.child_texture then | 					if self.child_texture then | ||||||
| 						textures = self.child_texture[1] | 						textures = self.child_texture[1] | ||||||
| 					end | 					end | ||||||
|  |  | ||||||
|  | 					-- and resize to half height | ||||||
| 					mob:set_properties({ | 					mob:set_properties({ | ||||||
| 						textures = textures, | 						textures = textures, | ||||||
| 						visual_size = { | 						visual_size = { | ||||||
| @@ -915,6 +933,7 @@ local breed = function(self) | |||||||
| 							self.base_colbox[6] * .5, | 							self.base_colbox[6] * .5, | ||||||
| 						}, | 						}, | ||||||
| 					}) | 					}) | ||||||
|  | 					-- that is tamed and owned by parents' owner | ||||||
| 					ent2.child = true | 					ent2.child = true | ||||||
| 					ent2.tamed = true | 					ent2.tamed = true | ||||||
| 					ent2.owner = self.owner | 					ent2.owner = self.owner | ||||||
| @@ -2059,6 +2078,15 @@ end | |||||||
| -- deal damage and effects when mob punched | -- deal damage and effects when mob punched | ||||||
| local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) | local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) | ||||||
|  |  | ||||||
|  | 	-- custom punch function | ||||||
|  | 	if self.do_punch then | ||||||
|  |  | ||||||
|  | 		-- when false skip going any further | ||||||
|  | 		if self.do_punch(self, hitter, tflp, tool_caps, dir) == false then | ||||||
|  | 			return | ||||||
|  | 		end | ||||||
|  | 	end | ||||||
|  |  | ||||||
| 	-- mob health check | 	-- mob health check | ||||||
| 	if self.health <= 0 then | 	if self.health <= 0 then | ||||||
| 		return | 		return | ||||||
| @@ -2157,12 +2185,12 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) | |||||||
| 			local s = random(0, #weapon:get_definition().sounds) | 			local s = random(0, #weapon:get_definition().sounds) | ||||||
|  |  | ||||||
| 			minetest.sound_play(weapon:get_definition().sounds[s], { | 			minetest.sound_play(weapon:get_definition().sounds[s], { | ||||||
| 				object = hitter, | 				object = self.object, --hitter, | ||||||
| 				max_hear_distance = 8 | 				max_hear_distance = 8 | ||||||
| 			}) | 			}) | ||||||
| 		else | 		else | ||||||
| 			minetest.sound_play("default_punch", { | 			minetest.sound_play("default_punch", { | ||||||
| 				object = hitter, | 				object = self.object, --hitter, | ||||||
| 				max_hear_distance = 5 | 				max_hear_distance = 5 | ||||||
| 			}) | 			}) | ||||||
| 		end | 		end | ||||||
| @@ -2704,8 +2732,14 @@ minetest.register_entity(name, { | |||||||
|  |  | ||||||
| 	on_step = mob_step, | 	on_step = mob_step, | ||||||
|  |  | ||||||
|  | 	do_punch = def.do_punch, | ||||||
|  |  | ||||||
| 	on_punch = mob_punch, | 	on_punch = mob_punch, | ||||||
|  |  | ||||||
|  | 	on_breed = def.on_breed, | ||||||
|  |  | ||||||
|  | 	on_grown = def.on_grown, | ||||||
|  |  | ||||||
| 	on_activate = function(self, staticdata, dtime) | 	on_activate = function(self, staticdata, dtime) | ||||||
| 		return mob_activate(self, staticdata, def, dtime) | 		return mob_activate(self, staticdata, def, dtime) | ||||||
| 	end, | 	end, | ||||||
|   | |||||||
							
								
								
									
										18
									
								
								api.txt
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								api.txt
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | |||||||
|  |  | ||||||
| MOB API (1st September 2017) | MOB API (15th September 2017) | ||||||
|  |  | ||||||
| The mob api is a function that can be called on by other mods to add new animals or monsters into minetest. | The mob api is a function that can be called on by other mods to add new animals or monsters into minetest. | ||||||
|  |  | ||||||
| @@ -75,9 +75,7 @@ This functions registers a new mob as a Minetest entity. | |||||||
|         'fall_damage' will mob be hurt when falling from height |         'fall_damage' will mob be hurt when falling from height | ||||||
|         'fall_speed' maximum falling velocity of mob (default is -10 and must be below -2) |         'fall_speed' maximum falling velocity of mob (default is -10 and must be below -2) | ||||||
|         'fear_height' when mob walks near a drop then anything over this value makes it stop and turn back (default is 0 to disable) |         'fear_height' when mob walks near a drop then anything over this value makes it stop and turn back (default is 0 to disable) | ||||||
|         'on_die' a function that is called when the mob is killed the parameters are (self, pos) |  | ||||||
|         'floats' 1 to float in water, 0 to sink |         'floats' 1 to float in water, 0 to sink | ||||||
|         'on_rightclick' its same as in minetest.register_entity() |  | ||||||
|         'pathfinding' set to 1 for mobs to use pathfinder feature to locate player, set to 2 so they can build/break also (only works with dogfight attack) |         'pathfinding' set to 1 for mobs to use pathfinder feature to locate player, set to 2 so they can build/break also (only works with dogfight attack) | ||||||
|         'attack_type' the attack type of a monster |         'attack_type' the attack type of a monster | ||||||
|             'dogfight' follows player in range and attacks when in reach |             'dogfight' follows player in range and attacks when in reach | ||||||
| @@ -89,13 +87,11 @@ This functions registers a new mob as a Minetest entity. | |||||||
|         'dogshoot_count2_max' number of seconds before switching back to shoot mode. |         'dogshoot_count2_max' number of seconds before switching back to shoot mode. | ||||||
|         'custom_attack' when set this function is called instead of the normal mob melee attack, parameters are (self, to_attack) |         'custom_attack' when set this function is called instead of the normal mob melee attack, parameters are (self, to_attack) | ||||||
|         'double_melee_attack' if false then api will choose randomly between 'punch' and 'punch2' attack animations |         'double_melee_attack' if false then api will choose randomly between 'punch' and 'punch2' attack animations | ||||||
|         'on_blast' is called when an explosion happens near mob when using TNT functions, parameters are (object, damage) and returns (do_damage, do_knockback, drops) |  | ||||||
|         'explosion_radius' radius of explosion attack (defaults to 1) |         'explosion_radius' radius of explosion attack (defaults to 1) | ||||||
|         'arrow' if the attack_type is "shoot" or "dogshoot" then the entity name of a pre-defined arrow is required, see below for arrow definition. |         'arrow' if the attack_type is "shoot" or "dogshoot" then the entity name of a pre-defined arrow is required, see below for arrow definition. | ||||||
|         'shoot_interval' the minimum shoot interval |         'shoot_interval' the minimum shoot interval | ||||||
|         'shoot_offset' +/- value to position arrow/fireball when fired |         'shoot_offset' +/- value to position arrow/fireball when fired | ||||||
|         'reach' how far a reach this mob has, default is 3 |         'reach' how far a reach this mob has, default is 3 | ||||||
|         'on_spawn' is a custom function that runs on mob spawn with 'self' as variable, return true at end of function to run onyl once. |  | ||||||
|         'sounds' this is a table with sounds of the mob |         'sounds' this is a table with sounds of the mob | ||||||
|             'random' random sounds during gameplay |             'random' random sounds during gameplay | ||||||
|             'war_cry' sound when starting to attack player |             'war_cry' sound when starting to attack player | ||||||
| @@ -107,6 +103,18 @@ This functions registers a new mob as a Minetest entity. | |||||||
|             'explode' sound when exploding |             'explode' sound when exploding | ||||||
|             'distance' maximum distance sounds are heard from (default is 10) |             'distance' maximum distance sounds are heard from (default is 10) | ||||||
|  |  | ||||||
|  | Custom mob functions inside mob registry: | ||||||
|  |  | ||||||
|  |         'on_die' a function that is called when the mob is killed the parameters are (self, pos) | ||||||
|  |         'on_rightclick' its same as in minetest.register_entity() | ||||||
|  |         'on_blast' is called when an explosion happens near mob when using TNT functions, parameters are (object, damage) and returns (do_damage, do_knockback, drops) | ||||||
|  |         'on_spawn' is a custom function that runs on mob spawn with 'self' as variable, return true at end of function to run only once. | ||||||
|  |         'on_breed' called when two similar mobs breed, paramaters are (parent1, parent2) objects, return false to stop child from being resized and owner/tamed flags and child textures being applied. | ||||||
|  |         'on_grown' is called when a child mob has grown up, only paramater is (self). | ||||||
|  |         'do_punch' called when mob is punched with paramaters (self, hitter, time_from_last_punch, tool_capabilities, direction), return false to stop punch damage and knockback from taking place. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| Mobs can look for specific nodes as they walk and replace them to mimic eating. | Mobs can look for specific nodes as they walk and replace them to mimic eating. | ||||||
|  |  | ||||||
|         'replace_what' group if items to replace e.g. {"farming:wheat_8", "farming:carrot_8"} |         'replace_what' group if items to replace e.g. {"farming:wheat_8", "farming:carrot_8"} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user