CustomGames.ru - Dota 2 пользовательские игры

Исчезает юнит после старта игры

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Primo

  • 43
  • Мощь: 0
Снова очередная магия ::)
Из названия топика думаю понятно, в чем проблема.

В общем, на карте присутствует 8 юнитов
скрин
[свернуть]
datadriven
Код
	"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" }
}
}
}
[свернуть]
Каждый юнит принадлежит своей команде, команд всего 8.
Когда игроки появляются на карте, лишние юниты удаляются. Т.е. удаляются юниты, в командах которых нет игроков.
lua
Код
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
[свернуть]

Когда игра стартует, юниты окончательно исчезают. Хотя им просто хозяин присваивается.
lua
Код
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. Своего юнита я вижу в любом случае, пропадает вражеский.
« Последнее редактирование: 10-07-2017, 06:52:42 от Primo »

Оффлайн gameizeazy

  • 114
  • Мощь: 1
Re: Исчезает юнит после старта игры
« Ответ #1 : 10-07-2017, 08:54:05 »
Попробуй через createunitbyname сделать Xd

Оффлайн Илья

  • Супермодератор
  • 2080
  • Мощь: 20
Re: Исчезает юнит после старта игры
« Ответ #2 : 10-07-2017, 10:46:25 »
Через консоль то проверял, в чем дело (через print отработку)? Может ты как-то не верно определяешь игроков.

Оффлайн Primo

  • 43
  • Мощь: 0
Re: Исчезает юнит после старта игры
« Ответ #3 : 10-07-2017, 11:06:57 »
Илья, проверял, глухо. Не думаю, что игрок может определяться неверно.
Когда игрок появляется на карте (GameMode:OnAllPlayersLoaded), удаляются все лишние юниты, т.е. по логике в OnGameInProgress, когда в командах ищем этого юнита, нам должно вернуть nil, если юнита в команде возможного игрока нет.
Конечно, тут можно добавить проверку на этот самый nil, но я не думаю, что это сыграет какую-то роль, ведь проблема появляется еще с GameMode:OnAllPlayersLoaded (а может и раньше), когда на карте видно статическую модель без анимации и хпбара.

Всё мысль возникает, что это из-за npc_dota_base. Как вариант, можно попробовать через createunitbyname сделать, вдруг поможет, как предложил gameizeazy, но хотелось бы услышать еще варианты решения проблемы.
« Последнее редактирование: 10-07-2017, 11:12:03 от Primo »

Оффлайн I_GRIN_I

  • Продвинутый
  • 579
  • Мощь: 10
  • Научиться бы скриптить...
Re: Исчезает юнит после старта игры
« Ответ #4 : 10-07-2017, 12:16:49 »
Primo, а не легче просто для каждого игрока создавать юнита при заходе в игру?