mirror of
https://github.com/spencershepard/RotorOps.git
synced 2025-11-10 15:45:30 +00:00
Added JTAC Drone perk (#44)
* Added JTAC Drone perk Update RotorOpsPerks.lua
This commit is contained in:
parent
76e2858c7b
commit
c8ce026243
@ -1,7 +1,7 @@
|
|||||||
# ROTOROPS VERSION
|
# ROTOROPS VERSION
|
||||||
maj_version = 1
|
maj_version = 1
|
||||||
minor_version = 4
|
minor_version = 4
|
||||||
patch_version = 1
|
patch_version = 2
|
||||||
|
|
||||||
version_url = 'https://dcs-helicopters.com/app-updates/versioncheck.yaml'
|
version_url = 'https://dcs-helicopters.com/app-updates/versioncheck.yaml'
|
||||||
|
|
||||||
|
|||||||
@ -12,7 +12,8 @@
|
|||||||
|
|
||||||
|
|
||||||
RotorOpsPerks = {}
|
RotorOpsPerks = {}
|
||||||
RotorOpsPerks.version = "1.3"
|
RotorOpsPerks.version = "1.4"
|
||||||
|
env.warning('ROTOROPS PERKS STARTED: '..RotorOpsPerks.version)
|
||||||
trigger.action.outText('ROTOROPS PERKS STARTED: '..RotorOpsPerks.version, 10)
|
trigger.action.outText('ROTOROPS PERKS STARTED: '..RotorOpsPerks.version, 10)
|
||||||
RotorOpsPerks.perks = {}
|
RotorOpsPerks.perks = {}
|
||||||
RotorOpsPerks.players = {}
|
RotorOpsPerks.players = {}
|
||||||
@ -23,7 +24,7 @@ RotorOpsPerks.troops = {} --by group name
|
|||||||
|
|
||||||
RotorOpsPerks.silent_points = false --set to true to disable text on points scoring
|
RotorOpsPerks.silent_points = false --set to true to disable text on points scoring
|
||||||
RotorOpsPerks.player_update_messages = true --set to false to disable messages when players are added/updated to score keeping
|
RotorOpsPerks.player_update_messages = true --set to false to disable messages when players are added/updated to score keeping
|
||||||
RotorOpsPerks.debug = true
|
RotorOpsPerks.debug = false
|
||||||
|
|
||||||
RotorOpsPerks.points = {
|
RotorOpsPerks.points = {
|
||||||
player_default=0, --how many points each player will start with
|
player_default=0, --how many points each player will start with
|
||||||
@ -63,7 +64,7 @@ end
|
|||||||
RotorOpsPerks.perks["fatcow"] = {
|
RotorOpsPerks.perks["fatcow"] = {
|
||||||
perk_name='fatcow',
|
perk_name='fatcow',
|
||||||
display_name='FatCow FARP',
|
display_name='FatCow FARP',
|
||||||
cost=100,
|
cost=150,
|
||||||
cooldown=60,
|
cooldown=60,
|
||||||
max_per_player=1,
|
max_per_player=1,
|
||||||
max_per_mission=4, --for fatcow, you will want to ensure that you have this many sets of FARP statics
|
max_per_mission=4, --for fatcow, you will want to ensure that you have this many sets of FARP statics
|
||||||
@ -76,7 +77,10 @@ RotorOpsPerks.perks["fatcow"] = {
|
|||||||
action_function=requestFatCowPerk
|
action_function=requestFatCowPerk
|
||||||
}
|
}
|
||||||
|
|
||||||
|
---- End of FATCOW PERK ----
|
||||||
|
|
||||||
---- INSTANT STRIKE PERK ----
|
---- INSTANT STRIKE PERK ----
|
||||||
|
-- Here's a very simple example of how to create a Perk!
|
||||||
|
|
||||||
function requestStrikePerk(args)
|
function requestStrikePerk(args)
|
||||||
--explosion at dest_point after 10 seconds
|
--explosion at dest_point after 10 seconds
|
||||||
@ -88,7 +92,7 @@ end
|
|||||||
RotorOpsPerks.perks["strike"] = {
|
RotorOpsPerks.perks["strike"] = {
|
||||||
perk_name='strike',
|
perk_name='strike',
|
||||||
display_name='Instant Strike',
|
display_name='Instant Strike',
|
||||||
cost=100,
|
cost=200,
|
||||||
cooldown=60,
|
cooldown=60,
|
||||||
max_per_player=2,
|
max_per_player=2,
|
||||||
max_per_mission=3,
|
max_per_mission=3,
|
||||||
@ -101,6 +105,108 @@ RotorOpsPerks.perks["strike"] = {
|
|||||||
action_function=requestStrikePerk
|
action_function=requestStrikePerk
|
||||||
}
|
}
|
||||||
|
|
||||||
|
---- End of INSTANT STRIKE PERK ----
|
||||||
|
|
||||||
|
|
||||||
|
---- JTAC DRONE PERK ----
|
||||||
|
|
||||||
|
function RotorOpsPerks.spawnJtacDrone(dest_point, country, laser_code)
|
||||||
|
|
||||||
|
local drone = {
|
||||||
|
x = dest_point.x+1500,
|
||||||
|
y = dest_point.z,
|
||||||
|
type = "RQ-1A Predator",
|
||||||
|
speed = 70,
|
||||||
|
heading = 0,
|
||||||
|
altitude = 5000,
|
||||||
|
country = player_country,
|
||||||
|
skill = "High",
|
||||||
|
category = "plane",
|
||||||
|
livery_id = "USAF Standard",
|
||||||
|
payload = {
|
||||||
|
["pylons"] = {},
|
||||||
|
["fuel"] = 200,
|
||||||
|
["flare"] = 0,
|
||||||
|
["chaff"] = 0,
|
||||||
|
["gun"] = 0,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
local drone_route = {
|
||||||
|
[1] = {
|
||||||
|
["alt"] = 5000,
|
||||||
|
["x"] = dest_point.x,
|
||||||
|
["action"] = "Turning Point",
|
||||||
|
["alt_type"] = "BARO",
|
||||||
|
["speed"] = 70,
|
||||||
|
["form"] = "Turning Point",
|
||||||
|
["type"] = "Turning Point",
|
||||||
|
["y"] = dest_point.z+1000,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
local drone_group = {
|
||||||
|
units = {drone,},
|
||||||
|
country = country,
|
||||||
|
category = "airplane",
|
||||||
|
route = drone_route,
|
||||||
|
}
|
||||||
|
|
||||||
|
local orbit = {
|
||||||
|
id = 'Orbit',
|
||||||
|
params = {
|
||||||
|
pattern = 'Circle',
|
||||||
|
point = {x = dest_point.x, y = dest_point.z},
|
||||||
|
speed = 70,
|
||||||
|
altitude = 5000,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
local new_group = mist.dynAdd(drone_group)
|
||||||
|
if new_group == nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
trigger.action.outText('JTAC DRONE IS ON STATION!', 10)
|
||||||
|
|
||||||
|
--set a timer for one minute
|
||||||
|
timer.scheduleFunction(function()
|
||||||
|
Group.getByName(new_group.name):getController():setTask(orbit)
|
||||||
|
Group.getByName(new_group.name):getController():setOption(AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.NO_REACTION)
|
||||||
|
ctld.JTACAutoLase(new_group.name, table.remove(ctld.jtacGeneratedLaserCodes, 1), true, "vehicle")
|
||||||
|
end, nil, timer.getTime() + 60)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function requestJtacDrone(args)
|
||||||
|
|
||||||
|
local player_country = Unit.getByName(args.player_unit_name):getCountry()
|
||||||
|
|
||||||
|
--set a timer for one minute
|
||||||
|
timer.scheduleFunction(function()
|
||||||
|
RotorOpsPerks.spawnJtacDrone(args.target_point, player_country, table.remove(ctld.jtacGeneratedLaserCodes, 1))
|
||||||
|
end, nil, timer.getTime() + 60)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
RotorOpsPerks.perks["drone"] = {
|
||||||
|
perk_name='drone',
|
||||||
|
display_name='JTAC Drone',
|
||||||
|
cost=50,
|
||||||
|
cooldown=60,
|
||||||
|
max_per_player=3,
|
||||||
|
max_per_mission=6,
|
||||||
|
at_mark=true,
|
||||||
|
at_position=false,
|
||||||
|
enabled=true,
|
||||||
|
sides={0,1,2},
|
||||||
|
last_used=0,
|
||||||
|
used=0,
|
||||||
|
action_function=requestJtacDrone
|
||||||
|
}
|
||||||
|
|
||||||
|
---- End of JTAC DRONE PERK ----
|
||||||
|
|
||||||
|
|
||||||
function RotorOpsPerks.getPlayerGroupSum(player_group_name, player_attribute, table_name)
|
function RotorOpsPerks.getPlayerGroupSum(player_group_name, player_attribute, table_name)
|
||||||
@ -293,10 +399,6 @@ function RotorOpsPerks.addRadioMenuForGroup(groupName)
|
|||||||
local groupId = Group.getByName(groupName):getID()
|
local groupId = Group.getByName(groupName):getID()
|
||||||
local group_side = Group.getByName(groupName):getCoalition()
|
local group_side = Group.getByName(groupName):getCoalition()
|
||||||
|
|
||||||
-- local function addPerkCommand(groupId, groupName, perk, path, vars)
|
|
||||||
-- missionCommands.addCommandForGroup(groupId, 'Request '.. perk.display_name .. ' at ' .. vars.target, path , RotorOpsPerks.requestPerk, {player_group_name=groupName, perk_name=perk_name, target=vars.target})
|
|
||||||
-- end
|
|
||||||
|
|
||||||
local menu_root = missionCommands.addSubMenuForGroup(groupId, 'ROTOROPS PERKS')
|
local menu_root = missionCommands.addSubMenuForGroup(groupId, 'ROTOROPS PERKS')
|
||||||
missionCommands.addCommandForGroup(groupId, 'Check points balance', menu_root, RotorOpsPerks.checkPoints, groupName)
|
missionCommands.addCommandForGroup(groupId, 'Check points balance', menu_root, RotorOpsPerks.checkPoints, groupName)
|
||||||
|
|
||||||
@ -465,6 +567,7 @@ function RotorOpsPerks.requestPerk(args)
|
|||||||
--env.info(mist.utils.tableShow(args, 'args'))
|
--env.info(mist.utils.tableShow(args, 'args'))
|
||||||
local player_group = Group.getByName(args.player_group_name)
|
local player_group = Group.getByName(args.player_group_name)
|
||||||
local player_unit = player_group:getUnits()[1]
|
local player_unit = player_group:getUnits()[1]
|
||||||
|
local player_unit_name = player_unit:getName()
|
||||||
local player_pos = player_unit:getPoint()
|
local player_pos = player_unit:getPoint()
|
||||||
local players = RotorOpsPerks.playersByGroupName(args.player_group_name)
|
local players = RotorOpsPerks.playersByGroupName(args.player_group_name)
|
||||||
if not players then
|
if not players then
|
||||||
@ -485,17 +588,16 @@ function RotorOpsPerks.requestPerk(args)
|
|||||||
|
|
||||||
for _, mark in pairs(mist.DBs.markList) do
|
for _, mark in pairs(mist.DBs.markList) do
|
||||||
debugMsg('mark: ' .. mist.utils.tableShow(mark, 'mark'))
|
debugMsg('mark: ' .. mist.utils.tableShow(mark, 'mark'))
|
||||||
--env.info('player group' .. mist.utils.tableShow(player_group, 'player_group'))
|
|
||||||
--env.info('player' .. mist.utils.tableShow(player_unit, 'player_unit'))
|
|
||||||
local perk_name_matches = false
|
local perk_name_matches = false
|
||||||
|
|
||||||
--determine if mark name matches the perk name
|
--determine if mark name matches the perk name
|
||||||
local mark_name = mark.text
|
local mark_name = mark.text
|
||||||
--remove whitespace and new line from mark name
|
--remove new line from mark name
|
||||||
mark_name = mark_name:gsub("%s+", "")
|
mark_name = mark_name:gsub("\n", "")
|
||||||
mark_name = mark_name:gsub("%n+", "")
|
env.info("mark name stripped: " .. mark_name)
|
||||||
if mark_name == args.perk_name then
|
if mark_name == args.perk_name then
|
||||||
perk_name_matches = true
|
perk_name_matches = true
|
||||||
|
env.info("mark name matches perk name")
|
||||||
end
|
end
|
||||||
|
|
||||||
if perk_name_matches then
|
if perk_name_matches then
|
||||||
@ -527,7 +629,9 @@ function RotorOpsPerks.requestPerk(args)
|
|||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
debugMsg(mist.utils.tableShow(mist.DBs.markList, 'markList'))
|
-- env.info(mist.utils.tableShow(mist.DBs.markList, 'markList'))
|
||||||
|
-- env.info('player group' .. mist.utils.tableShow(player_group, 'player_group'))
|
||||||
|
-- env.info('player' .. mist.utils.tableShow(player_unit, 'player_unit'))
|
||||||
if temp_mark then
|
if temp_mark then
|
||||||
target_point = temp_mark.pos
|
target_point = temp_mark.pos
|
||||||
end
|
end
|
||||||
@ -598,6 +702,7 @@ function RotorOpsPerks.requestPerk(args)
|
|||||||
args.target_point = target_point
|
args.target_point = target_point
|
||||||
args.player_group = player_group
|
args.player_group = player_group
|
||||||
args.player_unit = player_unit
|
args.player_unit = player_unit
|
||||||
|
args.player_unit_name = player_unit_name
|
||||||
|
|
||||||
--call perk action
|
--call perk action
|
||||||
perk.action_function(args)
|
perk.action_function(args)
|
||||||
@ -785,6 +890,7 @@ function RotorOpsPerks.registerCtldCallbacks()
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
ctld.addCallback(function(_args)
|
ctld.addCallback(function(_args)
|
||||||
local action = _args.action
|
local action = _args.action
|
||||||
local unit = _args.unit
|
local unit = _args.unit
|
||||||
@ -829,7 +935,7 @@ function RotorOpsPerks.monitorPlayers()
|
|||||||
table.insert(pilots, red_pilot)
|
table.insert(pilots, red_pilot)
|
||||||
end
|
end
|
||||||
|
|
||||||
env.warning('PILOTS: '.. mist.utils.tableShow(pilots))
|
debugMsg('PILOTS: '.. mist.utils.tableShow(pilots))
|
||||||
|
|
||||||
for _, player in pairs(pilots) do
|
for _, player in pairs(pilots) do
|
||||||
|
|
||||||
@ -855,7 +961,7 @@ function RotorOpsPerks.monitorPlayers()
|
|||||||
--GET CREW
|
--GET CREW
|
||||||
|
|
||||||
local players = net.get_player_list() --empty in single player
|
local players = net.get_player_list() --empty in single player
|
||||||
env.warning('GET CREW ALL PLAYERS: '.. mist.utils.tableShow(players))
|
debugMsg('GET CREW ALL PLAYERS: '.. mist.utils.tableShow(players))
|
||||||
|
|
||||||
for _, player in pairs(players) do
|
for _, player in pairs(players) do
|
||||||
local player_info = net.get_player_info(player) --works with multicrew, but we need to find the group name
|
local player_info = net.get_player_info(player) --works with multicrew, but we need to find the group name
|
||||||
@ -885,6 +991,7 @@ function RotorOpsPerks.monitorPlayers()
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
RotorOpsPerks.monitorPlayers()
|
|
||||||
RotorOpsPerks.registerCtldCallbacks()
|
RotorOpsPerks.registerCtldCallbacks()
|
||||||
|
-- start a 5 second timer to monitor players, to allow other scripts to load
|
||||||
|
timer.scheduleFunction(RotorOpsPerks.monitorPlayers, nil, timer.getTime() + 5)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user