Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: 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Дата: Пн, 24.06.2013, 15:34 | Сообщение # 76
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

KADAR, Уже обсуждалось. Смотри концовку первой темы (ссылка в первом посте).

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
СэнпайДата: Сб, 29.06.2013, 19:19 | Сообщение # 77
Гражданский
Пользователи
Сообщений: 13
Награды: 0
Репутация: [ 0 ]

Всем добрый день)
Скажите, пожалуйста, что надо прописать в логике персонажа, дабы после диалога появился на пару сек черный экран, а после него сам этот персонаж исчез восвояси?
 
makdmДата: Сб, 29.06.2013, 20:06 | Сообщение # 78
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

Сэнпай, если делать в логике персонажа, то будет не очень красиво.
Код такой

on_info = {+поршень_окончания_диалога} %=run_postprocess(blink) =destroy_object%

Лучше делать через логику рестриктора. Правда код будет длиннее, зато качественно.

[cut noguest=Логика рестриктора][logic]
active = sr_idle@control_dialog

[sr_idle@control_dialog]
on_info = {+поршень_окончания_диалога} sr_idle@postprocess %=run_postprocess(black:7921:true)%

[sr_idle@postprocess]
on_game_timer = 24 | sr_idle@stop_postprocess %=remove_npc(STORY_ID_вашего_персонажа)%

[sr_idle@stop_postprocess]
on_info = {!object_exist(STORY_ID_вашего_персонажа)} sr_idle@nil %=stop_postprocess(7921)%

[sr_idle@nil][/cut]


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


Сообщение отредактировал makdm - Сб, 29.06.2013, 20:13
 
irbis23Дата: Вс, 30.06.2013, 15:12 | Сообщение # 79
Гражданский
Пользователи
Сообщений: 1
Награды: 0
Репутация: [ 0 ]

Всем добрый день. Подскажите пожалуйста, какие файлы нужно отредактировать, что бы сделать механика Ермака на Кордоне бессмертным. (SGM 2.2 ЗП). Урок 1 из КМБ читал, но самостоятельно разобраться не получилось.
 
FantomICWДата: Вс, 30.06.2013, 15:35 | Сообщение # 80
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

irbis23, открываем файл configs/scripts/SGM/escape/esc_b1_stalker_mechanik.ltx и правим его логику.
Она выглядит так:
[cut]
Код
[logic]
active = move@mechanic

[move@mechanic]
move_dest_number       = 114051
move_look_vertex       = 118120
move_state_when_center = ward_noweap
move_state_when_move   = walk
meet                   = meet
invulnerable           = {!actor_enemy -mar_mine_detector_talk} true, false

[meet]
abuse           = false
use             = true
allow_break     = false
meet_on_talking = false
trade_enable    = true

За бессмертие отвечает параметр invulnerable. В данном случае, механик бессмертен, пока с ним не поговоришь о миноискателе.
Чтобы он был бессмертным всегда, заменим все значение на true.
Вот так:
Код
[logic]
active = move@mechanic

[move@mechanic]
move_dest_number       = 114051
move_look_vertex       = 118120
move_state_when_center = ward_noweap
move_state_when_move   = walk
meet                   = meet
invulnerable           = true

[meet]
abuse           = false
use             = true
allow_break     = false
meet_on_talking = false
trade_enable    = true
[/cut]





Сообщение отредактировал FantomICW - Вс, 30.06.2013, 15:37
 
BlackStalkerДата: Пн, 01.07.2013, 01:26 | Сообщение # 81
Гражданский
Пользователи
Сообщений: 2
Награды: 0
Репутация: [ 0 ]

Всем доброго времени суток. У меня вопрос можно ли сделать в ТЧ тайники как в ЗП т.е. даже не получая информацию о тайнике я смог бы брать оттуда вещи?Если да, то как? Заранее спасибо
 
denis2000Дата: Пн, 01.07.2013, 16:02 | Сообщение # 82
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

BlackStalker, [cut]Для этого в файле treasure_manager.script добавь функцию:
Код
function CTreasure:treasure_spawn(k)
    local v = self.treasure_info[k]
    local obj = alife():story_object(v.target)
    if obj ~= nil then
     --' Сгенерить вещи
     for kk,vv in pairs(v.items) do
      if ammo_section[vv.section] == true then
       se_respawn.create_ammo(vv.section,    
         obj.position,
         obj.m_level_vertex_id,    
         obj.m_game_vertex_id,
         obj.id,
         vv.prob)
      else
       for i=1,vv.prob do
        alife():create(vv.section,
          obj.position,
          obj.m_level_vertex_id,    
          obj.m_game_vertex_id,
          obj.id)
       end
      end
     end
    else
     printf("TREASURE %s, target doesnt exist", k)
    end
end


в функции CTreasure:give_treasure(k) закоментируй (или удали) строки:
Код
for kk,vv in pairs(v.items) do
      if ammo_section[vv.section] == true then
       se_respawn.create_ammo(vv.section,    
         obj.position,
         obj.m_level_vertex_id,    
         obj.m_game_vertex_id,
         obj.id,
         vv.prob)
      else
       for i=1,vv.prob do
        alife():create(vv.section,
          obj.position,
          obj.m_level_vertex_id,    
          obj.m_game_vertex_id,
          obj.id)
       end
      end
     end

в функции CTreasure:check() исправь self:give_treasure(k) на self:treasure_spawn(k)
Теперь достаточно в начале новой игры вызвать функцию вида treasure_manager.get_treasure_manager():check(), для заполнения всех тайников предметами.[/cut]


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
EнoтДата: Ср, 03.07.2013, 22:02 | Сообщение # 83
Вольный бродяга
Вольные сталкеры
Сообщений: 2410
Награды: 11
Репутация: [ 839 ]

Помогите пожалуйста! В ТЧ 1.0006 без модов Шустрый, как только входит на территорию Деревни Новичков, умирает по неизвестным причинам. Как можно его воскресить?

А собственно зачем? Квест на него уже пройден, а дополнительное задание на поиск броника простейшее. denis2000

но куртку то я ему не принёс. Да и умирает - не по сюжету это.

Так может искать причину смерти, а не спавнить его заново и снова наблюдать возможную гибель НПС. denis2000

Цитата (denis2000)
Так может искать причину смерти

и как её найти? Рядом с ним стою, он идёт-идёт и падает мёртвым. Не выстрелов не мутантов. sad


Биография моего персонажа - немного поэзии.
Прочитанные книги серии S.T.A.L.K.E.R. - всё больше знаний о Зоне.
AMD Ryzen 7 5700x3d, nVidia GeForce RTX 3060 12GB, 32GB DDR4 3600 MHz, Windows 11 pro х64


Сообщение отредактировал Eнoт - Ср, 03.07.2013, 22:03
 
denis2000Дата: Чт, 04.07.2013, 12:41 | Сообщение # 84
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Eнoт, Значит нужно проверить логику (но с вероятностью 99% проблемма не в ней) в файле config\misc\gulag_escape.ltx. Вероятнее всего он просто ранен и истекает кровью. [cut]Можно попробовать пролечить выполнив код:
Код
local id, obj, kto    
    for id=1, 65535 do    
           obj = level.object_by_id(id)    
     if obj and IsStalker(obj) then    
      kto = obj:name()    
      if (kto == "esc_shustryi") then    
           obj.health = 1    
      end    
     end    
    end

Если не поможет можно заспавнить заново:
в файле spawn_sections.ltx добавить секцию:
Код
[esc_shustryi]:stalker
$spawn     = "respawn\esc_shustryi"
character_profile    = esc_shustryi
spec_rank = veteran
community = stalker
custom_data = escape.ltx

логика в файле escape.ltx:
Код
[logic]
active = sleeper4@shustryi

[sleeper4@shustryi]
path_main = esc_lager_sleep4
meet = no_meet
danger = danger_condition@shustryi

[danger_condition@shustryi]
ignore_distance = 0

Спав стандартным кодом:
Код
alife():create("esc_shustryi", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
[/cut]


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
mistofatДата: Пт, 05.07.2013, 21:20 | Сообщение # 85
Новичок
Пользователи
Сообщений: 83
Награды: 0
Репутация: [ 10 ]

Всем доброго времени суток.Можно ли сделать в ТЧ,так чтобы ночью было как в зп?
сделал
но не помогло(Надо чтоб прям темно темно было biggrin ) Буду признателен за любую подсказку
 
mizabrikДата: Сб, 06.07.2013, 23:01 | Сообщение # 86
Почетный инженер «Свободы»
Свобода
Сообщений: 360
Награды: 10
Репутация: [ 216 ]

mistofat, не помогло потому, что это настройки погоды (цвет неба, дождя, параметры тумана). Единственная идея — попробуй поставить динамическое освещение, может помочь.

 
BlackStalkerДата: Ср, 10.07.2013, 22:43 | Сообщение # 87
Гражданский
Пользователи
Сообщений: 2
Награды: 0
Репутация: [ 0 ]

Вопрос. Есть ли функция чтобы при нажатии кнопки Ф6(допустим) группировка становилась бы дружественной или хотя бы нейтральной? А то на Кордоне в сталкера попал и они все врагами стали как это исправить? (просто переигрывать не хочется!)

Читерский вопрос конечно. Решение есть в Сборнике модостроения ЗП v10.10.11, ссылка в шапке. denis2000
 
SnakДата: Пт, 12.07.2013, 23:12 | Сообщение # 88
Гражданский
Пользователи
Сообщений: 2
Награды: 0
Репутация: [ 0 ]

Доброго времени суток, пытаюсь изменить экипировку группы сопровождающей героя в Припять (Зулус, Вано, Соколов, Бродяга), нашел, как мне кажется, файл с описанием их экипировки в подземном тоннеле (character_desc_agroprom_underground.xml) после модификации этого файла, экипировка никак не изменяется, подскажите, пожалуйста, в чем причина?
 
FantomICWДата: Пт, 12.07.2013, 23:52 | Сообщение # 89
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

Snak, переиграть до похода пробовал?


 
mizabrikДата: Сб, 13.07.2013, 13:42 | Сообщение # 90
Почетный инженер «Свободы»
Свобода
Сообщений: 360
Награды: 10
Репутация: [ 216 ]

Snak, а вас не смущает слово "agroprom" в названии файла? Правьте профиль в этом файле configs/gameplay/character_desc_underpass.xml.

 
Поиск: