Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Общие вопросы и ответы
denis2000Дата: Сб, 15.06.2013, 11:51 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Помощь тем кто хочет знать больше о игре и модах

Если у вас появились вопросы по модостроению в игре 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]
 
denis2000Дата: Вт, 06.01.2015, 16:27 | Сообщение # 991
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата asd123 ()
Я так понимаю, должно получиться примерно вот такое

Да получается примерно такое. Причем видео многого не показывает.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
asd123Дата: Вт, 06.01.2015, 16:36 | Сообщение # 992
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Цитата denis2000 ()
Да получается примерно такое. Причем видео многого не показыв

Я готов пойти на такие "жертвы" . На самом деле, я хотел именно того, что в видео. Можете показать пример скрипта, или логики, в котором можно будет подобное повторить? Буду сильно-сильно благодарен.

Вчера скачал мод Время Альянса, смотрел в логике вертолета, что в него может сесть ГГ. Заметил, что там появляется новая инфопорция: =actor_in_heli. Похоже, придётся копаться во многих скриптах biggrin


У мутантов тоже есть группировки. © Движок X-Ray




Сообщение отредактировал asd123 - Вт, 06.01.2015, 16:47
 
denis2000Дата: Вт, 06.01.2015, 17:47 | Сообщение # 993
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата 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 ()
Можете показать пример скрипта, или логики, в котором можно будет подобное повторить? Буду сильно-сильно благодарен.

Не могу у меня этого кода нет. А в во Времени Альянса вертолет вроде летает по статичному маршруту, ГГ управляет только целеуказанием.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
asd123Дата: Вт, 06.01.2015, 17:51 | Сообщение # 994
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Цитата denis2000 ()
Не могу у меня этого кода нет.

Понятно. Чтож, надеюсь makdm ответит.. В скриптах Времени Альянса часто упоминается его ник нэйм.


У мутантов тоже есть группировки. © Движок X-Ray


 
denis2000Дата: Вт, 06.01.2015, 17:53 | Сообщение # 995
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

asd123, Да именно он делал вертолет для данного мода и не только его.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
makdmДата: Ср, 07.01.2015, 11:32 | Сообщение # 996
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

asd123, полёт на вертушке - это всего три функции.

Вертолёту прописываете в логике маршрут, по которому он будет кружить над локацией.

1 функция отвечает за посадку ГГ в вертушку. При этом с худа убираются все индикаторы и устанавливается шлем пилота.
function actor_in_heli

2 функция - контролирует положение ГГ во время полёта.
function actor_fly_mi_24

3 функция убирает лётный шлем и возвращает все индикаторы на худ при высадке ГГ с вертушки
function actor_out_heli

Всё пишется в логике вертушки. Сложного ничего нет. Просто смотрите как сделано и переносите в свой мод.


Терпение......
И все получится!


Сообщение отредактировал makdm - Ср, 07.01.2015, 11:33
 
asd123Дата: Ср, 07.01.2015, 12:00 | Сообщение # 997
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Цитата makdm ()
переносите в свой мод.

Было бы не честно воровать Ваш труд angel2 Ну, если Вы сами разрешаете, то ладно. Кстати, Время Альянса не смог запустить. Игра жаловалась на то, что не смогла найти DLL файл, хотя я всё скопировал из rar архива.

Добавлено (07.01.2015, 12:00)
---------------------------------------------
makdm, А как насчет стрельбы? Или она уже встроена?


У мутантов тоже есть группировки. © Движок X-Ray




Сообщение отредактировал asd123 - Ср, 07.01.2015, 12:00
 
makdmДата: Ср, 07.01.2015, 12:27 | Сообщение # 998
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

Цитата asd123 ()
Игра жаловалась на то, что не смогла найти DLL файл

Кроме установки папки gamedata необходимо также установить папку BIN

Цитата asd123 ()
А как насчет стрельбы? Или она уже встроена?

Со стрельбой всё гораздо сложнее. Необходимо править "кучу" скриптов, чтобы вертолёт "видел" врагов.
Попробуйте сами разобраться в файлах heli_fire.script, bind_monster.script, xr_motivator.scfript, bind_physic_object.script,
bind_heli.script
Всё, что я добавлял или менял в скриптах выделено и легко понять, что нужно добавлять.


Терпение......
И все получится!
 
asd123Дата: Чт, 08.01.2015, 06:04 | Сообщение # 999
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Цитата 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)


Раз никто в Читер-клубе не ответил, спрошу здесь biggrin

Добавлено (08.01.2015, 06:04)
---------------------------------------------
makdm, позаимствовал из Времени Альянса модельку вертолета. Теперь вопрос: Как убрать этих дружбанов из кабины?
[cut=Вы хто? О_о][/cut]


У мутантов тоже есть группировки. © Движок X-Ray




Сообщение отредактировал asd123 - Ср, 07.01.2015, 20:36
 
makdmДата: Чт, 08.01.2015, 08:01 | Сообщение # 1000
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

Цитата asd123 ()
Как убрать этих дружбанов из кабины?

В моде используется 4 модели вертолёта.
Возьмите другую модель вертолёта ми - 24. В ней будет один пилот в шлеме. Вы сядете в вертушку вторым - за стрелка.


Терпение......
И все получится!
 
asd123Дата: Чт, 08.01.2015, 18:55 | Сообщение # 1001
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

makdm, попробовал как Вы советовали.. Получилось полетать на вертолете по созданным путям. Возникает вопрос: Поставил вертолету в логике enemy = all, а этот дуралей целится в ГГ.

И еще.. А можно ли сделать как в видео: Полёт туда, куда прикажет ГГ, и стрельба туда, куда прикажет ГГ + стрельба через какую-нибуть клавишу. (Видел во Времени Альянса стрельбу с БТР через клавишу в каком-то видео, вот и возник вопрос)

p.s. если забыли, про какое я видео: [cut=Полёт на вертолёте + стрельба с него][/cut]


У мутантов тоже есть группировки. © Движок X-Ray




Сообщение отредактировал asd123 - Чт, 08.01.2015, 18:59
 
alex_xp_77Дата: Чт, 08.01.2015, 19:59 | Сообщение # 1002
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
Награды: 6
Репутация: [ 41 ]

Доброго вечера уважаемые форумчане!! Давно не был на форуме, очень занят проектом, созданием нового монстра" хамелион" На данном этапе создаю нового монстра" Кикимора болотная" все бы ничего, но оочень хотелось бы создать космы волос, что бы движок sdk07 смог прочесть, видел бороду лесника, прошу помощи, подскажите каким модификатором можно создать космы волос, есть предрасположение на кусты от ивы на голове, но уж очень много полигонов сожрет, если кто то знает ответ, продвинули бы меня на порядок вперед!! Заранее благодарен за любой ответ!!
Прошу прощения, работы веду в Autodesk 3ds Max 2011




Сообщение отредактировал alex_xp_77 - Чт, 08.01.2015, 20:01
 
asd123Дата: Пт, 09.01.2015, 17:44 | Сообщение # 1003
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Радио на Агропроме перестало работать sad
Вот логика радио:
[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
 
denis2000Дата: Пт, 09.01.2015, 22:49 | Сообщение # 1004
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата asd123 ()
Я так понимаю, в строках после self. - функции, которые работают в логике вертолета?

Нет это начальные установки переменных.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
ДизельДата: Пт, 09.01.2015, 23:13 | Сообщение # 1005
Сталкер
Разработчики
Сообщений: 260
Награды: 1
Репутация: [ 136 ]

Цитата alex_xp_77 ()
Autodesk 3ds Max 2011
Немного тоже работаю, по этой теме, но последний модификатор всегда, однако ФИЗИК, поэтому я сомневаюсь, что анимация волос с другим модификатором проскочет, через ФИЗИК.

Даже, если наложить анимацию волос, до Физик, то она всё равно будет физической.

Игра или движок не поддерживает однако, другие выходные модификаторы.

А если просто засадить волосы, то они (их вертексы) должны быть привязаны к костям или пустышкам (по подобию щупалец у кровососа), и их можно заставить шевелиться, но полигонов будет всё равно много.


andreyholkin

Сообщение отредактировал Дизель - Сб, 10.01.2015, 00:26
 
Поиск: