Редактирование:
SS13 for experienced programmers
(раздел)
Перейти к навигации
Перейти к поиску
Внимание:
Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте
или
создадите учётную запись
, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Анти-спам проверка.
Не
заполняйте это!
==== Determining variable types in code ==== The [http://www.byond.com/members/?command=reference&path=proc%2Fistype istype()] proc will come in handy Example var/obj/item/weapon/W = new/obj/item/weapon/baton if([http://www.byond.com/members/?command=reference&path=proc%2Fistype istype](W,/obj/item/weapon/baton)) [http://www.byond.com/members/?command=reference&path=world world] << "It's a baton!" The second argument is optional, if it's omitted, the variable will be checked against its declared type, like var/obj/item/weapon/W = new/obj/item/weapon/baton if([http://www.byond.com/members/?command=reference&path=proc%2Fistype istype](W)) [http://www.byond.com/members/?command=reference&path=world world] << "It's a weapon!" Standard code for getting specific arguments from variables which have a type that is a subclass of the type the current proc treats them with (see any attackby() proc for examples). Note that the example below is of a proc which is globaly defined, not tied to the object. It doesn't make much sense to do it like this but it works for the purposes of the example. /obj objects don't have the 'amount' variable, it's defined in /obj/item/stack (as ilustrated by the oversimplified definition of classes below. Also note where var/ is used and where it isn't). /obj var/name = "Object" /obj/item name = "Item" /obj/item/stack name = "Stack" var/amount = 50 proc/get_amount(var/obj/O) if([http://www.byond.com/members/?command=reference&path=proc%2Fistype istype](O,/obj/item/stack)) var/obj/item/stack/S = O return [http://www.byond.com/members/?command=reference&path=operator%2F%40dt%3B S.amount] There is another way of doing this. I'll show you that it exists but it is NOT TO BE USED. proc/get_aount(var/obj/S) if([http://www.byond.com/members/?command=reference&path=proc%2Fistype istype](O,/obj/item/stack)) return [http://www.byond.com/members/?command=reference&path=operator%2F%3A O:amount] The [http://www.byond.com/members/?command=reference&path=operator%2F%3A colon operator] (:) in the example above tells the byond compiler: "I know what I'm doing, so ignore the fact the object doesn't have this variable, I'll make sure it works myself." The problem is that people will revise your code and use it in ways you never planed for. This means something might eventually make the O:amount throw exceptions in the form of runtime errors. Some variables might eventually need to be removed or replaced and this is impossible when they are used with object:variable as the compiler will not throw an error when the variable is removed. The error will only become apparent after the game is ran on the live server which might cause it to crash. So just don't use this method, ever. There are some shortcuts to [http://www.byond.com/members/?command=reference&path=proc%2Fistype istype()] proc:<br> [http://www.byond.com/members/?command=reference&path=proc%2Fisarea isarea(variable)] = istype(variable, /area)<br> [http://www.byond.com/members/?command=reference&path=proc%2Fisicon isicon(variable)] = istype(variable, /icon)<br> [http://www.byond.com/members/?command=reference&path=proc%2Fismob ismob(variable)] = istype(variable, /mob)<br> [http://www.byond.com/members/?command=reference&path=proc%2Fisobj isobj(variable)] = istype(variable, /obj)<br> [http://www.byond.com/members/?command=reference&path=proc%2Fisturf isturf(variable)] = istype(variable, /turf)<br> [http://www.byond.com/members/?command=reference&path=proc%2Fisloc isloc(variable)] = ismob(variable) || isobj(variable) || isturf(variable) || isarea(variable)
Описание изменений:
Пожалуйста, учтите, что любой ваш вклад в проект «MassMeta» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см.
MassMeta:Авторские права
).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!
Отменить
Справка по редактированию
(в новом окне)
Навигация
Персональные инструменты
Вы не представились системе
Обсуждение
Вклад
Создать учётную запись
Войти
Пространства имён
Статья
Обсуждение
русский
Просмотры
Читать
Править
Править код
История
Ещё
Поиск
/tg/station 13
Главная страница
Новым игрокам
Правила
Профессии
Гайды
Предметы
Локации
Карты
Игровые режимы
Вклад
Руководство по участию в разработке билда
Маппинг
Спрайтинг
Руководство по пониманию кода
Разработка
Wiki
Свежие правки
Случайная страница
Инструменты
Ссылки сюда
Связанные правки
Служебные страницы
Сведения о странице