Скриптование - Страница 588 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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

Тема для обсуждения скриптов всего и всех в серии игр 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/
11 минут назад, Zander_driver сказал:

Я в чужие дела не лезу, хочет узнать - значит есть, зачем.   #Сидорович

 

12 минут назад, Zander_driver сказал:

если опираться на функционал оригинального движка

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

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

единственная возможность изменения содержимого инвентаря (если я ни чего не забыл) нпс это торговля с ГГ, поэтому я и посчитал данный вопрос 

всего лишь глупой хотелкой.

1 час назад, Okichi сказал:

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

Так то оно так. Но, если конечная цель является военной тайной вопрошающего, и не раскрывается ни при каких условиях, то что тут можно поделать?

Можно конечно устроить партизанский допрос с пристрастием :crazy2: Но, это немного затратно по времени. В конце концов, если бы это было важно, человек сам бы сказал.

2 часа назад, ted.80 сказал:

Я конечно дико извиняюсь, это какова язика синтоксис?

А еще можно выделить мой пост выше, и прочитать текст целиком, включая _невидимый_ :)

Одну "мину" нашел, возьми с полки пирожок. Их там было две.

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

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

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

@Zander_driver , ну, например - в данном случае полезно бы знать, является ли искомый предмет ( который надо найти в инвентаре непися ) - уником, или это снова "пачка патронов". Если это уник - совсем не надо цикл на 65 тыс, достаточно получить серверный объект этого уника ( по ид, по стори_айди, по имени, по хранимой переменной - как там он изначально определялся ) - и проверить ТОЛЬКО для него его текущего парента. 

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

След от кругов на воде - это тоже след (с)

8 часов назад, Zander_driver сказал:

Одну "мину" нашел, возьми с полки пирожок. Их там было две

Я и не искал - она сама мне прямо в глаз "попала" :23:

Это и правда было-бы весело - если бы не было печально, подавляющее большинство среднестатистических индивидуумов тупо скопирует твой "заминированный" код,

и не будет разбираться в синтаксисе и искать пасхалки, а будет сидеть и ныть в комментах "ни роботаит",

а если ему подскажут в чём трабл - ну или всё же сам допетрит - как ты думаешь что он с ним сделает?

!Правильно! - повесит на апдейт! и вся эта портянка будет перебирать 65к предметов за такт, и опять начнется "виснит", "логаит", "вылитаит", :dash3:

так что это тот ещё вопрос, под кого это мина заложена :WhiteVoid_2:, и восстанут "Юзвери" из пепла форумных ристалищ - и пойдут они строчить каменты на 3 страницы offтопа

 

  • Согласен 1

Есть у кого-нибудь схемы лута ящиков и разжигания костров неписями для ЗП? Или мб какая-нибудь статья где-то есть, посвящённая подобным темам. А то самому ума немного не хватает до конца разобраться со всем тем, что есть в xr_corpse_detection, чтобы по аналогии составлять скрипты для лута ящиков и т.д.

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

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


Вопрос по ОГСР движку. Как заставить ГГ достать бинокль? Добавил по аналогии как в НА7 -- в bind_stalker:

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

local slot_before_binoc    = -1

 

function actor_binder:on_key(dik)
    local bind = dik_to_bind(dik)
    xr_signals.on_event("key_press", key, bind)
    if key == bind_to_dik(key_bindings.kNA_USE_BINOC) then
    if self.object:active_slot() == 8 then
    self.object:activate_slot(slot_before_binoc)
    elseif self.object:item_in_slot(8) and self.object:item_in_slot(8):is_binoculars() then
    slot_before_binoc = db.actor:active_slot()
    self.object:activate_slot(8)
end
end
end

 

function actor_binder:on_mouse_wheel(vol)
    if level.main_input_receiver() then
        return
    end
    xr_signals.on_event("mouse_wheel", vol)

    if self.object:has_info("ui_inventory") then
        return
    end

    if self.object:has_info("ui_pda") then
        return
    end

    if self.object:active_slot() == 5 and vol > 0 then
        if self.object:item_in_slot(8) and self.object:item_in_slot(8):is_binoculars() then
            self.object:activate_slot(8)
        end
    elseif self.object:active_slot() == 8 and vol > 0 then
        if self.object:item_in_slot(5) and not self.object:zoom_mode() then
            self.object:activate_slot(5)
        end
    end
end

В external:

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

[custom_keyboard_action]
na_use_binoc=kNA_USE_BINOC

В ui_keybinding:

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

<command id="kb_na_use_binoc"        exe="na_use_binoc"/>

В игре назначил кнопку и результат 0.

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

Возможно в чистом ТЧ получить координаты точки, на которую нацелен/смотрит ГГ?

@Кекс в логику рестриктора функцию:

=set_squad_enemy_to_actor(id_сквада)

 

God save Hatsune Miku!

@Colder Чтож вы все пытаетесь игрока(т.е. живого человека) загнуть в ваши похотелки??? Ну всунешь ты ГГ бинокль скриптом в руки, что мешает игроку тут-же нажать назначенную клавишу другого снаряжения или колесико мыши крутнуть? В ЧЕМ смысл?

  • Согласен 1

Подозреваю, кат-сцену делают... где по сюжету ГГ должен бинокль достать, да еще наверное посмотреть в строго определенном направлении, чтобы там чего-то нужное увидеть.

Проще всё нужное в этом случае, отснять на видео, перегнать в формат интро-роликов игры, и уже это в игре запускать. По образу-подобию снов Стрелка после прохождения Х-18 и иже с ними.

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

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

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

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

@Zander_driver 

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

  • Согласен 2

Всем привет. Пытаюсь дать рандомный хит заспавненому предмету ГГ в рюкзак.

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

function parse_list_box(obj)

    local sec = obj:section()

    local ac = sys_ini:r_float_ex(sec, "amount_content")

    local at = sys_ini:r_string_ex(sec, "amount_target")


        if rand(100) < ac then

        if ini_pack:section_exist(at) then


        local n = ini_pack:line_count(at)

        local key = rand(0,n-1)

        local result, item, num = ini_pack:r_line(at, key, "", "")


        alife():create(item, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())


        item:set_condition((math.random(5)+15)/100) -- делаю так, получаю вылет

        local name = tostring(sys_ini:r_string(item, "inv_name_short"))

            axr_txt_tip.send_tip_attach("%c[d_cyan]"..gts("st_ui_package").." %c[ui_white]"..gts(name))

            return item, num

        end

    end

end

Можно ли вообще каким нибудь путём дать хит?

9 часов назад, Colder сказал:

Пытаюсь дать рандомный хит заспавненому предмету ГГ в рюкзак

Хит наносится так - 

Скрытый текст
	local h = hit()
	h.power = 0.3
	h.direction = vector():set(0, 0, 0)
	h.impulse = 0
	h.draftsman = db.actor
	h.type = hit.fire_wound
	obj:hit(h)  -- obj в данном случае клиентский объект, которому наносится хит

 

 item:set_condition((math.random(5)+15)/100)

Метод set_condition применяется к клиентским объектам. А в вашем случае item - это, скорее всего, строка, поэтому и вылет.

Изменено пользователем Manool
  • Спасибо 1
59 минут назад, Manool сказал:

А в вашем случае item - это, скорее всего, строка

Не скорее всего, а так и есть.

Опять же, надо помнить, что не все инвентарные предметы поддерживают изменение condition. Тут требуется уточнить у вопрошавшего, для какого предмета он эту операцию пытается проделать?

[ЗП 1.6.02]

Документы с завода и квестовый артефакт "Измененный изолятор" не обнаруживаются при переборе инвентаря – "ловится" только модуль памяти БПЛА. При обычном поиске for i = 0, db.actor:object_count() -1 видны все  квестовые предметы. В чем может быть причина?

Spoiler
-- триггер через расход бинта
	db.actor:inventory_for_each(
		function(item)
			if item:section():find("jup") then
				news_manager.send_tip(db.actor, item:section())
			end
		end
	)

 

 

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

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

Шпаргалка

При обыске мутантов получаю такую иконку: https://disk.yandex.ru/i/C7p9gpesomX2mQ Что я пишу не так?

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

function InterfeiceLoot:SetMutantImage()

    local killed_mutant_tbl =
    {
    snork                = {file="ui\\guide\\ui_actor_monsters_pda",x="393",y="200",special="0"},
    dog                = {file="ui\\guide\\ui_actor_monsters_pda_3",x="0",y="800",special="0"},
    pseudodog            = {file="ui\\guide\\ui_actor_monsters_pda",x="788",y="200",special="0"},
    psy_dog                = {file="ui\\guide\\ui_actor_monsters_pda",x="788",y="200",special="0"},
    poltergeist            = {file="ui\\guide\\ui_actor_monsters_pda_3",x="0",y="400",special="0"},
    bloodsucker            = {file="ui\\guide\\ui_actor_monsters_pda_3",x="393",y="400",special="0"},
    controller            = {file="ui\\guide\\ui_actor_monsters_pda_3",x="393",y="800",special="0"},
    chimera                = {file="ui\\guide\\ui_actor_monsters_pda_3",x="0",y="600",special="0"},
    tushkano            = {file="ui\\guide\\ui_actor_monsters_pda_3",x="0",y="0",special="0"},
    rat                = {file="ui\\guide\\ui_actor_monsters_pda_3",x="0",y="0",special="0"},
    flesh                = {file="ui\\guide\\ui_actor_monsters_pda_3",x="393",y="600",special="0"},
    burer                = {file="ui\\guide\\ui_actor_monsters_pda",x="0",y="0",special="0"},
    boar                = {file="ui\\guide\\ui_actor_monsters_pda",x="393",y="200",special="0"},
    giant                = {file="ui\\guide\\ui_actor_monsters_pda",x="0",y="200",special="0"},
    cat                = {file="ui\\guide\\ui_actor_monsters_pda_2",x="0",y="0",special="0"},
    fracture            = {file="ui\\guide\\ui_actor_monsters_pda_2",x="393",y="200",special="0"},
    zombie                = {file="ui\\guide\\ui_actor_monsters_pda_2",x="0",y="200",special="0"},
    }

    local mutant_id = sys_ini:r_string_ex(self.section,"species") or nil

    local mutant_f = "ui\\guide\\ui_actor_monsters_pda_3"
    local mutant_x = 0
    local mutant_y = 0

 

    mutant_f = tostring(killed_mutant_tbl[mutant_id].file)
    mutant_x = tostring(killed_mutant_tbl[mutant_id].x)
    mutant_y = tostring(killed_mutant_tbl[mutant_id].y)

    local x1 = mutant_x
    local y1 = mutant_y


    local mutant_width = 393
    local mutant_height = 200

    local x2 = x1 + mutant_width
    local y2 = y1 + mutant_height

 

    self.image = self.xml:InitStatic("form:image",self.form)
    self.image:InitTexture(tostring(mutant_f))
    self.image:SetOriginalRect(x1,y1,x2,y2)
end

Платформа ОГСР. Заранее спасибо.

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

Совсем уж новичковый, возможно, глупый вопрос: на стандартном движке зп есть ли скриптовая функция, позволяющая отыгрывать худовые анимации? 

Как сделать для НПС систему лута тайников/монстров/зажигания костров? Не особо что-то получается разобраться в оригинальном xr_corpse_detection.script. Как именно находится цель для НПС, и как его туда направить для дальнейших действий с этой целью? Мб кто подскажет, или есть какие посты на эту тему, не могу найти...

@ARTLantist , попробуй тут и тут почитать. Возможно, что-то покажется полезным. (для 2-ой ссылки прокси/vpn с российских ip)

  • Полезно 1

Как добавить костру надпись и сделать действия при нажатии клавиши действия? Пытался поставить скриптом надпись через self.object:set_tip_text, и вызывать коллбэк self.object:set_callback(callback.use_object, self.use_campfire, self), но ничего не вышло, костёр как не реагировал, так и не реагирует. Я так понял, это фишка рестрикторов. Хотелось бы сделать зажигание не через использование предмета рядом с костром, а через взаимодействие с самим костром :az1000106:

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

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

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

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

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

Войти

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

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

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