|
Модостроение. Общие вопросы и ответы
|
|
| denis2000 | Дата: Сб, 15.06.2013, 11:51 | Сообщение # 1 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Помощь тем кто хочет знать больше о игре и модах Если у вас появились вопросы по модостроению в игре S.T.A.L.K.E.R. Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7
Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML [cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл: 1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R]) 2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx" 3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо) Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#" Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut] [cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти? Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда. Для того чтоб найти LOG необходимо зайти вот сюда:
В Win хр лог находится:
C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs
Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.
В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs
Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка: ... $app_data_root$ = true | false| $fs_root$| users\(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx) ... $logs$ = true| false| $app_data_root$| logs\(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи) ... [/cut][cut=Получение более подробной информации о вылете (ХОВАН)] Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...) Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так: Код function abort(fmt, ...) local reason = string.format(fmt, ...) error_log(reason) end Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией
Первый: Код Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil) Второй: Код Expression : 0 Function : ErrorLog File : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp Line : 49 Description : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic' [/cut]
Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы, статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
Посты, для которых есть свои категории, из этой темы будут удаляться или перемещаться в соответсвующую тему. Персональных извещений в ЛС о переносе\удалении поста не будет, ищите сами. Учитывайте, что в системах Ucoz тема не обновляется в статистике при переносе поста. Посты, написанные здесь-же после переноса, будут расцениваться как кросспостинг, со всеми вытекающими
[cut noguest=Первый юбилей нашей темы] Здравствуйте господа модостроители, и все так или иначе причастные к этому. Нашей теме исполнился 1 год. От души поздравляю Всех Вас дорогие друзья, творческих успехов. Хочу так же выразить отдельную благодарность denis2000 и ХОВАН. tracker 23.06.11
[/cut]
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| denis2000 | Дата: Вт, 06.01.2015, 16:27 | Сообщение # 991 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата asd123 (  ) Я так понимаю, должно получиться примерно вот такое Да получается примерно такое. Причем видео многого не показывает.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| asd123 | Дата: Вт, 06.01.2015, 16:36 | Сообщение # 992 |
 Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Цитата denis2000 (  ) Да получается примерно такое. Причем видео многого не показыв Я готов пойти на такие "жертвы" . На самом деле, я хотел именно того, что в видео. Можете показать пример скрипта, или логики, в котором можно будет подобное повторить? Буду сильно-сильно благодарен.
Вчера скачал мод Время Альянса, смотрел в логике вертолета, что в него может сесть ГГ. Заметил, что там появляется новая инфопорция: =actor_in_heli. Похоже, придётся копаться во многих скриптах
У мутантов тоже есть группировки. © Движок X-Ray
Сообщение отредактировал asd123 - Вт, 06.01.2015, 16:47 |
| |
|
| Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
| denis2000 | Дата: Вт, 06.01.2015, 17:47 | Сообщение # 993 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата roma_uf (  ) Возможно-ли создать на ЗП костюмы, которые могли защищать от выброса и быть невидимы на определенной дистанции от НПС? Вот из Сборника модостроителя из шапки темы. [cut=Невидимый костюм]Режим не очень серьёзный. Глаза - глазами, а на слух неписи как собаки, прям! На зверьё прозрачный режим ГГ не действует. Это - пример. Браз что-то сделал, надеюсь лучше, чем у меня.
Создаём пустой файл в \scripts\trans_outfit.script и создаём две функции:
function transparent_gg() --назовём её для памяти - "хулиганы зрения лишают!"
local fov1, range1, id, obj_around, alife_obj, dist_act_npc
if db.actor == nil then
return nil
end
--если ГГ голый
if db.actor:item_in_slot(7) == nil then
fov1 = 150
range1 = 80
--если на ГГ одет костюм новичка
elseif db.actor:item_in_slot(7):section() == "novice_outfit" then
fov1 = 1
range1 = 1
--если на ГГ одет другой броник
else
fov1 = 150
range1 = 80
end
--задача предыдущего куска проанализировать, что надето на ГГ и установить
--соответствующие угол обзора и дальность зрения
--
--дальше перебор ВСЕХ объектов в игре по его id
for id = 1, 65534 do
obj_around = level.object_by_id(id) -- создаём онлайн объект
if obj_around ~= nil and IsStalker(obj_around) then --если есть такой и это сталкер
--создаём серверный объект, соответствующий онлайновому
--сам обескуражен, что не смог определить дистанцию по онлайновому объекту
--ну, наверное, мало рыл
alife_obj = alife():object(id)
if alife_obj then
--определяем дистанцию между ГГ и неписем
dist_act_npc = db.actor:position():distance_to(alife_obj.position)
end
if dist_act_npc <= 120 then --отличаясь огромным человеколюбием я решил не бросать
--в беде ослеплённых сталкеров и восстанавливать им зрение в кольце 120-150 метров.
--ну жалко их, болезных
if obj_around then - проверка обязательна иначе может быть
--вылет при убийстве вражины
obj_around:set_fov(fov1) --портим неписю угол зрения
obj_around:set_range(range1) --портим неписю дальность зрения
end
else
if obj_around then --если непись в кольце 120-150м восстанавливаем зрение
obj_around:set_fov(150)
obj_around:set_range(80)
end
end
end
end
end
--а это стартёр нашей функции "хулиганы зрения лишают!"
--тупой до бесконечности, когда я подоткнулся к таймерам Николая - диалоги начали мелькать.
--но мы ж не таймеры разучиваем. Принцип прост. Вызов ф-ции подтыкаем в апдейт биндера актёра
--и каждый раз наращиваем, предварительно созданную, глобальную переменную на 1 единичку.
--на 50 раз обнуляем глобалку и запускаем "хулиганы зрения лишают!"
function timer_trans()
timer_transparent = timer_transparent + 1
if timer_transparent >= 50 then
timer_transparent = 0
transparent_gg()
end
end
------------------------------------------------------------------------------
Далее открываем файл \scripts\_g.script и внем прописываем свою глобалку:
dev_debug = false
sim_debug = false
mus_vol = 0
amb_vol = 0
timer_transparent = 0 --вот она, родная!
-------------------------------------------------------------------------------
Ну и последний штрих: подключить моторчик, чтобы пятидесятки считались, и "хулиганы
зрения лишают!" запускалась один раз на 50 апдейтов биндера.
Открываем \scripts\bind_stalker.script
ищем функцию апдейта function actor_binder:update(delta)
и так скромненько пристраиваем ей в хвостик свой доморощенный таймер
pda.fill_sleep_zones()
trans_outfit.timer_trans() -- функция из другого файла вызывается с префиксом имяфайла.
-- загрузка мода(постоянное обновление)
if mod_update() then
sgm_loader.sigerous_mod_main()
end
end
-----------------------------------------------
Всё в игре находим/обдираем/покупаем костюм новичка и пробуем инвизибл вар! [/cut]
С костюмом защищающем от выбросов все гораздо проще в скрипте surge_manager.script проверяйте, что одето на ГГ и если надет определенный костюм отключайте воздействия выброса: [cut] Код local h = hit() h.type = hit.telepatic h.power = att h.impulse = 0.0 h.direction = vector():set(0,0,1) h.draftsman = db.actor if(xr_logic.pick_section_from_condlist(get_story_object("actor"), nil, self.survive)=="true") then if(db.actor.health<=h.power) then h.power = db.actor.health - 0.05 if(h.power<0) then h.power = 0 end end end db.actor:hit(h) Код if(xr_logic.pick_section_from_condlist(get_story_object("actor"), nil, self.survive)~="true") then self:kill_all_unhided_after_actor_death() db.actor:kill(db.actor) return else level.add_cam_effector("camera_effects\\surge_02.anm", sleep_cam_eff, false, "surge_manager.surge_callback") level.add_pp_effector("surge_fade.ppe", sleep_fade_pp_eff, false) db.actor.health = db.actor.health-0.05 end [/cut]
Цитата asd123 (  ) Можете показать пример скрипта, или логики, в котором можно будет подобное повторить? Буду сильно-сильно благодарен. Не могу у меня этого кода нет. А в во Времени Альянса вертолет вроде летает по статичному маршруту, ГГ управляет только целеуказанием.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| asd123 | Дата: Вт, 06.01.2015, 17:51 | Сообщение # 994 |
 Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Цитата denis2000 (  ) Не могу у меня этого кода нет. Понятно. Чтож, надеюсь makdm ответит.. В скриптах Времени Альянса часто упоминается его ник нэйм.
У мутантов тоже есть группировки. © Движок X-Ray
|
| |
|
| Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
| denis2000 | Дата: Вт, 06.01.2015, 17:53 | Сообщение # 995 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| asd123, Да именно он делал вертолет для данного мода и не только его.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| makdm | Дата: Ср, 07.01.2015, 11:32 | Сообщение # 996 |
 Рожденный в СССР
Разработчики
Сообщений: 1294
| asd123, полёт на вертушке - это всего три функции.
Вертолёту прописываете в логике маршрут, по которому он будет кружить над локацией.
1 функция отвечает за посадку ГГ в вертушку. При этом с худа убираются все индикаторы и устанавливается шлем пилота. function actor_in_heli
2 функция - контролирует положение ГГ во время полёта. function actor_fly_mi_24
3 функция убирает лётный шлем и возвращает все индикаторы на худ при высадке ГГ с вертушки function actor_out_heli
Всё пишется в логике вертушки. Сложного ничего нет. Просто смотрите как сделано и переносите в свой мод.
Терпение...... И все получится!
Сообщение отредактировал makdm - Ср, 07.01.2015, 11:33 |
| |
|
| Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
| asd123 | Дата: Ср, 07.01.2015, 12:00 | Сообщение # 997 |
 Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Цитата makdm (  ) переносите в свой мод. Было бы не честно воровать Ваш труд Ну, если Вы сами разрешаете, то ладно. Кстати, Время Альянса не смог запустить. Игра жаловалась на то, что не смогла найти DLL файл, хотя я всё скопировал из rar архива.
Добавлено (07.01.2015, 12:00) --------------------------------------------- makdm, А как насчет стрельбы? Или она уже встроена?
У мутантов тоже есть группировки. © Движок X-Ray
Сообщение отредактировал asd123 - Ср, 07.01.2015, 12:00 |
| |
|
| Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
| makdm | Дата: Ср, 07.01.2015, 12:27 | Сообщение # 998 |
 Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата asd123 (  ) Игра жаловалась на то, что не смогла найти DLL файл Кроме установки папки gamedata необходимо также установить папку BIN
Цитата asd123 (  ) А как насчет стрельбы? Или она уже встроена? Со стрельбой всё гораздо сложнее. Необходимо править "кучу" скриптов, чтобы вертолёт "видел" врагов. Попробуйте сами разобраться в файлах heli_fire.script, bind_monster.script, xr_motivator.scfript, bind_physic_object.script, bind_heli.script Всё, что я добавлял или менял в скриптах выделено и легко понять, что нужно добавлять.
Терпение...... И все получится!
|
| |
|
| Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
| asd123 | Дата: Чт, 08.01.2015, 06:04 | Сообщение # 999 |
 Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Цитата makdm (  ) Кроме установки папки gamedata необходимо также установить папку BIN Устанавливал. Я ведь описал, что установил всю gamedata. Всё равно жаловалась и не запускалась.
Добавлено (07.01.2015, 20:35) --------------------------------------------- Добавил в sgm_options.script патроны vog-25 и m203. А еще там до моего изменения были ракеты к РПГ. Почему они не спавнятся после активации чит-режима? Код respawn_item_if_comparison("ammo_og-7b",ammo_types,1) respawn_item_if_comparison("ammo_gauss",ammo_types,2) respawn_item_if_comparison("ammo_pkm_100",ammo_types,3) respawn_item_if_comparison("ammo_dumdum",ammo_types,2) respawn_item_if_comparison("ammo_vog-25",ammo_types,1) respawn_item_if_comparison("ammo_m203",ammo_types,1)
Раз никто в Читер-клубе не ответил, спрошу здесь  Добавлено (08.01.2015, 06:04) --------------------------------------------- makdm, позаимствовал из Времени Альянса модельку вертолета. Теперь вопрос: Как убрать этих дружбанов из кабины? [cut=Вы хто? О_о] [/cut]
У мутантов тоже есть группировки. © Движок X-Ray
Сообщение отредактировал asd123 - Ср, 07.01.2015, 20:36 |
| |
|
| Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
| makdm | Дата: Чт, 08.01.2015, 08:01 | Сообщение # 1000 |
 Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата asd123 (  ) Как убрать этих дружбанов из кабины? В моде используется 4 модели вертолёта. Возьмите другую модель вертолёта ми - 24. В ней будет один пилот в шлеме. Вы сядете в вертушку вторым - за стрелка.
Терпение...... И все получится!
|
| |
|
| Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
| asd123 | Дата: Чт, 08.01.2015, 18:55 | Сообщение # 1001 |
 Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| makdm, попробовал как Вы советовали.. Получилось полетать на вертолете по созданным путям. Возникает вопрос: Поставил вертолету в логике enemy = all, а этот дуралей целится в ГГ.
И еще.. А можно ли сделать как в видео: Полёт туда, куда прикажет ГГ, и стрельба туда, куда прикажет ГГ + стрельба через какую-нибуть клавишу. (Видел во Времени Альянса стрельбу с БТР через клавишу в каком-то видео, вот и возник вопрос)
p.s. если забыли, про какое я видео: [cut=Полёт на вертолёте + стрельба с него][/cut]
У мутантов тоже есть группировки. © Движок X-Ray
Сообщение отредактировал asd123 - Чт, 08.01.2015, 18:59 |
| |
|
| Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
| alex_xp_77 | Дата: Чт, 08.01.2015, 19:59 | Сообщение # 1002 |
|
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
| Доброго вечера уважаемые форумчане!! Давно не был на форуме, очень занят проектом, созданием нового монстра" хамелион" На данном этапе создаю нового монстра" Кикимора болотная" все бы ничего, но оочень хотелось бы создать космы волос, что бы движок sdk07 смог прочесть, видел бороду лесника, прошу помощи, подскажите каким модификатором можно создать космы волос, есть предрасположение на кусты от ивы на голове, но уж очень много полигонов сожрет, если кто то знает ответ, продвинули бы меня на порядок вперед!! Заранее благодарен за любой ответ!! Прошу прощения, работы веду в Autodesk 3ds Max 2011
Сообщение отредактировал alex_xp_77 - Чт, 08.01.2015, 20:01 |
| |
|
| Эти 0 пользователя(ей) поблагодарили alex_xp_77 за это полезное сообщение: |
|
|
| asd123 | Дата: Пт, 09.01.2015, 17:44 | Сообщение # 1003 |
 Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Радио на Агропроме перестало работать Вот логика радио: [cut=Код]Код [logic] active = ph_universal
[ph_universal] scheme_type = sound_object sound_object_range_min = 3 sound_object_range_max = 5 sound_object_theme = radio_music\radio_seriy_1,radio_music\radio_seriy_2,radio_music\radio_seriy_3,radio_music\radio_seriy_4,radio_music\radio_seriy_5,radio_musi c\radio_seriy_6,radio_music\radio_seriy_7,radio_music\radio_seriy_8,radio_music\radio_seriy_9,radio_music\radio_seriy_10,radio_music\ra d i o _s eriy_11,radio_music\radio_seriy_12,radio_music\radio_seriy_13 [/cut]
Вот радио в misc: Код [object_radio]:physic_destroyable_object visual = dynamics\el_tehnika\transiver.ogf custom_data = scripts\agroprom\radio_serogo.ltx
Логику, и misc после добавления Радио не менял. Прекрасно работало, включалось и выключалось. А теперь после спавна вообще никак не реагирует. Если нужно: Спавню это радио через xr_effects.script
Добавлено (09.01.2015, 17:44) --------------------------------------------- Нашел в heli_fire.script вот такую функцию: Код function heli_fire:__init(obj) self.obj = obj self.enemy_ = nil self.fire_point = nil self.enemy = nil self.enemy_id = nil self.flag_by_enemy = true self.hit_count = 0 self.fire_id = nil self.enemy_die = true self.enemy_time = time_global() self.upd_vis = 0 self.show_health = false Я так понимаю, в строках после self. - функции, которые работают в логике вертолета?
У мутантов тоже есть группировки. © Движок X-Ray
Сообщение отредактировал asd123 - Пт, 09.01.2015, 17:49 |
| |
|
| Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
| denis2000 | Дата: Пт, 09.01.2015, 22:49 | Сообщение # 1004 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата asd123 (  ) Я так понимаю, в строках после self. - функции, которые работают в логике вертолета? Нет это начальные установки переменных.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| Дизель | Дата: Пт, 09.01.2015, 23:13 | Сообщение # 1005 |
 Сталкер
Разработчики
Сообщений: 260
| Цитата alex_xp_77 (  ) Autodesk 3ds Max 2011 Немного тоже работаю, по этой теме, но последний модификатор всегда, однако ФИЗИК, поэтому я сомневаюсь, что анимация волос с другим модификатором проскочет, через ФИЗИК.
Даже, если наложить анимацию волос, до Физик, то она всё равно будет физической.
Игра или движок не поддерживает однако, другие выходные модификаторы.
А если просто засадить волосы, то они (их вертексы) должны быть привязаны к костям или пустышкам (по подобию щупалец у кровососа), и их можно заставить шевелиться, но полигонов будет всё равно много.
andreyholkin
Сообщение отредактировал Дизель - Сб, 10.01.2015, 00:26 |
| |
|
| Эти 0 пользователя(ей) поблагодарили Дизель за это полезное сообщение: |
|
|
|