state = {} first_bomb = nil local first_bomb = {} local last_bomb = {} local bombs = {} local bomb = {} local dropped = {} local distance = {} local new_speed = 0 local b = 0 local c = 0 local dropx = {} local dropz = {} --bomber travel speed bomber_speed = 1000 --how fast the bombs fall drop_speed = 400 --height to start bomber at local height = 800 --how far away from trigger point to start dropping bombs (note they will travel forwards a bit still) local drop_range = 1250 --delay between each bomb being unloaded local time_between_drops = 700 function airstrike_bomber_init_name(e,name) weapon_name[e] = name state[e] = "wait" Hide(e) dropped[e] = 0 end function airstrike_bomber_main(e) --optional scale if your bomber model is big --Scale(e,20) if bombs[e] == nil then Prompt("no bombs for bomber "..weapon_name[e]) for a = 1,9999 do if g_Entity[a] ~= nil then if weapon_name[a] ~= nil then if GetFlatDistance(e,a) < 200 then if weapon_name[a] == "air strike bomb" then b = b + 1 if first_bomb[e] == nil then first_bomb[e] = b end bomb[b] = a last_bomb[e] = b --c = b bombs[e] = 1 end end end end if a == max_bomb then end end CollisionOff(e) SetPosition(e,g_Entity[e]['x'],g_Entity[e]['y']+height,g_Entity[e]['z']) else if state[e] == "active" then LoopSound(e,0) Show(e) RotateToPlayer(e) dropx[e] = g_PlayerPosX dropz[e] = g_PlayerPosZ for a = first_bomb[e],last_bomb[e] do RotateToPlayer(bomb[a]) end state[e] = "fly" new_speed = bomber_speed distance[e] = GetPlayerDistance(e) elseif state[e] == "fly" then MoveForward(e,new_speed) if GetDropFlatDistance(e) < drop_range and dropped[e] == 0 then new_speed = bomber_speed / 2 for a = first_bomb[e],last_bomb[e] do if state[bomb[a]] == "wait" then if GetTimer(e) > time_between_drops then StartTimer(e) state[bomb[a]] = "dropped" PlaySound(e,1) if a == c then dropped[e] = 1 new_speed = bomber_speed end break end end end end for a = first_bomb[e],last_bomb[e] do if state[bomb[a]] == "wait" then SetPosition(bomb[a],g_Entity[e]['x'],g_Entity[e]['y'],g_Entity[e]['z']) end end if dropped[e] == 1 then if GetPlayerDistance(e) > distance[e] then StopSound(e,0) Hide(e) Destroy(e) end end --dropped end --state end --bombs loaded end --main function airstrike_bomber_exit(e) end function GetFlatDistance(e,v) if g_Entity[e] ~= nil and g_Entity[v] ~= nil then local distDX = g_Entity[e]['x'] - g_Entity[v]['x'] local distDZ = g_Entity[e]['z'] - g_Entity[v]['z'] return math.sqrt((distDX*distDX)+(distDZ*distDZ)); end end function GetPlayerFlatDistance(e) tPlayerDX = (g_Entity[e]['x'] - g_PlayerPosX) tPlayerDZ = (g_Entity[e]['z'] - g_PlayerPosZ) return math.sqrt(math.abs(tPlayerDX*tPlayerDX)+math.abs(tPlayerDZ*tPlayerDZ)); end function GetDropFlatDistance(e) local tdx = g_Entity[e]['x'] - dropx[e] local tdz = g_Entity[e]['z'] - dropz[e] return math.sqrt((tdx*tdx)+(tdz*tdz)) end