Снова очередная магия :
Из названия топика думаю понятно, в чем проблема.
В общем, на карте присутствует 8 юнитов
Каждый юнит принадлежит своей команде, команд всего 8.
Когда игроки появляются на карте, лишние юниты удаляются. Т.е. удаляются юниты, в командах которых нет игроков.
Когда игра стартует, юниты окончательно исчезают. Хотя им просто хозяин присваивается.
P.S. примечательно то, что это происходит не всегда. Т.е. иногда всё нормально, все юниты остаются видимыми, а иногда исчезают. Причём, перед тем как исчезнуть, они выглядят как статические модели без анимации и полоски здоровья, как видно на скринах выше.
P.S.S. юнит просто исчезает, попытаться выделить его можно.
P.S.S.S. Своего юнита я вижу в любом случае, пропадает вражеский.
Из названия топика думаю понятно, в чем проблема.
В общем, на карте присутствует 8 юнитов
Код:
"npc_dota_ve_keeper"
{
// General
//----------------------------------------------------------------
"BaseClass" "npc_dota_creature"
"Model" "models/heroes/omniknight/omniknight.vmdl"
"ModelScale" "1.6"
"SoundSet" "Hero_Omniknight"
"GameSoundsFile" "soundevents/game_sounds_heroes/game_sounds_omniknight.vsndevts"
"Level" "1"
"HealthBarOffset" "450"
"Ability1" "medusa_split_shot"
// Armor
//----------------------------------------------------------------
"MagicalResistance" "25"
"ArmorPhysical" "15"
// Attack
//----------------------------------------------------------------
"AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK"
"AttackDamageType" "DAMAGE_TYPE_ArmorPhysical"
"AttackDamageMin" "50"
"AttackDamageMax" "115"
"AttackRate" "0.8"
"AttackAnimationPoint" "0.5"
"AttackAcquisitionRange" "850"
"AttackRange" "850"
"ProjectileModel" "particles/units/heroes/hero_shadowshaman/shadowshaman_ether_shock.vpcf"
"ProjectileSpeed" "2500"
"IsAncient" "1"
"IsNeutralUnitType" "0"
// Bounty
//----------------------------------------------------------------
"BountyGoldMin" "1000"
"BountyGoldMax" "1000"
"CanBeDominated" "0"
"ConsideredHero" "1"
// Bounds
//----------------------------------------------------------------
"BoundsHullName" "DOTA_HULL_SIZE_HERO"
"CollisionSize" "200"
"RingRadius" "50"
// Movement
//----------------------------------------------------------------
"MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE"
"MovementSpeed" "0"
"MovementTurnRate" "1"
// Status
//----------------------------------------------------------------
"StatusHealth" "6000"
"StatusHealthRegen" "1.0"
"StatusMana" "1000"
"StatusManaRegen" "1"
// Vision
//----------------------------------------------------------------
"VisionDaytimeRange" "1400"
"VisionNighttimeRange" "800"
// Team
//----------------------------------------------------------------
"TeamName" "DOTA_TEAM_CUSTOM_8"
"CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_HERO"
"CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_HERO"
"UnitRelationShipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT"
// Creature Data
//----------------------------------------------------------------
"Creature"
{
"DisableClumpingBehavior" "1"
"DefaultState" "Invade"
"States"
{
"Invade"
{
"Name" "Invade"
"Aggression" "100.0"
"Avoidance" "0.0"
"Support" "0.0"
}
}
"AttachWearables"
{
"Wearable1" {"ItemDef" "45" }
"Wearable2" {"ItemDef" "8170" }
"Wearable3" {"ItemDef" "8171" }
"Wearable4" {"ItemDef" "8172" }
"Wearable5" {"ItemDef" "8173" }
"Wearable6" {"ItemDef" "8174" }
}
}
}
Когда игроки появляются на карте, лишние юниты удаляются. Т.е. удаляются юниты, в командах которых нет игроков.
Код:
function GameMode:OnAllPlayersLoaded()
for team = 2, DOTA_TEAM_COUNT do
if team ~= DOTA_TEAM_NEUTRALS and team ~= DOTA_TEAM_NOTEAM and team < 12 then
local count = PlayerResource:GetPlayerCountForTeam(team)
if count == 0 then
local unitlist = FindUnitsInRadius(team, Vector(0, 0, 0), nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false)
-- Make the found units move to (0, 0, 0)
for _,unit in pairs(unitlist) do
unit:RemoveSelf()
end
end
end
end
end
Код:
function GameMode:OnGameInProgress()
for playerID = 0, DOTA_MAX_TEAM_PLAYERS-1 do
if PlayerResource:IsValidPlayerID(playerID) then
local team = PlayerResource:GetTeam(playerID)
keepers = FindUnitsInRadius(team, Vector(0, 0, 0), nil, FIND_UNITS_EVERYWHERE, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false)
for _,unit in pairs(keepers) do
unit:SetControllableByPlayer(playerID, true)
unit:SetOwner(PlayerResource:GetPlayer(playerID))
end
end
end
end
P.S. примечательно то, что это происходит не всегда. Т.е. иногда всё нормально, все юниты остаются видимыми, а иногда исчезают. Причём, перед тем как исчезнуть, они выглядят как статические модели без анимации и полоски здоровья, как видно на скринах выше.
P.S.S. юнит просто исчезает, попытаться выделить его можно.
P.S.S.S. Своего юнита я вижу в любом случае, пропадает вражеский.
Последнее редактирование модератором: