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

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


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

Возможно ли сделать питание оружия по схеме "N патронов в магазине + 1 в стволе?" Просто добивает, что такого до сих пор не увидел!

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

 

 

Поскажите, возможно ли отловить показ фразы с конкретным идентификатором, скажем, dm_cool_info_58? И если можно, то как?

тег action позволяет задать функцию, которая выполнится после того, как будет сказана фраза. Функция действия должна иметь вид:

function phrase_action(first_speaker, second_speaker, dialog_id, phrase_id)
    ...
end

здесь
first_speaker - кто говорит эту фразу, 
second_speaker - соответственно, другой собеседник
dialog_id - имя текущего диалога
phrase_id - имя сказанной фразы

 

 

Это подойдет ?

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

 

 

фрагмент из Справочника по ф-циям и классам тег action позволяет задать функцию, которая выполнится после того, как будет сказана фраза. Функция действия должна иметь вид:function phrase_action(first_speaker, second_speaker, dialog_id, phrase_id) ... endздесь first_speaker - кто говорит эту фразу, second_speaker - соответственно, другой собеседник dialog_id - имя текущего диалога phrase_id - имя сказанной фразы Это подойдет ?

Даже и не не знаю. Мне нужно выдать инфопорцию в момент, когда НПС говорит нужную фразу из раздела "Что можешь интересного рассказать". Иды фраз я знаю, но поскольку в dialog_manager.script толком не понимаю, тот куда ткнуться и каким образом - не знаю.

Сталкер - наше всё!

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

@UnLoaded, это если только нужно в единичном случае, и то на мой взгляд крайне убого, тут если делать напрямую то проще по имени получить, все же списки сделаны.

@AndrewMor, я же говорю, в ЗП есть явный пример как подключить дополнительный ключ, сейчас глянул оригинальный менеджер - и вот прямо там есть готовая функция cool_info_treasure которая кстати должна выдавать тайники, но это не задействовано в оригинале, хотя вполне себе правильно работает. Вот в нее можно просто врезать проверку, и выполнять действия в зависимости от имени фразы (именно имени, а не айди, если ты не любитель поплясать с бубном), но это как-то совсем не по христиански :).

@Elz, так вроде такого наделали в те времена когда выстрел отлавливали, я в смысле к тому, что можно, но если делать на скриптах, то много костылить придется. Методы что-то типа set_ammo_elapsed/get_ammo_in_magazine.

  • Спасибо 1
Ссылка на комментарий
Иды фраз я знаю, но поскольку в dialog_manager.script толком не понимаю, то куда ткнуться и каким образом - не знаю.

В dialog_manager.script смотри ф-цию init_cool_info_dialog(dlg). Там для всех фраз этого "типового" диалога добавляется action(ф-ция) phrase_action_cool_info. Она прописана ниже, в этом-же файле. Там и проверяй, что за фраза сказана и выдавай свою и-п.

 

Elz

Действительно много костылить - ловить презарядку, смотреть есть ли еще патроны, добавлять один в оружие, вычитать его из оставшегося(т.е. переспавнивать)... И все это ради чего ? Неуж-то люди будут заморачиваться, что у них вместо 30 патронов в калаш можно зарядить аж 31 ?

Изменено пользователем UnLoaded
  • Спасибо 2
Ссылка на комментарий

@UnLoaded, и, собственно, причем здесь phrase_action_cool_info? Ты хочешь два раза по таблице итерироватся? Еще раз говорю, сравнивать айди - мазохизм, надо сравнивать имя. cool_info_treasure (в оригинале кстати можно вырезать) для этого идеально подходит, пишешь "если имя сказанной фразы совпадает с именем нужного, то заспавнить 100 собак на крыше". Строка кода против копии этой-же самой cool_info_treasure в phrase_action_cool_info...это не разумно :), при всем уважении.

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

@Elz, Ну на моей базе, скажем, это элементарно просто можно бы сделать, у меня практически все что для этого нужно, и так уже сделано и работает. Если о самостоятельной реализации говорить, то смотреть в сторону вышеназванных методов, тут все верно...

Только на этот раз я тоже не могу понять, чего ради этот огород городить.

  • Спасибо 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

@Карлан, а если фраза длинная, писанины сколько? И если ид фразы остался прежний, а текст поменялся, что же, в скриптах копаться и текст переписывать?

Сталкер - наше всё!

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

@AndrewMor, ты можешь отличить имя фразы от ее описания? Ты вообще понимаешь о чем я говорю? Айди фраз не совпадают с именами, идентификация по айди - танцы с бубном, но если тебе хочется, то делай, так тоже можно :). Если так хочется по айди, то сделай ассоциативный массив имени и айди, и вычисляй. Имя фразы это ее личный константный параметр, айди - абстрактный идентификатор, который от изменения конфига тоже может меняться, и вся твоя проверка благополучно рухнет, и скрипт начнет глючить.

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

Приветствую всех!
У актора в инвентаре некий предмет (варианты: съедобный, несъедобный), на предмет повешен биндер.
Требуется отследить использование предмета и выполнить действия.
Можно отследить потерю предмета (съел) аналогично ручным телепортам, либо (для несъедобного предмета) назначить кнопку в hotkeys.script с выдачей поршня и выполнением действий при наличии поршня
Можно повесить предмет на пояс или в слот
Вопрос: есть ли другие варианты использования предмета (желательно съел - действие), или это всё что доступно?
 
Все равно это читать ни кто не будет, видимо, из принципа, но на всякий случай:

http://www.amk-team.ru/forum/index.php?showtopic=13054
Или надо что-то другое ? dc

 

То что надо, извините за мою невнимательность :blush: ...

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

Есть хабар - пойдёт базар :az1000106:

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

Если оффтоп - удалите.

Добавил RW управление иконкой на человеческих методах, работает, как видно, и для нпс и для актора (монстрам мне кажется это не нужно, хотя можно если надо). Метод не заставляет перерисовывать фреймы и окна "на ходу", но если нужно то и это можно сделать, просто я не представляю в какой ситуации это может потребоваться.

character_icon() - возвращает строку в виде "ui_npc_u_trader", т.е. type(obj:character_icon()) == 'string'.

set_character_icon(string) - устанавливает иконку по описателю из xml, например: obj:set_character_icon('ui_npc_u_trader')

 

 

Вопрос, какие еще RO параметры есть для НПС? Как мне кажется из xml-описателей нечего экспортировать кроме иконки, биографии и списка диалогов (его можно экспортировать в виде луа-массива для более удобной работы в скриптах). Как все сделаю - залью если кому-то надо будет.

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

Гм, как я недавно с удивлением выяснил, гэйм-объект вообще не позволяет что-либо добавить или изменить, кроме того, что дано свыше. То есть, в смысле, self.что-то_там - пожалуйста, но это будет экземпляр, доступный только самому себе.

 

Впрочем, уже не больно-то и хотелось, ибо сама идея зарекомендовала себя как Чистое Зло. В смысле, не только по-этому, а по совокупности. Эрго, достаточно лишь вменяемой альтернативы нетпакетам для серверных, и вменяемого управления интерфейсами. А эти уродцы - ну их...

 

О, возможно, был бы небесполезен офлайновый инвентарь.

Изменено пользователем Dennis_Chikin
Ссылка на комментарий
Добавил RW управление иконкой на человеческих методах

Здорово...

Всегда хотелось, что-бы: чем больше у Меченого денег, тем "жирнее" его рожа (на иконке) :)

 

Есть одна поправочка-хотелка. Сначала думалось: надо-бы хоть в шрифты смайлы добавить, но потом передумал: лучше в диалогах фразам НПС иконки прикрутить.

Можно это RW-управление сразу в диалог-менеджер добавить?

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

всё легко

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

@Dennis_Chikin, добавить/изменить что ты имеешь ввиду? Добавить у меня получилось, а вот изменить я так и не смог, при попытке замены у меня все равно объект юзал движковые методы. Если ты об этом конечно.

 

Управление интерфейсами экспортировать довольно долго, проще что-то альтернативное написать как мне кажется, т.е. не долго экспортировать только то, что конкретно нужно, а вот все и сразу... Я вот хочу что-нибудь с диалогами сделать, но моих кривых рук только на альтернативу хватит, т.е. история например может идти как и с тасками, можно создание перенести на скрипт, в оригинале правда совсем с нуля создать нельзя, т.е. все-таки надо писать <game_task id="task"></game_task>, но в целом можно это все (включая само создание) альтернативно перевести на скрипты (и вообще целиком и полностью отвяжемся от xml), и если в скриптах завести массив (даже читаемый из лтх, типа как во всех супер-менеджерах оригинала) как хранилище то можно будет даже ничего не сохранять имея полный доступ к управлению. Только я боюсь что этим будут злоупотреблять, все-таки по возможности лучше пользоваться xml :).

 

Ладно, это - есть. Но есть ещё одна хотелка (для постановки). Сначала думал: надо в шрифты смайлы добавить, но потом передумал: лучше в диалогах фразам НПС иконки прикрутить. Это можно?

Немного не понял, есть же метод give_talk_message, который выводит картинку с текстом под текущей фразой.

В любом случае я думаю можно добавить еще один атрубит в <phrase>, что-то вроде icon =, который будет выводить картинку рядом с текущей фразой, смайлы я пока не знаю как сделать.

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

Рядом с фразой не надо, у НПС, в окне диалога, иконка уже есть.

 

А "смайлы в шрифтах" - их тогда и не надо - это была старая (первая) идея.

Иконка - это и есть - то, что надо...

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

всё легко

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

 

 

Можно отследить потерю предмета (съел) аналогично ручным телепортам

Жуть какая... когда же это прекратится блин.

 

Расскажите мне границы применения Seq-файлов текстур. их на что угодно можно вешать или все же нет?

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Итак, продолжаю свои ковыряния. На этот раз добавил функции для перезагрузки ин-гейм xml файлов, протестировал пока только инфопоршни, работает вроде не так медленно, как я ожидал. Перезагружает только когда есть актор, добавил в level, хотя можно и в другое место засунуть.

Функция может примерно так выглядеть:

function t()
--// в начале изменяем xml файл, добавляем туда нужную информацию с помощью пространства io
level.reload_info() --// функция перезагружает все инфопоршни, можно сделать в виде level.reload_xml(const)
--// оперируем со свежедобавленным инфопоршнем
end

Может это дикое зло со стороны оптимизации, я не знаю, просто ковыряюсь :). Так же беспрепятственно можно перезагружать профили, диалоги, статьи, таски (вроде) и споты (вроде) (ну и вывести в режим RW все их параметры вроде как у тасков). Правда как это будет со стороны оптимизации мне неведомо, но переделывать по другому я не могу, туп.

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

  • Нравится 1
  • Полезно 1
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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