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

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

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

[Внимание, длинно-пост]

 

Ребят, а кто-нибудь ковырялся в ЗП до такой степени, чтобы убрать практически все lua-скрипты (включая «системые») из игры? Причину, по которой я спрашиваю об этом проще всего объяснить на примере:

 

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

 

Но на этом дело не заканчивается. Я хочу формировать группу событий. Ясный пень – тройку новичков-сталкеров могут реальные пацаны одолеть, поэтому события собираются в пул и начинается месиво. Например сквад долговцев отправили в тот сектор, где они с удовольствием примут участие в перестрелке.

 

 

 

На данный момент лишь базовое:

– hit-callback – каждый раз, когда в npc попадают, регистрируется bone_index, чтобы потом можно было оценить степень убитости

– death-callback – после убийства регистрируется кто убил, и убили ли жертву когда та была ранена

– loot-callback – срабатывает когда труп шманают и в зависимости от того, кто шманает, будет отпрабатываться та или иная логика (например бандиты не всегда будут отписывать о том, что они убили жмура, а сталкеры найдя труп будут отправлять авто-сообщение, для них это святой неписаный закон)

 

Над чем колдую сейчас:

– работаю над схемой для сообщений. Например сообщение: «Чуваки, на Юпитере химера завелась» будет отправлено в том случае, если химера, мочканувшая сталкера – жива. Под схемой я подразумеваю блок универсальных фраз, с помощью которой можно будет строить сносные (и разнообразные) предложения, а не «погиб сталкер: химера» (не в обиду, труд уважаю и понимаю что некоторым действительно трудно сочинять текст, сам думаю как буду с этой бедой разбираться).

 

 

 

 

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

 

 

 

Понятное дело, что для подобной концепции может потребоваться значительное изменение (причем, очень может быть, что не только со стороны lua-скриптов).

 

1. Насколько сильно можно «отчистить» скрипты+конфиги? То есть довести до такого состояния, что загружается только самый минимум, без чего игра крешится.

 

2. Как много в ЗП заточено на стороне движка? Я имею ввиду именно скриптовую часть. Знаю что некоторые функции (например в trade_manager кажется) вызываются со стороны движка (судя по комментам в скрипте).

 

3. Кто-нибудь делал переход npc с одной локи на другую? То есть npc дошел до места перехода на Юпитер и там уже мы его хоп и забрали.

 

4. Пока не разбирался, но npc можно ставить задание по типу (сходи с менами убей долговца)?

 

5. В lua есть корутины (coroutines), основоное предназначение которых заключается в дроблении высоконагруженных процессов (перебор очень больших массивов например). Вопрос: есть ли что-то, что можно использовать чтобы запускать скрипт на фоне и с пониженным приоритетом?

 

 

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

Здравствуйте!

Как работает скрипт маячка в модах для ЗП? Точнее, какая функция отвечает за мгновенную отметку в КПК?

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

 

 

Как работает скрипт маячка в модах для ЗП?

 

Спавн объекта ( маячка ) и установка на него метки

 

local object = alife():create( "Секция_маячка",  position,  lv_id,  gv_id )

level.map_add_object_spot_ser( object.id,  "текстура_метки",  ""  )
 
Текстуру метки прописываете в 
gamedata\configs\ui\map_spots.xml и
gamedata\configs\ui\map_spots_16.xml
Ссылка на комментарий

@ммихаилл

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

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

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

Многоуважаемый, UnLoaded, код я не прилогаю по причине того, что ничего нового я в него не вписывал: имя функции, сама функция от makdm, кроме первой строки, и в итоге один end. В качестве объекта я брал ид физического объекта, то бишь рюкзака, потом ид любого рестриктора и тд. и тп. В общем перебрал все возможные варианты, однако каждый раз метка ставилась именно на актёра.

UnLoaded, не считай себя умнее других, и Кашпировского лучшее не трогай - не сахар у него нынче время ;)

Изменено пользователем ммихаилл
Добавлено Dennis_Chikin,

Тем не менее, level.map_add_object_spot_ser() работает так, как описано, и метки у всех великолепно ставятся именно на тот объект, id которого передан.

А вот правила форума настоятельно рекомендую почитать.

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

подскажите, какую строчку нужно вписать в раздел костюма, что бы допустим в тяжёлом костюме долга ГГ бегал медленнее, а в обычной заре быстрее, какая строка за это отвечает, и можно ли каждому костюму приписать высоту прыжка, и как, а то я раньше не сталкивался, а вырезать из файла Актор безполезно... если знаете пишите, заранее спасибо...

Добавлено Kirgudu,

Перенесено в "ковырялку"

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

@ммихаилл

Вот вместо претензий на тему кто кого умнее считает - что Вам стоило скопипастить сюда код, написанный Вами. Вы чего-то стесняетесь или опасаетесь ? Так не надо, никто Вас хаять не будет, зато укажут ошибку и Вы получите искомый результат...

 

P.S. А откуда информация про сахар\не сахар у Кашпировского ? :)

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

@UnLoaded, то есть читать мои сообщения не охота? Пожалуйста.

 

function new_treasure_map(actor, npc, p)

level.map_add_object_spot_ser( my_real_not_actor_id_object,  "new_treasure",  ""  )

end

 

То же самое, только ввиде кода - того же самого, что и был посоветан.

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

@ммихаилл

Хитрите, уважаемый... Тока зачем?

Вы же прекрасно должны понимать, что Ваша проблема не в собственно движковой ф-ции установки отметки на объекте(которая отлично работает), а в том как Вы получаете этот самый my_real_not_actor_id_object

Давайте остальной код в студию....

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

@ммихаилл, метка ставится по ID объекта. Ну а раз тебе добавить больше нечего, то

 

 

UnLoaded, не считай себя умнее других
не корректное высказывание обернувшееся против тебя.

Чтобы поставить метку по ID объекта нужно сначала получить этот ID. Если твой рюкзак это спавн-элемент, то в его конфиге прописывай ID. Если статический объект - поставь в его центр спейс-рестриктор,пропиши ему ID и ставь метку на него.

  • Нравится 2

С#Н#Т#Р# (CoP 1.6.02)

Ссылка на комментарий
@Jeka81, именно так я всегда и поступаю. И в качестве id-меток я брал и рестрикторы, и физ. объекты, да и просто ид сквада. Все id абсолютны работоспособны, так как, при написании сюжета, я использовал их в качестве квествых отметок.
Ссылка на комментарий

function new_treasure_map(actor, npc, p)

     level.map_add_object_spot_ser( my_real_not_actor_id_object,  "new_treasure",  ""  )

end

Ну и как ты здесь получаешь id объекта, или передаешь его сюда?

 

Вот получение по имени секции для уже заспавненного объекта:

function set_mspot()
	for a=1,65534 do --// перебираем все айдишники
		local obj = alife():object(a) --// получаем обж
		if obj and obj:section_name() == "my_real_not_actor_id_object" then --// получили какой-то обж, смотрим имя. если наше
			level.map_add_object_spot_ser(obj.id, "new_treasure", "Рюкзак с хабаром") --// ставим метку
			break --// выходим из цикла
		end
	end
end
 

10.png

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

Товарищи, выручайте.
В теме справочника Вылетов писал про такой лог:


FATAL ERROR
 
[error]Expression    : assertion failed
[error]Function      : CResourceManager::_CreateTexture
[error]File          : D:\prog_repository\sources\trunk\Layers\xrRenderDX10\dx10ResourceManager_Resources.cpp
[error]Line          : 582
[error]Description   : _Name && _Name[0]


"Лечение" я предложил, но это "лечение" не выход, особенно когда ресурсы уже позволяют тянуть DirectX11, а какого-то ляда нельзя. Как уже писал в теме, вылет этот получаем при переходе на N-ную локу. С чем связано - не знал, но погуглив основательно, нашёл следующее:
* "Суть такой ошибки в недостатке текстур на которые ссылаются .thm файлы" -  http://www.amk-team.ru/forum/index.php?showtopic=5533&p=580128

* Аналогично, но с другого источника - http://translate.google.ru/translate?hl=ru&sl=en&tl=ru&u=http%3A%2F%2Fgsc-game.com%2Fmain.php%3Ft%3Dcommunity%26s%3Dforums%26s_game_type%3Dxr3%26thm_page%3D11%26thm_id%3D5125%26page%3D3%26sec_id%3D18

 

Итак, инфа есть, приступил к ликвидации вылета. Сразу взялся за строки типа:

! auto-generated bump map: ston\ston_beton_ch_09_bump

! auto-generated bump map: ston\ston_beton_ch_09_bump#
! Can't find texture 'terrain\terrain_chulim_average_mask'
! Can't find texture 'sky\sky_clouds1'
! Can't find texture 'sky\sky_clouds1#small'

 

 

Исправил. Исправил всё - консоль ругается только на два инвалидных звука. Тем не менее, вылет жив-здоров, *негодяй, в общем*.

Не подскажете, как дальше быть? Может, из за чего ещё этот вылет может случаться?

Работы на Artstationhttps://www.artstation.com/artist/stalker_lom

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

 

 

Вот получение по имени секции для уже заспавненного объекта

Зачем такие жертвы?

В ЗП практически у каждого объекта есть story_id

Получаем id по story_id:

 

object_id = get_story_object_id( story_id )

 

 

 

Не подскажете, как дальше быть?

Вылет связан с "кривым" THM файлом к текстуре, а не в текстуре.

Ибо если текстура прогнана через SDK и к ней сделан THM файл, то как такой THM файл, созданный к этой текстуре, может ссылаться на недостаток чего-то в текстуре?

Ошибка происхходит, когда вы в свою gamedata тащите, что-то из чужих модов и аддонов.

Для того, чтобы найти ошибку я делал так.

Убираю из gamedata всё содержимое папки  texture

Дальше начинаю добавлять папки, по одной, в папку texture, загружаю Сталкер и смотрю есть вылет или нет.

Если вылет произошёл, то "битый файл" в это папке.

Удаляю все THM файлы. Все текстуры прогоняю через SDK и делаю для них новые THM файлы.

Вылет пропадает и можно играть на динамике.

  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
так как, при написании сюжета, я использовал их в качестве квестовых отметок.

Вон оно, в чем дело-то... Вы попутали storyID с ID: первое - это сюжетный идентификатор, уникальное число которое задается разработчиком, а второе - это идентификатор объекта, то-же уникальное число, но присваивается объекту движком в момент создания объекта.

Установка метки на объект с использованием storyID будет выглядеть примерно так:

local ser_obj = alife():story_object(число из game_story_ids.ltx) -- получаем объект по storyID
if ser_obj then
level.map_add_object_spot_ser(ser_obj.id, "new_treasure",  "") -- ставим метку
end

Уточню сразу:  если my_real_not_actor_id_object это строковая константа из game_story_ids.ltx, типа

004 = "Escape_tutorial_wounded"

то в вышеуказанной ф-ции story_object(...) надо использовать именно числовое значение, незначащие нули не обязательны.

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

Для спавн-объекта можно добавить в кастом дату:

[story_object]
story_id = tvoi_luboi_story_id

 

А потом использовать его для установки метки. Объектом может быть и спейс-рестриктор, и инвентарный ящик, и левел-ченджер и аномальное поле.

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

Дошли руки исправить предыдущий лог, получил другой:

stack trace:
 
0023:06910203 xrRender_R4.dll

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

Работы на Artstationhttps://www.artstation.com/artist/stalker_lom

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

Доброго времени суток.

Не удается распаковать all.spawn  MISERY 2.1.1. Отпишитесь, пожалуйста, кому это удалось\удавалось.

Изменено пользователем Alex-2020

 

 

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

×
×
  • Создать...