x2PI-Dev, можно добавить еще один предмет с шансом 0.5. На счет логики - имеется коллекция сущностей, каждая из которых имеет некоторое число, представляющее собой шанс выпадения той или иной сущности. В данном примере сумма шансов может быть больше, потому как значения интерполируются. По итогу, функция выбирает некий шанс от [0; max], где max - это сумма всех шансов сущностей. Далее функция перебирает всю коллекцию и проверяет, лежит ли выбранный шанс в определенном интервале
, и если это так, то вернет текущий элемент из цикла; нет - добавит к накопленному шансу шанс текущего элемента. Написано сложно, работает просто:
Допустим выпал шанс 1. Всего 1.3.
Итерации:
1. 0 <= 1 (Да) И 1 < 0 + 0.7 (Нет) -> В накопленный шанс добавляем 0.7.
2. 0.7 <= 1 (Да) И 1 < 0.7 + 0.25 (Нет) -> В накопленный шанс добавляем 0.25, становится 0.95.
3. 0.95 <= 1 (Да) И 1 < 0.95 + 0.25 (Да) -> Мы попали в интервал, возвращаем Spoon.
Данный код не является моей выдумкой, его можно найти на просторах интернета.
cimonlebedev, Это будет работать в том случае, если вы копию страницы во второй вкладке откроете. При этом, вторая вкладка будет сообщать первой, что в хранилище что-то поменялось. Если хотите решить свою проблему, просто напишите обертку. Для того, чтобы тригерить события, можете почитать об EventEmitter (вот тут даже пример есть).
Елизавета Цезурк, Символ Z при парсинге будет добавлять таймзону. Например у меня +6 GMT. По итогу получу не 10 часов, а 16 часов. Без Z - получу 10. Но с датами лучше работать используя таймзону. Иначе может случится так, что пользователь окажется в прошлом.
0.5
. На счет логики - имеется коллекция сущностей, каждая из которых имеет некоторое число, представляющее собой шанс выпадения той или иной сущности. В данном примере сумма шансов может быть больше, потому как значения интерполируются. По итогу, функция выбирает некий шанс от[0; max]
, гдеmax
- это сумма всех шансов сущностей. Далее функция перебирает всю коллекцию и проверяет, лежит ли выбранный шанс в определенном интервале , и если это так, то вернет текущий элемент из цикла; нет - добавит к накопленному шансу шанс текущего элемента. Написано сложно, работает просто:Допустим выпал шанс
1
. Всего1.3
.Итерации:
1.
0 <= 1 (Да) И 1 < 0 + 0.7 (Нет)
-> В накопленный шанс добавляем0.7
.2.
0.7 <= 1 (Да) И 1 < 0.7 + 0.25 (Нет)
-> В накопленный шанс добавляем0.25
, становится0.95
.3.
0.95 <= 1 (Да) И 1 < 0.95 + 0.25 (Да)
-> Мы попали в интервал, возвращаемSpoon
.Данный код не является моей выдумкой, его можно найти на просторах интернета.