mirror of
https://github.com/spencershepard/RotorOps.git
synced 2025-11-10 15:45:30 +00:00
add callbacks
This commit is contained in:
parent
9efecde10b
commit
0de1ea3b31
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
|
|
||||||
RotorOpsPerks = {}
|
RotorOpsPerks = {}
|
||||||
RotorOpsPerks.version = "1.5.6"
|
RotorOpsPerks.version = "1.6.0"
|
||||||
env.warning('ROTOROPS PERKS STARTED: '..RotorOpsPerks.version)
|
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 = {}
|
||||||
@ -23,6 +23,7 @@ RotorOpsPerks.players = {}
|
|||||||
RotorOpsPerks.players_temp = {}
|
RotorOpsPerks.players_temp = {}
|
||||||
RotorOpsPerks.troops = {} --by group name
|
RotorOpsPerks.troops = {} --by group name
|
||||||
RotorOpsPerks.fat_cow_farps = {}
|
RotorOpsPerks.fat_cow_farps = {}
|
||||||
|
RotorOpsPerks.callbacks = {}
|
||||||
|
|
||||||
---- OPTIONS ----
|
---- OPTIONS ----
|
||||||
|
|
||||||
@ -261,7 +262,7 @@ function RotorOpsPerks.spawnJtacDrone(dest_point, country, laser_code)
|
|||||||
Group.getByName(new_group.name):getController():setOption(AI.Option.Air.id.REACTION_ON_THREAT, AI.Option.Air.val.REACTION_ON_THREAT.NO_REACTION)
|
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, laser_code, true, "vehicle")
|
ctld.JTACAutoLase(new_group.name, laser_code, true, "vehicle")
|
||||||
table.insert(ctld.jtacGeneratedLaserCodes, _code)
|
table.insert(ctld.jtacGeneratedLaserCodes, _code)
|
||||||
|
|
||||||
end, nil, timer.getTime() + 60)
|
end, nil, timer.getTime() + 60)
|
||||||
|
|
||||||
end
|
end
|
||||||
@ -450,12 +451,16 @@ function RotorOpsPerks.spendPoints(player_group_name, points, deduct_points)
|
|||||||
local points_to_subtract = points_per_player + remainder
|
local points_to_subtract = points_per_player + remainder
|
||||||
if player.points < points_to_subtract then
|
if player.points < points_to_subtract then
|
||||||
remainder = points_to_subtract - player.points
|
remainder = points_to_subtract - player.points
|
||||||
|
player.points_used = player.points_used + points_to_subtract - remainder
|
||||||
player.points = 0
|
player.points = 0
|
||||||
else
|
else
|
||||||
player.points = player.points - points_to_subtract
|
player.points = player.points - points_to_subtract
|
||||||
|
player.points_used = player.points_used + points_to_subtract
|
||||||
remainder = 0
|
remainder = 0
|
||||||
end
|
end
|
||||||
|
RotorOpsPerks.processCallbacks({action='onPointsSpent', player=player, points_spent=points_to_subtract})
|
||||||
end
|
end
|
||||||
|
RotorOpsPerks.processCallbacks({action='onGroupPointsSpent', player_group_name=player_group_name, points_spent=points})
|
||||||
end
|
end
|
||||||
--there was sufficient points
|
--there was sufficient points
|
||||||
return true
|
return true
|
||||||
@ -467,6 +472,8 @@ function RotorOpsPerks.scorePoints(player_group_name, points, message)
|
|||||||
if players then
|
if players then
|
||||||
for _, player in pairs(players) do
|
for _, player in pairs(players) do
|
||||||
player.points = player.points + points
|
player.points = player.points + points
|
||||||
|
player.points_earned = player.points_earned + points
|
||||||
|
RotorOpsPerks.processCallbacks({action='onPointsScored', player=player, points_scored=points})
|
||||||
end
|
end
|
||||||
if message and not RotorOpsPerks.silent_points then
|
if message and not RotorOpsPerks.silent_points then
|
||||||
local total = RotorOpsPerks.getPlayerGroupSum(player_group_name, "points")
|
local total = RotorOpsPerks.getPlayerGroupSum(player_group_name, "points")
|
||||||
@ -478,6 +485,7 @@ function RotorOpsPerks.scorePoints(player_group_name, points, message)
|
|||||||
trigger.action.outTextForGroup(Group.getByName(player_group_name):getID(), message, 10)
|
trigger.action.outTextForGroup(Group.getByName(player_group_name):getID(), message, 10)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
RotorOpsPerks.processCallbacks({action='onGroupPointsScored', player_group_name=player_group_name, points_scored=points})
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -494,6 +502,14 @@ function RotorOpsPerks.getPointsBalance(player_group_name)
|
|||||||
return total_points
|
return total_points
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function RotorOpsPerks.getPlayerMissionPointsBalance(id)
|
||||||
|
local player = RotorOpsPerks.players[id]
|
||||||
|
if not player then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
return player.points_earned - player.points_used
|
||||||
|
end
|
||||||
|
|
||||||
function RotorOpsPerks.checkPoints(player_group_name)
|
function RotorOpsPerks.checkPoints(player_group_name)
|
||||||
local groupId = Group.getByName(player_group_name):getID()
|
local groupId = Group.getByName(player_group_name):getID()
|
||||||
local players = RotorOpsPerks.playersByGroupName(player_group_name)
|
local players = RotorOpsPerks.playersByGroupName(player_group_name)
|
||||||
@ -566,6 +582,7 @@ function RotorOpsPerks.updatePlayer(identifier, groupName, name, slot)
|
|||||||
--add a new player
|
--add a new player
|
||||||
if not RotorOpsPerks.players[identifier] then
|
if not RotorOpsPerks.players[identifier] then
|
||||||
RotorOpsPerks.players[identifier] = {
|
RotorOpsPerks.players[identifier] = {
|
||||||
|
identifier=identifier,
|
||||||
name=name,
|
name=name,
|
||||||
slot=slot,
|
slot=slot,
|
||||||
points = RotorOpsPerks.points.player_default,
|
points = RotorOpsPerks.points.player_default,
|
||||||
@ -574,6 +591,8 @@ function RotorOpsPerks.updatePlayer(identifier, groupName, name, slot)
|
|||||||
side = side,
|
side = side,
|
||||||
menu = {},
|
menu = {},
|
||||||
perks_used = {},
|
perks_used = {},
|
||||||
|
points_used = 0,
|
||||||
|
points_earned = 0,
|
||||||
}
|
}
|
||||||
env.warning('ADDED ' .. identifier .. ' TO PLAYERS TABLE')
|
env.warning('ADDED ' .. identifier .. ' TO PLAYERS TABLE')
|
||||||
log(mist.utils.tableShow(RotorOpsPerks.players[identifier]))
|
log(mist.utils.tableShow(RotorOpsPerks.players[identifier]))
|
||||||
@ -582,6 +601,7 @@ function RotorOpsPerks.updatePlayer(identifier, groupName, name, slot)
|
|||||||
if RotorOpsPerks.player_update_messages then
|
if RotorOpsPerks.player_update_messages then
|
||||||
trigger.action.outText('PERKS: Added ' .. name .. ' to '.. groupName, 10)
|
trigger.action.outText('PERKS: Added ' .. name .. ' to '.. groupName, 10)
|
||||||
end
|
end
|
||||||
|
RotorOpsPerks.processCallbacks({action='onPlayerAdded', player=RotorOpsPerks.players[identifier], perk=nil})
|
||||||
|
|
||||||
--update an existing player
|
--update an existing player
|
||||||
elseif RotorOpsPerks.players[identifier].groupId ~= groupId then
|
elseif RotorOpsPerks.players[identifier].groupId ~= groupId then
|
||||||
@ -603,6 +623,8 @@ function RotorOpsPerks.updatePlayer(identifier, groupName, name, slot)
|
|||||||
-- missionCommands.removeItemForGroup(groupId, RotorOpsPerks.players[identifier].menu.root)
|
-- missionCommands.removeItemForGroup(groupId, RotorOpsPerks.players[identifier].menu.root)
|
||||||
missionCommands.removeItemForGroup(groupId, {[1] = 'ROTOROPS PERKS'})
|
missionCommands.removeItemForGroup(groupId, {[1] = 'ROTOROPS PERKS'})
|
||||||
RotorOpsPerks.addRadioMenuForGroup(groupName)
|
RotorOpsPerks.addRadioMenuForGroup(groupName)
|
||||||
|
|
||||||
|
RotorOpsPerks.processCallbacks({action='onPlayerUpdated', player=RotorOpsPerks.players[identifier], perk=nil})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1029,6 +1051,7 @@ function RotorOpsPerks.requestPerk(args)
|
|||||||
--call perk action and deduct points if successful
|
--call perk action and deduct points if successful
|
||||||
if perk.action_function(args) then
|
if perk.action_function(args) then
|
||||||
RotorOpsPerks.spendPoints(args.player_group_name, perk.cost, true)
|
RotorOpsPerks.spendPoints(args.player_group_name, perk.cost, true)
|
||||||
|
RotorOpsPerks.processCallbacks({action='onPerkUsed', perk=perk, request=args })
|
||||||
end
|
end
|
||||||
|
|
||||||
--update last_used
|
--update last_used
|
||||||
@ -1290,10 +1313,10 @@ function RotorOpsPerks.monitorPlayers()
|
|||||||
|
|
||||||
--GET CREW
|
--GET CREW
|
||||||
|
|
||||||
local players = net.get_player_list() --empty in single player
|
local server_players = net.get_player_list() --empty in single player
|
||||||
debugMsg('GET CREW ALL PLAYERS: '.. mist.utils.tableShow(players))
|
debugMsg('GET CREW ALL PLAYERS: '.. mist.utils.tableShow(server_players))
|
||||||
|
|
||||||
for _, player in pairs(players) do
|
for _, player in pairs(server_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
|
||||||
debugMsg('GET CREW player info:')
|
debugMsg('GET CREW player info:')
|
||||||
debugMsg(mist.utils.tableShow(player_info))
|
debugMsg(mist.utils.tableShow(player_info))
|
||||||
@ -1318,7 +1341,47 @@ function RotorOpsPerks.monitorPlayers()
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--IF PLAYER HAS DISCONNECTED FROM SERVER
|
||||||
|
if #server_players > 0 then
|
||||||
|
for identifier, player in pairs(RotorOpsPerks.players) do
|
||||||
|
--if the player is not in server_players, then they have disconnected
|
||||||
|
local player_still_connected = false
|
||||||
|
for _, server_player in pairs(server_players) do
|
||||||
|
if identifier == net.get_player_info(server_player).ucid then
|
||||||
|
player_still_connected = true
|
||||||
|
debugMsg(player.name .. ' is still connected')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not player_still_connected then
|
||||||
|
log(player.name .. ' has disconnected')
|
||||||
|
RotorOpsPerks.processCallbacks({action='onPlayerDisconnected', player=player})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function RotorOpsPerks.processCallbacks(args)
|
||||||
|
log(mist.utils.tableShow(RotorOpsPerks.callbacks, 'RotorOpsPerks.callbacks'))
|
||||||
|
log('processCallbacks called with ' .. args.action)
|
||||||
|
log(mist.utils.tableShow(args, 'args'))
|
||||||
|
for _, callback in pairs(RotorOpsPerks.callbacks) do
|
||||||
|
|
||||||
|
local success, response = pcall(function()
|
||||||
|
callback(args)
|
||||||
|
end)
|
||||||
|
|
||||||
|
if (not success) then
|
||||||
|
log(string.format("Callback Error: %s", response))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function RotorOpsPerks.addCallback(callback)
|
||||||
|
table.insert(RotorOpsPerks.callbacks, callback)
|
||||||
end
|
end
|
||||||
|
|
||||||
if mist.grimm_version then
|
if mist.grimm_version then
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user