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

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


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

Вот я хочу убрать кучу монстров и неписей с локации. Как и где это можно зделать? И чтоб не пришлось новую игру начинать..

Навіщо слова? Краще мовчати. Люди лізуть в твою душу лиш за тим, щоб там насрати...

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

А возможно заставить АИ стрелять из ПКМ? из того что на подставке. (в файлах игры есть)?

и ещё вопросик: возможно ли заставить аи ездить на транспорте.? в роликах с билдами это было. хотя думаю вряд ли возможно. TOL... ну если они через ал.спавн заспавнены... то ковырять надо его. но я после его изменения всегда игру начинал. а насчёт спавна через скрипт не знаю.

или ты зону, или она тебя.

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

bohoukot

А возможно заставить АИ стрелять из ПКМ? из того что на подставке. (в файлах игры есть)?

Да, возможно в файле character_desc_название_уровня.xml (gamedata/gameplay) какому - нибудь чуваку под

<visual>actors\кто_то_там\stalker_что_то_там_</visual> <supplies> [spawn] \n

пропиши wpn_название_пушки, которая нужна. \n

всё =)

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

Thank you for your honesty.

Now fuck off and die.

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

Такой вопрос: Есть некая переменная в скриптах. надо сохранить её значение при сейве. Как это сделать. Подскажите, или носом ткните, где почитать.

НЛС-6: У каждого своя зона

_______________________________________________________________

Не ищи легких путей и не возвращайся той же дорогой

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

Отшель[НИК], all.spawn

Предвосхищая следующие вопросы скину полезную статейку:

 

По распаковке алл.спавна с помощью acdc.

Расскажу, как делать это без батников.

Если надо распаковать алл.спавн.

1. Помещаем файл алл.спавн в папку, где находятся файлы от acdc. Лучше создать ее на диске С:

2. Нажимаем ПУСК - Выполнить. Появляется командное окно.

3. Вводим команду cmd. Появляется черное окно.

4. В нем пишем cd\ Далее нажимаем enter. Происходит перенос на другую строчку. Эта команда задает диск С для работы с ним.

5. Далее пишем cd C:\"название папки, куда поместили acdc". Нажимаем enter. Переход на другую строчку. Теперь задали папку с которой будем работать. Вот здесь и надо будет вводить команды для acdc.

6. Вводим acdc.pl -d all.spawn Нажимаем enter.

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

8. Если асдс не подходит, то он выдаст ошибку. Тут же в этом черном окне. Надо будет внимательно прочитать о чем ошибка. Обычно для разных модов не хватает какого-нибудь описания чего-нибудь. Например, может ругаться что не может найти af_soul.

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

9. После того, как сделали изменения в алл.спавне, надо будет таким же образом войти в папку с acdc, как описывалось раньше.

10. Набрать следующую команду: acdc.pl -c all.ltx

11. Если все сделали правильно в алл.спавне, то через некоторе время в папке с асдс появится файл all.spawn.new. Его надо будет переименовать в all.spawn

12. Правило при работе с алл.спавном - не забывайте правильно пронумеровывать вновь создаваемые секции. Для этого надо найти самый большой номер секции в алл.спавне. И присваивать своим секциям номера по порядку за этим номером.

 

 

 

 

Работа с ACDC

 

Сегодня мы разберем основу работы с ACDC. Но... Для начала небольшое отступление. Вы зададите вопрос, почему же лучше работать с ACDC нежели чем с xrSpawner? Отвечаю: xrSpawner при всех его преимуществах имеет множество более значительных минусов. Во первых, xrSpawner не определяет не game_vertex, ни level_vertex. А также он измеряет только позицию. Я думаю работающие с xrSpawner, замечали что, порой обьекты которые они спаунят спаунером не всегда появляются на месте. Или вообще не появляются. Потому что повторяю xrSpawner не определяет вертексы т.е. точная позиция и распределение по АИ-сетке. Итак начнём работу! У нас есть программа ACDC, руки и мозги в голове. Кладём all.spawn в папку utils и жмём на батник "распаковка". Итак all.spawn распакован!Мы там видим файлы alife и way. В файлах alife только обьекты которые спаунятся. А в way только пути. Я думаю с алайфом всё понятно. Разберем way. Пути. Путь это и ест путь. По которому может двигаться живой обьект.Сейчас мы это рассмотрим: Для начала устроим текстовый беспредел:) Найдём файл alife_l01_escape, а в нём

[869]

; cse_abstract properties

section_name = actor

name = level_prefix_actor_0001

s_rp = 0

position = -139.449829101563,-29.6908683776855,-351.492797851563

direction = 0,0.00895109120756388,0

s_flags = 0x29

 

 

[dont_spawn_character_supplies]

 

[spawn]

wpn_binoc

novice_outfit

device_torch

END

 

; cse_visual properties

visual_name = actors\hero\stalker_novice

 

; cse_alife_creature_abstract properties

g_team = 0

g_squad = 0

g_group = 0

health = 1

dynamic_out_restrictions =

dynamic_in_restrictions =

 

upd:health = 1

upd:timestamp = 0x75732029

upd:creature_flags = 0x70

upd:position = -139.449829101563,-29.6908683776855,-351.492797851563

upd:o_model = 0

upd:o_torso = 0.00895109120756388,0,-0.999959945678711

upd:g_team = 0

upd:g_squad = 0

upd:g_group = 0

 

; cse_alife_trader_abstract properties

money = 40

trader_flags = 0

character_profile = actor

 

; cse_ph_skeleton properties

 

; cse_alife_creature_actor properties

 

upd:actor_state = 0xd20

upd:actor_accel_header = 0

upd:actor_accel_data = 0

upd:actor_velocity_header = 0

upd:actor_velocity_data = 0

upd:actor_radiation = 0

upd:actor_weapon = 110

upd:num_items = 0

 

Примерно такие строки. Для начала расщедримся:) Припишем актору в [dont_spawn_character_supplies]

[spawn] такие строки.

[dont_spawn_character_supplies]

 

[spawn]

wpn_binoc

wpn_vintorez

ammo_9x39_pab9 = 20

wpn_usp

ammo_11.43x23_hydro = 22

novice_outfit

device_torch

 

Получиться что мы подарим Меченому при начале игры Винторез, 600 патронов к нему, пистолет USP и 420 патронов к нему. Так. Теперь Меченый у нас будет крутым рэмбо:) Теперь ещё и подарим ему денежек.

; cse_alife_trader_abstract properties

money = 40

trader_flags = 0

character_profile = actor

 

В строчке money напишем любое число. Тока астрономические не надо(не проверял). Ну теперь Меченый не только рэмбо но и миллионер:). Теперь займемся кординатами. У нас они такие:

position = -139.449829101563,-29.6908683776855,-351.492797851563

direction = 0,0.00895109120756388,0

 

Это наши позиция и дирекция.

; cse_alife_object properties

game_vertex_id = 19 (Тот самный вертекс на игре)

distance = 0.699999988079071

level_vertex_id = 111256 (вертекс на уровне)

object_flags = 0xffffffbf

custom_data = <<END

 

А теперь пропишем туда такие кординаты:

position = -167.232299804688,-25.4363708496094,-354.692901611328

direction = 0,-0.365248799324036,0

 

; cse_alife_object properties

game_vertex_id = 0

distance = 0.699999988079071

level_vertex_id = 82413

object_flags = 0xffffffbf

custom_data = <<END

upd:health = 1

upd:timestamp = 0x75732029

upd:creature_flags = 0x70

upd:position = -167.232299804688,-25.4363708496094,-354.692901611328

upd:o_model = 0

upd:o_torso = -0.365248799324036,0,0.930909931659698

upd:g_team = 0

upd:g_squad = 0

upd:g_group = 0

 

Тепер игра начнётся в здании блокпоста на 2 этаже:). С этим мы закончим. Теперь создадим нового НПС:

[871]

; cse_abstract properties

section_name = stalker

name = esc_bridge_soldier1

position = -133.27989196777,-30.146812438965,-372.0263671875

direction = 0.028013030067086,0,0.9996075630188

 

; cse_alife_trader_abstract properties

money = 5000

character_profile = esc_soldier_regular

 

; cse_alife_object properties

game_vertex_id = 20

distance = 16.1000003814697

level_vertex_id = 118083

object_flags = 0xffffffbf

custom_data = <<END

[logic]

active = walker

 

[walker]

path_walk = hodim_dvor

END

 

; cse_visual properties

visual_name = actors\soldier\soldier_bandana_3

 

; cse_alife_creature_abstract properties

g_team = 0

g_squad = 1

g_group = 2

health = 1

dynamic_out_restrictions =

dynamic_in_restrictions =

 

upd:health = 1

upd:timestamp = 0

upd:creature_flags = 0

upd:position = -133.27989196777,-30.146812438965,-372.0263671875

upd:o_model = 0

upd:o_torso = 0.028013030067086,0,0.9996075630188

upd:g_team = 0

upd:g_squad = 1

upd:g_group = 2

 

; cse_alife_monster_abstract properties

 

upd:next_game_vertex_id = 65535

upd:prev_game_vertex_id = 65535

upd:distance_from_point = 0

upd:distance_to_point = 0

 

; cse_alife_human_abstract properties

predicate5 = 1,2,2,1,2

predicate4 = 0,1,1,1

 

; cse_ph_skeleton properties

 

upd:start_dialog =

 

; se_stalker properties

 

Так вот он наш друг НПС солдат на блокпосте:) Тут уже знакомы строки. Позиция, дирекция вертексы... Но есть кое что новое:)

[logic]

active = walker

 

[walker]

path_walk = hodim_dvor

 

Элементарная логика НПС. hodim_dvor-Это путь по которому будет ходить НПС. НПС есть всё готово. Но путя то у нас нет:) Создадим его в файле way_l01_escape. Припишем вот такие строчки.

[hodim_dvor]

points = p0,p1

p0:name = name00

p0:position = -120.44634246826,-30.15016746521,-363.68786621094

p0:game_vertex_id = 24

p0:level_vertex_id = 132887

p0:links = p1(1)

 

p1:name = name01 номер точки

p1:position = -132.61611938477,-30.142726898193,-363.87365722656 - только позиция

p1:game_vertex_id = 19 вертекс на игре

p1:level_vertex_id = 118862 вертекс на уровне

p1:links = p0(1) на какую точку после этой перейдёт НПС. (тут он будет ходить туда сюда, если не написать линкс то он остановиться на месте)

 

Всё! Вгоняям в way эти строки(тока мои коментарии писать не надо) Всё готово можно тестить изменения:_))))). Как снимать корзинаты и работать с PI расскажу в следующей статье. Теперь жмём на батник запаковка и усё! Пихаем all.spawn в игру. Только лучше ещё поправить отношения актора к военным и наоборот в лучшую сторону. Чтобы непись сразу пошёл по своему пути. Он удет ходить от казармы до дома(там поймёте) Статью написал [[Rez@niy ]]

 

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

Vergas

Скрипт bind_stalker.script функции actor_binder:save(packet) и actor_binder:load(reader)

 

Для сохранения переменной в actor_binder:save(packet) пишешь примерно это (писать лучше в самый конец, чтобы ошибок меньше было):

имя_файла_скрипта_в_котором_нужная_ тебе_переменная. save(packet)

 

Для загруски переменной в actor_binder: load (packet) пишешь примерно это (писать лучше в тоже место что и в actor_binder:save(packet)):

имя_файла_скрипта_в_котором_нужная_ тебе_переменная.load (reader)

 

в файле с переменной создаешь функции:

function save (packet)

packet:w_u8(имя_переменной)

end

и

function load (reader)

имя_переменной = reader:r_u8()

end

 

w_u8 и r_u8 надо поменять если используешь другой тип переменной

вот несколько примеров(здесь я могу ошибаться так что поправьте если что):

строковая переменная w_stringZ и r_stringZ

с плавающей точкой w_float и r_float

целое число w_u8 и r_u8

там еще их много, смотри в файле lua_help.script - class net_packet.

Изменено пользователем 8push5
Возможно всё, ну или почти всё.
Ссылка на комментарий

8push5,

Спасибо! :)

А я вот что нашел на оффоруме:

Есть в xr_logic штука под название pstor. Работать можно через xr_logic.pstor_store()/xr_logic.pstor_retrieve(). Сохраняется всё в биндере игрока, причём совместимость не теряется. Только злоупотреблять с большими объёмами данных (в моей ситуации это где-то 4-6 КБ) не следует, иначе игра будет вылетать.

В твоем случае надо лезть в bind_stalker.script, что не хотелось бы делать (чем меньше вмешиваешься в чужие скрипты - тем легче адаптировать свои)

Попробую сейчас и то и другое.

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

НЛС-6: У каждого своя зона

_______________________________________________________________

Не ищи легких путей и не возвращайся той же дорогой

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

у меня вопрос, задавал его на других форумах никто не дал ответа

 

как сделать вот такие ползунки, как в опциях:

1b3596ce34d4t.jpg

 

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

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

Ещё проблема... Момент потери предмета из инвенторя отследить легко, через функцию actor_binder:on_item_drop (obj). А вот как поймать момент появления предмета.... Ну никак понять не могу.....

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

Все, понял.... Конечно через actor_binder:on_item_take (obj). Это все шутки предмета, который постоянно скриптово пропадает и появляется в инвентаре :)

Я эту функцию и использовал, но дальше на спавн предмета через скрипт внимания не обратил. А там у меня и ломалось.

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

НЛС-6: У каждого своя зона

_______________________________________________________________

Не ищи легких путей и не возвращайся той же дорогой

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

Vergas, там же, в bind_stalker. Отслеживание на взятие предмет в инвентарь - actor_binder:on_item_take (obj)

Изменено пользователем WAWKA
Ссылка на комментарий
Товарищи Сталкеры, можно-ли с помощью скрипта взорвать предмет(например ящик с динамитом)? Если кто сможет, напишите.

obj:explode(0)

obj - это должен быть онлайновый (клиентский) объект

Я так подрывал динамит, гранаты и баллоны с газом. Число не знаю что означает, на результат по-моему не влияет никак.

 

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

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

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

 

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

Ребята, нужна помощь - поломался ФН2000-палач, причем в прямом смысле этого слова, он работает только как биноколь(тупо,при нажатии л.к.м он тоже приближает) вместо патронов на экране показуется само оружие, пробовал менять клас(с бинокля на оружие), начинает стрелять - но оптика отрубается - не наводятся рамки и не работает ролик ближе - дальше.

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

Варианты подписи (возможен ТОЛЬКО ОДИН вариант!):

не более 6 строк текста;

не более 3х юзербаров 350х20;

не более одного юзербара 350х20 с тремя строками текста;

не более одного большого юзербара 368х72;

не более 3х юзербоксов 50х125.

N6260

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

а как сделать пули видимыми? (ну то есть трассера). в некотрых модах при стрельбе прямо видно полоски как

летит пуля.

2 а возможно заставить вертолёт (тот что на кордоне) стрелять по игроку.? и желательно после того как игрок в него пальнёт. ну допостим я в него с ак47 стрельнул а он по мне ракетами или пулемётом.

или ты зону, или она тебя.

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

buxoukot,

1. gamedata\config\weapons файл weapons.ltx строка time_step. Ставь 33.

2. Вертолет и так утюжит ГГ после нападения на блокпост.

а вот с вертушкой что-то не замечал.

Я понял. Ты про ту что сначала пролетает. Нет, та чистой воды антураж.

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

8push5,

А ведь ни один способ по сохранению переменных у меня ни сработал....

НЛС-6: У каждого своя зона

_______________________________________________________________

Не ищи легких путей и не возвращайся той же дорогой

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

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

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

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

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

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

Войти

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

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

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