14

» WarCraft 3 / Опять вопрос по освещению

PrincePhoenix:
  1. Настройки освещения в параметрах карты
  2. Проблема с нормалями модели (лечится крайне туго)
>Настройки освещения в параметрах карты
Это где?
14

» WarCraft 3 / Как поменять модель у разрушаемого объекта?

8gabriel8:
А если я создал свой нестандартный разрушаемый объект?
Также указываешь модели вариации с одним общим именем и окончаниями [число] и [число]S, в пути к модели ставишь только общее имя, указываешь количество вариаций. Суть в том, что импортированные модели декорации обычным именем отображаются в редакторе, а модели с тем же именем и окончанием S в игре.
Ничерта не понял.
14

» WarCraft 3 / Как поменять модель у разрушаемого объекта?

8gabriel8:
Опишу на примере дерева. Чтобы были у дерева Ашенваля вариации, надо импортировать их модели по путям:
  • Doodads\Terrain\AshenTree\AshenTree0.mdx
  • Doodads\Terrain\AshenTree\AshenTree1.mdx
  • Doodads\Terrain\AshenTree\AshenTree2.mdx
и так далее.
Путь к модели надо указать Doodads\Terrain\AshenTree\AshenTree.mdx, номер в конце не надо ставить. А в количестве вариаций декорации указать последний номер импортированной модели.
Но для отображения в игре нужно загрузить эти же модели по путям:
  • Doodads\Terrain\AshenTree\AshenTree0S.mdx
  • Doodads\Terrain\AshenTree\AshenTree1S.mdx
  • Doodads\Terrain\AshenTree\AshenTree2S.mdx
Ну то есть на конце имени поставить S.
А если я создал свой нестандартный разрушаемый объект?
14

» WarCraft 3 / Как поменять модель у разрушаемого объекта?

8gabriel8:
prog:
А нет ли у модели вариаций?
Только правильнее будет не у модели, а у разрушаемого объекта.
есть
14

» WarCraft 3 / Как поменять модель у разрушаемого объекта?

prog:
А нет ли у модели вариаций? Если есть, то реальное имя модели может отличаться от отображаемого.
нет, нету
14

» WarCraft 3 / missing return

Raised:
Подход не вполне верный. Тебе нужно возвращать не юнита, а группу. Иначе твоя функция оборвется когда обнаружит в группе первого врага. Почему у тебя в цикле 2 exitwhen?
code
    loop
        u_e = FirstOfGroup(unitsInRange)
    exitwhen u_e  ==  null
        if IsUnitEnemy(u_e, GetOwningPlayer(u)) then
            GroupRemoveUnit(unitsInRange, u_e)
            GroupAddUnit(enemies, u_e)
        else
            GroupRemoveUnit(unitsInRange, u_e)
        endif
    endloop

    return enemies
Ну а дальше работаешь с группой.
Мне и нужно, чтобы возвращало первого попавшего
Плохо, что ретурн позволяет появлятся утечкам.
14

» WarCraft 3 / missing return

quote
 unit EnemyInGroup (unit u, float x, float y, float range) {
     group enemies = CreateGroup()
     unit u_e
     
     GroupEnumUnitsInRange(enemies, x, y, range, Condition(function SimpleCond))
     loop
         u_e = FirstOfGroup(enemies)
         exitwhen u_e == null
         if IsUnitEnemy(u_e, GetOwningPlayer(u)) then
             DestroyGroup(enemies)
             enemies = null
             return u_e  // утечка переменной u_e, используй глобалку.
             // exitwhen true  // зачем это, когда есть return?
         else
             GroupRemoveUnit(enemies, u_e)
         endif
     endloop
     
     DestroyGroup(enemies)
     enemies = null
     u_e = null
     return null  // нет враждебного юнита.
 }
А вообще, что находится в функции SimpleCond? Тут можно всё упростить.
 globals
     player TransPlayer
     unit LastEnemyUnit
 endglobals
 
 function filter takes nothing returns boolean
     if IsUnitEnemy(GetFilterUnit(), TransPlayer) then
         set LastEnemyUnit = GetFilterUnit()
     endif
     return false
 endfunction
 
 function EnemyInRange takes unit u, real x, real y, real range return boolean
     set TransPlayer = GetOwningPlayer(u)
     set LastEnemyUnit = null
     call GroupEnumUnitsInRange(bj_lastCreatedGroup, x, y, range, Filter(function filter))
     return LastEnemyUnit != null
 endfunction
Не использую глобалки
PT153:
quote
 unit EnemyInGroup (unit u, float x, float y, float range) {
     group enemies = CreateGroup()
     unit u_e
     
     GroupEnumUnitsInRange(enemies, x, y, range, Condition(function SimpleCond))
     loop
         u_e = FirstOfGroup(enemies)
         exitwhen u_e == null
         if IsUnitEnemy(u_e, GetOwningPlayer(u)) then
             DestroyGroup(enemies)
             enemies = null
             return u_e  // утечка переменной u_e, используй глобалку.
             // exitwhen true  // зачем это, когда есть return?
         else
             GroupRemoveUnit(enemies, u_e)
         endif
     endloop
     
     DestroyGroup(enemies)
     enemies = null
     u_e = null
     return null  // нет враждебного юнита.
 }
А вообще, что находится в функции SimpleCond? Тут можно всё упростить.
 globals
     player TransPlayer
     unit LastEnemyUnit
 endglobals
 
 function filter takes nothing returns boolean
     if IsUnitEnemy(GetFilterUnit(), TransPlayer) then
         set LastEnemyUnit = GetFilterUnit()
     endif
     return false
 endfunction
 
 function EnemyInRange takes unit u, real x, real y, real range return boolean
     set TransPlayer = GetOwningPlayer(u)
     set LastEnemyUnit = null
     call GroupEnumUnitsInRange(bj_lastCreatedGroup, x, y, range, Filter(function filter))
     return LastEnemyUnit != null
 endfunction
exitwhen true выходит из цикла.
замечание от Raised: 1.4 (злоупотребление форматированием) используйте каты
14

» WarCraft 3 / Вопрос по макросам

8gabriel8:
Ну макросы в МС Офисе знаешь? Типа записывает твои действия, потом кнопочку нажимаешь и всю цепочку разом выполняет.
Правда, в последних версиях не припомню, чтобы они на глаза попадались.
Нет, не знаю
14

» WarCraft 3 / Отслеживание приказов

8gabriel8:
Мы от тебя ждём комментарий в вопросе про макросы.
Там ничего путного пока не услышал, челику отписал в лс, он ничем не смог помочь.
По этому вопросу поймал GetIssuedOrderId, в common.j, теперь бы узнать список айди приказов.
14

» WarCraft 3 / Герой

8gabriel8:
Естественно, потому Ctrl-C, Ctrl-V в РО.
Не, думаю есть более интересный метод
14

» WarCraft 3 / Герой

8gabriel8:
LainMikoroso, как пользователь jass имеешь возможность найти эту функцию в Function List)
Мне найти такую там не удалось. То есть придётся тебя в РО нажимать Ctrl-C, Ctrl-V. Но только смысл в таком клонировании, имя у героя ведь будет другое, если не делать на последнем (глючном) патче?

Хотя есть такой вариант, с дополнительным игроком
Нажимай Esc, чтобы создавать героев.
Типа ставишь резерв иконок для союзных героев на 0, создаёшь союзные узы с дополнительным нейтральным, создаёшь клонов для дополнительного нейтрального, дав им потом свой цвет. Только на мини карте такие клоны будут серыми, а не твоего цвета.
Это не работает для 3-х и более игроков имеющих клонирование.
Ибо клона будут контролить и другие игроки тоже
14

» WarCraft 3 / Герой

8gabriel8:
LainMikoroso, фиолетовым шрифтом выделено скрыть пиктограмму - Да
А, я увидел, как это сделать через Jass?Какая функция отвечает за это?
8gabriel8:
LainMikoroso, фиолетовым шрифтом выделено скрыть пиктограмму - Да
Ибо не хочу создавать дополнительно каждому юниту еще 1 копию в РО
14

» WarCraft 3 / Герой

8gabriel8:
LainMikoroso, там выделено цветом вообще-то.
Я хочу создавать клона героя, но чтобы не отображалась иконка.
8gabriel8:
LainMikoroso, там выделено цветом вообще-то.
Какое значение нужно туда вписывать?
14

» WarCraft 3 / Герой

Boyazitov:
Вот так можно скрыть иконку сверху слева
И что мне делать с этим?
14

» WarCraft 3 / Очистка локальных переменных

Hate:
да, и это опять же описано в статьях, что необходимо обнулять а что нет
thx
14

» WarCraft 3 / Очистка локальных переменных

Hate:
если бы изучали статьи, то не задавали бы таких вопросов
нет
А вообще локалки со значениями хендл необходимо обнулять?
14

» WarCraft 3 / Рывок

Это было давно, когда я делал такую способность, прочитал что предлагает бот, попробую через реалы двигать, а не точки как раньше.
14

» WarCraft 3 / Хеш-таблица или куча массивных переменных

RemoveSavedHandle
Мне необходимо после того как я использовал ячейку для handle чистить ее этой командой?Или Flush нормально с этим справляется?
14

» WarCraft 3 / Хеш-таблица или куча массивных переменных

UrsaBoss:
DracoL1ch, если говорить о удобстве, то даже нубу будет ясно что удобнее
хештаблица
LoadReal(h, id, StringHash("damage"))
//или
LoadReal(h, id, 0)
структура
m.damage
Я не говорю что хештаблица фигня.
Хештаблица незаменима для некоторых задач, к примеру если нужно прикрепить к равкоду какие то значения
LainMikoroso:
Насколько я помню структуры на vJass, 1.30 поддерживает его?
поддерживает
Как обнулить значение в хеш-таблице
(FlushChilld очищает весь ParentKey мне нужно именно одну ячейку)
Пробую записать null через LoadUnitHandle и не получается, хех
14

» WarCraft 3 / Хеш-таблица или куча массивных переменных

если привыкнуть к структурам, то писать код с ними будет намного быстрее и удобнее.
Насколько я помню структуры на vJass, 1.30 поддерживает его?
14

» WarCraft 3 / Хеш-таблица или куча массивных переменных

PT153:
Так в чём вопрос?
Используй то, что тебе удобнее, я вот структуры использую.
\Быстрота работы ведь тоже решает, удобнее таблица, а быстрее с переменными все работает