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

Скриптование


Svoboда

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

KitkaT.Net, ссылку на статью скинь.

И НПС в гулаг не телепортируются. Где заспавнил там и появились, а если НПС на Свалке вписать гулаг на Кордоне, то он ножками туда пойдёт, в этом можно убедиться, если поставить на него метку.

Поделиться этим сообщением


Ссылка на сообщение

Кстати, хороший вопрос...

Как в ТЧ отследить вхождение в рестриктор НПС? Не какого-то конкретного, а любого.

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

Поделиться этим сообщением


Ссылка на сообщение

Daniar299

Скриптовый спавн перехода, вот здесь: >>Click Me<<, третий пост.

Скриптовый спавн вообще, вот здесь: >>Click Me<<

поделитель пожалуйста файлами чужих
Во-первых, это что вообще такое?

Во-вторых, с подобными вопросами сюда: "Ищу файлы / моды / аддоны"

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

Поделиться этим сообщением


Ссылка на сообщение

Tris, жаль, что не помогло тебе, потому что мне помогло.

Неужели так сложно заглянуть в lua_help.script, что и предлагал Artos, и посмотреть методы для класса sound_object?

Раз уж так одолевает лень, то вот он, класс:

C++ class sound_object {
    const looped = 1;
    const s2d = 2;
    const s3d = 0;

    property frequency;
    property max_distance;
    property min_distance;
    property volume;

    sound_object (string);
    sound_object (string, enum ESoundTypes);

    function set_position(const vector&);
    function stop_deffered();
    function get_position() const;
    function play_no_feedback(game_object*, number, number, vector, number);
    function play_at_pos(game_object*, const vector&);
    function play_at_pos(game_object*, const vector&, number);
    function play_at_pos(game_object*, const vector&, number, number);
    function stop();
    function length();
    function play(game_object*);
    function play(game_object*, number);
    function play(game_object*, number, number);
    function playing() const;
};

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

Удачи!

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

Поделиться этим сообщением


Ссылка на сообщение

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

А вообще - нет. Если НПС находится под логикой walkerа и стоит он на одной точке, то точка look обязательна.

Если же он будет ходить по "кругу" из нескольких точек, то можно и не прописывать. По умолчанию, точка взгляда будет следующая точка пути.

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

Поделиться этим сообщением


Ссылка на сообщение

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

 

Daniar299, функция спавн монстра ничем не отличается от спавна того же НПС или же какого-нибудь предмета. Примеры тебе предоставили разработчики в оригинальных файлах. Вооружаешься поиском по словам (выбрать есть из чего) и вперёд на фронт в геймдату.

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

Поделиться этим сообщением


Ссылка на сообщение

Daniar299, если прочитать твои два поста, то становится очень не понятно чего тебе нужно.

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

Ещё раз повторюсь: функция спавна монстра ничем не отличается от функции спавна НПС, что там, что там тебе нужно прописать секцию и координаты.

Если тебе нужно заспавнить моба через all.spawn, то распаковавши его, скопируй похожую, измени номер секции спавна, поправь имя и координаты, и будет тебе счастье.

Туторов тьма-тьмущая. Открой хотя бы тот же Stalkerin и изучай.

Поделиться этим сообщением


Ссылка на сообщение

Tris

Да и вообще, зачем эти громоздкие конструкции с if ... end? Вот тебе твой же код, только гораздо проще и легче:

function object_eat(obj)
    local sect = obj:section()
    if db.actor:has_info("wpn_porshein") then
        db.actor:disable_info_portion("wpn_porshein")
        iTimer = nil
        db.actor:restore_weapon()
    end
    if  sect == "medkit" or sect == "medkit_army" or sect == "medkit_scientic" then
        db.actor:hide_weapon()
        random_time()
    end
end  
          
function random_time()
    local random_table_function = math.random(1,5)
    iTimer = time_global() + (3+2*random_table_function)*1000
    db.actor:give_info_portion("wpn_porshein")
end



function Timer_N_minutes()
    if iTimer and iTimer < time_global() then 
        iTimer = nil 
        db.actor:disable_info_portion("wpn_porshein")
        db.actor:restore_weapon()
    end
end

Нету кучи проверок, не нужно никаких инициализаций, переменная iTimer принимает нужное тебе значение, в зависимости от того, что тебе выдаст random.

Поделиться этим сообщением


Ссылка на сообщение

Ребята, поймал ступор...

На Волке проверяю простенький диалог актора из последовательности фраз, без ветвления и каких либо условий на появление диалога/фразы. Собственно вот такой:

<dialog id="test_dialog">
    <phrase_list>
        <phrase id="0">
            <text>Hello, Wolf!</text>
            <next>1</next>
        </phrase>
        <phrase id="1">
            <text>Hello, Shooter! What do you want?</text>
            <next>2</next>
        </phrase>
        <phrase id="2">
            <text>I conduct an experiment.</text>
            <next>3</next>
        </phrase>
        <phrase id="3">
            <text>Ok! What we do?</text>
            <next>4</next>
        </phrase>
        <phrase id="4">
            <text>Now I call the function, then    you. I'm, now    you!</text>
            <action>escape_dialog.my_phrase</action>
            <next>5</next>
        </phrase>
        <phrase id="5">
            <text>Ok, calling.</text>
            <action>escape_dialog.my_phrase</action>
            <next>6</next>
        </phrase>
        <phrase id="6">
            <text>Nice, thank you.</text>
            <next>7</next>
        </phrase>
        <phrase id="7">
            <text>Not at all! Come on, if that.</text>
            <action>dialogs.break_dialog</action>
        </phrase>
    </phrase_list>
</dialog>

В двух фразах ставлю простенькие проверки:

function my_phrase(first_speaker, second_speaker)
    log1("my_phrase function")
    local obj_npc
    if first_speaker:id() == -1 then
        obj_npc = second_speaker
        log1("Actor is first_speaker.")
    else
        obj_npc = first_speaker
        log1("Actor is second_speaker.")
    end
end

function wolf_phrase(first_speaker, second_speaker)
    log1("wolf_phrase function")
    local obj_npc
    if first_speaker:id() == -1 then
        obj_npc = second_speaker
        log1("Actor is first_speaker.")
    else
        obj_npc = first_speaker
        log1("Actor is second_speaker.")
    end
end

Т.е. как видно функции идентичны, разное лишь название. Обратите внимание, что первую функцию я вызываю из реплики ГГ, вторую из реплики Волка. Вопрос: почему у меня в консоле вот такое:

my_phrase function
Actor is second_speaker.

wolf_phrase function
Actor is second_speaker.

Почему в обоих случаях, актор является second_speaker?

P.S. log1 использую из X-Ray extension, в качестве нормального вывода в лог.

 

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

To strong...

Загляни вот в этот пост: пост #100, думаю тебя заинтересует.

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

Поделиться этим сообщением


Ссылка на сообщение

Тема подверглась изменениям. Все нововведения в "шапке".

ColR_iT

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

Поделиться этим сообщением


Ссылка на сообщение
Сообщение от модератора ColR_iT
Вопрос Viнt@rь и всю суть перенёс в соответствующую тему: [CoP] Ковыряемся в файлах, подобным вопросам там самое место, здесь же без кодов делать нечего...

Поделиться этим сообщением


Ссылка на сообщение

Artos, извиняюсь за 5 копеек, но боюсь, что Вы оба думаете о разных вещах.

Осмелюсь предположить, что AndreySol, хочет именно вкл/выкл фонарик и именно скриптами. Я приблизительно догадываюсь для чего это вообще нужно - батарейки для фонаря, так ведь, AndreySol? :)

Если не ошибаюсь, то фонарик принадлежит классу CTorch, если это так, то набор методов для него скудный и метода вкл/выкл я там не наблюдаю...

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

Поделиться этим сообщением


Ссылка на сообщение

Боягуз, а что мешает сделать аналогично? Впиши весь спавн в одину функцию, а затем в начале игры вызови её.

 

Умный_колобок

После фразы, вызываешь функцию, которая будет спавнить бутылку водки актору и он тут же её будет выпивать.

Спавн делаешь функцией:

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

"Употребить" водку можно функцией:

db.actor:eat("vodka")

Условия составляешь сам, как тебе нужно.

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

Поделиться этим сообщением


Ссылка на сообщение

Боягуз, задание "Убить Стрелка" выдаётся через инфопорцию storyline_actor_start, которую актор получает в начале игры. Допиши к выдачи задания и вызов функции при помощи тегов <action></action>.

P.S. Вопрос уже уходит от смысла темы, думаю будет уместным переместится в "ковырялку".

 

[spoiler=To Whisper]Твой вопрос был перемещён в "ковырялку", где ему место.

 

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

Поделиться этим сообщением


Ссылка на сообщение

olaf1

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

Есть такая поговорка - "Изобретать велосипед", думаю, не стоит объяснять смысл этой фразы...

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

В игре присутствует респавн НПС после их смерти. Да, в большей степени это реализовано для гулагов, но что мешает использовать их?

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

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

P.S. В дальнейшем пишите, пожалуйста, ваши вопросы на родном вам языке под одним спойлером, а также перевод на русский язык под другим спойлером, как в данном случае сделал я.

Благодарю за понимание.

It's not that you are allowing a lot of mistakes when writing text, and that this text is very difficult to read and thus to understand exactly what you need, almost impossible. I originally asked you to write in their native language you on how you use in everyday life. But even this is not a problem.

There is a saying - "Re-invent the wheel", I think it is not necessary to explain the meaning of this phrase...

So you're trying to reproduce what did the developers and what are all well.

The game has NPC respawn after their death. Yes, to a greater extent it is implemented for the gulags, but what prevents you from using them?

If this is a good reason and the only solution is to use the NPCs with their own logic, then Gun12 in his latest report gave possibly the only correct decision on what you need.

And the last one. A foreign visitor to us is good, but there are rules on the forum, one of which states that it is necessary to comply with the rules of spelling and this applies not only to the Russian language, but also to all others in which users write. Therefore, I urge you to write correctly, otherwise I will have to punish you according to prescribed rules.

P.S. In the future, please write your questions in their native language, you are under a spoiler, as well as the Russian translation of a different spoiler, as in this case I did.

Thank you for your understanding.

 

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

Поделиться этим сообщением


Ссылка на сообщение

panzyuza, я конечно не очень понимаю для чего тебе понадобилась новая схема для space_restrictorов, поскольку при помощи уже существующих схем и функций, можно осуществить задуманное, если я правильно понял предназначение.

Хоть и не в тему, но позволь дать один небольшой совет...

Метод play_sounds уж больно у тебя громоздкий и достаточно расточительный. Все твои проверки можно уместить в две строки:

function action_poltergeist:play_sounds()
    local sSound = [[ambient\under\fear_sound_0]]..math.random(8)
    ogse.PlaySound(sSound)
end

При одном маленьком условии: переименуй название твоих .ogg файлов эквивалентно следующей таблице:

[[ambient\under\fear_sound_25]]       -> [[fear_sound_00]]
[[ambient\under\fear_sound_10]]       -> [[fear_sound_01]]
[[ambient\under\fear_sound_2]]        -> [[fear_sound_02]]
[[ambient\under\fear_sound_7]]        -> [[fear_sound_03]]
[[ambient\under\fear_sound_9]]        -> [[fear_sound_04]]
[[ambient\under\fear_sound_16]]       -> [[fear_sound_05]]
[[ambient\under\fear_sound_20]]       -> [[fear_sound_06]]
[[ambient\under\fear_sound_24]]       -> [[fear_sound_07]]
[[ambient\ugrnd\ugrnd_whispers_2]]    -> [[fear_sound_08]]

Ну и положи их в одну папку.

P.S. Кстати, в твоём случае файл fear_sound_25, никогда проигрываться не будет, поскольку ниже по коду его "затрёт" один из вариантов.

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

Поделиться этим сообщением


Ссылка на сообщение

Кто подскажет, что это за метод такой чудный - play_no_feedback, у класса sound_object, что при его использовании метод playing, этого же класса, всегда возвращает false, хотя я отчётливо слышу в наушник, как звук проигрывается?

И вообще для чего у него аж пять аргументов? В принципе, первый, второй и пятый более менее понятны, а вот остальные для чего?

Ну и вдогонку по классу sound_object...

Совсем непонятны свойство frequency и метод stop_deffered. У кого какие мысли на счёт них?

Поделиться этим сообщением


Ссылка на сообщение

Artos, не очень понял твои слова об "обратной связи".

Вот код:

if hud:GetCustomStatic("main_task") then
    --# Определим объект и что будем играть
    local snd_obj = xr_sound.get_safe_sound_object([[detectors\bomb_timer]])
    --# Затычка запуска один раз
    if varible == 0 then
        --# Играем звук
        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1)
        --# "Затыкаем"
        varible = varible + 1
    end
    get_console():execute("load ~~~ Playing is "..tostring(snd_obj:playing()))
end

Висит на апдейте актора. Зажимаю Tab - в консоле только false. Если для проигрывания использую метод play:

snd_obj:play(db.actor, 0, sound_object.s2d)

То пока звук играет выводит true. Так задумано?

Поделиться этим сообщением


Ссылка на сообщение
_Призрак_, а чем плох метод перевода схемы рестриктора в nil? Их апдейты при этом не работают, схемы - подавно, висят себе в сохранениях... Изменено пользователем ColR_iT

Поделиться этим сообщением


Ссылка на сообщение

Tris, свойства для объектов класса game_object работают несколько иначе.

Вот такой код:

local actor_radiation = db.actor.radiation

присвоит переменной actor_radiation текущее значение радиации. А вот такой:

db.actor.radiation = 0.1

увеличит текущее значение на 0.1 (отрицательное значение уменьшает текущие значение).

Поэтому ты в своём коде к текущему значению радиации прибавляешь ещё столько же плюс 0.00001 (ты вероятно точку не там поставил).

Всё это справедливо для всех свойств: health (здоровье), morale (мораль), power (выносливость), psy_health (пси-звдоровье), radiation (радиация), bleeding (кровотечение, только в ЗП).

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

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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