• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток! Спешите принять участие в оценке работ на конкурсе "Таинственные миры" 2024!
    Ждем именно вас!

    Ссылка на конкурсную тему - тык
    Ссылка на тему с работами участников- тык
Иконка ресурса

[Плагин Union] Равномерный шанс - Плагин сломан, не качайте

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
1.492
Благодарности
2.108
Баллы
365
LikerGothic добавил(а) новый ресурс:

[Плагин Union] Равномерный шанс критических ударов в ближнем бою / Melee random crit improve - Улучшает шанс критических ударов в ближнем бою, делая его равномерным

Что делает этот мод?
Вы замечали, что имея, скажем, 30% владения вы 10 ударов подряд могли не критануть по врагу? Это связано с плохой работой генератора случайных чисел.
  • Данный мод исправляет эту проблему.
  • Работает для одноручного и двуручного оружия.
  • Шанс крита становится именно таким, какое у вас владения (не будет такого, что при 20% шанса крита бы 15 раз не кританули)
Совместимость:
Требуется: Готика 2 Ночь ворона

Мод будем совместим почти со всеми...

Узнать больше об этом ресурсе...
 

Lorddemonik

★★★★★
Редактор раздела
Регистрация
17 Дек 2011
Сообщения
1.007
Благодарности
516
Баллы
350
Псевдорандом прикрутил?
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
1.492
Благодарности
2.108
Баллы
365
Lorddemonik, да, накапливается счетчик. Работает очень хорошо (перенес из другого мода, где это штука уже года полтора)
 
Последнее редактирование:

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
1.492
Благодарности
2.108
Баллы
365
LikerGothic обновил(а) ресурс [Плагин Union] Равномерный шанс критических ударов в ближнем бою / Melee random crit improve новой записью:

1.1

  1. DLL пересобрана под более старую версию компилятора (меньше вероятности ложного срабатывания защитника windows)

Узнать больше об этом обновлении...
 

avx1024

Участник форума
Регистрация
28 Дек 2017
Сообщения
13
Благодарности
43
Баллы
165
да, накапливается счетчик. Работает очень хорошо
У меня прямо стохастические кошки на душе заскребли.
А почему не использовал генератор нормального распределения из стандартной библиотеки C++ ? Он еще с 11 стандарта появился.
Там код вообще копеечный получается:
C++:
bool hasCritical(const float ability/*[0.0 - 100.0]*/)
{
    static std::default_random_engine generator;
    static std::uniform_real_distribution<float> distribution(0.0, 100.0);
    return distribution(generator) < ability;
}
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
1.492
Благодарности
2.108
Баллы
365
avx1024, уже использовали, он не дает желаемого эффекта. Собственно он и был в другом моем плагине. Проблему "10 не критов подряд при 30% владения" он не убирал.
А по плагину, вероятность (отношение критов к общему числу ударов) стремиться к владению при ударах 30+ ударов, при этом равномерность хорошая.
 
Последнее редактирование:

avx1024

Участник форума
Регистрация
28 Дек 2017
Сообщения
13
Благодарности
43
Баллы
165
уже использовали, он не дает желаемого эффекты
Тут мне видится следующее:
1. Ошибки реализации проверки крита, как говорится, дайте мне точку опоры пулл реквест.
2. Плохая реализация нормального распределения в реализации от МС.
3. Вероятность, на этом я остановлюсь подробнее.

Касательно последнего пункта, нужно отметить что люди не работающие с вероятностными дисциплинами не правильно воспринимают словосочетание "вероятность события". Если рассмотреть бросание идеализированной монеты (выпадение 1 их 2-х сторон с 50% вероятностью), то мы не знаем что выпадет в результате конкретного испытания, мы знаем что если рассмотреть серию испытаний, где количество испытаний будет стремиться к бесконечности, отношение количества решек и орлов будет стремиться к 1 или отношение количества выпадения решек и орлов к общему количеству испытаний(относительные частоты событий) будут приближаться к своим вероятностным значениям, не более и не менее.

Возвращаясь к критам, если зафиксировать значение владения оружием на каком-то значении (например те же 30%), то вышеприведенная реализация при рассмотрении N испытаний это процесс имеющий биномиальное распределение. Событие крита - 30%, событие отсутствия крита - 70%. И если взять серию из 10 испытаний(10 ударов), то вероятность что не будет ни 1 крита это чуть более 2.8%, маловероятное, но не невозможное событие. Если же рассмотреть серию из всего 4-х испытаний, то крита не будет с вероятностью 24%.
Мне видится, чтобы говорить о плохом распределении, нужно собрать статистику, хотя бы пару тысяч ударов, чтобы иметь цифры для работы.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.847
Благодарности
5.276
Баллы
910
вероятность что не будет ни 1 крита это чуть более 2.8%, маловероятное, но не невозможное событие
мало играли в готику. Вы можете 10 раз подряд не критануть даже при 99%.
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
1.492
Благодарности
2.108
Баллы
365
avx1024, готика использует стандартную rand() функцию из генератора windows, она плохая, я пробовал static std::uniform_real_distribution<float> distribution(0.0, 100.0); уже давно, он немного улучшает картину, но проблемы не уходят. На низких значениях владения (скажем 30%) очень часто бывают события когда герой 6-10 раз не критует подряд, причем это не просто 1 раз в 10 часов, это почти постоянно. Поэтому такой плагин и сделали :) Это в прицнипе всегда было фишкой готики, пока не прокачаешь 70-80 владения, то криты не будут "нормальными".
Проблема не в вероятности, а в распределении, оно кривое. Плагин ее решает. Играется гораздо бодрее.

Как это работает в движке стандартно....


int zRand (int max) {
return rand() % max;
};

1698133247891.png


nChance = владение текущим оружием, zRand(100) -рандом от 0 до 99.
Никакой магии, обычный rand() (который плохой)
Замена его на другой rand() более продвинутый = улучшает, но не решает проблему.
Стандартная функция windows славится плохим распределением, да, проблема в ней.
 
Последнее редактирование:

avx1024

Участник форума
Регистрация
28 Дек 2017
Сообщения
13
Благодарности
43
Баллы
165
Проблема не в вероятности, а в распределении
Это 2 крайности одной сущности, а в общем это все виноваты континуальные множества, вот например до чего они доводят :D Парадокс Банаха — Тарского

Никто и не защищает готическое распределение, реализация через rand это вообще не пойми какое распределение, точно не равномерное.
В общем я клоню к тому что нужно собрать статистику и после проверить, соответствует ли она биномиальному распределению или нет, чтобы понять где проблема в вероятностном подходе и есть ли она вообще и после этого решать как поправить ее (если она имеется).

В общем мне за вероятность обидно, не виноватая она, а потому мне не нравится детерминистский подход.
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
1.492
Благодарности
2.108
Баллы
365
avx1024, мне лень, честно говоря. Проблема геймплея уже исправлена, криты идут хорошо. А уж как они сделаны, игроков интересовать не будет, как я думаю. :D
 

Lorddemonik

★★★★★
Редактор раздела
Регистрация
17 Дек 2011
Сообщения
1.007
Благодарности
516
Баллы
350
Как раз таки для борьбы с корейском рандом в играх и принято реализовать псевдорандом. Особенно этим болеют всякие гачи. Так что пока решение Ликера работает, пусть работает.
А то сейчас набегут дотеры и будут пояснять про 17% баша из первой части
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
1.492
Благодарности
2.108
Баллы
365
Сравнили старый и новый рандом на 30% владения. (1 миллион раз)
Черное = не крит, белое = крит.
Как видите, на старом рандоме есть огромные черные пятна (но и белые тоже)
На новом все более мелкое.
 

Вложения

  • chanceCompare.png
    chanceCompare.png
    2,3 MB · Просмотры: 36

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.176
Благодарности
6.158
Баллы
1.565
Фига там пустот волопаса...
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
1.492
Благодарности
2.108
Баллы
365
MEG@VOLT, при этом на миллион там (в старом рандоме) вероятность (если перевести в %) даже выше 30%, 30.5% примерно. Но распределение...
 
Последнее редактирование:

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.039
Благодарности
1.818
Баллы
240
готика использует стандартную rand() функцию из генератора windows, она плохая
Она не плохая, а не подходящая для механики критов, так как не гарантирует "честность" на коротких дистанциях, что слишком сильно влияет на бой.
Никто и не защищает готическое распределение, реализация через rand это вообще не пойми какое распределение, точно не равномерное.
Там примерно такое распределение, какое и ожидается. Игрок ни в жизнь не отличит его от std::uniform_real_distribution.
я пробовал static std::uniform_real_distribution<float> distribution(0.0, 100.0); уже давно, он немного улучшает картину
Эффект плацебо в действии, если, конечно, речь об ощущениях, а не о программной проверке статистики.

Данный плагин снижает вероятность "нечестных" комбинаций критов/промахов (а слишком нечестные комбинации и вовсе исключает). Происходит это за счёт более предсказуемого генератора: вы не промахнётесь 2 раза подряд с 90%-м владением, но также и не кританёте 2 раза подряд с 10%-м владением. Таким образом, игрок лишится как слишком больших серий промахов, так и слишком больших серий критов. Этот размен оправдан, так как серия промахов приносит куда больше негатива игроку, чем он получает позитива от серии критов.
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
1.492
Благодарности
2.108
Баллы
365
Slavemaster, критануть 2 раза подряд с 10% владением можно, но вероятность в среднем 600/1000000 (проверил). Ничтожно мала.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.039
Благодарности
1.818
Баллы
240
критануть 2 раза подряд с 10% владением можно
Только после аномально большой кучи промахов. Но таким если таким макаром рассуждать, то и 7 промахов с 30%-м владением тоже возможно.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.281
Благодарности
4.581
Баллы
625
У меня прямо стохастические кошки на душе заскребли.
А почему не использовал генератор нормального распределения из стандартной библиотеки C++ ? Он еще с 11 стандарта появился.
Там код вообще копеечный получается:
C++:
bool hasCritical(const float ability/*[0.0 - 100.0]*/)
{
    static std::default_random_engine generator;
    static std::uniform_real_distribution<float> distribution(0.0, 100.0);
    return distribution(generator) < ability;
}
Только каждому нпс надо давать отдельный генератор, иначе они будут портить друг другу чистоту распределения. Вообще в современном геймдеве борьба с энтропией предполагает кастомные решения в реализации того же рандома, как, собственно, поступил ликер. Поэтому его методика вполне оправдана опытом многих. Главное чтобы это работало так, как и ожидается.
LikerGothic я бы посмотрел графики распределения случайности твоего метода и стандартного генератора на разных процентах владения (с градацией например в 20%).
 
Сверху Снизу