Архив сообщества
2011 — 2019
Аватар LethalGhost

Немного кода

Автор: LethalGhost · 29.10.2012, 20:42 · 16 сообщений

код идеи

Сообщений в теме: 16

LethalGhost#1
В общем, мне понравилось как в спрайтах все выкладывают свои работы и оценивают их, исправляют.  Так что я решил попробовать у нас в кодинге такую же тему замутить.

Мне понравилась идея Kartag:
Цитата
Анализ здоровья при Examine с надетыми Health Scanner HUD.

Так что вот код, оценивайте, исправляйте, оптимизируйте:
___ - условный отступ, в коде он не выделяется подчеркиванием
Файл "code\modules\mob\living\carbon\human\examine.dm":
Цитата
//начало кода (не затронутая часть опущена)
if(istype(usr, /mob/living/carbon/human))
___var/mob/living/carbon/human/H = usr
___if(istype(H.glasses, /obj/item/clothing/glasses/hud/health))
______msg += "<span class='warning'><b>Damage Specifics: [src.getOxyLoss()]-[src.getToxLoss()]-[src.getFireLoss()]-[src.getBruteLoss()]</b></span>\n"
//конец кода (не затронутая часть опущена)
usr << msg

Пару пояснений для людей не знающих код:
  • if(istype(usr, /mob/living/carbon/human)). istype(X, Y) - Сравнение типов объектов X и Y, если тип объекта, на который указывает X, является дочерним или равным от типа Y, то возвращается TRUE. Пример istype(usr, /mob/living/carbon/human) - тоже самое что вопрос является ли тип объекта "usr" - типом гуманоид ("/mob/living/carbon/human" дословно "существо/живое/углеродное/гуманоид")
  • var/mob/living/carbon/human/H = usr. До знака = создается окальная переменная "H", ее тип будет равен тому что написано после var и до имени переменной. После знака "=" пишется то какое значение будет у данной переменной (usr - это игрок)
  • if(istype(H.glasses, /obj/item/clothing/glasses/hud/health)). Опять проверка типов, но теперь проверяется надеты ли очки: H.glasses - слот глаз объекта "H", /obj/item/clothing/glasses/hud/health - медецинские очки-анализаторы.
  • var/perpname = "wot"
    var/medical = "None"
      - это нам не нужно - пропускаем
  • msg += к тому что есть в переменной msg прибавляем то что идет после знака "="
  • "<span class='warning'>Damage Specifics: [src.getOxyLoss()]-[src.getToxLoss()]-[src.getFireLoss()]-[src.getBruteLoss()]</span>\n" - это сообщение которое будет выдаваться
  • тег <span class='warning'>.....</span> - форматирование выводимого текста, warning - красное сообщение, как то что сообщает о наличии крови на одежде.
  • Damage Specifics: - просто текст (перевод: Тип урона)
  • [src.getOxyLoss()]-[src.getToxLoss()]-[src.getFireLoss()]-[src.getBruteLoss()] - src - это тот кого мы экземайнем. get***Loss() - полученный урон типа ***, где *** это Oxy - урон от удушья, Tox - токсичный урон, Fire - ожеги, Brute - удары/порезы.
  • \n - переход на новую строку, в этом сообщении он нужен для того чтобы после вывода урона следующий дальше текст появился на новой строке.
  • usr << msg - финальная часть - вывод всего текста содержащегося в переменной "msg" пользователю
Обновлено с учетом замечаний Editor TEH Chaos-neutral. Спасибо.
11
Скопировать ссылку
Woody112#3
>немного кода
СЛИШКОМ МНОГО КОДА, ГУМАНИТАРИИ НЕ МОГУТ ПЕРЕВАРИТЬ ЭТО.
А так молодец.
0
snysmoosh (22 February 2013 - 13:41) писал: писал:
Спойлер
Ренди - самый ублюдочный, самый вонючий, самый конченный поехавший выродок из подобных, что только творило гнилое комьюнити, гнать его блять, гнать сраными тряпками, на парашу гнать, мочой поить и избивать ногами до крового поноса, гнобить блядь, гнобить тупую суку в яме с навозом, урода такого ёбаного.
Массовый баттхерт называется революцией - Neray.
Скопировать ссылку
Kartag#4
Неплохо, и обьяснено всё тоже отлично. Поправка - идея моя, Вилго взял её из темы с мелкими идеями и отметил в отдельной.
0
Скопировать ссылку
LethalGhost#5
Kartag (29 October 2012 - 12:05) писал: писал:
Неплохо, и обьяснено всё тоже отлично. Поправка - идея моя, Вилго взял её из темы с мелкими идеями и отметил в отдельной.
Спасибо, исправил
0
Скопировать ссылку
Antilles#6
Круто, все объяснил и показал. Только нужна проверка не только на человека, но также на таяранов, согхунов и скреллов, не так ли?
1
Скопировать ссылку
LethalGhost#7
Antilles (29 October 2012 - 20:24) писал: писал:
Круто, все объяснил и показал. Только нужна проверка не только на человека, но также на таяранов, согхунов и скреллов, не так ли?
Отличный вопрос.
Тут я ошибся правильнее будет не человеком, а гуманоидом:
istype(usr, /mob/living/carbon/human) - тоже самое что вопрос является ли тип объекта "usr" - типом гуманоид ("/mob/living/carbon/human" дословно "существо/живое/углеродное/гуманоид")
За расы отвечает переменная "mutantrace" обЪекта (например H.mutantrace), так что тут проверка на таяранов и т.д. не нужна.
0
Скопировать ссылку
Editor TEH Chaos-neutral#8
Что за хуйню я прочитал?

Цитата
if(istype(usr, /mob/living/carbon/human)). istype(X, Y) - проверка соответствия. Пример istype(usr, /mob/living/carbon/human) - тоже самое что вопрос является ли переменная "usr" - гуманойдом (/mob/living/carbon/human дословно сущесвом/живым/углеродным/гуманойдом)
Лолшто?
Перепиши:
istype (x, y) - это функция, которая сравнивает типы объектов, на которых указывает X и Y. Если тип объекта, на который указывает X, является дочерным или равным от типа Y, то возвращается TRUE.

Цитата
var/mob/living/carbon/human/H = usr. До знака = создается локальная переменная "H", после этой  переменная присваивается значение usr (usr - это игрок)
До знака "=" создается переменная с именем H, имеющая тип "/mob/living/carbon/human".

Цитата
if(istype(H.glasses, /obj/item/clothing/glasses/hud/health)). Опять проверка соответствия, но теперь проверяется надеты ли очки: H.glasses - слот глаз объекта "H", /obj/item/clothing/glasses/hud/health - медецинские очки-анализаторы.

Аналогичный код
if(istype(usr:glasses, /obj/item/clothing/glasses/hud/health)).

Остальное в целом правильное, но пример взят неудачный.
0
Скопировать ссылку
Ekaterina Tsvetkova#9
Лолшто?
Перепиши:
istype (x, y) - это функция, которая сравнивает типы объектов, на
которых указывает X и Y. Если тип объекта, на который указывает
X, является дочерным или равным от типа Y, то возвращается
TRUE.


Ну и зачем это? Там и без этого пройдет, вы просто предлагаете тоже самое, но по другому
0
Скопировать ссылку
Editor TEH Chaos-neutral#10
Цитата
Там и без этого пройдет, вы просто предлагаете тоже самое, но по другому
Написано, что сравниваются типы переменных X и Y, а не указателей. Это совсем другое.
0
Скопировать ссылку
Dragon71421#12
LethalGhost (29 October 2012 - 10:42) писал: писал:
  • var/perpname = "wot"
  • var/medical = "None"  - это нам не нужно - пропускаем
Ну ты уж всё-таки обьясни эту часть до конца, либо выпили из примера.
0
Скопировать ссылку
LethalGhost#13
Начнем с абстрактных основ:
В свое время Алан Кей сформулировал для разработанного им языка программирования Smalltalk несколько принципов. Они прекрасно описывают принципы ООП. Так например, утверждается, что объектно-ориентированная программа состоит из объектов, которые посылают друг другу сообщения. Каждый объект может состоять из других объектов (а может и не состоять). Каждый объект принадлежит определенному типу, который задает поведение объектов, созданных на его основе.

Что такое класс или тип? В реальном мире стол — это объект. Но когда его изготавливают, то руководствуются определенным описанием (знанием), что такое стол? Я могу сказать «стол» не имея ввиду никакой конкретный, но большинство поймут, о чем идет речь, т.к знают особенности этого предмета (есть крышка, ножки и т.п.).
Тип — это описание объектов определенного типа. В каком-то смысле - это абстракция без материального воплощения, которая позволяет систематизировать объекты той или иной системы.

На основе типов создаются объекты. Может быть множество объектов, принадлежащих одному типу.
Далеко ходить не будем возьмем пример со станции:
Цитата
// - все что находится в текущей строке после этих двух полосок - комментарии, они не относятся к коду

тот самый бронежилет СБ:
/obj/item/clothing/suit/armor/vest    
___name = "armor"
___desc = "An armored vest that protects against some damage."
___icon_state = "armor"
___item_state = "armor"
___flags = FPRINT | TABLEPASS
___armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
броня вардена Изображение
/obj/item/clothing/suit/armor/vest/warden
___name = "Warden's jacket"
___desc = "An armoured jacket with silver rank pips and livery."
___icon_state = "warden_jacket"
___item_state = "armor"
Строка: /obj/item/clothing/suit/armor/vest  - тип бронежилета СБ, в следующей броне добавилось /warden.
Отсюда /obj/item/clothing/suit/armor/vest/warden  - это подтип /obj/item/clothing/suit/armor/vest.
Это означает что броня вардена возьмет в себя все свойства брони СБ, за исключением тех что прописаны ниже строки /obj/item/clothing/suit/armor/vest/warden с отступом ___.
Переменная name отвечает за имя объекта, это armor для брони СБ, в броне вардена она присваивается Warden's jacket.
В то же время armor в типе /obj/item/clothing/suit/armor/vest/warden не указывается, следовательно она берется из более высокого типа без изменений

to be continued ....

Информация взята:
http://www.angelfire.com/games4/byond/
http://younglinux.in...opython/oop.php
0
Скопировать ссылку
LethalGhost#15
Fixer (12 December 2012 - 09:49) писал: писал:
А так же  дочерний объект Варденг может иметь уникальные свойства, которые не присущи родительскому объекту - бронежилет.
Может, куда же без этого?
Но об этом чуть позже
0
Скопировать ссылку
Гость#16
Главное понять, что ООП-программирование подразумевает то, что все вокруг объекты.
А так же, можно объединить их по дочерним и родительским.
Например - Деревья, это родительский объект Ясени и Дуба.
0
Скопировать ссылку

Обратно в Кодинг