Изменения

нет описания правки
Строка 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
692

правки