From d359c7ed1a8ee553bce897dfc64ff1c0321dc2d1 Mon Sep 17 00:00:00 2001 From: DonBatman Date: Thu, 30 Apr 2015 16:28:21 -0700 Subject: [PATCH] Added ISP --- crafts.lua | 81 ++- crafts.lua~ | 451 ++++++++++++ init.lua | 1 + init.lua~ | 18 + isp.lua | 127 ++++ isp.lua~ | 185 +++++ items.lua | 119 +++- items.lua~ | 154 ++++- modrecipes.lua | 4 +- modrecipes.lua~ | 96 +++ nodes.lua | 488 +++++++++---- nodes.lua~ | 921 +++++++++++++++++++++++++ router.lua | 187 ++++- router.lua~ | 253 +++++++ textures/blk.png | Bin 0 -> 128 bytes textures/grn.png | Bin 0 -> 128 bytes textures/mycoins_copper_ribbonwire.png | Bin 0 -> 494 bytes textures/mycoins_isp_bk.png | Bin 0 -> 136 bytes textures/mycoins_isp_bt.png | Bin 0 -> 119 bytes textures/mycoins_isp_ft.png | Bin 0 -> 250 bytes textures/mycoins_isp_ft_off.png | Bin 0 -> 250 bytes textures/mycoins_isp_lt.png | Bin 0 -> 298 bytes textures/mycoins_isp_rt.png | Bin 0 -> 298 bytes textures/mycoins_isp_tp.png | Bin 0 -> 129 bytes textures/mycoins_ribbonwire.png | Bin 0 -> 873 bytes textures/mycoins_router_f_error.png | Bin 0 -> 7523 bytes textures/pcparts.png | Bin 0 -> 24398 bytes 27 files changed, 2828 insertions(+), 257 deletions(-) create mode 100644 crafts.lua~ create mode 100644 init.lua~ create mode 100644 isp.lua create mode 100644 isp.lua~ create mode 100644 modrecipes.lua~ create mode 100644 nodes.lua~ create mode 100644 router.lua~ create mode 100644 textures/blk.png create mode 100644 textures/grn.png create mode 100644 textures/mycoins_copper_ribbonwire.png create mode 100644 textures/mycoins_isp_bk.png create mode 100644 textures/mycoins_isp_bt.png create mode 100644 textures/mycoins_isp_ft.png create mode 100644 textures/mycoins_isp_ft_off.png create mode 100644 textures/mycoins_isp_lt.png create mode 100644 textures/mycoins_isp_rt.png create mode 100644 textures/mycoins_isp_tp.png create mode 100644 textures/mycoins_ribbonwire.png create mode 100644 textures/mycoins_router_f_error.png create mode 100644 textures/pcparts.png diff --git a/crafts.lua b/crafts.lua index f8ba2d1..40840da 100644 --- a/crafts.lua +++ b/crafts.lua @@ -18,7 +18,7 @@ minetest.register_craft({ output = "mycoins:home_computer_video"; recipe = { { "homedecor:plastic_base", "homedecor:plastic_base", "homedecor:plastic_base", }, - { "homedecor:ic", "default:copper_ingot", "homedecor:ic", }, + { "homedecor:ic", "mycoins:copper_ribbonwire", "homedecor:ic", }, { "default:gold_ingot", "default:gold_ingot", "default:gold_ingot", }, }; }); @@ -35,8 +35,8 @@ minetest.register_craft({ minetest.register_craft({ output = "mycoins:home_computer_powersupply"; recipe = { - { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot", }, - { "default:steel_ingot", "default:copperblock", "default:steel_ingot", }, + { "mycoins:ribbonwire", "mycoins:ribbonwire", "mycoins:ribbonwire", }, + { "default:steel_ingot", "default:steelblock", "default:steel_ingot", }, { "homedecor:ic", "homedecor:ic", "homedecor:ic", }, }; }); @@ -62,9 +62,9 @@ minetest.register_craft({ minetest.register_craft({ output = "mycoins:home_computer_fan"; recipe = { - { "default:copper_ingot", "default:copper_ingot", "default:copper_ingot", }, - { "default:coalblock", "default:steel_ingot", "default:coalblock", }, - { "default:copper_ingot", "default:copper_ingot", "default:copper_ingot", }, + { "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", }, + { "default:steel_ingot", "default:coalblock", "default:steel_ingot", }, + { "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", }, }; }); @@ -73,7 +73,7 @@ minetest.register_craft({ recipe = { { "default:gold_ingot", "default:gold_ingot", "default:gold_ingot", }, { "default:coalblock", "default:steelblock", "default:coalblock", }, - { "default:copper_ingot", "default:copper_ingot", "default:copper_ingot", }, + { "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", }, }; }); @@ -89,7 +89,7 @@ minetest.register_craft({ minetest.register_craft({ output = "mycoins:home_computer_ram"; recipe = { - { "homedecor:plastic_base", "default:copper_ingot", "homedecor:plastic_base", }, + { "homedecor:plastic_sheeting", "mycoins:copper_ribbonwire", "homedecor:plastic_sheeting", }, { "homedecor:ic", "homedecor:ic", "homedecor:ic", }, { "default:gold_ingot", "default:gold_ingot", "default:gold_ingot", }, }; @@ -110,8 +110,8 @@ minetest.register_craft({ minetest.register_craft({ output = "mycoins:game_computer_video"; recipe = { - { "homedecor:plastic_base", "default:steel_ingot", "homedecor:ic", }, - { "homedecor:ic", "default:copper_ingot", "homedecor:ic", }, + { "homedecor:plastic_sheeting", "default:steel_ingot", "homedecor:ic", }, + { "homedecor:ic", "mycoins:copper_ribbonwire", "homedecor:ic", }, { "default:gold_ingot", "default:gold_ingot", "default:gold_ingot", }, }; }); @@ -120,16 +120,16 @@ minetest.register_craft({ output = "mycoins:game_computer_motherboard"; recipe = { { "homedecor:ic", "homedecor:ic", "homedecor:ic", }, - { "default:gold_ingot", "default:goldblock", "default:copper_ingot", }, - { "homedecor:plastic_base", "default:copper_ingot", "default:coalblock", }, + { "default:gold_ingot", "default:goldblock", "mycoins:copper_ribbonwire", }, + { "homedecor:plastic_base", "mycoins:copper_ribbonwire", "default:coalblock", }, }; }); minetest.register_craft({ output = "mycoins:game_computer_powersupply"; recipe = { - { "default:copper_ingot", "default:copper_ingot", "default:copper_ingot", }, - { "default:copper_ingot", "default:bronzeblock", "default:copper_ingot", }, + { "mycoins:ribbonwire", "mycoins:ribbonwire", "mycoins:ribbonwire", }, + { "mycoins:copper_ribbonwire", "default:bronzeblock", "mycoins:copper_ribbonwire", }, { "homedecor:ic", "homedecor:ic", "homedecor:ic", }, }; }); @@ -146,8 +146,8 @@ minetest.register_craft({ minetest.register_craft({ output = "mycoins:game_computer_soundcard"; recipe = { - { "default:copper_ingot", "default:copper_ingot", "default:copper_ingot", }, - { "default:copper_ingot", "homedecor:ic", "default:copper_ingot", }, + { "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", }, + { "homedecor:plastic_sheeting", "homedecor:ic", "homedecor:plastic_sheeting", }, { "default:gold_ingot", "default:gold_ingot", "default:gold_ingot", }, }; }); @@ -204,14 +204,14 @@ minetest.register_craft({ recipe = { { "homedecor:ic", "homedecor:ic", "homedecor:ic", }, { "default:gold_ingot", "default:diamondblock", "default:gold_ingot", }, - { "homedecor:plastic_base", "default:copper_ingot", "default:coalblock", }, + { "homedecor:plastic_base", "mycoins:copper_ribbonwire", "default:coalblock", }, }; }); minetest.register_craft({ output = "mycoins:alien_computer_powersupply"; recipe = { - { "default:bronze_ingot", "default:bronze_ingot", "default:bronze_ingot", }, + { "mycoins:ribbonwire", "mycoins:ribbonwire", "mycoins:ribbonwire", }, { "default:bronze_ingot", "default:goldblock", "default:bronze_ingot", }, { "homedecor:ic", "homedecor:ic", "homedecor:ic", }, }; @@ -229,8 +229,8 @@ minetest.register_craft({ minetest.register_craft({ output = "mycoins:alien_computer_soundcard"; recipe = { - { "default:bronze_ingot", "default:bronze_ingot", "default:bronze_ingot", }, - { "default:copper_ingot", "default:diamondblock", "default:copper_ingot", }, + { "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", }, + { "homedecor:plastic_sheeting", "default:diamondblock", "homedecor:plastic_sheeting", }, { "default:gold_ingot", "default:gold_ingot", "default:gold_ingot", }, }; }); @@ -240,7 +240,7 @@ minetest.register_craft({ recipe = { { "homedecor:ic", "default:bronze_ingot", "homedecor:ic", }, { "homedecor:ic", "default:goldblock", "homedecor:ic", }, - { "homedecor:ic", "default:copper_ingot", "homedecor:ic", }, + { "homedecor:ic", "mycoins:ribbonwire", "homedecor:ic", }, }; }); @@ -411,7 +411,37 @@ minetest.register_craft({ recipe = { { "default:steel_ingot", "homedecor:ic", "default:steel_ingot", }, { "homedecor:ic", "default:mese", "homedecor:ic", }, - { "homedecor:plastic_base", "homedecor:plastic_base", "homedecor:plastic_base", }, + { "homedecor:plastic_sheet", "homedecor:plastic_sheet", "homedecor:plastic_sheet", }, + }; +}); + + +-- copper wire + +minetest.register_craft({ + output = "mycoins:copper_ribbonwire 12"; + recipe = { + { "default:copper_ingot", "default:copper_ingot", "default:copper_ingot", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:ribbonwire 3"; + recipe = { + { "dye:red", "dye:green", "dye:yellow", }, + { "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", }, + }; +}); + +-- ISP + +minetest.register_craft({ + output = "mycoins:isp"; + recipe = { + { "default:gold_ingot", "mycoins:bitcoin", "default:silver_ingot", }, + { "mycoins:ribbonwire", "default:steelblock", "mycoins:ribbonwire", }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", }, }; }); @@ -419,10 +449,3 @@ minetest.register_craft({ - - - - - - - diff --git a/crafts.lua~ b/crafts.lua~ new file mode 100644 index 0000000..05c9d72 --- /dev/null +++ b/crafts.lua~ @@ -0,0 +1,451 @@ + +--= CHANGED TenPlus1 (moreores tin is now default steel, moreores silver is now copper, removed Moreores dependancy) + +-- Home Computer + +minetest.register_craft({ + output = "mycoins:home_computer"; + recipe = { + { "mycoins:home_computer_powersupply", "mycoins:home_computer_ram", "mycoins:home_computer_cdrom", }, + { "mycoins:home_computer_video", "mycoins:home_computer_cpu", "mycoins:home_computer_fan", }, + { "mycoins:home_computer_soundcard", "mycoins:home_computer_motherboard", "mycoins:home_computer_harddrive", }, + }; +}); + + + +minetest.register_craft({ + output = "mycoins:home_computer_video"; + recipe = { + { "homedecor:plastic_base", "homedecor:plastic_base", "homedecor:plastic_base", }, + { "homedecor:ic", "mycoins:copper_ribbonwire", "homedecor:ic", }, + { "default:gold_ingot", "default:gold_ingot", "default:gold_ingot", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:home_computer_motherboard"; + recipe = { + { "homedecor:ic", "homedecor:ic", "homedecor:ic", }, + { "default:gold_ingot", "default:gold_ingot", "default:steel_ingot", }, + { "homedecor:plastic_base", "default:steel_ingot", "default:coalblock", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:home_computer_powersupply"; + recipe = { + { "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", }, + { "default:steel_ingot", "default:steelblock", "default:steel_ingot", }, + { "homedecor:ic", "homedecor:ic", "homedecor:ic", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:home_computer_cpu"; + recipe = { + { "homedecor:ic", "default:gold_ingot", "homedecor:ic", }, + { "homedecor:ic", "default:diamond", "homedecor:ic", }, + { "homedecor:ic", "default:gold_ingot", "homedecor:ic", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:home_computer_soundcard"; + recipe = { + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot", }, + { "default:steel_ingot", "default:glass", "default:steel_ingot", }, + { "default:gold_ingot", "default:steel_ingot", "default:gold_ingot", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:home_computer_fan"; + recipe = { + { "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", }, + { "default:steel_ingot", "default:coalblock", "default:steel_ingot", }, + { "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:home_computer_harddrive"; + recipe = { + { "default:gold_ingot", "default:gold_ingot", "default:gold_ingot", }, + { "default:coalblock", "default:steelblock", "default:coalblock", }, + { "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:home_computer_cdrom"; + recipe = { + { "default:steel_ingot", "homedecor:plastic_base", "default:glass", }, + { "default:coal_lump", "default:steel_ingot", "default:coal_lump", }, + { "default:gold_ingot", "default:copper_ingot", "default:gold_ingot", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:home_computer_ram"; + recipe = { + { "homedecor:plastic_sheeting", "mycoins:copper_ribbonwire", "homedecor:plastic_sheeting", }, + { "homedecor:ic", "homedecor:ic", "homedecor:ic", }, + { "default:gold_ingot", "default:gold_ingot", "default:gold_ingot", }, + }; +}); + + +-- Game Computer + +minetest.register_craft({ + output = "mycoins:game_computer"; + recipe = { + { "mycoins:game_computer_powersupply", "mycoins:game_computer_ram", "mycoins:game_computer_dvdrom", }, + { "mycoins:game_computer_video", "mycoins:game_computer_cpu", "mycoins:home_computer", }, + { "mycoins:game_computer_soundcard", "mycoins:game_computer_motherboard", "mycoins:game_computer_harddrive", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:game_computer_video"; + recipe = { + { "homedecor:plastic_sheeting", "default:steel_ingot", "homedecor:ic", }, + { "homedecor:ic", "mycoins:copper_ribbonwire", "homedecor:ic", }, + { "default:gold_ingot", "default:gold_ingot", "default:gold_ingot", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:game_computer_motherboard"; + recipe = { + { "homedecor:ic", "homedecor:ic", "homedecor:ic", }, + { "default:gold_ingot", "default:goldblock", "mycoins:copper_ribbonwire", }, + { "homedecor:plastic_base", "mycoins:copper_ribbonwire", "default:coalblock", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:game_computer_powersupply"; + recipe = { + { "mycoins:ribbonwire", "mycoins:ribbonwire", "mycoins:ribbonwire", }, + { "mycoins:copper_ribbonwire", "default:bronzeblock", "mycoins:copper_ribbonwire", }, + { "homedecor:ic", "homedecor:ic", "homedecor:ic", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:game_computer_cpu"; + recipe = { + { "homedecor:ic", "default:gold_ingot", "homedecor:ic", }, + { "homedecor:ic", "default:diamondblock", "homedecor:ic", }, + { "homedecor:ic", "default:gold_ingot", "homedecor:ic", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:game_computer_soundcard"; + recipe = { + { "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", }, + { "homedecor:plastic_sheeting", "homedecor:ic", "homedecor:plastic_sheeting", }, + { "default:gold_ingot", "default:gold_ingot", "default:gold_ingot", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:game_computer_harddrive"; + recipe = { + { "default:gold_ingot", "default:gold_ingot", "default:gold_ingot", }, + { "default:coalblock", "default:bronzeblock", "default:coalblock", }, + { "default:gold_ingot", "default:gold_ingot", "default:gold_ingot", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:game_computer_dvdrom"; + recipe = { + { "default:steel_ingot", "homedecor:plastic_base", "default:diamond", }, + { "default:coal_lump", "default:steel_ingot", "default:coal_lump", }, + { "default:gold_ingot", "default:bronze_ingot", "default:gold_ingot", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:game_computer_ram"; + recipe = { + { "mycoins:home_computer_ram", "mycoins:home_computer_ram", }, + { "mycoins:home_computer_ram", "mycoins:home_computer_ram", }, + }; +}); + +-- Alineware Computer + +minetest.register_craft({ + output = "mycoins:alien_computer"; + recipe = { + { "mycoins:alien_computer_powersupply", "mycoins:alien_computer_ram", "mycoins:alien_computer_cooler", }, + { "mycoins:alien_computer_video", "mycoins:alien_computer_cpu", "mycoins:game_computer", }, + { "mycoins:alien_computer_soundcard", "mycoins:alien_computer_motherboard", "mycoins:alien_computer_harddrive", }, + }; +}); + +-- CHANGED TenPlus1 (changed mesecons_insulated:insulated_off to default:obsidian_shard, removed Mesecons dependancy) + +minetest.register_craft({ + output = "mycoins:alien_computer_video"; + recipe = { + { "mycoins:home_computer_fan", "mycoins:game_computer_video", "default:obsidian_shard", }, + { "mycoins:home_computer_fan", "mycoins:game_computer_video", "default:obsidian_shard", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:alien_computer_motherboard"; + recipe = { + { "homedecor:ic", "homedecor:ic", "homedecor:ic", }, + { "default:gold_ingot", "default:diamondblock", "default:gold_ingot", }, + { "homedecor:plastic_base", "mycoins:copper_ribbonwire", "default:coalblock", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:alien_computer_powersupply"; + recipe = { + { "mycoins:ribbonwire", "mycoins:ribbonwire", "mycoins:ribbonwire", }, + { "default:bronze_ingot", "default:goldblock", "default:bronze_ingot", }, + { "homedecor:ic", "homedecor:ic", "homedecor:ic", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:alien_computer_cpu"; + recipe = { + { "homedecor:ic", "default:gold_ingot", "homedecor:ic", }, + { "homedecor:ic", "default:mese", "homedecor:ic", }, + { "homedecor:ic", "default:gold_ingot", "homedecor:ic", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:alien_computer_soundcard"; + recipe = { + { "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", }, + { "homedecor:plastic_sheeting", "default:diamondblock", "homedecor:plastic_sheeting", }, + { "default:gold_ingot", "default:gold_ingot", "default:gold_ingot", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:alien_computer_harddrive"; + recipe = { + { "homedecor:ic", "default:bronze_ingot", "homedecor:ic", }, + { "homedecor:ic", "default:goldblock", "homedecor:ic", }, + { "homedecor:ic", "mycoins:ribbonwire", "homedecor:ic", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:alien_computer_ram"; + recipe = { + { "mycoins:game_computer_ram", "mycoins:game_computer_ram", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:alien_computer_cooler"; + recipe = { + { "default:coal_lump", "default:steelblock", "default:coal_lump", }, + { "homedecor:plastic_base", "bucket:bucket_water", "vessels:glass_bottle", }, + { "homedecor:plastic_base", "homedecor:plastic_base", "homedecor:plastic_base", }, + }; +}); + +-- bitcent + +minetest.register_craft({ + output = 'mycoins:bitcent 100', + recipe = { + {'', '', 'mycoins:bitcent'}, + {'', '', ''}, + {'', 'mycoins:bitcoin', ''}, + } +}) + +minetest.register_craft({ + output = 'mycoins:bitcent 25', + recipe = { + {'', '', 'mycoins:bitcent'}, + {'', '', ''}, + {'', 'mycoins:bitqu', ''}, + } +}) + +minetest.register_craft({ + output = 'mycoins:bitcent 10', + recipe = { + {'', '', 'mycoins:bitcent'}, + {'', '', ''}, + {'', 'mycoins:bitdi', ''}, + } +}) + +minetest.register_craft({ + output = 'mycoins:bitcent 5', + recipe = { + {'', '', 'mycoins:bitcent'}, + {'', '', ''}, + {'', 'mycoins:bitni', ''}, + } +}) + + +-- bitnickel + +minetest.register_craft({ + output = 'mycoins:bitni 20', + recipe = { + {'', '', 'mycoins:bitcent'}, + {'', '', ''}, + {'', 'mycoins:bitcoin', ''}, + } +}) + +minetest.register_craft({ + output = 'mycoins:bitni 5', + recipe = { + {'', '', 'mycoins:bitcent'}, + {'', '', ''}, + {'', 'mycoins:bitqu', ''}, + } +}) + +minetest.register_craft({ + output = 'mycoins:bitni 2', + recipe = { + {'', '', 'mycoins:bitcent'}, + {'', '', ''}, + {'', 'mycoins:bitdi', ''}, + } +}) + +minetest.register_craft({ + output = 'mycoins:bitni', + recipe = { + {'', '', 'mycoins:bitcent'}, + {'mycoins:bitcent', 'mycoins:bitcent', ''}, + {'mycoins:bitcent', 'mycoins:bitcent', 'mycoins:bitcent'}, + } +}) + +-- bitdime + +minetest.register_craft({ + output = 'mycoins:bitdi 10', + recipe = { + {'', '', 'mycoins:bitcent'}, + {'', '', ''}, + {'', 'mycoins:bitcoin', ''}, + } +}) + +minetest.register_craft({ + output = 'mycoins:bitdi', + recipe = { + {'', '', 'mycoins:bitcent'}, + {'', 'mycoins:bitni', ''}, + {'', 'mycoins:bitni', ''}, + } +}) + +--bitquarter + +minetest.register_craft({ + output = 'mycoins:bitqu 4', + recipe = { + {'', '', 'mycoins:bitcent'}, + {'', '', ''}, + {'', 'mycoins:bitcoin', ''}, + } +}) + +minetest.register_craft({ + output = 'mycoins:bitqu', + recipe = { + {'mycoins:bitcent', 'mycoins:bitdi', 'mycoins:bitcent'}, + {'mycoins:bitcent', 'mycoins:bitdi', ''}, + {'mycoins:bitcent', 'mycoins:bitcent', 'mycoins:bitcent'}, + } +}) + +minetest.register_craft({ + output = 'mycoins:bitqu', + recipe = { + {'', 'mycoins:bitni', 'mycoins:bitcent'}, + {'', 'mycoins:bitdi', ''}, + {'', 'mycoins:bitdi', ''}, + } +}) + +minetest.register_craft({ + output = 'mycoins:bitqu', + recipe = { + {'', '', 'mycoins:bitcent'}, + {'mycoins:bitni', 'mycoins:bitni', ''}, + {'mycoins:bitni', 'mycoins:bitni', 'mycoins:bitni'}, + } +}) + +-- bitcoin + +minetest.register_craft({ + output = 'mycoins:bitcoin', + recipe = { + {'', '', 'mycoins:bitcent'}, + {'', 'mycoins:bitqu', ''}, + {'mycoins:bitqu', 'mycoins:bitqu', 'mycoins:bitqu'}, + } +}) + +minetest.register_craft({ + output = "mycoins:router"; + recipe = { + { "default:steel_ingot", "homedecor:ic", "default:steel_ingot", }, + { "homedecor:ic", "default:mese", "homedecor:ic", }, + { "homedecor:plastic_sheet", "homedecor:plastic_sheet", "homedecor:plastic_sheet", }, + }; +}); + + +-- copper wire + +minetest.register_craft({ + output = "mycoins:copper_ribbonwire 12"; + recipe = { + { "default:copper_ingot", "default:copper_ingot", "default:copper_ingot", }, + }; +}); + +minetest.register_craft({ + output = "mycoins:ribbonwire 3"; + recipe = { + { "dye:red", "dye:green", "dye:yellow", }, + { "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", "mycoins:copper_ribbonwire", }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", }, + }; +}); + +-- ISP + +minetest.register_craft({ + output = "mycoins:isp"; + recipe = { + { "default:gold_ingot", "mycoins:bitcoin", "default:silver_ingot", }, + { "mycoins:ribbonwire", "default:steelblock", "mycoins:ribbonwire", }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", }, + }; +}); + + + + + diff --git a/init.lua b/init.lua index 505f87a..2bdac88 100644 --- a/init.lua +++ b/init.lua @@ -14,5 +14,6 @@ dofile(minetest.get_modpath("mycoins").."/items.lua") dofile(minetest.get_modpath("mycoins").."/crafts.lua") dofile(minetest.get_modpath("mycoins").."/modrecipes.lua") dofile(minetest.get_modpath("mycoins").."/router.lua") +dofile(minetest.get_modpath("mycoins").."/isp.lua") -- dofile(minetest.get_modpath("mycoins").."/shop.lua") print("mycoins mod loaded!") diff --git a/init.lua~ b/init.lua~ new file mode 100644 index 0000000..505f87a --- /dev/null +++ b/init.lua~ @@ -0,0 +1,18 @@ + +--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- mycoins by MilesDyson + +-- + +-- LICENSE: WTFPL DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE; applies to all parts, + +-- Including all images. + +-- + +-- email me at milesdsn@zoho.com + +--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +dofile(minetest.get_modpath("mycoins").."/nodes.lua") +dofile(minetest.get_modpath("mycoins").."/items.lua") +dofile(minetest.get_modpath("mycoins").."/crafts.lua") +dofile(minetest.get_modpath("mycoins").."/modrecipes.lua") +dofile(minetest.get_modpath("mycoins").."/router.lua") +-- dofile(minetest.get_modpath("mycoins").."/shop.lua") +print("mycoins mod loaded!") diff --git a/isp.lua b/isp.lua new file mode 100644 index 0000000..5b2a1bd --- /dev/null +++ b/isp.lua @@ -0,0 +1,127 @@ + +function default.isp_off_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = "size[10,10]".. + "label[2,2;Powered Off...]".. + "list[nodemeta:".. spos .. ";main;1,3;1,1;]".. + "list[current_player;main;1,6;8,4;]".. + "button_exit[4,5;2,1;exit;Exit]" + return formspec +end + +function default.isp_on_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = "size[10,10]".. + "label[2,2;Powered On...]".. + "label[1,2.6;Payment:]".. + "list[nodemeta:".. spos .. ";main;1,3;1,1;]".. + "list[current_player;main;1,6;8,4;]".. + "button_exit[4,5;2,1;exit;Exit]" + return formspec +end + +-- ISP + +minetest.register_node("mycoins:isp", { + description = "Internet Service Provider", + tiles = { + "mycoins_isp_tp.png", + "mycoins_isp_bt.png", + "mycoins_isp_rt.png", + "mycoins_isp_lt.png", + "mycoins_isp_bk.png", + "mycoins_isp_ft_off.png" + }, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + is_ground_content = true, + groups = {snappy=3}, + sound = default.node_sound_wood_defaults(), + drop = "mycoins:isp", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.153531, -0.5, -0.405738, 0.153531, -0.315951, 0.405738}, -- NodeBox1 + {-0.122825, -0.315951, -0.374616, 0.122825, 0.371166, 0.375}, -- NodeBox2 + }, + }, + on_punch = function(pos) + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:isp_on', param2 = node.param2}) + meta:set_string("formspec", default.isp_on_formspec(pos)) + meta:set_string("infotext", "Internet Service Provider") + local inv = meta:get_inventory() + inv:set_size("main", 1*1) + timer:stop() + end, + on_construct = function(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", default.isp_off_formspec(pos)) + meta:set_string("infotext", "Internet Service Provider") + local inv = meta:get_inventory() + inv:set_size("main", 1*1) + end, + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + local timer = minetest.get_node_timer(pos) + meta:set_string("formspec", default.isp_on_formspec(pos)) + meta:set_string("infotext", "Internet Service Provider") + local inv = meta:get_inventory() + inv:set_size("main", 1*1) + timer:start(60) + end, +}) + +minetest.register_node("mycoins:isp_on", { + description = "Internet Service Provider", + tiles = { + "mycoins_isp_tp.png", + "mycoins_isp_bt.png", + "mycoins_isp_rt.png", + "mycoins_isp_lt.png", + "mycoins_isp_bk.png", + "mycoins_isp_ft.png" + }, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + is_ground_content = true, + groups = {snappy=3, not_in_creative_inventory = 1}, + sound = default.node_sound_wood_defaults(), + drop = "mycoins:isp", + drawtype = "nodebox", + light_source = 4, + node_box = { + type = "fixed", + fixed = { + {-0.153531, -0.5, -0.405738, 0.153531, -0.315951, 0.405738}, -- NodeBox1 + {-0.122825, -0.315951, -0.374616, 0.122825, 0.371166, 0.375}, -- NodeBox2 + }, + }, + on_punch = function(pos) + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:isp', param2 = node.param2}) + meta:set_string("formspec", default.isp_off_formspec(pos)) + meta:set_string("infotext", "Internet Service Provider") + local inv = meta:get_inventory() + inv:set_size("main", 1*1) + timer:start(5) + end, + + on_timer = function(pos,from_list) + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + minetest.get_meta(pos):get_inventory():add_item("main", "mycoins:bitcent") + + + timer:start(5) + end, + +}) \ No newline at end of file diff --git a/isp.lua~ b/isp.lua~ new file mode 100644 index 0000000..ab7d93d --- /dev/null +++ b/isp.lua~ @@ -0,0 +1,185 @@ + +function default.isp_off_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = "size[10,10]".. + "label[2,2;Powered Off...]".. + "list[nodemeta:".. spos .. ";main;1,3;1,1;]".. + "list[current_player;main;1,6;8,4;]".. + "button_exit[4,5;2,1;exit;Exit]" + return formspec +end + +function default.isp_on_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = "size[10,10]".. + "label[2,2;Powered On...]".. + "label[1,2.6;Payment:]".. + "list[nodemeta:".. spos .. ";main;1,3;1,1;]".. + "list[current_player;main;1,6;8,4;]".. + "button_exit[4,5;2,1;exit;Exit]" + return formspec +end + +-- ISP + +-- Alienware Computer +minetest.register_node("mycoins:isp",{ + drawtype = "nodebox", + description = "Internet Service Provider", + tiles = { + "mycoins_isp_tp.png", + "mycoins_isp_bt.png", + "mycoins_isp_rt.png", + "mycoins_isp_lt.png", + "mycoins_isp_bk.png", + "mycoins_isp_ft_off.png" + }, + paramtype = "light", + paramtype2 = "facedir", + drop = "mycoins:isp", + groups = {cracky=2, oddly_breakable_by_hand=2}, + node_box = { + type = "fixed", + fixed = { + {-0.153531, -0.5, -0.405738, 0.153531, -0.315951, 0.405738}, + {-0.122825, -0.315951, -0.374616, 0.122825, 0.371166, 0.375}, + }, + }, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos) + local meta = minetest.get_meta(pos) + local timer = minetest.get_node_timer(pos) + meta:set_string("formspec", default.isp_on_formspec(pos)) + meta:set_string("infotext", "Internet Service Provider") + local inv = meta:get_inventory() + inv:set_size("main", 1*1) + timer:start(60) + end, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", default.isp_on_formspec(pos)) + meta:set_string("infotext", "Internet Service Provider") + local inv = meta:get_inventory() + inv:set_size("main", 1*1) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and computer_owner(meta, player) + end, + on_timer = function(pos) + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:isp', param2 = node.param2}) + meta:set_string("formspec", default.isp_off_formspec(pos)) + meta:set_string("infotext", "Internet Service Provider") + local inv = meta:get_inventory() + inv:set_size("main", 1*1) + timer:stop() + end, + on_punch = function(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:isp_on', param2 = node.param2}) + meta:set_string("formspec", default.isp_on_formspec(pos)) + meta:set_string("infotext", "Internet Service Provider") + local inv = meta:get_inventory() + inv:set_size("main", 1*1) + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a Alienware computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + return 0 + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a Alienware computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, +}) + +minetest.register_node("mycoins:isp_on",{ + drawtype = "nodebox", + description = "Internet Service Provider", + tiles = { + "mycoins_isp_tp.png", + "mycoins_isp_bt.png", + "mycoins_isp_rt.png", + "mycoins_isp_lt.png", + "mycoins_isp_bk.png", + "mycoins_isp_ft.png" + }, + paramtype = "light", + paramtype2 = "facedir", + light_source = 8, + drop = "mycoins:alien_computer", + groups = {cracky=2, not_in_creative_inventory=1, oddly_breakable_by_hand=2}, + node_box = { + type = "fixed", + fixed = { + {-0.153531, -0.5, -0.405738, 0.153531, -0.315951, 0.405738}, + {-0.122825, -0.315951, -0.374616, 0.122825, 0.371166, 0.375}, + }, + }, + sounds = default.node_sound_wood_defaults(), + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and computer_owner(meta, player) + end, + on_timer = function(pos) + + end, + on_punch = function(pos) + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:isp', param2 = node.param2}) + meta:set_string("formspec", default.isp_off_formspec(pos)) + meta:set_string("infotext", "Internet Service Provider") + local inv = meta:get_inventory() + inv:set_size("main", 1*1) + timer:stop() + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a Alienware computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + return 0 + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a Alienware computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, +}) \ No newline at end of file diff --git a/items.lua b/items.lua index 303282a..939f039 100644 --- a/items.lua +++ b/items.lua @@ -42,14 +42,32 @@ minetest.register_craftitem( "mycoins:home_computer_video", { stack_max = 1, inventory_image = "mycoins_home_computer_video.png", on_place_on_ground = minetest.craftitem_place_item, -}) - -minetest.register_craftitem( "mycoins:home_computer_motherboard", { - description = "Home Computer Motherboard", - stack_max = 1, - inventory_image = "mycoins_home_computer_motherboard.png", - on_place_on_ground = minetest.craftitem_place_item, -}) +}) + +minetest.register_node("mycoins:home_computer_motherboard", { + description = "Home Computer Motherboard", + paramtype = "light", + paramtype2 = "facedir", + drop = "mycoins:home_computer_motherboard", + groups = {cracky=2, oddly_breakable_by_hand=2}, + stack_max = 1, + inventory_image = "mycoins_home_computer_motherboard.png", + tiles = { + "mycoins_home_computer_motherboard.png", + "grn.png", + "grn.png", + "grn.png", + "grn.png", + "grn.png" + }, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.5, -0.4375, 0.4375, -0.4375, 0.4375}, -- NodeBox1 + } + } +}) minetest.register_craftitem( "mycoins:home_computer_powersupply", { description = "Home Computer Power Supply", @@ -107,14 +125,33 @@ minetest.register_craftitem( "mycoins:game_computer_video", { stack_max = 1, inventory_image = "mycoins_game_computer_video.png", on_place_on_ground = minetest.craftitem_place_item, -}) +}) + +minetest.register_node("mycoins:game_computer_motherboard", { + description = "Gaming Computer Motherboard", + paramtype = "light", + paramtype2 = "facedir", + drop = "mycoins:game_computer_motherboard", + groups = {cracky=2, oddly_breakable_by_hand=2}, + stack_max = 1, + inventory_image = "mycoins_game_computer_motherboard.png", + tiles = { + "mycoins_game_computer_motherboard.png", + "grn.png", + "grn.png", + "grn.png", + "grn.png", + "grn.png" + }, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}, -- NodeBox1 + } + } +}) -minetest.register_craftitem( "mycoins:game_computer_motherboard", { - description = "Gaming Computer Motherboard", - stack_max = 1, - inventory_image = "mycoins_game_computer_motherboard.png", - on_place_on_ground = minetest.craftitem_place_item, -}) minetest.register_craftitem( "mycoins:game_computer_powersupply", { description = "Gaming Computer Power Supply", @@ -167,12 +204,37 @@ minetest.register_craftitem( "mycoins:alien_computer_video", { on_place_on_ground = minetest.craftitem_place_item, }) -minetest.register_craftitem( "mycoins:alien_computer_motherboard", { - description = "Alienware Motherboard", - stack_max = 1, - inventory_image = "mycoins_alien_computer_motherboard.png", - on_place_on_ground = minetest.craftitem_place_item, -}) + + +minetest.register_node("mycoins:alien_computer_motherboard", { + description = "Alienware Motherboard", + paramtype = "light", + paramtype2 = "facedir", + drop = "mycoins:alien_computer_motherboard", + groups = {cracky=2, oddly_breakable_by_hand=2}, + stack_max = 1, + inventory_image = "mycoins_alien_computer_motherboard.png", + tiles = { + "mycoins_alien_computer_motherboard.png", + "blk.png", + "blk.png", + "blk.png", + "blk.png", + "blk.png" + }, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}, -- NodeBox1 + } + } +}) + + + + + minetest.register_craftitem( "mycoins:alien_computer_powersupply", { description = "Alienware Power Supply", @@ -216,6 +278,20 @@ minetest.register_craftitem( "mycoins:alien_computer_cooler", { on_place_on_ground = minetest.craftitem_place_item, }) +minetest.register_craftitem( "mycoins:copper_ribbonwire", { + description = "Bare Copper Ribbon Wire", + stack_max = 99, + inventory_image = "mycoins_copper_ribbonwire.png", + on_place_on_ground = minetest.craftitem_place_item, +}) + +minetest.register_craftitem( "mycoins:ribbonwire", { + description = "Insulated Ribbon Wire", + stack_max = 99, + inventory_image = "mycoins_ribbonwire.png", + on_place_on_ground = minetest.craftitem_place_item, +}) + minetest.override_item("default:stone",{ drop = { min_items = 1, @@ -233,3 +309,4 @@ minetest.override_item("default:stone",{ } }) + diff --git a/items.lua~ b/items.lua~ index 725c42f..271dae5 100644 --- a/items.lua~ +++ b/items.lua~ @@ -42,14 +42,32 @@ minetest.register_craftitem( "mycoins:home_computer_video", { stack_max = 1, inventory_image = "mycoins_home_computer_video.png", on_place_on_ground = minetest.craftitem_place_item, -}) - -minetest.register_craftitem( "mycoins:home_computer_motherboard", { - description = "Home Computer Motherboard", - stack_max = 1, - inventory_image = "mycoins_home_computer_motherboard.png", - on_place_on_ground = minetest.craftitem_place_item, -}) +}) + +minetest.register_node("mycoins:home_computer_motherboard", { + description = "Home Computer Motherboard", + paramtype = "light", + paramtype2 = "facedir", + drop = "mycoins:home_computer_motherboard", + groups = {cracky=2, oddly_breakable_by_hand=2}, + stack_max = 1, + inventory_image = "mycoins_home_computer_motherboard.png", + tiles = { + "mycoins_home_computer_motherboard.png", + "grn.png", + "grn.png", + "grn.png", + "grn.png", + "grn.png" + }, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.5, -0.4375, 0.4375, -0.4375, 0.4375}, -- NodeBox1 + } + } +}) minetest.register_craftitem( "mycoins:home_computer_powersupply", { description = "Home Computer Power Supply", @@ -107,14 +125,33 @@ minetest.register_craftitem( "mycoins:game_computer_video", { stack_max = 1, inventory_image = "mycoins_game_computer_video.png", on_place_on_ground = minetest.craftitem_place_item, -}) +}) + +minetest.register_node("mycoins:game_computer_motherboard", { + description = "Gaming Computer Motherboard", + paramtype = "light", + paramtype2 = "facedir", + drop = "mycoins:game_computer_motherboard", + groups = {cracky=2, oddly_breakable_by_hand=2}, + stack_max = 1, + inventory_image = "mycoins_game_computer_motherboard.png", + tiles = { + "mycoins_game_computer_motherboard.png", + "grn.png", + "grn.png", + "grn.png", + "grn.png", + "grn.png" + }, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}, -- NodeBox1 + } + } +}) -minetest.register_craftitem( "mycoins:game_computer_motherboard", { - description = "Gaming Computer Motherboard", - stack_max = 1, - inventory_image = "mycoins_game_computer_motherboard.png", - on_place_on_ground = minetest.craftitem_place_item, -}) minetest.register_craftitem( "mycoins:game_computer_powersupply", { description = "Gaming Computer Power Supply", @@ -167,12 +204,37 @@ minetest.register_craftitem( "mycoins:alien_computer_video", { on_place_on_ground = minetest.craftitem_place_item, }) -minetest.register_craftitem( "mycoins:alien_computer_motherboard", { - description = "Alienware Motherboard", - stack_max = 1, - inventory_image = "mycoins_alien_computer_motherboard.png", - on_place_on_ground = minetest.craftitem_place_item, -}) + + +minetest.register_node("mycoins:alien_computer_motherboard", { + description = "Alienware Motherboard", + paramtype = "light", + paramtype2 = "facedir", + drop = "mycoins:alien_computer_motherboard", + groups = {cracky=2, oddly_breakable_by_hand=2}, + stack_max = 1, + inventory_image = "mycoins_alien_computer_motherboard.png", + tiles = { + "mycoins_alien_computer_motherboard.png", + "blk.png", + "blk.png", + "blk.png", + "blk.png", + "blk.png" + }, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}, -- NodeBox1 + } + } +}) + + + + + minetest.register_craftitem( "mycoins:alien_computer_powersupply", { description = "Alienware Power Supply", @@ -214,21 +276,37 @@ minetest.register_craftitem( "mycoins:alien_computer_cooler", { stack_max = 1, inventory_image = "mycoins_alien_computer_watercooler.png", on_place_on_ground = minetest.craftitem_place_item, +}) + +minetest.register_craftitem( "mycoins:copper_ribbonwire", { + description = "Bare Copper Ribbon Wire", + stack_max = 1, + inventory_image = "mycoins_copper_ribbonwire.png", + on_place_on_ground = minetest.craftitem_place_item, +}) + +minetest.register_craftitem( "mycoins:ribbonwire", { + description = "Insulated Ribbon Wire", + stack_max = 1, + inventory_image = "mycoins_ribbonwire.png", + on_place_on_ground = minetest.craftitem_place_item, +}) + +minetest.override_item("default:stone",{ + drop = { + min_items = 1, + max_items = 2, + items = { + { + items = {"default:cobble 1"}, + rarity = 1, + }, + { + items = {"mycoins:bitcent 1"}, + rarity = 25, + }, + } + } }) - -minetest.override_item("default:stone",{ - drop = { - min_items = 1, - max_items = 2, - items = { - { - items = {"default:cobble 1"}, - rarity = 1, - }, - { - items = {"mycoins:bitcent 1"}, - rarity = 8, - }, - } - } -}) + + diff --git a/modrecipes.lua b/modrecipes.lua index bc8b6a2..88fe3da 100644 --- a/modrecipes.lua +++ b/modrecipes.lua @@ -1,5 +1,5 @@ ---= ADDED TenPlus1 (A few more recipe's from HomeDecor/Mesecons to remove dependancies) +-- = ADDED TenPlus1 (A few more recipe's from HomeDecor/Mesecons to remove dependancies) if ( minetest.get_modpath("mesecons") ) == nil then @@ -29,7 +29,7 @@ if ( minetest.get_modpath("homedecor") ) == nil then output = "homedecor:ic 4", recipe = { { "mesecons_materials:silicon", "mesecons_materials:silicon" }, - { "mesecons_materials:silicon", "default:copper_ingot" }, + { "mesecons_materials:silicon", "mycoins:copper_ribbonwire" }, }, }) diff --git a/modrecipes.lua~ b/modrecipes.lua~ new file mode 100644 index 0000000..a3bacc4 --- /dev/null +++ b/modrecipes.lua~ @@ -0,0 +1,96 @@ + +-- = ADDED TenPlus1 (A few more recipe's from HomeDecor/Mesecons to remove dependancies) + +if ( minetest.get_modpath("mesecons") ) == nil then + + minetest.register_craftitem(":mesecons_materials:silicon", { + description = ("Silicon lump"), + inventory_image = "homedecor_silicon.png", + }) + + minetest.register_craft( { + output = "mesecons_materials:silicon 4", + recipe = { + { "default:sand", "default:sand" }, + { "default:sand", "default:steel_ingot" }, + }, + }) + +end + +if ( minetest.get_modpath("homedecor") ) == nil then + + minetest.register_craftitem(":homedecor:ic", { + description = ("Simple Integrated Circuit"), + inventory_image = "homedecor_ic.png", + }) + + minetest.register_craft( { + output = "homedecor:ic 4", + recipe = { + { "mesecons_materials:silicon", "mesecons_materials:silicon" }, + { "mesecons_materials:silicon", "default:copper_ingot" }, + }, + }) + + + minetest.register_craftitem(":homedecor:plastic_sheeting", { + description = ("Plastic sheet"), + inventory_image = "homedecor_plastic_sheeting.png", + }) + + minetest.register_craftitem(":homedecor:plastic_base", { + description = ("Unprocessed Plastic base"), + wield_image = "homedecor_plastic_base.png", + inventory_image = "homedecor_plastic_base_inv.png", + }) + + minetest.register_craft({ + type = "shapeless", + output = 'homedecor:plastic_base 6', + recipe = { "default:junglegrass", + "default:junglegrass", + "default:junglegrass" + } + }) + + minetest.register_craft({ + type = "shapeless", + output = 'homedecor:plastic_base 3', + recipe = { "default:dry_shrub", + "default:dry_shrub", + "default:dry_shrub" + }, + }) + + minetest.register_craft({ + type = "shapeless", + output = 'homedecor:plastic_base 4', + recipe = { "default:leaves", + "default:leaves", + "default:leaves", + "default:leaves", + "default:leaves", + "default:leaves" + } + }) + + minetest.register_craft({ + type = "cooking", + output = "homedecor:plastic_sheeting", + recipe = "homedecor:plastic_base", + }) + + minetest.register_craft({ + type = 'fuel', + recipe = 'homedecor:plastic_base', + burntime = 30, + }) + + minetest.register_craft({ + type = 'fuel', + recipe = 'homedecor:plastic_sheeting', + burntime = 30, + }) + +end \ No newline at end of file diff --git a/nodes.lua b/nodes.lua index 2673de7..5fcf015 100644 --- a/nodes.lua +++ b/nodes.lua @@ -82,47 +82,78 @@ minetest.register_node("mycoins:home_computer",{ timer:start(60) end, on_timer = function(pos) - local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) - if wifi == nil then - local timer = minetest.get_node_timer(pos) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) - meta:set_string("formspec", default.computer_wifi_formspec(pos)) - meta:set_string("infotext", "Home Computer (owner ".. - meta:get_string("owner")..")") - local inv = meta:get_inventory() - inv:set_size("main", 4*2) - timer:stop() - else - local meta = minetest.get_meta(pos) - if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then + local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) + if wifi == nil then local timer = minetest.get_node_timer(pos) local meta = minetest.get_meta(pos) local node = minetest.get_node(pos) minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) - meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("formspec", default.computer_wifi_formspec(pos)) meta:set_string("infotext", "Home Computer (owner ".. meta:get_string("owner")..")") local inv = meta:get_inventory() - inv:set_size("main", 4*2) - timer:stop() + inv:set_size("main", 4*2) + timer:stop() else - local timer = minetest.get_node_timer(pos) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - minetest.swap_node(pos, {name = 'mycoins:home_computer_active', param2 = node.param2}) - meta:set_string("formspec", default.active_computer_formspec(pos)) - meta:set_string("infotext", "Home Computer (owner ".. - meta:get_string("owner")..")") - local inv = meta:get_inventory() - inv:set_size("main", 4*2) - timer:start(600) - end + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer_active', param2 = node.param2}) + meta:set_string("formspec", default.active_computer_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(500) + end + end + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer_active', param2 = node.param2}) + meta:set_string("formspec", default.active_computer_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(500) + end + end end, on_punch = function(pos) - local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then + local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) if wifi == nil then local timer = minetest.get_node_timer(pos) local meta = minetest.get_meta(pos) @@ -143,7 +174,18 @@ minetest.register_node("mycoins:home_computer",{ meta:get_string("owner")..")") local inv = meta:get_inventory() inv:set_size("main", 4*2) - timer:start(40) + timer:start(60) + end + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + meta:set_string("formspec", default.computer_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(60) end end, on_construct = function(pos) @@ -155,7 +197,8 @@ minetest.register_node("mycoins:home_computer",{ end, can_dig = function(pos,player) local meta = minetest.get_meta(pos); - return computer_owner(meta, player) + local inv = meta:get_inventory() + return inv:is_empty("main") and computer_owner(meta, player) end, allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) local meta = minetest.get_meta(pos) @@ -203,19 +246,8 @@ minetest.register_node("mycoins:home_computer_active",{ }, sounds = default.node_sound_wood_defaults(), on_timer = function(pos) - local meta = minetest.get_meta(pos) - if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then - local timer = minetest.get_node_timer(pos) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) - meta:set_string("formspec", default.computer_off_formspec(pos)) - meta:set_string("infotext", "Home Computer (owner ".. - meta:get_string("owner")..")") - local inv = meta:get_inventory() - inv:set_size("main", 4*2) - timer:stop() - else + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) if wifi == nil then local timer = minetest.get_node_timer(pos) @@ -228,15 +260,47 @@ minetest.register_node("mycoins:home_computer_active",{ local inv = meta:get_inventory() inv:set_size("main", 4*2) timer:stop() + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + minetest.get_meta(pos):get_inventory():add_item("main", "mycoins:bitcent") + timer:start(500) + end + end + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() else local timer = minetest.get_node_timer(pos) minetest.get_meta(pos):get_inventory():add_item("main", "mycoins:bitcent") - timer:start(600) + timer:start(500) end end end, on_punch = function(pos) - local timer = minetest.get_node_timer(pos) + local timer = minetest.get_node_timer(pos) local meta = minetest.get_meta(pos) local node = minetest.get_node(pos) minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) @@ -303,7 +367,7 @@ minetest.register_node("mycoins:game_computer",{ meta:set_string("owner", placer:get_player_name() or "") meta:set_string("infotext", "Gaming Computer (owner ".. meta:get_string("owner")..")") - timer:start(50) + timer:start(45) end, on_construct = function(pos) local meta = minetest.get_meta(pos) @@ -315,21 +379,50 @@ minetest.register_node("mycoins:game_computer",{ end, can_dig = function(pos,player) local meta = minetest.get_meta(pos); - return computer_owner(meta, player) + local inv = meta:get_inventory() + return inv:is_empty("main") and computer_owner(meta, player) end, on_timer = function(pos) - local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) - if wifi == nil then - local timer = minetest.get_node_timer(pos) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) - meta:set_string("formspec", default.computer_wifi_formspec(pos)) - meta:set_string("infotext", "Game Computer (owner ".. - meta:get_string("owner")..")") - local inv = meta:get_inventory() - inv:set_size("main", 4*2) - timer:stop() + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then + local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) + if wifi == nil then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_wifi_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer_active', param2 = node.param2}) + meta:set_string("formspec", default.active_computer_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(400) + end + end else local meta = minetest.get_meta(pos) if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then @@ -353,23 +446,36 @@ minetest.register_node("mycoins:game_computer",{ meta:get_string("owner")..")") local inv = meta:get_inventory() inv:set_size("main", 4*2) - timer:start(600) + timer:start(400) end end end, on_punch = function(pos) - local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) - if wifi == nil then - local timer = minetest.get_node_timer(pos) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) - meta:set_string("formspec", default.computer_wifi_formspec(pos)) - meta:set_string("infotext", "Game Computer (owner ".. - meta:get_string("owner")..")") - local inv = meta:get_inventory() - inv:set_size("main", 4*2) - timer:stop() + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then + local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) + if wifi == nil then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_wifi_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + meta:set_string("formspec", default.computer_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(45) + end else local timer = minetest.get_node_timer(pos) local meta = minetest.get_meta(pos) @@ -379,7 +485,7 @@ minetest.register_node("mycoins:game_computer",{ meta:get_string("owner")..")") local inv = meta:get_inventory() inv:set_size("main", 4*2) - timer:start(40) + timer:start(45) end end, allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) @@ -411,7 +517,7 @@ minetest.register_node("mycoins:game_computer",{ minetest.register_node("mycoins:game_computer_active",{ drawtype = "nodebox", - description = "Home Computer", + description = "Game Computer", tiles = {"mycoins_game_computer_tp.png","mycoins_game_computer_bt.png","mycoins_game_computer_rt.png","mycoins_game_computer_lt.png","mycoins_game_computer_bk.png","mycoins_game_computer_ft.png"}, paramtype = "light", paramtype2 = "facedir", @@ -433,19 +539,8 @@ minetest.register_node("mycoins:game_computer_active",{ return inv:is_empty("main") and computer_owner(meta, player) end, on_timer = function(pos) - local meta = minetest.get_meta(pos) - if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then - local timer = minetest.get_node_timer(pos) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) - meta:set_string("formspec", default.computer_off_formspec(pos)) - meta:set_string("infotext", "Game Computer (owner ".. - meta:get_string("owner")..")") - local inv = meta:get_inventory() - inv:set_size("main", 4*2) - timer:stop() - else + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) if wifi == nil then local timer = minetest.get_node_timer(pos) @@ -458,10 +553,42 @@ minetest.register_node("mycoins:game_computer_active",{ local inv = meta:get_inventory() inv:set_size("main", 4*2) timer:stop() + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + minetest.get_meta(pos):get_inventory():add_item("main", "mycoins:bitcent") + timer:start(400) + end + end + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() else local timer = minetest.get_node_timer(pos) minetest.get_meta(pos):get_inventory():add_item("main", "mycoins:bitcent") - timer:start(600) + timer:start(400) end end end, @@ -504,6 +631,7 @@ minetest.register_node("mycoins:game_computer_active",{ end, }) + -- Alienware Computer minetest.register_node("mycoins:alien_computer",{ drawtype = "nodebox", @@ -528,7 +656,7 @@ minetest.register_node("mycoins:alien_computer",{ meta:set_string("owner", placer:get_player_name() or "") meta:set_string("infotext", "Alienware Computer (owner ".. meta:get_string("owner")..")") - timer:start(40) + timer:start(30) end, on_construct = function(pos) local meta = minetest.get_meta(pos) @@ -540,21 +668,50 @@ minetest.register_node("mycoins:alien_computer",{ end, can_dig = function(pos,player) local meta = minetest.get_meta(pos); - return computer_owner(meta, player) + local inv = meta:get_inventory() + return inv:is_empty("main") and computer_owner(meta, player) end, on_timer = function(pos) - local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) - if wifi == nil then - local timer = minetest.get_node_timer(pos) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) - meta:set_string("formspec", default.computer_wifi_formspec(pos)) - meta:set_string("infotext", "Alienware Computer (owner ".. - meta:get_string("owner")..")") - local inv = meta:get_inventory() - inv:set_size("main", 4*2) - timer:stop() + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then + local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) + if wifi == nil then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_wifi_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer_active', param2 = node.param2}) + meta:set_string("formspec", default.active_computer_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(300) + end + end else local meta = minetest.get_meta(pos) if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then @@ -578,23 +735,36 @@ minetest.register_node("mycoins:alien_computer",{ meta:get_string("owner")..")") local inv = meta:get_inventory() inv:set_size("main", 4*2) - timer:start(600) + timer:start(300) end end end, on_punch = function(pos) - local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) - if wifi == nil then - local timer = minetest.get_node_timer(pos) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) - meta:set_string("formspec", default.computer_wifi_formspec(pos)) - meta:set_string("infotext", "Alienware Computer (owner ".. - meta:get_string("owner")..")") - local inv = meta:get_inventory() - inv:set_size("main", 4*2) - timer:stop() + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then + local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) + if wifi == nil then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_wifi_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + meta:set_string("formspec", default.computer_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(30) + end else local timer = minetest.get_node_timer(pos) local meta = minetest.get_meta(pos) @@ -604,7 +774,7 @@ minetest.register_node("mycoins:alien_computer",{ meta:get_string("owner")..")") local inv = meta:get_inventory() inv:set_size("main", 4*2) - timer:start(40) + timer:start(30) end end, allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) @@ -651,22 +821,15 @@ minetest.register_node("mycoins:alien_computer_active",{ {-0.500000,-0.500000,-0.500000,0.500000,-0.375,-0.03125}, }, }, - - sounds = default.node_sound_wood_defaults(), + sounds = default.node_sound_wood_defaults(), + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and computer_owner(meta, player) + end, on_timer = function(pos) - local meta = minetest.get_meta(pos) - if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then - local timer = minetest.get_node_timer(pos) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) - meta:set_string("formspec", default.computer_off_formspec(pos)) - meta:set_string("infotext", "Alienware Computer (owner ".. - meta:get_string("owner")..")") - local inv = meta:get_inventory() - inv:set_size("main", 4*2) - timer:stop() - else + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) if wifi == nil then local timer = minetest.get_node_timer(pos) @@ -679,35 +842,62 @@ minetest.register_node("mycoins:alien_computer_active",{ local inv = meta:get_inventory() inv:set_size("main", 4*2) timer:stop() + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + minetest.get_meta(pos):get_inventory():add_item("main", "mycoins:bitcent") + timer:start(300) + end + end + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() else local timer = minetest.get_node_timer(pos) minetest.get_meta(pos):get_inventory():add_item("main", "mycoins:bitcent") - timer:start(600) + timer:start(300) end end end, on_punch = function(pos) - local timer = minetest.get_node_timer(pos) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) - meta:set_string("formspec", default.computer_off_formspec(pos)) - meta:set_string("infotext", "Alienware Computer (owner ".. - meta:get_string("owner")..")") - local inv = meta:get_inventory() - inv:set_size("main", 4*2) - timer:stop() - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") local inv = meta:get_inventory() - return inv:is_empty("main") and computer_owner(meta, player) + inv:set_size("main", 4*2) + timer:stop() end, allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) local meta = minetest.get_meta(pos) if not computer_owner(meta, player) then minetest.log("action", player:get_player_name().. - " tried to access an Alienware computer belonging to ".. + " tried to access a Alienware computer belonging to ".. meta:get_string("owner").." at ".. minetest.pos_to_string(pos)) return 0 diff --git a/nodes.lua~ b/nodes.lua~ new file mode 100644 index 0000000..5d2fb3e --- /dev/null +++ b/nodes.lua~ @@ -0,0 +1,921 @@ + +local function computer_owner(meta, player) + if player:get_player_name() ~= meta:get_string("owner") then + return false + end + return true +end + +function default.computer_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = "size[10,10]".. + "image[1,0.5;1.2,1.2;tux.png]".. + "label[2,0.8;Initializing basic system settings ... OK]" .. + "label[2,1.1;Mounting local filesystems ... OK]" .. + "label[2,1.4;Enabling swap space ... OK]" .. + "label[2,1.7;Setting up console ... OK]" .. + "label[2,2;Operaing System Loaded ... OK]" .. + "label[2,2.3;Starting cgminer 3.7.2 ]" .. + "list[nodemeta:".. spos .. ";main;1,3;8,1;]".. + "list[current_player;main;1,6;8,4;]" + return formspec +end + +function default.computer_off_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = "size[10,10]".. + "label[2,2;Powered Off...]" .. + "list[nodemeta:".. spos .. ";main;1,3;8,1;]".. + "list[current_player;main;1,6;8,4;]" + return formspec +end + +function default.active_computer_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = "size[10,10]".. + "label[2,0.0;cgminer version 3.7.2 - Started]" .. + "label[2,0.2;----------------------------------------------------------------------------------]" .. + "label[2,0.4;5s:468.9K avg:468.8Kh/s : A:2304 R:0 HW:0 WU:394.4/m]" .. + "label[2,0.7;ST: 2 SS: 0 NB: 1909 LW: 34901 GF: 14 RF: 7]" .. + "label[2,1;Connected to stratum.max.bitcoin.com diff 1.02k with stratum.]" .. + "label[2,1.3;Block: 31dca6d... Diff:104 Started: 09:24:05 Best share: 618K.]" .. + "label[2,1.5;----------------------------------------------------------------------------------]" .. + "list[nodemeta:".. spos .. ";main;1,3;8,1;]".. + "list[current_player;main;1,6;8,4;]" + return formspec +end + +function default.computer_wifi_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = "size[10,10]".. + "label[2,2;No Internet Connection.]" .. + "label[2,2.5;Contact Your Network Administrator For More Information.]" .. + "list[nodemeta:".. spos .. ";main;1,3;8,1;]".. + "list[current_player;main;1,6;8,4;]" + return formspec +end + +-- Home Computer +minetest.register_node("mycoins:home_computer",{ + drawtype = "nodebox", + description = "Home Computer", + tiles = {"mycoins_home_computer_tp.png","mycoins_home_computer_bt.png","mycoins_home_computer_rt.png","mycoins_home_computer_lt.png","mycoins_home_computer_bk.png","mycoins_home_computer_ft_off.png"}, + paramtype = "light", + paramtype2 = "facedir", + drop = "mycoins:home_computer", + groups = {cracky=2, oddly_breakable_by_hand=2}, + node_box = { + type = "fixed", + fixed = { + {-0.500000,-0.500000,0.03125,0.500000,0.500000,0.40625}, + {-0.40625,-0.40625,0.40625,0.40625,0.40625,0.50000}, + {-0.500000,-0.500000,-0.500000,0.500000,-0.375,-0.03125}, + }, + }, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + local timer = minetest.get_node_timer(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + timer:start(60) + end, + on_timer = function(pos) + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then + local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) + if wifi == nil then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_wifi_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer_active', param2 = node.param2}) + meta:set_string("formspec", default.active_computer_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(500) + end + end + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer_active', param2 = node.param2}) + meta:set_string("formspec", default.active_computer_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(500) + end + + end + end, + on_punch = function(pos) + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then + local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) + if wifi == nil then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_wifi_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + meta:set_string("formspec", default.computer_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(60) + end + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + meta:set_string("formspec", default.computer_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(60) + end + end, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", default.computer_formspec(pos)) + meta:set_string("infotext", "Computer") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and computer_owner(meta, player) + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a home computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + return 0 + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a home computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, +}) + +minetest.register_node("mycoins:home_computer_active",{ + drawtype = "nodebox", + description = "Home Computer", + tiles = {"mycoins_home_computer_tp.png","mycoins_home_computer_bt.png","mycoins_home_computer_rt.png","mycoins_home_computer_lt.png","mycoins_home_computer_bk.png","mycoins_home_computer_ft.png"}, + paramtype = "light", + paramtype2 = "facedir", + light_source = 8, + drop = "mycoins:home_computer", + groups = {cracky=2, not_in_creative_inventory=1, oddly_breakable_by_hand=2}, + node_box = { + type = "fixed", + fixed = { + {-0.500000,-0.500000,0.03125,0.500000,0.500000,0.40625}, + {-0.40625,-0.40625,0.40625,0.40625,0.40625,0.50000}, + {-0.500000,-0.500000,-0.500000,0.500000,-0.375,-0.03125}, + }, + }, + sounds = default.node_sound_wood_defaults(), + on_timer = function(pos) + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then + local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) + if wifi == nil then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_wifi_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + minetest.get_meta(pos):get_inventory():add_item("main", "mycoins:bitcent") + timer:start(500) + end + end + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + minetest.get_meta(pos):get_inventory():add_item("main", "mycoins:bitcent") + timer:start(500) + end + end + end, + on_punch = function(pos) + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:home_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Home Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and computer_owner(meta, player) + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a home computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + return 0 + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a home computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, +}) + +-- Game Computer +minetest.register_node("mycoins:game_computer",{ + drawtype = "nodebox", + description = "Gaming Computer", + tiles = {"mycoins_game_computer_tp.png","mycoins_game_computer_bt.png","mycoins_game_computer_rt.png","mycoins_game_computer_lt.png","mycoins_game_computer_bk.png","mycoins_game_computer_ft_off.png"}, + paramtype = "light", + paramtype2 = "facedir", + drop = "mycoins:game_computer", + groups = {cracky=2, oddly_breakable_by_hand=2}, + node_box = { + type = "fixed", + fixed = { + {-0.500000,-0.500000,0.03125,0.500000,0.500000,0.40625}, + {-0.40625,-0.40625,0.40625,0.40625,0.40625,0.50000}, + {-0.500000,-0.500000,-0.500000,0.500000,-0.375,-0.03125}, + }, + }, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + local timer = minetest.get_node_timer(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Gaming Computer (owner ".. + meta:get_string("owner")..")") + timer:start(45) + end, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", default.computer_formspec(pos)) + meta:set_string("infotext", "Gaming Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and computer_owner(meta, player) + end, + on_timer = function(pos) + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then + local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) + if wifi == nil then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_wifi_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer_active', param2 = node.param2}) + meta:set_string("formspec", default.active_computer_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(400) + end + end + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer_active', param2 = node.param2}) + meta:set_string("formspec", default.active_computer_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(400) + end + end + end, + on_punch = function(pos) + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then + local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) + if wifi == nil then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_wifi_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + meta:set_string("formspec", default.computer_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(45) + end + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + meta:set_string("formspec", default.computer_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(45) + end + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a gaming computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + return 0 + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a gaming computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, +}) + +minetest.register_node("mycoins:game_computer_active",{ + drawtype = "nodebox", + description = "Game Computer", + tiles = {"mycoins_game_computer_tp.png","mycoins_game_computer_bt.png","mycoins_game_computer_rt.png","mycoins_game_computer_lt.png","mycoins_game_computer_bk.png","mycoins_game_computer_ft.png"}, + paramtype = "light", + paramtype2 = "facedir", + light_source = 8, + drop = "mycoins:game_computer", + groups = {cracky=2, not_in_creative_inventory=1, oddly_breakable_by_hand=2}, + node_box = { + type = "fixed", + fixed = { + {-0.500000,-0.500000,0.03125,0.500000,0.500000,0.40625}, + {-0.40625,-0.40625,0.40625,0.40625,0.40625,0.50000}, + {-0.500000,-0.500000,-0.500000,0.500000,-0.375,-0.03125}, + }, + }, + sounds = default.node_sound_wood_defaults(), + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and computer_owner(meta, player) + end, + on_timer = function(pos) + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then + local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) + if wifi == nil then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_wifi_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + minetest.get_meta(pos):get_inventory():add_item("main", "mycoins:bitcent") + timer:start(400) + end + end + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + minetest.get_meta(pos):get_inventory():add_item("main", "mycoins:bitcent") + timer:start(400) + end + end + end, + on_punch = function(pos) + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:game_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Game Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a gaming computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + return 0 + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a gaming computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, +}) + +-- Alienware Computer +-- Alienware Computer +minetest.register_node("mycoins:alien_computer",{ + drawtype = "nodebox", + description = "Alienware Computer", + tiles = {"mycoins_alien_computer_tp.png","mycoins_alien_computer_bt.png","mycoins_alien_computer_rt.png","mycoins_alien_computer_lt.png","mycoins_alien_computer_bk.png","mycoins_alien_computer_ft_off.png"}, + paramtype = "light", + paramtype2 = "facedir", + drop = "mycoins:alien_computer", + groups = {cracky=2, oddly_breakable_by_hand=2}, + node_box = { + type = "fixed", + fixed = { + {-0.500000,-0.500000,0.03125,0.500000,0.500000,0.40625}, + {-0.40625,-0.40625,0.40625,0.40625,0.40625,0.50000}, + {-0.500000,-0.500000,-0.500000,0.500000,-0.375,-0.03125}, + }, + }, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + local timer = minetest.get_node_timer(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + timer:start(30) + end, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", default.computer_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and computer_owner(meta, player) + end, + on_timer = function(pos) + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then + local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) + if wifi == nil then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_wifi_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer_active', param2 = node.param2}) + meta:set_string("formspec", default.active_computer_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(300) + end + end + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer_active', param2 = node.param2}) + meta:set_string("formspec", default.active_computer_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(300) + end + end + end, + on_punch = function(pos) + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then + local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) + if wifi == nil then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_wifi_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + meta:set_string("formspec", default.computer_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(30) + end + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + meta:set_string("formspec", default.computer_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:start(30) + end + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a Alienware computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + return 0 + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a Alienware computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, +}) + +minetest.register_node("mycoins:alien_computer_active",{ + drawtype = "nodebox", + description = "Alienware Computer", + tiles = {"mycoins_alien_computer_tp.png","mycoins_alien_computer_bt.png","mycoins_alien_computer_rt.png","mycoins_alien_computer_lt.png","mycoins_alien_computer_bk.png","mycoins_alien_computer_ft.png"}, + paramtype = "light", + paramtype2 = "facedir", + light_source = 8, + drop = "mycoins:alien_computer", + groups = {cracky=2, not_in_creative_inventory=1, oddly_breakable_by_hand=2}, + node_box = { + type = "fixed", + fixed = { + {-0.500000,-0.500000,0.03125,0.500000,0.500000,0.40625}, + {-0.40625,-0.40625,0.40625,0.40625,0.40625,0.50000}, + {-0.500000,-0.500000,-0.500000,0.500000,-0.375,-0.03125}, + }, + }, + sounds = default.node_sound_wood_defaults(), + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and computer_owner(meta, player) + end, + on_timer = function(pos) + local isp = minetest.find_node_near(pos, 3, {"mycoins:isp_on"}) + if isp == nil then + local wifi = minetest.find_node_near(pos, 30, {"mycoins:router_on"}) + if wifi == nil then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_wifi_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + minetest.get_meta(pos):get_inventory():add_item("main", "mycoins:bitcent") + timer:start(300) + end + end + else + local meta = minetest.get_meta(pos) + if ( minetest.get_player_by_name(meta:get_string("owner")) == nil ) then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + else + local timer = minetest.get_node_timer(pos) + minetest.get_meta(pos):get_inventory():add_item("main", "mycoins:bitcent") + timer:start(300) + end + end + end, + on_punch = function(pos) + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:alien_computer', param2 = node.param2}) + meta:set_string("formspec", default.computer_off_formspec(pos)) + meta:set_string("infotext", "Alienware Computer (owner ".. + meta:get_string("owner")..")") + local inv = meta:get_inventory() + inv:set_size("main", 4*2) + timer:stop() + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a Alienware computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + return 0 + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not computer_owner(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a Alienware computer belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, +}) \ No newline at end of file diff --git a/router.lua b/router.lua index 682c8bf..fc8cc43 100644 --- a/router.lua +++ b/router.lua @@ -5,15 +5,9 @@ function default.router_off_formspec(pos) return formspec end - function default.router_formspec(pos) - - -local active_computers = minetest.find_nodes_in_area({x=pos.x-30, y=pos.y-30, z=pos.z-30}, {x=pos.x+30, y=pos.y+30, z=pos.z+30}, {"mycoins:home_computer_active","mycoins:game_computer_active","mycoins:alien_computer_active"}) - - -local inactive_computers = minetest.find_nodes_in_area({x=pos.x-30, y=pos.y-30, z=pos.z-30}, {x=pos.x+30, y=pos.y+30, z=pos.z+30}, {"mycoins:home_computer","mycoins:game_computer","mycoins:alien_computer"}) - + local active_computers = minetest.find_nodes_in_area({x=pos.x-30, y=pos.y-30, z=pos.z-30}, {x=pos.x+30, y=pos.y+30, z=pos.z+30}, {"mycoins:home_computer_active","mycoins:game_computer_active","mycoins:alien_computer_active"}) + local inactive_computers = minetest.find_nodes_in_area({x=pos.x-30, y=pos.y-30, z=pos.z-30}, {x=pos.x+30, y=pos.y+30, z=pos.z+30}, {"mycoins:home_computer","mycoins:game_computer","mycoins:alien_computer"}) local spos = pos.x .. "," .. pos.y .. "," ..pos.z local formspec = "size[10,10]".. "label[2,2;Powered On...]".. @@ -23,13 +17,16 @@ local inactive_computers = minetest.find_nodes_in_area({x=pos.x-30, y=pos.y-30, return formspec end - - - +function default.router_error_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = "size[10,10]".. + "label[2,2;No Networks Available...]" + return formspec +end --WIFI Router (linksys look-a-like) minetest.register_node("mycoins:router_on", { - description = "WIFI Router Powered On", + description = "WIFI Router", tiles = {"mycoins_router_t.png","mycoins_router_bt.png","mycoins_router_l.png","mycoins_router_r.png","mycoins_router_b.png", {name="mycoins_router_f_animated.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1.0}},}, --"mycoins_router_f.png"}, paramtype = "light", @@ -40,6 +37,7 @@ minetest.register_node("mycoins:router_on", { sound = default.node_sound_wood_defaults(), drop = "mycoins:router", drawtype = "nodebox", + light_source = 4, node_box = { type = "fixed", fixed = { @@ -56,15 +54,53 @@ minetest.register_node("mycoins:router_on", { meta:set_string("formspec", default.router_off_formspec(pos)) meta:set_string("infotext", "Router") end, - on_construct = function(pos) + on_timer = function(pos) + local isp = minetest.find_node_near(pos, 30, {"mycoins:isp_on"}) + if isp == nil then + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_error', param2 = node.param2}) + meta:set_string("formspec", default.router_error_formspec(pos)) + meta:set_string("infotext", "Router") + timer:start(10) + else + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_on', param2 = node.param2}) + meta:set_string("formspec", default.router_formspec(pos)) + meta:set_string("infotext", "Router") + timer:start(10) + end + end, + after_place_node = function(pos) local meta = minetest.get_meta(pos) + local timer = minetest.get_node_timer(pos) meta:set_string("formspec", default.router_formspec(pos)) meta:set_string("infotext", "Router") + timer:start(10) + end, + on_construct = function(pos) + local isp = minetest.find_node_near(pos, 30, {"mycoins:isp_on"}) + if isp == nil then + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_error', param2 = node.param2}) + meta:set_string("formspec", default.router_error_formspec(pos)) + meta:set_string("infotext", "Router") + else + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_on', param2 = node.param2}) + meta:set_string("formspec", default.router_formspec(pos)) + meta:set_string("infotext", "Router") + end end, }) minetest.register_node("mycoins:router", { - description = "WIFI Router Powered Off", + description = "WIFI Router", tiles = {"mycoins_router_t.png","mycoins_router_bt.png","mycoins_router_l.png","mycoins_router_r.png","mycoins_router_b.png", "mycoins_router_f.png"}, paramtype = "light", paramtype2 = "facedir", @@ -84,19 +120,134 @@ minetest.register_node("mycoins:router", { }, }, on_punch = function(pos) + local isp = minetest.find_node_near(pos, 30, {"mycoins:isp_on"}) + if isp == nil then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:router_error', param2 = node.param2}) + meta:set_string("formspec", default.router_error_formspec(pos)) + meta:set_string("infotext", "Router") + timer:start(10) + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:router_on', param2 = node.param2}) + meta:set_string("formspec", default.router_formspec(pos)) + meta:set_string("infotext", "Router") + timer:start(10) + end + end, + on_timer = function(pos) + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router', param2 = node.param2}) + meta:set_string("formspec", default.router_off_formspec(pos)) + meta:set_string("infotext", "Router") + timer:stop() + end, + after_place_node = function(pos) + local timer = minetest.get_node_timer(pos) local node = minetest.get_node(pos) - minetest.swap_node(pos, {name = 'mycoins:router_on', param2 = node.param2}) local meta = minetest.get_meta(pos) meta:set_string("formspec", default.router_formspec(pos)) - meta:set_string("infotext", "Router") + meta:set_string("infotext", "Router") + timer:start(10) end, on_construct = function(pos) + local isp = minetest.find_node_near(pos, 30, {"mycoins:isp_on"}) + if isp == nil then + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_error', param2 = node.param2}) + meta:set_string("formspec", default.router_error_formspec(pos)) + meta:set_string("infotext", "Router") + else + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_on', param2 = node.param2}) + meta:set_string("formspec", default.router_formspec(pos)) + meta:set_string("infotext", "Router") + end + end, +}) + +minetest.register_node("mycoins:router_error", { + description = "WIFI Router", + tiles = {"mycoins_router_t.png","mycoins_router_bt.png","mycoins_router_l.png","mycoins_router_r.png","mycoins_router_b.png", + {name="mycoins_router_f_error.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1.0}},}, --"mycoins_router_f.png"}, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + is_ground_content = true, + groups = {snappy=3, not_in_creative_inventory = 1}, + sound = default.node_sound_wood_defaults(), + drop = "mycoins:router", + drawtype = "nodebox", + light_source = 4, + node_box = { + type = "fixed", + fixed = { + {-0.25, -0.5, -0.0625, 0.25, -0.375, 0.3125}, + {-0.1875, -0.4375, 0.3125, -0.125, -0.1875, 0.375}, + {0.125, -0.4375, 0.3125, 0.1875, -0.1875, 0.375}, + {-0.0625, -0.4375, 0.3125, 0.0625, -0.25, 0.375}, + }, + }, + on_punch = function(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:router', param2 = node.param2}) local meta = minetest.get_meta(pos) meta:set_string("formspec", default.router_off_formspec(pos)) + meta:set_string("infotext", "Router") + end, + on_timer = function(pos) + local isp = minetest.find_node_near(pos, 30, {"mycoins:isp_on"}) + if isp == nil then + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_error', param2 = node.param2}) + meta:set_string("formspec", default.router_error_formspec(pos)) + meta:set_string("infotext", "Router") + timer:start(10) + else + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_on', param2 = node.param2}) + meta:set_string("formspec", default.router_formspec(pos)) + meta:set_string("infotext", "Router") + timer:start(10) + end + + end, + after_place_node = function(pos) + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", default.router_error_formspec(pos)) meta:set_string("infotext", "Router") + timer:start(10) + end, + on_construct = function(pos) + local isp = minetest.find_node_near(pos, 30, {"mycoins:isp_on"}) + if isp == nil then + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_error', param2 = node.param2}) + meta:set_string("formspec", default.router_error_formspec(pos)) + meta:set_string("infotext", "Router") + else + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_on', param2 = node.param2}) + meta:set_string("formspec", default.router_formspec(pos)) + meta:set_string("infotext", "Router") + end end, }) - - diff --git a/router.lua~ b/router.lua~ new file mode 100644 index 0000000..fc8cc43 --- /dev/null +++ b/router.lua~ @@ -0,0 +1,253 @@ +function default.router_off_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = "size[10,10]".. + "label[2,2;Powered Off...]" + return formspec +end + +function default.router_formspec(pos) + local active_computers = minetest.find_nodes_in_area({x=pos.x-30, y=pos.y-30, z=pos.z-30}, {x=pos.x+30, y=pos.y+30, z=pos.z+30}, {"mycoins:home_computer_active","mycoins:game_computer_active","mycoins:alien_computer_active"}) + local inactive_computers = minetest.find_nodes_in_area({x=pos.x-30, y=pos.y-30, z=pos.z-30}, {x=pos.x+30, y=pos.y+30, z=pos.z+30}, {"mycoins:home_computer","mycoins:game_computer","mycoins:alien_computer"}) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = "size[10,10]".. + "label[2,2;Powered On...]".. + "label[2,2.5;Active: "..#active_computers.."]".. + "label[2,2.8;Inactive: "..#inactive_computers.."]".. + "button_exit[4,7;2,1;exit;Exit]" + return formspec +end + +function default.router_error_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = "size[10,10]".. + "label[2,2;No Networks Available...]" + return formspec +end + +--WIFI Router (linksys look-a-like) +minetest.register_node("mycoins:router_on", { + description = "WIFI Router", + tiles = {"mycoins_router_t.png","mycoins_router_bt.png","mycoins_router_l.png","mycoins_router_r.png","mycoins_router_b.png", + {name="mycoins_router_f_animated.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1.0}},}, --"mycoins_router_f.png"}, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + is_ground_content = true, + groups = {snappy=3, not_in_creative_inventory = 1}, + sound = default.node_sound_wood_defaults(), + drop = "mycoins:router", + drawtype = "nodebox", + light_source = 4, + node_box = { + type = "fixed", + fixed = { + {-0.25, -0.5, -0.0625, 0.25, -0.375, 0.3125}, + {-0.1875, -0.4375, 0.3125, -0.125, -0.1875, 0.375}, + {0.125, -0.4375, 0.3125, 0.1875, -0.1875, 0.375}, + {-0.0625, -0.4375, 0.3125, 0.0625, -0.25, 0.375}, + }, + }, + on_punch = function(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:router', param2 = node.param2}) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", default.router_off_formspec(pos)) + meta:set_string("infotext", "Router") + end, + on_timer = function(pos) + local isp = minetest.find_node_near(pos, 30, {"mycoins:isp_on"}) + if isp == nil then + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_error', param2 = node.param2}) + meta:set_string("formspec", default.router_error_formspec(pos)) + meta:set_string("infotext", "Router") + timer:start(10) + else + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_on', param2 = node.param2}) + meta:set_string("formspec", default.router_formspec(pos)) + meta:set_string("infotext", "Router") + timer:start(10) + end + end, + after_place_node = function(pos) + local meta = minetest.get_meta(pos) + local timer = minetest.get_node_timer(pos) + meta:set_string("formspec", default.router_formspec(pos)) + meta:set_string("infotext", "Router") + timer:start(10) + end, + on_construct = function(pos) + local isp = minetest.find_node_near(pos, 30, {"mycoins:isp_on"}) + if isp == nil then + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_error', param2 = node.param2}) + meta:set_string("formspec", default.router_error_formspec(pos)) + meta:set_string("infotext", "Router") + else + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_on', param2 = node.param2}) + meta:set_string("formspec", default.router_formspec(pos)) + meta:set_string("infotext", "Router") + end + end, +}) + +minetest.register_node("mycoins:router", { + description = "WIFI Router", + tiles = {"mycoins_router_t.png","mycoins_router_bt.png","mycoins_router_l.png","mycoins_router_r.png","mycoins_router_b.png", "mycoins_router_f.png"}, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + is_ground_content = true, + groups = {snappy=3}, + sound = default.node_sound_wood_defaults(), + drop = "mycoins:router", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.25, -0.5, -0.0625, 0.25, -0.375, 0.3125}, + {-0.1875, -0.4375, 0.3125, -0.125, -0.1875, 0.375}, + {0.125, -0.4375, 0.3125, 0.1875, -0.1875, 0.375}, + {-0.0625, -0.4375, 0.3125, 0.0625, -0.25, 0.375}, + }, + }, + on_punch = function(pos) + local isp = minetest.find_node_near(pos, 30, {"mycoins:isp_on"}) + if isp == nil then + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:router_error', param2 = node.param2}) + meta:set_string("formspec", default.router_error_formspec(pos)) + meta:set_string("infotext", "Router") + timer:start(10) + else + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:router_on', param2 = node.param2}) + meta:set_string("formspec", default.router_formspec(pos)) + meta:set_string("infotext", "Router") + timer:start(10) + end + end, + on_timer = function(pos) + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router', param2 = node.param2}) + meta:set_string("formspec", default.router_off_formspec(pos)) + meta:set_string("infotext", "Router") + timer:stop() + end, + after_place_node = function(pos) + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", default.router_formspec(pos)) + meta:set_string("infotext", "Router") + timer:start(10) + end, + on_construct = function(pos) + local isp = minetest.find_node_near(pos, 30, {"mycoins:isp_on"}) + if isp == nil then + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_error', param2 = node.param2}) + meta:set_string("formspec", default.router_error_formspec(pos)) + meta:set_string("infotext", "Router") + else + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_on', param2 = node.param2}) + meta:set_string("formspec", default.router_formspec(pos)) + meta:set_string("infotext", "Router") + end + end, +}) + +minetest.register_node("mycoins:router_error", { + description = "WIFI Router", + tiles = {"mycoins_router_t.png","mycoins_router_bt.png","mycoins_router_l.png","mycoins_router_r.png","mycoins_router_b.png", + {name="mycoins_router_f_error.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1.0}},}, --"mycoins_router_f.png"}, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + is_ground_content = true, + groups = {snappy=3, not_in_creative_inventory = 1}, + sound = default.node_sound_wood_defaults(), + drop = "mycoins:router", + drawtype = "nodebox", + light_source = 4, + node_box = { + type = "fixed", + fixed = { + {-0.25, -0.5, -0.0625, 0.25, -0.375, 0.3125}, + {-0.1875, -0.4375, 0.3125, -0.125, -0.1875, 0.375}, + {0.125, -0.4375, 0.3125, 0.1875, -0.1875, 0.375}, + {-0.0625, -0.4375, 0.3125, 0.0625, -0.25, 0.375}, + }, + }, + on_punch = function(pos) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name = 'mycoins:router', param2 = node.param2}) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", default.router_off_formspec(pos)) + meta:set_string("infotext", "Router") + end, + on_timer = function(pos) + local isp = minetest.find_node_near(pos, 30, {"mycoins:isp_on"}) + if isp == nil then + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_error', param2 = node.param2}) + meta:set_string("formspec", default.router_error_formspec(pos)) + meta:set_string("infotext", "Router") + timer:start(10) + else + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_on', param2 = node.param2}) + meta:set_string("formspec", default.router_formspec(pos)) + meta:set_string("infotext", "Router") + timer:start(10) + end + + end, + after_place_node = function(pos) + local timer = minetest.get_node_timer(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", default.router_error_formspec(pos)) + meta:set_string("infotext", "Router") + timer:start(10) + end, + on_construct = function(pos) + local isp = minetest.find_node_near(pos, 30, {"mycoins:isp_on"}) + if isp == nil then + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_error', param2 = node.param2}) + meta:set_string("formspec", default.router_error_formspec(pos)) + meta:set_string("infotext", "Router") + else + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + minetest.swap_node(pos, {name = 'mycoins:router_on', param2 = node.param2}) + meta:set_string("formspec", default.router_formspec(pos)) + meta:set_string("infotext", "Router") + end + end, +}) + + diff --git a/textures/blk.png b/textures/blk.png new file mode 100644 index 0000000000000000000000000000000000000000..5795797fc9e972f48a76cfda374dc921cdfa510b GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwgMUF*KLf38L8lVubr;B3<$MxidgoGdb42&#{3`-uY RF$795c)I$ztaD0e0svqy9EAV? literal 0 HcmV?d00001 diff --git a/textures/grn.png b/textures/grn.png new file mode 100644 index 0000000000000000000000000000000000000000..71d65e30573dec4c55488b4df2e40772395d49ad GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwgMUF*9TC9#~0Z@q7)5S4_<9c#JM#2w%2BsFq21W+U Qbf5%-r>mdKI;Vst07+gOY5)KL literal 0 HcmV?d00001 diff --git a/textures/mycoins_copper_ribbonwire.png b/textures/mycoins_copper_ribbonwire.png new file mode 100644 index 0000000000000000000000000000000000000000..36a043d262da91ed1c23893b4e4abea1bd911d8e GIT binary patch literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7ltjy?i))=C2NS|hhG z(@ExQC!6dd$Nq{N>b`Ca60;Rgh;e*&JybJOL1#hl(cLXCcK(!1o2QU9@8HyJEmxiQ zc)u*aWn*vB@mTTh#KZ?WE3XS*mwtNUbxV+%D#xaroVURm;eodVwyyuEH`B6XR&Iss zy0Vt?zU#}QZ+-W@RoG^p{@lXH-%mZHS@7yxTdmo>%72ZsK`dW5bdj0v$ TA9|kxV}`-g)z4*}Q$iB}Uz^OK literal 0 HcmV?d00001 diff --git a/textures/mycoins_isp_bk.png b/textures/mycoins_isp_bk.png new file mode 100644 index 0000000000000000000000000000000000000000..d70c2c052f6a499b61b886d2a18c773833c5278f GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdze@_?3kch)?&u!!dO0Wior-`~H z$R0}&;N7bjk&*aL{rVy4=8cD4kF2R;D)^q82GR-z2Vx!UUX+L~Se2^8^dQ+m?tMv7 ZF=IsE`%Clh)>welc)I$ztaD0e0syNRDWm`Z literal 0 HcmV?d00001 diff --git a/textures/mycoins_isp_bt.png b/textures/mycoins_isp_bt.png new file mode 100644 index 0000000000000000000000000000000000000000..687ccceb6d82e2b3c77150987b24c418ac2c4151 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzJ5LwKkch)?&l&PE81OJV2AfTF zFt|9yaq3d%RrN2wPtFMTtojt}5E{Fk7pNKr8u}TxRd31&X1^A@Q#at19S=yt)78&q Iol`;+00#Xbg#Z8m literal 0 HcmV?d00001 diff --git a/textures/mycoins_isp_ft.png b/textures/mycoins_isp_ft.png new file mode 100644 index 0000000000000000000000000000000000000000..fc4a9f2cafa64c00e5917e4cb0683dede3beb349 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwgMOIYA`Y(Ht5m2bz)5S3);&5_;1go;F!K76WKR!PG z|KrKir%p{uQRB8;SNHJ|YuLxv*Vj+Z5xeZ*e(*!VfuPB*%&!|>7#A*9G>~Ef5{I}K zU7S>4BHnW+X2X>fLDz%+Ws`fP9PKj}H7pT(v&gmkpYUQmJ-xn(X@MUe9%kS3>HGWp p@@u))fB7zEhMP><7X=bLVt`I!@O1TaS?83{1OWTfTm=9C literal 0 HcmV?d00001 diff --git a/textures/mycoins_isp_ft_off.png b/textures/mycoins_isp_ft_off.png new file mode 100644 index 0000000000000000000000000000000000000000..a6da740978ebd906e459271b7c704acd5a28d5bb GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwgMOKtgInGUBKTxRM)5S3);&5_;1go;F!K76WKR!PG z|KrKir%p{uQRB8;SNHJ|YuLxv*Vj+Z5xeZ*e(*zqgG~Ef5{I}K zU7S>4BHnW+Mqr|>W8jC$cU2a<>&kwgMOKte=(yvoUZBu+PZ!6Kh{JEg4Eb6Wc&^TmYwj+6 zP{6a7Pg$9nTiN`A=i>kMLKBIxOgCushe$El)|E~CgO?fzRAp5p~dLV<|pjn zGL6UK>}$(stXEPLp6hFJS4&UJV%otu<<+Ce$sc^ePsA5kHr{Q^>X}*9khS)Bj`XrA nvzn^kyE2>K>sq_@F6WtSA<>&kwgMOKuJ(^n-p5h%3X)5S3);_%xrL%vo8o~!fYn!8IM z6!7fjQ&wi?RyM!jx%hv*(8MOU+bu07zV{Z_>dLZh+SPMUr!v z-p%>_v38waqdSo&(rLgF$iFo3=Z!)u1Xfe98`3XC? zOyhAl``Ypu>y;FR=lYu5)zZ_ln09bZdG#oA@&}*r6Y&L>jd$C!dS+HNWUW1(BfV_O mtfuPsuFU55y4G&J%XubS$TH40PlOxj1qM%7KbLh*2~7Y+#b~Vn literal 0 HcmV?d00001 diff --git a/textures/mycoins_isp_tp.png b/textures/mycoins_isp_tp.png new file mode 100644 index 0000000000000000000000000000000000000000..35448e89206a26b80ef75a55ccb7abe1b2f06311 GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz4^J1zkch)?&u!#oP~bUoV9g)x zzgCjU%?Fq`GJ+IxPX2Yh;C)lhd^^*stldlM9Mbf*^8$52!2$M$%WD}tA3s|#eO6qf Uanr};tn)xpp00i_>zopr06bkO4*&oF literal 0 HcmV?d00001 diff --git a/textures/mycoins_ribbonwire.png b/textures/mycoins_ribbonwire.png new file mode 100644 index 0000000000000000000000000000000000000000..742080241a9c491a7189272b6ec560edd15a9349 GIT binary patch literal 873 zcmV-v1D5=WP);F$pdnWW9LsG6%tbLU4-T4Oamx+r;1rgEW@fpK9;>~y1GzORNOCa)}CN7%B@<~J)Y@U%!Moh+= zOvc+J@rXQ20njEOjM_9>3p84bgpD>z8=TFUtiSpa%w7VKy-Zw`q0#*wXLClIL)PEF zBuQenQq9;Ja;GZ$Yq7LcMkmM#!-(Z0-_l;}B1$tEzQEaR*MZ3HCNDHsPT{O&Ttbod0K6gz|Gfcw`$$e`ET1Qsf0;DGJ&zqi~p&#!h+ zs(N*-?Ev`9&Bmh-#9Jw9IKahmL81uTT_NfO0A6!>+&$y!e2|&rzbJSkq+Az{>_eW(fGHJ3kbp00Hb$S?VsdY=OWS?lE0IVPH7 zANHA>Abm!2XvyLovbe}56A312l68xYK6CT*ZbEJq5dE#fwJOAw&s^?Z`MuUPAP=r> zxG6b?F85)dxryyV^7TG^ig9sLYK;( ztKT#`)p8rLmddgcTarm){;XI`6|nt16-Md9&>Z} zyAv|QbILz>(z){kPdxV;cz(mUJV2_HhE9td^qHG}v?i5$TR=xe4*JXwJn`H;@%^i} zth0es$!$@o1Mr!fKrTtHr+UsJ2R-Hoo_Ow__{~ojXI_f}UUT#0<@@qlRF}U$+XOA+ zVhKIw|F4VgsezQi)aFxznSt!0?Z?L+wQrvRW8+<;KO0Ln00000NkvXXu0mjfjJTU- literal 0 HcmV?d00001 diff --git a/textures/mycoins_router_f_error.png b/textures/mycoins_router_f_error.png new file mode 100644 index 0000000000000000000000000000000000000000..f0c1f2d3b2f516ce2f7a3dccf4756e6f751a130b GIT binary patch literal 7523 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

Ks#(@=o>{@hwZBw}ib`@^XX(#i_gEK(jKzA$ zdLTqKSyn zyS!aX*dG6vBC;XR?5h#JYFusF#wGQ)TgC z1})=usu7iHerwQ~OJcSI(|oINe@gv#O;(wc)K<%uZS z>m1;}^zwRqBmvSc2Y6&|)rM$oK>lhjf}c!6i_@92pX>!?+|4?wBQbn@dv)dK0daRJ}6Ue{#@4YciIP;Ej(E-{1yj5NK8Pb{CiF1 z39r-bv>cNZ;m<#$>qx_CWa6ND_-=kSnbQOu)Z^!>JOE?3(0fmX@;vNMV-IS@^xxW^ zRr|LW(hT;WEi^v?-Z2E&g);+R1mu=boiE;Q19)3b*jnZ?2{x@!?F7~MlMrk%#B5PydPs!E!QrB5y2{|}@Wg`WTb literal 0 HcmV?d00001 diff --git a/textures/pcparts.png b/textures/pcparts.png new file mode 100644 index 0000000000000000000000000000000000000000..4a29f0b5258001808b66f8d4f9f18306bba26e02 GIT binary patch literal 24398 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 UDIHK8KFn>Khil0eO5zy&f1yqWxc~qF literal 0 HcmV?d00001