А что собственно мешает работать со степенью двойки?
одна функция на установку числа + одна на считывание
+ нужное число абилок (10 абилок дают до 1024 вариаций)
если у тебя бонус идёт по 5 ед. а не по 1, то получается аш до +5120 атаки
В нужный момент юзаешь "установить как (считать) + (твой бонус)"
и обратно так же "установить как (считать) - (твой бонус)"
интересно можно ли было бы узнать очередь приказов через Shift?
Хотя бы один следующий ордер у юнита, находящийся в очереди за его основным (текущим)
. . .
На счёт EVENT_PLAYER_BUTTON_PRESSED , у помянутого выше...
Хотелось бы впринципе получать игрока, который пытается нажимать кнопки (и нажимает их).
А то отлов каста абилки и поиск игрока всегда заканчивается тем, что получаем игрока который владеет этим юнитом, а не тот кто кликает на абилки
Правильнее будет отлов приказа скилла, если такой скилл у юнита есть, и дальше смотреть подходящая ли цель... если нет - стопить, или просто приказывать smart по цели
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 каждый раз, вот и всё что мне нужно.
. . .
Так-с, а что на счёт функции которая заставит иконку баффа в статусе юнита мигать, а?
Ну если ты имеешь ввиду ASCII-код абилки, то нет(на сколько я помню)
Абилки применяются по приказу, который изначально имеет вид числа типа 820565
Но по большей части всё сводится в строчному ордеру типа "channel"
Твоя функция должна принимать в аргументы массивы любого типа? Тоесть ты пишешь просто
Да, именно так. Ну допустим был бы тот самый тип 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
Я прекрасно понимаю что взаимосвязь первого и второго аргументов (условный объект и его тип) нельзя так самовольно вклинивать куда-либо без инструкций... как заставить последующий аргумент принимать тип от типа предыдущего (объекта, условно). Сложно.
Тут основная проблема - реализовать передачу массива в аргументы.
Пародия на тип widget , принимающая дочерние типы unit / item / и т.п.
Есть же такое - есть, почему нет? )
Если аргументировать ненужность чего-либо тем, что такой же результат можно получить стоит лишь что-то сделать, то... Зачем тогда вообще запрашивать новые функции? есть же MemoryHack, он и так развязывает нам руки, получи что хочешь, только сделай для этого что-то...
Я всегда детектил вход юнита на карту,
проверяя на то что этот юнит является иллюзией,
как написано было выше.
При этом чтобы отлавливать иллюзий от определённых скиллов, а не всех подряд - можно проверять их на текущий бафф (все иллюзии имеют бафф призыва, у каждого такого скилла его можно поставить свой). Эта фишка помогла мне сделать аналог героя из DotA - Phantom Lancer (старый), пассивная способность создавала при атаке свои копии, которая работала изначально только при атаках самого героя, а ульт добавлял по-уровням возможность создавать копии этими же копиями (только копиям от пассивки), потом копиям от всех его способностей (копьё и инвиз), и в конце - вообще от любых его копий (манта, ульт морфа, 1-е скиллы ШД и террора).
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) то же не помешало бы.
в реальности ты ее будешь использовать с 2-3 типами?
в реальности мне будут нужны такие типы как - юнит, тип юнита (а это integer), предмет, тип предмета (integer), улучшение (integer), абилка как объект и как тип (integer), бафф (integer), молния (как объект), тип тайла (integer), таймер, группа, точка, тректейбл, а так же - строки...
Нужды до реалок пока не доходило, но лишним не будут.
Итого: 10 типов
Было бы неплохо в добавок получить события "юнит_бафф_получил"
и аналогично "юнит_бафф_утратил".
В добавок от себя - хотелось бы что бы данные о времени в РО у аур всё такие работали, самым простым образом - устанавливали частоту обновления этой ауры (хочешь ставишь 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
Очевидно, что это простой цикл с поиском объекта в массиве.
И так же очевидно, что было бы на много практичее если бы можно было написать универсальную функцию поиска с циклов внутри, но... как заставить функцию принимать не объект по ссылке из переменной, а именно саму переменную (со всеми её массивами) и при этом варьировать тип второго аргумента как тип этой самой переменной.
Я пришёл в выводу, что проще отказаться от общей механики "иллюзий", и сделать это отдельной фишкой конкретных героев (ну вот так, как Мипо в доте, или Морф). Но это не отменяет вариант с кустарным жезлом иллюзий и подобными инструментами. Копия юнита как новый юнит - да, но ооочень много нюансов.
Даёшь найм левого юнита, за бесплатно (или некая цена за рандом) и допустим с КД.
почему найм юнита? что бы получить игрока, который его купит (активации абилки этого не даст)
При появлении юнита / или при покупке (как тебе удобнее), ты можешь получить владельца
Выбираешь рандомного юнита (и можно его цену тоже проверить)
Далее можно уменьшить число этого юнита в лавке (типа ты рандомом его выбил оттуда)
И в конце создаёшь нужного тебе юнита, для нужного игрока
Всё просто
Ред. Extremator
» WarCraft 3 / Стак способностей
одна функция на установку числа + одна на считывание
+ нужное число абилок (10 абилок дают до 1024 вариаций)
если у тебя бонус идёт по 5 ед. а не по 1, то получается аш до +5120 атаки
и обратно так же "установить как (считать) - (твой бонус)"
» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3
Хотелось бы впринципе получать игрока, который пытается нажимать кнопки (и нажимает их).
А то отлов каста абилки и поиск игрока всегда заканчивается тем, что получаем игрока который владеет этим юнитом, а не тот кто кликает на абилки
» WarCraft 3 / Сопротивление
» WarCraft 3 / Сопротивление
Ред. Extremator
» WarCraft 3 / Можно ли изменить бонусы, способности предмета?
» XGM Конкурсы / Fun Spell Contest 2018
Ред. Extremator
» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3
а если считать в обратном направлении - то номер последнего.
Так же можно просто увеличивать его на +1 каждый раз, вот и всё что мне нужно.
» XGM Конкурсы / Fun Spell Contest 2018
» WarCraft 3 / Как применить способность по id?
Абилки применяются по приказу, который изначально имеет вид числа типа 820565
Но по большей части всё сводится в строчному ордеру типа "channel"
» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3
Ред. Extremator
» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3
Есть же такое - есть, почему нет? )
Ред. Extremator
» WarCraft 3 / Как отследить способность, которой была вызвана иллюзия?
проверяя на то что этот юнит является иллюзией,
как написано было выше.
» WarCraft 3 / Можно ли из автоприменяемой спосбности паразит сделать обычную?
» XGM Конкурсы / Fun Spell Contest 2018
» WarCraft 3 / Триггер не удаляет способность от книжки, что делать?
» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3
И описал я это таким образом, что бы пользоваться было максимально удобно
Допустим одно и то же число (пусть это будет 255) записано в переменные n[3] , n[7] и n[9], то set x = ArraySearchAll(n,5) присвоило бы переменной x (integer) значение 3 , потому что три массива переменной n имеют искомое значение 255.
Ред. Extremator
» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3
Нужды до реалок пока не доходило, но лишним не будут.
Итого: 10 типов
Ты ведь его понял, неправда ли?
» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3
» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3
Ред. Extremator
» WarCraft 3 / Blizzard готовят Producer Update для Warcraft 3
и аналогично "юнит_бафф_утратил".
. . . добавлено . . .
Так же было бе неплохо распологать следующим инструментом
Она принимает два аргумента:
И возвращает integer, как номер совпавшего массива
то при использовании функции ArraySearchFirst(a,b) мы посылаем саму переменную i (array)
и ищем в её значениях совпадения с GetTriggerUnit(), с таким же типом (unit-to-unit)
И первое что будет найдено (совпадёт) - udg_unit002, с номером массива 2
Это значение и будет возвращено, и n будет приравнено к 2
И так же очевидно, что было бы на много практичее если бы можно было написать универсальную функцию поиска с циклов внутри, но... как заставить функцию принимать не объект по ссылке из переменной, а именно саму переменную (со всеми её массивами) и при этом варьировать тип второго аргумента как тип этой самой переменной.
» WarCraft 3 / Переключение атаки через улучшение.
Ред. Extremator
» WarCraft 3 / Как через Триггеры поставить урон юниту в зависимости от золота?
» WarCraft 3 / Иконка героя
» WarCraft 3 / Триггеры
Выбираешь рандомного юнита (и можно его цену тоже проверить)
Далее можно уменьшить число этого юнита в лавке (типа ты рандомом его выбил оттуда)
Всё просто
» WarCraft 3 / Гулаги