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

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

Если я правильно понял, это значение task_info.id.complex_type, которое для цикличек выглядит как type_parent.

 

Пример:

id = barmen_kill_stalker_5

complex_type = kill_stalker_barman

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz ну мне конкретно нужен этот id. Именно получить его, чтобы я мог прописать

local id = что-то, и чтобы это "что-то" выдало мне мой id квеста (в частном случае "tm_monster_part_1"), чтобы я потом прописал

local task_desc = self.task_info[id]

И уже от этого плясал и везде были свои данные конкретно этого квеста

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

1. В обработчик action по умолчанию передается 4 аргумента: speaker1, speaker2, dialog_id, phrase_id (obj, obj, str, str) – последнее значение для фразы с описанием будет равно desc_phrase_id.
2. Порядковые номера фраз в CRandomTask:__init() генерируются подряд: yes_phrase_id = desc_phrase_id +1.
3. Есть готовая таблица self.task_id_by_yes_phrase_id – из нее и получить id.

  • Полезно 2

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
  04.09.2024 в 21:19, Norman Eisenherz сказал:

Есть готовая таблица self.task_id_by_yes_phrase_id – из нее и получить id.

Ну таблица и эта, и task_id_by_init_phrase_id возвращали мне nil, хотя я вроде правильно всё подставлял, пришлось добавить цикл на прогон всех тасков персонажа и проверять совпадение по self.task_info[v].yes_phrase_id, но всё работает. Благодарю, что направил в нужное русло:drinks:

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

Проверил таблицу: данные точно заполняются, причем ключи phrase_id, как и в обработчике action, являются текстом – не было ли при сверке перевода в число?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

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

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

AddAction + yes_phrase_id + task_id аналогично тому, что описано выше, если это циклический квест.

 

Edit: даже проще – если заголовок конфига известен заранее, достаточно добавить в тот же CRandomTask:init_task_dialog проверку

if v.name == "tm_find_artefact_1" then … yes_phrase:AddAction(…)

Изменено пользователем Norman Eisenherz
  • Нравится 1
  • Полезно 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
  06.09.2024 в 21:20, Norman Eisenherz сказал:

if v.name == "tm_find_artefact_1" then … yes_phrase:AddAction(…)

А можно на конкретном примере? А то я застрял в хитросплетениях строк уже.

  тут (Показать)

 

Уже разобрался. Пост под снос.

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

1. Надо привязаться к yes_phrase; действие "give_task" уже ссылается на нее – свое действие с проверкой ставить рядом.

2. Сообщение выдается при передаче предметов через обертку dialogs.relocate_item_section(…), которая ссылается на news_manager.script.

  • Полезно 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@ARTLantist ,

вот готовая функция показа награды из АМК 1.4.1, может, поможет:

  Показать

 

А, вижу, уже разобрался.

Столкнулся с двумя проблемами в файле task_manager.

1) Отображение награды за квест. Суть: в скрипте АМК используется сбор информации о квесте вида:

    task_details = random_task.task_info[random_task.task_id_by_init_phrase_id[p2-1]]

    if task_details == nil then return end

    reward_text = format_reward_text(task_details.reward_item)
    reward_money = task_details.reward_money

 

У меня сильно видоизменённый скрипт из R.M.A., в котором данный метод не работает, судя по тому, что текст награды банально не отображается...

 

2) Награда инфой (инфопоршнем) за квест. Та же проблема в разных методах...

 

Вот весь скрипт с комментариями, что и где не работает:

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

@Капрал Хикс  Привет, есть отдельный мини мод, посмотри как там реализовано

так я думаю проще будет

 

Show Reward Mini Mod v1.03

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

@ted.80 , заработало! Благо в ридми к этому минимоду есть разъяснение.

Оказывается, в одной строке у меня использовался метод, который в патче 1.0005 и выше имеет другой формат. А так как я брал готовое решение из мода АМК 1.4.1, который под патч 1.0004, то оно и не работало.

Подозреваю, что награда инфой за квест даёт вылет по схожей причине...

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

ChatGPT после некоторого обучения выдал мне рабочий скрипт отображения иконками на карте оружия... Теперь пытаюсь добавить в исключения оружие в инвентаре NPC и ГГ.

  • Нравится 1
Ссылка на комментарий
  15.09.2024 в 12:00, Капрал Хикс сказал:

рабочий скрипт отображения иконками на карте оружия

 

Ну так поделись творением искусственного интеллекта - мы чай не тупее будем 

доработаем до удобоваримости

 

Поделюсь своим творением

 

local Dot = {
{"ammo","cheat_ammo_spot"},
{"medkit","cheat_medkit_spot"},
{"af_","cheat_af_spot"},
{"wpn_","cheat_wpn_spot"},
{"outfit","cheat_outfit_spot"}
}

function DelDot(obj)
	for k, v in pairs(Dot) do
		if level.map_has_object_spot(obj.id, v[2]) ~= 0 then
			for i = 1, level.map_has_object_spot(obj.id, v[2]) do
				level.map_remove_object_spot(obj.id, v[2])
			end
		end
	end
end

function Dots(obj)
	for k, v in pairs(Dot) do
		if string.find(obj:section_name(), v[1]) then
			if level.map_has_object_spot(obj.id, v[2]) == 0 then
				level.map_add_object_spot_ser(obj.id, v[2], game.translate_string(system_ini():r_string(obj:section_name(), "inv_name")))
			end
		end
	end
end

function ItemDot()
	for i = 1, 65534 do
		local obj = alife():object((i))
		if obj and obj.parent_id then
			if obj.parent_id == 65535 then
				Dots(obj)
			else
				DelDot(obj)
			end
		end
	end
end

 

Изменено пользователем ted.80
  • Полезно 2
Ссылка на комментарий
-- Функция для отображения оружия на земле на миникарте
function display_ground_weapons_on_minimap()
-- Радиус, в котором будет происходить поиск оружия на земле
local SEARCH_RADIUS = 20

-- Иконка-заглушка для оружия, если его иконка не определена
local default_weapon_icon = "info_npc_mapspot"

-- Таблица с иконками и названиями для разных типов оружия
local weapon_info = {
    ["wpn_ak74"] = {icon = "info_npc_mapspot", name = "wpn-ak74"},      -- АК-74
    ["wpn_lr300"] = {icon = "info_npc_mapspot", name = "wpn-lr300"},    -- LR300
    ["wpn_abakan"] = {icon = "info_npc_mapspot", name = "wpn-abakan"},  -- Абакан
    ["wpn_svd"] = {icon = "info_npc_mapspot", name = "wpn-svd"},        -- СВД
    ["wpn_rpg7"] = {icon = "info_npc_mapspot", name = "wpn-rpg7"},      -- РПГ-7
    -- Добавить другие виды оружия и иконки при необходимости
}

    -- Иконки выше  ставить свои, я их сейчас дорисовываю.
    -- Получаем главного персонажа (игрока) через db.actor
    local actor = db.actor

    -- Перебираем все объекты на текущей карте (в видимой зоне)
    for id = 1, 65535 do
        local obj = level.object_by_id(id)
        if obj then
            -- Проверяем, что объект является оружием и находится в радиусе 20 метров от игрока
            if obj:section():find("wpn_") and actor:position():distance_to(obj:position()) <= SEARCH_RADIUS then
                -- Получаем данные для этого оружия из таблицы
                local weapon_data = weapon_info[obj:section()]
                local weapon_icon = weapon_data and weapon_data.icon or default_weapon_icon
                local weapon_name = weapon_data and weapon_data.name or "unknown_weapon"

                -- Отображаем иконку и название оружия на миникарте
                level.map_add_object_spot(id, weapon_icon, weapon_name)
            end
        end
    end
end

function update()
    -- на апдейт в многострадальный bind_stalker.script: function actor_binder:update(delta): weap_show.update()
    -- Каждый игровой кадр обновляем отображение оружия на миникарте
    display_ground_weapons_on_minimap()
end

 

  • Полезно 2
  • Жуть! 1
Ссылка на комментарий

Избыток ручного ввода. Заголовки секций и перевод названий можно получить из конфигов каждого объекта, а название метки построить по шаблону вроде "section_mapspot" и выбросить всю таблицу weapon_info – вручную останется только создать однотипные описания меток "wpn_name_mapspot" в XML-файле.

Вместо перебора можно привязать создание/удаление меток к сбросу/поднятию оружия на стороне ГГ и сбросу из инвентаря NPC в [death_manager.script].

  • Нравится 1
  • Полезно 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@mole venomous , согласен. Но пока на пробу сделал как на ум пришло:).

@Norman Eisenherz , в целом ход мыслей понял, упростим... По последнему пункту: как быть с оружием, которое не выбрасывалось НПС или ГГ, а мирно себе лежит в олл.спавне/скриптом заспавнено в начале игры?

Ссылка на комментарий
  16.09.2024 в 13:43, Капрал Хикс сказал:

а мирно себе лежит в олл.спавне/скриптом заспавнено в начале игры?

 

Ну так для него и сделай перебор - только по какому либо условию, а не на апдейте

 

@Norman Eisenherz 

Вместо перебора можно привязать создание/удаление меток к сбросу/поднятию оружия на стороне ГГ и сбросу из инвентаря NPC в [death_manager.script].

Изменено пользователем ted.80
Ссылка на комментарий
  16.09.2024 в 14:25, ted.80 сказал:

только по какому либо условию, а не на апдейте

Ну вот на ум ничего не приходит. Как ещё проверить кроме перебора оружие в радиусе...

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

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

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

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

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

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

Войти

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

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

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