Простые вопросы #3

SniperX

Друзья CG
26 Фев 2018
539
100
Проект
Dota 2x4
тогда небольшое уточнение, какая функция меняет команду юнита ?.. Логику я понимаю: получить команду через get --> поменять коману через set, но функцию не нашёл (скорее всего невнимательно смотрел, но возможно просто забил. когда наткнулся на тему форума, где реализация была сделана через панараму, а с ней я совсем плохо знаком)
 
  • Нравится
Реакции: Greyd1s

Greyd1s

Пользователь
19 Авг 2019
22
1
Ищу пример леснога айтема, который может быть помещён только в новый слот... Может кто сталкивался с решением данной задачи??
 

AceFridge

Активный
8 Мар 2021
85
15
Реализовывал ли кто-либо уже процедурную генерацию карты? при спавне карты с помощью DOTA_SpawnMapAtPosition() периодически вылетает игра, причем, достаточно непредсказуемо. Есть какие-либо нюансы? Спавню карты через определенные промежутки времени, позднее заканчиваю спавн через ManuallyTriggerSpawnGroupCompletion() чтобы снизить нагрузку. Может не вылетать целый час тестов, а затем вылетать раз за разом, причем при спавне разных карт. При тестах порой удается спавнить по 10 штук в секунду, а иногда и при спавне раз в 10 секунд происходит вылет.

И сопутствующий вопрос: можно ли заспавнить не временное дерево, а постоянное через скрипт?
 
Последнее редактирование:

Дикий Пёс

Друзья CG
28 Июн 2017
411
96
Проект
Petri Reborn
Реализовывал ли кто-либо уже процедурную генерацию карты? при спавне карты с помощью DOTA_SpawnMapAtPosition() периодически вылетает игра, причем, достаточно непредсказуемо. Есть какие-либо нюансы? Спавню карты через определенные промежутки времени, позднее заканчиваю спавн через ManuallyTriggerSpawnGroupCompletion() чтобы снизить нагрузку. Может не вылетать целый час тестов, а затем вылетать раз за разом, причем при спавне разных карт. При тестах порой удается спавнить по 10 штук в секунду, а иногда и при спавне раз в 10 секунд происходит вылет.

И сопутствующий вопрос: можно ли заспавнить не временное дерево, а постоянное через скрипт?
главная проблема спавна карт, что при деспавне колизия остаётся, что ограничивает генерацию карты до одного раза
временное дерево может стать постоянным если дать ему 99999 секунд
насчёт крашей не вкурсе, лично у меня не было
 

Zachary Greenburg

Пользователь
18 Июл 2020
41
14
Реализовывал ли кто-либо уже процедурную генерацию карты? при спавне карты с помощью DOTA_SpawnMapAtPosition() периодически вылетает игра, причем, достаточно непредсказуемо. Есть какие-либо нюансы? Спавню карты через определенные промежутки времени, позднее заканчиваю спавн через ManuallyTriggerSpawnGroupCompletion() чтобы снизить нагрузку. Может не вылетать целый час тестов, а затем вылетать раз за разом, причем при спавне разных карт. При тестах порой удается спавнить по 10 штук в секунду, а иногда и при спавне раз в 10 секунд происходит вылет.
Чувак, забей, это пока что мёртвая тема какая-то.
Спавни карты так, чтобы их сетки навигации не пересекались, даже если ранее сгенерированная на этой площади была удалена. Тогда вылетов не должно быть.
Примечание: самое странное, что для относительно маленьких карт вылетов нет.
Другая проблема, что тебе надо делать это до присоединения игроков на сервер.

Но даже если они не будут пересекаться и ты карты создашь заранее, то клиенты новоприбывших на сервер игроков (наблюдателей, например) не будут их учитывать (из-за чего поломается туман войны, невозможно будет срубить деревья и не будет коллизий с ними и т. д.), либо же у них будет крашиться Дота в конце игры.

Возможно надо как-то по-особенному оформлять саму карту, чтобы такого не было. Я пробовал - не получилось.
 

AceFridge

Активный
8 Мар 2021
85
15
Чувак, забей, это пока что мёртвая тема какая-то.
Спавни карты так, чтобы их сетки навигации не пересекались, даже если ранее сгенерированная на этой площади была удалена. Тогда вылетов не должно быть.
Примечание: самое странное, что для относительно маленьких карт вылетов нет.
Другая проблема, что тебе надо делать это до присоединения игроков на сервер.

Но даже если они не будут пересекаться и ты карты создашь заранее, то клиенты новоприбывших на сервер игроков (наблюдателей, например) не будут их учитывать (из-за чего поломается туман войны, невозможно будет срубить деревья и не будет коллизий с ними и т. д.), либо же у них будет крашиться Дота в конце игры.

Возможно надо как-то по-особенному оформлять саму карту, чтобы такого не было. Я пробовал - не получилось.
Попробую еще поэкспериментировать на эту тему.

временное дерево может стать постоянным если дать ему 99999 секунд
Тогда как отловить скриптом какое дерево передо мной: временное или постоянное? Проблема в том что к временному я не могу применить метод IsStanding()
 

AceFridge

Активный
8 Мар 2021
85
15
Разобрался. tree:GetClassname()
Получаем: ent_dota_tree или dota_temp_tree


А как воспроизвести анимацию смерти у временного дерева?
Сделал через партиклы типа этого: "particles/world_destruction_fx/tree_pine_01_destruction.vpcf"
 
Последнее редактирование:

AceFridge

Активный
8 Мар 2021
85
15
Как высчитать вектор направления от точки А к точке Б?
 

AceFridge

Активный
8 Мар 2021
85
15
1. Есть ли возможность получить остаточную длительность луа модификатора или только считать thinker'ом?
2. Как отследить момент, когда игрок начинает направлять способность, но еще не использует ее (момент появления курсора с указанием точки\юнита\области. до клика)?
3. Есть ли возможность отключить символы добивания своих\самоубийства (восклицательный знак)
 
Последнее редактирование:
  • Нравится
Реакции: Sannin

SniperX

Друзья CG
26 Фев 2018
539
100
Проект
Dota 2x4
1. Есть ли возможность получить остаточную длительность луа модификатора или только считать thinker'ом?
2. Как отследить момент, когда игрок начинает направлять способность, но еще не использует ее (момент появления курсора с указанием точки\юнита\области. до клика)?
3. Есть ли возможность отключить символы добивания своих\самоубийства (восклицательный знак)
1) CDOTA_Buff:GetElapsedTime(): float
 
  • Нравится
Реакции: Sannin и AceFridge

ZLOY

Администратор
Команда форума
27 Июн 2016
953
182
2. Как отследить момент, когда игрок начинает направлять способность, но еще не использует ее (момент появления курсора с указанием точки\юнита\области. до клика)?
Отследить это можно только на стороне клиента в панораме
 
  • Нравится
Реакции: Turchick и AceFridge

AceFridge

Активный
8 Мар 2021
85
15
Как повернуть партикл после создания в скрипте? нужно добиться эффекта как на картинке1618056632847.png
 

AceFridge

Активный
8 Мар 2021
85
15
Подскажите, почему не могу передать юниту предмет? Самостоятельно он может его взять.

код юнита:
JSON:
    "npc_ug_zombie"
    {
        "BaseClass"                    "npc_dota_creep"    // Class of entity of link to.
        "Model"                        "models/creeps/lane_creeps/creep_bad_melee_diretide/creep_bad_melee_diretide.vmdl" //"models/heroes/undying/undying_minion.vmdl"
        "SoundSet"                    "Undying_Zombie"
        "ModelScale"                 "1.2"
        "Level"                        "1"
      
        "ArmorPhysical"                "1"            // Physical protection.
        "MagicalResistance"            "0"            // Magical protection.

        // Attack
        //----------------------------------------------------------------
        "AttackCapabilities"        "DOTA_UNIT_CAP_MELEE_ATTACK"
        "AttackDamageMin"            "9"        // Damage range min.
        "AttackDamageMax"            "13"        // Damage range max.
        "AttackDamageType"            "DAMAGE_TYPE_ArmorPhysical"
        "AttackRate"                "1.6"            // Speed of attack.
        "AttackAnimationPoint"        "0.467"        // Normalized time in animation cycle to attack.
        "AttackAcquisitionRange"    "500"        // Range within a target can be acquired.
        "AttackRange"                "70"        // Range within a target can be attacked.
        "ProjectileModel"            ""            // Particle system model for projectile.
        "ProjectileSpeed"            ""            // Speed of projectile.

      
        // Abilities
        //----------------------------------------------------------------
      
        "Ability1"                    "ability_creep_rock"            // Ability 1.
        "Ability2"                    ""            // Ability 2.
        "Ability3"                    ""            // Ability 3.
        "Ability4"                    ""            // Ability 4.
        "Ability5"                    ""            // Ability 5.
        "Ability6"                    ""            // Ability 6 - Extra.
        "Ability7"                    ""            // Ability 7 - Extra.
        "Ability8"                    ""            // Ability 8 - Extra.

        // Armor
        //----------------------------------------------------------------
        "ArmorPhysical"                "0"            // Physical protection.
        "MagicalResistance"            "0"            // Magical protection.


        // Attributes
        //----------------------------------------------------------------
        "AttributePrimary"            "DOTA_ATTRIBUTE_STRENGTH"
        "AttributeBaseStrength"        "0"            // Base strength
        "AttributeStrengthGain"        "0"            // Strength bonus per level.
        "AttributeBaseIntelligence"    "0"            // Base intelligence
        "AttributeIntelligenceGain"    "0"            // Intelligence bonus per level.
        "AttributeBaseAgility"        "0"            // Base agility
        "AttributeAgilityGain"        "0"            // Agility bonus per level.

        // Bounty
        //----------------------------------------------------------------
        "BountyXP"                    "41"        // Experience earn.
        "BountyGoldMin"                "0"        // Gold earned min.
        "BountyGoldMax"                "0"        // Gold earned max.

        // Bounds
        //----------------------------------------------------------------
        "BoundsHullName"            "DOTA_HULL_SIZE_REGULAR"            // Hull type used for navigation/locomotion.
        "RingRadius"                "80"
        "HealthBarOffset"            "130"

        // Movement
        //----------------------------------------------------------------
        "MovementCapabilities"        "DOTA_UNIT_CAP_MOVE_GROUND"            // Type of locomotion - ground, air
        "MovementSpeed"                "235"        // Speed
        "MovementTurnRate"            "0.5"        // Turning rate.

        // Status
        //----------------------------------------------------------------
        "StatusHealth"                "130"        // Base health.
        "StatusHealthRegen"            "0"            // Health regeneration rate.
        "StatusMana"                "0"        // Base mana.
        "StatusManaRegen"            "0"        // Mana regeneration rate.

        // Team
        //----------------------------------------------------------------
        "TeamName"                    "DOTA_TEAM_NEUTRALS"            // Team name.
        "CombatClassAttack"            "DOTA_COMBAT_CLASS_ATTACK_BASIC"
        "CombatClassDefend"            "DOTA_COMBAT_CLASS_DEFEND_BASIC"
        "UnitRelationshipClass"        "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_DEFAULT"
      
        // Vision
        //----------------------------------------------------------------
        "VisionDaytimeRange"        "500"        // Range of vision during day light.
        "VisionNighttimeRange"        "1000"        // Range of vision at night time.
      
        //Inventory
        "HasInventory"                "1"
    }

Создаю его так:
local u = CreateUnitByName( "npc_ug_zombie", vTarget, false, hCaster, hCaster, hCaster:GetTeamNumber() )

1618100682539.png
 

Julian Slink

Пользователь
11 Апр 2021
13
2
"BaseClass" "npc_dota_creep" // Class of entity of link to.
Если тебе нужно выдавать ему предметы как компаньйону. то используй класс медведя друида
npc_dota_lone_druid_bear

Такой вопрос, решил попробовать сделать HeroDefence, возник вопрос, как лучше направлять несколько РАЗНЫХ юнитов, по одному маршруту
Вписывать несколько юнитов в спавн одной энтити и запускать их по одному пути, или же прописывать отдельный спавн для каждого типа юнита и так же, запускать по одной траектории, но по разным путям?

unit_path.png
 
  • Нравится
Реакции: AceFridge

AceFridge

Активный
8 Мар 2021
85
15
Планирую писать AI для крипов, вероятно, что на карте одновременно может быть несколько сотен крипов. Если сделать интеллект на основе модификатора с thinker'ом, скажем, реагирующим раз в секунду, насколько это скажется на производительности? Или же лучше отказаться от идеи с модификаторами на каждого юнита и сделать один скрипт с таймером и перебирать всех юнитов данного типа?
 

ZLOY

Администратор
Команда форума
27 Июн 2016
953
182
Все зависит только от того насколько сложен твой АИ, модификаторы сами по себе особо ничего на стоят.
 
  • Нравится
Реакции: AceFridge

AceFridge

Активный
8 Мар 2021
85
15
Перемещаю лежащий предмет циклическим таймером, если герой поднимает его в процессе, то я получаю ошибку: "Can't call CBaseEntity:GetOrigin on an object of type [none]".
Какое условие необходимо использовать, чтобы не получить данную ошибку?
if hDroppedItem ~= nil - не подходит в данном случае.
----------------------------------------------
разобрался:
if IsValidEntity(item) then ...
 
Последнее редактирование:
Реклама: