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

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


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

Министр

Можно прописать аптечку в таймеры АМК по аналогии с ремкомплектом, спальником и т.д. Нужны файлы amk.script и amk_mod.script.

 

================================

Вопрос по работе со строками: известно, что определить порядковый номер символа в строке можно командой

pos = string.find(string,",")

Метод работает практически для всех символов, но на открывающейся скобке ( попытка определить номер символа вызывает вылет с жалобой на строку с командой pos = string.find(str,"(")

[error]Arguments : LUA error: d:\games\s.t.a.l.k.e.r\gamedata\scripts\111.script:63: unfinished capture

 

Проблема, похоже, в незакрытой скобке. Перепробовал уже такие варианты: "(" и [[(]] - вылет с указаным логом, "/(", "//(" и [[/(]] - результат nil, хотя скобка в строке есть.

Как ни странно, для закрывающей скобки такой проблемы не возникает.

 

Можно ли каким-то образом все-таки вычислить эту чертову скобку?

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

Ссылка на комментарий
Можно ли каким-то образом все-таки вычислить эту чертову скобку?

 

Там есть какие-то "magic characters" (^$()%.[]*+-?) для поиска по шаблону. Открывающая скобка как раз к ним и относится. Для отключения этого безобразия надо использовать синтаксис

string.find(s, pattern , init , plain)

где init - начальная позиция поиска (вероятно будет равно 1, раз уж пришлось указывать)

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

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

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

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

 

Ссылка на комментарий

Уважаемые знатоки, у меня маленький вопрос:

Как, при взятии квеста, на непись, который, непосредственно, дал его, поставить метку, с учетом того что персонаж в игре новый. ?

Мои работы ТЫЦ

Ссылка на комментарий
Как сделать задержку действия во времени?

Т.е. надо так сделать,чтобы действие происходило не сейчас,а через 10 секунд.

Можно использовать таймеры.

amk.start_timer(name,delay,action) - ставит таймер в реальном времени

amk.g_start_timer(name,delay_d,delay_h,delay_m,action) - ставит таймер в игровом времени

name - имя таймера. Надо зарегистрировать в функции __do_timer_action

 

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

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

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

 

Ссылка на комментарий

Storyteller

Если не ошибаюсь, то нужно прописать этому новому НПС story_id и уже на него ставить метку.

Как делать этот сид я хз...

Ссылка на комментарий
Как, при взятии квеста, на непись, который, непосредственно, дал его, поставить метку, с учетом того что персонаж в игре новый. ?

Если не ошибаюсь, то нужно прописать этому новому НПС story_id и уже на него ставить метку.

Все инфопрошены прописаны в разных XML файлах. Список файлов, в которых есть инфопоршены прописан в файле system.ltx, в секции info_portions. Как то так:

[info_portions]
files = info_portions, info_portions_light, info_portions_test, ... и т.д

Кроме того текстовым идентификаторам сопоставлены числовые значения в файле game_story_ids.ltx

 

А на предмет простановки меток мне кажется стоит посмотреть файл game_tasks.xml. Он в себя включает ещё много файлов, и всё это описывает собственно сюжет игры. Среди прочего можно посмотреть, как там метки проставляются. Сам я до конца не разбирался.

 

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

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

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

 

Ссылка на комментарий

Здраствуйте сталкеры! Я решил создать квест для Волка по поиску артефакта, сделал подхожу к Волку и как только беру задание у меня вылет с логом

Expression : start_node && path

Function : CXml::NavigateToNode

File : E:\stalker\patch_1_0004\xrXMLParser\xrXMLParser.cpp

Line : 97

Description : NavigateToNode failed in XML file

Arguments : gameplay\game_tasks.xml

 

Что делать? И как относится к квесту файл game_tasks.xml ?

 

ДРУЗЬЯ ПОЖАЛУЙСТА НЕ ИГНОРИРУЙТЕ И ПОМОГИТЕ НОВИЧКУ)

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

Разработка Andrew's Pack Mod V0.5..

Ссылка на комментарий
А перепаковщик? я видел в каком-то моде.

Поищи по ключевым словам dunin ammo

Но это только уменьшает количество пачек патронов. Кликов поменьше будет, но описанную тобой проблему не решит. Кроме того, когда я интегрировал себе эту фишку у меня начались вылеты. Нечастые, но были. Пришлось переводить перепаковщик в ручной режим т.е. перепаковывать только в нужные мне моменты.

К сожалению всё это давно было. Ничего уже не осталось с тех пор.

 

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

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

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

 

Ссылка на комментарий

Может комуто мой вопрос покажется глупым, но тем ни мение, как нового нпс заставить играть на гитаре?

Мои работы ТЫЦ

Ссылка на комментарий

andrewrap,

Прочитай первый пост в теме "Создание квеста". Там все разложено по полочкам. И попробуй сделать на основе его свой квест. А если что не понимаешь, то и задавай вопросы по квесту в той теме.

 

Storyteller,

Пропиши ему гитару в его профиле, как оружие прописываешь, и он будет на ней играть. Только может для этого еще логика нужна kamp (чтоб сидел у костра). Но точно по этому поводу не знаю.

Кто весел - тот смеется, кто хочет - тот добьется, кто ищет - тот всегда найдет!

Ссылка на комментарий

malandrinus, как я понимаю, в аргументах функции может быть функция. но как это реализовать? ведь если напишем:

file1.function1(10,15,nil,...,file1.function2)

 

то в аргументы передастся не сама функция, а её результат, т.е. то, что вернёт функция file1.function2. Или я ошибаюсь?

 

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

Storyteller, по-моему, однозначно стоит заглянуть на вики. Там всё есть по квестам.

Ссылка на комментарий

Это канешно глупый вопрос но как сделать ярко синее свечение артефакту? а то я делаю а у меня вылеты всегда :wacko:

Разработка Andrew's Pack Mod V0.5..

Ссылка на комментарий
amk.g_start_timer(name,delay_d,delay_h,delay_m,action) - ставит таймер в игровом времени

name - имя таймера. Надо зарегистрировать в функции __do_timer_action

 

А delay_d,delay_h,delay_m,action это что?

 

IQDDD а какой смысл ставить функцию,которая ничего не возвращает в аргументы?

Изменено пользователем Monnoroch
Ссылка на комментарий

Monnoroch,

delay_d - это кол-во игровых дней до срабатывания таймера

delay_h - это кол-во игровых часов до срабатывания таймера

delay_m - это кол-во игровых минут до срабатывания таймера

 

Т.е. вот такой таймер - amk.g_start_timer("timer_test",3,2,1), выполниться через три дня, два часа и одну игоровую минуту.

 

А вот значение action пока еще остается для меня загадкой...

Возможно это, какбы аргумент функции или типа того...

Ссылка на комментарий

Приветствую всех! Пришел просить о помощи.

Сейчас работаю над небольшим модом, и никак не могу решить одну задачу: нужно спавнить в рюкзак только что появившимся неписям некоторые предметы (патроны, артефакты, оружие), но при этом желательно соблюсти такие условия:

- спавнить не постоянно, а с некоторой вероятностью

- чтобы непись мог распоряжаться при жизни этим предметом (стрелять, торговать, и. т. д.)

- отлично было бы, если спавнить эти предметы зависимо от ранга неписи (например, новичку в рюкзак - "медузу", ветерану - "бабкины бусы")

Можете помочь в таком вопросе? Буду весьма благодарен.

Ссылка на комментарий
как я понимаю, в аргументах функции может быть функция.

file1.function1(10,15,nil,...,file1.function2)

то в аргументы передастся не сама функция, а её результат, т.е. то, что вернёт функция file1.function2.

Функцию можно и часто нужно передавать как аргумент в другую функцию. Это возможно потому, что функция в Lua - это "first class value", т.е. "равный среди равных" или по-простому такая же переменная, как и все остальные. Функцию можно слепить на ходу, загрузить из файла, передать в функцию, переназначить и пр.

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

local function fun(arg1, arg2)

--некий код

end

на самом деле эквивалентна следующей конструкции:

local fun = function(arg1, arg2)

-- некий код

end

Т.е. просто объявляется переменная fun и ей присваивается значение типа "function" равное созданному чанку (chunk - кусок кода).

При желании его можно переназначить:

fun = ...

 

Так что в приведённом тобой примере

file1.function1(10,15,nil,...,file1.function2)

передаётся именно сама функция, которую внутри тела функции можно вызвать.

Вот только не понимаю, зачем в функцию передавать как аргумент её же.

 

Если бы надо было передать результат вызова, то надо было бы собственно вызвать функцию. Что-то вроде такого:

file1.function1(10,15,nil,...,fun(<список аргументов>))

 

Monnoroch,

А вот значение action пока еще остается для меня загадкой...

Возможно это, какбы аргумент функции или типа того...

 

Насколько я понял, это некая строка, которая передаётся той функции, которая будет вызвана при срабатывании таймера. В сущности - это просто данные (в виде строки), которые сохраняются в PSTOR актора вместе с таймером. Когда срабатывает один из таймеров , эти данные читаются из PSTOR и полученная строка передаётся вместе с именем таймера в функцию __do_timer_action.

__do_timer_action(select_string, params_string)

где select_string - это имя таймера

params_string - как раз и есть тот самый action

__do_timer_action

Вот здесь и происходит то действие, которое хотелось вызвать по таймеру. Т.е здесь стоит набор if-else, осуществляющий выбор действия. Что-то вроде

if select_string == "my_timer" then

-- действия по срабатыванию моего таймера

elseif select_string == "another_timer" then

...

В самом АМК здесь часто вызывается функция mod_call. Примерно так:

if select_string=="sleep_nrg" then

mod_call("test_for_need_sleep_nrg", params_string)

end

Видно, что ей передаётся params_string (тот самый action). А иногда и не передаётся.

 

Выглядит всё так, что свой таймер надо собственноручно прописывать в этой функции. Ну и соответственно что делать с params_string тоже.

Кстати, на каком-то этапе это значение проверяется, и если не установлено, то ему просто присваивается пустая строка. Так что это значение можно просто игнорировать как при вызове start_timer, так и здесь в __do_timer_action.

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

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

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

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

 

Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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