1
0
mirror of https://github.com/minetest-mods/3d_armor.git synced 2025-06-29 14:50:47 +02:00

242 Commits

Author SHA1 Message Date
793c74856f Fix nil index in on_damage callback 2017-05-03 17:56:32 +01:00
47734969e2 Bump version to 0.4.9 2017-04-28 19:06:38 +01:00
1af0bb60f8 Rename on_punch callback to avoid potential conflict with nodes 2017-04-21 18:33:30 +01:00
a11b3302e1 Move armor initialization back out of the api 2017-04-19 21:53:13 +01:00
664d9fbfef Increase fleshy level of wood and cactus leggings 2017-04-19 19:42:12 +01:00
4dd7e41749 Add damage method and update README.txt 2017-04-19 19:00:00 +01:00
df429ee487 Run inventory equip callbacks before set_player_armor 2017-04-16 19:34:09 +01:00
7566ecccee Initialize armor after all on_joinplayer callbacks have run 2017-04-16 16:52:49 +01:00
99bc8cf2d3 Reverse order of stack and index in callbacks for consistency 2017-04-15 20:44:05 +01:00
a2ec13e28d Only allow armor items in the armor inventory 2017-04-15 18:00:10 +01:00
065815eec1 Include stack index it armor item callbacks 2017-04-15 17:54:39 +01:00
16b0ee2d9e Register adminshield alias for consistency 2017-04-14 20:19:38 +01:00
64f8b3cd58 Fix OOM crash with admin shield 2017-04-14 17:08:08 +01:00
74ef6c5759 Shields: check valid hitter 2017-04-13 21:29:57 +01:00
b741b7426b More player validity checks 2017-04-13 20:34:55 +01:00
db312b3245 Code styling 2017-04-13 20:11:15 +01:00
de2c47f334 More protection from un-initialized player crashes 2017-04-13 19:47:43 +01:00
b4283f6e60 Fix string concatenation in UI form, resolves #104 2017-04-13 17:21:16 +01:00
888fbacb49 Prevent potentially bogus warning 2017-04-11 21:26:06 +01:00
50453aa5a6 Fix warnings 2017-04-11 20:55:28 +01:00
b45fbd0f2a Log warning if initialization fails and validate armor.def for UI 2017-04-11 20:42:58 +01:00
9ffcc19fd7 Improve player initialization and increase default delay 2017-04-11 19:34:06 +01:00
6359b0a0ed bugfix: the count was lost 2017-04-10 18:24:27 +01:00
4dbe76312b Hazmat suit: updates and fixes 2017-04-09 20:43:55 +01:00
20edce6c55 Better balance of armor weights 2017-04-09 18:49:44 +01:00
6e58d1280b Add minor physics penalties to metal armors 2017-04-09 18:37:55 +01:00
20d4728829 Only reciprocate damage of valid tool items 2017-04-09 18:07:53 +01:00
7cfd744ff3 Respect flammable group when fire is protection enabled 2017-04-09 17:34:22 +01:00
a76a35f177 Fix regression with heal_multiplier config 2017-04-09 16:25:52 +01:00
e5e926a02e Use metal sounds for enhanced shields 2017-04-09 15:43:35 +01:00
3951c833da More documentation ammendments 2017-04-09 15:00:48 +01:00
e9a2c57826 Correction to example code 2017-04-08 22:32:46 +01:00
5508a26dbf Bugfix: shields crash with nil method, fixes #102 2017-04-08 22:28:52 +01:00
0ec7858937 Add punch damage groups and effects 2017-04-08 21:32:56 +01:00
1e059f2557 Bugfix: recognise boolean false in configuration 2017-04-05 17:51:50 +01:00
5dab1ca887 Add intllib support to 3d_armor_stand 2017-03-31 22:09:32 +01:00
1fdff7adaa Make water protection optional, default true
This can save a `global_step` regisration if neither fire or water
protection are enabled.
2017-03-31 22:03:59 +01:00
23e4d5114f Add support for intllib 2017-03-31 20:12:20 +01:00
7fde7c050d Update wieldview README about dependencies 2017-03-31 17:42:22 +01:00
45099ae25a Mod-defined wield item transformation w/ group 2017-03-31 17:42:22 +01:00
edebf13c1f Remove unneeded default dependency from wieldview 2017-03-31 17:42:22 +01:00
4083782246 Improve get_armor_formspec 2017-03-29 19:31:00 +01:00
5911447048 Move shields level reduction to shields mod 2017-03-29 19:13:13 +01:00
3aac5c98f4 Fix movement and level bugs 2017-03-29 17:44:40 +01:00
fe9664589a Fix potential missing texture bug 2017-03-26 22:46:51 +01:00
11ce84873b Add support for non-fleshy damage groups, closes #47 2017-03-26 20:53:04 +01:00
86fd6b0d7d Fix crash caused by 27a3823eed 2017-03-23 00:59:21 +00:00
27a3823eed Improve error logging, reduce log level to warning 2017-03-22 19:00:48 +00:00
348dad3d4d Log warning of unused mods when dependencies are missing 2017-03-21 15:16:58 +00:00
ea86aa35f5 Merge branch 'bell07-pr_compat_cleanup' 2017-03-21 14:54:03 +00:00
f0edb9a710 Inventory compat cleanup
fix inventory_plus after cleanup. Create own register_on_player_receive_fields for this inventory

removed smart_inventory (moved to the inventoy mod), adjusted sfinv

moved sfinv to own mod 3d_armor_sfinv

moved unified_inventory to 3d_armor_ui

moved inventory_plus support to own mod 3d_armor_ip
2017-03-21 14:50:17 +00:00
75191490c2 Use api call to get player skin 2017-03-19 18:52:51 +00:00
f91af02c45 Fix inventory paging bugs caused by previous commit 2017-03-19 18:06:54 +00:00
3843578a33 Remove unnecessary code 2017-03-19 17:22:24 +00:00
1570efb7ac Depreciate update_inventory and use on_update callback 2017-03-19 16:10:52 +00:00
5517be8ff2 Replace missed global config, fixes #94 2017-03-19 13:28:55 +00:00
709535dff0 Only apply valid wardrobe mod skins, fixes #93 2017-03-18 22:14:08 +00:00
a1d904c517 Remove redundant code 2017-03-18 22:02:11 +00:00
3c2cb16351 Correction to documentation 2017-03-18 20:39:03 +00:00
6bf28dc2c5 Only allow one of each armor element in armor slots
Required, otherwise equip callbacks may be bogus.
2017-03-18 20:32:11 +00:00
75a7181e0f Add callbacks, closes #46 2017-03-18 20:12:43 +00:00
2b840fbe38 Add comment and remove empty lines 2017-03-18 18:04:10 +00:00
701215c22f Depreciate global configs, closes #68 2017-03-18 17:23:50 +00:00
e46ff3488b Remove kill/me commands 2017-03-17 21:57:13 +00:00
f74a52df62 Code re-organisation
This should make it easier to merge features from the now
out-dated development branch.
2017-03-17 20:26:41 +00:00
3c4500a9bf Only show protection levels of enabled features 2017-03-17 18:27:19 +00:00
e69b59e2af Fix alignment of formspec page slots 2017-03-15 19:31:48 +00:00
d43d96bb28 Fix typo in cactus helmet description, closes #91 2017-03-15 18:58:27 +00:00
7a980a6717 Fix missing sfinv page background images, closes #90 2017-03-12 20:34:54 +00:00
fc3fcea4b7 Bump version to 0.4.8 2017-03-12 19:14:32 +00:00
b59464de88 Improve skin mod preview support 2017-03-12 18:23:49 +00:00
80024fc154 Fix security violation in player_textures mod support 2017-03-12 17:01:04 +00:00
d826b53877 Use u_skins preview image as base for armor preview 2017-03-11 21:34:26 +00:00
01a3425ec8 Add preview generator and update preview textures 2017-03-11 20:02:55 +00:00
616d9398f2 Minor formspec improvements 2017-03-11 19:31:37 +00:00
6661ec0b40 Add support for player monoids, resolves #85 2017-03-10 20:33:45 +00:00
ca1cf6bfeb Fix inconsistency with cactus boots, closes #89 2017-03-10 18:09:28 +00:00
8f5ffeb384 Shields: Remove registration delay, closes #88 2017-03-10 18:05:16 +00:00
ca79d39688 Armor stand: Improve TNT effects, closes #55 2017-03-08 19:36:30 +00:00
8b8a554ff7 Add support for sfinv 2017-03-08 17:47:38 +00:00
3df7802439 added new torch fire nodes
added new torch nodes to the fire nodes list.
2017-03-08 17:44:49 +00:00
19e297a2e8 Update inventory_plus formspec style 2017-03-03 17:59:31 +00:00
190614d47b Fix potential bug with new bone location method 2017-02-24 23:00:03 +00:00
37b10d1cee Remove redundant code 2017-02-24 22:45:23 +00:00
4b45f85687 Improve bones locating and fallback, fixes #84 2017-02-24 22:32:27 +00:00
a5b650285b beter smart_inventory integration 2017-02-21 19:07:17 +00:00
26212fb3e4 Add new armor textures by @daviddoesminetest 2017-02-19 19:33:10 +00:00
4829445d12 Update style of default armor formspec 2017-02-15 19:37:35 +00:00
4d3b219e7d add smart_inventory support 2017-02-15 19:06:06 +00:00
81ffdaa6a7 Improve armor stand selection box 2017-02-15 18:25:49 +00:00
ba62febdee Armor stand, check protection and ignore, ignore 2017-02-08 20:57:42 +00:00
8939a0dd43 Armor stand hidden nodes use copy of pos vector 2017-02-08 19:32:42 +00:00
c691f3e219 Prevent building over armor stands 2017-02-08 18:26:15 +00:00
bf9ba59c0f Merge branch 'tobyplowy-master' 2017-01-25 19:49:52 +00:00
75f808131c New armorstand mapping 2017-01-25 19:48:25 +00:00
b88f946929 Bump version to 0.4.7 2017-01-11 19:36:51 +00:00
c63376b523 Improve hazmat-suit documentation, closes #72 2017-01-11 19:28:17 +00:00
c070dfb19f Include years of all licenses 2017-01-11 19:15:06 +00:00
4b70580ce4 Update licensing information 2017-01-08 18:54:24 +00:00
65b6d58580 Prevent armor damage when using /killme command 2016-12-07 19:24:00 +00:00
98786fd8f7 Add killme command to replace old kill command 2016-11-27 17:18:08 +00:00
9105e8403e Merge pull request #62 from paly2/kill_chatcommand_privs
Add "ban" privilege for kill chatcommand
2016-11-27 16:50:03 +00:00
6b2e3adc00 Bump version to 0.4.6 2016-11-27 16:22:29 +00:00
c9001f9e53 Rebase armor model, armature and UV fixes 2016-11-27 16:11:51 +00:00
cc25d6be13 Merge pull request #66 from diogo-gomes/develop
Add table of contents to README.md
2016-08-21 17:52:03 +01:00
f557c4d69e Add table of contents to README.md 2016-07-25 14:48:52 +01:00
456c84e93e Merge pull request #65 from everamzah/fixbones
Try harder to add armor to bones
2016-07-22 17:51:06 +01:00
0157ebd683 Try harder to add armor to bones
Previously, if bones were on a slab, or some non-buildable_to but walkable
node, then the armor would fail to find the bones node (which is Y+1,
typically) and the armor would disappear.  This is an attempt to address that.
2016-07-22 10:46:05 -04:00
c39f838893 Fix a mistake in the kill chatcommand
Use "param" instead of "name" in "func"
2016-06-17 18:29:43 +02:00
862deff373 Add "ban" privilege for kill chatcommand 2016-06-17 16:08:50 +02:00
ac414d3df3 Remove admin shield from creative inventory 2016-05-27 19:51:39 +01:00
3cf6887abd Fix undeclared global error in hazmat_suit 2016-05-18 19:42:37 +01:00
b14db3c43c Add missing placer param to locked armor stand, fixes #59 2016-05-11 22:19:13 +01:00
8f8c6c6bfa Merge pull request #56 from Thomas--S/patch-2
Fix typo
2016-05-11 19:46:48 +01:00
54ec4b3cef Fix typo 2016-05-11 19:25:59 +02:00
32e87ee543 More armor stand fixes 2016-05-04 18:27:21 +01:00
d322a0f110 Modify helmet textures, fixes #49 2016-05-01 20:25:46 +01:00
9cc2f3db02 Radiation protection support added 2016-05-01 17:09:07 +01:00
ddd7f3786c Fix disappearing armor stand entities, again... 2016-05-01 16:11:27 +01:00
5c5359de4f Restore armor stand entities when knocked-back by TNT 2016-04-27 18:48:06 +01:00
1aa2b769d7 Rebase armor player model, fixes #54 2016-04-24 21:13:45 +01:00
5421ce46da Make armor stands 'blast-proof', fixes #55 2016-04-22 18:53:25 +01:00
72cffbae17 Restore moved armor stand objects to original position when possible 2016-04-20 20:26:01 +01:00
170ee39aed Auto remove stray armor stand entities 2016-04-20 18:54:34 +01:00
59bbc55b73 Fix armor stand entity duplication bug 2016-04-16 15:36:48 +01:00
1dd904f5be Merge pull request #50 from Thomas--S/patch-1
Add a locked armor stand
2016-04-13 17:41:37 +01:00
9de8cc12bb Fix disappearing entities when placing stands next to each other 2016-04-10 22:17:45 +01:00
4e8cf05436 Add a locked armor stand
This change adds a locked armor stand, so that player can use them savely on multiplayer worlds.
2016-04-10 20:11:53 +02:00
b6a44057a6 Fix some tabulation 2016-04-09 01:19:32 +01:00
ae33659168 Make cactus leggings inventory image more consistent 2016-04-08 21:35:56 +01:00
fb29ce9150 Add a chest-like visible armor stand, closes #48 2016-04-08 20:17:28 +01:00
7408ebcd81 Add support for mod managers 2016-03-25 19:52:00 +00:00
36737441d4 Merge pull request #45 from tenplus1/patch-7
Added insta-kill ability for tools/commands
2016-02-14 19:49:09 +00:00
5a112547e6 Added insta-kill ability for tools/commands
Some armor was too powerful that killing yourself to respawn wouldn't work or instant kill tools for admin didn't have effect, so I've added a check so that if the player is dealt with more than -100 damage points it instantly kills them but doesn't damage armor.  Also added /kill command.
2016-02-08 19:05:32 +00:00
0d5cf6d58a Merge pull request #44 from proller/patch-1
Dont rewrite inventory in creative mode
2016-02-08 03:54:28 +08:00
f17a104ab1 Dont rewrite inventory in creative mode
happens on first press I if no unified inventory installed
2016-02-07 18:46:37 +03:00
f83e7e9984 Merge pull request #43 from tenplus1/patch-6
admin helmet lets you breathe underwater
2016-01-28 01:35:46 +08:00
be1d353ec0 Merge pull request #42 from tenplus1/patch-5
Add ability to breath underwater
2016-01-28 01:34:45 +08:00
241aa663f1 admin helmet lets you breathe underwater
added armor_water=1 group to admin helmet so players can breathe underwater.
2016-01-25 14:48:23 +00:00
921e1ace24 Add ability to breath underwater
Added functionality for armor to have armor_water=1 in groups so that player can breathe underwater.
2016-01-25 14:47:05 +00:00
0ec2dbfb36 Update default fire protection nodes, closes #41 2015-12-19 19:25:43 +00:00
7fc991765c Utilize player_on_hpchange callback 2015-12-09 21:03:45 +00:00
991d2955e0 Simplify previous commit 2015-12-04 20:37:24 +00:00
64ec3dcf93 Allow armor textures to be specified by the tool definition 2015-12-04 18:42:42 +00:00
e1caf0ab0c Bump version to 0.4.5 2015-11-15 22:56:53 +00:00
a44d1a2530 Add 'listring' support for inventory mods, closes #38 2015-11-15 21:50:27 +00:00
16bc6232ca Add support for unified inventory 'ui_full' privilege 2015-11-15 19:18:21 +00:00
6efe3bf116 Merge pull request #40 from CraigyDavi/prevent-admin-drops
Prevent admin armor from being dropped
2015-10-30 01:46:19 +08:00
67867e78ec Prevent admin armor from being dropped 2015-10-29 14:19:59 +00:00
64f6be4d61 Bugfix: invalid capture index with non-english player names, resolves #39 2015-10-17 19:20:28 +01:00
741faf3520 Fix support for crafting modpack 2015-09-09 19:07:31 +01:00
1c56ee4bd6 Merge pull request #31 from tenplus1/patch-2
dtime glitches
2015-08-08 18:05:02 +01:00
40a3c1e0c4 Include Technic Armor in README.md 2015-07-25 19:11:36 +01:00
ae7ad422a5 Belated version string update (oopsie) 2015-07-15 20:52:56 +01:00
bad1452e87 Register fire-node overrides at start-up 2015-07-15 19:00:16 +01:00
7cefc1a7ba dtime glitches
sometimes dtime isn't registering when armor.update_armor is called and so it never checks for fire resistance on armor meaning cactus is fireproof if ethereal mod is found...  we cant have that :)  replaced dtime with ARMOR_UPDATE_TIME and it works fine :)
2015-07-15 16:57:17 +01:00
8f2badeec3 Add support for unified inventory 'lite' mode 2015-07-01 19:21:14 +01:00
734e01e847 Only check for fire damage if valid delta time 2015-05-15 18:39:32 +01:00
4eabd8512a Only round the drop position for bones (deja vu) 2015-05-06 20:59:22 +01:00
14a0eb8cca Fix armor damage when using fire protection (my bad) 2015-05-06 20:06:07 +01:00
e1ffdd6a0d Add technic shields by poet.nohit 2015-05-06 19:03:40 +01:00
306f193db6 Stop dropped armor disappearing into ground
This stops dropped armor disappearing into ground at times...
2015-05-06 18:41:40 +01:00
6704431499 Bump version to 0.4.4 2015-05-04 19:24:34 +01:00
bc0ea6b5bf Add technic armor by poet.nohit 2015-05-04 18:42:46 +01:00
0fc71201b4 Add crystal armor and fire protection by TenPlus1 2015-05-04 17:08:40 +01:00
d107708bec Fix Lua escape sequence, resolves #28 2015-05-01 18:06:43 +01:00
bd2ebac24e Merge pull request #27 from indriApollo/master
add support for inventory_enhanced
2015-04-26 12:23:24 +01:00
ebe159ac2c add support for inventory_enhanced 2015-04-25 18:45:59 +02:00
1d1534b416 Merge pull request #25 from indriApollo/master
Add support for wardrobe mod
2015-04-25 15:53:35 +01:00
91602ed6f2 Add support for wardrobe mod 2015-04-25 14:28:45 +02:00
2b0ce6f63e Check node is not nil before indexing 2015-04-17 19:41:15 +01:00
3badcea0d9 Merge pull request #24 from Pilcrow182/master
drop armor if no bones node is found
2015-04-17 19:38:26 +01:00
d2f32beebb drop armor if no bones node is found 2015-04-16 21:57:07 -05:00
b3f755f7d7 Merge pull request #23 from Pilcrow182/master
Put aromr drops into a single loop, fix #22
2015-04-15 18:57:15 +01:00
dec92749f9 Put aromr drops into a single loop, fix #22 2015-04-14 18:22:22 -05:00
9da2395586 More error logging improvements, fix #21 2015-04-02 20:59:45 +01:00
6942aa37d2 Drop excess armor items when bones are full 2015-03-21 17:48:09 +00:00
7da9d81963 Merge pull request #20 from ExeterDad/master
smaller b3d export
2015-03-20 18:20:27 +00:00
905fc9fcb0 smaller b3d export 2015-03-18 20:50:54 -04:00
b8e5d0adde Fix inverted normal on inner right arm 2015-03-18 18:37:04 +00:00
58337c0404 Better skin mod support and more preview bug fixes 2015-03-08 18:29:17 +00:00
87af6e0c68 Fix missing preview image when using simple_skins mod 2015-03-08 15:21:37 +00:00
70d353bb6c Merge pull request #19 from Calinou/optimize_textures
Optimize textures using OptiPNG
2015-02-22 13:54:28 +00:00
6e0fbc8bb2 Optimize textures using OptiPNG 2015-02-22 10:13:06 +01:00
9c2b9c9b5a Character model improvements. Extruded shields - closes #18 2015-02-21 16:34:49 +00:00
b8be801b94 Bump version to 0.4.3 2015-02-20 21:27:47 +00:00
679888398f Craft wooden armor from any type of wood [group:wood] 2015-02-20 15:09:30 +00:00
c03cefbc87 Don't show admin armor in the creative inventory 2015-02-19 22:11:03 +00:00
d95f494a94 Add some wieldview bug fixes from Carbone game by Calinou 2015-02-19 22:01:09 +00:00
195d138da5 Use b3d armor model export by ExeterDad 2015-02-19 21:08:24 +00:00
dd9c63e4ca Merge pull request #17 from ExeterDad/master
unlinked textures in 3d_amor_character blend file, and created 3d_amor ....
2015-02-19 20:56:26 +00:00
358e4a2467 unlinked textures in 3d_amor_character blend file, and created 3d_amor .b3d export 2015-02-19 14:59:44 -05:00
3dd43c7c6f Update shields to use the ARMOR_MATERIALS table 2015-02-19 19:18:34 +00:00
b17d8ea55a Allow individual armor materials to be disabled via armor.conf 2015-02-19 18:55:58 +00:00
e6979e9409 Update model files for newer versions of blender 2015-02-01 16:53:39 +00:00
466c5e6957 Add missing 'admin boots' texture 2015-01-24 00:18:20 +00:00
a9fcbf29fe Added cactus armor and admin armor 2015-01-09 20:16:22 +00:00
499d5af310 More error logging enhancements 2015-01-07 21:25:40 +00:00
e3c2616328 Improve error logging a little 2015-01-04 21:37:12 +00:00
b5db0f1aa6 Remove undeclared variable warnings on start-up 2015-01-04 19:57:55 +00:00
ad6c464573 More UV fixes 2014-10-09 18:34:21 +01:00
5ab2f73695 Fix UV error on cape 2014-10-08 18:55:01 +01:00
e14af35b95 Add compatibilty for caped skins 2014-10-05 19:05:11 +01:00
c3d37e83c2 Remove old character model 2014-10-05 19:03:40 +01:00
046880a534 Add compatiblity for SmallJoker's u_skins fork 2014-10-02 21:08:18 +01:00
258b1cbf48 Bump version to 0.4.2 2014-09-28 19:51:35 +01:00
c10a606632 Update README.md and fix paste error in crafting_guide.txt 2014-09-28 19:37:16 +01:00
2415d66057 Merge pull request #12 from donat-b/patch-1
Update init.lua
2014-09-28 15:13:09 +01:00
abf445014e Update init.lua
fix typo in condition
2014-09-28 15:39:31 +04:00
4415e2b33b Add support for simple skins by TenPlus1 2014-09-12 18:30:09 +01:00
36688c74a8 Add check for nil player inventory 2014-09-11 20:13:16 +01:00
672dbe1f54 Expose physics overrides in global armor.def 2014-09-11 20:11:08 +01:00
3c98acb9c9 Make ARMOR_DROP default depend on presence of bones mod 2014-08-17 17:07:27 +01:00
5075cc48a4 Allow per world configuration overrides 2014-08-17 17:00:52 +01:00
7eebc378a6 Fix crash if wielditem inventory image is nil 2014-06-25 21:10:35 +01:00
6f7a0ea7fc Merge pull request #9 from Megaf/master
Added Gold Armor and Shield
2014-06-12 22:28:47 +01:00
7ee4126d15 Merge branch 'master' of https://github.com/Megaf/minetest-3d_armor 2014-06-12 12:39:50 -03:00
b67de94223 Added gold recipe. 2014-06-12 12:39:17 -03:00
3604420d9e Added Gold Shield recipe. 2014-06-12 12:10:43 -03:00
0936d6f173 Change gold damage.
Gold is equivalent as bronze now.
2014-06-12 12:06:03 -03:00
e4ab8c02ac Created gold shields
They are as strong as Bronze Shields.
2014-06-12 12:04:08 -03:00
db157c080d Added Gold textures to shields.
new file:   shields/textures/shields_inv_shield_gold.png
	new file:   shields/textures/shields_shield_gold.png
	new file:   shields/textures/shields_shield_gold_preview.png
2014-06-12 12:00:52 -03:00
aaf90c2b24 new file: 3d_armor/textures/3d_armor_inv_chestplate_gold.png 2014-06-12 11:56:43 -03:00
4420afb8d1 Added gold textures.
new file:   3d_armor/textures/3d_armor_boots_gold.png
	new file:   3d_armor/textures/3d_armor_boots_gold_preview.png
	new file:   3d_armor/textures/3d_armor_chestplate_gold.png
	new file:   3d_armor/textures/3d_armor_chestplate_gold_preview.png
	new file:   3d_armor/textures/3d_armor_helmet_gold.png
	new file:   3d_armor/textures/3d_armor_helmet_gold_preview.png
	new file:   3d_armor/textures/3d_armor_inv_boots_gold.png
	new file:   3d_armor/textures/3d_armor_inv_helmet_gold.png
	new file:   3d_armor/textures/3d_armor_inv_leggings_gold.png
	new file:   3d_armor/textures/3d_armor_leggings_gold.png
	new file:   3d_armor/textures/3d_armor_leggings_gold_preview.png
2014-06-12 11:44:28 -03:00
3e9ce303e6 Update crafting_guide.txt
Added gold armor recipes.
2014-06-12 11:34:28 -03:00
11887fc73b Added Gold armor 2014-06-12 11:32:58 -03:00
85f56f7ba0 Check for valid player inventory 2014-04-21 19:10:24 +01:00
eedf913638 Set inventory mod to main page on die player 2014-04-18 00:12:38 +01:00
ecfd397d77 Fix error in previous commit 2014-04-15 22:06:47 +01:00
b76508397f Only round the drop position when using bones mod 2014-04-15 21:55:23 +01:00
9aaba7569c Update config example 2014-04-15 21:52:24 +01:00
1886fe6b1a Fix armor wear level being fully restored on item drop 2014-04-14 19:28:23 +01:00
19d45efd12 Fix preview not updating when armor is destroyed 2014-04-14 19:25:10 +01:00
72b612f081 Update armor.conf.example 2014-04-13 20:26:14 +01:00
8a881022e9 Make armor more configurable 2014-04-13 20:17:11 +01:00
8457220413 Add support for unified inventory and skins 2014-04-13 17:41:19 +01:00
cf2786a818 Add support for bones mod 2014-04-08 22:03:01 +01:00
5345c50c7e Bump version to 0.4.1 for minetest 0.4.9 2014-01-03 20:55:32 +00:00
2b8e0c5fd9 Merge pull request #6 from Bremaweb/armor-physics
add physics overrides to armor
2013-12-23 11:24:12 -08:00
55e2b69a08 change delay back to 0 2013-12-22 19:51:46 -06:00
a07a00c117 remove unused variable 2013-12-20 23:56:50 -06:00
681bf25505 add physics overrides to armor 2013-12-20 23:52:15 -06:00
324 changed files with 3189 additions and 9657 deletions

1
.gitignore vendored
View File

@ -4,4 +4,5 @@
*bak* *bak*
tags tags
*.vim *.vim
armor.conf

9
3d_armor/LICENSE.txt Normal file
View File

@ -0,0 +1,9 @@
[mod] 3d Armor [3d_armor]
=========================
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

View File

@ -1,7 +1,11 @@
[mod] Visible Player Armor [3d_armor] [mod] Visible Player Armor [3d_armor]
===================================== =====================================
depends: default, inventory_plus Depends: default
Recommends: sfinv, unified_inventory or smart_inventory (use only one to avoid conflicts)
Supports: player_monoids and armor_monoid
Adds craftable armor that is visible to other players. Each armor item worn contributes to Adds craftable armor that is visible to other players. Each armor item worn contributes to
a player's armor group level making them less vulnerable to weapons. a player's armor group level making them less vulnerable to weapons.
@ -9,8 +13,176 @@ a player's armor group level making them less vulnerable to weapons.
Armor takes damage when a player is hurt but also offers a percentage chance of healing. Armor takes damage when a player is hurt but also offers a percentage chance of healing.
Overall level is boosted by 10% when wearing a full matching set. Overall level is boosted by 10% when wearing a full matching set.
default settings: [minetest.conf] 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.
# Set number of seconds between armor updates. Armor Configuration
3d_armor_update_time = 1 -------------------
Override the following default settings by adding them to your minetest.conf file.
-- Set false to disable individual armor materials.
armor_material_wood = true
armor_material_cactus = true
armor_material_steel = true
armor_material_bronze = true
armor_material_diamond = true
armor_material_gold = true
armor_material_mithril = true
armor_material_crystal = true
-- Increase this if you get initialization glitches when a player first joins.
armor_init_delay = 1
-- Number of initialization attempts.
-- Use in conjunction with armor_init_delay if initialization problems persist.
armor_init_times = 1
-- Increase this if armor is not getting into bones due to server lag.
armor_bones_delay = 1
-- How often player armor items are updated.
armor_update_time = 1
-- Drop armor when a player dies.
-- Uses bones mod if present, otherwise items are dropped around the player.
armor_drop = true
-- Pulverise armor when a player dies, overrides armor_drop.
armor_destroy = false
-- You can use this to increase or decrease overall armor effectiveness,
-- eg: level_multiplier = 0.5 will reduce armor level by half.
armor_level_multiplier = 1
-- You can use this to increase or decrease overall armor healing,
-- eg: armor_heal_multiplier = 0 will disable healing altogether.
armor_heal_multiplier = 1
-- Enable water protection (periodically restores breath when activated)
armor_water_protect = true
-- Enable fire protection (defaults true if using ethereal mod)
armor_fire_protect = false
-- Enable punch damage effects.
armor_punch_damage = true
API
---
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.
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_punched` 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)

474
3d_armor/api.lua Normal file
View File

@ -0,0 +1,474 @@
local skin_previews = {}
local use_player_monoids = minetest.global_exists("player_monoids")
local use_armor_monoid = minetest.global_exists("armor_monoid")
local armor_def = setmetatable({}, {
__index = function()
return setmetatable({
groups = setmetatable({}, {
__index = function()
return 0
end})
}, {
__index = function()
return 0
end
})
end,
})
local armor_textures = setmetatable({}, {
__index = function()
return setmetatable({}, {
__index = function()
return "blank.png"
end
})
end
})
armor = {
timer = 0,
elements = {"head", "torso", "legs", "feet"},
physics = {"jump", "speed", "gravity"},
attributes = {"heal", "fire", "water"},
formspec = "image[2.5,0;2,4;armor_preview]"..
default.gui_bg..
default.gui_bg_img..
default.gui_slots..
default.get_hotbar_bg(0, 4.7)..
"list[current_player;main;0,4.7;8,1;]"..
"list[current_player;main;0,5.85;8,3;8]",
def = armor_def,
textures = armor_textures,
default_skin = "character",
materials = {
wood = "group:wood",
cactus = "default:cactus",
steel = "default:steel_ingot",
bronze = "default:bronze_ingot",
diamond = "default:diamond",
gold = "default:gold_ingot",
mithril = "moreores:mithril_ingot",
crystal = "ethereal:crystal_ingot",
},
fire_nodes = {
{"default:lava_source", 5, 8},
{"default:lava_flowing", 5, 8},
{"fire:basic_flame", 3, 4},
{"fire:permanent_flame", 3, 4},
{"ethereal:crystal_spike", 2, 1},
{"ethereal:fire_flower", 2, 1},
{"default:torch", 1, 1},
{"default:torch_ceiling", 1, 1},
{"default:torch_wall", 1, 1},
},
registered_groups = {["fleshy"]=100},
registered_callbacks = {
on_update = {},
on_equip = {},
on_unequip = {},
on_damage = {},
on_destroy = {},
},
version = "0.4.9",
}
armor.config = {
init_delay = 2,
init_times = 10,
bones_delay = 1,
update_time = 1,
drop = minetest.get_modpath("bones") ~= nil,
destroy = false,
level_multiplier = 1,
heal_multiplier = 1,
material_wood = true,
material_cactus = true,
material_steel = true,
material_bronze = true,
material_diamond = true,
material_gold = true,
material_mithril = true,
material_crystal = true,
water_protect = true,
fire_protect = minetest.get_modpath("ethereal") ~= nil,
punch_damage = true,
}
-- Armor Registration
armor.register_armor = function(self, name, def)
minetest.register_tool(name, def)
end
armor.register_armor_group = function(self, group, base)
base = base or 100
self.registered_groups[group] = base
if use_armor_monoid then
armor_monoid.register_armor_group(group, base)
end
end
-- Armor callbacks
armor.register_on_update = function(self, func)
if type(func) == "function" then
table.insert(self.registered_callbacks.on_update, func)
end
end
armor.register_on_equip = function(self, func)
if type(func) == "function" then
table.insert(self.registered_callbacks.on_equip, func)
end
end
armor.register_on_unequip = function(self, func)
if type(func) == "function" then
table.insert(self.registered_callbacks.on_unequip, func)
end
end
armor.register_on_damage = function(self, func)
if type(func) == "function" then
table.insert(self.registered_callbacks.on_damage, func)
end
end
armor.register_on_destroy = function(self, func)
if type(func) == "function" then
table.insert(self.registered_callbacks.on_destroy, func)
end
end
armor.run_callbacks = function(self, callback, player, index, stack)
if stack then
local def = stack:get_definition() or {}
if type(def[callback]) == "function" then
def[callback](player, index, stack)
end
end
local callbacks = self.registered_callbacks[callback]
if callbacks then
for _, func in pairs(callbacks) do
func(player, index, stack)
end
end
end
armor.update_player_visuals = function(self, player)
if not player then
return
end
local name = player:get_player_name()
if self.textures[name] then
default.player_set_textures(player, {
self.textures[name].skin,
self.textures[name].armor,
self.textures[name].wielditem,
})
end
end
armor.set_player_armor = function(self, player)
local name, player_inv = self:get_valid_player(player, "[set_player_armor]")
if not name then
return
end
local state = 0
local count = 0
local material = {count=1}
local preview = armor:get_preview(name)
local texture = "3d_armor_trans.png"
local textures = {}
local physics = {}
local attributes = {}
local levels = {}
local groups = {}
local change = {}
for _, phys in pairs(self.physics) do
physics[phys] = 1
end
for _, attr in pairs(self.attributes) do
attributes[attr] = 0
end
for group, _ in pairs(self.registered_groups) do
change[group] = 1
levels[group] = 0
end
local list = player_inv:get_list("armor")
for i, stack in pairs(list) do
if stack:get_count() == 1 then
local def = stack:get_definition()
for _, element in pairs(self.elements) do
if def.groups["armor_"..element] then
if def.armor_groups then
for group, level in pairs(def.armor_groups) do
if levels[group] then
levels[group] = levels[group] + level
end
end
else
local level = def.groups["armor_"..element]
levels["fleshy"] = levels["fleshy"] + level
end
end
-- DEPRECATED, use armor_groups instead
if def.groups["armor_radiation"] and levels["radiation"] then
levels["radiation"] = def.groups["armor_radiation"]
end
end
local item = stack:get_name()
local tex = def.texture or item:gsub("%:", "_")
tex = tex:gsub(".png$", "")
local prev = def.preview or tex.."_preview"
prev = prev:gsub(".png$", "")
texture = texture.."^"..tex..".png"
preview = preview.."^"..prev..".png"
state = state + stack:get_wear()
count = count + 1
for _, phys in pairs(self.physics) do
local value = def.groups["physics_"..phys] or 0
physics[phys] = physics[phys] + value
end
for _, attr in pairs(self.attributes) do
local value = def.groups["armor_"..attr] or 0
attributes[attr] = attributes[attr] + value
end
local mat = string.match(item, "%:.+_(.+)$")
if material.name then
if material.name == mat then
material.count = material.count + 1
end
else
material.name = mat
end
end
end
for group, level in pairs(levels) do
if level > 0 then
level = level * armor.config.level_multiplier
if material.name and material.count == #self.elements then
level = level * 1.1
end
end
local base = self.registered_groups[group]
self.def[name].groups[group] = level
if level > base then
level = base
end
groups[group] = base - level
change[group] = groups[group] / base
end
for _, attr in pairs(self.attributes) do
self.def[name][attr] = attributes[attr]
end
for _, phys in pairs(self.physics) do
self.def[name][phys] = physics[phys]
end
if use_armor_monoid then
armor_monoid.monoid:add_change(player, change, "3d_armor:armor")
else
player:set_armor_groups(groups)
end
if use_player_monoids then
player_monoids.speed:add_change(player, physics.speed,
"3d_armor:physics")
player_monoids.jump:add_change(player, physics.jump,
"3d_armor:physics")
player_monoids.gravity:add_change(player, physics.gravity,
"3d_armor:physics")
else
player:set_physics_override(physics)
end
self.textures[name].armor = texture
self.textures[name].preview = preview
self.def[name].level = self.def[name].groups.fleshy or 0
self.def[name].state = state
self.def[name].count = count
self:update_player_visuals(player)
self:run_callbacks("on_update", player)
end
armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabilities)
local name, player_inv = self:get_valid_player(player, "[punch]")
if not name then
return
end
local state = 0
local count = 0
local recip = true
local default_groups = {cracky=3, snappy=3, choppy=3, crumbly=3, level=1}
local list = player_inv:get_list("armor")
for i, stack in pairs(list) do
if stack:get_count() == 1 then
local name = stack:get_name()
local use = minetest.get_item_group(name, "armor_use") or 0
local damage = use > 0
local def = stack:get_definition() or {}
if type(def.on_punched) == "function" then
damage = def.on_punched(player, hitter, time_from_last_punch,
tool_capabilities) ~= false and damage == true
end
if damage == true and tool_capabilities then
local damage_groups = def.damage_groups or default_groups
local level = damage_groups.level or 0
local groupcaps = tool_capabilities.groupcaps or {}
local uses = 0
damage = false
for group, caps in pairs(groupcaps) do
local maxlevel = caps.maxlevel or 0
local diff = maxlevel - level
if diff == 0 then
diff = 1
end
if diff > 0 and caps.times then
local group_level = damage_groups[group]
if group_level then
local time = caps.times[group_level]
if time then
local dt = time_from_last_punch or 0
if dt > time / diff then
if caps.uses then
uses = caps.uses * math.pow(3, diff)
end
damage = true
break
end
end
end
end
end
if damage == true and recip == true and hitter and
def.reciprocate_damage == true and uses > 0 then
local item = hitter:get_wielded_item()
if item and item:get_name() ~= "" then
item:add_wear(65535 / uses)
hitter:set_wielded_item(item)
end
-- reciprocate tool damage only once
recip = false
end
end
if damage == true and hitter == "fire" then
damage = minetest.get_item_group(name, "flammable") > 0
end
if damage == true then
self:damage(player, i, stack, use)
end
state = state + stack:get_wear()
count = count + 1
end
end
self.def[name].state = state
self.def[name].count = count
end
armor.damage = function(self, player, index, stack, use)
local old_stack = ItemStack(stack)
stack:add_wear(use)
self:run_callbacks("on_damage", player, index, stack)
self:set_inventory_stack(player, index, stack)
if stack:get_count() == 0 then
self:run_callbacks("on_unequip", player, index, old_stack)
self:run_callbacks("on_destroy", player, index, old_stack)
self:set_player_armor(player)
end
end
armor.get_player_skin = function(self, name)
local skin = nil
if self.skin_mod == "skins" or self.skin_mod == "simple_skins" then
skin = skins.skins[name]
elseif self.skin_mod == "u_skins" then
skin = u_skins.u_skins[name]
elseif self.skin_mod == "wardrobe" then
local skins = wardrobe.playerSkins or {}
if skins[name] then
skin = string.gsub(skins[name], "%.png$","")
end
end
return skin or armor.default_skin
end
armor.add_preview = function(self, preview)
skin_previews[preview] = true
end
armor.get_preview = function(self, name)
local preview = armor:get_player_skin(name).."_preview.png"
if skin_previews[preview] then
return preview
end
return "character_preview.png"
end
armor.get_armor_formspec = function(self, name, listring)
if armor.def[name].init_time == 0 then
return "label[0,0;Armor not initialized!]"
end
local formspec = armor.formspec..
"list[detached:"..name.."_armor;armor;0,0.5;2,3;]"
if listring == true then
formspec = formspec.."listring[current_player;main]"..
"listring[detached:"..name.."_armor;armor]"
end
formspec = formspec:gsub("armor_preview", armor.textures[name].preview)
formspec = formspec:gsub("armor_level", armor.def[name].level)
for _, attr in pairs(self.attributes) do
formspec = formspec:gsub("armor_attr_"..attr, armor.def[name][attr])
end
for _, group in pairs(self.attributes) do
formspec = formspec:gsub("armor_group_"..group, armor.def[name][group])
end
return formspec
end
armor.update_inventory = function(self, player)
-- DEPRECATED: Legacy inventory support
end
armor.set_inventory_stack = function(self, player, i, stack)
local msg = "[set_inventory_stack]"
local name = player:get_player_name()
if not name then
minetest.log("warning", "3d_armor: Player name is nil "..msg)
return
end
local player_inv = player:get_inventory()
local armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"})
if not player_inv then
minetest.log("warning", "3d_armor: Player inventory is nil "..msg)
return
elseif not armor_inv then
minetest.log("warning", "3d_armor: Detached armor inventory is nil "..msg)
return
end
player_inv:set_stack("armor", i, stack)
armor_inv:set_stack("armor", i, stack)
end
armor.get_valid_player = function(self, player, msg)
msg = msg or ""
if not player then
minetest.log("warning", "3d_armor: Player reference is nil "..msg)
return
end
local name = player:get_player_name()
if not name then
minetest.log("warning", "3d_armor: Player name is nil "..msg)
return
end
local inv = player:get_inventory()
if not inv then
minetest.log("warning", "3d_armor: Player inventory is nil "..msg)
return
end
return name, inv
end
armor.drop_armor = function(pos, stack)
local obj = minetest.add_item(pos, stack)
if obj then
obj:setvelocity({x=math.random(-1, 1), y=5, z=math.random(-1, 1)})
end
end

View File

@ -0,0 +1,65 @@
-- DEPRECATED, will not be supported in future versions
-- See README.txt for new configuration options.
-- Armor Configuration (defaults)
-- You can remove any unwanted armor materials from this table.
-- Note that existing armor that is removed will show up as an unknown item.
ARMOR_MATERIALS = {
wood = "group:wood",
cactus = "default:cactus",
steel = "default:steel_ingot",
bronze = "default:bronze_ingot",
diamond = "default:diamond",
gold = "default:gold_ingot",
mithril = "moreores:mithril_ingot",
crystal = "ethereal:crystal_ingot",
}
-- Enable fire protection (defaults true if using ethereal mod)
ARMOR_FIRE_PROTECT = false
-- Fire protection nodes, (name, protection level, damage)
ARMOR_FIRE_NODES = {
{"default:lava_source", 5, 4},
{"default:lava_flowing", 5, 4},
{"fire:basic_flame", 3, 4},
{"fire:permanent_flame", 3, 4},
{"ethereal:crystal_spike", 2, 1},
{"ethereal:fire_flower", 2, 1},
{"default:torch", 1, 1},
}
-- Increase this if you get initialization glitches when a player first joins.
ARMOR_INIT_DELAY = 1
-- Number of initialization attempts.
-- Use in conjunction with ARMOR_INIT_DELAY if initialization problems persist.
ARMOR_INIT_TIMES = 1
-- Increase this if armor is not getting into bones due to server lag.
ARMOR_BONES_DELAY = 1
-- How often player armor/wield items are updated.
ARMOR_UPDATE_TIME = 1
-- Drop armor when a player dies.
-- Uses bones mod if present, otherwise items are dropped around the player.
ARMOR_DROP = true
-- Pulverise armor when a player dies, overrides ARMOR_DROP.
ARMOR_DESTROY = false
-- You can use this to increase or decrease overall armor effectiveness,
-- eg: ARMOR_LEVEL_MULTIPLIER = 0.5 will reduce armor level by half.
ARMOR_LEVEL_MULTIPLIER = 1
-- You can use this to increase or decrease overall armor healing,
-- eg: ARMOR_HEAL_MULTIPLIER = 0 will disable healing altogether.
ARMOR_HEAL_MULTIPLIER = 1
-- You can use this to increase or decrease overall armor radiation protection,
-- eg: ARMOR_RADIATION_MULTIPLIER = 0 will completely disable radiation protection.
-- Note: patched technic mod is required
ARMOR_RADIATION_MULTIPLIER = 1

View File

@ -1,247 +1,348 @@
local time = 0 local S = function(s) return s end
local update_time = tonumber(minetest.setting_get("3d_armor_update_time")) if minetest.global_exists("intllib") then
if not update_time then S = intllib.Getter()
update_time = 1
minetest.setting_set("3d_armor_update_time", tostring(update_time))
end end
armor = { armor:register_armor("3d_armor:helmet_admin", {
player_hp = {}, description = S("Admin Helmet"),
elements = {"head", "torso", "legs", "feet"}, inventory_image = "3d_armor_inv_helmet_admin.png",
formspec = "size[8,8.5]button[0,0;2,0.5;main;Back]" armor_groups = {fleshy=100},
.."list[current_player;main;0,4.5;8,4;]" groups = {armor_head=1, armor_heal=100, armor_use=0, armor_water=1,
.."list[detached:player_name_armor;armor_head;3,0;1,1;]" not_in_creative_inventory=1},
.."list[detached:player_name_armor;armor_torso;3,1;1,1;]" on_drop = function(itemstack, dropper, pos)
.."list[detached:player_name_armor;armor_legs;3,2;1,1;]"
.."list[detached:player_name_armor;armor_feet;3,3;1,1;]",
textures = {},
default_skin = "character.png",
}
-- armor.def - Added by BlockMen for HUD integration
armor.def = {
state = 0,
count = 0,
}
armor.update_player_visuals = function(self, player)
if not player then
return return
end end,
local name = player:get_player_name() })
if self.textures[name] then
default.player_set_textures(player, { armor:register_armor("3d_armor:chestplate_admin", {
self.textures[name].skin, description = S("Admin Chestplate"),
self.textures[name].armor, inventory_image = "3d_armor_inv_chestplate_admin.png",
self.textures[name].wielditem, armor_groups = {fleshy=100},
groups = {armor_torso=1, armor_heal=100, armor_use=0,
not_in_creative_inventory=1},
on_drop = function(itemstack, dropper, pos)
return
end,
})
armor:register_armor("3d_armor:leggings_admin", {
description = S("Admin Leggings"),
inventory_image = "3d_armor_inv_leggings_admin.png",
armor_groups = {fleshy=100},
groups = {armor_legs=1, armor_heal=100, armor_use=0,
not_in_creative_inventory=1},
on_drop = function(itemstack, dropper, pos)
return
end,
})
armor:register_armor("3d_armor:boots_admin", {
description = S("Admin Boots"),
inventory_image = "3d_armor_inv_boots_admin.png",
armor_groups = {fleshy=100},
groups = {armor_feet=1, armor_heal=100, armor_use=0,
not_in_creative_inventory=1},
on_drop = function(itemstack, dropper, pos)
return
end,
})
minetest.register_alias("adminboots", "3d_armor:boots_admin")
minetest.register_alias("adminhelmet", "3d_armor:helmet_admin")
minetest.register_alias("adminchestplate", "3d_armor:chestplate_admin")
minetest.register_alias("adminleggings", "3d_armor:leggings_admin")
if armor.materials.wood then
armor:register_armor("3d_armor:helmet_wood", {
description = S("Wood Helmet"),
inventory_image = "3d_armor_inv_helmet_wood.png",
groups = {armor_head=1, armor_heal=0, armor_use=2000, flammable=1},
armor_groups = {fleshy=5},
damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
})
armor:register_armor("3d_armor:chestplate_wood", {
description = S("Wood Chestplate"),
inventory_image = "3d_armor_inv_chestplate_wood.png",
groups = {armor_torso=1, armor_heal=0, armor_use=2000, flammable=1},
armor_groups = {fleshy=10},
damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
})
armor:register_armor("3d_armor:leggings_wood", {
description = S("Wood Leggings"),
inventory_image = "3d_armor_inv_leggings_wood.png",
groups = {armor_legs=1, armor_heal=0, armor_use=2000, flammable=1},
armor_groups = {fleshy=10},
damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
})
armor:register_armor("3d_armor:boots_wood", {
description = S("Wood Boots"),
inventory_image = "3d_armor_inv_boots_wood.png",
armor_groups = {fleshy=5},
damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
groups = {armor_feet=1, armor_heal=0, armor_use=2000, flammable=1},
}) })
end end
if armor.materials.cactus then
armor:register_armor("3d_armor:helmet_cactus", {
description = S("Cactus Helmet"),
inventory_image = "3d_armor_inv_helmet_cactus.png",
groups = {armor_head=1, armor_heal=0, armor_use=1000},
armor_groups = {fleshy=5},
damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
})
armor:register_armor("3d_armor:chestplate_cactus", {
description = S("Cactus Chestplate"),
inventory_image = "3d_armor_inv_chestplate_cactus.png",
groups = {armor_torso=1, armor_heal=0, armor_use=1000},
armor_groups = {fleshy=10},
damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
})
armor:register_armor("3d_armor:leggings_cactus", {
description = S("Cactus Leggings"),
inventory_image = "3d_armor_inv_leggings_cactus.png",
groups = {armor_legs=1, armor_heal=0, armor_use=1000},
armor_groups = {fleshy=10},
damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
})
armor:register_armor("3d_armor:boots_cactus", {
description = S("Cactus Boots"),
inventory_image = "3d_armor_inv_boots_cactus.png",
groups = {armor_feet=1, armor_heal=0, armor_use=1000},
armor_groups = {fleshy=5},
damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
})
end end
armor.set_player_armor = function(self, player) if armor.materials.steel then
if not player then armor:register_armor("3d_armor:helmet_steel", {
return description = S("Steel Helmet"),
end inventory_image = "3d_armor_inv_helmet_steel.png",
local name = player:get_player_name() groups = {armor_head=1, armor_heal=0, armor_use=800,
local player_inv = player:get_inventory() physics_speed=-0.01, physics_gravity=0.01},
local armor_texture = "3d_armor_trans.png" armor_groups = {fleshy=10},
local armor_level = 0 damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
local state = 0 })
local items = 0 armor:register_armor("3d_armor:chestplate_steel", {
local textures = {} description = S("Steel Chestplate"),
local elements = {} inventory_image = "3d_armor_inv_chestplate_steel.png",
for i, v in ipairs(self.elements) do groups = {armor_torso=1, armor_heal=0, armor_use=800,
local stack = player_inv:get_stack("armor_"..v, 1) physics_speed=-0.04, physics_gravity=0.04},
local level = stack:get_definition().groups["armor_"..v] armor_groups = {fleshy=15},
local item = stack:get_name() damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
elements[i] = string.match(item, "%:.+_(.+)$") })
if level then armor:register_armor("3d_armor:leggings_steel", {
table.insert(textures, item:gsub("%:", "_")..".png") description = S("Steel Leggings"),
armor_level = armor_level + level inventory_image = "3d_armor_inv_leggings_steel.png",
state = state + stack:get_wear() groups = {armor_legs=1, armor_heal=0, armor_use=800,
items = items + 1 physics_speed=-0.03, physics_gravity=0.03},
end armor_groups = {fleshy=15},
end damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
if minetest.get_modpath("shields") then })
armor_level = armor_level * 0.9 armor:register_armor("3d_armor:boots_steel", {
end description = S("Steel Boots"),
if elements[1] == elements[2] and inventory_image = "3d_armor_inv_boots_steel.png",
elements[1] == elements[3] and groups = {armor_feet=1, armor_heal=0, armor_use=800,
elements[1] == elements[4] then physics_speed=-0.01, physics_gravity=0.01},
armor_level = armor_level * 1.1 armor_groups = {fleshy=10},
end damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
if #textures > 0 then })
armor_texture = table.concat(textures, "^")
end
local armor_groups = {fleshy=100}
if armor_level > 0 then
armor_groups.level = math.floor(armor_level / 20)
armor_groups.fleshy = 100 - armor_level
end
player:set_armor_groups(armor_groups)
self.textures[name].armor = armor_texture
self.def[name].state = state
self.def[name].count = items
self:update_player_visuals(player)
end end
armor.update_armor = function(self, player) if armor.materials.bronze then
if not player then armor:register_armor("3d_armor:helmet_bronze", {
return description = S("Bronze Helmet"),
end inventory_image = "3d_armor_inv_helmet_bronze.png",
local name = player:get_player_name() groups = {armor_head=1, armor_heal=6, armor_use=400,
local hp = player:get_hp() or 0 physics_speed=-0.01, physics_gravity=0.01},
if hp == 0 or hp == self.player_hp[name] then armor_groups = {fleshy=10},
return damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2},
end })
if self.player_hp[name] > hp then armor:register_armor("3d_armor:chestplate_bronze", {
local player_inv = player:get_inventory() description = S("Bronze Chestplate"),
local armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"}) inventory_image = "3d_armor_inv_chestplate_bronze.png",
if not armor_inv then groups = {armor_torso=1, armor_heal=6, armor_use=400,
return physics_speed=-0.04, physics_gravity=0.04},
end armor_groups = {fleshy=15},
local heal_max = 0 damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2},
local state = 0 })
local items = 0 armor:register_armor("3d_armor:leggings_bronze", {
for _,v in ipairs(self.elements) do description = S("Bronze Leggings"),
local stack = armor_inv:get_stack("armor_"..v, 1) inventory_image = "3d_armor_inv_leggings_bronze.png",
if stack:get_count() > 0 then groups = {armor_legs=1, armor_heal=6, armor_use=400,
local use = stack:get_definition().groups["armor_use"] or 0 physics_speed=-0.03, physics_gravity=0.03},
local heal = stack:get_definition().groups["armor_heal"] or 0 armor_groups = {fleshy=15},
local item = stack:get_name() damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2},
stack:add_wear(use) })
armor_inv:set_stack("armor_"..v, 1, stack) armor:register_armor("3d_armor:boots_bronze", {
player_inv:set_stack("armor_"..v, 1, stack) description = S("Bronze Boots"),
state = state + stack:get_wear() inventory_image = "3d_armor_inv_boots_bronze.png",
items = items + 1 groups = {armor_feet=1, armor_heal=6, armor_use=400,
if stack:get_count() == 0 then physics_speed=-0.01, physics_gravity=0.01},
local desc = minetest.registered_items[item].description armor_groups = {fleshy=10},
if desc then damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2},
minetest.chat_send_player(name, "Your "..desc.." got destroyed!") })
end
self:set_player_armor(player)
end
heal_max = heal_max + heal
end
end
self.def[name].state = state
self.def[name].count = items
if heal_max > math.random(100) then
player:set_hp(self.player_hp[name])
return
end
end
self.player_hp[name] = hp
end end
-- Register Player Model if armor.materials.diamond then
armor:register_armor("3d_armor:helmet_diamond", {
description = S("Diamond Helmet"),
inventory_image = "3d_armor_inv_helmet_diamond.png",
groups = {armor_head=1, armor_heal=12, armor_use=200},
armor_groups = {fleshy=15},
damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
})
armor:register_armor("3d_armor:chestplate_diamond", {
description = S("Diamond Chestplate"),
inventory_image = "3d_armor_inv_chestplate_diamond.png",
groups = {armor_torso=1, armor_heal=12, armor_use=200},
armor_groups = {fleshy=20},
damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
})
armor:register_armor("3d_armor:leggings_diamond", {
description = S("Diamond Leggings"),
inventory_image = "3d_armor_inv_leggings_diamond.png",
groups = {armor_legs=1, armor_heal=12, armor_use=200},
armor_groups = {fleshy=20},
damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
})
armor:register_armor("3d_armor:boots_diamond", {
description = S("Diamond Boots"),
inventory_image = "3d_armor_inv_boots_diamond.png",
groups = {armor_feet=1, armor_heal=12, armor_use=200},
armor_groups = {fleshy=15},
damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
})
end
default.player_register_model("3d_armor_character.x", { if armor.materials.gold then
animation_speed = 30, armor:register_armor("3d_armor:helmet_gold", {
textures = { description = S("Gold Helmet"),
armor.default_skin, inventory_image = "3d_armor_inv_helmet_gold.png",
"3d_armor_trans.png", groups = {armor_head=1, armor_heal=6, armor_use=300,
"3d_armor_trans.png", physics_speed=-0.02, physics_gravity=0.02},
}, armor_groups = {fleshy=10},
animations = { damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
stand = {x=0, y=79}, })
lay = {x=162, y=166}, armor:register_armor("3d_armor:chestplate_gold", {
walk = {x=168, y=187}, description = S("Gold Chestplate"),
mine = {x=189, y=198}, inventory_image = "3d_armor_inv_chestplate_gold.png",
walk_mine = {x=200, y=219}, groups = {armor_torso=1, armor_heal=6, armor_use=300,
sit = {x=81, y=160}, physics_speed=-0.05, physics_gravity=0.05},
armor_groups = {fleshy=15},
damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
})
armor:register_armor("3d_armor:leggings_gold", {
description = S("Gold Leggings"),
inventory_image = "3d_armor_inv_leggings_gold.png",
groups = {armor_legs=1, armor_heal=6, armor_use=300,
physics_speed=-0.04, physics_gravity=0.04},
armor_groups = {fleshy=15},
damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
})
armor:register_armor("3d_armor:boots_gold", {
description = S("Gold Boots"),
inventory_image = "3d_armor_inv_boots_gold.png",
groups = {armor_feet=1, armor_heal=6, armor_use=300,
physics_speed=-0.02, physics_gravity=0.02},
armor_groups = {fleshy=10},
damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
})
end
if armor.materials.mithril then
armor:register_armor("3d_armor:helmet_mithril", {
description = S("Mithril Helmet"),
inventory_image = "3d_armor_inv_helmet_mithril.png",
groups = {armor_head=1, armor_heal=12, armor_use=100},
armor_groups = {fleshy=15},
damage_groups = {cracky=2, snappy=1, level=3},
})
armor:register_armor("3d_armor:chestplate_mithril", {
description = S("Mithril Chestplate"),
inventory_image = "3d_armor_inv_chestplate_mithril.png",
groups = {armor_torso=1, armor_heal=12, armor_use=100},
armor_groups = {fleshy=20},
damage_groups = {cracky=2, snappy=1, level=3},
})
armor:register_armor("3d_armor:leggings_mithril", {
description = S("Mithril Leggings"),
inventory_image = "3d_armor_inv_leggings_mithril.png",
groups = {armor_legs=1, armor_heal=12, armor_use=100},
armor_groups = {fleshy=20},
damage_groups = {cracky=2, snappy=1, level=3},
})
armor:register_armor("3d_armor:boots_mithril", {
description = S("Mithril Boots"),
inventory_image = "3d_armor_inv_boots_mithril.png",
groups = {armor_feet=1, armor_heal=12, armor_use=100},
armor_groups = {fleshy=15},
damage_groups = {cracky=2, snappy=1, level=3},
})
end
if armor.materials.crystal then
armor:register_armor("3d_armor:helmet_crystal", {
description = S("Crystal Helmet"),
inventory_image = "3d_armor_inv_helmet_crystal.png",
groups = {armor_head=1, armor_heal=12, armor_use=100, armor_fire=1},
armor_groups = {fleshy=15},
damage_groups = {cracky=2, snappy=1, level=3},
})
armor:register_armor("3d_armor:chestplate_crystal", {
description = S("Crystal Chestplate"),
inventory_image = "3d_armor_inv_chestplate_crystal.png",
groups = {armor_torso=1, armor_heal=12, armor_use=100, armor_fire=1},
armor_groups = {fleshy=20},
damage_groups = {cracky=2, snappy=1, level=3},
})
armor:register_armor("3d_armor:leggings_crystal", {
description = S("Crystal Leggings"),
inventory_image = "3d_armor_inv_leggings_crystal.png",
groups = {armor_legs=1, armor_heal=12, armor_use=100, armor_fire=1},
armor_groups = {fleshy=20},
damage_groups = {cracky=2, snappy=1, level=3},
})
armor:register_armor("3d_armor:boots_crystal", {
description = S("Crystal Boots"),
inventory_image = "3d_armor_inv_boots_crystal.png",
groups = {armor_feet=1, armor_heal=12, armor_use=100, physics_speed=1,
physics_jump=0.5, armor_fire=1},
armor_groups = {fleshy=15},
damage_groups = {cracky=2, snappy=1, level=3},
})
end
for k, v in pairs(armor.materials) do
minetest.register_craft({
output = "3d_armor:helmet_"..k,
recipe = {
{v, v, v},
{v, "", v},
{"", "", ""},
}, },
}) })
minetest.register_craft({
-- Register Callbacks output = "3d_armor:chestplate_"..k,
recipe = {
minetest.register_on_player_receive_fields(function(player, formname, fields) {v, "", v},
local name = player:get_player_name() {v, v, v},
if fields.armor then {v, v, v},
local formspec = armor.formspec:gsub("player_name", name) },
inventory_plus.set_inventory_formspec(player, formspec) })
return minetest.register_craft({
end output = "3d_armor:leggings_"..k,
for field, _ in pairs(fields) do recipe = {
if string.find(field, "^skins_set_") then {v, v, v},
minetest.after(0, function(player) {v, "", v},
armor.textures[name].skin = skins.skins[name]..".png" {v, "", v},
armor:update_player_visuals(player) },
end, player) })
end minetest.register_craft({
end output = "3d_armor:boots_"..k,
end) recipe = {
{v, "", v},
minetest.register_on_joinplayer(function(player) {v, "", v},
default.player_set_model(player, "3d_armor_character.x") },
inventory_plus.register_button(player,"armor", "Armor")
local player_inv = player:get_inventory()
local name = player:get_player_name()
local armor_inv = minetest.create_detached_inventory(name.."_armor",{
on_put = function(inv, listname, index, stack, player)
player:get_inventory():set_stack(listname, index, stack)
armor:set_player_armor(player)
end,
on_take = function(inv, listname, index, stack, player)
player:get_inventory():set_stack(listname, index, nil)
armor:set_player_armor(player)
end,
allow_put = function(inv, listname, index, stack, player)
if inv:is_empty(listname) then
return 1
end
return 0
end,
allow_take = function(inv, listname, index, stack, player)
return stack:get_count()
end,
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
return 0
end,
}) })
for _,v in ipairs(armor.elements) do
local list = "armor_"..v
player_inv:set_size(list, 1)
armor_inv:set_size(list, 1)
armor_inv:set_stack(list, 1, player_inv:get_stack(list, 1))
end end
armor.player_hp[name] = 0
armor.def[name] = {
state = 0,
count = 0,
}
armor.textures[name] = {
skin = armor.default_skin,
armor = "3d_armor_trans.png",
wielditem = "3d_armor_trans.png",
}
if minetest.get_modpath("skins") then
local skin = skins.skins[name]
if skin and skins.get_type(skin) == skins.type.MODEL then
armor.textures[name].skin = skin..".png"
end
end
if minetest.get_modpath("player_textures") then
local filename = minetest.get_modpath("player_textures").."/textures/player_"..name
local f = io.open(filename..".png")
if f then
f:close()
armor.textures[name].skin = "player_"..name..".png"
end
end
minetest.after(0, function(player)
armor:set_player_armor(player)
end, player)
end)
minetest.register_globalstep(function(dtime)
time = time + dtime
if time > update_time then
for _,player in ipairs(minetest.get_connected_players()) do
armor:update_armor(player)
end
time = 0
end
end)

View File

@ -12,10 +12,13 @@ Helmets:
+---+---+---+ +---+---+---+
[3d_armor:helmet_wood] X = [default:wood] [3d_armor:helmet_wood] X = [default:wood]
[3d_armor:helmet_cactus] X = [default:cactus]
[3d_armor:helmet_steel] X = [default:steel_ingot] [3d_armor:helmet_steel] X = [default:steel_ingot]
[3d_armor:helmet_bronze] X = [default:bronze_ingot] [3d_armor:helmet_bronze] X = [default:bronze_ingot]
[3d_armor:helmet_diamond] X = [default:diamond] [3d_armor:helmet_diamond] X = [default:diamond]
[3d_armor:helmet_gold] X = [default:gold_ingot]
[3d_armor:helmet_mithril] X = [moreores:mithril_ingot] * [3d_armor:helmet_mithril] X = [moreores:mithril_ingot] *
[3d_armor:helmet_crystal] X = [ethereal:crystal_ingot] **
Chestplates: Chestplates:
@ -28,10 +31,13 @@ Chestplates:
+---+---+---+ +---+---+---+
[3d_armor:chestplate_wood] X = [default:wood] [3d_armor:chestplate_wood] X = [default:wood]
[3d_armor:chestplate_cactus] X = [default:cactus]
[3d_armor:chestplate_steel] X = [default:steel_ingot] [3d_armor:chestplate_steel] X = [default:steel_ingot]
[3d_armor:chestplate_bronze] X = [default:bronze_ingot] [3d_armor:chestplate_bronze] X = [default:bronze_ingot]
[3d_armor:chestplate_diamond] X = [default:diamond] [3d_armor:chestplate_diamond] X = [default:diamond]
[3d_armor:chestplate_gold] X = [default:gold_ingot]
[3d_armor:chestplate_mithril] X = [moreores:mithril_ingot] * [3d_armor:chestplate_mithril] X = [moreores:mithril_ingot] *
[3d_armor:chestplate_crystal] X = [ethereal:crystal_ingot] **
Leggings: Leggings:
@ -44,10 +50,13 @@ Leggings:
+---+---+---+ +---+---+---+
[3d_armor:leggings_wood] X = [default:wood] [3d_armor:leggings_wood] X = [default:wood]
[3d_armor:leggings_cactus] X = [default:cactus]
[3d_armor:leggings_steel] X = [default:steel_ingot] [3d_armor:leggings_steel] X = [default:steel_ingot]
[3d_armor:leggings_bronze] X = [default:bronze_ingot] [3d_armor:leggings_bronze] X = [default:bronze_ingot]
[3d_armor:leggings_diamond] X = [default:diamond] [3d_armor:leggings_diamond] X = [default:diamond]
[3d_armor:leggings_gold] X = [default:gold_ingot]
[3d_armor:leggings_mithril] X = [moreores:mithril_ingot] * [3d_armor:leggings_mithril] X = [moreores:mithril_ingot] *
[3d_armor:leggings_crystal] X = [ethereal:crystal_ingot] **
Boots: Boots:
@ -58,10 +67,13 @@ Boots:
+---+---+---+ +---+---+---+
[3d_armor:boots_wood] X = [default:wood] [3d_armor:boots_wood] X = [default:wood]
[3d_armor:boots_cactus] X = [default:cactus]
[3d_armor:boots_steel] X = [default:steel_ingot] [3d_armor:boots_steel] X = [default:steel_ingot]
[3d_armor:boots_bronze] X = [default:bronze_ingot [3d_armor:boots_bronze] X = [default:bronze_ingot
[3d_armor:boots_diamond] X = [default:diamond] [3d_armor:boots_diamond] X = [default:diamond]
[3d_armor:boots_gold] X = [default:gold_ingot]
[3d_armor:boots_mithril] X = [moreores:mithril_ingot] * [3d_armor:boots_mithril] X = [moreores:mithril_ingot] *
[3d_armor:boots_crystal] X = [ethereal:crystal_ingot] **
* Requires moreores mod by Calinou - https://forum.minetest.net/viewtopic.php?id=549 * Requires moreores mod by Calinou - https://forum.minetest.net/viewtopic.php?id=549
** Requires ethereal mod by Chinchow & TenPlus1 - https://github.com/tenplus1/ethereal

View File

@ -1,3 +1,7 @@
default default
inventory_plus player_monoids?
armor_monoid?
fire?
ethereal?
bakedclay?
intllib?

1
3d_armor/description.txt Normal file
View File

@ -0,0 +1 @@
Adds craftable armor that is visible to other players.

View File

@ -1,206 +1,409 @@
dofile(minetest.get_modpath(minetest.get_current_modname()).."/armor.lua") local S = function(s) return s end
local use_moreores = minetest.get_modpath("moreores") if minetest.global_exists("intllib") then
S = intllib.Getter()
end
local modname = minetest.get_current_modname()
local modpath = minetest.get_modpath(modname)
local worldpath = minetest.get_worldpath()
local last_punch_time = {}
local pending_players = {}
local timer = 0
-- Regisiter Head Armor dofile(modpath.."/api.lua")
minetest.register_tool("3d_armor:helmet_wood", { -- Legacy Config Support
description = "Wood Helmet",
inventory_image = "3d_armor_inv_helmet_wood.png",
groups = {armor_head=5, armor_heal=0, armor_use=2000},
wear = 0,
})
minetest.register_tool("3d_armor:helmet_steel", { local input = io.open(modpath.."/armor.conf", "r")
description = "Steel Helmet", if input then
inventory_image = "3d_armor_inv_helmet_steel.png", dofile(modpath.."/armor.conf")
groups = {armor_head=10, armor_heal=0, armor_use=500}, input:close()
wear = 0, input = nil
}) end
input = io.open(worldpath.."/armor.conf", "r")
minetest.register_tool("3d_armor:helmet_bronze", { if input then
description = "Bronze Helmet", dofile(worldpath.."/armor.conf")
inventory_image = "3d_armor_inv_helmet_bronze.png", input:close()
groups = {armor_head=10, armor_heal=6, armor_use=250}, input = nil
wear = 0, end
}) for name, _ in pairs(armor.config) do
local global = "ARMOR_"..name:upper()
minetest.register_tool("3d_armor:helmet_diamond", { if minetest.global_exists(global) then
description = "Diamond Helmet", armor.config[name] = _G[global]
inventory_image = "3d_armor_inv_helmet_diamond.png", end
groups = {armor_head=15, armor_heal=12, armor_use=100}, end
wear = 0, if minetest.global_exists("ARMOR_MATERIALS") then
}) armor.materials = table.copy(ARMOR_MATERIALS)
end
if use_moreores then if minetest.global_exists("ARMOR_FIRE_NODES") then
minetest.register_tool("3d_armor:helmet_mithril", { armor.fire_nodes = table.copy(ARMOR_FIRE_NODES)
description = "Mithril Helmet",
inventory_image = "3d_armor_inv_helmet_mithril.png",
groups = {armor_head=15, armor_heal=12, armor_use=50},
wear = 0,
})
end end
-- Regisiter Torso Armor -- Load Configuration
minetest.register_tool("3d_armor:chestplate_wood", { for name, config in pairs(armor.config) do
description = "Wood Chestplate", local setting = minetest.setting_get("armor_"..name)
inventory_image = "3d_armor_inv_chestplate_wood.png", if type(config) == "number" then
groups = {armor_torso=10, armor_heal=0, armor_use=2000}, setting = tonumber(setting)
wear = 0, elseif type(config) == "boolean" then
}) setting = minetest.setting_getbool("armor_"..name)
end
minetest.register_tool("3d_armor:chestplate_steel", { if setting ~= nil then
description = "Steel Chestplate", armor.config[name] = setting
inventory_image = "3d_armor_inv_chestplate_steel.png", end
groups = {armor_torso=15, armor_heal=0, armor_use=500}, end
wear = 0, for material, _ in pairs(armor.materials) do
}) local key = "material_"..material
if armor.config[key] == false then
minetest.register_tool("3d_armor:chestplate_bronze", { armor.materials[material] = nil
description = "Bronze Chestplate", end
inventory_image = "3d_armor_inv_chestplate_bronze.png",
groups = {armor_torso=15, armor_heal=6, armor_use=250},
wear = 0,
})
minetest.register_tool("3d_armor:chestplate_diamond", {
description = "Diamond Chestplate",
inventory_image = "3d_armor_inv_chestplate_diamond.png",
groups = {armor_torso=20, armor_heal=12, armor_use=100},
wear = 0,
})
if use_moreores then
minetest.register_tool("3d_armor:chestplate_mithril", {
description = "Mithril Chestplate",
inventory_image = "3d_armor_inv_chestplate_mithril.png",
groups = {armor_torso=20, armor_heal=12, armor_use=50},
wear = 0,
})
end end
-- Regisiter Leg Armor dofile(modpath.."/armor.lua")
minetest.register_tool("3d_armor:leggings_wood", { -- Mod Compatibility
description = "Wood Leggings",
inventory_image = "3d_armor_inv_leggings_wood.png",
groups = {armor_legs=5, armor_heal=0, armor_use=2000},
wear = 0,
})
minetest.register_tool("3d_armor:leggings_steel", { if minetest.get_modpath("technic") then
description = "Steel Leggings", armor.formspec = armor.formspec..
inventory_image = "3d_armor_inv_leggings_steel.png", "label[5,2.5;"..S("Radiation")..": armor_group_radiation]"
groups = {armor_legs=15, armor_heal=0, armor_use=500}, armor:register_armor_group("radiation")
wear = 0, end
}) local skin_mods = {"skins", "u_skins", "simple_skins", "wardrobe"}
for _, mod in pairs(skin_mods) do
minetest.register_tool("3d_armor:leggings_bronze", { local path = minetest.get_modpath(mod)
description = "Bronze Leggings", if path then
inventory_image = "3d_armor_inv_leggings_bronze.png", local dir_list = minetest.get_dir_list(path.."/textures")
groups = {armor_legs=15, armor_heal=6, armor_use=250}, for _, fn in pairs(dir_list) do
wear = 0, if fn:find("_preview.png$") then
}) armor:add_preview(fn)
end
minetest.register_tool("3d_armor:leggings_diamond", { end
description = "Diamond Leggings", armor.skin_mod = mod
inventory_image = "3d_armor_inv_leggings_diamond.png", end
groups = {armor_legs=20, armor_heal=12, armor_use=100}, end
wear = 0, if not minetest.get_modpath("moreores") then
}) armor.materials.mithril = nil
end
if use_moreores then if not minetest.get_modpath("ethereal") then
minetest.register_tool("3d_armor:leggings_mithril", { armor.materials.crystal = nil
description = "Mithril Leggings",
inventory_image = "3d_armor_inv_leggings_mithril.png",
groups = {armor_legs=20, armor_heal=12, armor_use=50},
wear = 0,
})
end end
-- Regisiter Boots -- Armor Initialization
minetest.register_tool("3d_armor:boots_wood", { armor.formspec = armor.formspec..
description = "Wood Boots", "label[5,1;"..S("Level")..": armor_level]"..
inventory_image = "3d_armor_inv_boots_wood.png", "label[5,1.5;"..S("Heal")..": armor_attr_heal]"
groups = {armor_feet=5, armor_heal=0, armor_use=2000}, if armor.config.fire_protect then
wear = 0, armor.formspec = armor.formspec.."label[5,2;"..S("Fire")..": armor_fire]"
})
minetest.register_tool("3d_armor:boots_steel", {
description = "Steel Boots",
inventory_image = "3d_armor_inv_boots_steel.png",
groups = {armor_feet=10, armor_heal=0, armor_use=500},
wear = 0,
})
minetest.register_tool("3d_armor:boots_bronze", {
description = "Bronze Boots",
inventory_image = "3d_armor_inv_boots_bronze.png",
groups = {armor_feet=10, armor_heal=6, armor_use=250},
wear = 0,
})
minetest.register_tool("3d_armor:boots_diamond", {
description = "Diamond Boots",
inventory_image = "3d_armor_inv_boots_diamond.png",
groups = {armor_feet=15, armor_heal=12, armor_use=100},
wear = 0,
})
if use_moreores then
minetest.register_tool("3d_armor:boots_mithril", {
description = "Mithril Boots",
inventory_image = "3d_armor_inv_boots_mithril.png",
groups = {armor_feet=15, armor_heal=12, armor_use=50},
wear = 0,
})
end end
armor:register_on_destroy(function(player, index, stack)
local name = player:get_player_name()
local def = stack:get_definition()
if name and def and def.description then
minetest.chat_send_player(name, S("Your").." "..def.description.." "..
S("got destroyed").."!")
end
end)
-- Register Craft Recipies local function init_player_armor(player)
local name = player:get_player_name()
local craft_ingreds = { local player_inv = player:get_inventory()
wood = "default:wood", local pos = player:getpos()
steel = "default:steel_ingot", if not name or not player_inv or not pos then
bronze = "default:bronze_ingot", return false
diamond = "default:diamond", end
local armor_inv = minetest.create_detached_inventory(name.."_armor", {
on_put = function(inv, listname, index, stack, player)
player:get_inventory():set_stack(listname, index, stack)
armor:run_callbacks("on_equip", player, index, stack)
armor:set_player_armor(player)
end,
on_take = function(inv, listname, index, stack, player)
player:get_inventory():set_stack(listname, index, nil)
armor:run_callbacks("on_unequip", player, index, stack)
armor:set_player_armor(player)
end,
on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
local plaver_inv = player:get_inventory()
local stack = inv:get_stack(to_list, to_index)
player_inv:set_stack(to_list, to_index, stack)
player_inv:set_stack(from_list, from_index, nil)
armor:set_player_armor(player)
end,
allow_put = function(inv, listname, index, stack, player)
local def = stack:get_definition() or {}
local allowed = 0
for _, element in pairs(armor.elements) do
if def.groups["armor_"..element] then
allowed = 1
for i = 1, 6 do
local item = inv:get_stack("armor", i):get_name()
if minetest.get_item_group(item, "armor_"..element) > 0 then
return 0
end
end
end
end
return allowed
end,
allow_take = function(inv, listname, index, stack, player)
return stack:get_count()
end,
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
return count
end,
}, name)
armor_inv:set_size("armor", 6)
player_inv:set_size("armor", 6)
for i=1, 6 do
local stack = player_inv:get_stack("armor", i)
armor_inv:set_stack("armor", i, stack)
armor:run_callbacks("on_equip", player, i, stack)
end
armor.def[name] = {
init_time = minetest.get_gametime(),
level = 0,
state = 0,
count = 0,
groups = {},
} }
for _, phys in pairs(armor.physics) do
if use_moreores then armor.def[name][phys] = 1
craft_ingreds.mithril = "moreores:mithril_ingot" end
for _, attr in pairs(armor.attributes) do
armor.def[name][attr] = 0
end
for group, _ in pairs(armor.registered_groups) do
armor.def[name].groups[group] = 0
end
local skin = armor:get_player_skin(name)
armor.textures[name] = {
skin = skin..".png",
armor = "3d_armor_trans.png",
wielditem = "3d_armor_trans.png",
preview = armor.default_skin.."_preview.png",
}
local texture_path = minetest.get_modpath("player_textures")
if texture_path then
local dir_list = minetest.get_dir_list(texture_path.."/textures")
for _, fn in pairs(dir_list) do
if fn == "player_"..name..".png" then
armor.textures[name].skin = fn
break
end
end
end
armor:set_player_armor(player)
return true
end end
for k, v in pairs(craft_ingreds) do -- Armor Player Model
minetest.register_craft({
output = "3d_armor:helmet_"..k, default.player_register_model("3d_armor_character.b3d", {
recipe = { animation_speed = 30,
{v, v, v}, textures = {
{v, "", v}, armor.default_skin..".png",
{"", "", ""}, "3d_armor_trans.png",
}, "3d_armor_trans.png",
}) },
minetest.register_craft({ animations = {
output = "3d_armor:chestplate_"..k, stand = {x=0, y=79},
recipe = { lay = {x=162, y=166},
{v, "", v}, walk = {x=168, y=187},
{v, v, v}, mine = {x=189, y=198},
{v, v, v}, walk_mine = {x=200, y=219},
}, sit = {x=81, y=160},
})
minetest.register_craft({
output = "3d_armor:leggings_"..k,
recipe = {
{v, v, v},
{v, "", v},
{v, "", v},
},
})
minetest.register_craft({
output = "3d_armor:boots_"..k,
recipe = {
{v, "", v},
{v, "", v},
}, },
}) })
minetest.register_on_player_receive_fields(function(player, formname, fields)
local name = armor:get_valid_player(player, "[on_player_receive_fields]")
if not name then
return
end
for field, _ in pairs(fields) do
if string.find(field, "skins_set") then
minetest.after(0, function(player)
local skin = armor:get_player_skin(name)
armor.textures[name].skin = skin..".png"
armor:set_player_armor(player)
end, player)
end
end
end)
minetest.register_on_joinplayer(function(player)
default.player_set_model(player, "3d_armor_character.b3d")
minetest.after(0, function(player)
if init_player_armor(player) == false then
pending_players[player] = 0
end
end, player)
end)
minetest.register_on_leaveplayer(function(player)
local name = player:get_player_name()
if name then
armor.def[name] = nil
armor.textures[name] = nil
end
pending_players[player] = nil
end)
if armor.config.drop == true or armor.config.destroy == true then
minetest.register_on_dieplayer(function(player)
local name, player_inv = armor:get_valid_player(player, "[on_dieplayer]")
if not name then
return
end
local drop = {}
for i=1, player_inv:get_size("armor") do
local stack = player_inv:get_stack("armor", i)
if stack:get_count() > 0 then
table.insert(drop, stack)
armor:set_inventory_stack(player, i, nil)
armor:run_callbacks("on_unequip", player, i, stack)
end
end
armor:set_player_armor(player)
local pos = player:getpos()
if pos and armor.config.destroy == false then
minetest.after(armor.config.bones_delay, function()
local meta = nil
local maxp = vector.add(pos, 8)
local minp = vector.subtract(pos, 8)
local bones = minetest.find_nodes_in_area(minp, maxp, {"bones:bones"})
for _, p in pairs(bones) do
local m = minetest.get_meta(p)
if m:get_string("owner") == name then
meta = m
break
end
end
if meta then
local inv = meta:get_inventory()
for _,stack in ipairs(drop) do
if inv:room_for_item("main", stack) then
inv:add_item("main", stack)
else
armor.drop_armor(pos, stack)
end
end
else
for _,stack in ipairs(drop) do
armor.drop_armor(pos, stack)
end
end
end)
end
end)
end end
if armor.config.punch_damage == true then
minetest.register_on_punchplayer(function(player, hitter,
time_from_last_punch, tool_capabilities)
local name = player:get_player_name()
if name then
armor:punch(player, hitter, time_from_last_punch, tool_capabilities)
last_punch_time[name] = minetest.get_gametime()
end
end)
end
minetest.register_on_player_hpchange(function(player, hp_change)
if player and hp_change < 0 then
local name = player:get_player_name()
if name then
local heal = armor.def[name].heal
heal = heal * armor.config.heal_multiplier
if heal >= math.random(100) then
hp_change = 0
end
-- check if armor damage was handled by fire or on_punchplayer
local time = last_punch_time[name] or 0
if time == 0 or time + 1 < minetest.get_gametime() then
armor:punch(player)
end
end
end
return hp_change
end, true)
minetest.register_globalstep(function(dtime)
timer = timer + dtime
if timer > armor.config.init_delay then
for player, count in pairs(pending_players) do
local remove = init_player_armor(player) == true
pending_players[player] = count + 1
if remove == false and count > armor.config.init_times then
minetest.log("warning", "3d_armor: Failed to initialize player")
remove = true
end
if remove == true then
pending_players[player] = nil
end
end
timer = 0
end
end)
-- Fire Protection and water breating, added by TenPlus1
if armor.config.fire_protect == true then
-- override hot nodes so they do not hurt player anywhere but mod
for _, row in pairs(armor.fire_nodes) do
if minetest.registered_nodes[row[1]] then
minetest.override_item(row[1], {damage_per_second = 0})
end
end
else
print ("[3d_armor] Fire Nodes disabled")
end
if armor.config.water_protect == true or armor.config.fire_protect == true then
minetest.register_globalstep(function(dtime)
armor.timer = armor.timer + dtime
if armor.timer < armor.config.update_time then
return
end
for _,player in pairs(minetest.get_connected_players()) do
local name = player:get_player_name()
local pos = player:getpos()
local hp = player:get_hp()
if not name or not pos or not hp then
return
end
-- water breathing
if armor.config.water_protect == true then
if armor.def[name].water > 0 and
player:get_breath() < 10 then
player:set_breath(10)
end
end
-- fire protection
if armor.config.fire_protect == true then
local fire_damage = true
pos.y = pos.y + 1.4 -- head level
local node_head = minetest.get_node(pos).name
pos.y = pos.y - 1.2 -- feet level
local node_feet = minetest.get_node(pos).name
-- is player inside a hot node?
for _, row in pairs(armor.fire_nodes) do
-- check fire protection, if not enough then get hurt
if row[1] == node_head or row[1] == node_feet then
if fire_damage == true then
armor:punch(player, "fire")
last_punch_time[name] = minetest.get_gametime()
fire_damage = false
end
if hp > 0 and armor.def[name].fire < row[2] then
hp = hp - row[3] * armor.config.update_time
player:set_hp(hp)
break
end
end
end
end
end
armor.timer = 0
end)
end

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 632 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 629 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 609 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 565 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 933 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 878 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 858 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 863 B

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 203 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 246 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 247 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 242 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 244 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 228 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 229 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 242 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Some files were not shown because too many files have changed in this diff Show More