DM Guide 18: различия между версиями
Материал из Animus Station 13
(Откат правок Inaf (обсуждение) к версии Viol) | Версия 00:11, 13 декабря 2016после 20 июня 2016 ZLOFENIХ (обсуждение | вклад) (clean up, removed: Это 18 глава перевода оригинального руководства по Dream Maker от разработчиков.
(77)) | ||
| Строка 1: | Строка 1: | ||
| − | ''Это 18 глава перевода оригинального руководства по Dream Maker от разработчиков.'' | ||
| − | [http://wiki.ss13.ru/index.php?title=All_about_the_code Остальные главы руководства и статьи о программировании на коде BYOND от любителей на русском.] | ||
| − | [http://www.byond.com/docs/guide/chap18.html Оригинальная 18 глава руководства на английском языке] | ||
| − | + | [[Файл:LtJ6KqW6mKk.jpg|LtJ6KqW6mKk.jpg]] | |
| − | + | [https://www.youtube.com/watch?v=wqpseZS3mD0 Конец прекрасной эпохи. Мы еще увидимся, я обещаю!] | |
| − | ''Он тронул рыб, говоря страшным голосом: "Рыбы, рыбы, вы выполняете свой долг?" — на что рыбы, подняв головы, ответили: "Да, да. Если вы рассчитываетесь, мы рассчитываемся. Если вы платите по своим долгам, мы платим по своим. Если вы летаете, мы завоевываем и довольствуемся этим."'' — Визирь, который был наказан, Арабские Ночи | ||
| − | |||
| − | Большую часть времени, объекты, которые вы создаете, уже предопределены, или хотя бы принадлежат к одному из предопределенных типов. Однако, вы можете сделать свои объекты с нуля. Они могут быть полезными для ваших собственных разнообразных целей, когда вам не требуется весь тот дополнительный багаж, ассоциированный с встроенными типами. | ||
| − | |||
| − | == Определение типа данных == | ||
| − | |||
| − | Чтобы определить новый тип данных проще выделить из корня программы, чем из существующего типа объектов. Следующий код демонстрирует пример кода, который определяет новый тип данных - ''Quest''. | ||
| − | |||
| − | Quest | ||
| − | var | ||
| − | mob/sponsor | ||
| − | quest_obj_type | ||
| − | reward_obj_type | ||
| − | desc | ||
| − | |||
| − | proc | ||
| − | Check() | ||
| − | var/mob/M | ||
| − | var/obj/O | ||
| − | for(M in view(sponsor,1)) | ||
| − | O = locate(quest_obj_type) in M | ||
| − | if(O) | ||
| − | Reward(M,O) | ||
| − | return 1 | ||
| − | Reward(mob/M,obj/O) | ||
| − | var/obj/R = new reward_obj_type(M) | ||
| − | O.Move(sponsor) | ||
| − | M << "You have completed the quest!" | ||
| − | M << "[sponsor] takes [O] and rewards you with \an [R]." | ||
| − | |||
| − | Как вы видите, переменные объекта и процессы обозначаются так же, как и в любых других объектах. Наследование работает точно так же, так что вы можете извлекать новые типы из уже существующих. | ||
| − | |||
| − | == Переменные объекта == | ||
| − | |||
| − | Создание пользовательских объектов подразумевает то, чтобы остался как можно меньше предопределенностей. В результате остается совсем немного встроенных переменных: | ||
| − | |||
| − | • '''type''' - содержит путь к объекту. | ||
| − | |||
| − | • '''tag''' - содержит уникальный текстовый идентификатор для объекта. Если вы назначили его, то можете использовать ''locate(tag)'' для получения ссылки к этому объекту. | ||
| − | |||
| − | • '''vars''' – список переменных, относящихся к объекту. Элементы списка – названия переменных. Каждое ассоциируется с собственным значением переменной. Смотрите раздел 12.7 для примера. | ||
| − | |||
| − | == Операции объекта == | ||
| − | |||
| − | Есть лишь несколько предопределенных операций для пользовательских объектов. Все они имеют такие же значения, как и для обычных объектов, о которых мы уже рассказывали. Ниже указан список операции и страницы на которых вы можете найти полное описание. | ||
| − | |||
| − | ''New'' - [[DM Guide 7#Создание и удаление объектов|7.2]]<br/> | ||
| − | ''Del'' - [[DM Guide 7#Создание и удаление объектов|7.2]]<br/> | ||
| − | ''Topic'' - [[DM Guide 7#Topic|7.6]]<br/> | ||
| − | ''Read'' - 12.4<br/> | ||
| − | ''Write'' - 12.4<br/> | ||
| − | |||
| − | == Создание объекта == | ||
| − | |||
| − | Команда ''new'' используется для создания объектов, а ''del'', соответственно, для их уничтожения. Следующий пример показывает, как можно использовать описанный до этого объект ''quest''. | ||
| − | |||
| − | mob/king | ||
| − | var/quests[0] | ||
| − | |||
| − | verb/beg() //get a new quest | ||
| − | set src in view() | ||
| − | var/Quest/q = RandQuest() | ||
| − | usr << q.desc | ||
| − | quests += q | ||
| − | |||
| − | verb/bow() //finish quest | ||
| − | set src in view() | ||
| − | var/Quest/q | ||
| − | for(q in quests) | ||
| − | if(q.Check()) | ||
| − | quests -= q | ||
| − | return | ||
| − | proc/RandQuest() | ||
| − | var/qtype = pick(typesof(/Quest) - /Quest) | ||
| − | var/Quest/q = new qtype() | ||
| − | q.sponsor = src | ||
| − | return q | ||
| − | Quest/Goblin | ||
| − | quest_obj_type = /obj/corpse/goblin | ||
| − | reward_obj_type = /obj/potion/newlife | ||
| − | desc = "Bring us the head of a goblin and ye shall have new life!" | ||
| − | |||
| − | Quest/Ring | ||
| − | quest_obj_type = /obj/magic_ring | ||
| − | reward_obj_type = /obj/wand/lightning | ||
| − | desc = "Bring us a golden ring and thy reward shall be great!" | ||
| − | |||
| − | Теперь игрок может попросить у короля новый квест. С нужным объектом в руке, он может преклонится перед королем, чтобы получить награду. Команда ''typesof'' использовалась здесь для получения случайного задания из всех описанных в коде. | ||
| − | |||
| − | Очевидно, что можно добавить разнообразные усовершенствования к основной системе системе. Например, вы моежете добавить новые награды и квесты. Однако, это хорошее начало и прекрасная демонстрация пользовательских объектов. | ||
| − | |||
| − | Заметьте, что мы никогда не удаляли квест, когда он заканчивался, а просто убирали его из списка. С того момента, как на этот объект больше никто нигде не ссылается, он будет автоматически удален. | ||
Версия 00:11, 13 декабря 2016
