kamikaze: cleanup
[waspsaliva.git] / clientmods / kamikaze / init.lua
blob12d3e12992e60030fd63ed1ecbc432fdb390b960
1 local fnd=false
2 local cpos={x=0,y=0,z=0}
3 local crange=500
4 local hud_wp=nil
5 local zz={x=0,y=64,z=0}
6 local badnodes={'mcl_tnt:tnt','mcl_fire:basic_flame','mcl_fire:eternal_fire','mcl_fire:fire','mcl_fire:fire_charge','mcl_sponges:sponge','mcl_sponges:sponge_wet'}
7 local searchheight=64
9 local function set_kwp(name,pos)
10 if hud_wp then
11 minetest.localplayer:hud_change(hud_wp, 'world_pos', pos)
12 minetest.localplayer:hud_change(hud_wp, 'name', name)
13 else
14 hud_wp = minetest.localplayer:hud_add({
15 hud_elem_type = 'waypoint',
16 name = name,
17 text = 'm',
18 number = 0x00ff00,
19 world_pos = pos
21 end
22 end
23 local nextzz=0
24 local function randomzz()
25 if nextzz > os.clock() then return false end
26 math.randomseed(os.time())
27 zz.x=math.random(-128,128)
28 zz.y=math.random(64,searchheight)
29 zz.z=math.random(-128,128)
30 nextzz=os.clock()+ 15
31 end
34 local function find_bad_things()
35 if fnd then return true end
36 local obs=minetest.localplayer.get_nearby_objects(crange)
37 local lp=minetest.localplayer:get_pos()
38 local odst=500;
39 for k, v in ipairs(obs) do -- look for crystals first
40 if ( v:get_item_textures():find("mcl_end_crystal") ) then
41 local npos=v:get_pos()
42 local dst=vector.distance(npos,minetest.localplayer:get_pos())
43 if odst > dst then cpos=npos
44 set_kwp(v:get_item_textures(),v:get_pos())
45 fnd=true
46 return true
47 end
48 end
49 end
50 odst=500
51 for k, v in ipairs(obs) do
52 if ( v:get_item_textures():find("arrow_box") ) then
53 local npos=v:get_pos()
54 local dst=vector.distance(npos,minetest.localplayer:get_pos())
55 if odst > dst then cpos=npos
56 set_kwp(v:get_item_textures(),v:get_pos())
57 fnd=true
58 return true
59 end
60 end
61 end
62 odst=500
63 local epos=minetest.find_nodes_in_area(vector.add(lp,{x=79,y=79,z=79}), vector.add(lp,{x=-79,y=-79,z=-79}), badnodes, true)
64 if epos then
65 for k,v in pairs(epos) do for kk,vv in pairs(v) do
66 local lp=minetest.localplayer:get_pos()
67 local dst=vector.distance(lp,vv)
68 if odst > dst then odst=dst cpos=vv fnd=true end
69 end end
70 if fnd then set_kwp('badnode',cpos) return true end
71 end
73 set_kwp('nothing found',zz)
74 randomzz()
75 fnd=false
76 return false
77 end
81 local function flythere()
82 minetest.settings:set_bool("continuous_forward",true)
83 autofly.aim(cpos)
84 end
86 local function stopflight()
87 minetest.settings:set_bool("continuous_forward",false)
88 minetest.after("0",function()
89 minetest.interact("start_digging")
90 minetest.dig_node(cpos)
91 fnd=false
92 end)
93 end
96 minetest.register_globalstep(function()
97 if not minetest.settings:get_bool("kamikaze") and not(minetest.localplayer and minetest.localplayer:get_name():find("kamikaze")) then
99 ws.rg('Kamikaze','Bots','kamikaze', function()
100 local lp = minetest.localplayer:get_pos()
101 if not find_bad_things() then
102 if vector.distance(lp,zz) < 1 then
103 stopflight()
104 return
105 else
106 cpos=zz
108 elseif vector.distance(lp,cpos) < 1 then
109 stopflight()
110 return
112 flythere()
114 end,function()
115 core.set_keypress("special1", true)
116 end, function()
117 core.set_keypress("special1", false)
118 fnd=false
119 if hud_wp then
120 minetest.localplayer:hud_remove(hud_wp)
122 end,{"noclip","pitch_move"})
126 minetest.register_on_death(function()
127 if not minetest.settings:get_bool("kamikaze") then return end
128 minetest.after("5.0",function()
129 fnd=false
130 end)
131 end)