mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Updates
This commit is contained in:
parent
e486c80350
commit
971f5e9ca4
@ -12,7 +12,7 @@ Include.File( "Message" )
|
|||||||
|
|
||||||
--- The CLIENT class
|
--- The CLIENT class
|
||||||
-- @type CLIENT
|
-- @type CLIENT
|
||||||
-- @extends Unit#UNIT
|
-- @extends Base#BASE
|
||||||
CLIENT = {
|
CLIENT = {
|
||||||
ONBOARDSIDE = {
|
ONBOARDSIDE = {
|
||||||
NONE = 0,
|
NONE = 0,
|
||||||
@ -48,7 +48,7 @@ CLIENT = {
|
|||||||
-- Mission:AddClient( CLIENT:New( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() )
|
-- Mission:AddClient( CLIENT:New( 'RU MI-8MTV2*HOT-Deploy Troops 2' ):Transport() )
|
||||||
-- Mission:AddClient( CLIENT:New( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() )
|
-- Mission:AddClient( CLIENT:New( 'RU MI-8MTV2*RAMP-Deploy Troops 4' ):Transport() )
|
||||||
function CLIENT:New( ClientName, ClientBriefing )
|
function CLIENT:New( ClientName, ClientBriefing )
|
||||||
local self = BASE:Inherit( self, UNIT:New( Unit.getByName( ClientName ) ) )
|
local self = BASE:Inherit( self, BASE:New() )
|
||||||
self:F( ClientName, ClientBriefing )
|
self:F( ClientName, ClientBriefing )
|
||||||
|
|
||||||
self.ClientName = ClientName
|
self.ClientName = ClientName
|
||||||
@ -319,6 +319,44 @@ function CLIENT:GetPointVec2()
|
|||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function CLIENT:GetPositionVec3()
|
||||||
|
self:F( self.ClientName )
|
||||||
|
|
||||||
|
local DCSUnit = Unit.getByName( self.ClientName )
|
||||||
|
local UnitPos = DCSUnit:getPosition().p
|
||||||
|
|
||||||
|
self:T( UnitPos )
|
||||||
|
return UnitPos
|
||||||
|
end
|
||||||
|
|
||||||
|
function CLIENT:GetID()
|
||||||
|
self:F( self.ClientName )
|
||||||
|
|
||||||
|
local DCSUnit = Unit.getByName( self.ClientName )
|
||||||
|
local UnitID = DCSUnit:getID()
|
||||||
|
|
||||||
|
self:T( UnitID )
|
||||||
|
return UnitID
|
||||||
|
end
|
||||||
|
|
||||||
|
function CLIENT:GetName()
|
||||||
|
self:F( self.ClientName )
|
||||||
|
|
||||||
|
self:T( self.ClientName )
|
||||||
|
return self.ClientName
|
||||||
|
end
|
||||||
|
|
||||||
|
function CLIENT:GetTypeName()
|
||||||
|
self:F( self.ClientName )
|
||||||
|
|
||||||
|
local DCSUnit = Unit.getByName( self.ClientName )
|
||||||
|
local TypeName = DCSUnit:getTypeName()
|
||||||
|
|
||||||
|
self:T( TypeName )
|
||||||
|
return TypeName
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- Returns the position of the CLIENT in @{DCSTypes#Vec3} format.
|
--- Returns the position of the CLIENT in @{DCSTypes#Vec3} format.
|
||||||
-- @param #CLIENT self
|
-- @param #CLIENT self
|
||||||
|
|||||||
@ -413,6 +413,7 @@ function DATABASE:_RegisterGroup( GroupTemplate )
|
|||||||
self.Templates.Units[UnitTemplateName].GroupName = GroupTemplateName
|
self.Templates.Units[UnitTemplateName].GroupName = GroupTemplateName
|
||||||
self.Templates.Units[UnitTemplateName].GroupTemplate = GroupTemplate
|
self.Templates.Units[UnitTemplateName].GroupTemplate = GroupTemplate
|
||||||
self.Templates.Units[UnitTemplateName].GroupId = GroupTemplate.groupId
|
self.Templates.Units[UnitTemplateName].GroupId = GroupTemplate.groupId
|
||||||
|
self:E( {"skill",UnitTemplate.skill})
|
||||||
if UnitTemplate.skill and (UnitTemplate.skill == "Client" or UnitTemplate.skill == "Player") then
|
if UnitTemplate.skill and (UnitTemplate.skill == "Client" or UnitTemplate.skill == "Player") then
|
||||||
self.Templates.ClientsByName[UnitTemplateName] = UnitTemplate
|
self.Templates.ClientsByName[UnitTemplateName] = UnitTemplate
|
||||||
self.Templates.ClientsByID[UnitTemplate.unitId] = UnitTemplate
|
self.Templates.ClientsByID[UnitTemplate.unitId] = UnitTemplate
|
||||||
@ -477,11 +478,10 @@ function DATABASE:_RegisterDatabase()
|
|||||||
self.DCSUnitsAlive[DCSUnitName] = DCSUnit
|
self.DCSUnitsAlive[DCSUnitName] = DCSUnit
|
||||||
self.UnitsAlive[DCSUnitName] = self.Units[DCSUnitName]
|
self.UnitsAlive[DCSUnitName] = self.Units[DCSUnitName]
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if self.Templates.ClientsByName[DCSUnitName] then
|
for ClientName, ClientTemplate in pairs( self.Templates.ClientsByName ) do
|
||||||
self.Clients[DCSUnitName] = CLIENT:New( DCSUnitName )
|
self.Clients[ClientName] = CLIENT:New( ClientName )
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -504,11 +504,12 @@ function DATABASE:_EventOnBirth( Event )
|
|||||||
self.DCSUnitsAlive[Event.IniDCSUnitName] = Event.IniDCSUnit
|
self.DCSUnitsAlive[Event.IniDCSUnitName] = Event.IniDCSUnit
|
||||||
self.Units[Event.IniDCSUnitName] = UNIT:New( Event.IniDCSUnit )
|
self.Units[Event.IniDCSUnitName] = UNIT:New( Event.IniDCSUnit )
|
||||||
|
|
||||||
if not self.DCSGroups[Event.IniDCSGroupName] then
|
--if not self.DCSGroups[Event.IniDCSGroupName] then
|
||||||
self.DCSGroups[Event.IniDCSGroupName] = Event.IniDCSGroupName
|
-- self.DCSGroups[Event.IniDCSGroupName] = Event.IniDCSGroupName
|
||||||
self.DCSGroupsAlive[Event.IniDCSGroupName] = Event.IniDCSGroupName
|
-- self.DCSGroupsAlive[Event.IniDCSGroupName] = Event.IniDCSGroupName
|
||||||
self.Groups[Event.IniDCSGroupName] = GROUP:New( Event.IniDCSGroup )
|
-- self.Groups[Event.IniDCSGroupName] = GROUP:New( Event.IniDCSGroup )
|
||||||
end
|
--end
|
||||||
|
self:_EventOnPlayerEnterUnit( Event )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -36,34 +36,39 @@ function MISSILETRAINER:New( Distance )
|
|||||||
self.DBUnits = self.DB.Units
|
self.DBUnits = self.DB.Units
|
||||||
|
|
||||||
for ClientID, Client in pairs( self.DBClients ) do
|
for ClientID, Client in pairs( self.DBClients ) do
|
||||||
Client:Message( "Welcome to the Missile Trainer", 10, "ID", "TEST" )
|
|
||||||
|
|
||||||
Client.MainMenu = MENU_CLIENT:New( Client, "Missile Trainer", nil )
|
local function _Alive( Client )
|
||||||
|
|
||||||
Client.MenuMessages = MENU_CLIENT:New( Client, "Messages", Client.MainMenu )
|
Client:Message( "Welcome to the Missile Trainer", 10, "ID", "TEST" )
|
||||||
Client.MenuOn = MENU_CLIENT_COMMAND:New( Client, "Messages On", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = true } )
|
|
||||||
Client.MenuOff = MENU_CLIENT_COMMAND:New( Client, "Messages Off", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = false } )
|
|
||||||
|
|
||||||
Client.MenuTracking = MENU_CLIENT:New( Client, "Tracking", Client.MainMenu )
|
Client.MainMenu = MENU_CLIENT:New( Client, "Missile Trainer", nil )
|
||||||
Client.MenuTrackingToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = true } )
|
|
||||||
Client.MenuTrackingToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = false } )
|
|
||||||
Client.MenuTrackOn = MENU_CLIENT_COMMAND:New( Client, "Tracking On", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, Tracking = true } )
|
|
||||||
Client.MenuTrackOff = MENU_CLIENT_COMMAND:New( Client, "Tracking Off", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, Tracking = false } )
|
|
||||||
|
|
||||||
Client.MenuAlerts = MENU_CLIENT:New( Client, "Alerts", Client.MainMenu )
|
Client.MenuMessages = MENU_CLIENT:New( Client, "Messages", Client.MainMenu )
|
||||||
Client.MenuAlertsToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = true } )
|
Client.MenuOn = MENU_CLIENT_COMMAND:New( Client, "Messages On", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = true } )
|
||||||
Client.MenuAlertsToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = false } )
|
Client.MenuOff = MENU_CLIENT_COMMAND:New( Client, "Messages Off", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = false } )
|
||||||
Client.MenuHitsOn = MENU_CLIENT_COMMAND:New( Client, "Hits On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHits = true } )
|
|
||||||
Client.MenuHitsOff = MENU_CLIENT_COMMAND:New( Client, "Hits Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHits = false } )
|
|
||||||
Client.MenuLaunchesOn = MENU_CLIENT_COMMAND:New( Client, "Launches On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunches = true } )
|
|
||||||
Client.MenuLaunchesOff = MENU_CLIENT_COMMAND:New( Client, "Launches Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunches = false } )
|
|
||||||
|
|
||||||
Client.MenuDetails = MENU_CLIENT:New( Client, "Details", Client.MainMenu )
|
Client.MenuTracking = MENU_CLIENT:New( Client, "Tracking", Client.MainMenu )
|
||||||
Client.MenuDetailsDistanceOn = MENU_CLIENT_COMMAND:New( Client, "Range On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRange = true } )
|
Client.MenuTrackingToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = true } )
|
||||||
Client.MenuDetailsDistanceOff = MENU_CLIENT_COMMAND:New( Client, "Range Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRange = false } )
|
Client.MenuTrackingToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = false } )
|
||||||
Client.MenuDetailsBearingOn = MENU_CLIENT_COMMAND:New( Client, "Bearing On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearing = true } )
|
Client.MenuTrackOn = MENU_CLIENT_COMMAND:New( Client, "Tracking On", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, Tracking = true } )
|
||||||
Client.MenuDetailsBearingOff = MENU_CLIENT_COMMAND:New( Client, "Bearing Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearing = false } )
|
Client.MenuTrackOff = MENU_CLIENT_COMMAND:New( Client, "Tracking Off", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, Tracking = false } )
|
||||||
|
|
||||||
|
Client.MenuAlerts = MENU_CLIENT:New( Client, "Alerts", Client.MainMenu )
|
||||||
|
Client.MenuAlertsToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = true } )
|
||||||
|
Client.MenuAlertsToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = false } )
|
||||||
|
Client.MenuHitsOn = MENU_CLIENT_COMMAND:New( Client, "Hits On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHits = true } )
|
||||||
|
Client.MenuHitsOff = MENU_CLIENT_COMMAND:New( Client, "Hits Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHits = false } )
|
||||||
|
Client.MenuLaunchesOn = MENU_CLIENT_COMMAND:New( Client, "Launches On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunches = true } )
|
||||||
|
Client.MenuLaunchesOff = MENU_CLIENT_COMMAND:New( Client, "Launches Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunches = false } )
|
||||||
|
|
||||||
|
Client.MenuDetails = MENU_CLIENT:New( Client, "Details", Client.MainMenu )
|
||||||
|
Client.MenuDetailsDistanceOn = MENU_CLIENT_COMMAND:New( Client, "Range On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRange = true } )
|
||||||
|
Client.MenuDetailsDistanceOff = MENU_CLIENT_COMMAND:New( Client, "Range Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRange = false } )
|
||||||
|
Client.MenuDetailsBearingOn = MENU_CLIENT_COMMAND:New( Client, "Bearing On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearing = true } )
|
||||||
|
Client.MenuDetailsBearingOff = MENU_CLIENT_COMMAND:New( Client, "Bearing Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearing = false } )
|
||||||
|
end
|
||||||
|
|
||||||
|
Client:Alive( _Alive )
|
||||||
|
|
||||||
end
|
end
|
||||||
-- self.DB:ForEachClient(
|
-- self.DB:ForEachClient(
|
||||||
@ -145,10 +150,9 @@ function MISSILETRAINER:_EventShot( Event )
|
|||||||
|
|
||||||
local TrainerTargetDCSUnit = TrainerWeapon:getTarget() -- Identify target
|
local TrainerTargetDCSUnit = TrainerWeapon:getTarget() -- Identify target
|
||||||
local TrainerTargetDCSUnitName = Unit.getName( TrainerTargetDCSUnit )
|
local TrainerTargetDCSUnitName = Unit.getName( TrainerTargetDCSUnit )
|
||||||
local TrainerTargetDCSGroup = TrainerTargetDCSUnit:getGroup()
|
|
||||||
local TrainerTargetDCSGroupName = TrainerTargetDCSGroup:getName()
|
|
||||||
local TrainerTargetSkill = _DATABASE.Templates.Units[TrainerTargetDCSUnitName].Template.skill
|
local TrainerTargetSkill = _DATABASE.Templates.Units[TrainerTargetDCSUnitName].Template.skill
|
||||||
|
|
||||||
|
self:T(TrainerTargetDCSUnitName )
|
||||||
|
|
||||||
local Client = self.DBClients[TrainerTargetDCSUnitName]
|
local Client = self.DBClients[TrainerTargetDCSUnitName]
|
||||||
if Client then
|
if Client then
|
||||||
@ -271,46 +275,70 @@ function MISSILETRAINER:_TrackMissiles()
|
|||||||
local TrainerWeapon = MissileData.TrainerWeapon
|
local TrainerWeapon = MissileData.TrainerWeapon
|
||||||
local TrainerTargetUnit = MissileData.TrainerTargetUnit
|
local TrainerTargetUnit = MissileData.TrainerTargetUnit
|
||||||
|
|
||||||
local PositionMissile = TrainerWeapon:getPosition().p
|
if TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then
|
||||||
local PositionTarget = Client:GetPositionVec3()
|
local PositionMissile = TrainerWeapon:getPosition().p
|
||||||
|
local PositionTarget = Client:GetPositionVec3()
|
||||||
|
|
||||||
local Distance = ( ( PositionMissile.x - PositionTarget.x )^2 +
|
local Distance = ( ( PositionMissile.x - PositionTarget.x )^2 +
|
||||||
( PositionMissile.y - PositionTarget.y )^2 +
|
( PositionMissile.y - PositionTarget.y )^2 +
|
||||||
( PositionMissile.z - PositionTarget.z )^2
|
( PositionMissile.z - PositionTarget.z )^2
|
||||||
) ^ 0.5
|
) ^ 0.5
|
||||||
|
|
||||||
if Distance <= self.Distance then
|
if Distance <= self.Distance then
|
||||||
-- Hit alert
|
-- Hit alert
|
||||||
TrainerWeapon:destroy()
|
TrainerWeapon:destroy()
|
||||||
if self.MessagesOnOff and self.AlertsHits then
|
if self.MessagesOnOff and self.AlertsHits then
|
||||||
|
|
||||||
self:T( "Destroyed" )
|
self:T( "killed" )
|
||||||
|
|
||||||
local Message = MESSAGE:New(
|
local Message = MESSAGE:New(
|
||||||
string.format( "%s launched by %s destroyed",
|
string.format( "%s launched by %s killed '%s'",
|
||||||
TrainerWeapon:getTypeName(),
|
TrainerWeapon:getTypeName(),
|
||||||
TrainerSourceUnit:GetTypeName()
|
TrainerSourceUnit:GetTypeName(),
|
||||||
),"Tracking", 2, "ID" )
|
TrainerSourceUnit:GetPlayerName()
|
||||||
|
),"Tracking", 15, "ID" )
|
||||||
|
|
||||||
if self.AlertsToAll then
|
if self.AlertsToAll then
|
||||||
Message:ToAll()
|
Message:ToAll()
|
||||||
else
|
else
|
||||||
Message:ToClient( Client )
|
Message:ToClient( Client )
|
||||||
|
end
|
||||||
|
|
||||||
|
MissileData = nil
|
||||||
|
table.remove( TrackingData.MissileData, MissileDataID )
|
||||||
|
self:T(TrackingData.MissileData)
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
local TrackingTo = string.format( " -> %s launched by %s",
|
||||||
|
TrainerWeapon:getTypeName(),
|
||||||
|
TrainerSourceUnit:GetName()
|
||||||
|
)
|
||||||
|
|
||||||
MissileData = nil
|
if ClientDataID == TrackingDataID then
|
||||||
table.remove( TrackingData.MissileData, MissileDataID )
|
ClientData.MessageToClient = ClientData.MessageToClient .. TrackingTo .. self:AddRange( ClientData.Client, TrainerWeapon ) .. self:AddBearing( ClientData.Client, TrainerWeapon ) .. "\n"
|
||||||
|
else
|
||||||
|
ClientData.MessageToAll = ClientData.MessageToAll .. TrackingTo .. self:AddRange( TrackingData.Client, TrainerWeapon ) .. self:AddBearing( TrackingData.Client, TrainerWeapon ) .. "\n"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
local TrackingTo = string.format( " -> %s launched by %s",
|
if not ( TrainerWeapon and TrainerWeapon:isExist() ) then
|
||||||
TrainerWeapon:getTypeName(),
|
if self.MessagesOnOff and self.AlertsLaunches then
|
||||||
TrainerSourceUnit:GetName()
|
-- Weapon does not exist anymore. Delete from Table
|
||||||
)
|
local Message = MESSAGE:New(
|
||||||
|
string.format( "%s launched by %s is self destructed!",
|
||||||
|
TrainerWeapon:getTypeName(),
|
||||||
|
TrainerSourceUnit:GetTypeName()
|
||||||
|
),"Tracking", 5, "ID" )
|
||||||
|
|
||||||
if ClientDataID == TrackingDataID then
|
if self.AlertsToAll then
|
||||||
ClientData.MessageToClient = ClientData.MessageToClient .. TrackingTo .. self:AddRange( ClientData.Client, TrainerWeapon ) .. self:AddBearing( ClientData.Client, TrainerWeapon ) .. "\n"
|
Message:ToAll()
|
||||||
else
|
else
|
||||||
ClientData.MessageToAll = ClientData.MessageToAll .. TrackingTo .. self:AddRange( TrackingData.Client, TrainerWeapon ) .. self:AddBearing( TrackingData.Client, TrainerWeapon ) .. "\n"
|
Message:ToClient( Client )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
MissileData = nil
|
||||||
|
table.remove( TrackingData.MissileData, MissileDataID )
|
||||||
|
self:T(TrackingData.MissileData)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -56,11 +56,13 @@ UNIT = {
|
|||||||
-- @return Unit#UNIT
|
-- @return Unit#UNIT
|
||||||
function UNIT:New( DCSUnit )
|
function UNIT:New( DCSUnit )
|
||||||
local self = BASE:Inherit( self, BASE:New() )
|
local self = BASE:Inherit( self, BASE:New() )
|
||||||
self:F( DCSUnit:getName() )
|
self:F( DCSUnit )
|
||||||
|
|
||||||
self.DCSUnit = DCSUnit
|
self.DCSUnit = DCSUnit
|
||||||
self.UnitName = DCSUnit:getName()
|
if DCSUnit then
|
||||||
self.UnitID = DCSUnit:getID()
|
self.UnitName = DCSUnit:getName()
|
||||||
|
self.UnitID = DCSUnit:getID()
|
||||||
|
end
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@ -91,6 +93,11 @@ function UNIT:GetName()
|
|||||||
return self.UnitName
|
return self.UnitName
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function UNIT:GetPlayerName()
|
||||||
|
self:F( self.UnitName )
|
||||||
|
|
||||||
|
return self.DCSUnit:getPlayerName()
|
||||||
|
end
|
||||||
function UNIT:GetTypeName()
|
function UNIT:GetTypeName()
|
||||||
self:F( self.UnitName )
|
self:F( self.UnitName )
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user