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

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

Как-то всё в итоге к уборке трупов свелось, мда. Скрипты уборщика трупов-то уже на любой вкус есть, только под себя подогнать. Я вот вроде нашёл функцию в ranks.script:
 

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

-- возвращает название ранга заданного game_object (персонажа)

function get_obj_rank_name( obj )
    if not ranks_loaded then
        read_all_ranks()
    end

    local obj_rank

    -- HACK
    if obj.m_story_id ~= nil then
        obj_rank = obj:rank()
    else
        obj_rank = obj:character_rank()
    end

   --добавляем проверку в следующей строке на живость NPC:

    if IsStalker(obj) and obj:alive() then
        return get_rank_name( obj_rank, stalker_rank_intervals ) or stalker_max_rank_name
    else
        return get_rank_name( obj_rank, monster_rank_intervals ) or monster_max_rank_name
    end
end

 

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

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

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

Всем доброго. Вопрос такой - каким образом реализованы в игре вороны? Они ведь не обрабатываются скриптами вообще? Имею в виду их логику, траекторию. Это движковое? Есть ли возможность задать вектор движения вороне? 

Ссылка на комментарий
9 часов назад, _Sk8_AsTeR_ сказал(а):

Они ведь не обрабатываются скриптами вообще?

Можно добавить им в конфиг скриптовую обвязку вида: script_binding = bind_crow.init. Я так делал для выдачи инфопоршня при убийстве вороны.

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

@Капрал Хикс , емнип, за добавление/удаление в этот список неписей отвечают две строчки в se_stalker.script:

actor_stats.add_to_ranking(self.id)

и

actor_stats.remove_from_ranking(self.id)

  • Полезно 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

Господа, а каким образом можно вызвать свою функцию при условии, что ГГ только что пришлёпнул непися? Через каллбеки? Если да, то через какие? Чет я туплю...

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

каким образом можно вызвать свою функцию при условии, что ГГ только что пришлёпнул непися?

В файле xr_motivator.script ищи function motivator_binder:death_callback(victim, who)

там есть проверка:

	if who:id() == db.actor:id() then
		xr_statistic.addKillCount(self.object)
		-- Отсюда вызывай
	end

 

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

@ted.80 нашёл абсолютно идентичные строки в бинд_сталкер, только там похоже этот  каллбек не работает судя по всему, ибо я там ковырял эти строки. Тогда ясно в чем моя ошибка :) 

Ссылка на комментарий
Только что, _Sk8_AsTeR_ сказал(а):

в бинд_сталкер, только там похоже этот  каллбек не работает

Работает. Но относится к ГГ, а не НПС. Когда ГГ кто-нибудь убьет, там можно проверять, кто...

  • Спасибо 1
  • Согласен 2

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Доброго времени суток. Возник вопрос к опытным скриптерам. В ТЧ есть функция выдачи тайника:

    treasure_manager.get_treasure_manager():give_treasure("esc_secret_truck_goods")

Как переделать так, чтобы выдавало рандомный тайник из заданного списка? Буду очень благодарен за помощь.

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

@hArdplAyer22_22 Вот прям со всеми потрохами:

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

esc_tbl = {
        "esc_secret_bridge_vagon",
        "esc_secret_anomaly_dead",
        "esc_secret_bandit_cross",
        "esc_secret_bandit_supply",
        "esc_secret_under_cross",
        "esc_secret_refuge",
        "esc_secret_safe_farm",
        "esc_secret_vagon_container",
        "esc_secret_stalker_things",
        "esc_secret_box_bridge",
        "esc_secret_village_rucksack",
        "esc_secret_village_roof",
        "esc_secret_nice_place",
        "esc_secret_vorpal",
        "esc_secret_commander_goods",
        "esc_secret_road",
        "esc_secret_thief",
        "esc_secret_gas_pipe",
        "esc_secret_truck_goods",
        "esc_secret_kpp_tower",
    }

function give_treasure_esc_random()
    treasure_manager.get_treasure_manager():give_treasure(esc_tbl[math.random(#(esc_tbl))])
end

 

  • Спасибо 1
  • Нравится 1

Здесь могла быть ваша реклама.

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

Нашёл скрипт на хит от артов. При загрузке сохранения если есть в инвентаре гг арт, то хит опять бьёт гг! Может кто глянуть https://yadi.sk/d/gnrvCoK2NEvN0g

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

Здраствуйте, нужна помощь. Сталкер ТЧ с модом ОГСМ на движке ОГСР. При получении игроком любого тайника, все содержимое тайника автоматически перемещается ГГ в инвентарь. Может кто сталкивался?

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

function workshop_ui:Init_Controls()
    self:Init(0,0,1024,768)
    local xml
    self.xml = CScriptXmlInit()
    xml = self.xml
    xml:ParseFile("ui_workshop.xml")

    self.dialog = xml:InitStatic("workshop:workshop_window",self)

    self.button_repair_tab = self.xml:Init3tButton("workshop:btn_repair_workshop", self.dialog)
    self:Register(self.button_repair_tab, "btn_repair_workshop")

    self.button_sewing_tab = self.xml:Init3tButton("workshop:btn_disassembly_workshop", self.dialog)
    self:Register(self.button_sewing_tab, "btn_disassembly_workshop")

    self.dlg_repair            = workshop_repair(xml, self, 0, 0)
    self.dlg_repair:Show        (false)
    self.dialog:AttachChild        (self.dlg_repair)
    xml:InitWindow            ("tab_size", 0, self.dlg_repair)

    self.dlg_sewing            = workshop_disassembly(xml, self, 0, 0)
    self.dlg_sewing:Show        (false)
    self.dialog:AttachChild        (self.dlg_sewing)
    xml:InitWindow            ("tab_size", 0, self.dlg_sewing)
end
--// ------------------------------------------------------------------------------
function workshop_ui:InitCallBacks()
    self:AddCallback("btn_quit_workshop", ui_events.BUTTON_CLICKED, self.on_quit, self)
    self:AddCallback("btn_repair_workshop", ui_events.BUTTON_CLICKED, self.on_repair, self)
    self:AddCallback("btn_disassembly_workshop", ui_events.BUTTON_CLICKED, self.on_disassembly, self)
end
--// ------------------------------------------------------------------------------
function workshop_ui:on_quit()
    self:GetHolder():start_stop_menu(self, true)
end

function workshop_ui:on_repair()
    self.dlg_sewing:Show(false)
    self.dlg_repair:Show(true)
end

function workshop_ui:on_disassembly()
    self.dlg_repair:Show(false)
    self.dlg_sewing:Show(true)
end

Может кто подсказать что я пишу не так! Хочу сделать переключение между окнами в GUI. Когда открываю одну вкладку то вторая кнопка даже не горит при наведении на неё!

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

@Colder тебе табы что-ли нужны? Существует готовый класс для этого, костыли не нужны. Пример

<window>
  <main_dialog x="80" y="5" width="860" height="680">
    <tab x="14" y="40" width="202" height="28">
      <button x="0" y="0" width="100" height="28" stretch="1" accel="k1">
        <texture_offset x="0" y="0"/>
        <texture>ui_cop_button_left</texture>
        <text font="graffiti22" align="c">Рюкзак</text>
        <text_color>
            <e r="0" g="0" b="0"/>
			<t r="240" g="217" b="182"/>
			<d r="135" g="123" b="116"/>
			<h r="0" g="0" b="0"/>
        </text_color>
      </button>
      <button x="101" y="0" width="100" height="28" stretch="1" accel="k2">
        <texture_offset x="0" y="0"/>
        <texture>ui_cop_button_right</texture>
        <text font="graffiti22" align="c">Инвентарь</text>
        <text_color>
            <e r="0" g="0" b="0"/>
			<t r="240" g="217" b="182"/>
			<d r="135" g="123" b="116"/>
			<h r="0" g="0" b="0"/>
        </text_color>
      </button>
    </tab>

и инициализация

  self.tab = xml:InitTab( "main_dialog:tab", self.dialog )
  self:Register( self.tab, "tab" )
...
  self:dshAddCallback( "tab", ui_events.TAB_CHANGED, self.OnTabChange, self )

Это все не для копипасты, а для размышлений.

 

  • Нравится 2
Ссылка на комментарий
Только что, ARTLantist сказал(а):

в ЗП

А разве там нет колбеков on_item_to_slot, on_item_to_ruck?

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Возник такой вопрос. Можно ли сделать использование предмета с условием если зажата какая либо клавиша? Если да то где можно подсмотреть?

Платформа: ТЧ

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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