88 lines
3.4 KiB
Lua
88 lines
3.4 KiB
Lua
local ____lualib = require("lualib_bundle")
|
|
local __TS__Class = ____lualib.__TS__Class
|
|
local Map = ____lualib.Map
|
|
local __TS__New = ____lualib.__TS__New
|
|
local __TS__Iterator = ____lualib.__TS__Iterator
|
|
local ____exports = {}
|
|
--- Менеджер для отслеживания состояний альтернативного каста способностей
|
|
____exports.AbilityAltCastManager = __TS__Class()
|
|
local AbilityAltCastManager = ____exports.AbilityAltCastManager
|
|
AbilityAltCastManager.name = "AbilityAltCastManager"
|
|
AbilityAltCastManager.____file_path = "scripts/vscripts/ability_alt_cast_manager.lua"
|
|
function AbilityAltCastManager.prototype.____constructor(self)
|
|
self.altCastStates = __TS__New(Map)
|
|
if IsServer() and type(CustomGameEventManager) ~= "nil" and CustomGameEventManager ~= nil then
|
|
CustomGameEventManager:RegisterListener(
|
|
"ability_alt_cast_state",
|
|
function(_, event)
|
|
local playerId = event.PlayerID or event.playerId
|
|
local abilityName = event.abilityName
|
|
local isAltCast = event.isAltCast == 1 or event.isAltCast == true
|
|
self:updateAltCastState(playerId, abilityName, isAltCast)
|
|
end
|
|
)
|
|
end
|
|
end
|
|
function AbilityAltCastManager.getInstance(self)
|
|
if not ____exports.AbilityAltCastManager.instance then
|
|
____exports.AbilityAltCastManager.instance = __TS__New(____exports.AbilityAltCastManager)
|
|
end
|
|
return ____exports.AbilityAltCastManager.instance
|
|
end
|
|
function AbilityAltCastManager.prototype.updateAltCastState(self, playerId, abilityName, isAltCast)
|
|
if playerId == nil or playerId == nil or playerId < 0 then
|
|
return
|
|
end
|
|
local playerStates = self.altCastStates:get(playerId)
|
|
if not playerStates then
|
|
playerStates = __TS__New(Map)
|
|
self.altCastStates:set(playerId, playerStates)
|
|
end
|
|
playerStates:set(abilityName, isAltCast)
|
|
self:pushPlayerStatesToNetTable(playerId)
|
|
end
|
|
function AbilityAltCastManager.prototype.getAltCastState(self, playerId, abilityName)
|
|
local playerStates = self.altCastStates:get(playerId)
|
|
if not playerStates then
|
|
return false
|
|
end
|
|
if playerStates:has(abilityName) then
|
|
local state = playerStates:get(abilityName) or false
|
|
return state
|
|
end
|
|
return false
|
|
end
|
|
function AbilityAltCastManager.prototype.clearPlayerStates(self, playerId)
|
|
self.altCastStates:delete(playerId)
|
|
if type(CustomNetTables) ~= "nil" and CustomNetTables ~= nil then
|
|
CustomNetTables:SetTableValue(
|
|
"ability_alt_cast_states",
|
|
tostring(playerId),
|
|
{}
|
|
)
|
|
end
|
|
end
|
|
function AbilityAltCastManager.prototype.syncPlayerStatesToClient(self, playerId)
|
|
self:pushPlayerStatesToNetTable(playerId)
|
|
end
|
|
function AbilityAltCastManager.prototype.pushPlayerStatesToNetTable(self, playerId)
|
|
if type(CustomNetTables) == "nil" or CustomNetTables == nil then
|
|
return
|
|
end
|
|
local playerStates = self.altCastStates:get(playerId)
|
|
local payload = {}
|
|
if playerStates then
|
|
for ____, ____value in __TS__Iterator(playerStates:entries()) do
|
|
local abilityName = ____value[1]
|
|
local enabled = ____value[2]
|
|
payload[abilityName] = enabled and 1 or 0
|
|
end
|
|
end
|
|
CustomNetTables:SetTableValue(
|
|
"ability_alt_cast_states",
|
|
tostring(playerId),
|
|
payload
|
|
)
|
|
end
|
|
return ____exports
|