Это популярное сообщение. Dennis_Chikin 3 664 Опубликовано 16 Мая 2014 Это популярное сообщение. Поделиться Опубликовано 16 Мая 2014 Ковыряемся в файлах ТЧ Прежде чем писать в тему - внимательно читаем первый пост, и пользуемся поиском. Возможно, ответ на Ваш вопрос уже есть. Касательно телепатии: если Вы передаете Ваши файлы телепатическим путем - ответы будут передаваться тоже телепатически. Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком. 4 8 6 12 Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-847221
7.9 174 Опубликовано 25 Августа 2011 Поделиться Опубликовано 25 Августа 2011 (изменено) Artos, ... Метод чтения глобальной таблицы, признан менее затратным, лоадстринг - не совсем ясно, но вроде то-же приемлемо. В общем: вопрос - закрыли, уверенность - обрели Спасибо. Всем. Изменено 25 Августа 2011 пользователем 7.9 Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-620792
Artos 99 Опубликовано 25 Августа 2011 Поделиться Опубликовано 25 Августа 2011 (чтобы другие все же не наступали на грабли ...) Использование глобальной метатаблицы '_G' для проверки наличия как самого скрипт-файла, так и функции в нем по указателям на них - не просто менее затратен, но и полностью безопасен и позволяет дать полный ответ: "имеется и это функция", не прибегая к попыткам загрузить/вызвать несуществующее ... (по сути при каждой "проверке" наступая 'на грабли', хотя и в 'защищенном' варианте). Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-620801
_Призрак_ 11 Опубликовано 25 Августа 2011 Поделиться Опубликовано 25 Августа 2011 А разве получится использованием метатаблицы _G узнать существует ли функция в скрипте который до этого ни разу не использовался? Он же по идее отсутствует в _G Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-620824
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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-620844
Malandrinus 615 Опубликовано 25 Августа 2011 Поделиться Опубликовано 25 Августа 2011 Для принудительной загрузки модуля есть специальная движковая функция prefetch(<имя модуля без расширения>) Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-620858
Artos 99 Опубликовано 25 Августа 2011 Поделиться Опубликовано 25 Августа 2011 (изменено) malandrinus Ты прав, конечно. Но т.к. и тема и заморочки у многих малоопытных модмейкеров не в способах подключения - и употребил фразу: ' ... применение методов 'setfenv' и подобных", не углубляясь в 'дебри'. К сожалению, врядли кто из них будет заморачиваться с подключением 'по всем правилам и канонам' своих самописных скриптов, а вот то, что вызывать, например, функцию спавна из самописного скрипта из диалога небезопасно - это как раз те 'грабли', на которые многие и наступают. Т.о. в текущем топике более актуальна упрощенная подгрузка, совмещенная и с проверкой: "а загружено ли?", о которой стОит некоторым вспоминать, перед применением в диалогах/тасках и иже ... Добавлено через 18 мин.: P.S. malandrinus Подключение через метод 'prefetch' из пак-файлов *.xdb заканчивается ошибкой (в некоторых ситуациях ...). Изменено 25 Августа 2011 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-620869
White Rabbit 0 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 (изменено) Может кто напомнит. Все позабывал. Как на мини-карте: 1. Включить-выключить отображение количетсва неписей (обычно внизу стандартной мини-карты)? 2. Включить-выключить отображение опознавания "свой-чужой"? Изменено 26 Августа 2011 пользователем White Rabbit Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-621021
Comador 205 Опубликовано 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 прописаны "метки" на НПС в зависимости от отношения к ГГ. Здесь тоже удаляешь ссылку на текстуру, в зависимости от того, какую метку ты хочешь "убрать" с карты. Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-621028
White Rabbit 0 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 Comador, удали ссылку на текстуру ui_hud_map_counterНе понял, как текстура связана с отображаемыми цифрами? Я думал там код, выдающий число на экран. в файле map_spots_relations.xml прописаны "метки" на НПС в зависимости от отношения к ГГ. Здесь тоже удаляешь ссылку на текстуру, в зависимости от того, какую метку ты хочешь "убрать" с карты. Гилянем. Сэнкс. Ээээээ.... А цвет метки как здесь завязан? Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-621034
Comador 205 Опубликовано 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" отвечает за цвет метки (в данном случае красный). Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-621036
singapur22 14 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 (изменено) Comador то нужно или убрать вот этот код Исключение пустого элемента <text attributes/> Лишь отключит установку значений параметров, указанных в нём. Соответственно, после его удаления, задействуются значения по умолчанию. Для отключения вывода текста, нужно исключить все попытки его установки методами SeText(...) и SetTextST(...). Ну или, как было предложено в варианте 2, указав нулевое значение непрозрачности текста. Хотя это не лучший вариант, так как текст всё равно будет продолжать отрисовываться, хоть мы его и не будем видеть. Изменено 26 Августа 2011 пользователем singapur22 Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-621099
Desertir 202 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 задействуются значения по умолчанию С этим согласен, но нужно исключить все попытки его установки методами SeText(...) и SetTextST(...) не полезем же мы за этим в движок? Именно он отрисовывает все дела на худе, а получает он их (окна, которые будет изображать) из xml. Так что нужно либо сделать число прозрачным, либо вынести это окно\число за пределы экрана. Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-621112
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) Что это может быть?Помогите пожалуйста. Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-621113
White Rabbit 0 Опубликовано 26 Августа 2011 Поделиться Опубликовано 26 Августа 2011 (изменено) Ясно. Буду экспериментировать. Сэнкс заранее (посты сос спасибками удаляют - в личку не очень люблю писать ). Малость уточню. В принципе я хотел включить, а не выключить, но где это, в каких файлах не знаю. И вхелпах по модостроению не попадалось. А на форумах поиск - нудное занятие (вот если бы все в шапку сносили - было бы проще). И старые моды поудалял. Где худы редактировались. Сравнить не с чем. А в DMX все это отсутствует. Но помню, что было. Вот и решил проконсультироваться. Изменено 26 Августа 2011 пользователем White Rabbit Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-621114
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: Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-621219
лнкс 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 пользователем лнкс Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-621237
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> Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-621297
лнкс 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 пользователем лнкс Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-621310
kish 303 Опубликовано 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. Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-621657
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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/15045-soc-kovyrjaemsja-v-fajlah/page/358/#findComment-621699
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти