26

» WarCraft 3 / Стак способностей

А что собственно мешает работать со степенью двойки?
одна функция на установку числа + одна на считывание
+ нужное число абилок (10 абилок дают до 1024 вариаций)
если у тебя бонус идёт по 5 ед. а не по 1, то получается аш до +5120 атаки
В нужный момент юзаешь "установить как (считать) + (твой бонус)"
и обратно так же "установить как (считать) - (твой бонус)"
26

» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3

Steal nerves:
интересно можно ли было бы узнать очередь приказов через Shift?
Хотя бы один следующий ордер у юнита, находящийся в очереди за его основным (текущим)
. . .
На счёт EVENT_PLAYER_BUTTON_PRESSED , у помянутого выше...
Хотелось бы впринципе получать игрока, который пытается нажимать кнопки (и нажимает их).
А то отлов каста абилки и поиск игрока всегда заканчивается тем, что получаем игрока который владеет этим юнитом, а не тот кто кликает на абилки
26

» WarCraft 3 / Сопротивление

Правильнее будет отлов приказа скилла, если такой скилл у юнита есть, и дальше смотреть подходящая ли цель... если нет - стопить, или просто приказывать smart по цели
26

» WarCraft 3 / Сопротивление

а цель каста разве работает? при событии "юнит начинает применять"
26

» WarCraft 3 / Можно ли изменить бонусы, способности предмета?

Принятый ответ
То что не видно на панели - нельзя вызвать хоткеем на сколько я помню
При получении предмета можно изменять уровень абилок в этом предмете, но это пожалуй всё а так же удалять их вовсе
26

» XGM Конкурсы / Fun Spell Contest 2018

Zahanc:
и где твоя работа?
Выслал давным-давно. В теме сообщения был указан мой никнейм. Aluminum210 это я.
Во избежание задержек и путаницы - вышли ему карту ещё раз, мало ли... лишним не будет.
26

» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3

Но все это реализуемо обходными путями
вот обходной путь
function GetNum_unitPool_A0bx takes unit u returns integer
	local integer Num = 0; local integer Loop = 0;
	local integer Max = udg_unitPool_Max // to integer, not-array
	loop; set Loop = Loop + 1
	if u == udg_unitPool_unit[Loop] then; set Num = Loop; endif
	exitwhen Loop == Max or Num != 0; endloop
	return Num
endfunction
Он выдаст номер первого совпадения,
а если считать в обратном направлении - то номер последнего.
Так же можно просто увеличивать его на +1 каждый раз, вот и всё что мне нужно.
. . .
Так-с, а что на счёт функции которая заставит иконку баффа в статусе юнита мигать, а?
native SetUnitBuffPing takes unit whichUnit, integer buffID, boolean flagPing returns nothing
И, например, функция которая даст знать мигает ли сейчас иконка баффа у юнита.
native GetUnitBuffPing takes unit whichUnit, integer buffID returns boolean
26

» WarCraft 3 / Как применить способность по id?

Принятый ответ
Ну если ты имеешь ввиду ASCII-код абилки, то нет (на сколько я помню)
Абилки применяются по приказу, который изначально имеет вид числа типа 820565
Но по большей части всё сводится в строчному ордеру типа "channel"
26

» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3

Твоя функция должна принимать в аргументы массивы любого типа? Тоесть ты пишешь просто
Да, именно так. Ну допустим был бы тот самый тип value, дочерний от handle (собственно как и всё живое).
type value extends handle // как объект что ли?
            // или от чего являются дочерними типы integer , string и real ?
type valuesub extends ??? // or valsub
native ArraySearchFirst  takes value a, valsub b returns integer
native ArraySearchLast  takes value a, valsub b returns integer
native ArraySearchALL  takes value a, valsub b returns integer
Я прекрасно понимаю что взаимосвязь первого и второго аргументов (условный объект и его тип) нельзя так самовольно вклинивать куда-либо без инструкций... как заставить последующий аргумент принимать тип от типа предыдущего (объекта, условно). Сложно.
26

» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3

Тут основная проблема - реализовать передачу массива в аргументы.
Пародия на тип widget , принимающая дочерние типы unit / item / и т.п.
Есть же такое - есть, почему нет? )
Если аргументировать ненужность чего-либо тем, что такой же результат можно получить стоит лишь что-то сделать, то... Зачем тогда вообще запрашивать новые функции? есть же MemoryHack, он и так развязывает нам руки, получи что хочешь, только сделай для этого что-то...
26

» WarCraft 3 / Как отследить способность, которой была вызвана иллюзия?

Принятый ответ
Значит, только обходными путями.
Я всегда детектил вход юнита на карту,
проверяя на то что этот юнит является иллюзией,
как написано было выше.
При этом чтобы отлавливать иллюзий от определённых скиллов, а не всех подряд - можно проверять их на текущий бафф (все иллюзии имеют бафф призыва, у каждого такого скилла его можно поставить свой). Эта фишка помогла мне сделать аналог героя из DotA - Phantom Lancer (старый), пассивная способность создавала при атаке свои копии, которая работала изначально только при атаках самого героя, а ульт добавлял по-уровням возможность создавать копии этими же копиями (только копиям от пассивки), потом копиям от всех его способностей (копьё и инвиз), и в конце - вообще от любых его копий (манта, ульт морфа, 1-е скиллы ШД и террора).
26

» WarCraft 3 / Можно ли из автоприменяемой спосбности паразит сделать обычную?

Принятый ответ
Ну берёшь канал, и при его касте создаёшь под кастером даммика, который использует обычного паразита в указанную цель, всё.
26

» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3

GF RaiseD:
Extremator, ты хотел узнать индекс и/или проверить наличие хендла в массиве?
Ну по-сути да, но на уровне нативки, а не за счёт постройки цикла циклов... есть же разница?
И описал я это таким образом, что бы пользоваться было максимально удобно
При этом в добавок к первой ArraySearchFirst(a,b) [integer] , которая вернёт первый номер совпадения, так же хотелось бы иметь функцию на поиск последнего совпадения - ArraySearchEnd(a,b) [integer] в тем же выводом.
+ наличие общего подсчёта совпадений - ArraySearchAll(a,b) [integer] , где возвращался бы не номер конкретного массива (как в предыдущих случаях), а число вообще всех совпадений.
Допустим одно и то же число (пусть это будет 255) записано в переменные n[3] , n[7] и n[9], то set x = ArraySearchAll(n,5) присвоило бы переменной x (integer) значение 3 , потому что три массива переменной n имеют искомое значение 255.
GF RaiseD, кстати, кто-либо упоминал о функциях получения текущего цвета юнита? (по RGB) то же не помешало бы.
26

» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3

в реальности ты ее будешь использовать с 2-3 типами?
в реальности мне будут нужны такие типы как - юнит, тип юнита (а это integer), предмет, тип предмета (integer), улучшение (integer), абилка как объект и как тип (integer), бафф (integer), молния (как объект), тип тайла (integer), таймер, группа, точка, тректейбл, а так же - строки...
Нужды до реалок пока не доходило, но лишним не будут.
Итого: 10 типов
твой пример инвалиден.
Кому объясняю - такой и пример.
Ты ведь его понял, неправда ли?
26

» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3

Было бы неплохо в добавок получить события "юнит_бафф_получил"
и аналогично "юнит_бафф_утратил".
В добавок от себя - хотелось бы что бы данные о времени в РО у аур всё такие работали, самым простым образом - устанавливали частоту обновления этой ауры (хочешь ставишь 2. , или 0.5, или 0.1 при необходимости, а эта аура буде часто обновляться).
В добавок к аурам (и не только) - хотелось бы что бы можно было получить уровень баффа на юните (знаю что делается это через получение уровня абилки, но больше 1 оно не выдаёт, починить бы это)


. . . добавлено . . .
Так же было бе неплохо распологать следующим инструментом
  • функция для поиска данных в массиве переменной при указанных данных в аргументе
Допустим, есть функция - ArraySearchFirst(a,b) [integer]
Она принимает два аргумента:
  • первый - переменная с массивом, не объект по ссылке на эту переменную, а сама переменная
  • второй - сам объект (условно), который необходимо найти
При этом тип объекта обязан совпадать с типа указанной переменной
И возвращает integer, как номер совпавшего массива
[пример]
	local integer n
	local unit array i
	set i[0] = udg_unit000
	set i[1] = udg_unit001
	set i[2] = udg_unit002 // допустим этот юнит является так же GetTriggerUnit()
	set i[3] = udg_unit003
	
	set n = ArraySearchFirst(i,GetTriggerUnit())
	// название функции подсказывает о первом совпадении
[end-пример]
В чём суть? Если, допустим, мы заведомо знаем что GetTriggerUnit'ом окажется udg_unit002,
то при использовании функции ArraySearchFirst(a,b) мы посылаем саму переменную i (array)
и ищем в её значениях совпадения с GetTriggerUnit(), с таким же типом (unit-to-unit)
И первое что будет найдено (совпадёт) - udg_unit002, с номером массива 2
Это значение и будет возвращено, и n будет приравнено к 2
Очевидно, что это простой цикл с поиском объекта в массиве.
И так же очевидно, что было бы на много практичее если бы можно было написать универсальную функцию поиска с циклов внутри, но... как заставить функцию принимать не объект по ссылке из переменной, а именно саму переменную (со всеми её массивами) и при этом варьировать тип второго аргумента как тип этой самой переменной.
26

» WarCraft 3 / Иконка героя

Принятый ответ
Я пришёл в выводу, что проще отказаться от общей механики "иллюзий", и сделать это отдельной фишкой конкретных героев (ну вот так, как Мипо в доте, или Морф). Но это не отменяет вариант с кустарным жезлом иллюзий и подобными инструментами. Копия юнита как новый юнит - да, но ооочень много нюансов.
26

» WarCraft 3 / Триггеры

Даёшь найм левого юнита, за бесплатно (или некая цена за рандом) и допустим с КД.
  • почему найм юнита? что бы получить игрока, который его купит (активации абилки этого не даст)
При появлении юнита / или при покупке (как тебе удобнее), ты можешь получить владельца
Выбираешь рандомного юнита (и можно его цену тоже проверить)
Далее можно уменьшить число этого юнита в лавке (типа ты рандомом его выбил оттуда)
И в конце создаёшь нужного тебе юнита, для нужного игрока
Всё просто
26

» WarCraft 3 / Гулаги

Zahanc, а создание псевдо-двумерного массива разве уходит от использования цикла?