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

Принятый ответ

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

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

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

чего туплю. есть лимит на героев. делай даймиков героями. Удаляешь их. И создаешь нужных. Все.
0
3
5 лет назад
0
Я когда то давно делал подобную тему, но боты наотрез отказывались управлять рандомным героем не своей расы. Сейчас мне стало просто интересно: а мог ли я все-таки настроить это?
0
27
5 лет назад
Отредактирован MpW
0
вам нужно чтобы никто не мог его выбрать (точнее не выпадала дважды)? тогда нужен другой подход - логическая массивная переменная 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
2
24
5 лет назад
Отредактирован prog
2
Steal nerves, вот только вместо перебора всего массива лучше хранить кол-во доступных героев, делать одну случайную выборку из массива, уменьшать кол-во доступных на 1, а выбраную ячейку менять местами с последней. Иначе есть риск очень долго нарываться на занятые ячейки, вплоть до прерывания потока по лимиту операций (сам в это вляпывался когда начинал, очень неприятно потом искать причину по которой иногда героев отказывается спавнить на ровном месте).
1
48
5 лет назад
1
А не проще сделать тупо поочередную покупку, и при покупке удалять уже купленных героев? В выборе рандома перебрать максимальное значение, так к примеру было 24 перса, выбрали скажем паладина, который 22, делаем перерасчет уже на 23 и 22 перс будет 23, скажем так заполнение пустых ячеек.
0
27
5 лет назад
0
N7 Molot, хотел предложить это
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.