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

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


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

alife():create( 15228 ) - такого барахла тонким слоем по полусотне скриптов. Почему, собственно, владеющий олспавном соли - диктует всем, на каких задних цырлах на какую высоту подпрыгивать, ага.

Добавлено BFG,

Я не скриптер. Ничо не понял Денис. Какие прыжки ?

 

 

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

@BFG, попробую объяснить.

Как известно спавнить из all.spawn можно по имени секции :
alife():create(100) -- т.е. спавним секцию [100]
Но после перекомпиляции all.spawn-а нумерация секций может измениться, поэтому никогда нельзя быть
уверенным в том, что в секции (напр.) [100] останется то же самое содержимое.
 
Поэтому нужен ID этой секции для спавна именно её, который и задется в 'spawn_id'.
И по нему тоже можно спавнить :
alife():create(какой-то_spawn_id)
Тут нужно либо точно знать какой именно 'какой-то_spawn_id', либо узнать методом :
alife():spawn_id('какой-то_story_id')
В этом случае для секции, которую необходимо спавнить подобным образом, кроме 'spawn_id',
нужно задавать и значение 'story_id' (которое нужно не забыть прописать в game_story_ids.ltx).
 
Ну и теперь можно спавнить :
local story_id = story_ids.какой_там_записан_ключ_в_game_story_ids 
local spawn_id = alife():spawn_id(story_id)
local obj = alife():create(spawn_id)
Изменено пользователем Nazgool
  • Спасибо 1
Ссылка на комментарий

alife():create(

Я проверил все скрипты ( 66 штук ) по этому тэгу. Просмотрел все такие строки и нигде не нашёл, чтобы спавн происходил с явным указанием числа.

Обычно указывается нормальное имя итема и координаты.

 

 

local spawn_id = alife():spawn_id(story_id)

local obj = alife():create(spawn_id)

Проверил также все скрипты на эту комбинацию. Таких строк нет.

 

Значит ли это что привязки к spawn_id нет ? Стало быть и в оллспавне без разницы какие числа там стоят.

Или эта привязка может быть запрятана ещё каким либо хитроумным скриптерским способом ?

Если не сложно приведите пожалуйста пару таких примеров.

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

"Кругом зомби.....у меня кончаются патроны...."

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

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

 

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

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

"Я проверил все скрипты"

 

Да ну ?

amk_mod.script:

if amk.load_variable("amk_13",0)==0 then

-- pri_space_restrictor_0011

local obj = alife():story_object(830)

if obj then

alife():release(obj)

alife():create(10776)

end

ну и т.д.

 

sak.script, *_dialog.script и т.д.

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

Значит ли это что привязки к spawn_id нет ? Стало быть и в оллспавне без разницы какие числа там стоят. Или эта привязка может быть запрятана ещё каким либо хитроумным скриптерским способом ? Если не сложно приведите пожалуйста пару таких примеров.

Скорее всего такой привязки нет. Ею наелись еще во времена АМК.

На всякий случай сделай поиск не по "alife():create(", а по ":create(", чтобы обработать случай:

local a = alife()
a:create(...
  • Спасибо 1
Ссылка на комментарий

@abramcumner, ну если глянуть в сторону оберток, то твой ответ тоже не раскрывает всей сути, в амк есть обертка spawn_item и иже с ней, тогда надо делать поиск и по этим функциям, причем не только по созданию, но и по удалению, как выше заметил Денис. Это причем я еще не знаю какие есть подобные обертки в дочерних модах, а тем более в каком-нибудь ОП-2.

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

Безотносительно модов и почему у Дениса нашлись вызовы, а у BFG нет. Теория была правильной: проверить вызовы alife():create(. Вызывается ли она с одним параметром типа alife():create(11016) или вызывается с набором секция, координаты, лв, гв. Это будет видно и в функциях типа spawn_item.

Изменено пользователем abramcumner
  • Спасибо 1
Ссылка на комментарий
Да ну ?

Денис, если я говорю что НЕТ, значит НЕТ. Проверил. НЕТ числовых id-привязок в скриптах. Вычистили всё. Полностью. Значит так.

На всякий случай сделай поиск

Тоже нет.

в амк есть обертка spawn_item
Пожалуйста приведи простой пример, если не трудно, с использованием данной "обёртки".
Изменено пользователем BFG

"Кругом зомби.....у меня кончаются патроны...."

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

@BFG, пример прост - spawn_item(number), но скорее всего таких случаев не будет, так как это обертка видно что была только под секцию и координаты, но я более чем уверен что таких случаев не встретится. Упомянул к тому, что в солянках могли в глобальное пространство добавить похожие функции и там уже могут дела обстоять иначе, но я коды солянки не изучал, мне ни к чему.

Изменено пользователем Карлан
Добавлено BFG,

Понятно. Спасибо.

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

Подскажите, пожалуйста, такую вещь.
Рассматривал файл _g.script, в конце файла нашёл такое:

ammo_section = {}
ammo_section["ammo_9x18_fmj"]=true
ammo_section["ammo_9x18_pbp"]=true
ammo_section["ammo_9x18_pmm"]=true
ammo_section["ammo_9x19_fmj"]=true
ammo_section["ammo_9x19_pbp"]=true
ammo_section["ammo_5.45x39_fmj"]=true
ammo_section["ammo_5.45x39_ap"]=true
ammo_section["ammo_5.56x45_ss190"]=true
ammo_section["ammo_5.56x45_ap"]=true
ammo_section["ammo_5.7x28_fmj"]=true
ammo_section["ammo_5.7x28_ap"]=true
ammo_section["ammo_7.62x54_7h1"]=true
ammo_section["ammo_7.62x54_ap"]=true
ammo_section["ammo_7.62x54_7h14"]=true
ammo_section["ammo_9x39_pab9"]=true
ammo_section["ammo_gauss"]=true
ammo_section["ammo_9x39_ap"]=true
ammo_section["ammo_9x39_sp5"]=true
ну и т.д. идут оставшиеся патроны

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

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

 

 

и секцию с координатами.

А это еще почему?

Ну написал я alife():create("medkit", ля-ля-тополя где хочу там спавню) - кому и где от этого плохо?

 

 

 

массив или таблица: что это?

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

 

 

вообще читается игрой?

Ну раз она находится в _g.script И не под комментарием, то очевидно да.

 

 

Просто я не знаю, как определить, задействована ли функция в игре или нет.

А причем тут функции, если это таблица :)

Как вариант, можно взять на вооружение Total Commander, вбить в поиск название искомой таблицы/функции/чего-то еще, и поискать в папке скриптов.

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

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

Определись конкретнее: тебе надо изменить отношение этих "красных военных" ко всем остальным, или просто сделать сюжетный запрет на агрессию, как, к примеру, у Кузнецова с его группой солдат под мостом на Кордоне ?

Именно! Запрет на агрессию

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

 

 

Подскажите, пожалуйста, такую вещь. Рассматривал файл _g.script, в конце файла нашёл такое:

Если будешь вводить в игру новый патрон - прописка его в _g.script обязательна. В противном случае будет вылет. Сам столкнулся с этим.


 

 

Именно! Запрет на агрессию

Смотри, как это сделано в оригинале с Кузнецовым под мостом на Кордоне. Там ничего сложного нету.

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

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

 

 

По правильному в функции alife():create не должно быть вообще лв/гв - это внутренности системы навигации. Должны быть только координаты. А лв/гв пусть эта самая система навигации и считает, если они ей нужны.

Хм, а ничего, что одни и те-же координаты могут быть на куче разных локаций ? Как бы все не спорили, а реальность есть такова, что имея только координаты заспавнить объект не получится - по любому нужен gv, который определяет целевую локацию.


 

 

а что насчёт таблицы с квестовыми предметами? Я вроде как новый ввёл, в таблицу не добавлял, вылета не было.

Таблица "quest_section" в игре используется в единственном месте:

function relocate_item_section(victim, section, type)
if db.actor and victim then
if type == "in" then
-- Трансферить нужно только квестовые предметы --
if quest_section[section] == true and victim:object(section) ~= nil then
victim:transfer_item(victim:object(section), db.actor)
else
-- остальные - спаунить в инвентарь актеру --
alife():create(section, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end
elseif type == "out" then
db.actor:transfer_item(db.actor:object(section), victim)
end
news_manager.relocate_item(db.actor, type, section)
end
end

Из пояснений в коде ф-ции надеюсь ты сам поймешь, зачем нужна эта таблица.

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

Извините, если не в эту тему написал, но по-моему этому вопросу место именно здесь.
В общем, получил вылет. Вылет происходит при убийстве NPC (новичок у костра из деревни, стрелял прямо в голову):
 

[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ...\s.t.a.l.k.e.r\gamedata\scripts\death_manager.script:139: attempt to index field '?' (a nil value)

Весь прикол в том, что указанный в логе файл я не трогал ВООБЩЕ (я его даже сравнил с файлом из "чистой" gamedata - полностью совпадает). Не подскажете, в чём дело. Накануне только 2 новых ранга ввёл. Но вряд ли это как-то связано.

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

Vadyanchikus, патчи проверь, сидишь на 4 а файл от 6, или наоборот.

@Карлан, сижу на 6-ом + недавнее (ну как недавнее) обновление из-за закрытия серверов GameSpy.

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

@Карлан@abramcumner@UnLoaded, вся дискуссия про спавн и координаты перенесена в «Курилку программистов».

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

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

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

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

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

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

Войти

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

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

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