123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- -----------------------------------------------------------------------------------------------
- -- Fishing - Mossmanikin's version - Bobber 0.1.0
- -- License (code & textures): WTFPL
- -- Contains code from: fishing (original), mobs, throwing
- -- Supports: animal_clownfish, animal_fish_blue_white, animal_rat, mobs
- -----------------------------------------------------------------------------------------------
- -- 0.0625 (= 1 pixel on 16x16 texture)
- -- 0.125
- -- 0.1875
- -- 0.25
- -- 0.3125
- -- 0.375
- -- 0.4375
- -- 0.5 (= 8 pixels on 16x16 texture)
- -- 0.5625 (= 9 pixels on 16x16 texture)
- -- 0.625
- -- 0.6875
- -- 0.75
- -- 0.8125
- -- 0.875
- -- 0.9375
- -- 1.0 (= 16 pixels on 16x16 texture)
- minetest.register_node("fishing:bobber_box", {
- drawtype = "nodebox",
- node_box = {
- type = "fixed",
- fixed = {
- -- { left , bottom , front , right , top , back }
- {-0.0625, -0.6875, -0.0625, 0.0625, -0.5625, 0.0625},
- }
- },
- tiles = {"fishing_bobber.png"},
- groups = {not_in_creative_inventory=1},
- })
- minetest.register_node("fishing:bobber_box_ready", {
- drawtype = "nodebox",
- node_box = {
- type = "fixed",
- fixed = {
- -- { left , bottom , front , right , top , back }
- {-0.0625, -0.6875, -0.0625, 0.0625, -0.5625, 0.0625},
- }
- },
- tiles = {"fishing_bobber_ready.png"},
- groups = {not_in_creative_inventory=1},
- })
- local FISHING_BOBBER_ENTITY={
- hp_max = 605,
- water_damage = 1,
- physical = true,
- timer = 0,
- env_damage_timer = 0,
- visual = "wielditem",
- visual_size = {x=0.5, y=0.5, z=0.5},
- textures = {"fishing:bobber_box"},
- -- { left , bottom , front , right , top , back }
- collisionbox = {-0.125 , -0.5625, -0.125 , 0.125 , -0.3125, 0.125 },
- view_range = 7,
- -- DESTROY BOBBER WHEN PUNCHING IT
- on_punch = function (self, puncher, time_from_last_punch, tool_capabilities, dir)
- local player = puncher:get_player_name()
- if MESSAGES == true then
- --minetest.chat_send_all("Your fish escaped.")
- minetest.chat_send_player(player, "Your fish escaped.", false)
- end
- minetest.sound_play("fishing_bobber1", {
- pos = self.object:getpos(),
- gain = 0.5,
- })
- self.object:remove()
- end,
- -- WHEN RIGHTCLICKING THE BOBBER THE FOLLOWING HAPPENS (CLICK AT THE RIGHT TIME WHILE HOLDING A FISHING POLE)
- on_rightclick = function (self, clicker)
- local item = clicker:get_wielded_item()
- local player = clicker:get_player_name()
- if item:get_name() == "fishing:pole" then
- local inv = clicker:get_inventory()
- local room_fish = inv:room_for_item("main", {name="fishing:fish_raw", count=1, wear=0, metadata=""})
- if self.object:get_hp() <= 300 then
- if math.random(1, 100) < FISH_CHANCE then
- local chance = math.random(1, 84)
- if chance <= 60 then
- if room_fish then
- inv:add_item("main", {name="fishing:fish_raw", count=1, wear=0, metadata=""})
- if MESSAGES == true then
- --minetest.chat_send_all("You caught a Fish.")
- minetest.chat_send_player(player, "You caught a Fish.", false)
- end
- end
- elseif chance <= 70 then
- if minetest.get_modpath("animal_clownfish") ~= nil then
- if inv:room_for_item("main", {name="animal_clownfish:clownfish", count=1, wear=0, metadata=""}) then
- inv:add_item("main", {name="animal_clownfish:clownfish", count=1, wear=0, metadata=""})
- if MESSAGES == true then
- --minetest.chat_send_all("You caught a Clownfish.")
- minetest.chat_send_player(player, "You caught a Clownfish.", false)
- end
- end
- else
- if room_fish then
- inv:add_item("main", {name="fishing:fish_raw", count=1, wear=0, metadata=""})
- if MESSAGES == true then
- --minetest.chat_send_all("You caught a Fish.")
- minetest.chat_send_player(player, "You caught a Fish.", false)
- end
- end
- end
- elseif chance <= 80 then
- if minetest.get_modpath("animal_fish_blue_white") ~= nil then
- if inv:room_for_item("main", {name="animal_fish_blue_white:fish_blue_white", count=1, wear=0, metadata=""}) then
- inv:add_item("main", {name="animal_fish_blue_white:fish_blue_white", count=1, wear=0, metadata=""})
- if MESSAGES == true then
- --minetest.chat_send_all("You caught a Blue white fish.")
- minetest.chat_send_player(player, "You caught a Blue white fish.", false)
- end
- end
- else
- if room_fish then
- inv:add_item("main", {name="fishing:fish_raw", count=1, wear=0, metadata=""})
- if MESSAGES == true then
- --minetest.chat_send_all("You caught a Fish.")
- minetest.chat_send_player(player, "You caught a Fish.", false)
- end
- end
- end
- elseif chance == 81 then
- if inv:room_for_item("main", {name="default:stick", count=1, wear=0, metadata=""}) then
- inv:add_item("main", {name="default:stick", count=1, wear=0, metadata=""})
- if MESSAGES == true then
- --minetest.chat_send_all("You caught a Stick.")
- minetest.chat_send_player(player, "You caught a Stick.", false)
- end
- end
- elseif chance == 82 then
- if minetest.get_modpath("mobs") ~= nil then
- if inv:room_for_item("main", {name="mobs:rat", count=1, wear=0, metadata=""}) then
- inv:add_item("main", {name="mobs:rat", count=1, wear=0, metadata=""})
- if MESSAGES == true then
- --minetest.chat_send_all("You caught a Rat.")
- minetest.chat_send_player(player, "You caught a Rat.", false)
- end
- end
- elseif minetest.get_modpath("animal_rat") ~= nil then
- if inv:room_for_item("main", {name="animal_rat:rat", count=1, wear=0, metadata=""}) then
- inv:add_item("main", {name="animal_rat:rat", count=1, wear=0, metadata=""})
- if MESSAGES == true then
- --minetest.chat_send_all("You caught a Rat.")
- minetest.chat_send_player(player, "You caught a Rat.", false)
- end
- end
- else
- if inv:room_for_item("main", {name="rat", count=1, wear=0, metadata=""}) then
- inv:add_item("main", {name="rat", count=1, wear=0, metadata=""})
- if MESSAGES == true then
- --minetest.chat_send_all("You caught a Rat.")
- minetest.chat_send_player(player, "You caught a Rat.", false)
- end
- end
- end
- end
- elseif chance == 83 then
- if minetest.get_modpath("flowers_plus") ~= nil then
- if inv:room_for_item("main", {name="flowers:seaweed", count=1, wear=0, metadata=""}) then
- inv:add_item("main", {name="flowers:seaweed", count=1, wear=0, metadata=""})
- if MESSAGES == true then
- --minetest.chat_send_all("You caught a Clownfish.")
- minetest.chat_send_player(player, "You caught some Seaweed.", false)
- end
- end
- else
- if room_fish then
- inv:add_item("main", {name="fishing:fish_raw", count=1, wear=0, metadata=""})
- if MESSAGES == true then
- --minetest.chat_send_all("You caught a Fish.")
- minetest.chat_send_player(player, "You caught a Fish.", false)
- end
- end
- end
- elseif chance == 84 then
- if minetest.get_modpath("seaplants") ~= nil then
- if inv:room_for_item("main", {name="seaplants:leavysnackgreen", count=1, wear=0, metadata=""}) then
- inv:add_item("main", {name="seaplants:leavysnackgreen", count=1, wear=0, metadata=""})
- if MESSAGES == true then
- --minetest.chat_send_all("You caught a Clownfish.")
- minetest.chat_send_player(player, "You caught a Leavy Snack.", false)
- end
- end
- else
- if room_fish then
- inv:add_item("main", {name="fishing:fish_raw", count=1, wear=0, metadata=""})
- if MESSAGES == true then
- --minetest.chat_send_all("You caught a Fish.")
- minetest.chat_send_player(player, "You caught a Fish.", false)
- end
- end
- end
- else
- if MESSAGES == true then
- --minetest.chat_send_all("Your fish escaped.")
- minetest.chat_send_player(player, "Your fish escaped.", false)
- end
- end
- else
- if MESSAGES == true then
- --minetest.chat_send_all("Your fish escaped.")
- minetest.chat_send_player(player, "Your fish escaped.", false)
- end
- end
- else
- if MESSAGES == true then
- --minetest.chat_send_all("Your fish escaped.")
- minetest.chat_send_player(player, "Your fish escaped.", false)
- end
- end
- minetest.sound_play("fishing_bobber1", {
- pos = self.object:getpos(),
- gain = 0.5,
- })
- self.object:remove()
- end,
- -- AS SOON AS THE BOBBER IS PLACED IT WILL ACT LIKE
- on_step = function(self, dtime)
- local pos = self.object:getpos()
- if BOBBER_CHECK_RADIUS > 0 then
- local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, BOBBER_CHECK_RADIUS)
- for k, obj in pairs(objs) do
- if obj:get_luaentity() ~= nil then
- if obj:get_luaentity().name == "fishing:bobber_entity" then
- if obj:get_luaentity() ~= self then
- self.object:remove()
- end
- end
- end
- end
- end
- if math.random(1, 4) == 1 then
- self.object:setyaw(self.object:getyaw()+((math.random(0,360)-180)/180*math.pi))
- end
- for _,player in pairs(minetest.get_connected_players()) do
- local s = self.object:getpos()
- local p = player:getpos()
- local dist = ((p.x-s.x)^2 + (p.y-s.y)^2 + (p.z-s.z)^2)^0.5
- if dist > self.view_range then
- minetest.sound_play("fishing_bobber1", {
- pos = self.object:getpos(),
- gain = 0.5,
- })
- self.object:remove()
- end
- end
- local do_env_damage = function(self)
- self.object:set_hp(self.object:get_hp()-self.water_damage)
- --local pos = self.object:getpos()
- if self.object:get_hp() == 600 then
- self.object:moveto({x=pos.x,y=pos.y-0.03125,z=pos.z})
- elseif self.object:get_hp() == 595 then
- self.object:moveto({x=pos.x,y=pos.y+0.03125,z=pos.z})
- elseif self.object:get_hp() == 590 then
- self.object:moveto({x=pos.x,y=pos.y+0.03125,z=pos.z})
- elseif self.object:get_hp() == 585 then
- self.object:moveto({x=pos.x,y=pos.y-0.03125,z=pos.z})
- self.object:set_hp(self.object:get_hp()-(math.random(1, 200)))
- elseif self.object:get_hp() == 300 then
- minetest.sound_play("fishing_bobber1", {
- pos = self.object:getpos(),
- gain = 0.5,
- })
- if BOBBER_COLOR_CHANGE == true then
- self.object:set_properties({
- textures = {"fishing:bobber_box_ready"},
- })
- end
- self.object:moveto({x=pos.x,y=pos.y-0.0625,z=pos.z})
- elseif self.object:get_hp() == 295 then
- self.object:moveto({x=pos.x,y=pos.y+0.0625,z=pos.z})
- elseif self.object:get_hp() == 290 then
- self.object:moveto({x=pos.x,y=pos.y+0.0625,z=pos.z})
- elseif self.object:get_hp() == 285 then
- self.object:moveto({x=pos.x,y=pos.y-0.0625,z=pos.z})
- elseif self.object:get_hp() < 284 then
- self.object:moveto({x=pos.x+(0.001*(math.random(-8, 8))),y=pos.y,z=pos.z+(0.001*(math.random(-8, 8)))})
- elseif self.object:get_hp() == 0 then
- minetest.sound_play("fishing_bobber1", {
- pos = self.object:getpos(),
- gain = 0.5,
- })
- self.object:remove()
- end
- end
- do_env_damage(self)
- end,
- }
- minetest.register_entity("fishing:bobber_entity", FISHING_BOBBER_ENTITY)
|