* update from https://codeberg.org/minenux/minetest-mod-3d_armor * Fix armor radiation values were not not summed up * Closes https://github.com/minetest-mods/3d_armor/issues/136 radiation does not work when using technic armor * resolve player object in async function again (different globalstep) due the core.after we need to recall player name closes https://github.com/minetest-mods/3d_armor/issues/132 * Make all admin armor to protect from drowning group of water is the same as if you get asfixiate, admin armor must be protected, this was missing cos the chessplate already has the armor_water=1 set.. closes https://github.com/minetest-mods/3d_armor/issues/130 * Call custom on_punched functions w/ hitter = nil too this allows to propagates the nil on custom mods related to https://github.com/minetest-mods/3d_armor/pull/138#discussion_r1529014373 backported https://github.com/minetest-mods/3d_armor/pull/141 * Don't assume hitter ~= nil in on_punchplayer callback closes https://github.com/minetest-mods/3d_armor/issues/137 related to https://github.com/minetest/minetest/pull/14319#issuecomment-1989555604
246 lines
8.2 KiB
Plaintext
246 lines
8.2 KiB
Plaintext
minetest mod 3d_armor
|
|
=====================
|
|
|
|
ARMOR for players
|
|
|
|
## Information
|
|
--------------
|
|
|
|
Adds craftable armor that is visible to other players that allows players to equip
|
|
making them less vulnerable to weapons, takes damage when a player is hurt but
|
|
also offers a percentage chance of healing.
|
|
|
|

|
|
|
|
## Technical info
|
|
-----------------
|
|
|
|
This mod is named `3d_armor` and each armor item worn contributes to a player's
|
|
armor group level Armor Overall level is boosted by 10% when wearing a full matching set.
|
|
|
|
Fire protection added by TenPlus1 when using crystal armor if Ethereal mod active, level 1
|
|
protects against torches, level 2 for crystal spike, level 3 for fire, level 5 for lava.
|
|
|
|
### Depends:
|
|
|
|
* default
|
|
|
|
Following are need to manage armors on the player:
|
|
|
|
* sfinv
|
|
* unified_inventory
|
|
* smart_inventory
|
|
|
|
You must use only one.
|
|
|
|
Optional depends
|
|
|
|
* player_monoids
|
|
* armor_monoid
|
|
* fire
|
|
* ethereal
|
|
* nether
|
|
* moreores
|
|
|
|
### Configuration
|
|
-------------------
|
|
|
|
Override the following default settings by adding them to your minetest.conf file.
|
|
|
|
| Setting | type | default | descripton |
|
|
| ---------------------- | ---- | ---- | --------------------------------- |
|
|
| armor_material_wood | bool | true | Set false to disable wood armors |
|
|
| armor_material_cactus | bool | true | Set false to disable cactus armor |
|
|
| armor_material_steel | bool | true | Set false to disable steel armor|
|
|
| armor_material_bronze | bool | true | Set false to disable bronze armor |
|
|
| armor_material_diamond | bool | true | Set false to disable diamond armor |
|
|
| armor_material_gold | bool | true | Set false to disable gold armor |
|
|
| armor_material_mithril | bool | true | Set false to disable mitrhil armor |
|
|
| armor_material_crystal | bool | true | Set false to disable crystal armors |
|
|
| armor_material_nether | bool | true | Set false to disable nether armor |
|
|
| armor_init_delay | int | 1 | Increase it if get glitches when a player first joins |
|
|
| armor_init_times | int | 1 | Number of initialization attempts if previous still happnes |
|
|
| armor_bones_delay | int | 1 | Increase it if armor is not getting into bones due to server lag.
|
|
| armor_update_time | int | 1 | How often player armor items are updated |
|
|
| armor_drop | bool | true | If false will be into bones,otherwise Drop armor when a player dies |
|
|
| armor_destroy | bool | false | Pulverise armor when a player dies, overrides armor_drop |
|
|
| armor_level_multiplier | int | 1 | level to increaseeffects, 0.5 will reduce armor by half |
|
|
| armor_heal_multiplier | int | 1 | increase or decrease overall armor healing, 0 disable it |
|
|
| armor_water_protect | bool | true | water protection (periodically restores breath when activated)
|
|
| armor_punch_damage | bool | true | Enable punch damage effects. |
|
|
| armor_migrate_old_inventory | bool | true | Enable migration of old armor inventories |
|
|
| armor_fire_protect | bool | false | fire protection (defaults true if using ethereal mod) |
|
|
| armor_fire_protect_torch | bool | false | allows you to disable fire damage from torches |
|
|
|
|
### API
|
|
|
|
##### player_api compatibility and default old mod
|
|
|
|
`armor.registered_player_models`
|
|
|
|
If `player_api` is present will be same as `player_api.registered_models` or `default.registered_player_models` otherwise
|
|
|
|
`armor.player_register_model`
|
|
|
|
If `player_api` is present will be same as `player_api.register_model` or `default.player_register_model` otherwise
|
|
|
|
`armor.player_set_textures`
|
|
|
|
If `player_api` is present will be same as `player_api.set_textures`or `default.player_set_textures` otherwise
|
|
|
|
`armor.player_attached`
|
|
|
|
If `player_api` is present will be same as `player_api.player_attached` otherwise `default.player_attached`
|
|
|
|
`armor.player_set_model`
|
|
|
|
If `player_api` is present will be same as `player_api.set_model` otherwise then `default.player_set_model`
|
|
|
|
##### Armor Registration:
|
|
|
|
`armor:register_armor(name, def)`
|
|
|
|
Wrapper function for `minetest.register_tool`, while registering armor as
|
|
a tool item is still supported, this may be deprecated in future so new code
|
|
should use this method.
|
|
|
|
Additional fields supported by 3d_armor:
|
|
|
|
```
|
|
texture = <filename>
|
|
preview = <filename>
|
|
armor_groups = <table>
|
|
damage_groups = <table>
|
|
reciprocate_damage = <bool>
|
|
on_equip = <function>
|
|
on_unequip = <function>
|
|
on_destroy = <function>
|
|
on_damage = <function>
|
|
on_punched = <function>
|
|
|
|
armor:register_armor_group(group, base)
|
|
```
|
|
|
|
Example:
|
|
|
|
```
|
|
armor:register_armor_group("radiation", 100)
|
|
|
|
armor:register_armor("mod_name:speed_boots", {
|
|
description = "Speed Boots",
|
|
inventory_image = "mod_name_speed_boots_inv.png",
|
|
texture = "mod_name_speed_boots.png",
|
|
preview = "mod_name_speed_boots_preview.png",
|
|
groups = {armor_feet=1, armor_use=500, physics_speed=1.2, flammable=1},
|
|
armor_groups = {fleshy=10, radiation=10},
|
|
damage_groups = {cracky=3, snappy=3, choppy=3, crumbly=3, level=1},
|
|
reciprocate_damage = true,
|
|
on_destroy = function(player, index, stack)
|
|
local pos = player:getpos()
|
|
if pos then
|
|
minetest.sound_play({
|
|
name = "mod_name_break_sound",
|
|
pos = pos,
|
|
gain = 0.5,
|
|
})
|
|
end
|
|
end,
|
|
})
|
|
```
|
|
|
|
See armor.lua, technic_armor and shields mods for more examples.
|
|
|
|
##### Default groups:
|
|
|
|
Elements: armor_head, armor_torso, armor_legs, armor_feet
|
|
Attributes: armor_heal, armor_fire, armor_water
|
|
Physics: physics_jump, physics_speed, physics_gravity
|
|
Durability: armor_use, flammable
|
|
|
|
Notes:
|
|
|
|
Elements may be modified by dependent mods, eg shields adds armor_shield.
|
|
Attributes and physics values are 'stackable', durability is determined
|
|
by the level of armor_use, total uses == approx (65535/armor_use), non-fleshy
|
|
damage groups need to be defined in the tool/weapon used against the player.
|
|
|
|
Reciprocal tool damage will be done only by the first armor inventory item
|
|
with `reciprocate_damage = true`
|
|
|
|
##### Armor Functions:
|
|
|
|
`armor:set_player_armor(player)`
|
|
|
|
Primarily an internal function but can be called externally to apply any
|
|
changes that might not otherwise get handled.
|
|
|
|
`armor:punch(player, hitter, time_from_last_punch, tool_capabilities)`
|
|
|
|
Used to apply damage to all equipped armor based on the damage groups of
|
|
each individual item.`hitter`, `time_from_last_punch` and `tool_capabilities`
|
|
are optional but should be valid if included.
|
|
|
|
`armor:damage(player, index, stack, use)`
|
|
|
|
Adds wear to a single armor itemstack, triggers `on_damage` callbacks and
|
|
updates the necessary inventories. Also handles item destruction callbacks
|
|
and so should NOT be called from `on_unequip` to avoid an infinite loop.
|
|
|
|
`armor:remove_all(player)`
|
|
|
|
Removes all armors from the player's inventory without triggering any callback.
|
|
|
|
`armor:equip(player, armor_name)`
|
|
|
|
Equip the armor, removing the itemstack from the main inventory if there's one.
|
|
|
|
`armor:unequip(player, armor_name)`
|
|
|
|
Unequip the armor, adding the itemstack to the main inventory.
|
|
|
|
`armor:update_skin(player_name)`
|
|
|
|
Triggers a skin update with the same action as if a field with `skins_set` was submitted.
|
|
|
|
##### Item Callbacks:
|
|
|
|
on_equip = func(player, index, stack)
|
|
on_unequip = func(player, index, stack)
|
|
on_destroy = func(player, index, stack)
|
|
on_damage = func(player, index, stack)
|
|
on_punched = func(player, hitter, time_from_last_punch, tool_capabilities)
|
|
|
|
Notes:
|
|
|
|
`on_punch` is called every time a player is punched or takes damage, `hitter`,
|
|
`time_from_last_punch` and `tool_capabilities` can be `nil` and will be in the
|
|
case of fall damage, etc. When fire protection is enabled, hitter == "fire"
|
|
in the event of fire damage. Return `false` to override armor damage effects.
|
|
When armor is destroyed `stack` will contain a copy of the previous stack.
|
|
|
|
##### Global Callbacks:
|
|
|
|
armor:register_on_update(func(player))
|
|
armor:register_on_equip(func(player, index, stack))
|
|
armor:register_on_unequip(func(player, index, stack))
|
|
armor:register_on_destroy(func(player, index, stack))
|
|
|
|
Global Callback Example:
|
|
|
|
```
|
|
armor:register_on_update(function(player)
|
|
print(player:get_player_name().." armor updated!")
|
|
end)
|
|
```
|
|
|
|
## LICENSE
|
|
|
|
License Source Code: (C) 2023 PICCORO Lenz McKAY
|
|
|
|
License Source Code: (C) 2012-2017 Stuart Jones - LGPL v2.1
|
|
|
|
License Textures: Copyright (C) 2017 davidthecreator - CC-BY-SA 3.0
|
|
|
|
https://github.com/daviddoesminetest/3d-armors-new-textures
|
|
|