Перейти к контенту

[SoC] Ковыряемся в файлах


Рекомендуемые сообщения

panzyuza, решение проблемы банально - почитать статьи на википедиях на тему спавна НПС.

 

Маленькая подсказка: НПС - не предмет, для его спавна, помимо наличия самой секции, требуется и связка с его профилем и пр. обязательными параметрами (см. аналогичное в 'spawn_sections.ltx').

То, что сделано в all.spawn'e - сделать одной функцией спавна не доступно, для этого и создаются спавн-секции.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Я не через скрипт спавнил.Просто как заходишь на Бар, вылетает секунд через десять.Искал проблему, но не нашел.И чисто случайно поменял секцию m_barman на stalker.И вылеты прекратились.Вот только торговли у него нету,точнее ассортимента.Я Бармена вообще не трогал.Он стандартный.

Изменено пользователем panzyuza

Возник вопрос, надеюсь кто нить поможет.

Тч 1.004 + амк141 патч 2

 

Ферма в ТД и лохотрон. Зачистил ферму по заданию, денег не отдал :P

Однако теперь на нее набиваются сталкеры-одиночки и скрипт около фермы идет заново. Все реплики/диалоги/действия нпс повторяются с каждой новой группой осевшей там. Иногда достаточно просто подойти к ферме молча и скрип пойдет заново.

 

Можно ли сохранить точку сбора/гулаг для нпс, но отключить рестарт скрипта после выполнения задания с первичной группой?

торговлю не трогал.Она из старого мода все есть в продаже.

 

Добавлено через 6 мин.:

а вот еще проблемка.Как наступает необходимость во сне,приходит сообщение о необходимости сна.Ложишься спать, и когда проснулься, все равно двоиться в глазах.Всем известная функция стоит на апдейте актера в net_spawn.Я так понял, проблема в ней.Может кто подсказать, в чем дело?

function test_sleep_pp()

local tmp=ogsm_funcs.load_variable("slp",0)

if tmp>360 then

sleep_manager.main(5+ogsm_funcs.load_variable("nrg",0))

end

if tmp>300 then

level.add_pp_effector("yantar_underground_psi.ppe", 999, true)

level.set_pp_effector_factor(999, 5.0)

if not has_alife_info("encyclopedy_tutorial_sleep") then

db.actor:give_info_portion("encyclopedy_tutorial_sleep")

game.start_tutorial("part_17_sleep")

end

end

if tmp<=300 then

level.remove_pp_effector(999)

end

end

 

 

 

Добавлено через 24 мин.:

Вот примерно решил проблему.Вот так

Просто в скрипте,когда надо спать,и начинается двоение идет вызов функции принудительного засыпания ГГ.Данной функции не было и функция удаления эффекта не вызывалась.По идее должно было вылететь, но не вылетало.Там была строка

if tmp>360 then

sleep_manager.main(5+ogsm_funcs.load_variable("nrg",0))

end

Вот и вызов несуществующей функции,надо было просто исправить на

if tmp>360 then

sleep_manager.start_sleep(5+ogsm_funcs.load_variable("nrg",0))

end

И все!А я на постэффекты грешил.

 

 

Просто у меня сон из ЗП(такой мод на тч),и при совмещении со спальным мешком не обращал внимание.Подскажите, правильно ли я сделал?

Здравствуйте моддеры!Решил перевести мод русский на италианский язык.подскажите как делать пожалуйста :dash2:

т.к. я живу в италии и мои ПК италианский незнаю даже с чего начать(все фаилы LTX немогу даже читать т.к всё написано по русски и мой Adobe Reader италианский)

Изменено пользователем sergi1901
sergi1901, gamedata\config\text\rus либо в рус переводи либо скопируй и назови Ital скажем, сделай тексты там и в localization смени language = rus на свой, скажем language = ital

Если есть имя скрипта и функции в виде строки, например такие:

local script_name = "scriptname"
local function_name = "functionname"

Как проверить существуют такие скрипт и функция или нет?

 

 

Добавлено через 2 мин.:

sergi1901, добавь в систему русский язык.

Изменено пользователем 7.9

всё легко

7.9

Вариант проверки наличия файла скрипта и функции в нем :

 

local FileScript = _G["scriptname"] --/ файл (указатель на таблицу/неймспейс)

if FileScript and FileScript["functionname"] then --/ имеется ли файл и функция (точнее искомая переменная) в нем

...

 

или иначе с доп.проверкой, что именно функция, а не некая переменная/таблица/... :

 

if _G["scriptname"] and type( _G["scriptname"]["functionname"] ) == "function" then

...

 

комбинируй под свои задачи.

 

Примечание: При наличии файла-скрипта имеющего синтаксические ошибки - проверка будет иметь отрицательный результат.

Если и это интересует - то проверять наличие файла через методы класса FS.

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Здравствуй, Народ!

Подскажите, кто знает, hud_fov и fov в АМК 1.4.1. или в чистой игре?

Например, знаю, что в народной соли hud_fov равен 0.675, но это значение отлично от оригинала(вроде :huh: )

Канал возобновляет работу.
PRO, ммм, незнаю в соли 2010 у тебя так, или в соли с fov distancee addon, но в обычной соли кажется как в АМК!

strchi,

У меня не соль, у меня билд 2215 для соли, в нём легко прицеливание правится, но после правки, в самой игре прицеливание не совпадает(не туда целится). Вот думаю виноваты эти два параметра, т.к. слышал, что в соли fov отлично от оригинального значения.

Канал возобновляет работу.

http://www.amk-team.ru/forum/index.php?sho...st&p=620621

 

Как я понял, есть 3 способа проверить скрипт и функцию в Сталкере:

 

1. pcall() --присоветовали в ЛС

2. проверка глобальной таблицы _G -- предложил Артос

3. loadstring() -- пока ждал ответов - сам поэкспериментировал.

 

Сама задача такая:

 

Есть некие предметы, по имени их секции надо проверять: "нет-ли к предмету скрипта", если есть - выполнять, если нет - ничего не делать. Имена секций непредсказуемы, но имя скрипта имеет правило - соответствует имени секции. Какой способ предпочтительней для реалий Сталкера, под такую задачу? Проверять скрипт и функцию на ошибки - это по возможности.

 

"Способ loadstring-a":

if loadstring("return scriptname")() and loadstring("return scriptname.functionname")() then
    return  loadstring("return scriptname.functionname()")()
end

** return-ы в проверкеобязательны.

Изменено пользователем 7.9

всё легко

7.9

Мой ник: Artos и попрошу НЕ коверкать его.

Форум вполне адекватно отображает все латинские символы и нет причины (кроме лени) в транслитерации его.

 

7.9: если нет - ничего не делать
Разумное и правильное условие.

Но что же ты сам предлагаешь (или тот же 'pcall')? Наступать на грабли, чтобы удостовериться что это грабли! :dash3:

 

Хм, каждый выбирает вариант по-себе ... :grin2:

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Artos, :(:) ...

 

Метод чтения глобальной таблицы, признан менее затратным, лоадстринг - не совсем ясно, но вроде то-же приемлемо. В общем: вопрос - закрыли, уверенность - обрели :)

Спасибо.

Всем.

Изменено пользователем 7.9

всё легко

(чтобы другие все же не наступали на грабли ...)

Использование глобальной метатаблицы '_G' для проверки наличия как самого скрипт-файла, так и функции в нем по указателям на них - не просто менее затратен, но и полностью безопасен и позволяет дать полный ответ: "имеется и это функция", не прибегая к попыткам загрузить/вызвать несуществующее ... (по сути при каждой "проверке" наступая 'на грабли', хотя и в 'защищенном' варианте). :)

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

А разве получится использованием метатаблицы _G узнать существует ли функция в скрипте который до этого ни разу не использовался? Он же по идее отсутствует в _G

Freedom

_Призрак_

Хороший вопрос! :-) Тоже ранее ломал голову ...

Могу дать только свои 'толковалки':

'_G' - глобальная метатаблица окружения. Естественно, при запуске игры движек формирует из 'штатных' файлов/функций и пр. некое 'начальное окружение'.

Существует 2 варианта дозагрузки в это 'начальное' окружение дополнений (своих файлов):

а) Принудительная (ручками) загрузка. Т.е. применение методов 'setfenv' и подобных.

б) Первое обращение к 'неизвестному' пока скрипт-файлу.

Т.е. _G["script_name"] - это и есть поиск, чтение кода и внесение в глобальную метатаблицу указателей на прочитанный код. Очевидно, переменная '$game_scripts$' из 'fsgame.ltx' указывает и ограничивает область поиска новой таблицы с именем "script_name".

На практике, когда заведомо известно имя скрипт-файла, можно 'подключать' более простым вариантом, типа: if script_name then ...

Т.о. при 'прямых' обращениях из скрипт-файлов к файлам, к которым еще не было обращений (еще не использовались) , как раз и происходит 'первичное использование', т.е. внесение их в окружение.

 

Опасение отсутствия в метатаблице окружения (_G) следует учитывать при 'не прямых' попытках вызова функций, т.е. например из веток диалогов или тэгов <action> ... и т.п.

В этом случае отсутствует первичная проверка наличия соответствующей функции в метатаблице огружения, а идет прямой вызов. Естественно, если скрипт-файл еще не был внесен в глобальное окружение - произойдет фатальная ошибка. (=>безлоговый вылет).

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Для принудительной загрузки модуля есть специальная движковая функция prefetch(<имя модуля без расширения>)

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

malandrinus

Ты прав, конечно.

Но т.к. и тема и заморочки у многих малоопытных модмейкеров не в способах подключения - и употребил фразу: ' ... применение методов 'setfenv' и подобных", не углубляясь в 'дебри'.

К сожалению, врядли кто из них будет заморачиваться с подключением 'по всем правилам и канонам' своих самописных скриптов, а вот то, что вызывать, например, функцию спавна из самописного скрипта из диалога небезопасно - это как раз те 'грабли', на которые многие и наступают. :)

Т.о. в текущем топике более актуальна упрощенная подгрузка, совмещенная и с проверкой: "а загружено ли?", о которой стОит некоторым вспоминать, перед применением в диалогах/тасках и иже ...

 

Добавлено через 18 мин.:

P.S. malandrinus

Подключение через метод 'prefetch' из пак-файлов *.xdb заканчивается ошибкой (в некоторых ситуациях ...).

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...