Mehr Mods hinzugefügt
This commit is contained in:
parent
92a55732cf
commit
9e345a25fb
2805 changed files with 2096013 additions and 0 deletions
428
mods/mobs_skeletons/init.lua
Normal file
428
mods/mobs_skeletons/init.lua
Normal file
|
@ -0,0 +1,428 @@
|
|||
--[[
|
||||
|
||||
Mobs Skeletons - Adds skeletons.
|
||||
Copyright © 2021 Hamlet and contributors.
|
||||
|
||||
Licensed under the EUPL, Version 1.2 or – as soon they will be
|
||||
approved by the European Commission – subsequent versions of the
|
||||
EUPL (the "Licence");
|
||||
You may not use this work except in compliance with the Licence.
|
||||
You may obtain a copy of the Licence at:
|
||||
|
||||
https://joinup.ec.europa.eu/software/page/eupl
|
||||
https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32017D0863
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the Licence is distributed on an
|
||||
"AS IS" basis,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied.
|
||||
See the Licence for the specific language governing permissions
|
||||
and limitations under the Licence.
|
||||
|
||||
--]]
|
||||
|
||||
---
|
||||
--- Variables
|
||||
---
|
||||
|
||||
-- Global mod's namespace
|
||||
mobs_skeletons = {}
|
||||
|
||||
-- Used for localization
|
||||
local S = core.get_translator("mobs_skeletons")
|
||||
|
||||
-- Setting to enable direct sunlight only death of skeletons
|
||||
local sunlight = core.settings:get_bool("mobs_skeletons.sunlight_kill") == true
|
||||
local light_damage_min = sunlight and 14 or (default.LIGHT_MAX / 2)
|
||||
local light_damage_max = sunlight and 16 or (default.LIGHT_MAX + 1)
|
||||
|
||||
-- Sounds
|
||||
local sounds = {
|
||||
random = "mobs_skeletons_skeleton_random",
|
||||
attack = "mobs_skeletons_slash_attack",
|
||||
damage = "mobs_skeletons_skeleton_hurt",
|
||||
death = "mobs_skeletons_skeleton_death"
|
||||
}
|
||||
|
||||
---
|
||||
--- Functions
|
||||
---
|
||||
|
||||
-- Used to calculate the damage per second
|
||||
mobs_skeletons.fn_DamagePerSecond = function(self)
|
||||
|
||||
-- direct sunlight returns full damage
|
||||
if sunlight then
|
||||
return 7
|
||||
end
|
||||
|
||||
-- Constants
|
||||
local i_SECONDS_PER_DAY = 86400
|
||||
local i_SECONDS_PER_5_MINUTES = 300
|
||||
|
||||
local i_hitPoints = self.health
|
||||
local i_timeSpeed = tonumber(core.settings:get("i_timeSpeed")) or 72
|
||||
|
||||
if i_timeSpeed == 0 then
|
||||
i_timeSpeed = 1
|
||||
end
|
||||
|
||||
local i_inGameDayLength = i_SECONDS_PER_DAY / i_timeSpeed
|
||||
local i_fiveInGameMinutes =
|
||||
(i_inGameDayLength * i_SECONDS_PER_5_MINUTES) / i_SECONDS_PER_DAY
|
||||
|
||||
local i_damagePerSecond = i_hitPoints / i_fiveInGameMinutes
|
||||
|
||||
return i_damagePerSecond
|
||||
end
|
||||
|
||||
|
||||
---
|
||||
--- Arrow
|
||||
---
|
||||
|
||||
-- Arrow item
|
||||
core.register_craftitem("mobs_skeletons:arrow", {
|
||||
description = S("Skeleton Arrow"),
|
||||
inventory_image = "mobs_skeletons_arrow.png",
|
||||
groups = {not_in_creative_inventory = 1}
|
||||
})
|
||||
|
||||
-- Arrow entity
|
||||
mobs:register_arrow("mobs_skeletons:arrow", {
|
||||
visual = "wielditem",
|
||||
visual_size = {x = 0.25, y = 0.25},
|
||||
textures = {"mobs_skeletons:arrow"},
|
||||
velocity = 35,
|
||||
rotate = 0,
|
||||
drop = false,
|
||||
|
||||
hit_player = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = 6},
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_mob = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = 6},
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_node = function(self, pos, node)
|
||||
self.object:remove()
|
||||
end
|
||||
})
|
||||
|
||||
---
|
||||
--- Dropped Items
|
||||
---
|
||||
|
||||
local sword_drops = {
|
||||
{name = "default:sword_steel", chance = 5, min = 1, max = 1}
|
||||
}
|
||||
|
||||
local archer_drops = {}
|
||||
|
||||
if core.get_modpath("bonemeal") then
|
||||
table.insert(sword_drops, {name = "bonemeal:bone", chance = 3, min = 1, max = 2})
|
||||
table.insert(archer_drops, {name = "bonemeal:bone", chance = 3, min = 1, max = 2})
|
||||
end
|
||||
|
||||
if core.get_modpath("x_bows") then
|
||||
table.insert(archer_drops, {name = "x_bows:bow_wood", chance = 10, min = 1, max = 1})
|
||||
table.insert(archer_drops, {name = "x_bows:arrow_steel", chance = 3, min = 1, max = 3})
|
||||
end
|
||||
|
||||
if core.get_modpath("bows") then
|
||||
table.insert(archer_drops, {name = "bows:bow_wood", chance = 10, min = 1, max = 1})
|
||||
table.insert(archer_drops, {name = "bows:arrow_steel", chance = 3, min = 1, max = 3})
|
||||
end
|
||||
|
||||
---
|
||||
--- Skeleton Entities
|
||||
---
|
||||
|
||||
mobs:register_mob("mobs_skeletons:skeleton", {
|
||||
type = "monster",
|
||||
hp_min = (core.PLAYER_MAX_HP_DEFAULT - 10),
|
||||
hp_max = (core.PLAYER_MAX_HP_DEFAULT + 10),
|
||||
walk_velocity = 4,
|
||||
run_velocity = 5.2,
|
||||
stand_chance = 50,
|
||||
walk_chance = 50,
|
||||
jump = true,
|
||||
jump_height = 1.1,
|
||||
stepheight = 1.1,
|
||||
pushable = true,
|
||||
view_range = 16,
|
||||
damage = 7,
|
||||
knock_back = true,
|
||||
fear_height = 6,
|
||||
fall_damage = true,
|
||||
lava_damage = 9999,
|
||||
light_damage = 1,
|
||||
light_damage_min = light_damage_min,
|
||||
light_damage_max = light_damage_max,
|
||||
suffocation = 0,
|
||||
floats = 0,
|
||||
reach = 4,
|
||||
attack_chance = 1,
|
||||
attack_animals = true,
|
||||
attack_npcs = true,
|
||||
attack_players = true,
|
||||
group_attack = true,
|
||||
attack_type = "dogfight",
|
||||
blood_amount = 0,
|
||||
pathfinding = 1,
|
||||
makes_footstep_sound = true,
|
||||
sounds = sounds,
|
||||
visual = "mesh",
|
||||
visual_size = {x = 2.7, y = 2.7},
|
||||
collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3},
|
||||
selectionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3},
|
||||
textures = {
|
||||
"default_tool_steelsword.png",
|
||||
"mobs_skeletons_skeleton.png"
|
||||
},
|
||||
mesh = "mobs_skeletons_skeleton.b3d",
|
||||
animation = {
|
||||
stand_start = 0,
|
||||
stand_end = 40,
|
||||
stand_speed = 15,
|
||||
walk_start = 40,
|
||||
walk_end = 60,
|
||||
walk_speed = 15,
|
||||
run_start = 40,
|
||||
run_end = 60,
|
||||
run_speed = 30,
|
||||
shoot_start = 70,
|
||||
shoot_end = 90,
|
||||
punch_start = 110,
|
||||
punch_end = 130,
|
||||
punch_speed = 25,
|
||||
die_start = 160,
|
||||
die_end = 170,
|
||||
die_speed = 15,
|
||||
die_loop = false,
|
||||
},
|
||||
drops = sword_drops,
|
||||
|
||||
on_spawn = function(self)
|
||||
self.light_damage = mobs_skeletons.fn_DamagePerSecond(self)
|
||||
end
|
||||
})
|
||||
|
||||
mobs:register_mob("mobs_skeletons:skeleton_archer", {
|
||||
type = "monster",
|
||||
hp_min = (core.PLAYER_MAX_HP_DEFAULT - 10),
|
||||
hp_max = (core.PLAYER_MAX_HP_DEFAULT + 10),
|
||||
walk_velocity = 4,
|
||||
run_velocity = 5.2,
|
||||
stand_chance = 50,
|
||||
walk_chance = 50,
|
||||
jump = true,
|
||||
jump_height = 1.1,
|
||||
stepheight = 1.1,
|
||||
pushable = true,
|
||||
view_range = 16,
|
||||
damage = 2,
|
||||
knock_back = true,
|
||||
fear_height = 6,
|
||||
fall_damage = true,
|
||||
lava_damage = 9999,
|
||||
light_damage = 1,
|
||||
light_damage_min = light_damage_min,
|
||||
light_damage_max = light_damage_max,
|
||||
suffocation = 0,
|
||||
floats = 0,
|
||||
reach = 4,
|
||||
attack_chance = 1,
|
||||
attack_animals = true,
|
||||
attack_npcs = true,
|
||||
attack_players = true,
|
||||
group_attack = true,
|
||||
attack_type = "shoot",
|
||||
arrow = "mobs_skeletons:arrow",
|
||||
shoot_interval = 1.5,
|
||||
shoot_offset = 1.0,
|
||||
blood_amount = 0,
|
||||
pathfinding = 1,
|
||||
makes_footstep_sound = true,
|
||||
sounds = sounds,
|
||||
visual = "mesh",
|
||||
visual_size = {x = 2.7, y = 2.7},
|
||||
collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3},
|
||||
selectionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3},
|
||||
textures = {
|
||||
"mobs_skeleton_bow.png",
|
||||
"mobs_skeletons_skeleton_archer.png"
|
||||
},
|
||||
mesh = "mobs_skeletons_skeleton_archer.b3d",
|
||||
animation = {
|
||||
stand_speed = 15,
|
||||
stand_start = 0,
|
||||
stand_end = 40,
|
||||
walk_speed = 15,
|
||||
walk_start = 40,
|
||||
walk_end = 60,
|
||||
run_speed = 30,
|
||||
shoot_start = 70,
|
||||
shoot_end = 90,
|
||||
die_start = 160,
|
||||
die_end = 170,
|
||||
die_speed = 15,
|
||||
die_loop = false,
|
||||
},
|
||||
drops = archer_drops,
|
||||
|
||||
on_spawn = function(self)
|
||||
self.light_damage = mobs_skeletons.fn_DamagePerSecond(self)
|
||||
end
|
||||
})
|
||||
|
||||
mobs:register_mob("mobs_skeletons:skeleton_archer_dark", {
|
||||
type = "monster",
|
||||
hp_min = (core.PLAYER_MAX_HP_DEFAULT - 10),
|
||||
hp_max = (core.PLAYER_MAX_HP_DEFAULT + 10),
|
||||
walk_velocity = 4,
|
||||
run_velocity = 5.2,
|
||||
stand_chance = 50,
|
||||
walk_chance = 50,
|
||||
jump = true,
|
||||
jump_height = 1.1,
|
||||
stepheight = 1.1,
|
||||
pushable = true,
|
||||
view_range = 16,
|
||||
damage = 2,
|
||||
knock_back = true,
|
||||
fear_height = 6,
|
||||
fall_damage = true,
|
||||
lava_damage = 9999,
|
||||
light_damage = 1,
|
||||
light_damage_min = light_damage_min,
|
||||
light_damage_max = light_damage_max,
|
||||
suffocation = 0,
|
||||
floats = 0,
|
||||
reach = 4,
|
||||
attack_chance = 1,
|
||||
attack_animals = true,
|
||||
attack_npcs = true,
|
||||
attack_players = true,
|
||||
group_attack = true,
|
||||
attack_type = "shoot",
|
||||
arrow = "mobs_skeletons:arrow",
|
||||
shoot_interval = 1.5,
|
||||
shoot_offset = 1.0,
|
||||
blood_amount = 0,
|
||||
pathfinding = 1,
|
||||
makes_footstep_sound = true,
|
||||
sounds = sounds,
|
||||
visual = "mesh",
|
||||
visual_size = {x = 2.7, y = 2.7},
|
||||
collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3},
|
||||
selectionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3},
|
||||
textures = {
|
||||
"mobs_skeleton_bow.png",
|
||||
"mobs_skeletons_skeleton_archer_dark.png",
|
||||
"mobs_skeletons_skeleton_archer_dark_overlay.png"
|
||||
},
|
||||
mesh = "mobs_skeletons_skeleton_archer_dark.b3d",
|
||||
animation = {
|
||||
stand_speed = 15,
|
||||
stand_start = 0,
|
||||
stand_end = 40,
|
||||
walk_speed = 15,
|
||||
walk_start = 40,
|
||||
walk_end = 60,
|
||||
run_speed = 30,
|
||||
shoot_start = 70,
|
||||
shoot_end = 90,
|
||||
die_start = 160,
|
||||
die_end = 170,
|
||||
die_speed = 15,
|
||||
die_loop = false,
|
||||
},
|
||||
drops = archer_drops,
|
||||
|
||||
on_spawn = function(self)
|
||||
self.light_damage = mobs_skeletons.fn_DamagePerSecond(self)
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
---
|
||||
--- Skeletons spawning (check for custom spawn.lua)
|
||||
---
|
||||
|
||||
local MP = core.get_modpath(core.get_current_modname()) .. "/"
|
||||
local input = io.open(MP .. "spawn.lua", "r")
|
||||
|
||||
if input then
|
||||
input:close()
|
||||
input = nil
|
||||
dofile(MP .. "spawn.lua")
|
||||
else
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_skeletons:skeleton",
|
||||
nodes = {"group:crumbly", "group:cracky"},
|
||||
neighbors = "air",
|
||||
chance = 7000,
|
||||
active_object_count = 2,
|
||||
min_height = -31000,
|
||||
max_height = 31000,
|
||||
max_light = 6,
|
||||
})
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_skeletons:skeleton_archer",
|
||||
nodes = {"group:crumbly", "group:cracky"},
|
||||
neighbors = "air",
|
||||
chance = 7000,
|
||||
active_object_count = 2,
|
||||
min_height = -31000,
|
||||
max_height = 31000,
|
||||
max_light = 6
|
||||
})
|
||||
|
||||
mobs:spawn({
|
||||
name = "mobs_skeletons:skeleton_archer_dark",
|
||||
nodes = {"group:crumbly", "group:cracky"},
|
||||
neighbors = "air",
|
||||
chance = 7000,
|
||||
active_object_count = 2,
|
||||
min_height = -31000,
|
||||
max_height = 31000,
|
||||
max_light = 6
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
---
|
||||
--- Spawn Eggs
|
||||
---
|
||||
|
||||
mobs:register_egg("mobs_skeletons:skeleton", S("Skeleton"),
|
||||
"mobs_skeletons_skeleton_egg.png")
|
||||
|
||||
mobs:register_egg("mobs_skeletons:skeleton_archer", S("Skeleton Archer"),
|
||||
"mobs_skeletons_skeleton_archer_egg.png")
|
||||
|
||||
mobs:register_egg("mobs_skeletons:skeleton_archer_dark", S("Dark Skeleton Archer"),
|
||||
"mobs_skeletons_skeleton_archer_dark_egg.png")
|
||||
|
||||
|
||||
---
|
||||
--- Aliases
|
||||
---
|
||||
|
||||
mobs:alias_mob("mobs:skeleton", "mobs_skeletons:skeleton")
|
||||
mobs:alias_mob("mobs:skeleton_archer", "mobs_skeletons:skeleton_archer")
|
||||
mobs:alias_mob("mobs:dark_skeleton_archer", "mobs_skeletons:skeleton_archer_dark")
|
||||
|
||||
|
||||
print("[MOD] Mobs Skeletons loaded")
|
Loading…
Add table
Add a link
Reference in a new issue