Полтергейст 38 Опубликовано 29 Ноября 2009 (изменено) [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: f:\games\stalker\gamedata\scripts\utils.script:156: attempt to index local 'char_ini' (a nil value) Ошибка при обращении к функции cfg_get_string. Как можно отследить скрипт, вызывающий эту ошибку, то есть обратившийся к этой функции? Сам utils.script в порядке. Изменено 29 Ноября 2009 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 30 Ноября 2009 (изменено) Maks_K а не проще поставить проверку на nil Как? Начать с if char_ini == nil then а дальше что? Я в скриптах не очень, потому и спрашиваю. Ещё в utils.script обнаружил закомментированную функцию "trace", может как-то с помощью неё можно отследить скрипт, вызвавший ошибку? Изменено 30 Ноября 2009 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 3 Декабря 2009 (изменено) Возможно ли теоретически сделать в ТЧ захват (или уничтожение) смарта и войну группировок так, как это сделано в ЧН? Или хотя бы сделать так, чтобы можно было какому-нибудь отряду прописать нападение на смарт? Изменено 4 Декабря 2009 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 3 Декабря 2009 (изменено) Почему "портить"? Просто как-то странно это выглядит, когда на свалке возле входа на агропром зачищаешь бандитов, а после перехода на другую локацию и обратно они опять там. По идее, там должны быть либо сталкеры, либо вообще никого не должно быть. Такая ж фигня и на агропроме возле входа в подземелье и ещё много где. Изменено 4 Декабря 2009 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 14 Декабря 2010 (изменено) Решил создать новые аномалии под ТЧ, порылся, нашёл кучу уже существующих интересных, но отключенных аномалий. Попробовал восстановить аномалию zone_ameba - словил вылет: почему-то из строки visual в конфиге аномалии читается только первый символ, как следствие - игра жалуется, что не может найти p.ogf. Соответствие скриптовому классу se_zone_visual прописал на всякий случай, хотя на Z_AMEBA это не должно влиять. Что с этим делать? С аномалией "кислотный туман" тоже проблемка: не знаю что писать в строку "class" в конфиге. Скриптовый clsid есть (zone_acid_fog), а какому классу для конфигов он соответствует - не знаю, в поиске не нашёл. Может кто знает? И ещё вопросик: реально ли вообще в ТЧ сделать squad'ы? Через ON_OFF_G не получается, т.к. класс не скриптовый, но думаю, может как-то сделать через db.script. В se_stalker и se_monster сделать поле now_in_squad и при загрузке (STATE_Read) добавлять в специальную таблицу в db, но как сделать, чтобы неписи не разбегались в разные стороны? Спавн по такой схеме, как в ЗП (sim_board.fill_start_position) я уже сделал, но дальше что-то всё идёт из рук вон плохо. Происходят чудеса: с начало игры в деревне новичков спанятся нпс-ы в экзах, в ТД пасутся сталкеры, которые должны быть в Припяти, Круглов превращается в рядового сталкера и вместо побега на Янтарь устраивает шмон трупов наёмников, бродит по территории Ростока, жалуется на жизнь и т.д. Смотрите smart_terrain_presets.ltx, там прописывается соответствие группировок и рангов для уровня. И ещё: в одном из скриптов (по-моему smart_terrain.script) видел, что неписям при переходе из смарта в смарт добавляется ранг, может было бы лучше отключить. Изменено 14 Декабря 2010 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 15 Декабря 2010 Такой вопрос: почему неписи перестают обходить аномалии, если из amk_anoms.script убрать спавн артов? Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 17 Декабря 2010 (изменено) 4. How can I insert the function, that the monster-piece "burers hand" is useable as primary weapon Рука контролёра из NLC для этого лучше подойдёт. Изменено 18 Декабря 2010 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 18 Декабря 2010 (изменено) Блин, что-то я совсем замучался с обходом аномалий неписями. Ни в какую не хотят обходить. Сначала думал, что повлияли мои правки в amk_anoms.script и se_stalker.script - заменил на оригиналы, та же байда. Кто-нибудь вообще может объяснить, как в AMK сделан обход аномалий неписями? То, что они прописываются как restrictor'ы я знаю, но как именно это (не) работает? И ещё: есть ли ограничение на длину значения параметра SpaceRestrictionSection в ltx'ах неписей (m_stalker.ltx и др.)? Вот так SpaceRestrictionSection = space_restrictor, zone_mine_field, zone_burning_fuzz, zone_burning_fuzz1, zone_buzz, zone_gravi_zone, zone_ice, zone_flame, zone_zhar, zone_emi, zone_campfire_grill, zone_mincer, zone_death, zone_mosquito_bald, zone_no_gravity, zone_psy, zone_witches_galantine, zone_zharka_static не слишком много? как создать передвигающиеся аномалии Берите любую понравившуюся аномалию из zone_torrid.ltx Посмотрите, как это реализовано на уровне x18 _ Ещё у меня есть одна идейка - сделать смарты доступными не только для людей и мутантов, но и для техники. Чтобы вертушкам и БТРам можно было задавать работы и переходы из смарта в смарт. Такое вообще возможно? Изменено 18 Декабря 2010 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 18 Декабря 2010 (изменено) Если декомпилировать all.spawn, то в файле alife_l04u_labx18.ltx есть вот это: ; cse_motion properties motion_name = labx18_1floor_2.anm Что это значит я пока не знаю, но что именно эта строка отвечает за направление движения - 100% Упоминания labx18_1floor_2 в скриптах и конфигах не нашёл. Изменено 18 Декабря 2010 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 18 Декабря 2010 (изменено) Если формат .anm файлов не менялся, то должно подойти. Пробовать надо. Только надо, чтобы аномалии было где "развернуться". Да, и ещё: класс ZS_TORRD в ЗП поддерживает скрипт для серверного объекта, в ТЧ для класса Z_TORRID такой поддержки нет. На движение влиять не должно, просто функции скриптового класса se_anoms.se_zone_torrid работать в ТЧ не будут. А вообще, лучше было бы с помощью скрипта задать аномалии путь движения по waypoint'ам. Например, принудительно менять position, game_veretex и level_vertex серверному объекту. Но это сложнее и готовых скриптов для этого пока нет. Изменено 18 Декабря 2010 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 18 Декабря 2010 (изменено) Кто знает, за что отвечает параметр killer_clsids у всей живности? появляется хрен знает где Наверное, в .anm жёстко указаны координаты, по которым должна двигаться аномалия. Изменено 18 Декабря 2010 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 19 Декабря 2010 Dest string less than needed Где-то накосячили с сохранением/загрузкой Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 21 Декабря 2010 (изменено) А возможно ли отследить с какой локации на какую переходит ГГ Сделать в биндере игрока поле actor_on_level и в net_spawn поставить сравнение имени текущего уровня с именем уровня, записанного в этом поле. Если значения отличаются - записать это в какой-нибудь параметр. Может можно было бы сделать это через биндер для level_changer, но как именно пока не знаю. Изменено 21 Декабря 2010 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 22 Декабря 2010 (изменено) потому как я ни чего похожего actor_on_level не нашел Там этого и нет, надо самому создать поле actor_on_level и приравнять его к level.name(). Сделать, чтобы этот параметр сохранялся. Потом в net_spawn() сравнивать actor_on_level с level.name(). Выглядит это примерно так: function actor_binder:__init (obj) super(obj) ... actor_on_level = nil level_changing_from = nil level_changing_to = nil ... end function actor_binder:net_spawn(data) ... if actor_on_level == nil then actor_on_level = level.name() else level_changing_from = actor_on_level actor_on_level = level.name() level_changing_to = actor_on_level end ... end function actor_binder:save(packet) ... packet:w_stringZ(actor_on_level) ... end function actor_binder:load(reader) ... reader:r_stringZ(actor_on_level) ... end После этого можно будет запрашивать параметры level_changing_to и level_changing_from из любого скрипта. Можно это же сделать через биндер для самого level_changer'а, но это чуть сложнее. В функциях save/load всё должно быть в той же последовательности, то есть, если сохранение параметра actor_on_level идёт после сохранения какого-то другого параметра, то и в загрузке они должны идти в таком же порядке. ------ Сегодня мне удалось перенести state_mgr.script из ЗП в ТЧ. Всё работает, кроме раненых и анимаций сидения у костра. При попытке вылечить раненого игра вылетает (ругается, что передаю nil в state_mgr.set_state. А любители погрятся у костра просто стоят как столбы. Копал xr_kamp - ничего не нашёл. Кто-нибудь знает, как правильно вызвать смену анимации при лечении раненых и в схеме xr_kamp? Изменено 22 Декабря 2010 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 23 Декабря 2010 Вот "вырезки" из этих файлов: Подставьте перед элементами таблицы "state_mgr_". Для первого элемента получится state_mgr_movement. И так далее. Короче говоря, эти параметры делаются для скриптов, имена которых можно узнать этой подстановкой. Вот у меня почему-то на новом state_mgr'е не хочет работать анимация "sit", причина непонятна. Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 23 Декабря 2010 (изменено) weapon = "none" --' Оружие убрано совсем; "strapped" - на спине, "unstrapped" - в руках movement = move.stand, --' непись стоит на месте (ещё бывает move.walk - ходьба, move.run - бег) mental = anim.free, --' Непись в свободном состоянии (ещё бывает anim.panic - шарахаться от всего недружески настроенного, anim.danger - напряжённое состояние) bodystate = move.standing, --' Состояние тела: стоим ровно (ещё бывает move.crouch - присесть) animstate = "stand", --' Состояние анимации - в ТЧ везде, кроме сидячих и спящих анимаций ставим "stand" animation = "raciya" --' Имя анимации Если подставить перед этими параметрами state_mgr_, то получим state_mgr_weapon, state_mgr_movement, state_mgr_mental и т.д. - имена скриптов, для которых эти параметры задаются. Изменено 24 Декабря 2010 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 26 Декабря 2010 (изменено) Кто-нибудь может подсказать, почему это движок вдруг перестал видеть функцию initialize_if_needed() в smart_terrain.script? Что делал: Поставил поле m_smart_terrain_id в se_stalker и se_monster, в котором записывается id смарта, в котором npc сейчас. В сохранение/загрузку тоже добавил. После этого заменил все обращения к функции <серверный объект>:smart_terrain_id() на <серверный объект>.m_smart_terrain_id. Вся фишка в том, что smart_terrain.script работает (проверял schecker'om), но функцию всё равно потерял из виду во время игры (!!!). ППЦ какой-то, как такое вообще может быть? Помогите кто-нибудь. Ошибка проявляется при вызове этой функции из xr_gulag.setup_gulag_and_logic_on_spawn В последний момент успеваю заметить стоящего, как столб, непися. И ещё такой вопросик: нафига smart_terrain'у двойное обновление? Одно вызывается симулятором, другое через биндер. Какой в этом смысл? Изменено 26 Декабря 2010 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 26 Декабря 2010 (изменено) Смена состояний вызывается отчасти из move_mgr, отчасти зависит от движковых состояний (mental_state, danger_objects и других). Иногда вызывается из схем поведения (xr_*). Соответствие скриптов state_mgr* друг другу хранится в state_lib. Лучше их вообще не трогать, если работают. Я уже писал, что пробовал переносить новый state_mgr от ЗП, но без проблем не обошлось. Пришлось откатить обратно, но старый скрипт периодически вызывает "C Stack overflow", особенно когда в онлайне много неписей. Для монстров всё попроще, один скрипт mob_state_mgr. Изменено 26 Декабря 2010 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 28 Декабря 2010 Вопрос к авторам АМК мода: почему может слетать ваша схема обхода аномалий? Даже если в xr_motivator дописать функцию anomaly_evade как в bind_monster, всё равно не помогает. amk_anoms из NLC, хотя с оригинальным такая же ерунда. Что я делаю не так? Может ли список "SpaceRestrictionSection" в m_stalker.ltx как-то на это влиять? Поделиться этим сообщением Ссылка на сообщение
Полтергейст 38 Опубликовано 29 Декабря 2010 (изменено) Arhara На самом деле - схема АМК не слетела - её просто нет Как это? А что тогда делает класс "evaluator_anomaly" в blowout_scheme? У меня аномалии тупо не добавляются в restrictor'ы NPC, хотя я вчера сносил свои правки и ставил чистые конфиги и скрипты (blowout_scheme, xr_motivator, amk_anoms, move_mgr) с АМК мода - такая же фигня. Если её нет - как тогда сделать, чтобы обходили? Может как-то задействовать эти строки из stalker_ids? action_anomaly_planner detect_anomaly action_solve_zone_puzzle property_inside_anomaly get_out_of_anomaly Блин, ну помогите кто-нибудь! Я уже утомился с этой проблемой. Пробовал прописывать аномалии при их спавне к рестрикторам НПС и уже существующие при спавне самих НПС - после того, как дошёл до Петрухи и компании - вылет без лога. Если запихнуть это в update биндеров, то вообще мёртвый висяк. Схема от АМК по-прежнему отказывается работать, хотя файлы, которые отвечают за её работу, оригинальные. Есть ли какой-нибудь готовый скрипт прописывания аномалий в restrictor'ы к NPC, которые в оффлайне? То, что это возможно - 100%. Если такого скрипта нет, то до нового года я такой сделать не успею С обновлением смартов проблему решил - просто сделал добавление в db.smart_by_name всех смартов, а не только онлайновых, и всё время вызывал их обновления из binder'а игрока. Изменено 29 Декабря 2010 пользователем Полтергейст Поделиться этим сообщением Ссылка на сообщение