DM Guide 16: различия между версиями
Материал из Animus Station 13
Epicus (обсуждение | вклад) | Версия 00:05, 13 декабря 2016после 20 июня 2016 ZLOFENIХ (обсуждение | вклад) (clean up) | ||
| Строка 1: | Строка 1: | ||
| − | ''Это 16-я глава перевода оригинального руководства по Dream Maker от разработчиков.'' | ||
| − | [[All_about_the_code|Остальные главы руководства и статьи о программировании на коде BYOND от любителей на русском.]] | ||
| − | [http://www.byond.com/docs/guide/chap16.html Оригинальная 16-я глава руководства на английском языке] | ||
| − | + | [[Файл:LtJ6KqW6mKk.jpg|LtJ6KqW6mKk.jpg]] | |
| − | + | [https://www.youtube.com/watch?v=wqpseZS3mD0 Конец прекрасной эпохи. Мы еще увидимся, я обещаю!] | |
| − | Вы когда-нибудь задавались вопросом, почему математики на вас странно смотрят? Где-то в разрядах числа π сокрыт ваш личный дневник в обычном ASCII. | ||
| − | |||
| − | Базовые математические операторы уже были описаны [[DM_Guide_6#Математические операторы|в 6-ой главе]]. Предусмотрено много дополнительных математических функций для специфических целей. Они описаны в нижеследующих разделах. | ||
| − | |||
| − | ===Генерация случайных чисел=== | ||
| − | |||
| − | Случай играет большую роль во многих типах игр, так что DM предоставляет несколько способов генерации случайных чисел. На самом деле они все основаны на генераторе псевдослучайных чисел и только кажутся случайными. Однако, на практике, на них можно положиться для получения чисел без заметного закона распределения. | ||
| − | |||
| − | ====rand==== | ||
| − | |||
| − | ''rand'' позволяет сгенерировать случайное число из заданного диапазона. Возвращаемое число всегда целое, так что если требуется дробное число, нужно задать больший диапазон и затем разделить результат. | ||
| − | |||
| − | {| border="0" | ||
| − | |- | ||
| − | | rand | ||
| − | | (L=0,U) | ||
| − | |- | ||
| − | | | ||
| − | | L - нижняя граница. | ||
| − | |- | ||
| − | | | ||
| − | | U - верхняя граница. | ||
| − | |- | ||
| − | | | ||
| − | | Возвращает число в диапазоне от L до U (включая L и U). | ||
| − | |} | ||
| − | |||
| − | Если задан только один аргумент, то он считается верхней границей, а нижней границей берется нуль. | ||
| − | |||
| − | Ниже следует пример кода «зелья игрока». | ||
| − | |||
| − | obj/potion/lucky | ||
| − | verb/drink() | ||
| − | usr.AddLife(rand(-20,20)) | ||
| − | |||
| − | В зависимости от удачи пользователя, зелье может нанести 20 урона или восстановить 20 здоровья. | ||
| − | |||
| − | Этот код предполагает, что описана процедура ''AddLife()'', которая лечит или наносит урон мобу. Она аналогична процедуре ''HurtMe()'', описанной [[DM_Guide_6# Создание процедуры|в главе 6]], но с аргументом, взятым с обратным знаком | ||
| − | |||
| − | ====prob==== | ||
| − | |||
| − | ''prob'' возвращает true или false с вероятностью, задаваемой в процентах. | ||
| − | |||
| − | {| border="0" | ||
| − | |- | ||
| − | | prob | ||
| − | | (P) | ||
| − | |- | ||
| − | | | ||
| − | | P – процентная вероятность возвратить true. | ||
| − | |- | ||
| − | | | ||
| − | | Возвращает 1 в P процентах случаев, в остальных возвращает 0. | ||
| − | |} | ||
| − | |||
| − | Она может быть использована для выбора одного из двух возможных результатов. В приведенном ниже примере, зелью дан небольшой шанс наложения на игрока отрицательного эффекта. | ||
| − | |||
| − | obj/potion/health | ||
| − | verb/drink() | ||
| − | if(prob(20)) //не повезет в 20% случаев | ||
| − | usr.AddLife(-10) | ||
| − | else | ||
| − | usr.AddLife(20) | ||
| − | |||
| − | ====roll==== | ||
| − | |||
| − | ''roll'' «кидает» несколько костей и возвращает «выпавшую» сумму. Грани костей пронумерованы от единицы и до заданного числа граней, выпадение каждой грани равновероятно. | ||
| − | |||
| − | {| border="0" | ||
| − | |- | ||
| − | | roll | ||
| − | | (dice=1,sides) | ||
| − | |- | ||
| − | | roll | ||
| − | | ("dicedsides") | ||
| − | |- | ||
| − | | | ||
| − | | dice – количество бросаемых костей. | ||
| − | |- | ||
| − | | | ||
| − | | sides – количество граней бросаемых костей. | ||
| − | |- | ||
| − | | | ||
| − | | Возвращает сумму выпавших на всех костях граней. | ||
| − | |} | ||
| − | |||
| − | Параметры костей могут быть заданы как два отдельных числовых аргумента или как одна текстовая переменная. Текстовое представление может быть полезно, если вы хотите сохранить параметры костей как одну переменную. | ||
| − | |||
| − | В следующем примере ''roll'' использована для подсчета урона оружия. | ||
| − | |||
| − | obj/weapon | ||
| − | var/power | ||
| − | clipboard | ||
| − | power = "1d4" | ||
| − | calculator | ||
| − | power = "2d6" | ||
| − | verb/swing(mob/trg in view(1)) | ||
| − | var/damage = roll(power) | ||
| − | view() << "[usr] hits [trg] with \a [src] for [damage] point\s!" | ||
| − | |||
| − | И в программировании, и в бою вам приходится довольствоваться тем, что есть. | ||
| − | |||
| − | ====pick==== | ||
| − | |||
| − | ''pick'' случайным образом выбирает один из её аргументов и возвращает его значение. | ||
| − | |||
| − | {| border="0" | ||
| − | |- | ||
| − | | pick | ||
| − | | (Val1,Val2,...) | ||
| − | |- | ||
| − | | | ||
| − | | Возвращает одно из заданных значений. | ||
| − | |} | ||
| − | |||
| − | Если вы хотите, что бы у определенного аргумента была большая или меньшая вероятность быть выбранным, задайте т.н. относительную вероятность. Относительная вероятность равная 200 означает, что аргумент будет выбираться в два раза чаще, при 50 – в два раза реже и т.д. | ||
| − | |||
| − | {| border="0" | ||
| − | |- | ||
| − | | prob ( | ||
| − | | P); Val | ||
| − | |- | ||
| − | | или | ||
| − | | P; Val) | ||
| − | |- | ||
| − | | | ||
| − | | P – относительная вероятность (по умолчанию равна 100). | ||
| − | |- | ||
| − | | | ||
| − | | Val – значение с измененной вероятностью выбора. | ||
| − | |} | ||
| − | |||
| − | В нижеследующем примере ''pick()'' использована в коде печенья с предсказанием. | ||
| − | |||
| − | obj/fortune_cookie | ||
| − | verb/eat() | ||
| − | usr << "The message inside says:" | ||
| − | usr << pick ( | ||
| − | "Never trust an undead doctor.", | ||
| − | "Only trust undead lawyers.", | ||
| − | prob(25) | ||
| − | "The throne marks the way.", | ||
| − | prob(10) | ||
| − | "The wall behind the throne is an illusion!" | ||
| − | ) | ||
| − | del(src) | ||
| − | |||
| − | В этом примере два сообщения имеют нормальную вероятность появления, одно четверть от нормальной вероятности и одно десятую часть. Заметьте, с ''prob()'' вместо точки с запятой может использоваться новая строка. Это позволяет выстраивать элементы по линии, если вы любитель этого дела. | ||
| − | |||
| − | ===abs=== | ||
| − | |||
| − | ''abs'' вычисляет модуль числа. | ||
| − | |||
| − | {| border="0" | ||
| − | |- | ||
| − | | abs | ||
| − | | (N) | ||
| − | |- | ||
| − | | | ||
| − | | N – численное выражение. | ||
| − | |- | ||
| − | | | ||
| − | | В | ||
| − | |} | ||
| − | |||
| − | ===min=== | ||
| − | |||
| − | ''min'' возвращает значение минимального из его аргументов. | ||
| − | |||
| − | {| border="0" | ||
| − | |- | ||
| − | | min | ||
| − | | (N1,N2,...) | ||
| − | |- | ||
| − | | | ||
| − | | N1 – первое численное выражение. | ||
| − | |- | ||
| − | | | ||
| − | | N2 – второе и последующие численные выражения. | ||
| − | |- | ||
| − | | | ||
| − | | Возвращает минимальное значение. | ||
| − | |} | ||
| − | |||
| − | ===max=== | ||
| − | |||
| − | ''max'' возвращает значение максимального из его аргументов. | ||
| − | |||
| − | {| border="0" | ||
| − | |- | ||
| − | | max | ||
| − | | (N1,N2,...) | ||
| − | |- | ||
| − | | | ||
| − | | N1 – первое численное выражение. | ||
| − | |- | ||
| − | | | ||
| − | | N2 – второе и последующие численные выражения. | ||
| − | |- | ||
| − | | | ||
| − | | Возвращает максимальное значение. | ||
| − | |} | ||
| − | |||
| − | ===round=== | ||
| − | |||
| − | ''round'' округляет число до ближайшего кратного заданному множителю. Если множитель не задан (или он равен нулю), возвращает целую часть. Обратите внимание, что при множителе равном 1, число ''округляется'' до ближайшего целого. | ||
| − | |||
| − | {| border="0" | ||
| − | |- | ||
| − | | round | ||
| − | | (N,M) | ||
| − | |- | ||
| − | | | ||
| − | | N – численное выражение, требующее округления. | ||
| − | |- | ||
| − | | | ||
| − | | M – множитель. | ||
| − | |- | ||
| − | | | ||
| − | | Возвращает ближайшее к N число кратное M. | ||
| − | |} | ||
| − | |||
| − | ===sqrt=== | ||
| − | |||
| − | ''sqrt'' вычисляет квадратный корень числа. Эта операция эквивалентна возведению числа в степень ½ при помощи оператора **, представлена в таком виде для удобства. | ||
| − | |||
| − | {| border="0" | ||
| − | |- | ||
| − | | sqrt | ||
| − | | (N) | ||
| − | |- | ||
| − | | | ||
| − | | N – численное выражение. | ||
| − | |- | ||
| − | | | ||
| − | | Возвращает квадратный корень. | ||
Версия 00:05, 13 декабря 2016
