Подскажите, как сделать чтобы действие в триггере выполнялось с определенной вероятностью, при этом чтобы при невыполнении одного действия выполнялось другое.

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

есть такая функция, которая достает случайное число из заданного вами промежутка. Почти все варкрафтеры с помощью нее строят рандомные события в игре, заклинания и пр.Смотри в разделе целое число (integer), или действительное число (real)

set i = GetRandomInt(i0,i1) - достает случайное целое число из промежутка i0- i1
set r = GerRandomReal(x0,x1) - аналогично, только реальное число
и с помощью нее пляем, делаем проверки.
ненужное
часто с помощью нее делают скилы с критическим ударом, уклонением, стан и пр. в таких заклинаниях делают проверку на шанс. можете посмотреть на нашем сайте, тут часто спрашивали как с шансом что-то сделать.
пример 50% шанс нанести 1.5x урона, и иначе промах
set i = GetRandomInt(0,100)
if i>50 then //если целое число больше 50
//нанести 1.5x урон
elseif i<50 then //иначе если меньше 50
//промах, хиляем
endif
аналогично и с реальным числом
set r = GetRandomReal(0.00,1.00)
if r>0.50 then //если целое число больше 50
//нанести 1.5x урон
elseif r<0.50 then //иначе если меньше 50
//промах, хиляем
endif

или
set i = GetRandomInt(0,1)
if i==0 then //если целое число равно 0
//нанести 1.5x урон
elseif i==1 then //иначе если число рано 1
//промах, хиляем
endif
тоже самое можно сделать все что угодно.
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
19
5 лет назад
2
Похожие вопросы:

ответ
Ухаха. Парень, ознакомься, что такое утечки, прикрепление в помощь.
ответ
Ну, перенеси всё это clawbfs.ucoz.ru/forum/3-2-1 и итемы и две игровые карты с кучей режимов и сотни шапок и т. д. + в 2 раза больше новых идей clawbfs.ucoz.ru/forum/7 clawbfs.ucoz.ru/forum/16-1571-1 clawbfs.ucoz.ru/forum/9 со всеми функциями варкрафта (а их там всё же не так уж и мало) в игру на юнити или ещё куда в один присест, сделай дело доброе.
Бтв, про сбор команды - для продвинутых сущностей нередко исправлять за другими оказывается тяжелее, чем делать самому, важно создать максимально комфортные условия для созидания, вот для чего деньги не лишние, а уж дело и самому можно делать.
И, да, тема-то не про то, надо это или не надо, а про то, как лучше это сделать, я про это и в стартовом сообщении написал.
Я на крайний сам вопрос по варианту 3 проверю и/или будет сделан выбор между третьим вариантом, вторым, каким-то ещё и отказом от Cooldown Reduction, но если кто поможет - спасибо.
ответ
идем читать статьи
ищем фразы - запретить заклинание, спелл бук, триггеры
ответ
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.
ответ
нормальный в варкрафте рандом, это человек делает микроскопическую выборку и удивляется результатам

3
27
5 лет назад
Отредактирован MpW
3
есть такая функция, которая достает случайное число из заданного вами промежутка. Почти все варкрафтеры с помощью нее строят рандомные события в игре, заклинания и пр.Смотри в разделе целое число (integer), или действительное число (real)

set i = GetRandomInt(i0,i1) - достает случайное целое число из промежутка i0- i1
set r = GerRandomReal(x0,x1) - аналогично, только реальное число
и с помощью нее пляем, делаем проверки.
ненужное
часто с помощью нее делают скилы с критическим ударом, уклонением, стан и пр. в таких заклинаниях делают проверку на шанс. можете посмотреть на нашем сайте, тут часто спрашивали как с шансом что-то сделать.
пример 50% шанс нанести 1.5x урона, и иначе промах
set i = GetRandomInt(0,100)
if i>50 then //если целое число больше 50
//нанести 1.5x урон
elseif i<50 then //иначе если меньше 50
//промах, хиляем
endif
аналогично и с реальным числом
set r = GetRandomReal(0.00,1.00)
if r>0.50 then //если целое число больше 50
//нанести 1.5x урон
elseif r<0.50 then //иначе если меньше 50
//промах, хиляем
endif

или
set i = GetRandomInt(0,1)
if i==0 then //если целое число равно 0
//нанести 1.5x урон
elseif i==1 then //иначе если число рано 1
//промах, хиляем
endif
тоже самое можно сделать все что угодно.
Принятый ответ
3
29
5 лет назад
3
Steal nerves, нет редактора под рукой, но алгоритм простой
if GetRandomInteger(0,100) <= 30 then
// 30% chance
else
// 70% chance
endif
0
24
5 лет назад
0
Вот только это наивная реализация и реального шанса в нужное кол-во % не обеспечивает с высокой точностью. Поэтому часто делают более сложно - считают кол-во попыток и срабатываний и подгоняют шансы динамически так чтобы на X попыток гарантированно было Y срабатываний.
0
29
5 лет назад
Отредактирован nazarpunk
0
Вот только это наивная реализация и реального шанса в нужное кол-во % не обеспечивает с высокой точностью.
А чем плох этот алгоритм в рамках заданного вопроса?
0
24
5 лет назад
0
NazarPunk, да ничем, собственно, я просто уточнил нюанс.
0
26
5 лет назад
0
Об этом в 5 варианте бота отлично описано.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.