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

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


Svoboда

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

(изменено)

Проблема-вопрос.

Первый работаю с all.spawn. Для начала хочу изменить стартовый набор ГГ. Скачал xrSpawner v0.13.1 Beta. Открыл в нем all.spawn.

На шел вот это:

Vif58PGb7gVg.jpg

Добавил то что выделена красным. Потом жму "Принять изменения". Потом Файл->Сохранить.

Начинаю новую игру, но нового предмета нет.

После этого открываю опять алл.спавн и вижу что он остался таки каким был (нету моего добавленного предмета). Может я не так сохранил\добавил?

 

З.Ы. Файл алл.спавн из мода "Зона Поражения 1.1".

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

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


Ссылка на сообщение
(изменено)

Может быть детский вопрос, для тех кто хорошо знает скрипты.

Суть вопроса.

Имеется функция:

local fov = device().fov

local wpn

if fov < 35 and xr_logic.pstor_retrieve(db.actor, "use_scope", 0) == 0 then

wpn = db.actor:item_in_slot(db.actor:active_slot())

if wpn and wpn:section() == "wpn_crossbow" then

level.add_pp_effector("bast.ppe", 1034, true)

get_console():execute ("r2_sun_lumscale_amb 3")

get_console():execute ("r2_mblur 0.6")

xr_logic.pstor_store(db.actor, "use_scope", 1)

 

wpn_crossbow - это пушка.

Мне надо в этой строке сделать так чтобы было ДВЕ пушки.

пробовал сделать так:

if wpn and wpn:section() == "wpn_crossbow" and "wpn_arm_binoc" then

Но ничего не вышло.

Как добавить в функцию вторую пушку?

 

Kirag, сработало! Большое спасибо! :)

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

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


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

Desertir,

А как на счет неживых?

В РМА моде Нива в ТД сама ездила. Подъезжала к фабрике и останавливалась. Можешь там посмотреть.

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


Ссылка на сообщение
(изменено)

Всем привет. Вопрос: возможно ли, в ТЧ скриптами реализовать защиту от хим. заражения? Ну т.е. химзащиту как в ЗП, при употреблении препарата?

Щас думаю только подменять костюм (или вешать арт) с улучшенными характеристиками химзащиты при использовании препарата... Но может есть что-то по лучше?

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

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


Ссылка на сообщение
(изменено)

Ulman, отслеживать голод ГГ вроде бы нельзя... Так что никак...

Хотя можно попробовать сделать по статику на экране (иконка голода)... Если только она именно статиком сделана, а не движком...

 

По звуку:

function sound_update()

if db.actor and db.actor:alive() then

local outfit = db.actor:item_in_slot(6)

if outfit and outfit:section() and outfits[outfit:section()] then

if not snd:playing() then

snd:play_at_pos(db.actor, vector ():set (0, 0, 0), 0, sound_object.s2d)

else

if snd:playing() then snd:stop() end

end

end

end

end

 

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

То что подчеркнуто вообще не нужно.

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

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


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

Ulman, чисто из интереса попробуй так сделать:

local snd  = xr_sound.get_safe_sound_object([[папка_звука\звук]])
function update()
    local snd_satiety = 0.2
    if snd_satiety>db.actor.satiety then
        if not snd:playing() then snd:play_at_pos(db.actor, vector ():set (0, 0, 0), 0, sound_object.s2d) end
    else
        if snd:playing() then snd:stop() end
    end
    snd_satiety = db.actor.satiety
end

Если значение сытости ГГ меньше 0.2, то будет повторятся звук... Всё это дело на апдейт вешай.

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


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

Artos, немного можно уменьшить код. Будет достаточно такой функции:

if self.object:clsid()==clsid.car_s then
        local h = hit()
        h.draftsman = db.actor
        h.type = hit.strike
        h.direction = vector():set(0,0,0)
        h.power = 0.0001
        h.impulse = 0.0001
        self.object:hit(h)
    end

 

Давно пользуюсь, проблем не было :)

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


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

Artos,

Что, кстати, и сделано у тебя намерено (h.draftsman = db.actor <???).

Так что то, что не имеешь проблем - это пока не будешь использовать логику. Ведь не только машинки для покататься спавнятся, но и 'враждебные' БТРы ...

У меня в моде логика кстати используется (ну те же ключи). Плюс еще много-много чего.

На счет БТРов... Я привел код для чистой игры, если нужно чтобы каким-то тачкам хит не наносился, можно фильтровать по секции: self.object:section()~="секция". Ну понятно, это в условие пихаем.

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


Ссылка на сообщение
(изменено)

Habaromaniac, не парься. Вот функция переходов:

Сама функция перехода:

-- Author - singapur22
function create_level_changer(
    p_story_id,   -- STORY_ID нового level_changer (понадобится нам позже)
    p_position,   -- вектор, координаты точки, в которой будет располагаться центр нового level_changer
    p_lvertex_id, -- level_vertext_id - идентифицируют уровень, на котором будет создан level_changer
    p_gvertex_id, -- game_vertext_id 
    p_dest_lv,    -- level_vertex_id - идентифицируют уровень, на будет перебрасывать игрока 
    p_dest_gv,    -- game_vertex_id
    p_dest_pos,   -- координаты точки, в которой на новом уровне окажется игрок
    p_dest_dir,   -- направрение взгляда игрока
    p_dest_level, -- название уровня, например "L11_Pripyat"
    p_silent      -- следует задать 1, чтобы подавить вопрос о смене уровня (автоматический переход)
    )
    local obj = alife():create("level_changer", p_position, p_lvertex_id, p_gvertex_id)
    level.map_add_object_spot(obj.id, "level_changer", "")
    local packet = net_packet()
    obj:STATE_Write(packet)
    -- свойства cse_alife_object
    local game_vertex_id = packet:r_u16()
    local cse_alife_object__unk1_f32 = packet:r_float()
    local cse_alife_object__unk2_u32 = packet:r_u32()
    local level_vertex_id = packet:r_u32()
    local object_flags = packet:r_u32()
    local custom_data = packet:r_stringZ()
    local story_id = packet:r_u32()
    local spawn_story_id = packet:r_u32()
    -- свойства cse_shape
    local shape_count = packet:r_u8()
    for i=1,shape_count do
    local shape_type = packet:r_u8()
    if shape_type == 0 then
    -- sphere
    local center = packet:r_vec3()
    local radius = packet:r_float()
    else
    -- box
    local axis_x_x = packet:r_float()
    local axis_x_y = packet:r_float()
    local axis_x_z = packet:r_float()
    local axis_y_x = packet:r_float()
    local axis_y_y = packet:r_float()
    local axis_y_z = packet:r_float()
    local axis_z_x = packet:r_float()
    local axis_z_y = packet:r_float()
    local axis_z_z = packet:r_float()
    local offset_x = packet:r_float()
    local offset_y = packet:r_float()
    local offset_z = packet:r_float()
    end
    end
    -- свойства cse_alife_space_restrictor
    local restrictor_type = packet:r_u8()
    -- свойства cse_level_changer
    local dest_game_vertex_id = packet:r_u16() 
    local dest_level_vertex_id = packet:r_u32() 
    local dest_position = packet:r_vec3()
    local dest_direction = packet:r_vec3()
    local dest_level_name = packet:r_stringZ()
    local dest_graph_point = packet:r_stringZ()
    local silent_mode = packet:r_u8()
    packet:w_begin(game_vertex_id) -- game_vertex_id
    packet:w_float(cse_alife_object__unk1_f32)
    packet:w_u32(cse_alife_object__unk2_u32) 
    packet:w_u32(level_vertex_id) -- level_vertex_id
    packet:w_u32( bit_not(193) )  -- object_flags = -193 = 0xFFFFFF3E
    packet:w_stringZ(custom_data)
    packet:w_u32(p_story_id) -- story_id
    packet:w_u32(spawn_story_id)
    packet:w_u8(1)    -- количество фигур
    packet:w_u8(1)    -- тип фигуры: box
    packet:w_float(2) -- axis_x_x
    packet:w_float(0) -- axis_x_y
    packet:w_float(0) -- axis_x_z
    packet:w_float(0) -- axis_y_x
    packet:w_float(4) -- axis_y_y
    packet:w_float(0) -- axis_y_z
    packet:w_float(0) -- axis_z_x
    packet:w_float(0) -- axis_z_y
    packet:w_float(4) -- axis_z_z
    packet:w_float(0) -- offset_x
    packet:w_float(0) -- offset_y
    packet:w_float(0) -- offset_z
    packet:w_u8(3)    -- restrictor_type
    packet:w_u16(p_dest_gv)   -- destination game_vertex_id
    packet:w_u32(p_dest_lv)   -- destination level_vertex_id
    packet:w_vec3(p_dest_pos) -- destination position
    packet:w_vec3(p_dest_dir) -- destination direction (направление взгляда)
    packet:w_stringZ(p_dest_level) -- destination level name
    packet:w_stringZ("start_actor_99") -- some string, always const
    packet:w_u8(p_silent)     -- 1 for silent level changing
    packet:r_seek(0)
    obj:STATE_Read(packet, packet:w_tell())
end

 

Кидаешь её в свой скрипт. Дальше пишешь функцию спавна своего перехода (в том же скрипте что и прошлую функцию!). Например так (переход с Припяти, в Припять ЗП):

function pripyat_to_cop_pripyat()
    create_level_changer(97115, vector():set(189.497,-2.115,233.149),259791,2149, -- где переход (SID,x,y,z,lvertex,gvertex)
    176155,3760, vector():set(-15.765,-0.496,307.323), -- куда переходить (lvertex,gvertex,x,y,z)
    vector():set(0.0,-1.58,-1.0), -- направление взгляда при появлении
    "pripyat",0) -- на какую локу и запрос (0 - появится вопрос, 1 - автоматический переход)
end

Думаю понятно. Вот кстати у себя вычислил направления взгляда при появлении:

(0.0,0.0,-1.0) смотрим на север
(0.0,1.56,-1.0) смотрим на запад
(0.0,-1.58,-1.0) смотрим на восток
(0.0,-3.15,-1.0) смотрим на юг

Дальше нужно переход отметить на карте. Конечно если это нужно (например в подземных локах это будет не красиво смотреться)... В скрипте level_tasks пишешь рядом с стандартными переходами:

obj = sim:story_object(97115) -- сид уровня ,который ты задавал в функции спавна, вот здесь: create_level_changer(97115 ...
if obj then
    level.map_add_object_spot(obj.id, "level_changer", "В Припять ЗП")
end

Всё. Для появления перехода вызываешь: pripyat_to_cop_pripyat().

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

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


Ссылка на сообщение
(изменено)

Habaromaniac, на счет координат тебе ответили выше. Теперь на счет вызова функции. Можно её выполнять при новой игре. Как мы знаем при НИ выдается поршен, и можно на него повесить выполнение функции. В gamedata\config\gameplay в файле info_portions.xml вверху файла видишь:

  <info_portion id="storyline_actor_start">
    <task>storyline_eliminate_gunslinger</task>
    <action>названия_скрипта.pripyat_to_cop_pripyat</action> ВОТ ЭТО ДОБАВИТЬ
  </info_portion>

pripyat_to_cop_pripyat - название функции спавна перехода. Пишешь какая у тебя там.

 

Добавлено через 2 мин.:

singapur22, ну да, я вычислял "кустарным" способом - переходил по новому переходу и смотрел куда смотрит ГГ.

 

Habaromaniac, вызывай pripyat_to_cop_pripyat() откуда угодно. Можешь поставить в поршен завершения игры - тогда переход появится после последнего телепорта.

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

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


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

Всем привет, есть пару вопросов.

1) Имеется ли способ отлова открытой вкладке в ПДА? Если нет, то какими-нибудь обходными путями это можно выяснить?

2) Имеется скриптовое окно-меню. В нем есть статик, допустим 200х200. В этом статике есть текст, довольно большой. Есть ли возможность сделать, чтобы если текст не влазил в окно статика, появлялся скролл и можно было прокручивать текст? В конфигах есть параметр complex_mode, но он отвечает только за перенос текста на новые строчки, если строка не влазит в размеры статика...

 

Заранее спасибо.

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


Ссылка на сообщение
(изменено)

malandrinus,

Колмогор ещё делал выдачу инфопорции по переходу на конкретную закладку.

Да? Где можно это посмотреть?

Забыл сказать - с ТЧ работаю.

 

Кстати в дефолте - инфо о вкладках есть в конфигах, но они не выдаются...

 

У статика прокрутки нет, на то он и статик.

А через какой класс в ТЧ можно сделать текст, с возможностью его прокрутки?

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

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


Ссылка на сообщение
(изменено)

Artos, malandrinus,

При открытии КПК в ТЧ(SHoC), открытии различных вкладок - выдаются различные инфопоршни:

На 6 патче не выдаются, точно. Выдаются только инфо о открытии и закрытии ПДА: ui_pda, ui_pda_hide

На 4 патче вроде тоже не выдаются... На 5-ом не проверял.

 

Если вопрос подразумевает узкую спецификацию версии иль еще чего - следует сразу это в вопросе указывать.

На 4-м и 5-м патчах - инфопоршни закладок выдаются.

На 6-м ... ну тогда пробовать выцарапать что-то из объекта худа открытого КПК. Может удастся имена окон получить и по ним определять какак закладка.

--/ Artos

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

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


Ссылка на сообщение
(изменено)

*Shoker*,

start_stop_menu(self.ui_dlg, true)

Последний аргумент отвечает за скрытие элементов худа при включенном меню.

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

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


Ссылка на сообщение
(изменено)

Привет всем. Есть небольшой вопрос.

Допустим имеется предмет

local item = db.actor:object("ak74")

Для того чтобы заспавнить wpn_ с припиской ak74 (самопальная функция спавна в инвентарь), нужно написать так:

spawn_item_in_inv("wpn_"..item)

У нас заспавнится wpn_ + ak74, то есть wpn_ak74.

А как можно заспавнить предмет wpn_ak74 без приписки wpn_ ?

То есть если:

local item = db.actor:object("wpn_ak74")

То как отсюда отрезать wpn_ ?

 

Заранее спасибо.

 

demover123, штатных функций замены предмета в слоте, на сколько я знаю, нет. Но можно самому написать это действие. Сначала дропнуть предмет из слота в инвентарь (или удалить вообще), а потом заспавнить предмет, который может стать в освободившийся слот.

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

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


Ссылка на сообщение
(изменено)

Есть вопрос. Существует ли возможность скриптом проиграть звук если не загружена игра? Когда актора и других объектов ещё нет.

ТЧ 1.0006.

 

Старлей, да.

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

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


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

О Боже... Зачем же так мудрить:

add_item.item_icon:Init("ui\\ui_icon_equipment",x, y, width, height) -- это где расположить на экране.

Чтобы вырезать из текстуры область есть метод SetOriginalRect(x,y,w,h)

т.е.

add_item.item_icon:Init("ui\\ui_icon_equipment",x, y,width,height) -- из какой текстуры и куда поместить на экране.

add_item.item_icon:SetOriginalRect(x,y,w,h) -- откуда вырезать из текстуры.

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


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

Никто не знает, есть ли метод\функция для выключения (или регулировки) общей громкости звуков и музыки в ТЧ?

Я нашел только метод level.set_snd_volume(), но он устанавливает громкость только у различных звуков, а на музыку (амбиент и музыки в гл. меню) не влияет.

Знаю что можно сделать через команду в консоли, но хотелось бы узнать, может есть спец. метод (как например level.set_snd_volume(), но с учетом музыки).

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


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

AMK-Team.ru

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