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

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


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

2 часа назад, boneset-hq сказал:

Или придётся мучиться с all.spawn'ом?

а что там мучиться, если у тебя оригинал ТЧ стоит, берёшь распаковщик и разбираешь спавн ACDC, поправил и запаковал снова, с распаковкой спавна некоторых модов там где классы менялись да могут возникнуть проблемы, но ручками подправить файлы самого распаковщика надо будет, кстати там же в аллспавне и файлы вей-поинтов ,которые тебе тоже нужны будут, чтоб направить непися туда куда нужно path_walk и path_look, мучиться это если пересобирать и править кучу секций в спавне, а тебе пару строк поправить)

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

Вечер добрый, знает кто-нибудь как реализована визуальная отдача у оружия в моде AA 2.1?

(тряска камеры с блюром)

Изменено пользователем Stalkeruga_238
Ссылка на комментарий
50 минут назад, Stalkeruga_238 сказал:

Вечер добрый, знает кто-нибудь как реализована визуальная отдача у оружия в моде AA 2.1?

(тряска камеры с блюром)

Смотри скрипт rx_shoot_enable.script

Добавлено  Купер,

Изучите "Правила цитирования". https://www.amk-team.ru/forum/topic/13514-obyavleniya/

 

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

По какой-то неизвестной причине значение, аргумент npc некоторой функции kill1(npc) является nil, даже если я туда подаю second_speaker, зная, что он не равен nil. В чём может быть ошибка?

 

Проблемы притягиваю со страшной силой...:dance2:

Осенний каламбур. Сентябрь - лето.

img.php?nick=Balavnik&sert=2&text=t6

Ссылка на комментарий
3 часа назад, Balavnik сказал:

По какой-то неизвестной причине значение, аргумент npc некоторой функции kill1(npc) является nil

А можно увидеть текст вылета? :)

Что-то мне подсказывает, что причина его (вылета) немного в другом.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

@Zander_driver Вот

Скрытый текст

function kill1(npc)
    --local npc = db.actor
    local a = vector()
    local pos = npc:position()
    local text
    local ab = 1
    text = "load ~"..a.pos
    printm(text)
    npc:kill()
end

P.s. уже разобрался, что a.pos возвращает nil. Исправил. Однако появился новый вопрос - почему npc:kill() не убивает персонажа(Напр. Фаната)

P.s.s. Извиняюсь за глупые вопросы, для меня эта тема особенно сложная.

Осенний каламбур. Сентябрь - лето.

img.php?nick=Balavnik&sert=2&text=t6

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

@Balavnik Ну давай разбираться.
 

Скрытый текст


function kill1(npc)
    --local npc = db.actor
    local a = vector() -- Ты же в курсе, что это просто пустой вектор, без значения? Ему ничего не присвоено.
    local pos = npc:position() -- Ок, тут у нас позиция нпс, ЕСЛИ npc - это клиентский объект (Такой метод емнип только там есть)
    local text -- Объявил переменную, ок.
    local ab = 1 -- Что это, зачем? Нигде не используется.
    text = "load ~"..a.pos --В векторе нет поля pos, поэтому естественно здесь будет nil. (А вылета concatenate string with nil тут не возникло? странно. Должно было вылететь здесь)
  --В векторах как правило есть поля x, y, z. НО, при условии что вектор имеет значение. Вектор a никакого значения не имеет, и пытаться его читать бессмысленно.
    printm(text) -- это своя обертка для вывода в лог? Ладно, ОК. Только выводится text который не содержит никакой полезной информации.
    npc:kill() -- А здесь у объекта npc вызывается метод kill. 
  	-- И здесь внимание. Результат зависит от того, ЧТО за объект ты передал в функцию. Вызываем-то у него.
  	-- Если передал клиентский объект. То у него нет такого метода, и будет вылет attempt to call 'kill' a nil value. Или как-то так.
  	-- Если же передается не клиентский объект, то у него не будет метода position и аналогичный вылет будет несколькими строками раньше.
  	-- Подводя итог - определись, ты хочешь Фаната грохнуть в онлайне или в оффлайне. В зависимости от этого и выстраивать свои действия, с каким объектом работать. ЕМНИП, серверный метод kill не на всех версиях движков работает, мб дело в этом. 
end 


 

Полезно будет разобраться в различиях между клиентским и серверным объектом, разном ассортименте методов и возможностей у них.

 

  • Нравится 2
  • Полезно 2

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

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

Если не хочется портить отношения с группировками, надо оформлять убийство NPC как суицид.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
31.01.2024 в 19:12, Zander_driver сказал:

Ну давай разбираться.

И не лень расписывать это все?) Вопросы очевидные, тут документацию только читать, читать и еще раз читать.

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

@Balavnik у тебя неправильная функция, чтоб убить например Фаната, тебе надо найти его уникальный номер объекта SID, который прописывается в алл-спавне и можно найти или там или в оригинальном файле game_story_ids.ltx для ТЧ там все основные персы прописаны, тогда ты можешь удалить именно этот объект, а не просто какой-то объект с секцией Фаната, которых ты можешь наспавнить спавнеров хоть сто штук:) а тебе нужен один единственный,который спавнится в начале игры через алл-спавн, и для этого нужны эти SIDы чтоб обратиться конкретно к этому уникальному объекту :

 

local npc = level_object_by_sid(тут пишешь ID Фаната)

if npc then
    npc:kill( npc )  ---- типа самоубийство

 

 

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

@CiberZold А можно как-то выудить этот айдишник без открытия сторонних файлов? Например npc:id() прокатит? Или это метод клиента и не прокатит?

P.S.  Никак не могу разобраться с этим, и так крутил, и эдак... Результат один -  attempt to nil value. Даже при использовании амк-функций, работающих везде, кроме моего скрипта.

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

Осенний каламбур. Сентябрь - лето.

img.php?nick=Balavnik&sert=2&text=t6

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

Можно получить ссылку на онлайн-объект NPC через диалог с ним: motivator_binder:use_callback + проверка obj:alive(). После этого как раз можно читать obj:id().

  • Нравится 1
  • Согласен 1
  • Полезно 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Ранее спрашивал такой вопрос про то ,что странно в моде на ОГСР НПС продавали всё своё оружие, думал что в движке поменяли торговлю, но на днях другой мод перевёл на ОГСР и там НПС оружием основным не торговали, стал ковыряться в оригинальных файлах торговли и выяснил причину:

 

в оригинале ТЧ оказывается всё работает также, но там ПЫСы заморочились и почти все предметы в игре прописали как неторгуемые в trade_generic.ltx ( это главный файл конфига торговли для всех НПС у которых в логике не задан отдельный файл торговли) не важно квестовый непись или симуляционный, если у него нет файла торговли, то торговать он будет через trade_generic.ltx, а там всё что он не покупает и не продаёт должно быть указано, если чего-то не указать он этим торгует с ценами по себестоимости , наряду с теми вещами, что прописаны с конкретными значениями после знака =, так вот в первом моде ничего не было прописано кроме квестовых предметов, потому неписи торговали всем своим оружием, а втором моде - неписям разрешено было торговать только ПМ и обрезами, а остальным оружием - нет, а в оригинале получается НПС, которые не имели своего торгового файла по дефолту в trade_generic вообще никаким оружием не торгуют, потому создавалось впечатление, что не торгуют оружием которое в данный момент в слоте.

 

11 часов назад, Balavnik сказал:

А можно как-то выудить этот айдишник без открытия сторонних файлов?

это стори ид его задаёт сам создатель игры/мода для удобства, ПЫСы например не стеснялись чуть ли не каждой собаке и дверной ручке давать свой SID, так и ты когда делаешь мод, сам задаёшь эти айдишники в аллспавне под будущие квесты или сценки, или что-то надо заспавнить по ай-дишнику в определённый момент объект из алл-спавне по скрипту, Фанат спавнится в оригинале по инфопоршню в аллспавне перед походом в X18 но у него тоже есть свой sid, если в скриптах например в его квесте надо будет у нему обратиться, например что его убить и т.п.

вообще удобная вещь, например есть объект с sid=203  -

чтоб получить клиентский объект пользуем level_object_by_sid (203) как выше писал.

чтоб получить серверный объект - alife():story_object(203), чтоб например вообще удалить объект из игры.

чтоб заспавнить объект из аллспавна  - alife():spawn_id(203), но если он уже есть то игра вылетит, это подходит если объект сначала был удалён из игры, а потом его надо вернуть.

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

Ну вот, как-то поломал глобальное пространство имён... От ошибок кругом голова :gamer3:

Вылет при попытке создания объекта через xyz

Скрытый текст

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...of chernobyl\gamedata\scripts\balavnik_script.script:71: attempt to call global 'xyz' (a nil value)

 

Скрытый текст

pos_only = vector()
function xyz(x,y,z)
    return pos_only:set(x,y,z)
end

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

 

Вылет при попытке создания объекта методом alife:create() Вылет с логом LUA error: scripts\_g.script:1331: attempt to index global 'alife' (a function value)

Изменено пользователем Balavnik
  • Жуть! 1

Осенний каламбур. Сентябрь - лето.

img.php?nick=Balavnik&sert=2&text=t6

Ссылка на комментарий
1 час назад, Balavnik сказал:

attempt to call global 'xyz' (a nil value)

Покажи код, где ты используешь эту функцию.

 

1 час назад, Balavnik сказал:

alife:create()

Правильно будет alife():create()

  • Спасибо 1
  • Согласен 2
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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