Я не кодер, поэтому сильно ссаными тряпками не бейте)
Мелкие вопросы по теме
Автор: 12xilluks или Albert Xill · 15.02.2013, 16:24 · 352 сообщений
Сообщений в теме: 352
tuzhit принцесса (11 May 2013 - 08:29) писал:Сделай area с названием gun1_on. В коде стрельбы из оружия(лол) нужно сделать проверку, что-то вроде if area=gun1_on, то оружие будет стрелять, соответственно, если оружие не будет находится в такой зоне, то вести огонь оно не сможет. С кодом оружия незнаком, но думаю, что у оружия в руках нет координат, поэтому при стрельбе нужно присваивать пушке координаты персонажа и проверять, находятся ли они в необходимой зоне gun1_on.
И я бы делал скрытые стены так. Есть тайл пола. На тайл пола я ставлю стену, идет проверка на наличие стен вокруг, их нет => стена ставится с окаймлением(такие полоски с винтами по бокам). Ставлю еще стену справа, идет проверка, теперь она проверяет эту стену и соседние на наличие стен рядом. Если рядом с какой-то стеной есть другая стена, то с этих сторон окаймление убирается. Еще правее ставлю скрытую стену, она появляется открытой, механизм проверки стен не включается. Потом я закрываю стену и тут механизм проверяет эту стену и соседние на наличие стен рядом, исходя из результатов дорисовываются или отрисовываются окаймления на нужных стенках.
Именно эти варианты предложил Эдитор и даже кодец написал, но это не работает, так, как надо. Точнее совсем. Скрытые стены вообще странные и проверку запихнуть туда не возможно.
Беги код тг с гитхаба. Там ищи code/game/smoothwall.dm. В этом файле находится код, который отвечает за направление соединения стен, насколько я понимаю.
И там есть прок relativewall, он запиливается в код создания стены. Этот прок собственно и есть суть smoothwall.dm. Его вызов соединяет стены.
И да, relativewall к стене прикрутить не забудь. Хотя...
1. Копипастим фальшстены и их спрайты /tg/
2. Копипастим smoothwalls /tg/
3. Вставляем костыли там, где не компилируется
ACCount (11 May 2013 - 13:47) писал:И да, relativewall к стене прикрутить не забудь. Хотя...
Копипастим фальшстены и их спрайты /tg/
Копипастим smoothwalls /tg/
Вставляем костыли там, где не компилируется
Был бы рад для начала извлечь скрытые стены из кода ферна. Закопипастить новые легко, а вот извлечь старые проблема.
OdSt_97 (11 May 2013 - 13:54) писал:Был бы рад для начала извлечь скрытые стены из кода ферна. Закопипастить новые легко, а вот извлечь старые проблема.
Ищи в коде falsewall или вроде того.
tuzhit принцесса (12 May 2013 - 00:34) писал:Ищи в коде falsewall или вроде того.
Для начала убедись, что скрытые стены ферна раскиданы по трем файлам. Я пробовал удалять из каждого, это вызывало около 6 тысяч ошибок.
OdSt_97 (12 May 2013 - 01:18) писал:Для начала убедись, что скрытые стены ферна раскиданы по трем файлам. Я пробовал удалять из каждого, это вызывало около 6 тысяч ошибок.
Где взять код ферна?
tuzhit принцесса (12 May 2013 - 01:32) писал:Где взять код ферна?
Ну в репозитории грина.
Там код 120 метров весит.
Вот тебе творческая копипасточка проверки зоны из кода чертежей:
/obj/item/weapon/gun/energy/supercool/proc/can_fire()
var/turf/T = get_turf_loc(usr)
var/area/A = T.loc
A = A.master
if (A.name == "Space") return 1
else return 0
Leonido33 (28 April 2013 - 12:14) писал:flags = FPRINT | TABLEPASS | CONDUCT - куда эти слоты, что, как и зачем.
Первый позволяет оставлять на предмете отпечатки пальцев, второй - позволяет при броске пролетать над столом, а третий - проводить электричество.
12xilluks или Albert Xill (15 February 2013 - 12:32) писал:В прямом смысле - нет. Они реализуются через т.н. "списки".
Я думаю, это не совсем корректно.
Как реализуются множества обьектов в бьонде точно сказать нельзя, так как у нас нет доступа к исходному коду бьонда, однако можно сделать несколько предположений.
Скорее всего при каких-то обстоятельствах list в коде представляет собой бинарное дерево или хэш таблицу (list_var["key"] = value), в остальных же представляет собой либо список, либо массив (в терминах си). На одной чаше весов у нас быстрая вставка множеств обьектов в середину (список), на другой - малый размер занимаемой памяти (примерно в три раза меньше, в случае двусвязного списка), практически мгновенная скорость доступа по индексу (в отличие от О(n) для списка), элементарность конструкции (без адресной арифметики массив не реализовать, а вот список на бьонде наваять можно).
В итоге список нужен лишь для очень редкого количества случаев, тогда как массив гораздо более необходимая и базовая вещь. Поэтому я ставлю на то, что list в бьонде это и есть массив (в подавляющем большинстве случаев, когда это не бинарное дерево/хэштаблица).
Это актуальный код?
Кажется, нет.
Но всё же объясните это:
Цитатаvar/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation", "[35-s_tone]") as text
if (!new_tone)
new_tone = 35
s_tone = max(min(round(text2num(new_tone)), 220), 1)
s_tone = -s_tone + 35
Как я понял, вводится новый тон кожи, переводится в численный тип, round (не понял что за функция), потом проверка на граничные значения, а потом ПОЧЕМУ-ТО вычитается из 35.
Объясняю хардкорно два возникших вопроса.
Говорили, что баг появился после введения цвета кожи для ксеносов.
Следовательно:
Если код актуальный, то каким хером это работало тогда?
В обратном случае, где посмотреть актуальный код, и не имеется ли там такой же херни?
Если я действительно нашёл ошибку, то ЧСВ моё будет увеличиваться в геометрической прогрессии, а потом напишу покровосрывающий пост в багрепорты.
Eye damage: 9001% bleeding
Блак в привате, репа старая.
Round - ну ты хотя бы в ангельский можешь? Округление до целых это.
Минимум - не дает выбрать больше 220, самым уебанским способом.
Максимум - не дает выбрать меньше 1, опять же уебанско.
Последняя строка вообще беекод, мне не понять в данном случае.
А еще мне не понять где тут ошибка и каком баге вообще речь.
Относительно кода - все правильно, относительно того что тут происходит - хз.
Dollar (19 May 2013 - 16:34) писал:Это актуальный код?
Кажется, нет.
Но всё же объясните это:
Как я понял, вводится новый тон кожи, переводится в численный тип, round (не понял что за функция), потом проверка на граничные значения, а потом ПОЧЕМУ-ТО вычитается из 35.
Объясняю хардкорно два возникших вопроса.
Говорили, что баг появился после введения цвета кожи для ксеносов.
Следовательно:
Если код актуальный, то каким хером это работало тогда?
В обратном случае, где посмотреть актуальный код, и не имеется ли там такой же херни?
Если я действительно нашёл ошибку, то ЧСВ моё будет увеличиваться в геометрической прогрессии, а потом напишу покровосрывающий пост в багрепорты.
round() - округление до целого.
Минус перед s_tone выглядит странно. Кажется, я понимаю логику, которая за этим стоит, и она ущербная.
Суть в том, что у new_tone значение 1 отвечает за светлую кожу, 220 - за черную. С точки зрения RGB это чушь, чем больше число, тем светлее должна быть кожа. Какой из этого можно сделать вывод? Такой, что new_tone в вычислении цвета кожи используется со знаком минус. Что мы, собственно, и наблюдаем. Создается переменная s_tone, которая содержит число, которое нужно вычесть из цвета. То есть код определения составляющих цвета наверняка выглядит как-то вроде:
r = 220 + s_tone
g = 210 + s_tone
b = 150 + s_tone
Ну и коэффициенты какие-нибудь, чтобы за 1..255 не выйти.
ZLOFENIX (20 May 2013 - 01:58) писал:А еще мне не понять где тут ошибка и каком баге вообще речь.
Относительно кода - все правильно, относительно того что тут происходит - хз.
Об этом:

Gvardota (20 May 2013 - 02:11) писал:
if (s_tone >= 0)
preview_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
else
preview_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
Единственное, что нашёл, связанное с RGB.
Запустил всё это у себя - скинтон отлично работает.
Там же есть и ксеносы, которым можно менять скинтон, но на спрайтовой модельке этих изменений не видно. Также как на блеке сейчас.
Короче, я просто хотел залезть в код и посмотреть, от чего такой баг.
ZLOFENIX (20 May 2013 - 01:58) писал:Блак в привате
ДАЙ!
Это к юниту.
Закрепите тему, а то я чуть новую такую же не создал.
Решил обмазаться буонд-кодом, смотрю я в него, вроде понятен, но вот структура полного имени чего-либо, к примеру, Инженерного Шкафчика с замком
/obj/structure/closet/secure_closet/engineering_personal
не понятна, по древу папок не сопоставляется, по нахождению спрайта так же. И что это?
Так выглядит местонахождение файла:
"\code\game\objects\structures\crates_lockers\closets\secure".
А так местоположение в спрайта:
"\icons\obj\closet.dmi".
DemodiX (22 June 2013 - 13:34) писал:Решил обмазаться буонд-кодом, смотрю я в него, вроде понятен, но вот структура полного имени чего-либо, к примеру, Инженерного Шкафчика с замком
не понятна, по древу папок не сопоставляется, по нахождению спрайта так же. И что это?
Так выглядит местонахождение файла:
.
А так местоположение в спрайта:
.
Меня это тоже отпугивает
DemodiX (22 June 2013 - 13:34) писал:Решил обмазаться буонд-кодом, смотрю я в него, вроде понятен, но вот структура полного имени чего-либо, к примеру, Инженерного Шкафчика с замком
не понятна, по древу папок не сопоставляется, по нахождению спрайта так же. И что это?
Так выглядит местонахождение файла:
.
А так местоположение в спрайта:
.
Это иерархия классов. Использую комбинацию Ctrl+F, F3.
DemodiX (22 June 2013 - 13:34) писал:Решил обмазаться буонд-кодом, смотрю я в него, вроде понятен, но вот структура полного имени чего-либо, к примеру, Инженерного Шкафчика с замком
не понятна, по древу папок не сопоставляется, по нахождению спрайта так же. И что это?
Так выглядит местонахождение файла:
.
А так местоположение в спрайта:
.
Иерархия объекта в Бьенде (с наследованием характеристик и прочими фичами) и его расположение в дриммейкере. В данном случае, этот путь говорит, что личный шкафчик инженера относится к запираемым на замок шкафчикам, которые в свою очередь относятся к просто шкафчикам, а те к структурам, которые являются "обж". То есть не полнотайловыми объектами в бъенде.
Так, ну все вроде понятно, а где мне посмотреть полную иерархию всех классов?
Разве не вкладка Обжект?
