В общем, наверняка, некоторые догадались по моему посту в теме с мелкими вопросами, что я пытаюсь закодить некоторую меху. Проблема в том, что я нихрена не могу понять из кода, который описывает сборку мех, их рецепты, в частности, все ,что написано в файле mecha_construction_paths.dm. Просьба хотя бы в общих чертах объяснить. How does it work?
WTFHOWDOICODETHIS????//?//!!!!1111!!11
Автор: alkoz · 08.03.2013, 21:33 · 3 сообщений
Сообщений в теме: 3
Охуеть, и этот человек разобрался в атмосе. Я одну меху пилил, щас вспомню...
Сборка этого говна двухэтапная. Далее на примере Рипли.
/datum/construction/mecha/ripley_chassis
На первом мы собираем основу мехи из рук-ног. Каждая присоединённая часть накладывается оверлеем из used_atom.icon_state+"+o". Когда все части на месте, го на второй этап.
/datum/construction/reversible/mecha/ripley
На втором этапе мы работаем горелками и прочей хуитой. После последнего шага оно превращается в result. Не самая индусская хрень - огромный list. Тупил над ним минут 5.
key - им надо бить по мехе чтобы пройти на шаг вперёд в сборке.
backkey - им надо бить по мехе чтобы пройти на шаг назад в сборке.
desc - это добавляется к описанию на данном этапе сборки
Пример:
"key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/wrench,
"desc"="The hydraulic systems are connected."
В описании гидравлика подключена, отключать её /obj/item/weapon/wrench, а активировать /obj/item/weapon/screwdriver. Рвёт шаблон то, что нумерация задом наперёд. После этапа 1 меха работает, с этапа 14 начинается сборка.
Далее мы видим дохуя IFов. Это обработка нашей сборки, MAXIMUM INDIAN и минут 10 тупежа. Тут делается магия, благодаря которой платы исчезают в недрах мехи. Так как Рипли делается в 14 этапов, нумерация начинается с 14.
if(14)
user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.")
holder.icon_state = "ripley1"
Тут всё просто, пути назад нет. Только вперёд! По выполнению этого переходим на этап 13.
if(13)
if(diff==FORWARD)
user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.")
holder.icon_state = "ripley2"
else
user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.")
holder.icon_state = "ripley0"
Если мы делаем шаг вперёд в сборке, то выполняем первое. Иначе - второе. Всё просто. Но прикол в том, что атака этой сборки металлом или кабелем обрабатывается в другом месте, а вот вынимание обрабатывается тут. Не знаю, как это понимать. Если нам нужно вставить в меху что-то нестандартное (плату, кондексатор, лазер капитана), то мы в коде forward делаем del used_atom, а в обратном коде следующего этапа new НазваниеНестандартнойХрени(get_turf(holder))
