cards_mod_cause_crash
|
@ -115,7 +115,6 @@ git clone --depth 1 --branch master git://cheapiesystems.com/prefab_redo
|
|||
git clone --depth 1 --branch master https://github.com/v-rob/bridger.git
|
||||
git clone --depth 1 --branch master https://github.com/AiTechEye/smartshop.git
|
||||
git clone --depth 1 --branch master https://repo.or.cz/minetest_colorcubes.git
|
||||
git clone --depth 1 --branch master https://github.com/gejan/cards.git
|
||||
git clone --depth 1 --branch master https://github.com/DonBatman/myboardgames.git
|
||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/ilights.git
|
||||
git clone --depth 1 --branch master https://github.com/TumeniNodes/angledstairs.git
|
||||
|
|
|
@ -124,7 +124,6 @@ load_mod_minislots_work_files = true
|
|||
load_mod_mylittle_bg = true
|
||||
load_mod_vines = true
|
||||
load_mod_ts_doors = true
|
||||
load_mod_cards = true
|
||||
load_mod_moretrees = true
|
||||
load_mod_smartshop = true
|
||||
load_mod_mobs_fish = true
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
Minetest Cards Mod
|
||||
--------------------------
|
||||
|
||||
Adds cards to Minetest.
|
||||
|
||||
|
||||
Depends on nothing.
|
||||
|
||||
Crafting recipes require Minetest Game's dye and default mods:
|
||||
Recipe of cardbox:
|
||||
default:chest, dye:black, dye:green,
|
||||
default:clay_lump, dye:red, dye:blue,
|
||||
default:paper, default:paper, default:paper
|
||||
|
||||
|
||||
LICENSE:
|
||||
|
||||
Code:
|
||||
|
||||
Copyright (C) 2017 Jannik Kulesha (Gerald)
|
||||
|
||||
LPGL v2.1
|
||||
See https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
|
||||
|
||||
|
||||
Textures:
|
||||
|
||||
Apple, Sword, Coal and Mese are taken from Minetest Game's default mod by
|
||||
celeron55 (Perttu Ahola) and various other people. The sword has been shortened.
|
||||
This textures are under CC-BY-SA 3.0.
|
||||
See http://creativecommons.org/licenses/by-sa/3.0/
|
||||
|
||||
Everything else by Jannik Kulesha and under the CC-BY-SA 3.0.
|
||||
See http://creativecommons.org/licenses/by-sa/3.0/
|
||||
|
|
@ -1 +0,0 @@
|
|||
Adds playing cards to Minetest
|
|
@ -1,701 +0,0 @@
|
|||
|
||||
math.randomseed(os.time())
|
||||
|
||||
local STACK_FORM = "size[2,6]"..
|
||||
"button_exit[0,0;2,1;draw_turned;draw turned]"..
|
||||
"button_exit[0,1;2,1;shuffle;shuffle]"..
|
||||
"button_exit[0,2;2,1;flip;flip]"..
|
||||
"button_exit[0,3;2,1;remove;delete stack]"..
|
||||
"button_exit[0,4;2,1;quit;quit]"
|
||||
local CARD_FORM = "size[3,5]"..
|
||||
"button_exit[0,0;3,1;flip;flip]"..
|
||||
"button_exit[0,1;3,1;shuffle;shuffle]"..
|
||||
"button_exit[0,2;3,1;delete;not show again]"..
|
||||
"button_exit[0,3;3,1;quit;quit]"
|
||||
local box_form = "size[10,4]"
|
||||
local CARDS_PER_BOX = 500
|
||||
|
||||
|
||||
minetest.register_node("cards:turned_card", {
|
||||
description = "a turned card",
|
||||
inventory_image = "cards_back_2.png",
|
||||
wield_image = "cards_back_2.png",
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {{-0.5, -0.5, -0.5, 0.5, -0.4375 , 0.5}}
|
||||
},
|
||||
tiles = {"cards_back_2.png", "cards_back_2.png",
|
||||
"cards_side.png", "cards_side.png",
|
||||
"cards_side.png", "cards_side.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
local card = itemstack:get_metadata()
|
||||
local deckname = string.sub(card, 12, string.find(card, "_", 12) - 1)
|
||||
minetest.swap_node(pos, {name = "cards:stack_"..deckname})
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_int("count", 0)
|
||||
meta:set_string(0, card)
|
||||
meta:set_string("infotext", 1)
|
||||
meta:set_string("formspec", STACK_FORM)
|
||||
end,
|
||||
groups = {oddly_breakable_by_hand = 3, card = 3, not_in_creative_inventory = 1},
|
||||
})
|
||||
|
||||
local num_decks = 0
|
||||
|
||||
local function register_deck(deckname, data)
|
||||
local name = "cards:deck_"..deckname
|
||||
local cardname = data.cardname
|
||||
local stackname = "cards:stack_"..cardname
|
||||
local size = data.number_of_suits * data.number_of_values
|
||||
box_form = box_form..
|
||||
"item_image_button["..num_decks..",2;1,1;"..name..";"..name.."#"..size..";]"..
|
||||
"label["..num_decks..",1;"..deckname.."]"..
|
||||
"label["..num_decks..",3;"..size.."]"
|
||||
num_decks = num_decks + 1
|
||||
minetest.register_craftitem(name, {
|
||||
description = "set of playing cards ("..deckname..")",
|
||||
inventory_image = data.inventory_image,
|
||||
wield_image = data.inventory_image,
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
if pointed_thing.type ~= "node" then
|
||||
return
|
||||
end
|
||||
local pos = pointed_thing.under
|
||||
local node = minetest.get_node(pos)
|
||||
local new_stack = true
|
||||
if minetest.get_item_group(node.name, "card") == 2 then
|
||||
new_stack = false
|
||||
elseif not minetest.registered_nodes[node.name].buildable_to then
|
||||
pos = pointed_thing.above
|
||||
node = minetest.get_node(pos)
|
||||
if not minetest.registered_nodes[node.name].buildable_to then
|
||||
return
|
||||
end
|
||||
end
|
||||
if minetest.is_protected(pos, placer:get_player_name())then
|
||||
return
|
||||
end
|
||||
if new_stack then
|
||||
node.name = stackname
|
||||
minetest.set_node(pos, node)
|
||||
end
|
||||
itemstack:take_item()
|
||||
-- set cards
|
||||
local meta = minetest.get_meta(pos)
|
||||
local old_count = 0
|
||||
if not new_stack then
|
||||
old_count = meta:get_int("count") + 1
|
||||
end
|
||||
local count = size
|
||||
local set = {}
|
||||
for s = 1, data.number_of_suits do
|
||||
for v = 1, data.number_of_values do
|
||||
local r = math.random(1, count)
|
||||
local i = -1
|
||||
while r > 0 do
|
||||
i = i + 1
|
||||
if not set[i] then
|
||||
r = r - 1
|
||||
end
|
||||
end
|
||||
set[i] = true
|
||||
meta:set_string(i + old_count, "cards:card_"..cardname.."_"..data.suits[s].."_"..data.values[v])
|
||||
count = count - 1
|
||||
end
|
||||
end
|
||||
meta:set_int("count", old_count + size - 1)
|
||||
meta:set_string("infotext", old_count + size)
|
||||
meta:set_string("formspec", STACK_FORM)
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "cards:card_box "..size,
|
||||
recipe = {{name}},
|
||||
})
|
||||
if not minetest.registered_nodes[stackname] then
|
||||
minetest.register_node(stackname, {
|
||||
description = "set of playing cards ("..cardname..")",
|
||||
inventory_image = data.back_texture,
|
||||
wield_image = data.back_texture,
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {{-0.5, -0.5, -0.5, 0.5, -0.25 , 0.5}}
|
||||
},
|
||||
tiles = {data.back_texture, data.back_texture,
|
||||
"cards_side.png", "cards_side.png",
|
||||
"cards_side.png", "cards_side.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
on_dig = function(pos, node, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
local count = meta:get_int("count")
|
||||
local top = meta:get_string(count)
|
||||
player:get_inventory():add_item("main", top)
|
||||
if count == 0 then
|
||||
node.name = "air"
|
||||
minetest.set_node(pos, node)
|
||||
return
|
||||
else
|
||||
meta:set_int("count", count - 1)
|
||||
meta:set_string("infotext", count)
|
||||
end
|
||||
end,
|
||||
on_receive_fields = function(pos, formname, fields, player)
|
||||
if fields.flip then
|
||||
local meta = minetest.get_meta(pos)
|
||||
local count = meta:get_int("count")
|
||||
for i = 0, count / 2 do
|
||||
local a = meta:get_string(i)
|
||||
local b = meta:get_string(count - i)
|
||||
meta:set_string(i, b)
|
||||
meta:set_string(count - i, a)
|
||||
end
|
||||
meta:set_string("formspec", CARD_FORM)
|
||||
minetest.swap_node(pos, {name = meta:get_string(count)})
|
||||
elseif fields.draw_turned then
|
||||
local meta = minetest.get_meta(pos)
|
||||
local count = meta:get_int("count")
|
||||
local top = meta:get_string(count)
|
||||
player:get_inventory():add_item("main", {name="cards:turned_card", count=1, wear=0, metadata= top})
|
||||
if count == 0 then
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
return
|
||||
else
|
||||
meta:set_int("count", count - 1)
|
||||
meta:set_string("infotext", count)
|
||||
end
|
||||
elseif fields.remove then
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
elseif fields.shuffle then
|
||||
local meta = minetest.get_meta(pos)
|
||||
local count = meta:get_int("count")
|
||||
for i = 0, count do
|
||||
local j = math.random(i, count)
|
||||
local a = meta:get_string(i)
|
||||
local b = meta:get_string(j)
|
||||
meta:set_string(i, b)
|
||||
meta:set_string(j, a)
|
||||
end
|
||||
end
|
||||
end,
|
||||
groups = {oddly_breakable_by_hand = 3, card = 2},
|
||||
})
|
||||
end
|
||||
|
||||
for s = 1, data.number_of_suits do
|
||||
for v = 1, data.number_of_values do
|
||||
local name = "cards:card_"..cardname.."_"..data.suits[s].."_"..data.values[v]
|
||||
if not minetest.registered_nodes[name] then
|
||||
local texture = data.value_textures[v].."^"..data.suit_textures[s].."^[colorize:"..data.colors[s].."^[noalpha"
|
||||
if data.not_colorize_suit then
|
||||
texture = data.value_textures[v].."^[colorize:"..data.colors[s].."^"..data.suit_textures[s].."^[noalpha"
|
||||
end
|
||||
minetest.register_node(name, {
|
||||
description = data.suits[s].." "..data.values[v],
|
||||
inventory_image = texture,
|
||||
wield_image = data.back_texture,
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {{-0.5, -0.5, -0.5, 0.5, -0.4375 , 0.5}}
|
||||
},
|
||||
tiles = {texture, data.back_texture,
|
||||
"cards_side.png", "cards_side.png",
|
||||
"cards_side.png", "cards_side.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
if pointed_thing.type ~= "node" then
|
||||
return
|
||||
end
|
||||
local pos = pointed_thing.under
|
||||
local node = minetest.get_node(pos)
|
||||
local stack_type = minetest.get_node_group(node.name, "card")
|
||||
if stack_type == 0 then
|
||||
return minetest.item_place(itemstack, placer, pointed_thing) -- default
|
||||
end
|
||||
if minetest.is_protected(pos, placer:get_player_name()) then
|
||||
return
|
||||
end
|
||||
-- add card to stack
|
||||
local meta = minetest.get_meta(pos)
|
||||
local count = meta:get_int("count")
|
||||
if count == 0 then
|
||||
meta:set_string(count, node.name)
|
||||
meta:set_string("formspec", CARD_FORM)
|
||||
end
|
||||
count = count + 1
|
||||
meta:set_string(count, name)
|
||||
meta:set_int("count", count)
|
||||
meta:set_string("infotext", count + 1)
|
||||
if stack_type == 1 then
|
||||
node.name = name
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
end,
|
||||
on_dig = function(pos, node, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
local count = meta:get_int("count")
|
||||
if count == 0 then
|
||||
minetest.node_dig(pos, node, player)
|
||||
return
|
||||
end
|
||||
local top = meta:get_string(count)
|
||||
player:get_inventory():add_item("main", top)
|
||||
count = count - 1
|
||||
node.name = meta:get_string(count)
|
||||
meta:set_int("count", count)
|
||||
meta:set_string("infotext", count + 1)
|
||||
minetest.swap_node(pos, node)
|
||||
end,
|
||||
on_receive_fields = function(pos, formname, fields, player)
|
||||
if fields.collect then
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta:get_int("count") == size then
|
||||
player:get_inventory():add_item("main",
|
||||
"cards:stack_"..deckname)
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
else
|
||||
minetest.chat_send_player(player:get_player_name(),
|
||||
"[cards] stack not complete!")
|
||||
end
|
||||
elseif fields.flip then
|
||||
local meta = minetest.get_meta(pos)
|
||||
local count = meta:get_int("count")
|
||||
for i = 0, count / 2 do
|
||||
local a = meta:get_string(i)
|
||||
local b = meta:get_string(count - i)
|
||||
meta:set_string(i, b)
|
||||
meta:set_string(count - i, a)
|
||||
end
|
||||
meta:set_string("formspec", STACK_FORM)
|
||||
minetest.swap_node(pos, {name = "cards:stack_"..deckname})
|
||||
elseif fields.shuffle then
|
||||
local meta = minetest.get_meta(pos)
|
||||
local count = meta:get_int("count")
|
||||
for i = 0, count do
|
||||
local j = math.random(i, count)
|
||||
local a = meta:get_string(i)
|
||||
local b = meta:get_string(j)
|
||||
meta:set_string(i, b)
|
||||
meta:set_string(j, a)
|
||||
end
|
||||
minetest.swap_node(pos, {name = meta:get_string(count)})
|
||||
elseif fields.delete then
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", nil)
|
||||
end
|
||||
end,
|
||||
groups = {oddly_breakable_by_hand = 3, card = 1},
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
register_deck("32", {
|
||||
cardname = "green",
|
||||
number_of_suits = 4,
|
||||
number_of_values = 8,
|
||||
colors = {"#F00", "#F00", "#000", "#000"},
|
||||
suits = {"tiles", "hearts", "pikes", "clovers"},
|
||||
suit_textures = {
|
||||
"cards_tile.png",
|
||||
"cards_heart.png",
|
||||
"cards_pike.png",
|
||||
"cards_clover.png"
|
||||
},
|
||||
values = {"7", "8", "9", "10", "J", "Q", "K", "A"},
|
||||
value_textures = {
|
||||
"cards_7.png",
|
||||
"cards_8.png",
|
||||
"cards_9.png",
|
||||
"cards_10.png",
|
||||
"cards_J.png",
|
||||
"cards_Q.png",
|
||||
"cards_K.png",
|
||||
"cards_A.png"
|
||||
},
|
||||
back_texture = "cards_back_3.png",
|
||||
inventory_image = "cards_deck_32.png",
|
||||
})
|
||||
|
||||
register_deck("52", {
|
||||
cardname = "blue",
|
||||
number_of_suits = 4,
|
||||
number_of_values = 13,
|
||||
colors = {"#FA0", "#F00", "#0B0", "#000"},
|
||||
suits = {"tiles", "hearts", "pikes", "clovers"},
|
||||
suit_textures = {
|
||||
"cards_tile.png",
|
||||
"cards_heart.png",
|
||||
"cards_pike.png",
|
||||
"cards_clover.png"
|
||||
},
|
||||
values = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"},
|
||||
value_textures = {
|
||||
"cards_2.png",
|
||||
"cards_3.png",
|
||||
"cards_4.png",
|
||||
"cards_5.png",
|
||||
"cards_6.png",
|
||||
"cards_7.png",
|
||||
"cards_8.png",
|
||||
"cards_9.png",
|
||||
"cards_10.png",
|
||||
"cards_J.png",
|
||||
"cards_Q.png",
|
||||
"cards_K.png",
|
||||
"cards_A.png"
|
||||
},
|
||||
back_texture = "cards_back.png",
|
||||
inventory_image = "cards_deck_52.png",
|
||||
})
|
||||
|
||||
--[[
|
||||
register_deck("104", {
|
||||
cardname = "blue",
|
||||
number_of_suits = 8,
|
||||
number_of_values = 13,
|
||||
colors = {"#FA0", "#F00", "#0B0", "#000"},
|
||||
suits = {"tiles", "hearts", "pikes", "clovers", "tiles", "hearts", "pikes", "clovers"},
|
||||
suit_textures = {
|
||||
"cards_tile.png",
|
||||
"cards_heart.png",
|
||||
"cards_pike.png",
|
||||
"cards_clover.png"
|
||||
},
|
||||
values = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"},
|
||||
value_textures = {
|
||||
"cards_2.png",
|
||||
"cards_3.png",
|
||||
"cards_4.png",
|
||||
"cards_5.png",
|
||||
"cards_6.png",
|
||||
"cards_7.png",
|
||||
"cards_8.png",
|
||||
"cards_9.png",
|
||||
"cards_10.png",
|
||||
"cards_J.png",
|
||||
"cards_Q.png",
|
||||
"cards_K.png",
|
||||
"cards_A.png"
|
||||
},
|
||||
back_texture = "cards_back.png",
|
||||
inventory_image = "cards_deck_104.png",
|
||||
})]]--
|
||||
|
||||
register_deck("Joker", {
|
||||
cardname = "Joker",
|
||||
number_of_suits = 3,
|
||||
number_of_values = 2,
|
||||
colors = {"#000", "#F00", "#800"},
|
||||
suits = {"black", "red", "dark"},
|
||||
suit_textures = {
|
||||
"cards_joker.png",
|
||||
"cards_joker.png",
|
||||
"cards_joker.png"
|
||||
},
|
||||
values = { "joker", "joker"},
|
||||
value_textures = {
|
||||
"cards_J.png",
|
||||
},
|
||||
back_texture = "cards_back.png",
|
||||
inventory_image = "cards_deck_joker.png",
|
||||
})
|
||||
|
||||
register_deck("Minetest", {
|
||||
cardname = "Minetest",
|
||||
number_of_suits = 4,
|
||||
number_of_values = 13,
|
||||
not_colorize_suit = true,
|
||||
colors = {"#FA0", "#F00", "#11B", "#000"},
|
||||
suits = {"mese", "apples", "swords", "coal"},
|
||||
suit_textures = {
|
||||
"cards_mese_crystal.png",
|
||||
"cards_apple.png",
|
||||
"cards_tool_diamondsword.png",
|
||||
"cards_coal_lump.png"
|
||||
},
|
||||
values = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"},
|
||||
value_textures = {
|
||||
"cards_2.png",
|
||||
"cards_3.png",
|
||||
"cards_4.png",
|
||||
"cards_5.png",
|
||||
"cards_6.png",
|
||||
"cards_7.png",
|
||||
"cards_8.png",
|
||||
"cards_9.png",
|
||||
"cards_10.png",
|
||||
"cards_J.png",
|
||||
"cards_Q.png",
|
||||
"cards_K.png",
|
||||
"cards_A.png"
|
||||
},
|
||||
back_texture = "cards_back_mese.png",
|
||||
inventory_image = "cards_deck_minetest_52.png",
|
||||
})
|
||||
|
||||
------
|
||||
-- Box
|
||||
|
||||
local show_box_formspec = function(itemstack, player, pointed_thing, formpart)
|
||||
if player:is_player() then
|
||||
if not formpart then
|
||||
formpart = ""
|
||||
end
|
||||
minetest.show_formspec(player:get_player_name(), "cards:card_box",
|
||||
box_form..formpart.."button[6,0;4,1;collect;collect from inventory]".."label[0,0;Parts left:"..
|
||||
math.floor(itemstack:get_count()).."]")
|
||||
end
|
||||
end
|
||||
local show_box_formspec_open = function(itemstack, player, pointed_thing)
|
||||
return show_box_formspec(itemstack, player, pointed_thing, "button_exit[4,0;2,1;close;close]")
|
||||
end
|
||||
local show_box_formspec_closed = function(itemstack, player, pointed_thing)
|
||||
return show_box_formspec(itemstack, player, pointed_thing, "button_exit[4,0;2,1;open;open]")
|
||||
end
|
||||
|
||||
|
||||
minetest.register_node("cards:card_box_open", {
|
||||
description = "Box which spawns card decks",
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {{0.5, -0.5, -0.5, -0.125, 0 , 0.5},
|
||||
{-0.125, 0, -0.5, -0.25, 0.625 , 0.5},}
|
||||
},
|
||||
tiles = {"default_wood.png^cards_card_box_top.png","default_wood.png",
|
||||
"default_wood.png", "default_wood.png",
|
||||
"default_wood.png", "default_wood.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
stack_max = CARDS_PER_BOX,
|
||||
on_place = show_box_formspec_open,
|
||||
on_secondary_use = show_box_formspec_open,
|
||||
on_use = function(itemstack, player, pointed_thing) --leftclick
|
||||
if pointed_thing.type ~= "node" then
|
||||
return nil
|
||||
end
|
||||
local pos = pointed_thing.under
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return nil
|
||||
end
|
||||
local node = minetest.get_node(pos)
|
||||
if minetest.get_node_group(node.name, "card") == 0 and
|
||||
minetest.get_node_group(node.name, "jeton") == 0 then
|
||||
return nil
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
local count = meta:get_int("infotext")
|
||||
if count == 0 then
|
||||
count = 1
|
||||
end
|
||||
itemstack:set_count(itemstack:get_count() + count)
|
||||
minetest.remove_node(pos)
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
minetest.register_node("cards:card_box", {
|
||||
description = "Box which spawns card decks",
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {{0.5, -0.5, -0.5, -0.125, 0.125 , 0.5}}
|
||||
},
|
||||
tiles = {"default_wood.png","default_wood.png",
|
||||
"default_wood.png", "default_wood.png",
|
||||
"default_wood.png", "default_wood.png"
|
||||
},
|
||||
paramtype = "light",
|
||||
stack_max = CARDS_PER_BOX,
|
||||
on_place = show_box_formspec_closed,
|
||||
on_secondary_use = show_box_formspec_closed,
|
||||
on_use = function(itemstack, player, pointed_thing) --leftclick
|
||||
if pointed_thing.type ~= "node" then
|
||||
return nil
|
||||
end
|
||||
local pos = pointed_thing.under
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return nil
|
||||
end
|
||||
local node = minetest.get_node(pos)
|
||||
if minetest.get_node_group(node.name, "card") == 0 and
|
||||
minetest.get_node_group(node.name, "jeton") == 0 then
|
||||
return nil
|
||||
end
|
||||
minetest.chat_send_player(player:get_player_name(), "Open in menu to collect pieces")
|
||||
return nil
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= "cards:card_box" then
|
||||
return false
|
||||
end
|
||||
local itemstack = player:get_wielded_item()
|
||||
if fields.open then
|
||||
itemstack:set_name("cards:card_box_open")
|
||||
player:set_wielded_item(itemstack)
|
||||
return true
|
||||
end
|
||||
if fields.close then
|
||||
itemstack:set_name("cards:card_box")
|
||||
player:set_wielded_item(itemstack)
|
||||
return true
|
||||
end
|
||||
if fields.quit then
|
||||
return true
|
||||
end
|
||||
local inv = player:get_inventory()
|
||||
if fields.collect then
|
||||
local collected = 0
|
||||
local list = inv:get_list("main")
|
||||
for i, stack in ipairs(list) do
|
||||
local name = stack:get_name()
|
||||
if minetest.get_item_group(name, "card") > 0 or
|
||||
minetest.get_item_group(name, "jeton") > 0 then
|
||||
collected = collected + stack:get_count()
|
||||
stack:clear()
|
||||
list[i]=stack
|
||||
end
|
||||
end
|
||||
inv:set_list("main", list)
|
||||
itemstack:set_count(itemstack:get_count() + collected)
|
||||
player:set_wielded_item(itemstack)
|
||||
show_box_formspec(itemstack, player)
|
||||
return true
|
||||
end
|
||||
for key,value in pairs(fields) do
|
||||
local d = string.find(key,"#")
|
||||
local itemname = string.sub(key,1,d-1)
|
||||
local cost = tonumber(string.sub(key, d+1))
|
||||
local count = itemstack:get_count()
|
||||
if cost < count then
|
||||
inv:add_item("main", itemname.." "..value)
|
||||
itemstack:set_count(count-cost)
|
||||
end
|
||||
end
|
||||
player:set_wielded_item(itemstack)
|
||||
show_box_formspec(itemstack, player)
|
||||
return true
|
||||
end)
|
||||
|
||||
|
||||
---------
|
||||
-- Jetons
|
||||
|
||||
local function set_count(pos, placer, itemstack, pointed_thing)
|
||||
minetest.chat_send_all("hello")
|
||||
local stack_count = itemstack:get_count()
|
||||
local meta = minetest.get_meta(pos)
|
||||
local count = meta:get_int("infotext")
|
||||
meta:set_int("infotext", count + stack_count)
|
||||
itemstack:clear()
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local function register_jeton(name, color)
|
||||
|
||||
local texture = "cards_jeton.png^[colorize:"..color.."^[noalpha"
|
||||
local node_name = "cards:jeton_"..name
|
||||
box_form = box_form..
|
||||
"item_image_button["..num_decks..",2;1,1;"..node_name..";"..node_name.."#1;1]"..
|
||||
"label["..num_decks..",1;"..name.."]"..
|
||||
"button["..(num_decks)..",3;0.5,1;".. node_name.."#10;10]"..
|
||||
"button["..(num_decks + 0.5)..",3;0.5,1;".. node_name.."#99;99]"
|
||||
num_decks = num_decks + 1
|
||||
minetest.register_node(node_name, {
|
||||
description = "jeton "..name,
|
||||
inventory_image = texture,
|
||||
wield_image = texture,
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {{-0.5, -0.5, -0.5, 0.5, -0.4375 , 0.5}}
|
||||
},
|
||||
tiles = {texture},
|
||||
paramtype = "light",
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
if pointed_thing.type ~= "node" then
|
||||
return
|
||||
end
|
||||
local pos = pointed_thing.under
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name ~= node_name then
|
||||
pos = pointed_thing.above
|
||||
return minetest.item_place(itemstack, placer, pointed_thing)
|
||||
end
|
||||
if minetest.is_protected(pos, placer:get_player_name()) then
|
||||
return
|
||||
end
|
||||
itemstack = set_count(pos, placer, itemstack, pointed_thing) -- add jetons to stack
|
||||
return itemstack
|
||||
end,
|
||||
after_place_node = set_count,
|
||||
on_dig = function(pos, node, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
local count = meta:get_int("infotext")
|
||||
minetest.node_dig(pos, node, player)
|
||||
node = minetest.get_node(pos)
|
||||
if node.name == node_name then return end
|
||||
player:get_inventory():add_item("main", {
|
||||
name = node_name,
|
||||
count = count - 1, -- 1 item is added by minetest.node_dig(...)
|
||||
wear = 0,
|
||||
metadata = ""
|
||||
})
|
||||
end,
|
||||
groups = {oddly_breakable_by_hand = 3, jeton = 1},
|
||||
})
|
||||
end
|
||||
|
||||
register_jeton("blue", "#00F:224")
|
||||
register_jeton("red", "#F00:224")
|
||||
register_jeton("black", "#000:224")
|
||||
register_jeton("green", "#0A0:224")
|
||||
register_jeton("yellow", "#FF0:224")
|
||||
|
||||
---------
|
||||
-- Crafts
|
||||
|
||||
minetest.register_craft({
|
||||
output = "cards:card_box "..CARDS_PER_BOX,
|
||||
recipe = {{"default:chest", "dye:black", "dye:green"},
|
||||
{"default:clay_lump","dye:red" , "dye:blue"},
|
||||
{"default:paper", "default:paper", "default:paper"},}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "cards:card_box",
|
||||
recipe = {{"group:jeton"}},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "cards:card_box",
|
||||
recipe = {{"group:card"}},
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
|
@ -1 +0,0 @@
|
|||
name = cards
|
Before Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 566 B |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 566 B |
Before Width: | Height: | Size: 323 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 444 B |
Before Width: | Height: | Size: 447 B |
Before Width: | Height: | Size: 439 B |
Before Width: | Height: | Size: 355 B |
Before Width: | Height: | Size: 630 B |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 200 B |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 1 KiB |