Как сделать рандомное число это понятно
Но, при создании нестандартной способности например Сильный удар, возникает проблема возникает проблема
Допустим поставим на карту 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 крипов
Если бы оно работало, как ты говоришь, то он бы крутился всегда идеально, но там по-моему как раз вот этот безумный рандом
`
ОЖИДАНИЕ РЕКЛАМЫ...
21
Псевдорандом же действует, а не рандом
"Потому что 20%, это как никак, но раз за 5 ударов должно пройти" - с чего вдруг? Теоретически и за 20 может не пройти, и за миллион (хотя вероятность ничтожно мала).
Лучше просто делать пассивки с перезарядками и/или каждый X удар/каждое X действие, это справедливее, точнее и лишних вопросов не создаст
21
Лучше просто делать пассивки с перезарядками и/или каждый X удар/каждое X действие, это справедливее, точнее и лишних вопросов не создаст
Абсолютно не лучше)) сразу отпадает
Особенно с перезарядкой лол Это что получается, я подойду к юниту, ударю его, отойду потом ударю и так каждый раз будет срабатывать? Это уже похоже на абилку Брюмастера из доты, но там до каждого такого удара 10 сек, короч чёт вообще мутное по-моему.
Шанс срабатывания и срабатывание каждый удар это совсем разные вещи. Ибо так ты точно знаешь, что каждый 5 удар например у тебя будет какое-то действие, а так ты не знаешь, будет это 2 раза подряд или один раз за 10 ударов.
"Потому что 20%, это как никак, но раз за 5 ударов должно пройти" - с чего вдруг? Теоретически и за 20 может не пройти, и за миллион (хотя вероятность ничтожно мала).
Ну допустим может быть случай когда оно не пройдёт раз 10 или 20, как раз 20 это уже прям потолок, какой ещё нафиг миллион...
Но вот ситуация, когда два перса бьют друг друга, и абилка с шансом 15% срабатывает чаще абилки с 30% это уже цирк, который надо как-то исправлять по-моему
Псевдорандом же действует, а не рандом
Как он действует? Как его сделать
21
Как он действует? Как его сделать
Первый удар - 10%
Второй удар - 20%
Третий удар - 30%
Четвёртый удар - 40% и т.д.
Шанс срабатывания растёт с каждым ударом, а в случае прока возвращается обратно на свои изначальные значения.
15
Потому что 20%, это как никак, но раз за 5 ударов должно пройти.
Не должно. Случайность в текущий удар не должна оказывать влияния на случайность в последующий. Случайность на то и случайность.
Другой вопрос в том, что ты эту случайность хочешь контролировать, фактически, делая ее не случайной. Но почему-то не хочешь себе в этом признаваться.
Тут есть варианты
  • Кд после срабатывания, что не позволит меньшему шансу превзойти больший
  • Увеличивать шанс срабатывания после каждого не срабатывания
  • Убрать шанс вовсе, заменив его зарядом. Удары/применение способностей/движение/что-то еще накапливают заряды. При достижении максимума, пассивная способность срабатывает и обнуляет заряд.
32
Proshel_Doty, Нормальный рандом в варике, просто не ненужно думать что рандом - это всегда у всех все поровну, или что это 20 раз за 100 атак, нет не так, до 20 раз за 100 атак, это 20% шанс на рандом.
Для башей давно выдумали кулдауны как в доте, ибо баш в картах типа хиро арен или AOS, где бой ведется в основном одним героем и минимумом подконтрольных войск, там баш очень сильная абилка (собственно все оглушения сильные абилки). Делайте кулдаун на 1 юнита, если юнит от вас уже получал баш, следующий возможен только через 3 сек. (к примеру).
21
Proshel_Doty, "абсолютно не лучше" - ага, то-то практически во всех моба именно так все больше пассивки и делают
21
ClotPh:
Proshel_Doty, "абсолютно не лучше" - ага, то-то практически во всех моба именно так все больше пассивки и делают
Приведи пример работы такой пассивки. Я пока не пойму как это надо реализовать, как ты говоришь, что нужны кулдауны и количество ударов
21
Proshel_Doty, да вот хотя бы крутилка акса в доте 2 уже именно так работает, и заряды, и перезарядка, и фактически увеличивающийся шанс
другое дело, что не обязательно в базовой информации игрокам слишком много мозги компостировать, им достаточно условно знать про шанс там 15%, 20% или 30%, ну и мб перезарядку
21
Потому что 20%, это как никак, но раз за 5 ударов должно пройти.
Не должно. Случайность в текущий удар не должна оказывать влияния на случайность в последующий. Случайность на то и случайность.
Хорошо, тут я немного перегнул в начале, с этими 5 ударами, но за 10-20 ударов 20%шанс должен сработать, ибо если реже это уже бред, а ни как там выше про 10000000 писали, да и 20 даже для 20% шанса это много уже, это как исключение можно уже рассматривать
Другой вопрос в том, что ты эту случайность хочешь контролировать, фактически, делая ее не случайной. Но почему-то не хочешь себе в этом признаваться.
Ну при чём тут контролировать) Я же описал ситуацию
Совсем куда смешнее ситуация была, когда были две разные абилки, у двух разных героев, и тот у кого была абилка с шансом 15%, срабатывала бывало чаще, чем например у того, у которого была абилка с шансом 30%. Напоминаю, всё та же ситуация, когда два героя одновременно бьют друг друга.
Я смотрю на этот вопрос с логической точки зрения
Вот допустим абилка срабатывающая со 100% шансом, он срабатывает каждый 1 раз
Чисто логически абилка с 50% шансом должна срабатывать каждый 2 раз. Но это рандом и мы понимаем, что она Либо сработает 2 раза подряд, потом 2 раза не сработает, либо сработает 1 раз, потом 1 не сработает, либо сработает 3 раза и 3 не сработает, и так будет повторяться. Но, то что абилка с 50% шансом не сработает на 5 удар, например, уже смотрится как-то подозрительно.
Дальше по этому рассуждения абилка с 33% шансом срабатывает каждый 3 удар
Абилка с 20% шансом срабатывает каждый 5 удар. Но опять же как в рассуждении про 50% шанс, тут может быть 10 ударов не сработавших, но потом например, сработают сразу 2 подряд, или сработает 1, потом второй нет и так, например 3 раза подряд. Тут уже достаточно большой разброс.
21
Proshel_Doty,
Jinada Bounty Hunter'a из Dota имеет перезарядку, хоть и является пассивной способностью.
21
ScopteRectuS:
Как он действует? Как его сделать
Первый удар - 10%
Второй удар - 20%
Третий удар - 30%
Четвёртый удар - 40% и т.д.
Шанс срабатывания растёт с каждым ударом, а в случае прока возвращается обратно на свои изначальные значения.
Пока что-то мне псевдорандом не очеьн нравится, посмотреть бы как на него в действии, оставим его на попозже
ScopteRectuS:
Proshel_Doty,
Jinada Bounty Hunter'a из Dota имеет перезарядку, хоть и является пассивной способностью.
Я как бы знаю, что у кого в Доте что делает, джинада тут совсем не к месту)
25
Proshel_Doty, тебе говорят про кулдаун по кол-ву атак, а не по времени.
Если ты хочешь 20 срабатываний из 100 ударов - делай срабатывание на каждый 5й удар.
Раз уж ты все сравнения сводишь к DotA - то вспомни старого Storm Spirit, его пассивка именно так работала.
21
Тут есть варианты
Убрать шанс вовсе, заменив его зарядом. Удары/применение способностей/движение/что-то еще накапливают заряды. При достижении максимума, пассивная способность срабатывает и обнуляет заряд.
Уже было оговорено. Это тогда уже не шанс, а счётчик ударов, а это мне не нужно. Мне нужен шанс, поэтому убирать его нельзя
21
Пока что-то мне псевдорандом не очеьн нравится, посмотреть бы как на него в действии, оставим его на попозже
Ну так все способности из Warcraft 3 имеющие шанс срабатывания и являются псевдорандомными)
21
avuremybe:
Proshel_Doty, тебе говорят про кулдаун по кол-ву атак, а не по времени.
Если ты хочешь 20 срабатываний из 100 ударов - делай срабатывание на каждый 5й удар.
Раз уж ты все сравнения сводишь к DotA - то вспомни старого Storm Spirit, его пассивка именно так работала.
Нет, я хочу рандом, но рандом нормальный, а не безумный
25
Proshel_Doty, так ведь ты в первом посте ясно дал понять, что рандом тебя не устраивает и ты хочешь именно счетчик, который герою с 30% будет выдавать 30 из 100, а герою с 15% - 15 из 100.
21
Нет, вот почитай
Proshel_Doty:
Потому что 20%, это как никак, но раз за 5 ударов должно пройти.
Не должно. Случайность в текущий удар не должна оказывать влияния на случайность в последующий. Случайность на то и случайность.
Хорошо, тут я немного перегнул в начале, с этими 5 ударами, но за 10-20 ударов 20%шанс должен сработать, ибо если реже это уже бред, а ни как там выше про 10000000 писали, да и 20 даже для 20% шанса это много уже, это как исключение можно уже рассматривать
Другой вопрос в том, что ты эту случайность хочешь контролировать, фактически, делая ее не случайной. Но почему-то не хочешь себе в этом признаваться.
Ну при чём тут контролировать) Я же описал ситуацию
Совсем куда смешнее ситуация была, когда были две разные абилки, у двух разных героев, и тот у кого была абилка с шансом 15%, срабатывала бывало чаще, чем например у того, у которого была абилка с шансом 30%. Напоминаю, всё та же ситуация, когда два героя одновременно бьют друг друга.
Я смотрю на этот вопрос с логической точки зрения
Вот допустим абилка срабатывающая со 100% шансом, он срабатывает каждый 1 раз
Чисто логически абилка с 50% шансом должна срабатывать каждый 2 раз. Но это рандом и мы понимаем, что она Либо сработает 2 раза подряд, потом 2 раза не сработает, либо сработает 1 раз, потом 1 не сработает, либо сработает 3 раза и 3 не сработает, и так будет повторяться. Но, то что абилка с 50% шансом не сработает на 5 удар, например, уже смотрится как-то подозрительно.
Дальше по этому рассуждения абилка с 33% шансом срабатывает каждый 3 удар
Абилка с 20% шансом срабатывает каждый 5 удар. Но опять же как в рассуждении про 50% шанс, тут может быть 10 ударов не сработавших, но потом например, сработают сразу 2 подряд, или сработает 1, потом второй нет и так, например 3 раза подряд. Тут уже достаточно большой разброс.
Хорошо, приведу пример с Лотереей
Допустим у нас 5 героев, ёпте
У каждого по 1 выигрышному билету, но только у одного
В итоге, получаем что? То что каждый из них имеет шанс 20% на победу в лотерее
Но победит только один, он будет либо 1, либо 2, либо 3, либо 4, либо 5
Вот примерно так я это вижу
25
Proshel_Doty, если ты хочешь не псевдо-рандом, а "рандом нормальный", то при каждом ударе обсчитывай шанс триггерно:
if (GetRandomReal(1,100)>=20) then
    ...
endif
21
avuremybe:
Proshel_Doty, если ты хочешь не псевдо-рандом, а "рандом нормальный", то при каждом ударе обсчитывай шанс триггерно:
if (GetRandomReal(1,100)>=20) then
    ...
endif
Так вот я так и делаю и получается вот это
Совсем куда смешнее ситуация была, когда были две разные абилки, у двух разных героев, и тот у кого была абилка с шансом 15%, срабатывала бывало чаще, чем например у того, у которого была абилка с шансом 30%. Напоминаю, всё та же ситуация, когда два героя одновременно бьют друг друга.
Или может я просто не всё знаю, как работает рандом в варике?
Я не сказал, что эти две разные абилки обсчитываются в одном триггере или функции
Т.е. сначала идёт проверка первой абилки, там просчитывается шанс
Потом за ней вторая там тоже шанс
И так все существующие пассивные абилки
Т.е. в итоге получается, что шанс просчитывается одновременно не для одной абилки а для всех, которые сработали в заданный момент.
Например, у одного перса есть Способность на уклонение, и есть способность Баш, а у второго есть способность Критический удар
И для каждой получаем рандомный шанс
25
Proshel_Doty, выведи себе на экран n и убедись уже, что рандом работает как положено.
local real r
local integer i
local integer n
loop
    exitwhen i > 10000
    if (GetRandomReal(1,100)<20) then
        set n=n+1
    endif
    set i = i+1
endloop
21
avuremybe:
Proshel_Doty, выведи себе на экран n и убедись уже, что рандом работает как положено.
local real r
local integer i
local integer n
loop
    exitwhen i > 10000
    if (GetRandomReal(1,100)<20) then
        set n=n+1
    endif
    set i = i+1
endloop
Для одной абилки да)
Но я ж объясняю, что когда их срабатывает сразу несколько получается лажа
25
Proshel_Doty, ну так втули 20 циклов с рандомом. Будет тебе для 20 абилок.
21
И вот ещё в теме по этому поводу рассуждал
Получается, что для каждого юнита на карте со способностью, имеющей вероятность срабатывания нужно сделать свою БД рандомов, так сказать сгенерировать ряд рандомных чисел? Или даже не для отдельного юнита, а для отдельной способности каждого юнита?
avuremybe:
Proshel_Doty, ну так втули 20 циклов с рандомом. Будет тебе для 20 абилок.
Ну вот получается к этому и приходим, что нужно делать для каждого
ClotPh:
Proshel_Doty, да вот хотя бы крутилка акса в доте 2 уже именно так работает, и заряды, и перезарядка, и фактически увеличивающийся шанс
другое дело, что не обязательно в базовой информации игрокам слишком много мозги компостировать, им достаточно условно знать про шанс там 15%, 20% или 30%, ну и мб перезарядку
По-моему про крутилку акса ты чего-то не знаешь)
А именно, то что он может прокрутиться 3 раза, когда его бьют 3 юнита всего
И не крутиться почти, когда его бьют 5 крипов
Если бы оно работало, как ты говоришь, то он бы крутился всегда идеально, но там по-моему как раз вот этот безумный рандом
Принятый ответ
25
Proshel_Doty, ты протестируй сначала. Потому что на данный момент, ты не понимаешь о чем говоришь.
Вот когда увидишь наглядно, что все работает как положено - тогда возвращайся с вопросами.
21
avuremybe:
Proshel_Doty, ты протестируй сначала. Потому что на данный момент, ты не понимаешь о чем говоришь.
Вот когда увидишь наглядно, что все работает как положено - тогда возвращайся с вопросами.
Протестировать что?))
Я как бы про результы тестов и говорю
Или о каких тестах ты говоришь?
Чтобы оставить комментарий, пожалуйста, войдите на сайт.