123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- local nici = 1
- local lastcard = nil
- local rplayers = {}
- local function inform_near_players(pos, msg)
- for _,player in pairs(minetest.get_objects_inside_radius(pos, 10)) do
- if player:is_player() then
- minetest.chat_send_player(player:get_player_name(), msg)
- end
- end
- end
- function apn(pos, placer, itemstack)
- local grop = minetest.get_item_group(minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name, "myuno")
- if grop > 3 then
- return
- end
-
- local name = placer:get_player_name()
- if grop == 0 then
- minetest.chat_send_player(name, "You can not place a card there!")
- minetest.remove_node(pos)
- return itemstack
- end
- local node = minetest.get_node(pos)
- local nodeu = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z})
- local descr = minetest.registered_items[node.name].description
- if grop == 1 then
- inform_near_players(pos, name.." placed a "..descr)
- return
- end
- lastcard = nodeu.name
- minetest.set_node({x=pos.x, y=pos.y-1, z=pos.z}, node)
- minetest.remove_node(pos)
- if grop == 3 then
- return itemstack
- end
- print(node.name)
-
- inform_near_players(pos, name.." placed a "..descr)
- end
- function od(pos, node, player, pointed_thing)
- local node = minetest.get_node(pos)
- local nn = node.name
- local nodeu = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z})
- local inv = player:get_inventory()
- local lc = lastcard
- print(nn)
- print(lc)
-
- if lastcard ~= nil then
- inv:add_item("main",nn)
- minetest.set_node(pos, {name = lc})
- lastcard = nil
- else
- return
- end
- end
- local sbox1 = {
- type = "fixed",
- fixed = {
- {-0.5, -0.5, -0.5, 0.5, -0.49, 0.5}}
- }
- local sbox2 = {
- type = "fixed",
- fixed = {
- {-0.3, -0.5, -0.45, 0.3, -0.3, 0.45}}
- }
- for nu = 1,13 do
- local num = nu
- local deck = {
- {"Red "..num,"1_"..num,"^[colorize:red:220","a"..num},
- {"Red "..num,"2_"..num,"^[colorize:red:220","b"..num},
- {"Yellow "..num,"3_"..num,"^[colorize:yellow:220","a"..num},
- {"Yellow "..num,"4_"..num,"^[colorize:yellow:220","b"..num},
- {"Green "..num,"5_"..num,"^[colorize:green:220","a"..num},
- {"Green "..num,"6_"..num,"^[colorize:green:220","b"..num},
- {"Blue "..num,"7_"..num,"^[colorize:blue:220","a"..num},
- {"Blue "..num,"8_"..num,"^[colorize:blue:220","b"..num},
- }
- for i in ipairs(deck) do
- local desc = deck[i][1]
- local itm = deck[i][2]
- local col = deck[i][3]
- local nimg = deck[i][4]
- for imgnum = 1,13 do
- local inum = imgnum
- if nimg == "b"..inum then
- nimg = "a"..inum
- else nimg = nimg
- local desc2 = "Card"
- if nimg == "a10" or
- nimg == "b10" then
- desc2 = string.gsub(desc, 10, "Change Direction")
- elseif nimg == "a11" or
- nimg == "b11" then
- desc2 = string.gsub(desc, 11, "Miss A Turn")
- elseif nimg == "a12" or
- nimg == "b12" then
- desc2 = string.gsub(desc, 12, "Pick Up 2")
- elseif nimg == "a13" then
- desc2 = string.gsub(desc, 13, 0)
- elseif nimg == "b13" then
- desc2 = "Pick Up 4"
- else
- desc2 = desc
- end
- minetest.register_node("myuno:"..itm,{
- description = desc2,
- inventory_image = "myuno_color.png"..col.."^myuno_white.png^myuno_"..nimg..".png",
- tiles = {"myuno_color.png"..col.."^myuno_white.png^myuno_"..nimg..".png"},
- drawtype = "mesh",
- mesh = "myuno_card.obj",
- paramtype = "light",
- -- paramtype2 = "facedir",
- stack_max = 1,
- groups = {oddly_breakable_by_hand = 3,not_in_creative_inventory = nici,myuno=2},
- selection_box = sbox1,
- collision_box = sbox1,
- after_place_node = apn,
- on_punch = od,
- })
- end
- end
- end
- end
- minetest.register_node("myuno:col",{
- description = "Any Color ",
- inventory_image = "myuno_col.png",
- tiles = {"myuno_card.png^myuno_col.png"},
- drawtype = "mesh",
- mesh = "myuno_card.obj",
- paramtype = "light",
- -- paramtype2 = "facedir",
- stack_max = 1,
- groups = {oddly_breakable_by_hand = 3,not_in_creative_inventory = nici,myuno=3},
- selection_box = sbox1,
- collision_box = sbox1,
- on_place = function(itemstack, placer, pointed_thing)
- local pos = pointed_thing.above
- local node = minetest.get_node(pos)
- local meta = minetest.get_meta(pos)
- minetest.show_formspec(placer:get_player_name(),"cform",
- "size[4,4;]"..
- "image_button_exit[0,0;2,2;myuno_form_red.png;red; ]"..
- "image_button_exit[2,0;2,2;myuno_form_yellow.png;yellow; ]"..
- "image_button_exit[0,2;2,2;myuno_form_blue.png;blue; ]"..
- "image_button_exit[2,2;2,2;myuno_form_green.png;green; ]")
- minetest.register_on_player_receive_fields(function(player, formname, fields)
- if formname == "cform" then
- if fields["red"] then
- minetest.set_node(pos,{name="air"})
- minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z},{name="myuno:red"})
- return itemstack
- elseif fields["blue"] then
- minetest.set_node(pos,{name="air"})
- minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z},{name="myuno:blue"})
- elseif fields["yellow"] then
- minetest.set_node(pos,{name="air"})
- minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z},{name="myuno:yellow"})
- elseif fields["green"] then
- minetest.set_node(pos,{name="air"})
- minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z},{name="myuno:green"})
- end
- end
- end)
- itemstack:take_item()
- return itemstack
- end,
- after_place_node = apn,
- on_punch = od,
- })
- minetest.register_node("myuno:deck",{
- description = "Uno Card Deck",
- tiles = {"myuno_deck.png"},
- drawtype = "mesh",
- mesh = "myuno_deck.obj",
- paramtype = "light",
- -- paramtype2 = "facedir",
- stack_max = 1,
- groups = {oddly_breakable_by_hand = 1,not_in_creative_inventory = nici},
- selection_box = sbox2,
- collision_box = sbox2,
- on_punch = function(pos, node, puncher, pointed_thing)
- local inv = puncher:get_inventory()
- local rand = math.random(1,108)
- local rcol = math.random(1,8)
- local scol = tostring(rcol)
- local rnum = math.random(1,13)
- local snum = tostring(rnum)
- local card = "myuno:"..scol.."_"..snum.." 1"
- if rand <= 4 then
- if inv
- and inv:room_for_item("main", "myuno:col 1") then
- inv:add_item("main", "myuno:col 1")
- else
- minetest.add_item(pos, item)
- end
- else
- if inv
- and inv:room_for_item("main", card) then
- inv:add_item("main", card)
- else
- minetest.add_item(pos, item)
- end
- end
- end,
-
- })
- minetest.register_node("myuno:board",{
- description = "My Uno",
- inventory_image = "myuno_inv.png",
- wield_image = "myuno_inv.png",
- tiles = {"default_clay.png^bubble.png"},
- drawtype = "normal",
- paramtype = "light",
- groups = {oddly_breakable_by_hand = 1},
- on_rightclick = function(pos, node, player, itemstack, pointed_thing)
- local schem = minetest.get_modpath("myuno").."/schems/myuno.mts"
- minetest.place_schematic({x=pos.x,y=pos.y,z=pos.z},schem,0, "air", true)
- count = 0
- end,
- after_place_node = function(pos, placer, itemstack, pointed_thing)
- if placer and minetest.check_player_privs(placer:get_player_name(), {myboardgames = true}) then
- else
- minetest.remove_node(pos)
- return true
- end
- end,
- })
- minetest.register_node("myuno:placer",{
- description = "Placer",
- tiles = {"default_clay.png"},
- drawtype = "normal",
- paramtype = "light",
- drop = "",
- groups = {cracky=1,not_in_creative_inventory = nici,myuno=1},
- })
- local colcards = {
- {"Red Card","red"},
- {"Blue Card","blue"},
- {"Yellow Card","yellow"},
- {"Green Card","green"},
- }
- for i in ipairs(colcards) do
- local desc = colcards[i][1]
- local itm = colcards[i][2]
- minetest.register_node("myuno:"..itm,{
- description = desc,
- tiles = {"myuno_"..itm..".png"},
- drawtype = "mesh",
- mesh = "myuno_card.obj",
- paramtype = "light",
- -- paramtype2 = "facedir",
- drop = "",
- groups = {oddly_breakable_by_hand = 3,not_in_creative_inventory = nici,myuno=2},
- selection_box = sbox1,
- collision_box = sbox1,
- after_place_node = apn,
- on_punch = od,
- })
- end
|