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

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


Svoboда

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

 

 

возможно ли получить значение общего количества патронов в инвентаре?

Если ты имеешь в виду движковую ф-цию, которая вернет тебе искомую цифру - такой нет.

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

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


Ссылка на сообщение
мне скриптом и надо. Можешь показать код?

Примерный шаблон(с использованием модуля нет-пакетов от Artos), дорабатывать - в зависимости от конкретных похотелок:

local get_ini = system_ini()
local ammo_total = 0
 
function CheckAllAmmo()
     local actor = db.actor
     if actor ~= nil then
          actor:iterate_inventory(check_inv_items, actor) -- ф-ция-итератор, о ней прочтешь в "Справочнике по ф-циям и классам" --
     end
 
     return ammo_total -- тута получишь искомую цифру --
end
 
function check_inv_items(actor, item)
     local section = item:section()
     if section then
          if get_ini:section_exist(section) and get_ini:line_exist(section, "class") then
               local item_class = get_ini:r_string_wq(section, "class")
               ----- тут сам разберись - выстрелы для подстволов у тебя будут как патроны или нет ??????????????? -----------------
               if (item_class == "AMMO") or (item_class == "A_VOG25") or (item_class == "A_M209") then
                    local num_in_box = get_ammo_count(item:id()) -- тута из нет-пакета получим реальное кол-во в реальной пачке --
                    if num_in_box then
                         ammo_total = ammo_total + num_in_box
                    end
               end
          end
     end
end
 
function get_ammo_count(obj_id)
     local se_obj = alife():object(obj_id)
     if se_obj then
          local packet = net_packet()
          cse_alife_item_ammo.STATE_Write(se_obj, packet)
          packet:r_seek(packet:w_tell() - 2)
 
          return packet:r_u16() -- кол-во боеприпаса в конкретной пачке --
     end
 
     return 0
end

 

 

 

Чуть не забыл - не забудь разрулить тему с наличием в инвентаре гаусс-боеприпасов.

Изменено пользователем UnLoaded
  • Спасибо 1

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


Ссылка на сообщение
Вы все ответили на его часть - как подсчитать патроны требуемые к стволам, которые есть у ГГ

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

 

 

Как создать тайник с запиской на следующий тайник (как в Коллекционере)?

Не играл в "Коллекционер", но к примеру можно вместе с лутом ложить в тайник саму записку. При использовании этой записки выводить информацию игроку с наводкой на следующий тайник.

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

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


Ссылка на сообщение
Несколько вопросов:

1) xr_motivator.script(а в нем класс motivator_binder) рулит сталкерами. А кто рулит монстрами?

 

2) какие рабочие кэллбэки есть для сталкеров?

В нет_спавн вижу:

 hit - это понятно

 death - это то же понятно

 use_object - это надеюсь то же понятно(этот кэллбэк удерживает непися при разговоре ГГ с ним?)

 sound - закомментирован, по обработчику вроде понятно, что связан с тем, что слышат неписи.

 extrapolate_callback - а вот этот о чем? Устанавливается не как вышеперечисленные, а через set_patrol_extrapolate_callback...

Это все что есть для сталкеров, или еще что-то имеется?

 

3) в death_callback есть вызов death_manager.drop_manager(self.object):create_release_item() - это запускает всю цепочку подчистки\доспавна лута, и с этим все понятно. Но и в update есть точно такой-же вызов. Если я правильно понял, в update это нужно для контроля сталкеров, которые уже мертвяки после очередной загрузки игры?

 

И еще, напомните - какая схема управляет подбором оружия сталкерами, и в каком скрипте прописана?

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


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

 

 

4. Схема называется gather_items, сама она находится в движке, в ЗП управляется через xr_gather_items.script

Я для ТЧ хотел бы знать. Там как?

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


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

 

 

возможно ты про can_select_item_rules, это в движке on_after_take если верно помню

Получается, подбор оружия неписями в ТЧ - это движковое? Я думал, что какая-то схема логики...

Такой момент: сценка с Юриком при входе на Свалку, с последующей помощью Бесу. У меня Юрик топает от места сценки к месту, где стоит Бес. Если возле Беса кинуть ствол, к примеру МР-5, то Юрик его подбирает. Но, в дальнейшей перестрелке с бандюками, его не использует. Не сложно было выяснить причину - ствол-то он подбирает, а патронов к нему у него нет. Для теста, сделал спавн ему нужных патронов, после их спавна Юрик сразу переключается на МР-5 и в последующей перестрелке исправно его использует.

Тут я подумал - на кой ПЫСы сделали подбор стволов, если их непись не будет использовать? Логично было сделать, при подборе ствола, сразу спавн подходящих боеприпасов. Думал, что этим схема рулит какая-то, потому и хотел ее найти, чтоб попробовать доделать спавн патронов. Но раз это движковое - то видно пока не судьба...

 

Р.S. Попытался сделать спавн патронов через добавление в motivator_binder кэллбэка on_item_take, вроде спавн получился, но сразу же наткнулся на грабли - вылеты при интенсивной боевке.

 

 

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


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

@TIGER_VLAD

А что, в игре есть деление на такие классы: пистолеты, ружья, автоматы, снайперское, тяжелое?

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


Ссылка на сообщение
прогресс-бар в ТЧ работает, конкретно вопрошающему необходим SetWndPos

Ну наверное ему нужно все-же SetProgressPos, если разговор о прогресс-баре.

 

Можно пример кода?

Ну примерно так:

local inv_main = level:main_input_receiver()
if inv_main then
     local inv_xml = CScriptXmlInit()
     inv_xml:ParseFile("какой-то_файл.xml") -- парсим файл с описанием элементов --
     local pb_new = inv_xml:InitProgressBar("конкретный_элемент", inv_main)
     pb_new:SetAutoDelete(true)
     pb_new:Show(true)
end

затем

pb_new:SetProgressPos(нужное значение)

какой-то_файл.xml создать по аналогии с другими в папке config\ui. Для прогресс-бара описание будет как-то так:

<конкретный_элемент x="445" y="349" width="140" height="4" horz="1" min="0" max="100" pos="0">
     <progress> <texture a="255" r="255" g="255" b="255">ui_scale_green_sect_horz</texture> </progress>
     <background> <texture a="80" r="255" g="255" b="255">ui_scale_green_sect_horz</texture> </background>
</конкретный_элемент>
Изменено пользователем UnLoaded
  • Спасибо 1

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


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

 

 

Если мы указываем позицию, то можно любой левел и гейм вертекс левела указать?

Уже много раз обсуждалось: при спавне объектов, движок использует гейм-вертекс - для идентификации уровня, на котором будем спавнить, и координаты - для размещения объекта. Левел-вертекс не имеет значения и похоже движком не используется\игнорируется. Соответственно, гейм-вертекс можно указать любой, относящийся к локации.

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


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

 

 

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

Вот это не понял напрочь: что означает "включенность" гейм-вертекса ? Хочу подробнее  :rolleyes: . Так-же - что такое вершины ? Другое название гейм-вертекса ? Почему ?

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


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

 

 

If distance == не предлагать. Если так поставить, то действие выполнятся не будет.

С чего бы это ?

Если у тебя в кармане 10руб(монетой) - то условие "if в_кармане == 10 then" не должно выполняться ?

Ищи ошибку у себя в проверках\условиях, причем достаточно тупую(это без оскорблений, просто так оно и есть)...

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


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

 

 

здесь есть не понимание принципов работы с подобными величинами.

Ради бога, проясни не понимающим... Будем только рады...

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


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

 

 

Юзаю простейшим образом: on_timer = value | ...

Загляни в скрипт xr_logic, там увидишь, что этот самый on_timer сделан как и все остальное - на обычном апдейте, который дергается от объекта. А скриптовая подсистема всегда была самой чувствительной к любым подвисаниям, так что ищи другой способ идеальной синхронизации...

  • Спасибо 1

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


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

 

 

Что для этого нужно сделать?

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

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


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

 

 

какие свойства смарта можно узнать скриптом?

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

 

 

 

как в ЗП скриптом получить путь к модели НПС?

 

 

Что значит путь?

Я думаю, имелось в виду имя файла и папка в которой он лежит. Если да - то ответ чуть выше.

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


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

 

 

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

Движковой ф-ции для этого в ТЧ нет. Вроде есть какой-то костыльно-скриптовый способ отследить объекты на поясе, если память не подводит - от Kirgudu. Спроси у него...

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


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

@losiara

Для монстров есть оверрайды:

actor_friendly = true/false - если true, то монстр не атакует актера, до первой атаки на него.
npc_friendly = true/false - если true, то монстр не атакует сталкеров и монстров, до первой атаки на него.
friendly = true/false - если true, то монстр не атакует никого до первой атаки на него.
braindead = true/false - если true, то монстр игнорирует любые атаки.

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

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


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

 

 

Возможно ли повторение этих ID игрой и получение ошибки с соот. логом как я привел в предыдущем посте, или подобный вылет возможен только лишь у игровых объектов именно  с SIDом???

Насчет возможности повторов ID'ов - ни разу об этом нигде и ничего не попадалось. А раз информации такой нет - значит у движка с этим все нормально. А в приведенном тобой логе достаточно понятно сказано про дублирование SID. Ищи внимательно, где у тебя может происходить более одного спавна объекта, который имеет назначенный SID.

  • Согласен 1

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


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

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...
⚠ ВНИМАНИЕ! НЕ РЕКОМЕНДУЕМ ПРОИЗВОДИТЬ РЕГИСТРАЦИЮ НА ФОРУМЕ.