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

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

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

@Norman Eisenherz , да, всё верно, прошу прощения, не в те исходники смотрел.

Судя по всему, там должно быть 12 текстур в этом режиме: (_d, _t, _e, _h) + (_e, _b, _back). Но у тебя не работает так. Странно..

 

В оригинале ЗП это, кстати, используется:

 

 <btn_second_task x="52" y="132" width="120" height="19" hint="ui_show_second_task_wnd" frame_mode="1">

  <window_name>btn_second_task</window_name>

        <texture_e>ui_inGame2_pda_missionlist_button_e</texture_e>

        <texture_t>ui_inGame2_pda_missionlist_button_ht</texture_t>

        <texture_h>ui_inGame2_pda_missionlist_button_ht</texture_h>

        <text align="c" vert_align="c" x="0" y="0" width="120" height="19" font="letterica16">missions_list</text>

        <text_color>

            <t r="255" g="255" b="255"/>

            <d r="255" g="255" b="255"/>

            <e r="200" g="200" b="200"/>

            <h r="170" g="170" b="170"/>

        </text_color>

 </btn_second_task>

 

И описание текстур:

 

     <texture id="ui_inGame2_pda_missionlist_button_e_b" x="30" y="71" width="15" height="19" />

     <texture id="ui_inGame2_pda_missionlist_button_e_back" x="45" y="71" width="1" height="19" />

     <texture id="ui_inGame2_pda_missionlist_button_e_e" x="45" y="71" width="15" height="19" />

 

     <texture id="ui_inGame2_pda_missionlist_button_ht_b" x="104" y="71" width="15" height="19" />

     <texture id="ui_inGame2_pda_missionlist_button_ht_back" x="119" y="71" width="1" height="19" />

     <texture id="ui_inGame2_pda_missionlist_button_ht_e" x="119" y="71" width="15" height="19" />

 

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

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

naxac.gif

@naxac Подставил ссылку на имеющийся вариант кнопки – вылет. Разделил эту же кнопку на 12 текстур (+d + h/t отдельно) – выводится. Осталось понять, что было не так в первом эксперименте…

Ну, может кому пригодится:

• в обозначениях частей нельзя использовать верхний регистр (пример с кнопкой ui_inGame2_pda_button из того же файла [ui_actor_pda] – мусор из старых версий);

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

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

Шпаргалка

@AndreySol Делаю некую систему повреждения конечностей. И к примеру когда повреждены ноги хочу заблокировать бег.

2 минуты назад, I am Dead сказал(а):

когда повреждены ноги хочу заблокировать бег

можно просто заблокировать спринт

Есть мод "Перелом ног". Не юзал, но по описанию  там правки движка из X-Ray extensions. Может что то перешло в ОГСР?

  • Спасибо 1

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

37 минут назад, I am Dead сказал(а):

хочу заблокировать бег

В этом движке есть методы condition.cant_spint_power_begin и condition.cant_spint_power_end

Если поставить

  get_actor_obj().condition.cant_spint_power_begin = 1
  get_actor_obj().condition.cant_spint_power_end   = 1

то актор перестанет бежать.

  • Полезно 1

@Manool То есть бег будет принудительно сбрасываться на шаг? И есть ли что то подобное для других состояний ? К примеру если нога очень сильно повреждена то гг даже ходить не сможет, а только в полный присяд( типо ползет ).

Изменено пользователем I am Dead
2 минуты назад, I am Dead сказал(а):

о есть бег будет принудительно сбрасываться на шаг?

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

3 минуты назад, I am Dead сказал(а):

И есть ли что то подобное для других состояний

  -- Блокировка шага актора
  get_actor_obj().condition.cant_walk_power_begin = 1
  get_actor_obj().condition.cant_walk_power_end   = 1

Кстати, все эти методы есть в lua_help к движку OGSR.

  • Спасибо 1

Привет всем.

Вопрос такой глупый:

Допускается ли такое оформление условий определяющих значение переменной?

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

if uslovie_1 then

var = 1

elseif uslovie_2 then

var = 2

end

function blablabla()

if tratata == true then

metod(var)

end

end

 

 

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

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

@I am Dead То есть выше просто объявить local var ?

Хм, надо будет потестировать, когда доберусь до компьютера.

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

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

Здрасьте.

Кто умеет читать C++, подскажите, что должен делать следующий код (платформа ЗП):

Spoiler

[xrGame\ui\UIComboBox.cpp]
void CUIComboBox::disable_id(int id)
{
    if(m_disabled.end()==std::find(m_disabled.begin(),m_disabled.end(),id))
        m_disabled.push_back(id);
}

void CUIComboBox::enable_id(int id)
{
    xr_vector<int>::iterator it = std::find(m_disabled.begin(),m_disabled.end(),id);

    if(m_disabled.end()!=it)
        m_disabled.erase(it);
}

 

 

Ожидаемый результат: отключение и обратное включение строки с заданным id в выпадающем списке CUIComboBox().
Видимый результат отсутствует: строка не удаляется и не становится неактивной, а методы CurrentID() и GetTextOf(id) дают старые значения при ее выборе.

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

Шпаргалка

@Norman Eisenherz , это работает только с комбо-боксами, используемыми для игровых опций. После disable/enable_id нужно вызвать SetCurrentOptValue - только там заполняется лист с проверкой по этому m_disabled.

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

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

naxac.gif

10 часов назад, Norman Eisenherz сказал(а):

Кто умеет читать C++

:rolleyes:

Добавляет / убирает id в список m_disabled. И собственно все, больше показанный код ничего не делает.

А этот m_disabled уже в свою очередь, используется...

36 минут назад, naxac сказал(а):

для игровых опций. После disable/enable_id нужно вызвать SetCurrentOptValue - только там заполняется лист с проверкой по этому m_disabled.

Но, никто не запрещает при желании, использовать этот же m_disabled где-нибудь еще и для чего-то более другого, для чего потребуется код свой написать.

  • Полезно 2

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

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

Господа, вопрос к знатокам логики нпс. 

1) Возможно ли в логике нпс вызвать скриптовую функцию? Например по сигналу. 

2) логику же можно переключать в зависимости от инфопорций. А можно переключать логику в зависимости от какого нибудь скриптового прекондишена, как это сделано в диалогах, например? 

@_Sk8_AsTeR_ ,

1) on_signal = sig_name| %=func%

Функция func должна находится в файле xr_effects.script. Если нужно передать в функцию аргументы, то так:

 on_signal = sig_name| %=func(arg1:arg2)%

Примеров в файлах игры море.

2) on_info = {=precond} new_section_logic

Функция precond должна находиться в файле xr_conditions.script. Примеров, опять же, хватает.

  • Спасибо 2
  • Согласен 2
  • Полезно 2

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

naxac.gif

Я тут снова по поводу боевой схемы БТРов... Немного, КМК, разобрался в её работе, в итоге в db.script:

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

 

creature = {} 
monster_stock  = {}

 

function add_obj( obj ) - корректно ли тут производится проверка и добавление сталкеров и монстров?
    if IsStalker(obj) then
        creature[obj:id()] = true
        monster_stock[obj:id()] = false
    elseif IsMonster(obj) then
        creature[obj:id()] = false
        monster_stock[obj:id()] = true
    end
end

 

function del_obj( obj )
    storage   [obj:id()] = nil
    if IsStalker(obj) or IsMonster(obj) then
        creature[obj:id()] = nil
    end
end

 

 

Собственно не очень красивая функция апдейта друзей и врагов в ph_car.script:

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

 

function action_car:update_friends_and_target()
        if self.st.fire_target == "monsters" then
                for k in pairs(db.monster_stock) do
            local obj = level.object_by_id(k)
                if obj and IsMonster(obj) and obj:alive() and self.car:IsObjectVisible(obj) then
                    self.target_obj = obj
                    self.state_firetarget = state_firetarget_enemy
                        end
                    end
                end

 

        if self.st.fire_target == "stalker_group" then

        --for a=1,65534,1 do
        --local obj = level.object_by_id(a)
                for k in pairs(db.creature) do
            local obj = level.object_by_id(k)

        if obj and IsStalker(obj) and obj:alive() and obj:character_community()=="stalker" and self.car:IsObjectVisible(obj) then
                    self.target_obj = obj
                    self.state_firetarget = state_firetarget_enemy
                        end
                    end
                end
end

 

 

По ней такой вопрос...

 if obj and IsMonster(obj) and obj:alive() and self.car:IsObjectVisible(obj) then

 if obj and IsStalker(obj) and obj:alive() and obj:character_community()=="stalker" and self.car:IsObjectVisible(obj) then

- тут вроде выделенные жирным проверки лишние? Ведь если объекты берутся из  for k in pairs(db.monster_stock) и  for k in pairs(db.creature) do, там же уже была соотв. проверка:

function add_obj( obj )
    if IsStalker(obj) then
        creature[obj:id()] = true
        monster_stock[obj:id()] = false
    elseif IsMonster(obj) then
        creature[obj:id()] = false
        monster_stock[obj:id()] = true
    end
end

 

Просьба не пинать :), хочу разобраться и сделать идеальный ph_car.script с рабочей боевой схемой и правками от переворачивания машин.

 

 

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

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

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

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

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

Войти

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

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

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