Для шахрайства, над яким я працював, я впровадив досить гнучку систему, керовану даними для генерації крапель. Я документально це тут . Це по суті трохи DSL для вибору кількох випадково вибраних елементів.
Проста крапля виглядає так:
1-10 copper coin
Це просто говорить про те, щоб скинути випадкову кількість мідних монет від 1 до 10. Все стає більш гнучким, коли ви додаєте гілки:
one of
turquoise stone (50%)
onyx stone (25%)
malachite stone (15%)
jade stone (10%)
"Один з" вибирає одну зі своїх дочірніх гілок на основі заданих ймовірностей, а потім оцінює це. Краплі можуть скидати більше ніж один предмет:
any of
turquoise stone (50%)
onyx stone (25%)
malachite stone (15%)
jade stone (10%)
Це дасть оцінку всім підгалузям і скине їх, якщо прокрутка проти їх вірогідності пройде. Є також деякі інші гілки для вибору предмета на основі рівня підземелля та гравця.
Оскільки вони можуть бути складними, це також дозволяє визначити іменовані макроси, по суті функції, які розширюють вираз гілки і можуть бути повторно використані в декількох краплях. Таким чином, якщо, наприклад, всі гноми скидають один і той же сорт, ви можете зробити для цього один макрос і використовувати його для всіх типів монстрів, а не копіювати та вставляти величезні таблиці крапель.
Приклад краплі одного монстра :
:: ancient dragon
glyph = D
groups = dragon
drops
(coins)
2-3(1:8) one of
(any-weapon)
(any-armor)
Тут (coins)
, (any-weapon)
і (any-armor)
все макро - виклики:
(any-armor)
one of
(shield)
(helm)
(boots)
(gloves)
(cloak)
(robe)
(soft-armor)
(hard-armor)
що в свою чергу називає такі речі:
(cloak)
one near level
cloak (10)
velvet cloak (20)
fur-lined cloak (50)
Ви можете гніздо випадати вирази довільно глибоко, як справжня мова програмування. Це дає вам можливість компонованості, простий підхід на основі таблиці не дасть.
Як і всі системи, керовані даними, ви можете переповнити себе, будуючи непрохідно складні краплі, але це відповідає моїм цілям:
- Бути в змозі вказати, які речі випадають повністю поза кодом.
- Проста в реалізації основна система в коді.
- Умійте налаштувати, які конкретні монстри падають, щоб гравець міг провести цільове дослідження. ("Мені потрібно намисто. Я буду шукати гномів, оскільки вони, як правило, скидають їх.")
Код C #, який реалізує це, тут .