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

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

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

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/

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

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

 

Show Reward Mini Mod v1.03

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

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

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

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

  • Нравится 1

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

  • Нравится 1
5 часов назад, Капрал Хикс сказал:

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

 

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

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

 

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

 

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

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

Шпаргалка

Ну перебор всех объектов на постоянном апдейте это что то вообще очень жесткое...

  • Нравится 1
  • Согласен 1

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

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

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

43 минуты назад, Капрал Хикс сказал:

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

 

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

 

@Norman Eisenherz 

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

Изменено пользователем ted.80
3 часа назад, ted.80 сказал:

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

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

Привет, сталкеры!

Есть такие зомби, которые образуются из гниющих трупов сталкеров. Их section =  zombie_trup_fc.

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

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

Или же не касаясь зомби, а вообще, как узнать, в каком состоянии движения (стоИт, идёт, бежит) находится монстр? 

Платформа ОП 2.2. 

Спасибо за внимание!

С чем связана такая ошибка при ликвидации нпс? 

\death_manager.script:135: bad argument #1 to 'pairs' (table expected, got nil)

 

Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится.

img.php?nick=Balavnik&sert=2&text=t6

@Balavnik , попробую погадать на кофейной гуще. У тебя платформа ТЧ, скрипт оригинальный. Тогда вылет связан с тем, что группировка непися не добавлена в death_manager.script, либо не прописана в конфигах death_manager'a.

  • Нравится 4
  • Смешно 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

30.09.2024 в 17:21, phalcor сказал:

как в скрипте определить, находится ли такой зомбарь в спячке или же он уже активен и ходит.

Сам себе отвечаю. Нашёл неожиданное решение узнать, стоит или лежит зомбак:

local dist = cobj:bone_position("bip01_head").y - cobj:position().y --высота головы над землёй
if dist < 0.2 then --лежит
  ...

 

Жаль, так и не нашёл прямого метода узнать положение тела монстра - всякие body_state и т.д. ничего не дали...

  • Нравится 2

Есть анимация fake_death, но не знаю, можно ли ее достать скриптами.

  • Полезно 1

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

Шпаргалка

Какие параметры существуют у объекта self в bind_monsters? Хочу вытащить из него секцию, self.section равен nil.

 Платформа SoC.

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

Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится.

img.php?nick=Balavnik&sert=2&text=t6

self.object – объект (мутант), для которого сработал вызов какого-то события (спавн, удаление, апдейт)

self.object:section() – секция мутанта, который обсчитывается в данный момент

  • Согласен 1
  • Полезно 1

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

Шпаргалка

Смотрю в скрипт sound_theme.script...

В чём разница между:

ph_snd_themes["gar_bandits_seryi"] =   {[[characters_voice\scenario\garbage\grey_bandit_1]],
                    [[characters_voice\scenario\garbage\grey_bandit_2]],
                    [[characters_voice\scenario\garbage\grey_bandit_3]],
                    [[characters_voice\scenario\garbage\grey_bandit_4]],
                    [[characters_voice\scenario\garbage\grey_bandit_5]]}

и

ph_snd_themes["gar_bandits_seryi"] =   {"characters_voice\\scenario\\garbage\\grey_bandit_1",
                                        "characters_voice\\scenario\\garbage\\grey_bandit_2",
                                        "characters_voice\\scenario\\garbage\\grey_bandit_3",
                                        "characters_voice\\scenario\\garbage\\grey_bandit_4",
                                        "characters_voice\\scenario\\garbage\\grey_bandit_5"}

?

В первом случае это так оно закомментировано как неиспользуемое что ли?

@Капрал Хикс [[ ]]Вроде бы означает игнорирование экранирования и системных символов.

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

Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится.

img.php?nick=Balavnik&sert=2&text=t6

Это запись "простой текст". Без двойных скобок одинарный слэш будет "съеден" при чтении.

  • Согласен 1
  • Полезно 2

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

Шпаргалка

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

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

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

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

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

Войти

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

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

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