Cleanup mobs API a bit and add more achievements
This commit is contained in:
parent
b991f0e4a3
commit
a66e8c7620
@ -12,21 +12,6 @@ achievements.registered_achievements_list = {}
|
||||
local achievements_file = minetest.get_worldpath() .. "/achievements.dat"
|
||||
local saving = false
|
||||
|
||||
function achievements.register_achievement(name, def)
|
||||
local rd = {
|
||||
title = def.title or name, -- good-looking name of the achievement
|
||||
description = def.description or "The " .. name .. " achievement", -- description of what the achievement is, and how to get it
|
||||
times = def.times or 1, -- how many times to trigger before getting the achievement
|
||||
dignode = def.dignode or nil, -- digging this node also triggers the achievement
|
||||
placenode = def.placenode or nil, -- placing this node also triggers the achievement
|
||||
craftitem = def.craftitem or nil, -- crafting this item also triggers the achievement
|
||||
}
|
||||
|
||||
achievements.registered_achievements[name] = def
|
||||
|
||||
table.insert(achievements.registered_achievements_list, name)
|
||||
end
|
||||
|
||||
local function save_achievements()
|
||||
local f = io.open(achievements_file, "w")
|
||||
|
||||
@ -57,9 +42,26 @@ local function load_achievements()
|
||||
end
|
||||
end
|
||||
|
||||
function achievements.register_achievement(name, def)
|
||||
local rd = {
|
||||
title = def.title or name, -- good-looking name of the achievement
|
||||
description = def.description or "The " .. name .. " achievement", -- description of what the achievement is, and how to get it
|
||||
times = def.times or 1, -- how many times to trigger before getting the achievement
|
||||
dignode = def.dignode or nil, -- digging this node also triggers the achievement
|
||||
placenode = def.placenode or nil, -- placing this node also triggers the achievement
|
||||
craftitem = def.craftitem or nil, -- crafting this item also triggers the achievement
|
||||
}
|
||||
|
||||
achievements.registered_achievements[name] = def
|
||||
|
||||
table.insert(achievements.registered_achievements_list, name)
|
||||
end
|
||||
|
||||
function achievements.trigger_achievement(player, aname, times)
|
||||
local name = player:get_player_name()
|
||||
|
||||
times = times or 1
|
||||
|
||||
if achievements.achievements[name] == nil then
|
||||
achievements.achievements[name] = {}
|
||||
end
|
||||
@ -72,19 +74,25 @@ function achievements.trigger_achievement(player, aname, times)
|
||||
return
|
||||
end
|
||||
|
||||
achievements.achievements[name][aname] = achievements.achievements[name][aname] + (times or 1)
|
||||
achievements.achievements[name][aname] = achievements.achievements[name][aname] + times
|
||||
|
||||
if not achievements.registered_achievements[aname] then
|
||||
default.log("[mod:achievements] Cannot find registered achievement " .. aname, "error")
|
||||
default.log("[mod:achievements] Cannot find registered achievement "
|
||||
.. aname, "error")
|
||||
return
|
||||
end
|
||||
|
||||
if achievements.achievements[name][aname] >= achievements.registered_achievements[aname].times then
|
||||
if achievements.achievements[name][aname]
|
||||
>= achievements.registered_achievements[aname].times then
|
||||
achievements.achievements[name][aname] = -1
|
||||
minetest.after(2.0, function()
|
||||
minetest.chat_send_all(
|
||||
minetest.colorize("#0f0", "*** " .. name .." has earned the achievement [" ..
|
||||
achievements.registered_achievements[aname].title .. "]"))
|
||||
minetest.after(
|
||||
2.0,
|
||||
function()
|
||||
minetest.chat_send_all(
|
||||
minetest.colorize(
|
||||
"#0f0",
|
||||
"*** " .. name .." has earned the achievement [" ..
|
||||
achievements.registered_achievements[aname].title .. "]"))
|
||||
end)
|
||||
end
|
||||
|
||||
@ -177,7 +185,8 @@ crafting.register_on_craft(on_craft)
|
||||
|
||||
local form = default.ui.get_page("default:default")
|
||||
form = form .. "tableoptions[background=#DDDDDD30]"
|
||||
form = form .. "tablecolumns[text,align=left,width=11;text,align=left,width=28;text,align=left,width=5]"
|
||||
form = form .. "tablecolumns[text,align=left,width=11;text,align=left,width=28;"
|
||||
.. "text,align=left,width=5]"
|
||||
default.ui.register_page("achievements:achievements", form)
|
||||
|
||||
function achievements.get_formspec(name, row)
|
||||
@ -209,13 +218,15 @@ function achievements.get_formspec(name, row)
|
||||
end
|
||||
|
||||
achievement_list = achievement_list .. minetest.formspec_escape(def.title) .. ","
|
||||
achievement_list = achievement_list .. minetest.formspec_escape(def.description) .. ","
|
||||
achievement_list = achievement_list .. minetest.formspec_escape(def.description)
|
||||
.. ","
|
||||
achievement_list = achievement_list .. progress
|
||||
end
|
||||
|
||||
local form = default.ui.get_page("achievements:achievements")
|
||||
|
||||
form = form .. "table[0.25,2.5;7.75,5.5;achievement_list;" .. achievement_list .. ";" .. row .. "]"
|
||||
form = form .. "table[0.25,2.5;7.75,5.5;achievement_list;" .. achievement_list
|
||||
.. ";" .. row .. "]"
|
||||
|
||||
local aname = achievements.registered_achievements_list[row]
|
||||
local def = achievements.registered_achievements[aname]
|
||||
@ -231,7 +242,11 @@ function achievements.get_formspec(name, row)
|
||||
progress = "Missing"
|
||||
end
|
||||
|
||||
form = form .. "label[0.25,8.15;" .. minetest.formspec_escape(amt_gotten .. " of " .. #achievements.registered_achievements_list .. " achievements gotten, " .. amt_progress .. " in progress") .. "]"
|
||||
form = form .. "label[0.25,8.15;"
|
||||
.. minetest.formspec_escape(amt_gotten.. " of "
|
||||
.. #achievements.registered_achievements_list
|
||||
.. " achievements gotten, " .. amt_progress
|
||||
.. " in progress") .. "]"
|
||||
|
||||
form = form .. "label[0.25,0.25;" .. minetest.formspec_escape(def.title) .. "]"
|
||||
form = form .. "label[7.25,0.25;" .. minetest.formspec_escape(progress) .. "]"
|
||||
@ -258,7 +273,11 @@ local function receive_fields(player, form_name, fields)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.show_formspec(name, "achievements:achievements", achievements.get_formspec(name, selected))
|
||||
minetest.show_formspec(
|
||||
name,
|
||||
"achievements:achievements",
|
||||
achievements.get_formspec(name, selected)
|
||||
)
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(receive_fields)
|
||||
|
36
mods/mobs/achievements.lua
Normal file
36
mods/mobs/achievements.lua
Normal file
@ -0,0 +1,36 @@
|
||||
|
||||
--
|
||||
-- Achievements
|
||||
--
|
||||
|
||||
achievements.register_achievement(
|
||||
"hunter",
|
||||
{
|
||||
title = "Hunter",
|
||||
description = "Kill 5 animals for food",
|
||||
times = 5,
|
||||
})
|
||||
|
||||
achievements.register_achievement(
|
||||
"bomb_has_been_defused",
|
||||
{
|
||||
title = "Bomb has Been Defused!",
|
||||
description = "Kill a Mineturtle",
|
||||
times = 1,
|
||||
})
|
||||
|
||||
achievements.register_achievement(
|
||||
"ranger",
|
||||
{
|
||||
title = "Ranger",
|
||||
description = "Capture a tame animal",
|
||||
times = 1,
|
||||
})
|
||||
|
||||
achievements.register_achievement(
|
||||
"best_friends_forever",
|
||||
{
|
||||
title = "Best Friends Forever",
|
||||
description = "Tame an animal",
|
||||
times = 1,
|
||||
})
|
2795
mods/mobs/api.lua
2795
mods/mobs/api.lua
File diff suppressed because it is too large
Load Diff
@ -45,32 +45,54 @@ mobs:register_mob(
|
||||
punch_start = 90,
|
||||
punch_end = 101,
|
||||
},
|
||||
on_rightclick = function(self, clicker)
|
||||
mobs:feed_tame(self, clicker, 8, true)
|
||||
mobs:capture_mob(self, clicker, 0, 5, 40, false, nil)
|
||||
end,
|
||||
})
|
||||
|
||||
mobs:register_spawn("mobs:boar", {"default:dirt_with_grass"}, 20, 10, 15000, 1, 31000)
|
||||
on_rightclick = function(self, clicker)
|
||||
mobs:feed_tame(self, clicker, 8, true)
|
||||
|
||||
mobs:capture_mob(self, clicker, 0, 5, 40, false, nil)
|
||||
end,
|
||||
on_die = function(self, pos, hitter)
|
||||
if hitter == nil or (hitter ~= nil and not hitter:is_player()) then
|
||||
return
|
||||
end
|
||||
|
||||
achievements.trigger_achievement(hitter, "hunter")
|
||||
end,
|
||||
})
|
||||
|
||||
mobs:register_spawn(
|
||||
"mobs:boar",
|
||||
{
|
||||
"default:dirt_with_grass"
|
||||
},
|
||||
20,
|
||||
10,
|
||||
15000,
|
||||
1,
|
||||
31000
|
||||
)
|
||||
|
||||
mobs:register_egg("mobs:boar", "Boar", "mobs_boar_inventory.png")
|
||||
|
||||
-- raw porkchop
|
||||
-- Raw porkchop
|
||||
|
||||
minetest.register_craftitem(
|
||||
"mobs:pork_raw",
|
||||
{
|
||||
description = "Raw Porkchop",
|
||||
inventory_image = "mobs_pork_raw.png",
|
||||
on_use = minetest.item_eat({hp = 4, sat = 30}),
|
||||
})
|
||||
})
|
||||
|
||||
-- Cooked porkchop
|
||||
|
||||
-- cooked porkchop
|
||||
minetest.register_craftitem(
|
||||
"mobs:pork",
|
||||
{
|
||||
description = "Cooked Porkchop",
|
||||
inventory_image = "mobs_pork_cooked.png",
|
||||
on_use = minetest.item_eat({hp = 8, sat = 50}),
|
||||
})
|
||||
})
|
||||
|
||||
minetest.register_craft(
|
||||
{
|
||||
@ -78,4 +100,4 @@ minetest.register_craft(
|
||||
output = "mobs:pork",
|
||||
recipe = "mobs:pork_raw",
|
||||
cooktime = 5,
|
||||
})
|
||||
})
|
||||
|
@ -1,4 +1,10 @@
|
||||
-- wool
|
||||
|
||||
--
|
||||
-- Crafts and items
|
||||
--
|
||||
|
||||
-- Wool
|
||||
|
||||
minetest.register_node(
|
||||
"mobs:wool",
|
||||
{
|
||||
@ -7,25 +13,27 @@ minetest.register_node(
|
||||
is_ground_content = false,
|
||||
groups = {snappy = 2, oddly_breakable_by_hand = 3, fall_damage_add_percent = -25, fuzzy = 1},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
})
|
||||
|
||||
-- Raw meat
|
||||
|
||||
-- raw meat
|
||||
minetest.register_craftitem(
|
||||
"mobs:meat_raw",
|
||||
{
|
||||
description = "Raw Meat",
|
||||
inventory_image = "mobs_meat_raw.png",
|
||||
on_use = minetest.item_eat({hp = 3, sat = 30}),
|
||||
})
|
||||
})
|
||||
|
||||
-- Cooked meat
|
||||
|
||||
-- cooked meat
|
||||
minetest.register_craftitem(
|
||||
"mobs:meat",
|
||||
"mobs:meat",
|
||||
{
|
||||
description = "Cooked Meat",
|
||||
inventory_image = "mobs_meat_cooked.png",
|
||||
on_use = minetest.item_eat({hp = 7, sat = 70}),
|
||||
})
|
||||
})
|
||||
|
||||
minetest.register_craft(
|
||||
{
|
||||
@ -33,40 +41,40 @@ minetest.register_craft(
|
||||
output = "mobs:meat",
|
||||
recipe = "mobs:meat_raw",
|
||||
cooktime = 5,
|
||||
})
|
||||
})
|
||||
|
||||
-- Net
|
||||
|
||||
-- net (right click to capture animal)
|
||||
minetest.register_tool(
|
||||
"mobs:net",
|
||||
{
|
||||
description = "Net (Right-click to capture)",
|
||||
inventory_image = "mobs_net.png",
|
||||
})
|
||||
})
|
||||
|
||||
minetest.register_craft(
|
||||
crafting.register_craft(
|
||||
{
|
||||
output = "mobs:net",
|
||||
recipe = {
|
||||
{"", "", "default:fiber"},
|
||||
{"", "default:fiber", "default:fiber"},
|
||||
{"group:stick", "", ""},
|
||||
items= {
|
||||
"default:fiber 3",
|
||||
"default:stick",
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
-- Lasso
|
||||
|
||||
-- lasso (right click to capture animal)
|
||||
minetest.register_tool(
|
||||
"mobs:lasso",
|
||||
{
|
||||
description = "Lasso (Right-click to capture)",
|
||||
inventory_image = "mobs_lasso.png",
|
||||
})
|
||||
})
|
||||
|
||||
minetest.register_craft(
|
||||
crafting.register_craft(
|
||||
{
|
||||
output = "mobs:lasso",
|
||||
recipe = {
|
||||
{"", "default:rope", ""},
|
||||
{"default:rope", "", "default:rope"},
|
||||
{"group:stick", "default:rope", ""},
|
||||
items = {
|
||||
"default:rope 4",
|
||||
"default:stick",
|
||||
}
|
||||
})
|
||||
})
|
||||
|
@ -1,2 +1,3 @@
|
||||
default
|
||||
util
|
||||
achievements
|
||||
|
@ -1,3 +1,4 @@
|
||||
|
||||
--
|
||||
-- Mobs mod
|
||||
-- By PilzAdam, KrupnovPavel, Zeg9, TenPlus1
|
||||
@ -6,10 +7,12 @@
|
||||
|
||||
local path = minetest.get_modpath("mobs")
|
||||
|
||||
-- Mob Api
|
||||
-- Mob API
|
||||
|
||||
dofile(path.."/api.lua")
|
||||
|
||||
-- Animals
|
||||
|
||||
dofile(path.."/sheep.lua") -- PilzAdam
|
||||
dofile(path.."/boar.lua") -- KrupnoPavel
|
||||
dofile(path.."/skunk.lua") -- Kaadmy
|
||||
@ -17,9 +20,15 @@ dofile(path.."/mineturtle.lua") -- Kaadmy
|
||||
dofile(path.."/walker.lua") -- Kaadmy
|
||||
|
||||
-- NPC
|
||||
|
||||
dofile(path.."/npc.lua") -- TenPlus1
|
||||
|
||||
-- Mob Items
|
||||
-- Mob items and crafts
|
||||
|
||||
dofile(path.."/crafts.lua")
|
||||
|
||||
-- Achievements
|
||||
|
||||
dofile(path.."/achievements.lua")
|
||||
|
||||
default.log("mod:mobs", "loaded")
|
||||
|
@ -1,3 +1,4 @@
|
||||
|
||||
-- Mineturtle by Kaadmy
|
||||
|
||||
mobs:register_mob(
|
||||
@ -46,10 +47,28 @@ mobs:register_mob(
|
||||
punch_end = 60,
|
||||
},
|
||||
on_rightclick = function(self, clicker)
|
||||
mobs:feed_tame(self, clicker, 4, false)
|
||||
mobs:capture_mob(self, clicker, 0, 20, 40, false, nil)
|
||||
end,
|
||||
})
|
||||
mobs:feed_tame(self, clicker, 4, false)
|
||||
mobs:capture_mob(self, clicker, 0, 20, 40, false, nil)
|
||||
end,
|
||||
on_die = function(self, pos, hitter)
|
||||
if hitter == nil or (hitter ~= nil and not hitter:is_player()) then
|
||||
return
|
||||
end
|
||||
|
||||
mobs:register_spawn("mobs:mineturtle", {"default:dirt_with_grass"}, 20, 5, 200000, 1, 31000)
|
||||
mobs:register_egg("mobs:mineturtle", "Mine Turtle", "mobs_mineturtle_inventory.png")
|
||||
achievements.trigger_achievement(hitter, "bomb_has_been_defused")
|
||||
end,
|
||||
})
|
||||
|
||||
mobs:register_spawn(
|
||||
"mobs:mineturtle",
|
||||
{
|
||||
"default:dirt_with_grass"
|
||||
},
|
||||
20,
|
||||
5,
|
||||
200000,
|
||||
1,
|
||||
31000
|
||||
)
|
||||
|
||||
mobs:register_egg("mobs:mineturtle", "Mine Turtle", "mobs_mineturtle_inventory.png")
|
||||
|
@ -1,3 +1,4 @@
|
||||
|
||||
-- Npc by TenPlus1
|
||||
-- Modded by Kaadmy
|
||||
|
||||
@ -63,56 +64,58 @@ for _, npc_type in pairs(npc_types) do
|
||||
punch_end = 219,
|
||||
},
|
||||
on_spawn = function(self)
|
||||
self.npc_type = npc_type
|
||||
end,
|
||||
self.npc_type = npc_type
|
||||
end,
|
||||
on_rightclick = function(self, clicker)
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
local item = clicker:get_wielded_item()
|
||||
local name = clicker:get_player_name()
|
||||
|
||||
-- feed to heal npc
|
||||
if item:get_name() == "mobs:meat" or item:get_name() == "mobs:pork" or item:get_name() == "farming:bread" then
|
||||
|
||||
local hp = self.object:get_hp()
|
||||
-- return if full health
|
||||
if hp >= self.hp_max then
|
||||
minetest.chat_send_player(name, "Villager is no longer hungry.")
|
||||
return
|
||||
end
|
||||
-- Feed to heal npc
|
||||
|
||||
hp = hp + 4
|
||||
if hp > self.hp_max then hp = self.hp_max end
|
||||
self.object:set_hp(hp)
|
||||
if item:get_name() == "mobs:meat" or item:get_name() == "mobs:pork"
|
||||
or item:get_name() == "farming:bread" then
|
||||
|
||||
-- take item
|
||||
if not minetest.setting_getbool("creative_mode") then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
-- right clicking with trading book trades, else changes order if tame
|
||||
-- trading is done in the gold mod
|
||||
else
|
||||
-- if owner switch between follow and stand
|
||||
if not self.npc_trade then
|
||||
self.npc_trade = util.choice_element(gold.trades[self.npc_type], gold.pr)
|
||||
end
|
||||
local hp = self.object:get_hp()
|
||||
-- return if full health
|
||||
if hp >= self.hp_max then
|
||||
minetest.chat_send_player(name, "Villager is no longer hungry.")
|
||||
return
|
||||
end
|
||||
|
||||
if not gold.trade(self.npc_trade, self.npc_type, clicker) then
|
||||
if self.owner and self.owner == clicker:get_player_name() then
|
||||
if self.order == "follow" then
|
||||
self.order = "stand"
|
||||
else
|
||||
self.order = "follow"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
hp = hp + 4
|
||||
if hp > self.hp_max then hp = self.hp_max end
|
||||
self.object:set_hp(hp)
|
||||
|
||||
mobs:feed_tame(self, clicker, 8, false)
|
||||
-- mobs:capture_mob(self, clicker, 20, 5, 10, false, nil)
|
||||
end,
|
||||
})
|
||||
-- take item
|
||||
if not minetest.setting_getbool("creative_mode") then
|
||||
item:take_item()
|
||||
clicker:set_wielded_item(item)
|
||||
end
|
||||
|
||||
-- Right clicking with trading book trades, else changes order if tame
|
||||
-- Trading is done in the gold mod
|
||||
else
|
||||
-- If owner switch between follow and stand
|
||||
|
||||
if not self.npc_trade then
|
||||
self.npc_trade = util.choice_element(
|
||||
gold.trades[self.npc_type], gold.pr)
|
||||
end
|
||||
|
||||
if not gold.trade(self.npc_trade, self.npc_type, clicker) then
|
||||
if self.owner and self.owner == clicker:get_player_name() then
|
||||
if self.order == "follow" then
|
||||
self.order = "stand"
|
||||
else
|
||||
self.order = "follow"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
mobs:feed_tame(self, clicker, 8, false)
|
||||
end,
|
||||
})
|
||||
|
||||
--mobs:register_spawn("mobs:npc", {"default:dirt_with_grass"}, 20, 0, 7000, 1, 31000)
|
||||
mobs:register_egg("mobs:npc_" .. npc_type, "NPC", "default_brick.png^mobs_egg.png")
|
||||
end
|
||||
end
|
||||
|
@ -1,3 +1,4 @@
|
||||
|
||||
-- Sheep by PilzAdam; tweaked for Pixture by Kaadmy
|
||||
|
||||
mobs:register_mob(
|
||||
@ -16,7 +17,7 @@ mobs:register_mob(
|
||||
{"mobs_sheep.png"},
|
||||
},
|
||||
gotten_texture = {"mobs_sheep_shaved.png"},
|
||||
-- gotten_mesh = "mobs_sheep.x",
|
||||
-- gotten_mesh = "mobs_sheep.x",
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "mobs_sheep",
|
||||
@ -46,68 +47,100 @@ mobs:register_mob(
|
||||
follow = "farming:wheat",
|
||||
view_range = 5,
|
||||
replace_rate = 50,
|
||||
replace_what = {"default:grass", "default:tall_grass", "farming:wheat_3", "farming:wheat_4"},
|
||||
replace_what = {
|
||||
"default:grass",
|
||||
"default:tall_grass",
|
||||
"farming:wheat_3",
|
||||
"farming:wheat_4"
|
||||
},
|
||||
replace_with = "air",
|
||||
replace_offset = -1,
|
||||
|
||||
on_replace = function(self, pos)
|
||||
minetest.set_node(pos, {name = self.replace_with})
|
||||
if mobs:feed_tame(self, self.follow, 8, true) then
|
||||
if self.gotten == false then
|
||||
self.object:set_properties(
|
||||
{
|
||||
textures = {"mobs_sheep.png"},
|
||||
mesh = "mobs_sheep.x",
|
||||
})
|
||||
end
|
||||
end
|
||||
end,
|
||||
minetest.set_node(pos, {name = self.replace_with})
|
||||
|
||||
if mobs:feed_tame(self, self.follow, 8, true) then
|
||||
if self.gotten == false then
|
||||
self.object:set_properties(
|
||||
{
|
||||
textures = {"mobs_sheep.png"},
|
||||
mesh = "mobs_sheep.x",
|
||||
})
|
||||
end
|
||||
end
|
||||
end,
|
||||
on_rightclick = function(self, clicker)
|
||||
--are we feeding?
|
||||
if mobs:feed_tame(self, clicker, 8, true) then
|
||||
--if full grow fuzz
|
||||
if self.gotten == false then
|
||||
self.object:set_properties(
|
||||
{
|
||||
textures = {"mobs_sheep.png"},
|
||||
mesh = "mobs_sheep.x",
|
||||
})
|
||||
end
|
||||
return
|
||||
end
|
||||
-- Are we feeding?
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local itemname = item:get_name()
|
||||
if mobs:feed_tame(self, clicker, 8, true) then
|
||||
-- If full grow, add fuzz
|
||||
|
||||
--are we giving a haircut>
|
||||
if itemname == "default:shears" then
|
||||
if self.gotten == false and self.child == false then
|
||||
self.gotten = true -- shaved
|
||||
local pos = self.object:getpos()
|
||||
pos.y = pos.y + 0.5
|
||||
local obj = minetest.add_item(pos, ItemStack("mobs:wool"))
|
||||
if obj then
|
||||
obj:setvelocity(
|
||||
{
|
||||
x = math.random(-1,1),
|
||||
y = 5,
|
||||
z = math.random(-1,1)
|
||||
})
|
||||
end
|
||||
item:add_wear(650) -- 100 uses
|
||||
clicker:set_wielded_item(item)
|
||||
self.object:set_properties(
|
||||
{
|
||||
textures = {"mobs_sheep_shaved.png"},
|
||||
mesh = "mobs_sheep.x",
|
||||
})
|
||||
end
|
||||
return
|
||||
end
|
||||
if self.gotten == false then
|
||||
self.object:set_properties(
|
||||
{
|
||||
textures = {"mobs_sheep.png"},
|
||||
mesh = "mobs_sheep.x",
|
||||
})
|
||||
end
|
||||
|
||||
--are we capturing?
|
||||
mobs:capture_mob(self, clicker, 0, 5, 60, false, nil)
|
||||
end
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
local item = clicker:get_wielded_item()
|
||||
local itemname = item:get_name()
|
||||
|
||||
-- Are we giving a haircut?
|
||||
|
||||
if itemname == "default:shears" then
|
||||
if self.gotten == false and self.child == false then
|
||||
self.gotten = true -- shaved
|
||||
local pos = self.object:getpos()
|
||||
pos.y = pos.y + 0.5
|
||||
local obj = minetest.add_item(pos, ItemStack("mobs:wool"))
|
||||
if obj then
|
||||
obj:setvelocity(
|
||||
{
|
||||
x = math.random(-1,1),
|
||||
y = 5,
|
||||
z = math.random(-1,1)
|
||||
})
|
||||
end
|
||||
item:add_wear(650) -- 100 uses
|
||||
clicker:set_wielded_item(item)
|
||||
self.object:set_properties(
|
||||
{
|
||||
textures = {"mobs_sheep_shaved.png"},
|
||||
mesh = "mobs_sheep.x",
|
||||
})
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- Are we capturing?
|
||||
|
||||
mobs:capture_mob(self, clicker, 0, 5, 60, false, nil)
|
||||
end,
|
||||
on_die = function(self, pos, hitter)
|
||||
if hitter == nil or (hitter ~= nil and not hitter:is_player()) then
|
||||
return
|
||||
end
|
||||
|
||||
achievements.trigger_achievement(hitter, "hunter")
|
||||
end,
|
||||
|
||||
})
|
||||
|
||||
mobs:register_spawn(
|
||||
"mobs:sheep",
|
||||
{
|
||||
"default:dirt_with_grass"
|
||||
},
|
||||
20,
|
||||
10,
|
||||
15000,
|
||||
1,
|
||||
31000
|
||||
)
|
||||
|
||||
mobs:register_egg("mobs:sheep", "Sheep", "mobs_sheep_inventory.png")
|
||||
mobs:register_spawn("mobs:sheep", {"default:dirt_with_grass"}, 20, 10, 15000, 1, 31000)
|
||||
|
@ -44,10 +44,29 @@ mobs:register_mob(
|
||||
punch_end = 101,
|
||||
},
|
||||
on_rightclick = function(self, clicker)
|
||||
mobs:feed_tame(self, clicker, 6, true)
|
||||
mobs:capture_mob(self, clicker, 10, 40, 20, false, nil)
|
||||
end,
|
||||
})
|
||||
mobs:feed_tame(self, clicker, 6, true)
|
||||
mobs:capture_mob(self, clicker, 10, 40, 20, false, nil)
|
||||
end,
|
||||
on_die = function(self, pos, hitter)
|
||||
if hitter == nil or (hitter ~= nil and not hitter:is_player()) then
|
||||
return
|
||||
end
|
||||
|
||||
mobs:register_spawn("mobs:skunk", {"default:dirt_with_swamp_grass", "default:dirt_with_dry_grass"}, 20, 7, 12000, 2, 50)
|
||||
mobs:register_egg("mobs:skunk", "Skunk", "mobs_skunk_inventory.png")
|
||||
achievements.trigger_achievement(hitter, "hunter")
|
||||
end,
|
||||
})
|
||||
|
||||
mobs:register_spawn(
|
||||
"mobs:skunk",
|
||||
{
|
||||
"default:dirt_with_swamp_grass",
|
||||
"default:dirt_with_dry_grass"
|
||||
},
|
||||
20,
|
||||
7,
|
||||
12000,
|
||||
2,
|
||||
50
|
||||
)
|
||||
|
||||
mobs:register_egg("mobs:skunk", "Skunk", "mobs_skunk_inventory.png")
|
||||
|
@ -55,6 +55,17 @@ mobs:register_mob(
|
||||
punch_start = 25,
|
||||
punch_end = 34,
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
mobs:register_spawn("mobs:walker", {"default:dry_dirt"}, 20, 14, 200000, 1, 31000)
|
||||
mobs:register_spawn(
|
||||
"mobs:walker",
|
||||
{
|
||||
"default:dry_dirt",
|
||||
"default:dirt_with_dry_grass"
|
||||
},
|
||||
20,
|
||||
14,
|
||||
200000,
|
||||
1,
|
||||
31000
|
||||
)
|
||||
|
@ -34,7 +34,7 @@ minetest.after(
|
||||
on_blast = def.on_blast,
|
||||
}
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
local function rand_pos(center, pos, radius)
|
||||
pos.x = center.x + math.random(-radius, radius)
|
||||
@ -90,7 +90,7 @@ local function destroy(drops, pos, cid)
|
||||
def.on_blast(vector.new(pos), 1)
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
minetest.remove_node(pos)
|
||||
if def then
|
||||
local node_drops = minetest.get_node_drops(def.name, "")
|
||||
@ -156,7 +156,7 @@ local function add_effects(pos, radius)
|
||||
minsize = 16,
|
||||
maxsize = 24,
|
||||
texture = "tnt_smoke.png",
|
||||
})
|
||||
})
|
||||
end
|
||||
|
||||
function tnt.burn(pos)
|
||||
@ -168,7 +168,15 @@ function tnt.burn(pos)
|
||||
end
|
||||
end
|
||||
|
||||
local function explode(pos, radius)
|
||||
function tnt.explode(pos, radius, sound)
|
||||
minetest.sound_play(
|
||||
sound,
|
||||
{
|
||||
pos = pos,
|
||||
gain = 1.5,
|
||||
max_hear_distance = 128
|
||||
})
|
||||
|
||||
local pos = vector.round(pos)
|
||||
local vm = VoxelManip()
|
||||
local pr = PseudoRandom(os.time())
|
||||
@ -204,12 +212,10 @@ local function explode(pos, radius)
|
||||
return drops
|
||||
end
|
||||
|
||||
|
||||
function tnt.boom(pos)
|
||||
minetest.sound_play("tnt_explode", {pos = pos, gain = 1.5, max_hear_distance = 128})
|
||||
minetest.remove_node(pos)
|
||||
|
||||
local drops = explode(pos, radius)
|
||||
local drops = tnt.explode(pos, radius, "tnt_explode")
|
||||
entity_physics(pos, radius)
|
||||
eject_drops(drops, pos, radius)
|
||||
add_effects(pos, radius)
|
||||
@ -286,4 +292,4 @@ achievements.register_achievement(
|
||||
craftitem = "tnt:tnt",
|
||||
})
|
||||
|
||||
default.log("mod:tnt", "loaded")
|
||||
default.log("mod:tnt", "loaded")
|
||||
|
Loading…
x
Reference in New Issue
Block a user