0
11
4 года назад
0

» WarCraft 3 / Управление контролем (мемхак)

quq_CCCP:
Тут нужно работать с динамическими триггерами и следить за юнитом очень тщательно.
Почти все дизейблы в игре построены на приказе стана и особом флаге - неприрываемый, собственно так и работает функция стана внутри движка игры, устанавливает счетчик станов ( текущее кол-во +1) больше, и принудительно записывает в начало очереди приказов - приказ стоять и смотреть на источник стана ( прикол да? Приказ стана это приказ типа цель-обьект), Но если мемхаком повысить счетчик станов на 1 и не отдавать никаких других приказов то юнит будет выполнять первый отданный приказ во что бы то нистало. При этом сломаются все стандартные дизейблы.
Что нам нужно - отслеживать смерть юнита, причем событием EVENT_WIDGET_DEATH (TriggerRegisterDeathEvent). Отлавливать приказы которые получает юнит, если это стан - то снимать счетчик на 0, а потом после окончания стана (событие на 0.00 едениц урона) повышать счетчик. Приказы триггерно отдавать точно так же, снял счетчик до нуля, приказ чето делать, поставил на то кол-во столько было.
Важно - это поле юзают многие дебаффы и абилки, к примеру морфы, поэтому не тупо ставим 0 или 1, а читаем сколько было, записываем 0, отдаем приказ, потом ставим сколько было, обязательно проверяя чтобы счетчик был выше 0 или равен нулю.
Счетчик станов (Он же флаг неприрываемости) находится по оффсету 0x198/
ReadRealMemory( pHandle + 0x198 ) 
Где p Handle это адресс юнита.
Важное НО, получение адресса юнита сравнительно тяжелая операция (ConvertHandle), поэтому имеет смысл записать адресс куда-нибудь, чтобы потом работать с ним, адресса у юнитов остаются не изменными всю игру, как и у абилок (даже если их удалять и добавлять).
То есть прямой функции нету, я так понял. Ну ок.
В целом мне бы хватило вообще показа скилл-панели союзных войск. Но тут приходится подключать DotaHelper, в котором я пока не разобрался как отключать конкретный функционал, а точнее alt+click... Вроде все остальное, что в нем есть отключать получается, а вот именно эту опцию с кликами отключить не получается.
Но все равно, спасибо за помощь, будем пробовать
0
11
4 года назад
0

» WarCraft 3 / Управление контролем (мемхак)

quq_CCCP:
Ну конечно можно, но сложно. Если ваш уровень жасс кодинга выше среднего то могу рассказать как это сделать.
Буду благодарен, если попробуешь хотя бы :) С мемхаком опыта пока что нету, да и не очень активно его использую, по-тихоньку изучаю. Но вот появилась необходимость в подобном функционале
0
11
4 года назад
0

» WarCraft 3 / Юнит начинает применять способность

МрачныйВорон:
jesperx, ну я как всегда не внимательно читаю. Можно кнопки в рефордже отследить. Однако, нужно знать, что у вас за юнит выделен в интерфейсе.
Кнопки может и реально отследить, но можно ли отследить, что ты после нажатой кнопки навел курсор на юнита? И вообще не понимаю суть задуманного :) Как выше написали, есть приказы, их можно фильтровать по ордеру и делать всевозможные проверки
0
11
4 года назад
0

» WarCraft 3 / Юнит начинает применять способность

Naadir:
Ы-ы-ы, у меня не получилось сбить способность, если ещё нет таргета, но кнопка уже нажата. Вообще не особо понимаю, как можно это отследить. Мб в мемхаке что-то есть, но я там особо не лазил.
Потому что в любом событии связанном с выбором цели эта цель должна быть выбрана для запуска события в любом случае.
2
11
4 года назад
2

» WarCraft 3 / Юнит начинает применять способность

МрачныйВорон:
у событии приказа тоже есть цель и id-приказ. id-приказ = id-абилы
событие - юнит отдал приказ цель - юнит
условие: id-приказ = равкоду абилки и тип цели = пехотинец
действие:
пауза кастера
отдаем приказ стоп
отменяем паузу кастера
выдать системную ошибку, типа: "вы не можете каставать на этом юните" вместе со звуком
етсетсвенно есть :) Но речь идет о том, что якобы цель еще не выбрана. Я же говорю, вопрос поставлен некорректно
2
11
4 года назад
2

» WarCraft 3 / Юнит начинает применять способность

МрачныйВорон:
jesperx, приказом можно отменять. каст еще не начался, а юнит получает приказ. В этот момент приказ можно перебить. так делаю со строительством. а вот с абилами не пробовал. Однако, обычно при получении приказа, кастер поворачивается к цели и подходит поближе, у него кучу времени уходит. А значит, не успевает применить
Я о том, что для директив спеллов цель должна быть выбрана в любом случае для того, чтобы событие затриггерилось.
0
11
4 года назад
0

» WarCraft 3 / Юнит начинает применять способность

Anzortrue:
jesperx:
wetalq:
jesperx, данные события работает когда уже выбрана цель!
ну сам по себе вопрос сформулирован не верно значит. Потому что о какой отмене каста может идти речь, если таргет не выбран.
Отмена не каста, а применения.
Ну пока ты выбрал таргет, директив спелл и незатриггерится, разве не так? То есть не произойдет ни EFFECT, ни CHANNEL, ни CAST события.

EFFECT - это уже вроде скастованный спелл, его не отменить. А вот другие я не помню точно
1
11
4 года назад
1

» WarCraft 3 / Юнит начинает применять способность

wetalq:
jesperx, данные события работает когда уже выбрана цель!
ну сам по себе вопрос сформулирован не верно значит. Потому что о какой отмене каста может идти речь, если таргет не выбран.
1
11
4 года назад
1

» WarCraft 3 / Юнит начинает применять способность

че то вроде было. Там же несколько параметров у события. EFFECT, CAST, CHANNEL и еще вроде какой то один. Проверяй каждый.
0
11
4 года назад
0

» WarCraft 3 / Warcraft 3 Reforged: Патч 1.32.9

А что то по редактору серьезное обновляли?
0
11
4 года назад
0

» WarCraft 3 / Иконки в описании

pro100master:
это не иконка это символ который заменяется на спец символы если про него речь
да называй как угодно, если понял о чем речь :) Я просто почему то не могу найти темку с этой картой. Точнее там была инфа, как редактировать шрифт
0
11
4 года назад
0

» WarCraft 3 / Иконки в описании

pro100master:
фрейм в помошь!
речь про 1.26 патч.
Я помню точно, что там чувак как то через шрифт добавлял иконки вместо всяких символов, типа ‡™‰. Просто почему то не могу найти этот тред
0
11
4 года назад
0

» WarCraft 3 / Warcraft 3 Reforged: Патч 1.32.9

Кто нибудь вкурсе, где хранятся данные о звуке, виедо-разрешении Reforged? А то в реестре нашел только данные от 1.26 варкрафта
0
11
4 года назад
0

» WarCraft 3 / Подскажите материалы для взлома карты

mqp editor/mpq master + notepad++/jasscraft + slk editor + vex's tools

но все делается ручками и никак иначе, данные РО еще можно восстановить, но код/триггеры в "первозданном" виде ты уже не восстановишь, только если вручную
0
11
4 года назад
0

» WarCraft 3 / [Reforged] Главное меню в стиле LK

DarkLigthing:
Proshel_Doty:
У меня скачен 8K вариант этого трейлера, его прогнали через нейронную сеть. Попробую разные варианты с него получить, бумерангом как бы да, но это тоже нужно найти кадр) Чтобы не выглядело нелепо)
Лучше тогда сделать не конкретный кадр. А выбрать самые топовые - типа когда Лич меч перед собой "выкинул", когда вонзил его в лед, как лед начал трескаться, как начала Синдрагоса выползать, самый эпичный момент полета, ну и офк ее "рев", когда нежить "засияла" синим пламенем :)
1
11
4 года назад
1

» WarCraft 3 / [Reforged] Главное меню в стиле LK

Самый топовый трейлер из всех, что были в ВоВ :)
0
11
4 года назад
0

» WarCraft 3 / Аура возможно ли сделать и есть ли пример.

Bergi_Bear:
Вариант 4. Периодическим триггером проверяешь наличие ауры у союзных юнитов в радиусе от героя, и если аура есть, то добавляем способность дефолтного уклонения и скрываем её, если ауры нет в большем радиусе - удаляем способность уклонения
Можно вешать 100% промахи на атакующего и через 0.00 (non-periodic) таймер удалять дебафф. Немного костыльно (в статусе будет "прыгать" иконка дебаффа), но без Мемхака один из оптимальных вариков
0
11
4 года назад
0

» WarCraft 3 / Выбор рандомного юнита (числа, области, в целом не важно)

world_editor:
Присвой всем число и через логическую переменную с условием, запрети герою с номером атаковать копию или того кого уже атакуют(если это нужно) Можно не число, а любое значение для сканирования героя например - цвет. Описание конечно размыто и условно, но надеюсь мысль была понятна.
Еще раз напишу - только сначала в теории все так просто, как только начнешь это реализовывать, то столкнешься с кучей подводных камней
0
11
4 года назад
0

» WarCraft 3 / Выбор рандомного юнита (числа, области, в целом не важно)

prog:
respect_gg, алгоритм рабочий, хоть и требует одной маленькой доработки перед финальным использованием, а твой чувак не шарит и, похоже, ничерта не понял в алгоритме, начиная с того, зачем в нем нужны смещения. Первое "смещение" - N = кол-во игроков -1 нужно потому как нумерация от 0 до N включительно. Второе смещение +1 или -1 на некоторых итерациях нужно чтобы рандом не выдал ту-же ячейку в которой алгоритм находится в текущей итерации, это не более чем дешевое исключение ячейки из диапазона рандома.
Впрочем, поскольку ты даже не попытался реализовать этот алгоритм на практике или разобраться в принципах его работы, а сразу заклеймил его не рабочим - я умываю руки. Это будет мое последнее сообщение в этой теме.
Вот тебе алгоритм для твоего уровня, если нормальный не получается осилить:
Вместо перемешивания сдвигай всех на одно и то же случайное число один раз, с сохранением порядка. Это не так круто как полное перемешивание, но никто и не заметит если сдвиг будет рандомный каждый раз. Естественно, с использованием двух массивов, как я описал выше, чтобы исключить ливеров. Если и до этого не допрешь сам - спроси своего друга якобы шарящего в C++, может хоть с этим он справится.
На всякий случай даже подробно разжую:
Перебираешь игроков, тех кто жив записываешь в массив Index. В результате на выходе получаешь массив, в котором в первой ячейке номер первого живого игрока, во второй - номер второго живого игрока - не и важно какие это игроки по номеру - первый живой может быть пятым, а второй восьмым, тогда первая ячейка будет равна пяти, вторая восьми. Так-же нужно посчитать сколько всего их, живых игроков, это тоже удобно сделать тут, пусть это будет число P. А N, как и раньше, будет P-1.
Каким-угодно способом заполняешь массив Numbers числами от 0 и до N, так чтобы в каждой ячейке изначально был её номер.
Потом один раз берешь случайное число R, оно может быть любым, но важно чтобы оно не было кратным P.
Потом прибавляешь к каждой ячейке Numbers это число - R. Еще раз подчеркиваю - R для всех ячеек одинаковое.
Если в результате число в ячейке больше или равно P, то вычитаешь из него P пока оно не станет меньше P.
На этом заканчиваешь работу с массивом Numbers.
Теперь можно как-то использовать полученный массив, а именно:
Циклом от 0 до N проходим с индексом j
в цикле переменной k присваиваем Number[j]
и получаем номера для двух игроков из массива Index
Index[k] и Index[j]
Этот алгоритм тоже с подвохом, просьба тем кто его заметил не раскрывать карты раньше времени
я не в коем случае никого не хочу принизить, я лишь пытаюсь понять как это должно работать. Потому что в целом у меня получается то, что я задумал (через цикл), но в один прекрасный (непонятный) момент он может повести себя странно. Он может до 37 раз (вручную считал) выдавать пары идеально, а на 38 раз весь цикл рушится и приходится заново его запускать. Причем цикл рушится на случайном id, уже проверял - было и 1, и 6, и 4, и 2. То есть как будто хаотично. Хотя до этого все проходит идеально.
Вот ссылка на видео, специально записал, дабы не говорили, что я ничего не пытаюсь сам делать :) youtu.be/KT26LWMI_LY
ПС ESC (то что на видео) это по сути генерация всего, чтобы без лишних вопросов :)

Вроде получилось - 500 (ровно) нажатий и все четко и ровно youtu.be/ZikqrDRgNYs
А нужно было всего лишь в GetRandomInt(0, MaxPlayers) поменять местами MaxPlayers и 0 и хрен пойми в чем разница :)
0
11
4 года назад
0

» WarCraft 3 / Выбор рандомного юнита (числа, области, в целом не важно)

prog:
respect_gg, я уже описал как решить проблему ливеров...
Нам всего-то надо знать сколько живых игроков, это будет N.
Пусть массив с номерами будет Numbers. Пока оставим его пустым.
Берем второй массив, назовем его Index. В Index записываем айдишники живых игроков, сколько бы их ни было, заодно в процессе вычисляем N и заполняем массив Numbers порядковыми номерами от 0 до N.
Выполняем алгоритм из поста выше.
Результат выполнения алгоритма используем так - проходим циклом от 0 до N, с номером итерации j
Index[Number[j]] - один игрок
Index[j] - второй игрок
скинул чуваку, который в с++ шарит, он сказал, что нужен 2 мерный массив, а в идеале якобы 3 мерный, типа даже если изначально, как ты выше писал, сместить N на минус 1 шаг, то получится ровно так же, то есть типа коллизия произойдет, но просто на другой ячейке.
Уже фиг знает, 2 вечер подряд голову ломаю :))))
0
11
4 года назад
0

» WarCraft 3 / Выбор рандомного юнита (числа, области, в целом не важно)

prog:
respect_gg, можно вобще вот так
  1. записываем в массив номера от 0 до N где N это число игроков минус один в ячейки с соответствующими номерами
  2. проходим циклом от N до 0, пусть номер итерации будет i
  3. на каждой итерации получаем случайное число R от 0 до N, Если оно совпало с i, то берем i+1 или i-1, с учетом границ
  4. меняем местами ячейки R и i
  5. если в ячейку i в результате обмена опять попало число с номером этой ячейки, делаем еще один случайный обмен (тут можно не делать дополнительную проверку на коллизию т.к. коллизия не может на этом этапе возникнуть повторно для этой ячейки)
Если я ничего не напутал - получаем на выходе массив чисел в котором числа не повторяются и не находятся в ячейках совпадающих со своим номером.
Использовать это потом - номер ячейки это один игрок, число в ячейке - другой.
Если нужен учет того что игроки могут иметь номера не идущие подряд (ливеры, компьютеры, просто игроки не использующиеся в этой системе) - нам понадобится дополнительный массив с номерами игроков, чтобы превратить номер ячейки и число в ячейке в реальный номер игрока.
Вот в том то и дело - ливеры и т.д. Я хочу это организовать изначально отталкиваясь от кол-ва активных игроков на момент вызова функции и прогоняю всех этих игроков циклом, подбирая им пару. Но не могу понять как конкретно сопоставлять какие либо данные. Я пытался хранить в глобалке последний полученный id, я пробовал на полученный id записывать значение в хэш-таблицу, где ключом являлся опять же этот id (все для дальнейших проверок внутри цикла).
Я помню поднималась подобная тема здесь (еще на старом форуме), но я 2 вечера пытался найти эту тему, но так и не нашел. Но там был способ намного проще и реализован был именно так же.
Я думал возможно кто то вспомнит эту ситуацию.
0
11
4 года назад
0

» WarCraft 3 / Выбор рандомного юнита (числа, области, в целом не важно)

prog:
respect_gg, ну так кто тебе мешает сперва циклом пройтись по массиву то, а не сразу действия делать?

Еще раз повторю суть своей идеи.
  1. Сперва тасуем массив индексов так чтобы они заняли случайные позиции отличные от своих собственных. Алгоритм выстраивается так, чтобы только последняя оставшаяся пара могла быть коллизией.
  2. В конце - проверяем последнюю пару, если она является коллизией, то выбираем случайную другую пару и меняем местами.
  3. Проходим по массиву еще раз, в этот раз уже выполняя нужные действия.
То то и оно, никогда не приходилось с таким дела иметь. Как грамотно составить этот самый алгоритм. Просто через рандом? - не вариант опять же. Уже тестил. Первые 2 игрока могу сразу нарваться друг на друга, а 3 не приделах окажется. То есть вот какая ситуация - Игрок (Красный) получает в соперники Игрока (Синий), а Игрок (Синий) получает в соперники Игрока (Красный). То есть уже на первых двух "прогонах" цикла возникает эта проблема. Я пробовал записывать в глобалку/хэш ID самого первого игрока, чтобы на следующем вызове функции его обойти стороной. Но все равно все "не ладно"
0
11
4 года назад
0

» WarCraft 3 / Выбор рандомного юнита (числа, области, в целом не важно)

Vlod:
Согласен с prog, проще сравнить только последнюю пару и поменять в случае совпадения
Все делается не в пределах одного вызова функции, а через цикл. А перебираются id игроков (GetPlayerId). Возможно с юнитами было бы и проще. Но тут вроде все нормально, а потом бац, минуя все условия - и 1 игрок остается без пары
0
11
4 года назад
0

» WarCraft 3 / Выбор рандомного юнита (числа, области, в целом не важно)

Lord_Teo:
prog:
Lord_Teo, это в любом случае не решает поставленную автором вопроса задачу.
Если быть внимательнее, то про 1 на 1 было только в комментарии. В первом вопросе такого условия не было

respect_gg:
В этом и проблема, чувак :) Должно быть примерно так же, как на картинке. Юниты были изображены лишь для простоты объяснения проблемы. В целом работа идет с ID игроков
Ну, надо было яснее выражаться сразу) Тогда я сдаюсь)))
Я на картинке примерно это отобразил (стрелочками) и примерно описал "Нужно чтобы копии пошли атаковать основных героев, но так, чтобы условная копия под номером 6 не пошла атаковать основного героя под номером 6 ни в коем случае."
0
11
4 года назад
0

» WarCraft 3 / Выбор рандомного юнита (числа, области, в целом не важно)

Lord_Teo:
prog:
DarkLigthing, Lord_Teo, вы оба не учитываете коллизию, которая может возникнуть, если последние двое оставшихся будут одного и того же типа, что нарушает условие согласно которому копии не должны атаковать оригинал.
Какая коллизия, вы че?! Там действие: атаковать случайного! Просто будут несколько героев атаковать одного.
В этом и проблема, чувак :) Должно быть примерно так же, как на картинке. Юниты были изображены лишь для простоты объяснения проблемы. В целом работа идет с ID игроков