Собственно, вопрос, как бы глупо ни звучал, но такой. Как реализовать случайных героев на карте? Подскажите, пожалуйста, триггерную реализацию (может, уже готовую) для случайных героев. У меня есть пример, но в нем баг - можно нанимать любое количество героев бесплатно. Хотелось бы без этого глюка. Почему не на джассе - т.к. на карте много гуи-объектов и неясно, как все будет взаимодействовать друг с другом (а я не знаю джасс, так что в случае чего не смогу разобраться с ошибками).
Также скажу, что героев более 24 стандартных.

Steal nerves, так у него есть в триггерах и база, и счётчик, но не работает обнуление лимита. Если же делать просто замену героя через Replace (на патче 1.26а), то лимит на второго героя теряется, сразу надо строить Замок. То есть, например, есть Ратуша, нанимаю героя и заменяю его после найма на случайного, следующего героя позволяет нанять только при Замке, минуя Крепость.

EHP_Sequence, может что-то не усмотрел в триггере, там куча переменных задействована, может какая-то задействована до того, как значение получает, ну или что-то вроде того.
Попробуй использовать эту систему:
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
есть статья на эту тему
так что клоз
ответ
ssbbssc, WarSC, оба офнитесь
фигню несёте
судя по тому что написал афтар ему нужен чит позволяющий ему строить любого героя
но триггеров он не знает
поэтому сначала читаем статьи
потом делаем триггер
событие - игрок вводит текст -cheat
действие - создать триггерному игроку строителя способного строить особый алтарь
простейший триггер
ответ
Что там за ужасные условия?
Короче. Можешь сделать вот так вота:
Исходные данные- массив героев.
1 способ- создаешь массив, размер которого = размеру массива героев и заполняешь его линейным методом. То есть с помощью рандома выбираешь первое число. И потом с помощью последовательности i+(k*q), где i- изначальная ячейка; k- попытка: q- шаг.
2 способ- также создаешь массив, но заполняешь его вот так: рандомом выбираешь героя. Проверяешь, имеется ли уже такой в новом массиве. Если да- перевыбираешь, если нет- вставляешь и переходишь к следующей ячейки
Таким образом каждую игру будет генерироваться твой массив случайным образом. Заводишь переменную s, считающую сколько героев уже вытащили, и создаешь героя из твоего нового сформированного массива под номером s
Проще сказать: формируй каждую игру новый массив и вытаскивай по одному герою из него каждый раз, когда требуется
ответ
Потому что при стандартном получении опыта вмешиваются игровые константы и формулы по которым они работают, либо своя система это тогда смотри 3 вопрос от бота, либо настраивай игровые константы как тебе надо, это все описано в базовой статье по редактору, раздел формулы WE.

9
Сформулируй мысль нормально.
Тебе нужен -random как в доте? Или что-то другое?
12
noyl:
Сформулируй мысль нормально.
Тебе нужен -random как в доте? Или что-то другое?
Случайные герои в FFA-Melee. Как в посте 2 из комментария бота. В алтарях есть воин пустышка, по созданию которого запускается триггер на выбор рандомного героя. Выбранный герой даётся игроку вместе с таун порталом. Далее, такие же пустышки на тир2 и тир-3, уже без тп.
Нужно, чтобы этот юнит (каждый из трех/) пропадал из алтаря после заказа
26
В наработке просто замена героя? Просто мне казалось, что это обычным реплейсом делают.
12
8gabriel8:
В наработке просто замена героя? Просто мне казалось, что это обычным реплейсом делают.
В наработке система триггеров. Посмотрите, если есть возможность.
Загруженные файлы
26
Не дома, сделай скрин, пожалуйста.
Тем более у меня версия 1.26а скорее всего не откроет.
12
8gabriel8:
Не дома, сделай скрин, пожалуйста.
Тем более у меня версия 1.26а скорее всего не откроет.
Окей. Такой триггер задан в "Melee initialization": pp.userapi.com/c847124/v847124251/14c81f/tSHNVzd5jFU.jpg pp.userapi.com/c847124/v847124251/14c829/kuso6dncnZ4.jpg
Такой триггер создает рандомных героев: pp.userapi.com/c847124/v847124251/14c815/V04541imr4o.jpg
27
при старте карты (заполняем базу данных, вбиваете типы):
set TypeHero[0] = "Паладин"
set TypeHero[1] = ....
set TypeHero[2] = ....
При событии - юнит завершает подготовку (или юнит в ходит в зону)
Условие - тип даймика (пустышки)
Действие 1: удаляем даймика
Действие 2: создаем рандомного героя
set <целочисленная> = GetRandomInteger(0,2) Есть такая команда. выбирается рандомное число в промежутке от 0 до 2. У вас там 25 типов, ставите от 1 до 25.
далее создать героя TypeHero[<целочисленная>]
так у вас же все есть на скринах. ничего не понял, что вы пытаетесь сделать. Я думал вам нужна обычная ФФА, где рандомные герои выпадают
12
Steal nerves:
при старте карты (заполняем базу данных, вбиваете типы):
set TypeHero[0] = "Паладин"
set TypeHero[1] = ....
set TypeHero[2] = ....
При событии - юнит завершает подготовку (или юнит в ходит в зону)
Условие - тип даймика (пустышки)
Действие 1: удаляем даймика
Действие 2: создаем рандомного героя
set <целочисленная> = GetRandomInteger(0,2) Есть такая команда. выбирается рандомное число в промежутке от 0 до 2. У вас там 25 типов, ставите от 1 до 25.
далее создать героя TypeHero[<целочисленная>]
так у вас же все есть на скринах. ничего не понял, что вы пытаетесь сделать. Я думал вам нужна обычная ФФА, где рандомные герои выпадают
То, что на скринах, даёт баг -- этих даммиков можно нанимать неограниченное число раз, соответственно, будет неограниченное число героев. Нужно каким-то образом запретить нанимать более одного такого даммика.
А глобально да, цель - создать ффа с рандомыми героями.
27
EHP_Sequence, а зачем ты на три даймика поделил? чтобы вручить первому свиток тп?) можно же по-другому сделать, без такого гемороя. через счетчик героев.

вам нужно чтобы никто не мог его выбрать (точнее не выпадала дважды)? и пытаетесь это реализовать, правильно? у там какие-то вычисления идут непонятные, можно сделать по-другому
вам нужно что этот тип не выпадал дважды у всех игроков, или у одного игрока?
карту не смог открыть
12
Steal nerves:
EHP_Sequence, а зачем ты на три даймика поделил? можно же по-другому сделать, без такого гемороя. через счетчик героев.
вам нужно чтобы никто не мог его выбрать (точнее не выпадала дважды)? и пытаетесь это реализовать, правильно?
вам нужно что этот тип не выпадал дважды у всех игроков, или у одного игрока?
карту не смог открыть
Нет, проблема в другом. У нас есть алтари, в которых нанимается даммик с именем "нанять случайного героя". Но после нажатия и начала тренинга этого даммика он не пропадает - можно нанять ещё сколько угодно этих пустышек, и для каждого из них будет герой. Т.е. у каждого игрока может быть любое количество героев, сколько он нажмёт на иконку. Нужно это запретить, т.е. чтобы после начала тренинга первого дамика иконка переставала нажиматься И становилась доступной только на тир2, а потом только на тир3.
10
EHP_Sequence:
Steal nerves:
EHP_Sequence, а зачем ты на три даймика поделил? можно же по-другому сделать, без такого гемороя. через счетчик героев.
вам нужно чтобы никто не мог его выбрать (точнее не выпадала дважды)? и пытаетесь это реализовать, правильно?
вам нужно что этот тип не выпадал дважды у всех игроков, или у одного игрока?
карту не смог открыть
Нет, проблема в другом. У нас есть алтари, в которых нанимается даммик с именем "нанять случайного героя". Но после нажатия и начала тренинга этого даммика он не пропадает - можно нанять ещё сколько угодно этих пустышек, и для каждого из них будет герой. Т.е. у каждого игрока может быть любое количество героев, сколько он нажмёт на иконку. Нужно это запретить, т.е. чтобы после начала тренинга первого дамика иконка переставала нажиматься И становилась доступной только на тир2, а потом только на тир3.
Можно сделать дамми юнита героем и лимитировать кол-во. Или ограничить подготовку обычных. В категории Игрок есть такая функция
12
Скажу также, что дублирование героеа (т.е. что могут выпасть одинаковые герои у одного игрока) не является проблемой.
10
Или сделать 3 типа дамиков. И менять после каждого найма. При этом для последующего нужен будет ап гл. здания. В настройках самого юнита можно сделать, а после - ограничить триггерно
27
Но после нажатия и начала тренинга этого даммика он не пропадает
он же должен пропадать, у тебя же лимит стоит
12
Steal nerves:
Но после нажатия и начала тренинга этого даммика он не пропадает
он же должен пропадать, у тебя же лимит стоит
Вот не пропадет дамиик этот. Можно нанимать миллион даммиков, каждый из миллиона будет случайно выбранным героем.
27
у меня все работает, скидываю карту
а точняк, эта штука работает (прячет), если ты заказал. А когда цель (даймик) умирает, у тебя заново появляется. А ты его сразу убиваешь, поэтому и заказать можно дохера
Загруженные файлы
12
Я ещё скажу, что патч 1.30.2 (последний), вдруг это тоже влияет (у многих здесь другие патчи).
Steal nerves, спасибо, дома посмотрю.
Steal nerves:
у меня все работает, скидываю карту
а точняк, эта штука работает (прячет), если ты заказал. А когда цель (даймик) умирает, у тебя заново появляется. А ты его сразу убиваешь, поэтому и заказать можно дохера
Т.е. даммику надо дать москитов и не убивать после выхода?
27
EHP_Sequence, ну ReplaceUnit (это удаление старого и создание нового юнита, там BJ-функцию раскрути).
Т.е. даммику надо дать москитов и не убивать после выхода?
я бы все равно бы их удалил бы. Но все равно, это надо счетчиком учитывать (спец триггером ловить заход героев на карту, и лимитировать это). Счетчиком проверяешь, если героев стало 2, лимит стал 1. Поскольку, еще ты можешь не только в алтаре, но и в нейтральном магазине нанять.
надо все продумать короче (там же есть события начинает тренинг +1, отменяет тренинг -1, завершает тренинг)

чего туплю. есть лимит на героев. делай даймиков героями. Удаляешь их. И создаешь нужных. Все.
4
Я когда то давно делал подобную тему, но боты наотрез отказывались управлять рандомным героем не своей расы. Сейчас мне стало просто интересно: а мог ли я все-таки настроить это?
27
вам нужно чтобы никто не мог его выбрать (точнее не выпадала дважды)? тогда нужен другой подход - логическая массивная переменная b на каждого героя. Если приобретаешь, ставишь true
раскрыть
  1. если нужно чтобы тип героя дважды не распространялся среди всех игроков
достаточно узнать какой тип, и поставить true
поможет цикл
n - номер игрока
k - счетчик героев
a=false - логическая (это переменная для цикла, будет говорить, что вы приобрели героя)
loop
	exitwhen a //условия выхода из цикла, сразу же выходит из цикла если нашли свободного героя
	
	set r = GetRandomInteger(1,25)
	if not b[r] then //если тип не занят
		set a = true
		//Создать героя с TypeHero[r]
		set b[r] = true
	endif
endloop

  1. если нужно чтобы тип героя дважды не распространялся у игрока
b[1-25] - для красного (0)
b[26-50] - для синего (1)
b[51-100] - для сине-зеленого (2)
поможет цикл
n - номер игрока
k - счетчик героев
a=false - логическая (это переменная для цикла, будет говорить, что вы приобрели героя)
loop
	exitwhen a //условия выхода из цикла, сразу же выходит из цикла если нашли свободного героя
	
	set r1 = GetRandomInteger(1,25)
	set r2 = (n*25) + r1
	if not b[r2] then //если тип не занят
		set a = true
		//Создать героя с TypeHero[r1]
		set b[r2] = true
	endif
endloop
24
Steal nerves, вот только вместо перебора всего массива лучше хранить кол-во доступных героев, делать одну случайную выборку из массива, уменьшать кол-во доступных на 1, а выбраную ячейку менять местами с последней. Иначе есть риск очень долго нарываться на занятые ячейки, вплоть до прерывания потока по лимиту операций (сам в это вляпывался когда начинал, очень неприятно потом искать причину по которой иногда героев отказывается спавнить на ровном месте).
43
А не проще сделать тупо поочередную покупку, и при покупке удалять уже купленных героев? В выборе рандома перебрать максимальное значение, так к примеру было 24 перса, выбрали скажем паладина, который 22, делаем перерасчет уже на 23 и 22 перс будет 23, скажем так заполнение пустых ячеек.
26
EHP_Sequence, пришёл домой и посмотрел. Наверное, проблема в патче 1.30.2, он ведь тестовый. Там похоже не работает корректно обнуление лимита. Он должен обнулять наём случайного героя после найма, но не делает этого, как ты описываешь.
Вряд ли это поможет, но кто его знает, попробуй на jass прописать действия с лимитом. Для этого замени их на Custom Script, где пропиши, например, вместо такого действия Limit training of First Random Hero to 0 for Pnum такой custom script:
call SetPlayerTechMaxAllowed(udg_Pnum, '_равкод_', 0)
Равкод First Random Hero можешь увидеть в Редакторе объектов, нажав Ctrl+D.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.