Вы задаёте интересующий вас вопрос и тот, кто может вам на него ответить, пишет свой ответ. Правила темы:
1. Прежде чем задать вопрос, желательно прочитать все предыдущие страницы темы. Даже если вы не найдете там нужного ответа - я уверен, вы узнаете много нового. Второй вариант - воспользоваться поиском по ключевому слову.
2. Вы можете задавать вопросы, только непосредственно касающиеся создания модификаций и редактирования файлов игры
3. Личные вопросы не допускаются
4. Отвечать на вопросы желательно достаточно развернуто, задевая все аспекты касающиеся конкретного вопроса
5. Отвечать вы можете только в том случае если уверены в правильности ответа, если не знаете - просто не отвечайте. Авторы неправильных, вводящих в заблуждение ответов будут наказываться.
6.Соблюдайте грамотность и правильность построения вопросов и ответов, во избежание их удаления. "Спасибо / пожалуйста / не знаю" и прочие односложные и не несущие смысловой нагрузки сообщения, будут удаляться немедленно, а их авторы - наказываться.
Основная цель темы - помочь новичкам-модостроителям, второстепенная - свести на нет тенденцию создания новых тем по каждому интересующему новичков вопросу.
Привет, вобщем пробовал вчера, диалоговое окно так и не появилось(((, как обычно высветилось нажмите f чтобы говорить, что не есть гуд(, но самое смешное происходит, когда нажимаешь поговорить))) Астор зависает наглухо... Вот все мои файлы что не так ? кто знает подскажите...
* MEMORY USAGE: 288325 K ! Cannot find saved game ~~~ object 'Потап': pick_section_from_condlist: function 'on_talk' is not defined in xr_effects.script * Log file has been saved successfully!
FATAL ERROR
[error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...shadow of chernobyl\gamedata\scripts\xr_logic.script:703: attempt to call local 'func' (a nil value)
stack trace:
Привет! Одно разочарование((((, да еще такой момент, этот перс чья логика в спойлере, уже на втором пути, свободно общается с гг, хотя стоит у него но_меет))) Что то не могу никак собрать. Кто нибудь подскажет в чем ошибка?!
Сообщение отредактировал WERTOix - Пятница, 12.09.2014, 19:44
Сергей, данное описание ошибки говорит о том, что вызываемая функция или не существует, или просто напросто, не была загружена в окружение. Причина может быть даже не в самой функции, а в том, что находится перед ней (выше, по телу файла). Если, над функцией имеется малейшая ошибка (не приводящая к крашу игры), то всё, что находится под ... не читается, и не загружается в окружение. Соответственно, смотри последние коды, файла xr_logic.script . Ведь то, что у тебя не работает ни мой способ, ни предложенный Андреем-dimak, говорит о том, что ошибка не вэтом, а в чем-то другом...
WERTOix, если честно, то посоветовал бы лучше мод строить на базе мода АМК. p.s. Парнишка 15-ти лет, на базе АМК, сделал неплохую глобалку под названием "Закоулки правды". Я 100 % уверен, что на скриптах оригинала он бы не сделал даже половины этого интересного мода.
Ошибка в функции по логу.
Далее не понятно вообще.
Цитата
~~~ object 'Потап'
Но имя нпс - Пот
Как здорово быть тёртым сталкером! Не бояться каждого шороха, оружия не носить с собой много!
Привет, да это я просто сократил, а так Потап везде))) Хотелось далеко не уходить от чистого тч, поэтому без амк, хотя преимуществ конечно много, не спорю))). Ладно парни спасибо за помощь!
Сообщение отредактировал WERTOix - Пятница, 12.09.2014, 23:26
WERTOix, Сергей, попробуй вот что. Поставь своему рестриктору радиус 2!!!! Дело в том, что "законное" расстояние для диалога с НПС - 2, а у тебя рестриктор - 4. и попробуй проверить работоспособность этого момента. Вот здесь и может быть глюк
здесь у меня в логике НПС стоит расстояние 2: on_actor_dist_le = 2| nil {+proba_dial} %=on_talk% т.е. оно соответствует конфиговскому. а вот здесь
в логике уже изменено на 4: on_actor_dist_le = 4| nil {+proba_dial} %=on_talk% Как видно из видео (мой НПС в обоих случаях кемпер) мой НПС при подходе к нему начинает плевать на прописанную ему логику, окно диалога не открывается... Выход - либо изменять у себя радиус рестриктора, либо лезть в конфиги и править"разрешенное расстояние диалога", что конечно скажется наверное и на других НПС чутка оффтопика: http://www.youtube.com/watch?v=L7UkEfW1_L0&feature=youtu.be
мой НПС при подходе к нему начинает плевать на прописанную ему логику,
Ну, видать, алгоритм в движке чё-то "не понимает", это из разряда "незадокументированных неожиданностей". Этот двигун и так уже вымучали со всех сторон за почти десяток лет, сюрпризов он продолжает выдавать как приятных, так и "неожиданных" - по-любасу низкий ему поклон, как и его авторам. Для информации в рамках топика: На собственном опыте построения валкеров с "боль-мень" сложной логикой - на "поле" карт существуют какие-то "чёрные дыры", которые нпс в "свободном плавании" самостоятельно обходят "крюком", хотя там и аи-сетка есть и всё остальное благополучно внешне - ну, внешне можно идти прямиком, ан нет, надо завернуть и обойти. Стоит только принудительно отправить непися в эту "зону" - всё, логика валкера виснет, хотя логика основная остаётся в действии - идти никуда не идёт, анимации не отрабатывает (всё по дефлоту - стоит торчком), тупо замирает на месте "мордой лица на север", хотя и отрабатывает все статичные моменты логики - говорит, обращает внимание, но всё другое "скриптовое" аннулируется. Похоже,что такое же происходит в массе случаев "замерзания" неписей во многих модах. Не знаю, как это "обходить", кроме как эмпирически подбирать приемлимые координаты. Конечно же, я многого не понимаю, но на "это" наткнулся и сразу "предупреждаю" возможные вопросы по этому поводу. Если кто-то сможет пояснить вразумительно данную "аномалию", очень прошу - разъясните. ЗЫ Возможно, что ещё связано и с "графпойнтами" - наверняка, многие замечали, что "стоишь в одной координатной сетке" - шаг в сторону и резкая смена , как г-вертекс, так и левел-вертекс. Мож, из-за этого, что движковый алгоритм расчёта "маршрута непися" не особо любит такие "перемены".
Сообщение отредактировал Korpus - Суббота, 13.09.2014, 23:41
Korpus, есть такое. К примеру в своем моде, Димон бежит по своей траектории и Фармацевт, когда благополучно переходит в ВЛ, незадолго до избушки деда Щукаря есть место, где он постоянно отклоняется от курса в сторону, далее возвращается и топает дальше, но логика обычная. Далее правка логики в моде АМК многое дает для мододелов. К примеру, если взять такой момент: В нлс и в нар.соли Фримен спавнится с внешней стороны бара и бежит в помещение бара, где у него прописан валкер. Если таким образом заспавнить его в оригинельной игре, то на подходе к бару словим вылет (лога не помню), и чтобы этого не произошло нужно Фримену добавить пару дополнительных путей. Одно время, когда начинал модить, в моде "Напарники", логику напарника присваивал Бармену. И только Бармен начинал выбегать из своего валкера, сразу вылетала игра, но только когда прописал несколько дополнительных путей, то все пошло. Бармен стрелял по собакам из всего, что у него было в продаже, даже из РПГ-7.
Как здорово быть тёртым сталкером! Не бояться каждого шороха, оружия не носить с собой много!
Ну, видать, алгоритм в движке чё-то "не понимает", это из разряда "незадокументированных неожиданностей".
Это понятно, Саша. Но у меня представлена конкретная ситуация: функция принудительного открытия диалога нормально отрабатывается, если она вызывается на расстоянии 2 и менее метра от НПС. А вот если она вызывается на большем расстоянии от НПС, то и происходит такая вот "бяка"
Всем привет! Столкнулся с такой вот проблемой, заспавнил через скрипт zone_witches_galantine, аномалия появилась, но только создает видимость что она работает)))), у нее нет хита... Кто в курсе подскажите, в чем разница заспавненной через ал.спавн и через скрипт ?! За ранее благодарен.
в чем разница заспавненной через ал.спавн и через скрипт ?!
Beeblebrox, при спавне через all.spawn такие параметры как количество шейпов, их тип, а также размеры и смещение считываются движком в нет-пакет объекта из секции спавна объекта. При спавне через скрипт движок создаёт объект с нулевым шейпом. По-русски - у вашей аномалии радиус действия равен НУЛЮ. Вот она и не хитует ГГ, так как для хита нужно быть внутри зоны действия, но нельзя быть внутри НУЛЯ. После скриптового спавна необходимо, до вывода объекта в он-лайн, переписать STATE часть его нет-пакета, в которой указать недостающие параметры.
Конечно можно. Вот пример функции. Правда, я её использую на ЗП. Если не получится, то ищите аналогичную для ТЧ.
function create_anomaly( zone_name, zone_position, zone_radius, lv, gv ) local sobj=alife():create(zone_name,zone_position, lv, gv ) local packet=net_packet() packet:w_begin(0) sobj:STATE_Write(packet) packet:r_seek(2) local game_vertex_id=packet:r_u16() local cse_alife_object__unk1_f32=packet:r_float() local cse_alife_object__unk2_u32=packet:r_s32() local level_vertex_id=packet:r_s32() local object_flags=packet:r_s32() local custom_data=packet:r_stringZ() local story_id=packet:r_s32() local cse_alife_object__unk3_u32=packet:r_s32() local shape_count=packet:r_u8() for i=1,shape_count do local shape_type=packet:r_u8() if shape_type == 0 then local center=packet:r_vec3() local radius=packet:r_float() else local box=packet:r_matrix() end end local restrictor_type=packet:r_u8() local cse_alife_custom_zone__unk1_f32=packet:r_float() local cse_alife_custom_zone__unk2_u32=packet:r_s32() local on_off_mode_enabled_time=packet:r_s32() local on_off_mode_disabled_time=packet:r_s32() local on_off_mode_shift_time=packet:r_s32() local offline_interactive_radius=packet:r_float() local artefact_spawn_places_count=packet:r_u16() local cse_alife_anomalous_zone__unk1_u32=packet:r_s32() local last_spawn_time_present=packet:r_u8() packet:w_u16(game_vertex_id) packet:w_float(cse_alife_object__unk1_f32) packet:w_s32(cse_alife_object__unk2_u32) packet:w_s32(level_vertex_id) packet:w_s32(object_flags) packet:w_stringZ(custom_data) packet:w_s32(story_id) packet:w_s32(cse_alife_object__unk3_u32) packet:w_u8(1) packet:w_u8(0) local sphere_center=vector() sphere_center:set(0, 0, 0) packet:w_vec3(sphere_center) radius=zone_radius packet:w_float(radius) packet:w_u8(restrictor_type) packet:w_float(cse_alife_custom_zone__unk1_f32) cse_alife_custom_zone__unk2_u32=bit_not(0) packet:w_s32(cse_alife_custom_zone__unk2_u32) packet:w_s32(on_off_mode_enabled_time) packet:w_s32(on_off_mode_disabled_time) packet:w_s32(on_off_mode_shift_time) packet:w_float(offline_interactive_radius) packet:w_u16(artefact_spawn_places_count) packet:w_s32(cse_alife_anomalous_zone__unk1_u32) sobj:STATE_Read(packet, packet:w_tell()-packet:r_tell()) return sobj end
function get_story_id_not_replay() local ST ST = xr_logic.pstor_retrieve(db.actor, "ScriptAnomId", 0) if type(ST) ~= "number" or ST == nil then ST = 9000 xr_logic.pstor_store(db.actor, "ScriptAnomId", ST) end if type(ST) == "number" or ST ~= nil then ST = ST + 1 xr_logic.pstor_store(db.actor, "ScriptAnomId", ST) end return tonumber(ST) end
function create_anom(name_anom, posit_anom, lvid_anom, gvid_anom, radius_anom, power_anom) local obj = alife():create(name_anom, posit_anom, lvid_anom, gvid_anom)
-----------------------write---------------------- local packet = net_packet() obj:STATE_Write(packet)
-----------------------load----------------------- -- cse_alife_object local game_vertex_id = packet:r_u16() local distance = packet:r_float() local direct_control = packet:r_u32() local level_vertex_id = packet:r_u32() local object_flags = packet:r_u32() local custom_data = packet:r_stringZ() local story_id = packet:r_u32() local spawn_story_id = packet:r_u32()
-- cse_shape local shape_count = packet:r_u8() for i=1,shape_count do local shape_type = packet:r_u8() if shape_type == 0 then -- sphere local center = packet:r_vec3() local radius = packet:r_float() else -- box local box = packet:r_matrix() end end
-- cse_alife_space_restrictor local restrictor_type = packet:r_u8()
-- cse_alife_custom_zone local max_power = packet:r_float() local owner_id = packet:r_u32() local enabled_time = packet:r_u32() local disabled_time = packet:r_u32() local start_time_shift = packet:r_u32()
-- cse_alife_anomalous_zone local offline_interactive_radius = packet:r_float() local artefact_spawn_count = packet:r_u16() local artefact_position_offset = packet:r_u32()
-- se_zone_anom local last_spawn_time_present = packet:r_u8()
if (string.find (name_anom, 'zone_zharka_static') ~= nil or string.find (name_anom, 'zone_witches_galantine') ~= nil or string.find (name_anom, 'zone_mosquito_bald') ~= nil or string.find (name_anom, 'zone_mincer') ~= nil or string.find (name_anom, 'zone_gravi_zone') ~= nil or string.find (name_anom, 'zone_buzz') ~= nil ) and packet:r_elapsed() ~= 0 then abort("left=%d", left) end
-- cse_shape packet:w_u8(1) -- количество фигур packet:w_u8(0) -- тип фигуры: сфера packet:w_vec3(vector():set(0, 0, 0)) if radius_anom ~= nil then packet:w_float(radius_anom) else packet:w_float(1.0) end
-- cse_alife_custom_zone if power_anom ~= nil then packet:w_float(power_anom) else packet:w_float(max_power) end packet:w_u32(owner_id) packet:w_u32(enabled_time) packet:w_u32(disabled_time) packet:w_u32(start_time_shift)
function spawn_anom1() this.create_anom('zone_zharka_static', vector():set(-30.974,0.002,693.734),178968,2618, 3, 0.7) end
function spawn_anom2() this.create_anom('zone_witches_galantine_strong', vector():set(-20.851,0.000,693.588),178968,2618, 5, 0.8) end
function spawn_anom3() this.create_anom('zone_mincer_average', vector():set(-26.064,0.000,698.637),178968,2618, 4, 1) end
Инфа с antreg.ucoz.ru, можно так попробовать, но сам я, только предпочитаю спавнить скриптом - рестрикторы и обычный огонь костра.
Цитата
хотелось бы уточнить, эти функции куда кидать, в xr_eff...s или
Нет, не нужно. Создашь свой скрипт, поместишь все содержимое нетпакета в него. В нем же создаешь функции для спавна аномалий, как показано выше. И функцию отыграешь, как тебе удобней. Скрипт регить нигде не нужно.
Как здорово быть тёртым сталкером! Не бояться каждого шороха, оружия не носить с собой много!
Сообщение отредактировал dimak - Воскресенье, 21.09.2014, 20:26