123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- christmas = {}
- christmas.players = {}
- christmas.data = minetest.get_mod_storage("christmas")
- local function xplayer(player)
- if not player:is_player() then
- return
- end
- local name = player:get_player_name()
- return christmas.players[name]
- end
- function christmas.get_present_formspec(pos)--Taken from default chest
- local spos = pos.x .. "," .. pos.y .. "," .. pos.z
- local formspec =
- "size[8,9]" ..
- "list[nodemeta:" .. spos .. ";main;0,0.3;8,4;]" ..
- "list[current_player;main;0,4.85;8,1;]" ..
- "list[current_player;main;0,6.08;8,3;8]" ..
- "listring[nodemeta:" .. spos .. ";main]" ..
- "listring[current_player;main]"
- return formspec
- end
- local function to_time(time)
- local remaining = time % 86400
- remaining = remaining % 3600
- local minutes = math.floor(remaining/60)
- remaining = remaining % 60
- local seconds = remaining
- if (minutes < 10) then
- minutes = "0" .. tostring(minutes)
- end
- if (seconds < 10) then
- seconds = "0" .. tostring(seconds)
- end
- answer = minutes..':'..seconds
- return answer
- end
- function christmas.eat_candy(hp_change, replace_with_item)
- return function(itemstack, user, pointed_thing)
- local name = user:get_player_name()
- local p = xplayer(user)
- christmas.players[name].candy = p.candy +1
- if p.candy == 8 then
- p.time = 60
- p.hud.ui = user:hud_add({
- hud_elem_type = "image",
- position = {x = 0.1, y = 0.5},
- offset = {x = -220, y = -260},
- text = "christmas_powerup_ui.png",
- scale = { x = 16, y = 17},
- alignment = { x = 1, y = 0 },
- })
- p.hud.icon = user:hud_add({
- hud_elem_type = "image",
- position = {x = 0.1, y = 0.5},
- offset = {x = -90, y = -251},
- text = "christmas_candy_cane.png",
- scale = { x = 16, y = 16},
- alignment = { x = 1, y = 0 },
- })
- p.hud.time = user:hud_add({
- hud_elem_type = "text",
- position = {x = 0.1, y = 0.5},
- offset = {x = 10, y = -10},
- text = to_time (p.time),
- number = 0xffffff,
- scale = { x = 16, y = 16},
- alignment = { x = 0, y = 0 },
- })
- end
- if p.time > 0 then
- p.time = p.time + 3
- end
- return minetest.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing)
- end
- end
- minetest.register_craftitem("christmas:candy_cane", {
- description = "Candy Cane",
- inventory_image = "christmas_candy_cane.png",
- on_use = christmas.eat_candy(1)
- })
- minetest.register_craftitem("christmas:mince_pie", {
- description = "Mince Pie",
- inventory_image = "christmas_mincepie.png",
- on_use = minetest.item_eat(2)
- })
- minetest.register_craftitem("christmas:gingerbread_man", {
- description = "Gingerbread Man",
- inventory_image = "christmas_gingerbread_man.png",
- on_use = minetest.item_eat(2)
- })
- minetest.register_craftitem("christmas:cracker", {
- description = "Christmas Cracker\n (To be shared with a friend)",
- inventory_image = "christmas_cracker.png",
- on_use = minetest.item_eat(2)
- })
- minetest.register_node("christmas:eggnog", {
- description = "Eggnog",
- drawtype = "plantlike",
- tiles = {"christmas_eggnog.png"},
- inventory_image = "christmas_eggnog.png",
- on_use = minetest.item_eat(10),
- groups = {vessel = 1, dig_immediate = 3, attached_node = 1},
- })
- minetest.register_node("christmas:present", {
- description = "Christmas present",
- tiles = {
- "christmas_present.png",
- "christmas_present_top.png"
- },
- drawtype = "mesh",
- paramtype = "light",
- mesh = "christmas_present.obj",
- groups = {oddly_breakable_by_hand = 3, attached_node = 1},
- on_construct = function(pos, itemstack, placer, pointed_thing)
- local meta = minetest.get_meta(pos)
- meta:set_string("infotext", "Christmas Present")
- meta:set_string("owner", "")
- local inv = meta:get_inventory()
- inv:set_size("main", 1)
- end,
- after_place_node = function(pos, placer)
- local meta = minetest.get_meta(pos)
- meta:set_string("owner", placer:get_player_name() or "")
- meta:set_string("infotext", "Present from ".. meta:get_string("owner"))
- end,
- on_rightclick = function(pos, node, player, itemstack, pointed_thing)
- minetest.after(0.2,
- minetest.show_formspec,
- player:get_player_name(),
- "christmas:present",
- christmas.get_present_formspec(pos))
- end,
- })
- minetest.register_node("christmas:stocking", {
- description = "Christmas Stocking",
- drawtype = "signlike",
- tiles = {"christmas_stocking.png"},
- inventory_image = "christmas_stocking.png",
- paramtype = "light",
- paramtype2 = "wallmounted",
- sunlight_propagates = true,
- selection_box = {
- type = "wallmounted",
- },
- groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 3},
- walkable = false,
- on_construct = function(pos, itemstack, player)
- local meta = minetest.get_meta(pos)
- meta:set_string("infotext", player:get_player_name().."'s Stocking")
- end,
- })
- minetest.register_on_joinplayer(function(player)
- local name = player:get_player_name()
- christmas.players[name] = {}
- christmas.players[name].candy = 0
- christmas.players[name].hud = {}
- christmas.players[name].time = 0
- end)
- local t = 0
- minetest.register_globalstep (function(dtime)
- t = t + dtime
- if t > 1 then
- t = 0
- end
- for _, player in ipairs(minetest.get_connected_players()) do
- local p = xplayer(player)
- if p.time > 0 and t > 1-dtime then
- p.time = p.time - 1
- player:hud_change(p.hud.time, "text", to_time(p.time))
- elseif math.floor(p.time) == 1 then
- p.candy = 0
- end
- if p.time > 0 then
- player:set_physics_override({
- speed = 2.5,
- })
- end
- --minetest.chat_send_all(p.candy)
- if p.time == 0 then
- player:set_physics_override({
- speed = 1,
- })
- player:hud_remove(p.hud.ui)
- player:hud_remove(p.hud.icon)
- player:hud_remove(p.hud.time)
- end
- end
- end)
|