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

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

Тема для обсуждения скриптов всего и всех в серии игр 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
Ссылка на комментарий

sapsan,

косяков может быть два: исправимый и неисправимый =)

Исправимый. Если в цитате показано всё, что есть в биндере, то там не хватает ещё прописывания колбека (скорее всего должно быть в __init). Типа такого:

self.object:set_callback(callback.hit, self.hit_callback, self)

и потом ещё не забыть его отписать.

 

Без этого метод inventory_box_binder:hit_callback останется просто методом.

 

Неисправимый. Однако, если ящик не генерирует колбек на хит, то это не поможет (и скриптами никак это не решить). Как например для актора. Всем бы хотелось, чтобы для актора ловился хит, но вот нету.

 

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий
Министр, в том то и дело, что работает правильно... в СГМ всё замечательно, НПС выдает предмет, а в оригинале с теми же строчками (я уже из СГМ строчки скопировал) НПС выдаёт деньги вместо предмета. Изменено пользователем Серый Волк
Ссылка на комментарий

gruber, sapsan,

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

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

gruber, malandrinus, мысли о нематериальности тайников были, но надежда держалась до последнего...

 

Другой вопрос - как красиво поймать атаку монстра на актора ?

Ссылка на комментарий
Другой вопрос - как красиво поймать атаку монстра на актора ?

можно попробовать в апдейте монстра получать best_enemy и текущую анимацию. когда best_enemy актор и анимация атакующая - вот она и атака на монстра. Но не очень красиво :)

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

sapsan

http://www.amk-team.ru/forum/index.php?showtopic=10244

Схроны теперь имеют физическую оболочку,
и так далее... Изменено пользователем 7.9

всё легко

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

7.9,

Сделано наложением дополнительного физического объекта, который и реагирует на хит.

 

Хороший подход. Задачу в общем-то решает.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Возникла задача: как сделать ограничение на количество появлений какого-либо диалога? Чтоб диалог появился, например, 8 раз, а на девятый - не появился? На форуме нашел пару вопросов по этому поводу, но ответов не нашел. Поэтому решил придумать сам. Решение движковое, на поршнях, нетпакет не используется.

Сначала общий код (описано на базе Народной Солянки):

 

В dialogs.script ставим это:

-- счетчик количества вызовов диалога. Возвращает count раз true, затем false. 
-- должны быть прописаны поршни: "portion1, portion2...portion|Count|)" 
function dialog_count(portion, count)
    local pname = ""
    for i=1,count do
        pname = portion..tostring(i)
        if not has_alife_info(pname) then 
            db.actor:give_info_portion(pname)
            return true
        end
    end
    return false
end
-- проверка лимита. возвращает true если все поршни выданы.
function dialog_is_enough(portion, count)
    local pname = ""
    for i=1,count do
        pname = portion..tostring(i)
        if not has_alife_info(pname) then
            return false
        end
    end
    return true
end

В любой stable ставим это:

<string id="dialog_is_enough">
  <text>К сожалению, больше я тебе ничем помочь не могу.</text>
</string>

Эта фраза будет выдаваться вместо всех ограниченных диалогов, когда они будет выданы нужное число раз.

 

Далее привязка к конкретному персу. Например, сделаем так, чтобы диалог обмена у Ворона появился только 8 раз. Для этого добавляем в указанные файлы следующее:

 

info_wawka_way:

    <info_portion id="trade_voron_enough1"></info_portion>
    <info_portion id="trade_voron_enough2"></info_portion>
    <info_portion id="trade_voron_enough3"></info_portion>
    <info_portion id="trade_voron_enough4"></info_portion>
    <info_portion id="trade_voron_enough5"></info_portion>
    <info_portion id="trade_voron_enough6"></info_portion>
    <info_portion id="trade_voron_enough7"></info_portion>
    <info_portion id="trade_voron_enough8"></info_portion>

wawka_dialog:

function trade_voron_not_enough()
    return not dialogs.dialog_is_enough("trade_voron_enough",8)
end
function trade_voron_enough()
    return dialogs.dialog_is_enough("trade_voron_enough",8)
end
function trade_voron_count()
    return dialogs.dialog_count("trade_voron_enough",8)
end

dialogs_wawka, изменяем диалог следующим образом:

<dialog id="trade_dialog_voron"> 
        <phrase_list>
<!-- лимит диалогов. добавлена фраза 1000 и прекондишины на вызов dialog_is_(not)_enough во фразе 1 и 1000. торговля сработает 8 раз -->
            <phrase id="0">
                <text>trade_dialog_voron_0</text>
                <next>1</next>
                <next>1000</next>
            </phrase>
            <phrase id="1">
                <precondition>wawka_dialog.trade_voron_not_enough</precondition>
                <text>trade_dialog_voron_1</text>
                <give_info>price_voron</give_info>
                <next>2</next>
                <next>3</next>
            </phrase>
            <phrase id="1000">
                <precondition>wawka_dialog.trade_voron_enough</precondition>
                <text>dialog_is_enough</text>
            </phrase>

Далее, во все фразы, которые, по нашей задумке, влияют на количесво появлений диалога, в конце фразы вставляем сделующий код:

<action>wawka_dialog.trade_voron_count</action>

Т.е. должно получиться примерно следующее:

            <phrase id="221">
            <precondition>wawka_dialog.psevdo_tails_have</precondition>
                <text>trade_dialog_voron_221</text>
                <action>wawka_dialog.give_psevdo_tails</action>
                <action>wawka_dialog.add_ammo_12x70_buck</action>
                <action>wawka_dialog.trade_voron_count</action>
            </phrase>
            <phrase id="2211">
            <precondition>wawka_dialog.psevdo_tails_have</precondition>
                <text>trade_dialog_voron_2211</text>
                <action>wawka_dialog.give_psevdo_tails</action>
                <action>wawka_dialog.add_ammo_12x76_zhekan</action>
                <action>wawka_dialog.trade_voron_count</action>
            </phrase>
            <phrase id="2212">
            <precondition>wawka_dialog.psevdo_tails_have</precondition>
                <text>trade_dialog_voron_2212</text>
                <action>wawka_dialog.give_psevdo_tails</action>
                <action>wawka_dialog.add_ammo_12x76_dart</action>
                <action>wawka_dialog.trade_voron_count</action>
            </phrase>

Эта команда вызывает счетчик. При этом, вызов счетчика можно включать не в каждую фразу, таким образом получая, что не все обмены становятся ограниченными. Например, можно включить счетчик только в обмен патронов, а в обмен оружия и канистр не включать. Тогда канистры и оружие будут меняться неограниченное количество раз, а патроны - только 8 раз. Если нужно изменить количество - меняем количество поршней и цифру 8 на нужную нам, и все. :grin2:

 

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

 

Пользуйтесь на здоровье :rolleyes: rolleyes:

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

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

 

if (surge_manager.get_surge_manager()=="started") then
 

Поправьте, если ошибаюсь.

 

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

народ дайте кто нибудь любую логику path_walk и path_look из алл.спавна от Зова, а то у меня нет времени для распаковки(давать от Затона)

Не соответствует. N6260

Ссылка на комментарий
[zat_a1_actor_start_game_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = 250.414016723633,18.2857513427734,528.658752441406
p0:game_vertex_id = 292
p0:level_vertex_id = 1395112


[zat_a1_actor_start_game_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = 258.208831787109,19.5830554962158,548.210571289063
p0:game_vertex_id = 292
p0:level_vertex_id = 1408873

87728-stalker.gif
Ссылка на комментарий

Народ, а никто так и не нашел как можно спавнить НПСей через скрипт ,не при старте,на ЗП?? а то старая команда alife():create(и т.д.) так и не работает, кроме как танцев с бубном вокруг бинд_сталкера...

Не соответствует. N6260

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

ZeeK,

В смысле не работает? Ничего там не изменилось с предыдущих версий.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий
malandrinus Изменилось-теперь такой командой невозможно заспавнить НПСя во время диалога, только можно при старте игры...

Не соответствует. N6260

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

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

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

ZeeK, простите , но это бред.

Покажите функцию и как вы вызываете скрипт.

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

меченый(стрелок)

в диалоге:

<action>dialogs_mod_zaton.spawn_zat_test_stalker</action>

 

в dialogs_mod_zaton

function spawn_zat_test_stalker(first_speaker, second_speaker)

alife():create("zat_test_stalker",vector():set(247.47088623047,17.520904541016,519.91467285156),1390089,6)

end

 

В результате можно заспавнить все что угодно, но не НПС

ФеНиКс хм попробую, а ты спавннил в ЗП?

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

Не соответствует. N6260

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

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

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

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

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

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

Войти

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

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

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