Модостроение. Общие вопросы и ответы
|
|
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 за это полезное сообщение: |
|
|
shanse | Дата: Сб, 17.08.2013, 15:05 | Сообщение # 151 |
Отмычка
Пользователи
Сообщений: 25
| подскажите, плз, где искать положение всплывающих окон при торговле (выходят за границу экрана)? такое впечатление, что не определяется граница экрана на некоторых вещах.
Сообщение отредактировал shanse - Сб, 17.08.2013, 15:47 |
|
|
Эти 0 пользователя(ей) поблагодарили shanse за это полезное сообщение: |
|
|
Митрандир | Дата: Сб, 17.08.2013, 16:12 | Сообщение # 152 |
Удаленные
| shanse, нужно уменьшать кол-во текста в описании, чтобы он целиком входил в рамку.
|
|
|
Эти 0 пользователя(ей) поблагодарили Митрандир за это полезное сообщение: |
|
|
shanse | Дата: Сб, 17.08.2013, 21:45 | Сообщение # 153 |
Отмычка
Пользователи
Сообщений: 25
| Митрандир, Цитата (Митрандир) нужно уменьшать кол-во текста в описании - проблематично, имею это в моде misery... и это не тот случай... если предмет в перврй колонке слева, то видно правый край рамки...
|
|
|
Эти 0 пользователя(ей) поблагодарили shanse за это полезное сообщение: |
|
|
Митрандир | Дата: Вс, 18.08.2013, 16:14 | Сообщение # 154 |
Удаленные
| shanse, размер рамок зависит от описания- их нельзя указать в файлах. Мизери ли это или еще какой мод- разницы нет.
|
|
|
Эти 0 пользователя(ей) поблагодарили Митрандир за это полезное сообщение: |
|
|
FantomICW | Дата: Вс, 18.08.2013, 18:57 | Сообщение # 155 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| Добрый день. Ищу способ решить вечную проблему ЗП - неуязвимость НПС к аномалиям. В ТЧ такой проблемы не было. Уязвимость/неуязвимость нпс в аномалиях в движке настроена, или скрипт какой-то за это отвечает?
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
shanse | Дата: Вс, 18.08.2013, 19:27 | Сообщение # 156 |
Отмычка
Пользователи
Сообщений: 25
| Цитата (Митрандир) размер рамок зависит от описания с размером нет проблем, просто на одних вещах окошко открывается справа от курсора, а на других в той же колонке - слева...
А вот если это вас не устраивает, то редактируйте движок. denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили shanse за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 18.08.2013, 21:15 | Сообщение # 157 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата (FantomICW) Ищу способ решить вечную проблему ЗП - неуязвимость НПС к аномалиям. Я тоже пытался искать некий параметр в конфигах НПС за это отвечающий - безуспешно. Единственное что могу сказать, что есть движковые функции:Код function disable_anomaly(); function enable_anomaly(); Но я так и не попробовал при помощи них включить аномалии для конкретных НПС.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
FantomICW | Дата: Вс, 18.08.2013, 21:33 | Сообщение # 158 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| denis2000, жаль. Но если что, на трупы реагирует. Тогда можно через логику убить квестового нпс, попавшего на вей-поинт или рестриктор в аномалии, а там уже тело поглотиться (если о гравитационных)
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
Митрандир | Дата: Вс, 18.08.2013, 21:41 | Сообщение # 159 |
Удаленные
| Цитата (denis2000) Я тоже пытался искать некий параметр в конфигах НПС за это отвечающий - безуспешно. Для возможности реагирования НПС на аномалии нужно писать дополнительные скрипты как в ars-mod 0.5.2 Цитата ( из описания ars мода) 5. Динамические аномалии. * Добавлено около 1000 штук на все локации; * НПЦ обходят аномалии, аномалии реагируют на НПЦ. * Аномалии меняют свое местоположение во время выброса.
|
|
|
Эти 0 пользователя(ей) поблагодарили Митрандир за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 18.08.2013, 22:11 | Сообщение # 160 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата (Митрандир) нужно писать дополнительные скрипты
Скрипты в студию!
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
FantomICW | Дата: Вс, 18.08.2013, 22:48 | Сообщение # 161 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| denis2000, папка scripts из ARS. Из того, что я пока увидел, так это скрипт anomaly_evader.script, видимо отвечающий за логику НПС по отношению к аномалиям, и часть из ars_mod.script: [cut=Код]Код --'----------------------------------------------------------------------------- --' ANOMALY HOLDER (RED75) --'----------------------------------------------------------------------------- anomaly_beside={}
function add_anomaly(id,position,radius) anomaly_beside[id]={pos=position,rad=radius} end
function remove_anomaly(id) if anomaly_beside[id] then anomaly_beside[id]=nil end end
local excluded_npcs={ --zaton "zat_b14_stalker_1_name", "zat_b18_noah_name", "zat_b38_stalker_cop_name", "zat_b53_artefact_hunter_1_name", "zat_b53_artefact_hunter_2_name", --jupiter "jup_a12_stalker_prisoner", "jup_b4_monolith_squad_leader_name", "jup_b19_freedom_yar_name", "jup_b217_stalker_tech", --pripyat "pri_b305_strelok_name", }
function excluded(npc) for i=1,#excluded_npcs do if string.find(excluded_npcs[i],npc:name()) or string.find(npc:character_name(),GetString(excluded_npcs[i])) then return true end end return false end
function get_nearest_anomaly(npc,dirp) if db.actor:has_info("jup_b6_anom_1") or db.actor:has_info("jup_b6_anom_2") then return false end if excluded(npc) then return false end local posnpc=npc:position() local anomid=nil local mindist=50 local pos1=nil local anomdesc={} local dir if dirp then dir=dirp else dir=npc:direction() end for obj_id,o in pairs(anomaly_beside) do local obj=level.object_by_id(obj_id) if obj then if not o.rad then o.rad=4.5 end if not o.pos or o.pos==0 then o.pos=obj:position() end local dist=posnpc:distance_to(o.pos)-o.rad if dist<mindist then local delta=vector():set(o.pos):sub(posnpc) local scalarmul=(delta.x*dir.x+delta.z*dir.z)/math.sqrt(delta.x*delta.x+delta.z*delta.z) -- если скалярное произведения текущего направления движения NPC -- и относительного радиус вектора аномалии меньше 0, то NPC удаляется от аномалии if scalarmul>-0.4 then mindist=dist anomid=obj_id pos1=o.pos anomdesc=o end end if dist+o.rad<o.rad*0.75 then local npc_id=npc:id() local snpc=alife():object(npc_id) if snpc and not snpc.ripper_start then snpc.ripper_start=true snpc.reason=obj_id alife():create("bolt",vector():set(o.pos.x,o.pos.y+1,o.pos.z),obj:level_vertex_id(),obj:game_vertex_id()) local wpn=npc:active_item() if wpn then wpn_id=wpn:id() else wpn_id=65535 end if wpn_id~=65535 then local str=wpn_id.."_"..obj_id ars_cop.start_timer("init_remove"..str,0.5,str) end local sect=obj:section() if string.find(sect,"gravi") then local ini=system_ini() local time_cum=utils.cfg_get_number(ini,sect,"accamulate_time",false,false,4000) ars_cop.start_timer("body_ripper"..npc_id,time_cum/1000+1, npc_id) end local h=hit() h.type=hit.explosion h:bone("pelvis") h.power=15 h.impulse=750 h.draftsman=npc h.direction=npc:position():sub(o.pos) npc:hit(h) drop_outfits.advanced_hit(npc_id,2) end end end end if anomid then return true,anomid,pos1,mindist+anomdesc.rad,anomdesc.rad else return false end end
--'----------------------------------------------------------------------------- --' DEAD BODY RIPPER --'----------------------------------------------------------------------------- local dead_particle1=particles_object("anomaly2\\body_tear_00") local dead_particle2=particles_object("anomaly2\\gravi_anomaly_shield_00") local dead_sound=sound_object([[anomaly\anomaly_body_tear_1]]) function dead_body_ripper_particles(npc_id) local npc=level.object_by_id(npc_id) if npc then local npc_pos=npc:position() dead_particle1:play_at_pos(npc_pos) dead_particle2:play_at_pos(npc_pos) dead_sound:play_at_pos(npc,npc_pos,0.5) ars_cop.start_timer("body_remove"..npc_id,0,npc_id) end end
function dead_body_ripper_body_remove(id) local snpc=alife():object(tonumber(id)) if snpc then alife():release(snpc,true) end end
function dead_body_ripper_init_remove(str) str=xr_s.str_explode("_",str) local wpn=level.object_by_id(tonumber(str[1])) local obj=level.object_by_id(tonumber(str[2])) if wpn and isWeapon(wpn) and obj then local wpn_dir=vector_rotate_y(obj:position():sub(wpn:position()),math.random(60,120)) wpn_dir:normalize() local ps=wpn:get_physics_shell() if ps then ps:apply_force(40000*wpn_dir.x,40000*wpn_dir.y,40000*wpn_dir.z) end end end [/cut]
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
denis2000 | Дата: Пн, 19.08.2013, 10:14 | Сообщение # 162 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| FantomICW, Пока насколько я увидел НПС тупо скриптово убивается (без эффектов если НПС в опастной близости от аномалии) и его труп после смерти вызывает срабатывание аномалии. Выглядит - неказисто: НПС шел вдруг упал и умер и только потом аномалия активировалась. К сожалению ответ на вопрос не получен: как заставить реагировать аномалию на живого НПС.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
GeJorge | Дата: Вт, 20.08.2013, 16:33 | Сообщение # 163 |
Зодчий SGM
Администраторы
Сообщений: 88
| Здравия желаю, коллеги. Хочется адаптировать в игру локацию Бар (ТЧ версию из CoP’s Level Pack), но что-то грабли заблукали. Поясните, как это делать и каким местом. Раньше сим занимался ХОВАН. Брал мой репак аллспауна, переколдовывал вертексы, и возращал мне репак аллспауна с новыми графами и вертексами локации. По части конфигов можете не обьяснять, главное как вертексы с графами обновить под новую локацию. Загодя кажу спасибо.
|
|
|
Эти 0 пользователя(ей) поблагодарили GeJorge за это полезное сообщение: |
|
|
Митрандир | Дата: Вт, 20.08.2013, 17:28 | Сообщение # 164 |
Удаленные
| GeJorge, берешь acdc универсальный, ggtool, прогу от AMK, распакованный спавн бара, свой спавн. Совмещаешь section4.bin, через amk прогу. запускаешь ggtool- подгоняешь вертексы новой локации. Потом берешь универсальный acdc - там есть батник для подгона вертексов (acdc_parse.bat). устанавливаешь начальные и конечные значения (-parse all/alife_.......ltx -old старое значение -new новое значение -way), вписываешь версию скрипта в секцию актора, прогоняешь и меняешь ими те значения game-vertex-id что были у тебя раньше, собираешь свой новый спавн. можно и в ручную подгонять- но это мазохизм, можно и через java скрипт от калинина.
Сообщение отредактировал Митрандир - Вт, 20.08.2013, 17:40 |
|
|
Эти 0 пользователя(ей) поблагодарили Митрандир за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 20.08.2013, 17:48 | Сообщение # 165 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| GeJorge, В архиве СГМ 2.1 в папке gamedata\spawns есть архив Compiler ЗП. Распаковываете его. Кидаете в папку Compiler ЗП файлы alife и way.ltx нужной локации. Открываете батник acdc_parse и пишете там: universal_acdc.pl -parse alife_zaton.ltx -old 0 -new 1173 -way pause Вместо alife_zaton указываете файл нужной локации, после old вставляете старый начальный гейм-вертекс, после new указываете новый начальный гейм-вертекс. Сохраняете и запускаете батник. Появится папка parsed_spawn, в которой будут файлы alife и way с новыми нейм-вертексами, "готовые к употреблению".
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
|