28

» WarCraft 3 / ZinC: Гнев Деревьев AOE

8gabriel8:
А можно теперь сделать так, чтобы на экране статистики не было учтено из-за применения способности кучи нанятых юнитов? Но деньги, опыт и убийства опутанных врагов засчитывались бы игроку?
Можно попробовать через нейтрального игрока и нужные приказы, которые есть только на JASS.
28

» WarCraft 3 / Jass времён 1.24

единственная непонятная херня - это с конвертом, никак не могу понять как целое число заделывается в юнита. это получается хэндл возвращает?
Что не понятно, любой тип в WC3 состоит из 32 битов, если это хендл, строка или функция, то в качестве значения в этих 32х битах находится ссылка на объект, строку или функцию соответственно. Если это логическая или число, то 32 бита содержат значение. Данные функции просто делают тайпкаст, чтобы можно было без проблем использовать переменную типа integer как ссылку на объект.

Сейчас ретур баг всё ещё есть, но в другом виде, и называется return-loop hack, на HIVE почитайте. Я с помощью его нашёл баг обработки численно записанных real в JASS.

Точно также я делаю все свои фильтры, они возвращают nothing (хотя по идее должны возвращать boolean). Если функция возвращает nothing, то она возвращает 32 нуля, что есть false. Можно вместо nothing возвращать real или integer, если возвращаемое значение будет 0, то это будет false, иначе true.

Сам vJass генерирует действия для триггеров, которые возвращают true, хотя действия, по идее, должны возвращать nothing.
28

» WarCraft 3 / По поводу ледяной брони Лича

это понятно, просто там же есть уже параметр долговечности щита, а это идентичный параметр, разве нет?
Нет, длительность в данном случае определяет длительность негативного баффа на противниках.
28

» WarCraft 3 / Ауры в статусе

Так ты сделай иконку как у основного спела, измени описание, и норм будет.
Можно вместо ауры дать способность Кольца Регенерации.
28

» Администрация XGM / Фон для загрузки файлов перетаскиванием

что за перетаскивание текста? Ты про встроенную фичу firefox?
Ну ты чего. Я про возможность, что на ролике ниже. Если сделать так сейчас при открытой вкладке "Загрузить файлы" во время набора текста комментария или вопроса, то появится то, что на скриншоте в вопросе.
xgm.guru/files/117/221026/comments/410319/2019-01-22_17-26-10.mp...
Загруженные файлы
28

» Администрация XGM / Фон для загрузки файлов перетаскиванием

С файлами всегда проблемно работать, в ближайшем будущем не стоит ожидать.
Я не файлы имел в виду, а перетаскивание текста в сообщениях.
28

» JackCraft / WarFortress (Mini-Game Contest-2018-WIP)

А, то есть это просто эффект? Я думал, ты сделал индикатор на любую длительность заряда.
28

» Администрация XGM / Фон для загрузки файлов перетаскиванием

Сейчас, почему-то, сразу при нажатии появлялось меню для перетаскивания.
Загруженные файлы
28

» WarCraft 3 / Создание зависимых диалогов

в чем может быть ошибка?
Скриншот кода или триггеров, пожалуйста.
28

» WarCraft 3 / Выделять юнита только триггерно

Да, но 1/32 недостаточно, можно успеть заметить панель приказов
31 миллисекунда, я читал в статьях на XGM, что даже 50 миллисекунд хватит (типа человеческий глаз быстрее не заметит). Всегда можно уменьшить вдвое 1/64 или 1/128. В частности, 1/64 это чуть менее 16 миллисекунд.
28

» JackCraft / WarFortress (Mini-Game Contest-2018-WIP)

Полоска это просто аттач эффект. А лодскирн я рендерил так же как и для СDR, на анриловском движке.
Да, но как было реализовано увеличение индикатора заряда?
28

» WarCraft 3 / Выделять юнита только триггерно

с чего вдруг баня загорелась? Вы переиграли в удержание овец паладином? Так там вейт перед снятием
Я не понял, что тут имелось в виду, но если сделать через это событие, то игрок выделит юнита, увидит его панель приказов и прочие характеристики на несколько долей секунды, и уже потом выделение будет снято.
28

» WarCraft 3 / Выделять юнита только триггерно

Юнит выбран - удалить из выбора.
Данное событие срабатывает с задержкой, игрок успеет выбрать юнита. Потому сразу предложил способ с таймером.
28

» JackCraft / WarFortress (Mini-Game Contest-2018-WIP)

Jack-of-shadow, как ты сделал полоску над головой у при заряде? 2:56.
А ещё, кто делал арт на загрузочном экране?
28

» WarCraft 3 / Выделять юнита только триггерно

Принятый ответ
Отключи выбор юнитов.
Если же таким свойством должен обладать 1 или несколько юнитов, то нужно сделать вот как: каждую долю секунды (1 / 32 достаточно) сканируешь всех выбранных юнитов у игрока. Если в выборе есть твой юнит, снимаешь с него выделение.
28

» WarCraft 3 / Как вы храните информацию по карте?

Bergi_Bear, пример БД башен из моей карты.
code
//===========================================================================
// Trigger: TowerData
//===========================================================================
library TowerData uses TowerTypes, TowerAbilityDataLib
private function AddTowerData1 takes integer T, real height, real scale, integer goldcost, integer limit, boolean selfupgrade,/*
                                  */ boolean hasexp, integer prevfactor, integer lvlfactor, integer constfactor, integer base,/*
                                  */ integer superlvl, integer superlvlfactor returns nothing
    set TowerData[T].height = height
    set TowerData[T].scale = scale
    set TowerData[T].goldcost = goldcost
    set TowerData[T].limit = limit
    set TowerData[T].selfupgrade = selfupgrade
    set TowerData[T].hasexp = hasexp
    set TowerData[T].prevfactor = prevfactor
    set TowerData[T].lvlfactor = lvlfactor
    set TowerData[T].constfactor = constfactor
    set TowerData[T].base = base
    set TowerData[T].superlvl = superlvl
    set TowerData[T].superlvlfactor = superlvlfactor
endfunction

private function AddTowerData2 takes integer T, integer abil_id, boolean hasattack, real attdmg, real attup, integer atttype,/*
                                  */ real attrange, boolean explosive returns nothing
    set TowerData[T].abil_id = abil_id
    set TowerData[T].hasattack = hasattack
    set TowerData[T].attdmg = attdmg
    set TowerData[T].attup = attup
    set TowerData[T].atttype = atttype
    set TowerData[T].attrange = attrange
    set TowerData[T].explosive = explosive
endfunction

private function AddTowerTrigger takes integer T, code build, code upgrade returns nothing
    set TowerData[T].build = CreateTrigger()
    call TriggerAddAction(TowerData[T].build, build)
    if upgrade != null then
        set TowerData[T].upgrade = CreateTrigger()
        call TriggerAddCondition(TowerData[T].upgrade, Filter(upgrade))
    endif
endfunction

//! textmacro AddTowerTrigger takes name
    call AddTowerTrigger($name$Id, function $name$.build, function $name$.upgrade)
//! endtextmacro

globals
    constant integer WallId = 0
    constant integer ArrowId = 1
    constant integer BurrowId = 2
    constant integer LightningId = 3
    constant integer BurstId = 4
    constant integer GoldMineId = 5
    constant integer FoLId = 6
    constant integer FoEId = 7
    constant integer BloodId = 8
    constant integer WaveId = 9
    
    constant integer TowerTypesAmount = 10
endglobals

function InitTowerData takes nothing returns nothing
    // Data                    typ, hght, scale, cost, lim, upgrd, hasxp, prvfac, lvlfac, const, base, suplvl, factor.
    call AddTowerData1(     WallId,  60.,   0.4,    5,  -1, false, false,      0,      0,     0,    0,      0, 10)
    call AddTowerData1(    ArrowId, 145.,   0.6,   10,  -1,  true,  true,      1,      5,     0,   20,     10, 10)
    call AddTowerData1(   BurrowId,  60.,   0.6,   10,  -1,  true,  true,      1,      5,     0,   20,     10, 10)
    call AddTowerData1(LightningId, 255.,   0.5,   10,  -1,  true,  true,      1,      5,     0,   20,     10, 10)
    call AddTowerData1(    BurstId, 135.,   0.6,   20,  -1,  true, false,      1,      0,    20,   40,     10, 10)
    call AddTowerData1( GoldMineId,  60.,   0.4,  120,   4,  true, false,      1,      0,    60,  180,     10, 10)
    call AddTowerData1(      FoLId,  60.,   0.4,  100,   4,  true, false,      1,      0,    50,  150,     10, 10)
    call AddTowerData1(      FoEId,  60.,   0.4,  100,  -1,  true, false,      1,      0,    50,  150,     10, 10)
    call AddTowerData1(    BloodId, 255.,   0.5,   20,  -1, false, false,      0,      0,     0,    0,      0, 10)
    call AddTowerData1(     WaveId, 135.,   0.6,   20,  -1,  true,  true,      1,      5,     0,   20,     10, 10)
    // Additional Data         typ,               abil_id, hasatt, dmg, attup, atttyp, attran, explo.
    call AddTowerData2(     WallId,                     0,  false,  0.,    0.,      0,     0., false)
    call AddTowerData2(    ArrowId,   AbilFocusedAttackId,   true, 7.5, 0.075,   Phys,   384., false)
    call AddTowerData2(   BurrowId,       AbilMultishotId,   true,  1., 0.075,   Phys,   384., false)
    call AddTowerData2(LightningId, AbilLightningAttackId,   true, 10., 0.075,   Magc,   384.,  true)
    call AddTowerData2(    BurstId,  AbilProjectileSiloId,   true,  5.,   0.5,   Perc,   384., false)
    call AddTowerData2( GoldMineId,      AbilGoldMiningId,  false,  0.,    0.,      0,     0., false)
    call AddTowerData2(      FoLId,   AbilReplenishLifeId,  false,  0.,    0.,      0,     0., false)
    call AddTowerData2(      FoEId,    AbilExpGeneratorId,  false,  0.,    0.,      0,     0., false)
    call AddTowerData2(    BloodId,      AbilOrbOfBloodId,   true,  3.,    0.,   Magc,   384.,  true)
    call AddTowerData2(     WaveId,       AbilShockwaveId,   true,  5., 0.075,   Phys,   512.,  true)
    // Triggers
    call AddTowerTrigger(WallId, function Wall.build, null)
//! runtextmacro AddTowerTrigger("Arrow")
//! runtextmacro AddTowerTrigger("Burrow")
//! runtextmacro AddTowerTrigger("Lightning")
//! runtextmacro AddTowerTrigger("Burst")
//! runtextmacro AddTowerTrigger("GoldMine")
//! runtextmacro AddTowerTrigger("FoL")
//! runtextmacro AddTowerTrigger("FoE")
//! runtextmacro AddTowerTrigger("Blood")
//! runtextmacro AddTowerTrigger("Wave")
endfunction
endlibrary

struct TowerData extends array
    integer abil_id
    real height
    real scale
    integer goldcost
    integer limit
    boolean hasattack
    real attdmg
    real attup
    integer atttype
    real attrange
    boolean explosive
    boolean selfupgrade
    boolean hasexp
    integer prevfactor
    integer lvlfactor
    integer constfactor
    integer base
    integer superlvl
    integer superlvlfactor
    
    trigger build
    trigger upgrade
endstruct
При строительстве срабатывает триггер, определяет id башни, делает некоторые действия, а потом вызывает триггер build, сохраняяя нужные параметры в глобалки. С апгрейдом аналогично.
Я с таким уже успехом мог передавать не сами функции (то есть code), а только их имена, vJass превратит их в индексы и сам создаст триггеры. сам функции можно будет вызывать через .evaluate(), .execute(). Но в моей реализации на одно обращение к массиву меньше.
28

» XGM Конкурсы / Warcraft III Mini-Game Contest-2018

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

» WarCraft 3 / Как вы храните информацию по карте?

Вот а что прикажете делать с такой же библиотекой на 2000+ строк для функции обработки скилов?
У тебя на каждый скилл своя функция? Я не понял, что тебе нужно.
28

» WarCraft 3 / Систематизация информации

Те же таблицы, пусть строка = один итем.
В певом столбце будет картинка, во втором имя, в третьем равкод, в четвертом описание и так далее.
Можно сделать, чтобы столбец = итем, а строки под свойства.
28

» WarCraft 3 / Как вы храните информацию по карте?

Можно добавить свои функции (и только их). Делаешь текстовый файл в папке includes (что в папке tesh), в него пишешь все тебе нужные функции, сохраняешь. Твои функции будут в Function List. Если же добавить, пока редактор открыт, то, чтобы отобразились твои функции, нужно нажать TESH -> Reload user includes.

template - шаблон, в папке с шаблонами можно свои шаблоны добавить. Это не то, что тебе нужно.

Оглавление сделать нельзя, скрывай ненужные функции в самом коде, тыкая на + рядом с номером строки.
28

» WarCraft 3 / Как вы храните информацию по карте?

Я для себя сделал таблицу равкодов, чтобы мне было удобно глянуть, какие равкоды ещё свободны для опредлённого типа объектов.
Также я сделал таблицу с описаниями улучшений, характеристиками и прочим.
Всё это хранится в одном фале Excel, для телефона же лучше использовать Google таблицы.

Вот таблица равкодов, может будет интересно.
Красным выделены "нехорошие" символы.
Загруженные файлы