[CoP] Ковыряемся в файлах - Страница 214 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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


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

Clayman,

Еще вопрос - а двери-слайдеры в движке подрезаны? Никто не смог их восстановить?

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

 

lychagin0,

Причём здесь "транспорт мод" и тем более какое отношение имеет БТР и его "шустрость" к вопросу о дверях?

 

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

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

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

 

Clayman,

lychagin0,

Причём здесь "транспорт мод" и тем более какое отношение имеет БТР и его "шустрость" к вопросу о дверях?

Приношу свои извинения, вел диалог о БТР, и невнимательно прочитал вопрос. Подумал что речь идёт о юзании дверей и возможности езды на транспорте в ЗП.

Ещё раз сори.

Clayman,

Еще вопрос - а двери-слайдеры в движке подрезаны? Никто не смог их восстановить?

 

Сделать\портировать модель и настроить в SDK, и всё будет как в ТЧ.

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

З.Ы извеняюсь если не туда написал.

lychagin0,

Подумал что речь идёт о юзании дверей и возможности езды на транспорте в ЗП.

Что касается машин, то двери там можно сделать таким же образом. Машина - это в целом физический объект, правда уже не общего вида, а специальный. Двери можно сделать по тому-же принципу: разблокировать шарниры, добавить схему управления открытием/закрытием. Только пользы с этого мало, поскольку уж анимации влезания/вылезания вырезаны начисто, и тяжело привязать эту манипуляцию дверями к моменту посадки/вылезания.

 

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

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

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

 

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

Ребята, подскажите, как сделать ремкомплект для ЗП? Нашел в инете

 

Создание ремонт комплекта

 

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

 

1. Для начала нам нужно создать сам ремонт комплект, то есть предмет, а уже потом вешать на него функцию при использование. Для этого в config\misc\items.ltx в конец добавляем конфиг нашего предмета:

 

[repair_kit_outfit]:identity_immunities

GroupControlSection = spawn_group

discovery_dependency =

$spawn = "food and drugs\repair kit outfit"

$prefetch = 32

class = II_ANTIR ;класс не трогаем!

cform = skeleton

visual = equipments\item_merger.ogf ;модель

description = enc_equipment_repair_kit_outfit ;ссылка на описание в config\text\rus\....xml

 

inv_name = repair_kit_outfit_name ;ссылка на название в config\text\rus\....xml

inv_name_short = repair_kit_outfit_name ;тоже самое, что и inv_name

inv_weight = 6.0 ;вес

 

inv_grid_width = 2 ;ширина иконки

inv_grid_height = 1 ;высота иконки

inv_grid_x = 8 ;координата x иконки

inv_grid_y = 18 ;координата y иконки

cost = 10000 ;цена

;всё ниже написанное не трогаем, оно нам и не нужно

eat_health = 0

eat_satiety = 0

eat_power = 0

eat_radiation = 0

wounds_heal_perc = 0

eat_portions_num = 1

animation_slot = 4

hud = wpn_vodka_hud

 

2. Теперь добавим название и описание. Для этого в файле config\text\rus\string_table_enc_equipment.xml в конец между </string> и </string_table> добавляем строки по аналогии с уже написсанными:

 

<string id="repair_kit_outfit_name">

<text>Ремонт комплект ДПК</text>

</string>

<string id="enc_equipment_repair_kit_outfit">

<text>Новинка от Вани Болта - ремонт комплект ДПК для быстрой и эффективной починки костюмов. При его создании были учтены все недочёты и, следовательно, удалены. Благодаря улучшенным инструментам и деталям, а также облегченному весу весьма ценен. С его помощью можно увеличить состояние костюма до 100%, если он повреждён не больше 30%. Незаменимая вещь во время вылазки.</text>

</string>

 

Отлично, с предметом закончили. Теперь приступим к самому главному - скриптам.

Работа со скриптами

 

1.Вешаем функцию починки при использовании нашего ремонт комплекта. Для этого в файле scripts\bind_stalker.script находим функцию:

 

function actor_binder:reinit() и после строки

 

self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) пишем:

 

self.object:set_callback(callback.use_object, self.repair_outfit_start, self)

 

Теперь в папке scripts создаёте свой скриптовой фаил ваше_название_скрипта.script. Но! Название должно быть написано на английском языке и вместо пробелов должен стоять знак "_". Опять открываем bind_stalker.script и в самый конец добавляем эту функцию:

 

function actor_binder:repair_outfit_start(obj, who)

if obj then

if obj:section() == "repair_kit_outfit" then --здесь указываем предмет, при использование которого будет срабатывать функция ниже

ваше_название_скрипта.repair_outfit() --здесь указываем ссылку на функцию. Сначала скрипт, в котором она написана, потом название самой функции

end

end

end

 

2. Добавляем саму функцию ремонта. Для этого в файле ваше_название_скрипта.script пишем:

 

-- Ремонт комплект для костюмов

function repair_outfit()

local item_s6 = db.actor:item_in_slot(6) --объявляем переменную (item_s6)

if item_s6 ~= nil and item_s6:condition() >=0.30 and item_s6:condition() ~=1 then --когда костюм можно чинить (состояние больше или равно 30%)

item_s6:set_condition(1)

local snd_obj = xr_sound.get_safe_sound_object([[interface\inv_detach_addon]])

snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)

local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,0,255,0]Ремонт костюма завершен."

db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)

elseif item_s6 == nil then --когда костюма нет

local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: нужно одеть коcтюм."

db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)

alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())

elseif item_s6:condition() <0.30 then --когда костюм нельзя чинить (состояние меньше 30%)

local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: костюм слишком сильно повреждён."

db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)

alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())

elseif item_s6:condition() ==1 then --когда костюм в отличном состояние

local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: %c[255,0,255,0]костюм в отличном состояние."

db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)

alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())

end

end

 

Всё! Теперь заходим в игру и наслаждаемся.

Небольшая заметка

 

1. Чтобы сделать ремонт комплект для оружия проделываем тоже самое, только переименовываем всё вместо outfit на weapon и в функцие починки ставим слот 1 или 2 (оружейные слота) вместо 6 (слот костюмов). Ещё нужно заменить переменную item_s6 например на item_s1 или item_s2.

 

2. Число 0.30 - минимальное состояние костюма, следовательно его можно менять на любое вам угодное. Простите за такое оформление, это моя вторая статья. В будущем, если будет больше свободного времени, постораюсь расписать все моменты подробно. Автор статьи: Бага.

 

Но у меня ГГ съедает ремкомплект.

 

Понимаю, что это для "Теней...", но все таки, как подправить скрипты, чтобы работало для ЗП?

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

karonbaron, если он не будет его съедать - то это получится какой-то читерский ремкомплект. Предполагается, что этот ремкомплект содержит расходный материал (типа бронепластины и т.д.) и естественно, что после ремонта он должен исчезать. Ну если тебе нужен такой, то переделай вот так:

-- Ремонт комплект для костюмов
function repair_outfit()
alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
local item_s6 = db.actor:item_in_slot(6) --объявляем переменную (item_s6)
if item_s6 ~= nil and item_s6:condition() >=0.30 and item_s6:condition() ~=1 then --когда костюм можно чинить (состояние больше или равно 30%)
item_s6:set_condition(1)
local snd_obj = xr_sound.get_safe_sound_object([[interface\inv_detach_addon]])
snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,0,255,0]Ремонт костюма завершен."
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
elseif item_s6 == nil then --когда костюма нет
local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: нужно одеть коcтюм."
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
elseif item_s6:condition() <0.30 then --когда костюм нельзя чинить (состояние меньше 30%)
local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: костюм слишком сильно повреждён."
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
elseif item_s6:condition() ==1 then --когда костюм в отличном состояние
local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: %c[255,0,255,0]костюм в отличном состояние."
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)

end
end

 

И будет тебе счастье :)

Все равно не работает.

Он его просто съедает, и все. Никакого сообщения, даже если броник поврежден.

 

Правда, я функцию actor_binder:repair_outfit_start немного переделал:

 

function actor_binder:repair_outfit_start(obj)

if (obj) then

local s_obj = alife():object(obj:id())

if(s_obj) and (s_obj:section()=="repair_kit_outfit") then rkomplekt.repair_outfit()

end

end

end

 

 

Толку нет. Скрипт не срабатывает...

 

Поделитесь, пожалуйста, кто-нибудь рабочими кодами...

 

 

 

 

karonbaron, я вспомнил, в ЗП броник в 7-ом слоте :). Попробуй так:

-- Ремонт комплект для костюмов
function repair_outfit()
    alife():create("repair_kit_outfit", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
    local current_outfit = db.actor:item_in_slot(7) --объявляем переменную (current_outfit)
    if current_outfit ~= nil and current_outfit:condition() >=0.30 and current_outfit:condition() ~=1 then --когда костюм можно чинить (состояние больше или равно 30%)
        current_outfit:set_condition(1)
        local snd_obj = xr_sound.get_safe_sound_object([[interface\inv_detach_addon]])
        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
        local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,0,255,0]Ремонт костюма завершен."
        db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
    elseif current_outfit == nil then --когда костюма нет
        local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: нужно одеть коcтюм."
        db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
    elseif current_outfit:condition() <0.30 then --когда костюм нельзя чинить (состояние меньше 30%)
        local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: костюм слишком сильно повреждён."
        db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
    elseif current_outfit:condition() ==1 then --когда костюм в отличном состояние
        local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: %c[255,0,255,0]костюм в отличном состояние."
        db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
    end
end

 

 

И нафига ты функцию actor_binder:repair_outfit_start немного переделал? Не вижу никакой логики, оставь как было.

И так не срабатывает тоже. И если функцию поменять, не реагирует. Я кучу вариантов испробовал уже, без толку...

 

Ну ладно, ремкоплект рабочий я выдернул из мизери мода.

 

У меня такой, более сложный вопрос.

 

Как восстановить выпадение частей монстров в ЗП? А то какой смысл их убивать, только патроны тратить...

Хоть уже и не важно, но подозреваю, что ты кое что пропустил:

1.Вешаем функцию починки при использовании нашего ремонт комплекта. Для этого в файле scripts\bind_stalker.script находим функцию:

 

function actor_binder:reinit() и после строки

 

self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) пишем:

 

self.object:set_callback(callback.use_object, self.repair_outfit_start, self)

 

Хоть уже и не важно, но подозреваю, что ты кое что пропустил:

1.Вешаем функцию починки при использовании нашего ремонт комплекта. Для этого в файле scripts\bind_stalker.script находим функцию:

 

function actor_binder:reinit() и после строки

 

self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) пишем:

 

self.object:set_callback(callback.use_object, self.repair_outfit_start, self)

 

Я первоначально все коды из той (см. выше мои посты) статьи вставлял в игру вообще без изменений. Не работало.

 

Ну, ладно. Так что там с частями монстров?

 

Выпадение их как в SGM моде не предлагать, меня это не устраивает. Видел в ARS-моде мутантера, когда можно через спецменю отрезать части тела, вот его бы в чистом виде. Может, есть у кого?

А мод Мясник не устраивает? Там как раз отрезаешь части мутантов, отличная штука! Я себе прикрутил в обязательном порядке...

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

Есть такой вопрос: как единожды вызвать функцию при старте игры (напр. спавн)?

Личные изыскания, к сожалению, результатов не дали.

userbar368.png

Callisto, при начале новой игры, под ГГ находится рестриктор, его логика вынесена в отдельный файл, где-то в папке configs\scripts, этот рестриктор выдаёт основное сюжетное задание: "Узнать о причинах падения вертолётов". Как вариант, можешь сделать вызов функции через него.
ColR_iT, Думала об этом способе, и даже логику этого рестриктора нашла, но вот как в него добавить вызов функции не могу понять, как-то медленно идет изучение.

userbar368.png

Callisto,

1. Открываем файл:

scripts\xr_effects

 

2. Добавляем туда свою функцию:

function test_func()
...
end

 

3. Открываем файл логики рестриктора:

configs\scripts\zaton\zat_b101_logic

 

4. Находим строчку:

[sr_idle]
on_info = {!black_screen -zat_b101_give_task +zat_a1_game_start} sr_idle@save %=give_task(zat_b101_heli_5_crash) +zat_b101_give_task =give_task(jup_b8_heli_4_crash) +jup_b8_give_task =give_task(zat_b28_heli_3_crash) =give_task(zat_b100_heli_2_crash) =give_task(jup_b9_heli_1_crash) +jup_b9_give_task =set_active_task(zat_b28_heli_3_crash)%

 

5. Заменяем на эту:

[sr_idle]
on_info = {!black_screen -zat_b101_give_task +zat_a1_game_start} sr_idle@save %=give_task(zat_b101_heli_5_crash) +zat_b101_give_task =give_task(jup_b8_heli_4_crash) +jup_b8_give_task =give_task(zat_b28_heli_3_crash) =give_task(zat_b100_heli_2_crash) =give_task(jup_b9_heli_1_crash) +jup_b9_give_task =set_active_task(zat_b28_heli_3_crash) =test_func%

 

6. Готово.

 

 

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

«There is no spoon»

Один раз случайно поймал вот такой случай - консоль забивается вот таким ворнингом:

 

RENDER [Warning]: Too many occlusion queries were issued(>1536)!!!

 

Причем так и не понял из-за чего это... потом все обегал раз 15, вроде не появляется... никто про эти буквы ничего не знает?

Callisto, ещё вариант. Через скрипт.

 

Создаем скрипт my_script.script и в него пишем

function main()

if db.actor:dont_has_info("new_game_start") then

spawn_monster()

db.actor:give_info_portion("new_game_start")

end

end

------------------------------------------------------------

function spawn_monster()

alife():create("chimera_normal",vector():set(116.86434936523,-3.9353849887848,176.99018859863),1167207,138)

end

 

 

 

Вызывать так:

В bind_stalker.script, после

    benchmark.main()                                      --' Distemper 06.2008 --

Пишем :

        my_script.main()

 

 

AWRP : Re - Load 0.2 ©

Akella-96 aka SvD, для кого-то это совсем не вариант. Из-за одного вызова функции выполнять проверку if db.actor:dont_has_info("new_game_start") then всю игру - жесть как не рационально.

В файле xr_effects.script находим функцию damage_actor_items_on_start() и в конце дописываем вызов нашей функции. Да и вообще из неё можно всё вырезать, чтобы ГГ начинал игру во всём новом :)

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

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

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

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

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

Войти

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

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

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