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

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

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

EHP_Sequence, может что-то не усмотрел в триггере, там куча переменных задействована, может какая-то задействована до того, как значение получает, ну или что-то вроде того.
Попробуй использовать эту систему:
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
27
5 лет назад
Отредактирован MpW
0
при старте карты (заполняем базу данных, вбиваете типы):
//стандартный неизменчивый список
set TypeHero[0] = "Паладин"
set TypeHero[1] = ....
set TypeHero[2] = ....

//второй список (этот список будет изменяться, кол-во свободных героев становится меньше)
set TypeHero2[0] = "Паладин"
set TypeHero2[1] = ....
set TypeHero2[2] = ....

set MaxHero = 2
когда будете приобретать рандом героя, перезапись списка
set r = GetRandomInteger(0,MaxHero)
Создать героя TypeHero2[r]

set i = 0 //счетчик цикла
set a = 0 //счетчик свободных героев
loop
	exitwhen i > 2 //у меня макс число героев в станд списке = 2 (0,1,2)
	if TypeHero2[r] == TypeHero[i] then //надо найти номер типа i из станд списка
		set b[i] = true //записываем что занят
	endif
	if not b[i] then //если не занят
		set TypeHero2[a] = TypeHero[i] //перезапись типа
		set a = a + 1
	endif
	set i =i+1
endif
set MaxHero = a
0
26
5 лет назад
0
Steal nerves, так у него есть в триггерах и база, и счётчик, но не работает обнуление лимита. Если же делать просто замену героя через Replace (на патче 1.26а), то лимит на второго героя теряется, сразу надо строить Замок. То есть, например, есть Ратуша, нанимаю героя и заменяю его после найма на случайного, следующего героя позволяет нанять только при Замке, минуя Крепость.

EHP_Sequence, может что-то не усмотрел в триггере, там куча переменных задействована, может какая-то задействована до того, как значение получает, ну или что-то вроде того.
Попробуй использовать эту систему:
Загруженные файлы
Принятый ответ
4
8
5 лет назад
4
Steal nerves:
когда будете приобретать рандом героя, перезапись списка
set r = GetRandomInteger(0,MaxHero)
Создать героя TypeHero2[r]

set i = 0 //счетчик цикла
set a = 0 //счетчик свободных героев
loop
	exitwhen i > 2 //у меня макс число героев в станд списке = 2 (0,1,2)
	if TypeHero2[r] == TypeHero[i] then //надо найти номер типа i из станд списка
		set b[i] = true //записываем что занят
	endif
	if not b[i] then //если не занят
		set TypeHero2[a] = TypeHero[i] //перезапись типа
		set a = a + 1
	endif
	set i =i+1
endif
set MaxHero = a
Зачем делать эти лишние действия с подсчетом занятых и не занятых юнитов перезаписывая весь массив каждый раз заново, если можно сделать так:
set r = GetRandomInteger(0,MaxHero)
Создать героя TypeHero2[r]

set TypeHero2[r] = TypeHero2[MaxHero]
set TypeHero2[MaxHero] = null
set MaxHero = MaxHero - 1
0
27
5 лет назад
Отредактирован MpW
0
8gabriel8, ну тогда с 3 даймиками.
pAxsIs,+++ иногда бывает нужно порядок не нарушать. У меня такое было. здесь как бы необязательно соблюдать, все таки рандом
0
12
5 лет назад
0
8gabriel8:
Steal nerves, так у него есть в триггерах и база, и счётчик, но не работает обнуление лимита. Если же делать просто замену героя через Replace (на патче 1.26а), то лимит на второго героя теряется, сразу надо строить Замок. То есть, например, есть Ратуша, нанимаю героя и заменяю его после найма на случайного, следующего героя позволяет нанять только при Замке, минуя Крепость.

EHP_Sequence, может что-то не усмотрел в триггере, там куча переменных задействована, может какая-то задействована до того, как значение получает, ну или что-то вроде того.
Попробуй использовать эту систему:
Спасибо, эта реализация наиболее близка к тому, что нужно. Но у меня не получается адекватно перенести ее на свою карту и я не понимаю, как сделать так, чтобы был доступен новый герой (25-й по счету) среди случайных.
Хмм, все равно первого героя можно нанять 100 раз.
А, сорри, разобрался. Просто при импорте эти "first random hero" перемешались, но я исправил. Теперь героев нельзя нанять 100 раз.
0
26
5 лет назад
0
Как героя добавить разобрался?
0
12
5 лет назад
0
8gabriel8:
Как героя добавить разобрался?
Вот с этим не совсем ясно. Добавил в набор героев (которые от 1 до 24) 25-го героя и вместо "от 1 до 24" заставил переменную пробегать "от 1 до 25" (25 соответствует новому герою). Вроде теперь случайный выбор должен учитывать и нового героя. Правильно ли это?
0
26
5 лет назад
Отредактирован 8gabriel8
0
В Train 3 не только с 24 на 25 надо поменять, но и вообще кучу чисел для переменной x поднять на единичку, не 23, а 24, не 25, а 26...

В триггер Melee Initialization смени Do Multiple ActionsFor each (Integer x) from 1 to 12, do (Actions) на Do Multiple ActionsFor each (Integer x) from 1 to 24, do (Actions), так как у тебя максимум игроков не 12, а 24.
0
12
5 лет назад
0
8gabriel8:
В Train 3 не только с 24 на 25 надо поменять, но и вообще кучу чисел для переменной x поднять на единичку, не 23, а 24, не 25, а 26...

В триггер Melee Initialization смени Do Multiple ActionsFor each (Integer x) from 1 to 12, do (Actions) на Do Multiple ActionsFor each (Integer x) from 1 to 24, do (Actions), так как у тебя максимум игроков не 12, а 24.
Да, спасибо, теперь разобрался.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.