mirror of
https://codeberg.org/tenplus1/mobs_redo.git
synced 2025-07-23 18:40:25 +02:00
Compare commits
8 Commits
b9ad166821
...
0156e04ebd
Author | SHA1 | Date | |
---|---|---|---|
0156e04ebd | |||
62bd960e38 | |||
9c00616a00 | |||
813909c86c | |||
68fef94ba8 | |||
92ab4eeb2e | |||
c5b74230e5 | |||
5958270158 |
40
api.lua
40
api.lua
@ -6,7 +6,7 @@ local use_cmi = minetest.global_exists("cmi")
|
||||
|
||||
mobs = {
|
||||
mod = "redo",
|
||||
version = "20191116",
|
||||
version = "20200227",
|
||||
intllib = S,
|
||||
invis = minetest.global_exists("invisibility") and invisibility or {}
|
||||
}
|
||||
@ -230,10 +230,14 @@ function mob_class:set_velocity(v)
|
||||
|
||||
local yaw = (self.object:get_yaw() or 0) + self.rotate
|
||||
|
||||
-- nil check for velocity
|
||||
v = v or 0
|
||||
|
||||
-- set velocity with hard limit of 10
|
||||
self.object:set_velocity({
|
||||
x = (sin(yaw) * -v) + c_x,
|
||||
y = self.object:get_velocity().y,
|
||||
z = (cos(yaw) * v) + c_y
|
||||
x = max(-10, min((sin(yaw) * -v) + c_x, 10)),
|
||||
y = max(-10, min((self.object:get_velocity().y or 0), 10)),
|
||||
z = max(-10, min((cos(yaw) * v) + c_y, 10))
|
||||
})
|
||||
end
|
||||
|
||||
@ -1338,18 +1342,23 @@ function mob_class:replace(pos)
|
||||
|
||||
-- print ("replace node = ".. minetest.get_node(pos).name, pos.y)
|
||||
|
||||
local oldnode = {name = what}
|
||||
local newnode = {name = with}
|
||||
local on_replace_return
|
||||
|
||||
if self.on_replace then
|
||||
on_replace_return = self:on_replace(pos, oldnode, newnode)
|
||||
|
||||
local oldnode = what
|
||||
local newnode = with
|
||||
|
||||
-- convert any group: replacements to actual node name
|
||||
if oldnode:find("group:") then
|
||||
oldnode = minetest.get_node(pos).name
|
||||
end
|
||||
|
||||
if on_replace_return ~= false then
|
||||
minetest.set_node(pos, {name = with})
|
||||
if self:on_replace(pos, oldnode, newnode) == false then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
minetest.set_node(pos, {name = with})
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -3290,6 +3299,7 @@ minetest.register_entity(name, setmetatable({
|
||||
jump_height = def.jump_height,
|
||||
drawtype = def.drawtype, -- DEPRECATED, use rotate instead
|
||||
rotate = math.rad(def.rotate or 0), -- 0=front, 90=side, 180=back, 270=side2
|
||||
glow = def.glow,
|
||||
lifetimer = def.lifetimer,
|
||||
hp_min = max(1, (def.hp_min or 5) * difficulty),
|
||||
hp_max = max(1, (def.hp_max or 10) * difficulty),
|
||||
@ -4261,13 +4271,17 @@ function mobs:alias_mob(old_name, new_name)
|
||||
|
||||
physical = false,
|
||||
|
||||
on_activate = function(self)
|
||||
on_activate = function(self, staticdata)
|
||||
|
||||
if minetest.registered_entities[new_name] then
|
||||
minetest.add_entity(self.object:get_pos(), new_name)
|
||||
minetest.add_entity(self.object:get_pos(), new_name, staticdata)
|
||||
end
|
||||
|
||||
self.object:remove()
|
||||
end,
|
||||
|
||||
get_staticdata = function(self)
|
||||
return self
|
||||
end
|
||||
})
|
||||
end
|
||||
|
64
api.txt
64
api.txt
@ -186,6 +186,7 @@ functions needed for the mob to work properly which contains the following:
|
||||
self.gotten is true for mobs.
|
||||
'rotate' custom model rotation, 0 = front, 90 = side, 180 = back,
|
||||
270 = other side.
|
||||
'glow' has mob glow without light source, 0 to 15 or nil to disable
|
||||
'double_melee_attack' when true has the api choose between 'punch' and
|
||||
'punch2' animations. [DEPRECATED]
|
||||
|
||||
@ -321,43 +322,45 @@ for each mob.
|
||||
Spawning Mobs in World
|
||||
----------------------
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:tree_monster",
|
||||
nodes = {"group:leaves"},
|
||||
max_light = 7,
|
||||
})
|
||||
|
||||
Spawn functions require the following settings, some of which already have a
|
||||
default setting and can be omitted:
|
||||
|
||||
'name' is the name of the animal/monster
|
||||
'nodes' is a list of nodenames on that the animal/monster can
|
||||
spawn on top of (defaults to {"group:dirt", "group:stone"}
|
||||
'neighbors' is a list of nodenames on that the animal/monster will
|
||||
spawn beside (default is {"air"})
|
||||
'interval' is same as in register_abm() (default is 30)
|
||||
'chance' is same as in register_abm() (default is 5000)
|
||||
'min_light' is the minimum light level (default is 0)
|
||||
'max_light' is the maximum light (default is 15)
|
||||
'min_height' is the minimum height a mob can spawn (default: -31000)
|
||||
'max_height' is the maximum height a mob can spawn (default is 31000)
|
||||
'active_object_count' number of this type of mob to spawn at one time inside
|
||||
map area (default is 1)
|
||||
'day_toggle' true for day spawning, false for night or nil for
|
||||
anytime
|
||||
'on_spawn' is a custom function which runs after mob has spawned
|
||||
and gives self and pos values.
|
||||
|
||||
The older spawn functions are still active and working but have no defaults like
|
||||
the mobs:spawn, so it is recommended to use the above instead.
|
||||
|
||||
mobs:register_spawn(name, nodes, max_light, min_light, chance,
|
||||
active_object_count, max_height, day_toggle)
|
||||
|
||||
mobs:spawn_specfic(name, nodes, neighbors, min_light, max_light, interval,
|
||||
chance, active_object_count, min_height, max_height, day_toggle, on_spawn)
|
||||
|
||||
These functions register a spawn algorithm for the mob. Without this function
|
||||
the call the mobs won't spawn.
|
||||
|
||||
'name' is the name of the animal/monster
|
||||
'nodes' is a list of nodenames on that the animal/monster can
|
||||
spawn on top of
|
||||
'neighbors' is a list of nodenames on that the animal/monster will
|
||||
spawn beside (default is {"air"} for
|
||||
mobs:register_spawn)
|
||||
'max_light' is the maximum of light
|
||||
'min_light' is the minimum of light
|
||||
'interval' is same as in register_abm() (default is 30 for
|
||||
mobs:register_spawn)
|
||||
'chance' is same as in register_abm()
|
||||
'active_object_count' number of this type of mob to spawn at one time inside
|
||||
map area
|
||||
'min_height' is the minimum height the mob can spawn
|
||||
'max_height' is the maximum height the mob can spawn
|
||||
'day_toggle' true for day spawning, false for night or nil for
|
||||
anytime
|
||||
'on_spawn' is a custom function which runs after mob has spawned
|
||||
and gives self and pos values.
|
||||
|
||||
A simpler way to handle mob spawns has been added with the mobs:spawn(def)
|
||||
command which uses above names to make settings clearer:
|
||||
|
||||
mobs:spawn({name = "mobs_monster:tree_monster",
|
||||
nodes = {"group:leaves"},
|
||||
max_light = 7,
|
||||
})
|
||||
|
||||
|
||||
For each mob that spawns with this function is a field in mobs.spawning_mobs.
|
||||
It tells if the mob should spawn or not. Default is true. So other mods can
|
||||
@ -417,7 +420,8 @@ Spawn Eggs
|
||||
|
||||
mobs:register_egg(name, description, background, addegg, no_creative)
|
||||
|
||||
This function registers a spawn egg which can be used by admin to properly spawn in a mob.
|
||||
This function registers a spawn egg which can be used to properly spawn in a mob.
|
||||
Animals are spawned as tamed unless sneak/shift is held while spawning.
|
||||
|
||||
'name' this is the name of your new mob to spawn e.g. "mob:sheep"
|
||||
'description' the name of the new egg you are creating e.g. "Spawn Sheep"
|
||||
@ -747,7 +751,7 @@ mobs:register_mob("mob_horse:horse", {
|
||||
if inv:room_for_item("main", "mobs:saddle") then
|
||||
inv:add_item("main", "mobs:saddle")
|
||||
else
|
||||
minetest.add_item(clicker.getpos(), "mobs:saddle")
|
||||
minetest.add_item(clicker.get_pos(), "mobs:saddle")
|
||||
end
|
||||
|
||||
-- attach player to horse
|
||||
|
130
locale/zh_CN.po
Normal file
130
locale/zh_CN.po
Normal file
@ -0,0 +1,130 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# IFRFSX<1079092922@qq.com>, 2020.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-07-02 16:48+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: api.lua
|
||||
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
|
||||
msgstr "** 和平模式已激活——没有怪物会产生"
|
||||
|
||||
#: api.lua
|
||||
msgid "Mob has been protected!"
|
||||
msgstr "Mob 已经被保护了!"
|
||||
|
||||
#: api.lua
|
||||
msgid "@1 (Tamed)"
|
||||
msgstr "@1(已驯服)"
|
||||
|
||||
#: api.lua
|
||||
msgid "Not tamed!"
|
||||
msgstr "没有驯服!"
|
||||
|
||||
#: api.lua
|
||||
msgid "@1 is owner!"
|
||||
msgstr "@1 是主人"
|
||||
|
||||
#: api.lua
|
||||
msgid "Missed!"
|
||||
msgstr "没抓住!"
|
||||
|
||||
#: api.lua
|
||||
msgid "Already protected!"
|
||||
msgstr "已经被保护!"
|
||||
|
||||
#: api.lua
|
||||
msgid "@1 at full health (@2)"
|
||||
msgstr "@1已经满血(@2)"
|
||||
|
||||
#: api.lua
|
||||
msgid "@1 has been tamed!"
|
||||
msgstr "@1已经被驯服!"
|
||||
|
||||
#: api.lua
|
||||
msgid "Enter name:"
|
||||
msgstr "输入名称:"
|
||||
|
||||
#: api.lua
|
||||
msgid "Rename"
|
||||
msgstr "重新命名"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Name Tag"
|
||||
msgstr "名称标签"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Leather"
|
||||
msgstr "皮革"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Raw Meat"
|
||||
msgstr "生肉"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Meat"
|
||||
msgstr "肉"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Lasso (right-click animal to put in inventory)"
|
||||
msgstr "套索(右键单击动物以放入物品栏)"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Net (right-click animal to put in inventory)"
|
||||
msgstr "网(右键单击动物以放入物品栏)"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Steel Shears (right-click to shear)"
|
||||
msgstr "钢剪(右键单击以剪切)"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Mob Protection Rune"
|
||||
msgstr "Mob 保护符文"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Saddle"
|
||||
msgstr "鞍"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Mob Fence"
|
||||
msgstr "Mob 栅栏"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Mob Spawner"
|
||||
msgstr "Mob 孵化器"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Mob MinLight MaxLight Amount PlayerDist"
|
||||
msgstr "Mob/最小光量/最大光量/玩家距离"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Spawner Not Active (enter settings)"
|
||||
msgstr "孵化器未使用(输入设置)"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Spawner Active (@1)"
|
||||
msgstr "孵化器正在运转(@1)"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Mob Spawner settings failed!"
|
||||
msgstr "Mob 孵化器设置失败!"
|
||||
|
||||
#: spawner.lua
|
||||
msgid ""
|
||||
"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] "
|
||||
"distance[1-20] y_offset[-10 to 10]”"
|
||||
msgstr ""
|
||||
"语法: “物品名称 最小光亮[0-14] 最大光亮[0-14] 范围内的最大Mob数量[0 to disable] "
|
||||
"距离[1-20] y_offset[-10 to 10]”"
|
130
locale/zh_TW.po
Normal file
130
locale/zh_TW.po
Normal file
@ -0,0 +1,130 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# IFRFSX<1079092922@qq.com>, 2020.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-07-02 16:48+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: api.lua
|
||||
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
|
||||
msgstr "** 和平模式已激活——沒有怪物會產生"
|
||||
|
||||
#: api.lua
|
||||
msgid "Mob has been protected!"
|
||||
msgstr "Mob 已經被保護了!"
|
||||
|
||||
#: api.lua
|
||||
msgid "@1 (Tamed)"
|
||||
msgstr "@1(已馴服)"
|
||||
|
||||
#: api.lua
|
||||
msgid "Not tamed!"
|
||||
msgstr "沒有馴服!"
|
||||
|
||||
#: api.lua
|
||||
msgid "@1 is owner!"
|
||||
msgstr "@1 是主人"
|
||||
|
||||
#: api.lua
|
||||
msgid "Missed!"
|
||||
msgstr "沒抓住!"
|
||||
|
||||
#: api.lua
|
||||
msgid "Already protected!"
|
||||
msgstr "已經被保護!"
|
||||
|
||||
#: api.lua
|
||||
msgid "@1 at full health (@2)"
|
||||
msgstr "@1已經滿血(@2)"
|
||||
|
||||
#: api.lua
|
||||
msgid "@1 has been tamed!"
|
||||
msgstr "@1已經被馴服!"
|
||||
|
||||
#: api.lua
|
||||
msgid "Enter name:"
|
||||
msgstr "輸入名稱:"
|
||||
|
||||
#: api.lua
|
||||
msgid "Rename"
|
||||
msgstr "重新命名"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Name Tag"
|
||||
msgstr "名稱標籤"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Leather"
|
||||
msgstr "皮革"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Raw Meat"
|
||||
msgstr "生肉"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Meat"
|
||||
msgstr "肉"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Lasso (right-click animal to put in inventory)"
|
||||
msgstr "套索(右鍵單擊動物以放入物品欄)"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Net (right-click animal to put in inventory)"
|
||||
msgstr "網(右鍵單擊動物以放入物品欄)"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Steel Shears (right-click to shear)"
|
||||
msgstr "鋼剪(右鍵單擊以剪切)"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Mob Protection Rune"
|
||||
msgstr "Mob 保護符文"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Saddle"
|
||||
msgstr "鞍"
|
||||
|
||||
#: crafts.lua
|
||||
msgid "Mob Fence"
|
||||
msgstr "Mob 柵欄"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Mob Spawner"
|
||||
msgstr "Mob 孵化器"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Mob MinLight MaxLight Amount PlayerDist"
|
||||
msgstr "Mob/最小光量/最大光量/玩家距離"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Spawner Not Active (enter settings)"
|
||||
msgstr "孵化器未使用(輸入設置)"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Spawner Active (@1)"
|
||||
msgstr "孵化器正在運轉(@1)"
|
||||
|
||||
#: spawner.lua
|
||||
msgid "Mob Spawner settings failed!"
|
||||
msgstr "Mob 孵化器設置失敗!"
|
||||
|
||||
#: spawner.lua
|
||||
msgid ""
|
||||
"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] "
|
||||
"distance[1-20] y_offset[-10 to 10]”"
|
||||
msgstr ""
|
||||
"語法: “物品名稱 最小光亮[0-14] 最大光亮[0-14] 範圍內的最大Mob數量[0 to disable] "
|
||||
"距離[1-20] y_offset[-10 to 10]”"
|
@ -23,7 +23,7 @@ Lucky Blocks: 9
|
||||
|
||||
|
||||
Changelog:
|
||||
- 1.50 - Added new line_of_sight function that uses raycasting if mt5.0 is found (thanks Astrobe), dont spawn mobs if world anchor nearby (technic or simple_anchor mods)
|
||||
- 1.50 - Added new line_of_sight function that uses raycasting if mt5.0 is found (thanks Astrobe), dont spawn mobs if world anchor nearby (technic or simple_anchor mods), chinese local added
|
||||
- 1.49- Added mobs:force_capture(self, player) function, api functions now use metatables thanks to bell07
|
||||
- 1.48- Add mobs:set_velocity(self, velocity) global function
|
||||
- 1.47- Mob damage changes, min and max light level for damage added, ignition sources checked for lava damage
|
||||
|
Reference in New Issue
Block a user