kamikaze: added nobanner policy <3<3<3 emi
[waspsaliva.git] / clientmods / kamikaze / init.lua
blobd38e3bf3dd65f44cfc2f901c47ef8c4eaa0adda6
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','mcl_banners:hanging_banner','mcl_banners:standing_banner'}
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 false and ( 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 false and ( 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()end)
98 ws.rg('Kamikaze','Bots','kamikaze', function()
99 local lp = minetest.localplayer:get_pos()
100 if not find_bad_things() then
101 if vector.distance(lp,zz) < 1 then
102 stopflight()
103 return
104 else
105 cpos=zz
107 elseif vector.distance(lp,cpos) < 1 then
108 stopflight()
109 return
111 flythere()
113 end,function()
114 core.set_keypress("special1", true)
115 end, function()
116 core.set_keypress("special1", false)
117 fnd=false
118 if hud_wp then
119 minetest.localplayer:hud_remove(hud_wp)
120 hud_wp=nil
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)
133 ws.on_connect(function()
134 if minetest.localplayer and minetest.localplayer:get_name():find("kamikaze") then
135 minetest.settings:set_bool("kamikaze",true)
137 end)