Как сделать рандомное число это понятно
Но, при создании нестандартной способности например Сильный удар, возникает проблема возникает проблема
Допустим поставим на карту 2 юнитов с такой способностью и заставим их друг друга бить
Допустим шанс срабатывания способности 20%. Два юнита бьют друг друга и тут замечается, что у одного, например способность либо почти не срабатывает, либо срабатывает очень редко, что в принципе полный бред. Потому что 20%, это как никак, но раз за 5 ударов должно пройти. НО
Совсем куда смешнее ситуация была, когда были две разные абилки, у двух разных героев, и тот у кого была абилка с шансом 15%, срабатывала бывало чаще, чем например у того, у которого была абилка с шансом 30%. Напоминаю, всё та же ситуация, когда два героя одновременно бьют друг друга.
Суть в принципе ясна. Варик генерирует числа, типа например 20,50,60,43,54,78,35,1,32,88 и т.д., а так как для всех войск на карте используется один рандом, то так получается, что когда два героя бьют друг друга, у того, у кого шанс 15% по счастливай случайности срабатывает, а у того у кого 30, нет и поэтому, у того, у кого 30% шанс, способность может не пройти даже после 5 и больше ударов, хотя по логике она должна срабатывать куда чаще.
Получается, что для каждого юнита на карте со способностью, имеющей вероятность срабатывания нужно сделать свою БД рандомов, так сказать сгенерировать ряд рандомных чисел? Или даже не для отдельного юнита, а для отдельной способности каждого юнита?
Или как это реализовать? Подскажите, кто разбирается, как например в том же Варике устроен этот рандом для скилов или в той же Дота2

И вот ещё в теме по этому поводу рассуждал
Получается, что для каждого юнита на карте со способностью, имеющей вероятность срабатывания нужно сделать свою БД рандомов, так сказать сгенерировать ряд рандомных чисел? Или даже не для отдельного юнита, а для отдельной способности каждого юнита?
avuremybe:
Proshel_Doty, ну так втули 20 циклов с рандомом. Будет тебе для 20 абилок.
Ну вот получается к этому и приходим, что нужно делать для каждого
ClotPh:
Proshel_Doty, да вот хотя бы крутилка акса в доте 2 уже именно так работает, и заряды, и перезарядка, и фактически увеличивающийся шанс
другое дело, что не обязательно в базовой информации игрокам слишком много мозги компостировать, им достаточно условно знать про шанс там 15%, 20% или 30%, ну и мб перезарядку
По-моему про крутилку акса ты чего-то не знаешь)
А именно, то что он может прокрутиться 3 раза, когда его бьют 3 юнита всего
И не крутиться почти, когда его бьют 5 крипов
Если бы оно работало, как ты говоришь, то он бы крутился всегда идеально, но там по-моему как раз вот этот безумный рандом
`
ОЖИДАНИЕ РЕКЛАМЫ...
25
Proshel_Doty, то, что я тебе скинул. Я не знаю о каких тестах ты говоришь.
21
avuremybe:
Proshel_Doty, то, что я тебе скинул. Я не знаю о каких тестах ты говоришь.
Да это понятно, я и сам хотел это попробовать с базой данных рандомов для юнитов или для чисел
Я тему то создал для того, чтобы найти нормальное решение и понять как работате рандом в Варике и Дота 2
25
local real r
local integer i
local integer n
local integer a
local integer b
local integer c
local integer d
loop
    exitwhen i > 10000
    if (GetRandomReal(1,100)<20) then
        set n=n+1
    endif
    if (GetRandomReal(1,100)<20) then
        set a=a+1
    endif
    if (GetRandomReal(1,100)<20) then
        set b=b+1
    endif
    if (GetRandomReal(1,100)<20) then
        set c=c+1
    endif
    if (GetRandomReal(1,100)<20) then
        set d=d+1
    endif
    set i = i+1
endloop
Вот тебе для 5 абилок. Выводи себе на экран n, a, b, c, d приходи сюда со скринами, будем смотреть где тебя рандом дурит.
21
Лучше просто делать пассивки с перезарядками и/или каждый X удар/каждое X действие, это справедливее, точнее и лишних вопросов не создаст
И всё-таки, ты приведи конкретный пример с конкретными числами
ВОт я хочу сделать абилку на 20% шанс. Какое колво каких кулдаунов и кол-во ударов нужно брать и как это реализовывать
25
Proshel_Doty, нормально рандом работает. Просто ты не хочешь пойти проверить как оно работает на самом деле. Видимо ждешь, что кто-то сделает это вместо тебя.
21
Я не знаю, как ты понял, что оно нормально работает при exitwhen i > 10000
Я сделал вот так
loop
    exitwhen i > 10
    if (GetRandomReal(1,100)<20) then
        set n=n+1
    endif
    if (GetRandomReal(1,100)<20) then
        set a=a+1
    endif
    if (GetRandomReal(1,100)<20) then
        set b=b+1
    endif
    if (GetRandomReal(1,100)<20) then
        set c=c+1
    endif
    if (GetRandomReal(1,100)<20) then
        set d=d+1
    endif
    set i = i+1
endloop
        call DisplayTextToForce( GetPlayersAll(), "n=" + I2S(n) )
        call DisplayTextToForce( GetPlayersAll(), "a=" + I2S(a) )
        call DisplayTextToForce( GetPlayersAll(), "b=" + I2S(b) )
        call DisplayTextToForce( GetPlayersAll(), "c=" + I2S(c) )
        call DisplayTextToForce( GetPlayersAll(), "d=" + I2S(d) )
В итоге, получаем значения
n=0
a=4
b=4
c=1
d=3
Что же это значит?
Как раз то, о чём я говорю
Допустим это 5 юнитов, одновременно дерущихся между собой с одинаковой скоростью атаки и имеют способность с 20% шансом
Все сделали по 10 ударов
И что же мы видим
За 10 ударов у юнита N ни разу не сработала способность, тогда как у юнита A и B она сработала аж по 4 раза, что в теории должно было быть только за 20 ударов
У юнита C она сработала только 1 раз, ну что ж, хоть что-то
У юнита D 2 раза, вот это уже норм.
В итоге мы снова возвращаемся сюда
Совсем куда смешнее ситуация была, когда были две разные абилки, у двух разных героев, и тот у кого была абилка с шансом 15%, срабатывала бывало чаще, чем например у того, у которого была абилка с шансом 30%. Напоминаю, всё та же ситуация, когда два героя одновременно бьют друг друга.
Ибо есть юнит, у которого за 10 ударов абилка не прокнула ни разу и есть даже 2, у кого она прокнула аж по 4 раза
А вот ещё интересный ряд
n=4
a=1
b=2
c=5
d=2
В этом случае аж 5 раз у одного юнита, ну это вообще кайф)
Это прям как видео про Войда, там где его бэктрэк срабатывает 6 раз подряд и потом через удар ещё 2 раза
Или про Морту, у которой уклонение прокнуло 13 раз подряд
Или Снайпер с 8 хедшотами подряд
Но его понять ещё можно, у него всё-таки 35 или 40% шанс, точно не помню
21
Proshel_Doty, ну ты когда аксом в доте второй в лес идешь, посмотри хоть, че у него на крутилке появляется, когда его бьют
все я как раз знаю
"Хорошо, приведу пример с Лотереей"
с лотереей не правильный пример
там выигрыш одному из пяти гарантирован
а тут тебе уже писали, что по-хорошему случайность срабатывания в первый раз не должна влиять на случайность срабатывания в следующий
ты хочешь, чтобы влияла?
ну так повесь на юнита реалку через хэш-таблицу
и приплюсовывай ее на сколько считаешь нужным за каждое НЕсрабатывание пассивки и прибавляй к шансу срабатывания, а при срабатывании обнуляй
все
получится именно то, что ты хочешь, и настраиваемое
/////////////
Ты плодишь до фига сущностей сверх меры
рандом именно на то или рандом, что теоретически даже при 50% шансе может 20 раз подряд быть провал
иначе все на мартингейле уже миллионерами были бы
если хочешь уменьшить рандом, то см. выше
21
ну ты когда аксом в доте второй в лес идешь, посмотри хоть, че у него на крутилке появляется, когда его бьют
все я как раз знаю
Хз, что у него там появляется, я доту уже 25 дней не запускал
Но я тебе выше написал, как она наглядно работает в это же Доте
ClotPh:
а тут тебе уже писали, что по-хорошему случайность срабатывания в первый раз не должна влиять на случайность срабатывания в следующий
А на какой раз она должна влиять?)
ClotPh:
с лотереей не правильный пример
там выигрыш одному из пяти гарантирован
Хорошо. А тут что, удар не гарантирован? Если он тут как бы тоже гарантирован. У тебя есть критический удар. И есть шанс, что он сработает. Я не говорю, что каждые 5 ударов он должен сработать в любой иэ этих 5 ударов. Я говорю, что он может сработать например 1 раз за 6 ударов, но потом он сработает раз за 2 удара, потом за 4, потом там за 10, потом 2 раза подряд
Но не так, что он не срабатывает почти никогда или наоборот по 5 раз из 10
21
Proshel_Doty,
  1. запусти и посмотри, там все наглядно видно
  2. ни в какой, каждый раз исчезает навсегда после того, как происходит
  3. да, не гарантирован
не вижу смысла объяснять одно и то же по 100500 раз
если случайность работает так, как ты говоришь, иди богатей на мартингейле, только депозит сделай побольше
21
рандом именно на то или рандом, что теоретически даже при 50% шансе может 20 раз подряд быть провал
Та не, это уже бред
Я посмотрю на тебя, когда ты бомбанёшь, играя в доту или другую игру, не важно, потому что твой перс за 20 ударов ни разу не сможет забашить противника, и этот же противник это сделает за 5 ударов с тобой
Тогда я думаю ты откажешься от этих своих слов
21
Proshel_Doty,
а мной где-то говорилось, что это хорошо и нормально?
так потому, что это бредово, от такого рандома и отказываются
мной же выше написано, как сделать легко постоянно увеличивающийся шанс
что не понятно?
21
Рандом то нормальный, но он нормальный для одной последовательности чисел, т.е. например для одной абилки или одного юнита с одной абилкой. Но когда в деле их больше, то получается вот такая хрень
21
вот способ, еще раз, увеличивать шанс срабатывания постепенно
повесь на юнита реалку через хэш-таблицу
и приплюсовывай ее на сколько считаешь нужным за каждое НЕсрабатывание пассивки и прибавляй к шансу срабатывания, а при срабатывании обнуляй
примерно так и делается по идее, только в д2 эти счетчики еще и немного видно каждому игроку
21
да, не гарантирован
Ну лол)))))))))))))
Ага, у тебя в способности написано, что она даёт Критичский удар
Но он не гарантирован!
Правильно, он не гарантирован каждый удар, но не не гарантирован вовсе, он когда-то да будет
И ты знаешь когда, примерно за 20% от ударов которые сделает герой
ClotPh:
вот способ, еще раз, увеличивать шанс срабатывания постепенно
повесь на юнита реалку через хэш-таблицу
и приплюсовывай ее на сколько считаешь нужным за каждое НЕсрабатывание пассивки и прибавляй к шансу срабатывания, а при срабатывании обнуляй
примерно так и делается по идее, только в д2 эти счетчики еще и немного видно каждому игроку
Да лучше тогда делать для каждого ряд рандомов
Осталось только придумать, как это сделать грамотно и не геморройно
21
Proshel_Doty, не знаю, чем тебя мой способ не устраивает
Вот все-таки еще про твою аналогию с лотереей.
Если участвует 5 человек и 5 билетов, а один из них выигрышный, и:
  • первый вариант: каждый берет 1 билет и смотрит его, победа или поражение. Один гарантированно выигрывает, 4 гарантированно проигрывают
  • второй вариант: сперва первый человек берет один билет из пяти и узнает, победа у него или поражение; потом билет возвращается назад и перемешивается и так, пока все пять не попробуют. В этом случае ничтожно мала вероятность, но может не выиграть никто, а могут и все пять вообще
так вот обычный рандом с шансом - это именно второй вариант, а не первый
15
Хорошо, тут я немного перегнул в начале, с этими 5 ударами, но за 10-20 ударов 20%шанс должен сработать,
Не должен. Даже с шансом 99% нанести критический удар, существует возможность нанесения 1 000 000 ударов в ряд без единого выпадения крита. Это не бред, это случайность. Другое дело, ты хочешь чтобы случайность работала так, как ты этого хочешь. Но, опять же, это уже не случайность. Вселенная так не работает.
Или может ты просто путаешь случайность с процентами в статистике уже произошедших событий. Это не одно и то же.
Псевдорандом же действует, а не рандом
Как он действует? Как его сделать
Случайностей не существует в природе. Все рандомные числа, с которыми мы работаем, являются результатом алгоритма, что пытается запутать процесс получения этих чисел, делая этот процесс непонятным интуитивно. Случайности не случайны.
21
GetLocalPlayer, щас он напишет, что это бред и невозможно, чтобы при шансе 99% не прошло ни одного крита за 1 000 000 ударов
21
Не должен. Даже с шансом 99% нанести критический удар, существует возможность нанесения 1 000 000 ударов в ряд без единого выпадения крита. Это не бред, это случайность. Другое дело, ты хочешь чтобы случайность работала так, как ты этого хочешь. Но, опять же, это уже не случайность. Вселенная так не работает.
Бредятина
Я тут в голосину ору
"Это случайность" лол
ТО что ты говоришь, какой-то антинаучный бред
Если из 1 000 000 ударов прокнет один, то это значит, что шанс выпадения этого крита 0,0001%, но никак не 99%
По вашей логике, тогда числа вообще можно засунуть в задницу и так и писать в абилке, выпадает случайно хрен знает в какой раз.
Объясните мне, товарищи, нахрена там пишут количество %? Для прикола?
21
Proshel_Doty, то есть если вот в моём примере выше во втором варианте все пять человек проиграют, значит, вероятность выигрыша была 0%?! Что у тебя за наука такая, интересно
21
ClotPh:
Proshel_Doty, то есть если вот в моём примере выше во втором варианте все пять человек проиграют, значит, вероятность выигрыша была 0%?! Что у тебя за наука такая, интересно
Твой вариант это другая история
Сейчас объясню
Мой вариант
Хорошо, приведу пример с Лотереей
Допустим у нас 5 героев, ёпте
У каждого по 1 выигрышному билету, но только у одного
В итоге, получаем что? То что каждый из них имеет шанс 20% на победу в лотерее
Но победит только один, он будет либо 1, либо 2, либо 3, либо 4, либо 5
Вот примерно так я это вижу
Это примерно равно, что если бы один персонаж нанёс бы 5 ударов. Примерно, потому что не обязательно, что на 5 удар он попадёт, это может быть на 6 или 7 удар, но потом он через удара 3 сможет опять попасть, в общем об этом я писал выше.
А твой вариант
ClotPh:
Если участвует 5 человек и 5 билетов, а один из них выигрышный, и:
первый вариант: каждый берет 1 билет и смотрит его, победа или поражение. Один гарантированно выигрывает, 4 гарантированно проигрывают
второй вариант: сперва первый человек берет один билет из пяти и узнает, победа у него или поражение; потом билет возвращается назад и перемешивается и так, пока все пять не попробуют. В этом случае ничтожно мала вероятность, но может не выиграть никто, а могут и все пять вообще
Это всё равно, что если бы ты после того, как у героя не прокала способность перезапускал бы карту заново
Вот ты запустил карту, герой, ударил, способность не прокнула
Ты её так запустил 5 раз, она не прокнула
Вот аналогия с твоим примером
Каждый раз перетасовывать значения
32
Я не понимаю что не нравится автору? Слишком частое или слишком редкое срабатывание?
21
Не должен. Даже с шансом 99% нанести критический удар, существует возможность нанесения 1 000 000 ударов в ряд без единого выпадения крита.
Но вот это, конечно угар знатный.
Может есть какая-то наука случайностей, я не знаю
Но мы опираемся на логику и играбельность карты, а также числовые значиния, ёпте
И если в твоей карте 99%шанс абилка не прокнет за 100000 раз ни разу, то я не знаю, работает ли она у тебя вообще? И зачем такую карту придумывать?
Да и логика у тебя классная
А 100% шанс, он что тоже может не прокнуть?) Во лол
21
Так а нет разницы, перезапускать карту или нет, пойми, там ничего не тасуется
Чтобы тасовалось, нужно понемногу шанс просто растить, и все, а как сработает - сбрасывать до изначального
Это немного не соответствует действительному шансу, но реально в разы справедливее и разумнее, поэтому именно так обычно и делают
В д2 точно так и сделано уже практически все, та же крутилка акса, например
В д1 в последней хз, но и в варкрафте можно так сделать, как - описано выше
Короче, тебе уже объяснено, как сделать, что ты хочешь, не вижу смысла дальнейших рассуждений
21
quq_CCCP:
Я не понимаю что не нравится автору? Слишком частое или слишком редкое срабатывание?
Proshel_Doty:
Допустим поставим на карту 2 юнитов с такой способностью и заставим их друг друга бить
Допустим шанс срабатывания способности 20%. Два юнита бьют друг друга и тут замечается, что у одного, например способность либо почти не срабатывает, либо срабатывает очень редко, что в принципе полный бред. Потому что 20%, это как никак, но раз за 5 ударов должно пройти. НО
Совсем куда смешнее ситуация была, когда были две разные абилки, у двух разных героев, и тот у кого была абилка с шансом 15%, срабатывала бывало чаще, чем например у того, у которого была абилка с шансом 30%. Напоминаю, всё та же ситуация, когда два героя одновременно бьют друг друга.
Так а нет разницы, перезапускать карту или нет, пойми, там ничего не тасуется
Как это не тасуется?
НУ перезапусти карту и увидишь, что там уже другие значения пойдут
ClotPh:
Короче, тебе уже объяснено, как сделать, что ты хочешь, не вижу смысла дальнейших рассуждений
Да я и сам знаю, как сделать, то что я хочу. Я это знал в теории. Но пока мы тут обменивались мыслями, я даже придумал как это сделать
Просто надо было больше узнать про рандом
А также, что могут посоветовать местные картоделы
GetLocalPlayer:
Не должен. Даже с шансом 99% нанести критический удар, существует возможность нанесения 1 000 000 ударов в ряд без единого выпадения крита. Это не бред, это случайность
А ещё я узнал вот это))
Как теперь с этим спать
21
Proshel_Doty, ну мы на разных языках говорим или я хз
ты вначале сам жалуешься именно на то, что пассивка 30% шанса может срабатывать реже, чем 15%
тебе объясняют, почему это именно так и что это обычно уже исправляют, хотя и немного "в ущерб правдивости", и как это исправить
ты тут начинаешь, что все равно пассивка обязана сработать достаточно быстро
раз обязана и работает, то и смысла этого треда нет
или ты веришь в какой-то заговор, что пассивки на эвейжен, например, работают чаще, чем на крит, или еще что?
короче, все ответы уже даны
Proshel_Doty, я те еще знаешь че страшное могу рассказать
каждый день у человека есть достаточно отличающийся от 0% шанс умереть, втч и во сне
как же ты с этим жить будешь?
Чтобы оставить комментарий, пожалуйста, войдите на сайт.