Строка 8: |
Строка 8: |
| Например, если мы напишем: | | Например, если мы напишем: |
| | | |
− | https://pastebin.com/Et36sykV
| + | obj |
| + | vasya |
| | | |
| То мы создадим объект vasya, который является подтипом obj. Таким образом благодаря табуляции мы помогли дрим мейкеру правильно понять иерархию объектов, что и к чему относится. | | То мы создадим объект vasya, который является подтипом obj. Таким образом благодаря табуляции мы помогли дрим мейкеру правильно понять иерархию объектов, что и к чему относится. |
| Теперь поговорим о методах и свойствах. Если говорить простыми словами, то методы — это те действия, которые может выполнить объект. Свойства — это переменные, которые говорят нам о каких-то показателях (здоровье, инвентарь), важно понять, что свойством может быть и другой объект, например, перчатка на нашем персонаже. Также у всех объектов есть встроенные методы и свойства. Чтобы проиллюстрировать все это я приведу пример: | | Теперь поговорим о методах и свойствах. Если говорить простыми словами, то методы — это те действия, которые может выполнить объект. Свойства — это переменные, которые говорят нам о каких-то показателях (здоровье, инвентарь), важно понять, что свойством может быть и другой объект, например, перчатка на нашем персонаже. Также у всех объектов есть встроенные методы и свойства. Чтобы проиллюстрировать все это я приведу пример: |
| | | |
− | https://pastebin.com/3644GDVV
| + | |
| + | obj |
| + | cverkun |
| + | luminosity = 0 |
| + | var message = ‘я не свечусь’ //с помощью var мы объявили нашу переменную, и |
| + | // определили(задали) её значение. И да, двойной слэш означает комментарии |
| + | proc/switch_me() |
| + | luminosity = 1 |
| + | message = ‘я свечусь’ |
| | | |
| У цверкуни, как и у всех объектов есть встроенное свойства luminosity, оно освещает столько тайлов, сколько мы укажем. При значении равном 0, ничего не будет светится. Также мы объявили переменную и определили её значение, так как мы поставили количество табуляций ровно на 1 больше, чем у cverkun данные свойства принадлежат именно к этому объекту и его подтипам. Также мы создали для cverkun метод(proc), который заставляет наш объект светиться на 1 тайл и записывает ему в message ‘я свечусь’ | | У цверкуни, как и у всех объектов есть встроенное свойства luminosity, оно освещает столько тайлов, сколько мы укажем. При значении равном 0, ничего не будет светится. Также мы объявили переменную и определили её значение, так как мы поставили количество табуляций ровно на 1 больше, чем у cverkun данные свойства принадлежат именно к этому объекту и его подтипам. Также мы создали для cverkun метод(proc), который заставляет наш объект светиться на 1 тайл и записывает ему в message ‘я свечусь’ |
Строка 19: |
Строка 28: |
| Как же нам задействовать то, что мы написали? Вариантов много, например мы можем использовать конструктор New() в качестве команды, с которой начнет свое выполнение наш метод cverkun. | | Как же нам задействовать то, что мы написали? Вариантов много, например мы можем использовать конструктор New() в качестве команды, с которой начнет свое выполнение наш метод cverkun. |
| | | |
− | https://pastebin.com/PqavW6PW
| + | obj |
| + | cverkun |
| + | luminosity = 0 |
| + | var message = ‘я не свечусь’ //с помощью var мы объявили нашу переменную, и |
| + | // определили(задали) её значение. И да, двойной слэш означает комментарии |
| + | proc/switch_me() |
| + | luminosity = 1 |
| + | message = ‘я свечусь’ |
| + | New() |
| + | switch_me() |
| + | world << message //<< и >> означает вывод и ввод, с помощью этой //команды мы выводим на всеообщее обозрение значение message |
| | | |
| То есть теперь, если мы поместим наш объект на карту, то при его создании дрим мейкер должен будет выполнить все то, что мы прописали под New(). | | То есть теперь, если мы поместим наш объект на карту, то при его создании дрим мейкер должен будет выполнить все то, что мы прописали под New(). |
Строка 28: |
Строка 47: |
| Есть много вариантов взаимодействия, начнем с кнопок. Кнопка, или verb позволяет пользователю взаимодействовать с миром бьенда через специальный интерфейс, который на космической станции, к примеру, расположен справа, вверху. verb’ы могут разделяться на вкладки, таким образом их можно расположить удобным для пользователя образом. Покажем пример работы verb’a на примере: | | Есть много вариантов взаимодействия, начнем с кнопок. Кнопка, или verb позволяет пользователю взаимодействовать с миром бьенда через специальный интерфейс, который на космической станции, к примеру, расположен справа, вверху. verb’ы могут разделяться на вкладки, таким образом их можно расположить удобным для пользователя образом. Покажем пример работы verb’a на примере: |
| | | |
− | https://pastebin.com/3Ar3Z7L7
| + | /mob |
| + | dog |
| + | verb/gav_gav() |
| + | set category = "gav" |
| + | set name = "sobaka" |
| + | world << "gav-gav!" |
| | | |
| Итак, данная кнопка будет иметь имя “sobaka” где имя задается с помощью set name = "sobaka" и будет расположено во вкладке панели “gav” где вкладка задается с помощью set category = "gav". “gav-gav!” будет выводиться всем при нажатии на кнопку. Используя set можно задать многие интересные параметры, не только имя кнопки и имя вкладки: | | Итак, данная кнопка будет иметь имя “sobaka” где имя задается с помощью set name = "sobaka" и будет расположено во вкладке панели “gav” где вкладка задается с помощью set category = "gav". “gav-gav!” будет выводиться всем при нажатии на кнопку. Используя set можно задать многие интересные параметры, не только имя кнопки и имя вкладки: |
Строка 40: |
Строка 64: |
| Помимо кнопок в текущей части мы разберем еще кое-что. | | Помимо кнопок в текущей части мы разберем еще кое-что. |
| Разберем Bump() и немного общих понятий. | | Разберем Bump() и немного общих понятий. |
− | https://pastebin.com/1EZXhbJW
| + | |
| + | |
| + | /mob |
| + | Bump(var/atom/O) |
| + | if(istype(O, /turf/wall)) |
| + | |
| + | world << "Bump!" |
| | | |
| Итак, вот у нас есть метод Bump, где в качестве аргумента используется какой-то атом, далее мы используем proc istype(type_a, type_x) внутри нашего условия. Если тип type_a эквивалентен type_x, то вернется true, иначе false. Если в условии возвращается false, то тело условия не выполняется, если возвращается true, то выполняется. Все довольно просто. Итак, что же это за метод? Он вызывается, когда что-то врезается во что-то, в данном случае mob врезается в O, где O это некий атом, если этот атом является стеной и условие возвращает true, то выполнится тело условия и мы выведем “Bump!”. Иными словами, если мы врежемся в стену, то бьенд напишет "Bump!" всем пользователям в игре. | | Итак, вот у нас есть метод Bump, где в качестве аргумента используется какой-то атом, далее мы используем proc istype(type_a, type_x) внутри нашего условия. Если тип type_a эквивалентен type_x, то вернется true, иначе false. Если в условии возвращается false, то тело условия не выполняется, если возвращается true, то выполняется. Все довольно просто. Итак, что же это за метод? Он вызывается, когда что-то врезается во что-то, в данном случае mob врезается в O, где O это некий атом, если этот атом является стеной и условие возвращает true, то выполнится тело условия и мы выведем “Bump!”. Иными словами, если мы врежемся в стену, то бьенд напишет "Bump!" всем пользователям в игре. |
Строка 46: |
Строка 76: |
| Важно помнить, что если мы пропишем | | Важно помнить, что если мы пропишем |
| | | |
− | https://pastebin.com/viEsLwrb
| + | /turf/wall |
| + | Bump(var/atom/O) |
| + | if(istype(O, /mob)) |
| + | world << "Bump!" |
| | | |
| То ничего не будет работать, так как стена недвижимый объект и она не может врезаться в моба. Да, «стена врезается в моба» и «моб врезается в стену» это разный код, и он не равнозначен. | | То ничего не будет работать, так как стена недвижимый объект и она не может врезаться в моба. Да, «стена врезается в моба» и «моб врезается в стену» это разный код, и он не равнозначен. |
Строка 55: |
Строка 88: |
| Так как с этим работать? Легко. Допустим у нас есть тайл с лавой, мы хотим чтобы при попадании на него нас отправляло в вальгаллу. Достаточно сделать вот такой код: | | Так как с этим работать? Легко. Допустим у нас есть тайл с лавой, мы хотим чтобы при попадании на него нас отправляло в вальгаллу. Достаточно сделать вот такой код: |
| | | |
− | https://pastebin.com/AhPq4rC7
| + | /turf/lava/Enter(var/mob/nash_mob) //фиксируем попадание на тайл с лавой |
| + | nash_mob.Move(valhalla) //перемещаем моба в вальхаллу |
| + | return 1 //разрешаем мобу наступить на тайл |
| | | |
| Хм. return. Помните, когда мы говорили о условиях и о том, что true или false должно быть возвращено каким-то proc’ом? Так вот, в данном случае мы сами возвращаем то, что нужно. А нужно нам именно 1, так как если вернуть 0 при работе с методом Enter() мы не сможем наступить на тайл. Это особенность этого конкретно прока, если что. | | Хм. return. Помните, когда мы говорили о условиях и о том, что true или false должно быть возвращено каким-то proc’ом? Так вот, в данном случае мы сами возвращаем то, что нужно. А нужно нам именно 1, так как если вернуть 0 при работе с методом Enter() мы не сможем наступить на тайл. Это особенность этого конкретно прока, если что. |
Строка 66: |
Строка 101: |
| Click() — метод, переопределяя который мы можем привязать действие, к, собственно, клику. Вот так оно работает: | | Click() — метод, переопределяя который мы можем привязать действие, к, собственно, клику. Вот так оно работает: |
| | | |
− | https://pastebin.com/qQf5Egci
| + | obj/bomb //бомба |
| + | Click() //клик |
| + | |
| + | world << “boom!” //получили взрыв. Просто до безумия |
| | | |
| Среди похожих можно отметить DblClick(), единственное отличие лишь в том, что нужно сделать не клик, а двойной клик. MouseEntered() — мы навели курсор на что-то, MouseExited() — мы убрали курсор с чего-то, MouseMove() — мы водим по какому-то атому курсором. | | Среди похожих можно отметить DblClick(), единственное отличие лишь в том, что нужно сделать не клик, а двойной клик. MouseEntered() — мы навели курсор на что-то, MouseExited() — мы убрали курсор с чего-то, MouseMove() — мы водим по какому-то атому курсором. |
Строка 79: |
Строка 117: |
| С задержками связано очень много, подробнее о применении с примерами и вероятными проблемами, я расскажу в следующей части. Спасибо за внимание. | | С задержками связано очень много, подробнее о применении с примерами и вероятными проблемами, я расскажу в следующей части. Спасибо за внимание. |
| | | |
− | https://pastebin.com/BWbB81mk
| + | /turf/valhalla /Exit (var/mob/nash_mob) //фиксируем попадание на тайл |
| + | nash_mob << “Нельзя выйти отсюда” //выводим мобу сообщение |
| + | |
| + | return 0 //не разрешаем мобу выйти с тайла |
| | | |
| Cross(). Работает почти абсолютно таким же образом как Enter, но отличие в том, что в данном случае фиксируется как раз наступание на объект, а не перемещение в него. То есть, мы должны просто попасть на один тайл с объектом. И да, наступание тоже можно блокировать с помощью return 0. | | Cross(). Работает почти абсолютно таким же образом как Enter, но отличие в том, что в данном случае фиксируется как раз наступание на объект, а не перемещение в него. То есть, мы должны просто попасть на один тайл с объектом. И да, наступание тоже можно блокировать с помощью return 0. |
| | | |
− | https://pastebin.com/HRKcuZf0
| + | /mob/snek/Cross(var/mob/nash_mob) //фиксируем наступание на змею |
| + | nash_mob << “no step on snek ” //выводим мобу сообщение |
| + | return 0 //не разрешаем мобу наступить на snek |