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

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

Поставить лог на actor_binder:info_callback(), и посмотреть, что реально когда выдается.

Это ты мне? Если да то я думаю что тут дело просто в том что тот слот не видно и видимо там ячеек нету поэтому такая фигня, и всё же: можно ли отрисовать на худе иконку и состояние предмета под ней?

 

Это было про PDA и инфо.

Про слоты вспоминать надо. Что-то такое было, но, думаю, кто-нибудь раньше ответит. dc

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

Хм, поршень ui_pda_map_local выдался. Но при попытке завязать на него появление меток схлопотал уже от скрипта Shadows'а вылет при попытке открыть КПК.

Дескать, в строке  self.owner:AttachChild(self.stat) onwer = nil 

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

"вылет при попытке открыть КПК.

Дескать, в строке self.owner:AttachChild(self.stat) onwer = nil"

 

Логично. Куда он возвращаться должен ?

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

Во многих оконных скриптах в конструктор класса аргументом передается владелец или родитель экземпляра класса. Это можно почти везде найти. Проблема в определении косяка, это либо в конструктор передается nil, либо в нем нету инициализации поля self.owner. Ну или еще какая беда, типа родителя уже нету (удалилсо), но тут запись в лог наверное будет другой.

ТЧ 1.0004. SAP и Trans mod

github

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

Если честно, я в этих оконнных скриптах так и не разобрался... сам скрипт, если кому интересно покопаться, вот:

download_1.jpg

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

С ремкомплектом разобрался: гранаты ведь я тоже передвинул в слот песта чтобы трудней было  :P , а ремкомплект поставил на слот гранат и при его доставании сделал weapon_hide и всё работает. Оружие в слоте 3 видно в инвентаре и его нельзя швырять по слотам то что надо, но вот ещё проблемка маленькая: разумеется не обойтись без сообщений чтобы яснее было, но вот только я получаю сообщение не такое

news_manager.send_tip(db.actor, "%c[255,255,255,128]Невозможно отремонтировать оружие. Ремкомплект в плохом состоянии!", nil, nil, 3000)

 

а вот этот кошмар

http://pixs.ru/showimage/ssuser0527_2904593_12293821.jpg

 

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

news_manager.send_tip(db.actor, "%c[255,255,255,128]Невозможно отремонтировать оружие. Ремкомплект в плохом состоянии!", nil, nil, 3000)

 

а вот этот кошмар

По правильному строку "%c[255,255,255,128]Невозможно отремонтировать оружие. Ремкомплект в плохом состоянии!" надо вынести в text/rus/*.xml и грузить в скрипте через game.translate_string()

Или можешь просто сменить кодировку в файле скрипте с utf-8 на вин1251

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

А как прально транслейт прописать? Я вот вписал в string_table_tips то что надо и 

news_manager.send_tip(db.actor, "%c[255,255,255,128]"..game.translate_string("rk_text_weapon_in_slot").." %c[255,255,25,25]"..tostring(db.actor:active_slot()).."%c[255,255,255,128] "..game.translate_string("rk_text_repaired"), nil, nil, 3000)


 

но не прокатило



Хех а кодировка работает не вылетает как при некоторых.

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

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


[logic]
active = ph_button@deactivated

[ph_button@activated]
anim = off
on_press = ph_button@deactivated % -zat_a2_radio_on%
tooltip = radio_off

[ph_button@deactivated]
anim = idle
on_press = ph_button@activated % +zat_a2_radio_on%, ph_sound
tooltip = radio_on

[ph_sound]
snd = zat_a2_bar_radio
looped = true
min_idle = 50
max_idle = 100
random = false



Кто-нибудь может объяснить, почему в ЗП напрочь отказывается работать схема ph_sound? Весь день ковыряюсь, но не помогает.

[logic]
active = ph_sound@act

[ph_sound@act]
snd = zat_a2_radio
looped = false
min_idle = 300
max_idle = 500
random = false
no_hit = true


Ну что здесь неправильно?

Изменено пользователем Black Hawk
Поправила спойлеры.
Ссылка на комментарий

Gkchp, В оригинале ЗП эта схема отключена. Включаем так: заходим в файл modules.script, ищем строчки

load_scheme("ph_door",				"ph_door",		stype_item)
load_scheme("ph_idle",				"ph_idle",		stype_item)
load_scheme("ph_hit",				"ph_hit",		stype_item)
load_scheme("ph_on_hit",			"ph_on_hit",		stype_item)
load_scheme("ph_button",			"ph_button",		stype_item)
load_scheme("ph_code",				"ph_code",		stype_item)
load_scheme("ph_death",				"ph_on_death",		stype_item)
load_scheme("ph_minigun",			"ph_minigun",		stype_item)
--load_scheme("ph_target",			"ph_target",		stype_item)
load_scheme("ph_oscillate",			"ph_oscillate",		stype_item)

И после этих строк вставляем подключение схемы ph_sound:

load_scheme("ph_sound",                         "ph_sound",         stype_item) --Загрузка модуля матюгальника

Теперь можно использовать схему.

Но я когда у себя начал использовать схему, то немного был недоволен тем, что в этой схеме звук воспроизводится как в ТЧ - по путям, с указанием параметров в логике, а не по .ltx, как это сделано в ЗП.

Иными словами, в оригинальной схеме, чтобы отыграть звук его нужно прописать, по-моему в sound_theme.script в виде конструкции

ph_snd_themes["gar_seryi_shooting"] = {[[characters_voice\human_01\scenario\garbage\distance_shooting]]}

, в то время как в ЗП используется поддержка .ltx файла, что, считаю удобным. После правки у меня убились два параметра - random и looped за ненадобностью - эти и другие параметры настраиваются в .ltx файле.

Ссылка: http://rghost.ru/55973662

Пример использования на матюгальнике на Кордоне:

[logic]
active = ph_sound@idle
on_hit = hit
 
[ph_sound@idle]
sound      = esc_roadblock_megafon_idle
on_signal = sound_end|ph_idle@wait
 
[ph_idle@wait]
on_timer = 85000|ph_sound@idle

 

 

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

Настройка звуков делается в файле script_sound_<локация>.ltx вот так:

;В секции list_script_sound_<локация> ставишь указание новой секции:

esc_roadblock_megafon_idle

 

;И в конце файла пиши

 
[esc_roadblock_megafon_idle]
type = 3d
npc_prefix = false
path = characters_voice\scenario\escape\esc_roadblock_megafon_idle_ ;Тут указывается путь до файла, чтоб выбирался рандомно делай названия esc_roadblock_megafon_idle_ 1, esc_roadblock_megafon_idle_ 2 и т.д., а в пути указывай как тут
shuffle = rnd
idle = 3,5,100

 

 

Ну и пара полезных статеек на эту тему:

Про ph_sound - http://stalkerin.gameru.net/wiki/index.php?title=Настройка_логики._Часть_4#.D0.A1.D1.85.D0.B5.D0.BC.D0.B0_ph_sound

Про настройку .ltx фала - http://stalkerin.gameru.net/wiki/index.php?title=CoP._Разбор_звуковых_конфигов_в_script_sound_***

 

 

По переключению схем:

[logic]
active = ph_button@deactivated

[ph_button@activated]
anim = off

on_game_timer = 5 |  ph_sound

[ph_button@deactivated]
anim = idle
on_press = ph_button@activated % +zat_a2_radio_on%

tooltip = radio_on

[ph_sound]
snd = zat_a2_bar_radio
looped = true
min_idle = 50
max_idle = 100
random = false

on_use = ph_button@deactivated %-zat_a2_radio_on%

tooltip = radio_off

 

 

Попробуй так. И погляди в статьях выше примеры как переключают схемы.

Изменено пользователем Black Hawk
Не работали спойлеры из-за отсутствия названия скрытого текста.
  • Нравится 1

Работы на Artstationhttps://www.artstation.com/artist/stalker_lom

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

Привет, форумчане! Боюсь вопрос смешон до безумия, но я сам слеп и не вижу причин вылета(
Идея такова:

1)Перебираем все и вся в инвентаре
2)Записываем каждый элемент инвентаря в таблицу
3)Удаляем все
4)При необходимости спавним все элементы таблицы поочередно в инвентарь обратно

local t_temp = {}
function RI()
local cnt = db.actor:object_count()
for i = 1, cnt-1 do  
        local se_obj = alife():object(i)
        if se_obj then
		table.insert(t_temp,1,se_obj:section_name())
end
end
end

function SI()
for a = 1, #t_temp do  
alife():create(t_temp[a], db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
end
end

 

 

Версия игры 1.6.2 хотя я думаю это не важно.
Лог No such operator

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

Мож таки:

 

local t_temp = {}

 

function RI()

local item

for i = 0, db.actor:object_count() - 1 do

item = db.actor:object( i )

if item and alife():object( item:id() ) then table.insert( t_temp, item:section() ) end

end

end

 

function SI()

for a = 1, #t_temp do alife():create( t_temp[a], vector(), 0, 0, 0 ) end

end

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

Что-то мне подсказывает, что в инвентаре ГГ могут быть всякие патроны в пачках... А для их спавна ф-ция create не годится, а должно быть вроде create_ammo. Это так, на вскидку...

 

Да и использование object_count на мой взгляд не оправдано - правильнее наверное iterate_inventory, меньше движений: в первом случае получаем число объектов, затем дергаем алайф, чтоб получить сам объект и от него уже секцию, а во втором - сразу получаем объект и секцию от него....

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

Что-то мне подсказывает, что в инвентаре ГГ могут быть всякие патроны в пачках... А для их спавна ф-ция create не годится, а должно быть вроде create_ammo. Это так, на вскидку...

Ну вообще то create тоже годится. Только спавнить будет всегда полные пачки. Чтобы спавнить неполные, уже понадобится create_ammo. Только ей ведь, надо указать сколько патронов должно быть в пачке. А эту информацию надо смотреть, например, ковырнув нет-пакет исходной пачки.

 

Возник у меня такой вопрос. Можно ли скриптом поместить артефакт на пояс? или в конфиге артефакта так нахимичить, чтоб по появлению в инвентаре он сразу на пояс запрыгивал. Стволы с комбезами, в слоты свои, сами запрыгивают. Но тут у нас не слот...

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

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

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

 

например, ковырнув нет-пакет исходной пачки.

 

 

Весьма изощренный метод, достаточно бокс сайз прочесть из секции конфига патронов.

 

@AndreySol, а чем должен объект каунт оправдываться? Мне просто интересно.  :) Другой базар, что итерация работает быстрее, и все нормальные люди всегда ее юзают.

@Dennis_Chikin, используя объект каунт нужно перебирать от нуля, а не от единицы. ;)

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

"нужно перебирать от нуля".

 

Упс ! Был невнимателен. Поправил.

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

 

По патронам: для alife():create() как раз ни в какие конфиги заглядывать не нужно. Создаст сразу полную, как раз в соответствии с конфигом.

Для неполных - да, вытаскивать из пакета, и создавать через create_ammo().

 

 

арты на пояс - по-моему через тот же самый конфиг, что и стволы/костюмы/гранаты/бинокли.

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

Для неполных - да, вытаскивать из пакета, и создавать через create_ammo().

Да чтож вы:)

 

local ini = system_ini()
local num_in_box = ini:r_u32(section, "box_size")
while num > num_in_box do
alife():create_ammo(section, position, lvi, gvi, pid, num_in_box)
num = num - num_in_box
end
alife():create_ammo(section, position, lvi, gvi, pid, num)

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

По скорости - а кто-нибудь мерил ?

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

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

num то в этом дивном коде откуда берется ? ;)

 

"Насколько быстрее я уже не помню" - ну так вот цифр и нужны. А то urban legends - этого-то полно. И все ссылаются как раз "кто-то где-то писал, что кто-то где-то что-то мерял".

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

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

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

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

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

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

Войти

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

Войти
×
×
  • Создать...