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

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

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

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

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