Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 16 Мая 2014 Это популярное сообщение. Поделиться Опубликовано 16 Мая 2014 Ковыряемся в файлах ТЧ Прежде чем писать в тему - внимательно читаем первый пост, и пользуемся поиском. Возможно, ответ на Ваш вопрос уже есть. Касательно телепатии: если Вы передаете Ваши файлы телепатическим путем - ответы будут передаваться тоже телепатически. Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком. 4 8 6 12 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
7.9 174 Опубликовано 25 Августа 2011 Поделиться Опубликовано 25 Августа 2011 (изменено) Artos, ... Метод чтения глобальной таблицы, признан менее затратным, лоадстринг - не совсем ясно, но вроде то-же приемлемо. В общем: вопрос - закрыли, уверенность - обрели Спасибо. Всем. Изменено 25 Августа 2011 пользователем 7.9 всё легко Ссылка на комментарий
Artos 99 Опубликовано 25 Августа 2011 Поделиться Опубликовано 25 Августа 2011 (чтобы другие все же не наступали на грабли ...) Использование глобальной метатаблицы '_G' для проверки наличия как самого скрипт-файла, так и функции в нем по указателям на них - не просто менее затратен, но и полностью безопасен и позволяет дать полный ответ: "имеется и это функция", не прибегая к попыткам загрузить/вызвать несуществующее ... (по сути при каждой "проверке" наступая 'на грабли', хотя и в 'защищенном' варианте). "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
_Призрак_ 11 Опубликовано 25 Августа 2011 Поделиться Опубликовано 25 Августа 2011 А разве получится использованием метатаблицы _G узнать существует ли функция в скрипте который до этого ни разу не использовался? Он же по идее отсутствует в _G Freedom Ссылка на комментарий
Artos 99 Опубликовано 25 Августа 2011 Поделиться Опубликовано 25 Августа 2011 (изменено) _Призрак_ Хороший вопрос! :-) Тоже ранее ломал голову ... Могу дать только свои 'толковалки': '_G' - глобальная метатаблица окружения. Естественно, при запуске игры движек формирует из 'штатных' файлов/функций и пр. некое 'начальное окружение'. Существует 2 варианта дозагрузки в это 'начальное' окружение дополнений (своих файлов): а) Принудительная (ручками) загрузка. Т.е. применение методов 'setfenv' и подобных. б) Первое обращение к 'неизвестному' пока скрипт-файлу. Т.е. _G["script_name"] - это и есть поиск, чтение кода и внесение в глобальную метатаблицу указателей на прочитанный код. Очевидно, переменная '$game_scripts$' из 'fsgame.ltx' указывает и ограничивает область поиска новой таблицы с именем "script_name". На практике, когда заведомо известно имя скрипт-файла, можно 'подключать' более простым вариантом, типа: if script_name then ... Т.о. при 'прямых' обращениях из скрипт-файлов к файлам, к которым еще не было обращений (еще не использовались) , как раз и происходит 'первичное использование', т.е. внесение их в окружение. Опасение отсутствия в метатаблице окружения (_G) следует учитывать при 'не прямых' попытках вызова функций, т.е. например из веток диалогов или тэгов <action> ... и т.п. В этом случае отсутствует первичная проверка наличия соответствующей функции в метатаблице огружения, а идет прямой вызов. Естественно, если скрипт-файл еще не был внесен в глобальное окружение - произойдет фатальная ошибка. (=>безлоговый вылет). Изменено 25 Августа 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Malandrinus 615 Опубликовано 25 Августа 2011 Поделиться Опубликовано 25 Августа 2011 Для принудительной загрузки модуля есть специальная движковая функция prefetch(<имя модуля без расширения>) Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Artos 99 Опубликовано 25 Августа 2011 Поделиться Опубликовано 25 Августа 2011 (изменено) malandrinus Ты прав, конечно. Но т.к. и тема и заморочки у многих малоопытных модмейкеров не в способах подключения - и употребил фразу: ' ... применение методов 'setfenv' и подобных", не углубляясь в 'дебри'. К сожалению, врядли кто из них будет заморачиваться с подключением 'по всем правилам и канонам' своих самописных скриптов, а вот то, что вызывать, например, функцию спавна из самописного скрипта из диалога небезопасно - это как раз те 'грабли', на которые многие и наступают. Т.о. в текущем топике более актуальна упрощенная подгрузка, совмещенная и с проверкой: "а загружено ли?", о которой стОит некоторым вспоминать, перед применением в диалогах/тасках и иже ... Добавлено через 18 мин.: P.S. malandrinus Подключение через метод 'prefetch' из пак-файлов *.xdb заканчивается ошибкой (в некоторых ситуациях ...). Изменено 25 Августа 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
White Rabbit 0 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 (изменено) Может кто напомнит. Все позабывал. Как на мини-карте: 1. Включить-выключить отображение количетсва неписей (обычно внизу стандартной мини-карты)? 2. Включить-выключить отображение опознавания "свой-чужой"? Изменено 26 Августа 2011 пользователем White Rabbit Ссылка на комментарий
Comador 203 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 White Rabbit, 1. в файле maingame.xml найди код <static_pda_online x="138" y="167" width="35" height="28" light_anim="ui_pda_contacts" la_cyclic="0" la_texture="0" la_text="1" la_alpha="1"> <texture>ui_hud_map_counter</texture> <text y="6" align="c" font="graffiti19" r="238" g="155" b="23" a="255"/> </static_pda_online> и удали ссылку на текстуру ui_hud_map_counter 2. в файле map_spots_relations.xml прописаны "метки" на НПС в зависимости от отношения к ГГ. Здесь тоже удаляешь ссылку на текстуру, в зависимости от того, какую метку ты хочешь "убрать" с карты. Неважно – сколько у тебя друзей. Важно - сколько из них помогут тебе в трудную минуту и сколько вспомнят о тебе когда им хорошо. "Худ" и "Умное выпадание частей монстров" для Народной солянки Ссылка на комментарий
White Rabbit 0 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 Comador, удали ссылку на текстуру ui_hud_map_counterНе понял, как текстура связана с отображаемыми цифрами? Я думал там код, выдающий число на экран. в файле map_spots_relations.xml прописаны "метки" на НПС в зависимости от отношения к ГГ. Здесь тоже удаляешь ссылку на текстуру, в зависимости от того, какую метку ты хочешь "убрать" с карты. Гилянем. Сэнкс. Ээээээ.... А цвет метки как здесь завязан? Ссылка на комментарий
Comador 203 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 White Rabbit, если нужно оставить текстуру, а убрать текст в счетчике, то нужно или убрать вот этот код <text y="6" align="c" font="graffiti19" r="238" g="155" b="23" a="255"/> или в этом коде вместо a="255" прописать a="0". По поводу меток: там, где идет ссылка на текстуру, например для врагов <enemy_mini_spot width="4" height="4" stretch="1" alignment="c" xform_anim="map_spot_rel_xform" xform_anim_cyclic="0"> <texture r="255" g="0" b="0">ui_minimap_point</texture> </enemy_mini_spot> то r="255" g="0" b="0" отвечает за цвет метки (в данном случае красный). Неважно – сколько у тебя друзей. Важно - сколько из них помогут тебе в трудную минуту и сколько вспомнят о тебе когда им хорошо. "Худ" и "Умное выпадание частей монстров" для Народной солянки Ссылка на комментарий
singapur22 14 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 (изменено) Comador то нужно или убрать вот этот код Исключение пустого элемента <text attributes/> Лишь отключит установку значений параметров, указанных в нём. Соответственно, после его удаления, задействуются значения по умолчанию. Для отключения вывода текста, нужно исключить все попытки его установки методами SeText(...) и SetTextST(...). Ну или, как было предложено в варианте 2, указав нулевое значение непрозрачности текста. Хотя это не лучший вариант, так как текст всё равно будет продолжать отрисовываться, хоть мы его и не будем видеть. Изменено 26 Августа 2011 пользователем singapur22 Опаа-а!!! Ливер вылез! Ссылка на комментарий
Desertir 202 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 задействуются значения по умолчанию С этим согласен, но нужно исключить все попытки его установки методами SeText(...) и SetTextST(...) не полезем же мы за этим в движок? Именно он отрисовывает все дела на худе, а получает он их (окна, которые будет изображать) из xml. Так что нужно либо сделать число прозрачным, либо вынести это окно\число за пределы экрана. ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
Prapor11 0 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 Всем привет , в общем решил совместить AI_Pack_Add_AMKII_Mon с Blowout mod'ом , совмещал все точно , но тут появилась ошибка nil в файле xr_logic связанная со строчкой _G[schemes[scheme]].add_to_binder(npc, ini, scheme, section, st) Что это может быть?Помогите пожалуйста. Я ДатчикХабара со stalker-portal Ссылка на комментарий
White Rabbit 0 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 (изменено) Ясно. Буду экспериментировать. Сэнкс заранее (посты сос спасибками удаляют - в личку не очень люблю писать ). Малость уточню. В принципе я хотел включить, а не выключить, но где это, в каких файлах не знаю. И вхелпах по модостроению не попадалось. А на форумах поиск - нудное занятие (вот если бы все в шапку сносили - было бы проще). И старые моды поудалял. Где худы редактировались. Сравнить не с чем. А в DMX все это отсутствует. Но помню, что было. Вот и решил проконсультироваться. Изменено 26 Августа 2011 пользователем White Rabbit Ссылка на комментарий
shpiler 5 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 Подскажите пожалуйста,убиваю Борова и игра вылетает, из-за чего может быть данный вылет? мод OGSM + мои правки,но в скриптах ничего не менял кроме добавления lootmoney мода. Клиент: Синхронизация... * phase time: 48 ms * phase cmem: 278858 K * [win32]: free[2624192 K], reserved[91296 K], committed[1478752 K] * [ D3D ]: textures[755319 K] * [x-ray]: crt heap[278856 K], process heap[7991 K], game lua[23243 K], engine lua[245 K], render[0 K] * [x-ray]: economy: strings[4883 K], smem[28709 K] [16-9] get_xml_name for[game_tutorials.xml] returns [game_tutorials.xml] [16-9] get_xml_name for[ui_credits.xml] returns [ui_credits.xml] [16-9] get_xml_name for[ui_movies.xml] returns [ui_movies.xml] ! Missing ogg-comment, file: d:\games\s.t.a.l.k.e.r. - shadow of chernobyl\gamedata\sounds\weapons\m_reload.ogg ! Missing ogg-comment, file: d:\games\s.t.a.l.k.e.r. - shadow of chernobyl\gamedata\sounds\weapons\groza_shoot.ogg * MEMORY USAGE: 307338 K [16-9] get_xml_name for[maingame_pda_msg.xml] returns [maingame_pda_msg.xml] [16-9] get_xml_name for[maingame_pda_msg.xml] returns [maingame_pda_msg.xml] 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: ...w of chernobyl\gamedata\scripts\death_manager.script:144: attempt to index field '?' (a nil value) stack trace: Вытащу любой обьект из Battlefield Play 4 Free Ссылка на комментарий
лнкс 0 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 (изменено) shpiler, а в character_desc ничего не менял? У меня такое происходило, когда я пытался раскоментировать некоторые строки в этих файлах, например: ammo_5.56x45_ap \n ;borov_flash \n device_torch \n ;val_key_to_underground \n . Изменено 26 Августа 2011 пользователем лнкс Лучше спросить глупость, чем её совершить. Ссылка на комментарий
shpiler 5 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 лнкс, Изменял, но я не вижу здесь какой-либо ошибки,и ещё такой вопрос из какого файла берётся профиль борова, из character desc darkvalley или character desc bandit.Просто у меня в этих файлах разное содержимое профиля. <specific_character id="val_bandit_borov" team_default="1"> <name>val_borov_name</name> <icon>ui_npc_u_stalker_bandit_borov</icon> <map_icon x="0" y="0"></map_icon> <bio>val_borov_bio</bio> <class>val_bandit_borov</class> <community>bandit</community> <terrain_sect>stalker_bandit_terrain</terrain_sect> <rank>621</rank> <hit_probability_factor>1.5</hit_probability_factor> <reputation>-147</reputation> <visual>actors\bandit\stalker_bandit_borov</visual> <snd_config>characters_voice\human_02\bandit\</snd_config> <crouch_type>1</crouch_type> <supplies> [spawn] \n wpn_colt_python \n ammo_50_ae \n wpn_w1200 \n ammo_12x70_buck \n ;borov_flash \n device_torch \n ;val_key_to_underground \n </supplies> #include "gameplay\character_criticals_4.xml" #include "gameplay\character_dialogs.xml" </specific_character> Вытащу любой обьект из Battlefield Play 4 Free Ссылка на комментарий
лнкс 0 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 (изменено) shpiler, из character desc darkvalley. Если раскоментил ему флешку или ключ, то вылет гарантирован. Вылет у тебя разовый или постоянный? И ещё, попробуй убрать:#include "gameplay\character_dialogs.xml" . У меня концовка секции: </supplies> #include "gameplay\character_criticals_4.xml" <start_dialog>hello_dialog</start_dialog> </specific_character> Изменено 26 Августа 2011 пользователем лнкс Лучше спросить глупость, чем её совершить. Ссылка на комментарий
kish 297 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 .....Что это может быть?Помогите пожалуйста. Попробуй так, как у меня: function assign_storage_and_bind(npc, ini, scheme, section) local npc_id = npc:id() local st if not db.storage[npc_id][scheme] then db.storage[npc_id][scheme] = {} st = db.storage[npc_id][scheme] st["npc"] = npc -- Схема стартует впервые - прибиндить --printf("DEBUG: assign_storage_and_bind: bind scheme: '%s'", scheme) _G[schemes[scheme]].add_to_binder(npc, ini, scheme, section, st) else st = db.storage[npc_id][scheme] end st["scheme"] = scheme st["section"] = section st["ini"] = ini return st end Только у меня без AI_Mon Modification. "...Let the game begin hear the starting gun Play from the heart today we will overcome When the game is over all the counting is done We were born to win number 1..." (с) Manowar Ссылка на комментарий
Nazgool 250 Опубликовано 27 Августа 2011 Поделиться Опубликовано 27 Августа 2011 (изменено) Могу дать только свои 'толковалки': Разреши дать "ДО"толковалки, т.к. не могу гарантировать достоверность всей информации, но не могу не дополнить. Информация ниже дана не для "профессионалов", а только в качестве разъяснения. То, что нашёл, излагаю ниже (факты с моими комментариями - "ДО"толковалками и пояснениями): Итак факты : 1. Для таблицы _G (т.е. для глобальной таблицы Lua) в СТАЛКЕР-е существует СВОЯ метатаблица. 2. В этой метатаблице есть только одно поле с ключем __index и значением function 3. У каждого, уже ПОДКЛЮЧЁННОГО!, к игре файла-модуля (*.script) тоже существует своя метаблица с единственным полем __index и значением таблица. Этой таблицей является глобальная таблица Lua _G P.S. Всё далее, конечно, опровержимо, но... (...позволю себе умозаключения) При обращении (например, при вызове "if какой_то_ещё_не_ни_разу_не_запрашиваемый_файл then") в таблице _G происходит поиск поля с ключём "какой_то_ещё_не_ни_разу_не_запрашиваемый_файл". Естественно, не найдя его в себе (таблице _G), происходит обращение к метатаблице таблицы _G. И поскольку в этой метатаблице только одно поле с ключём __index и значением function, происходит вызов этой функции. Проверки показали, что при подобном вызове в глобальной таблице Lua (_G) сразу же появляется поле с ключём "какой_то_ещё_не_ни_разу_не_запрашиваемый_файл" и значением таблица. Т.к. не могу заглянуть в движок, могу только предполагать что эта функция зугружает файл как модуль, устанавливает для неё метатаблицу с индексом на таблицу _G. Короче, промоделировал подобный код в SciTE (Плохо, но зато быстро ) -- Тут вроде как прочитанные данные из 'fsgame.ltx' game_scripts = 'F:\\Games\\S.T.A.L.K.E.R.\\gamedata\\scripts\\' -- типа путь к папке 'scripts' package.path = game_scripts.."?.script" -- это для Lua-интерпритатора(не обр. внимания) -- Далее метатаблица для _G local mt_G = {__index = function(t,k) -- тут вызывается функция local scr_path = game_scripts..k..'.script' -- типа путь к файлу local f = loadfile(scr_path) if f then module(k, package.seeall) -- объявляем файл как модуль и устанавливаем "видимость" (package.seeall) setfenv(f,_M) -- поскольку loadfile "работает" в своём окружении (окружением для неё является _G), то назначим ей окружением загружаемый модуль (т.е. проведём операцию загрузки - содержимого файла в...) новый модуль. f() -- загружаем содержимое файла-модуля setmetatable(_M, {__index = _G}) -- как я уже констатировал факт, для этого модуля устанавливается метатаблица, ссылкой из которой является таблица _G) return require(k) -- ну и возвращаем подключённый модуль как таблицу end end } -- для глобальной таблицы Lua "_G" устанавливается метатаблица 'mt_G' setmetatable(_G, mt_G) Ну и дальше любой вызов вызов ещё несуществующего для игры файла (или ещё_несуществующего_файла.ещё_не_видимой_функции) приводит к запуску "механизма"(на моём скромном примере ) создания этой записи и вызова функции. Ну, например, при загрузке новой игры нет поля с индексом xr_effects. Обратившись : if xr_effects then ... Сначала происходит нечто, описанное сначала моего поста. И если файл-модуль с именем "xr_effects" существует и правильно загрузиться, то ... Дальше что там Вы хотите. Примерно так, ИМХО. Изменено 27 Августа 2011 пользователем Gun12 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти