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

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

Здрасьте, народ. Собрал функцию облучения гг радиацией при порченном костюме, но как обычно с первого раза не заработало, а ошибок я что то не замечаю. Подскажите, плиз :rolleyes:

function check_outfit_condition()
    if db.actor:item_in_slot(7) ~= nil and db.actor:item_in_slot(7):section() == "scientific_outfit" and db.actor:item_in_slot(7):condition() <=0.80 and level.name()=="zaton" then --когда костюм можно чинить (состояние больше или равно 80%)
        db.actor.radiation = 0.05
        local news_text = "%c[255,160,160,160]".."Дягтерев:".."\\n".."%c[default]".."Внимание! Разгерметизация! Фильтры костюма не справляются!"
        local news_caption = game.translate_string("st_tip")
        local texture = "ui_inGame2_Hero"
        db.actor:give_game_news(news_caption, news_text, texture, 1000, 5000)
elseif not db.actor:item_in_slot(7):section() == "scientific_outfit" and level.name()=="zaton" then 
        db.actor.radiation = 0.1
        local news_text = "%c[255,160,160,160]".."Дягтерев:".."\\n".."%c[default]".."Пора умирать, упс..."
        local news_caption = game.translate_string("st_tip")
        local texture = "ui_inGame2_Hero"
        db.actor:give_game_news(news_caption, news_text, texture, 1000, 5000)
    end
end

 

 

Используй теги "Код" и "Спойлер". Cyclone

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

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

Интересный тут вопрос возник...

Есть некий объект, на который мы сохраняем ссылку. Пусть это будет game_object, как в xr_danger.script:

db.storage[self.object:id()].enemy = best_danger:object()

Затем с объектом по какой-то причине происходит destroy. На что указывает сохраненная ссылка ? nil ?

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

ZeeK, твой код будет рабоатать, если у тебя надет комбез "Сева" и ты находишься на Затоне, причём независимо от его состояния. Если в слоте вообще не будет комбеза - будет вылет.

Думаю нужно как-то так:

function check_outfit_condition()
    if db.actor:item_in_slot(7)  and db.actor:item_in_slot(7):condition() <=0.80 then
        db.actor.radiation = 0.05
        local news_text = "%c[255,160,160,160]".."Дягтерев:".."\\n".."%c[default]".."Внимание! Разгерметизация! Фильтры костюма не справляются!"
        local news_caption = game.translate_string("st_tip")
        local texture = "ui_inGame2_Hero"
        db.actor:give_game_news(news_caption, news_text, texture, 1000, 5000)
    elseif not db.actor:item_in_slot(7) then --Комбеза нет вообще
        db.actor.radiation = 0.1
        local news_text = "%c[255,160,160,160]".."Дягтерев:".."\\n".."%c[default]".."Пора умирать, упс..."
        local news_caption = game.translate_string("st_tip")
        local texture = "ui_inGame2_Hero"
        db.actor:give_game_news(news_caption, news_text, texture, 1000, 5000)
    end
end

 

 

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

У меня вопрос. Есть движковая функция для гейм_обьекта set_alien_control.Как я понял, она используеться в игре только раз при атаках контроллёра. А есть ли способ её использовать для нпс и прочего и как она работает? Точнее, нужно ли её выключать?

Изменено пользователем panzyuza
Ссылка на комментарий
panzyuza, неверно. set_alien_control(bool) переключает камеру в положение "из глаз" кровососа. Применима только к объектам класса CAI_Bloodsucker, при применении к другим объектам в лучшем случае ничего не будет. Лучше скажи, что ты хотел добиться от нпс с ее помощью. Изменено пользователем KD87
Ссылка на комментарий
твой код будет рабоатать, если у тебя надет комбез "Сева" и ты находишься на Затоне, причём независимо от его состояния. Если в слоте вообще не будет комбеза

Shredder на это и было нацелено. То есть, написано верно будет, если заменить

 if db.actor:item_in_slot(7) ~= nil and db.actor:item_in_slot(7):section() == "scientific_outfit" and db.actor:item_in_slot(7):condition() <=0.80 and level.name()=="zaton"

на

 if db.actor:item_in_slot(7):section() == "scientific_outfit" and db.actor:item_in_slot(7):condition() <=0.80 and level.name()=="zaton"

??

 

 

 

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

Ссылка на комментарий
И/или, взгляни, например в _g.start_game_callback()

Довольно таки интересная с виду фитча.

Можно ссыль на описание?

Или лучше ткните туда, где она встречается. ^_^

 

P.S.: Ковыряние в файлах и поиск по сайту ничего не дал.

Изменено пользователем Кактус_523
МЯСО!
Ссылка на комментарий

Я не буду разбираться что у вас в коде не правильно, но объясните мне смысл вот этого:

if db.actor:item_in_slot(7) ~= nil and db.actor:item_in_slot(7):section() == "scientific_outfit" and db.actor:item_in_slot(7):condition() <=0.80 ...

 

ЗАЧЕМ?

 

Вы вызываете аж 3 раза движковую функцию. Которая тоже время требует на выполнение. Притом такой код как выше выглядит не красиво. Почему не написать так:

 

local slot_item_7 = db.actor:item_in_slot(7)
if slot_item_7 and slot_item_7:section() == "scientific_outfit" and slot_item_7:condition() <=0.80 ...

 

И понятней, и быстрей

Freedom

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

Кактус_523, эта "интересная фитча" - стандартая функция воторая и запускает собственно игру и естественно присутствует везде (ТЧ/ЧН/ЗП).

Описывать то, как для запуска игры движек обращается к этой функции пока никому в голову не взбрело ... Если взглянешь в alife.ltx то в секции [alife] увидишь строку:

start_game_callback = _G.start_game_callback; on starting new game or loading saved one

- в которой сами разработчики дали тебе "описание".

 

 

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

_Призрак_

А еще "понятнее':

local actor_outfit  = db.actor:get_current_outfit()

- и функция имеет понятное имя и нет ни какого гимора с номером слота, который в разных версиях игры порою смещен ... ;)

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
KD87, понятно. Значит только к кровососам. Есть функция в xr_effects npc:set_alien_control( p[1] == "true" ). Не подскажешь, что передавать в качестве параметра (ид или сид обьекта)? Я понял, что true\false для включения и отключения. То есть, если монстр сделан на классе кровососа, то данная функция будет также применима. А чего от нпс хотел добиться? Хотел оживить игру. К примеру, в начале анимки punch переключить на нпс, и по прошествии секунд игрового времени обратно на актёра. Что-то вроде маленькой кат-сцены. Или во время атаки мутанта на нпс сначала взгляд нпс на монстра и потом обратно. Вообщем, простор идей большой. Изменено пользователем panzyuza
Ссылка на комментарий
panzyuza, какой сид? :) функция применяется к клиентскому объекту кровососа, а в качестве параметра ей передается bool - вкл/выкл, соответственно :) Изменено пользователем KD87
Ссылка на комментарий

_Призрак_

Вы вызываете аж 3 раза движковую функцию. Которая тоже время требует на выполнение. Притом такой код как выше выглядит не красиво. Почему не написать так:

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

 

Во-первых, ты в разделе "Школа ..." и тебе подсказали, так зачем оправдывать свои незнания/недопонимания?

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

--/Artos

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

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

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

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

Вот скрипт может я где-то допустил ошибку.

Профиль нового спавна в all.spawns

Файл alife_l01_escape.ltx

 

[870]
; cse_abstract properties
section_name = stalker
name = dark_stalker_voron
position = 2.92000007629395,4.21000003814697,85.879997253418
direction = 0.0445535257458687,-0.000645029998850077,0.0144814234226942

; cse_alife_trader_abstract properties
character_profile = esc_dark_stalker_voron

; cse_alife_object properties
game_vertex_id = 61
distance = 3.5
level_vertex_id = 42599
object_flags = 0xfffffffb
custom_data = <<END
[logic]
cfg = scripts\esc_voron.ltx 
[smart_terrains]
none = true 

[spawn]
wpn_gauss
END
story_id = 9958

; cse_visual properties
visual_name = actors\soldier\soldier_spetsnaz

; cse_alife_creature_abstract properties
g_team = 0
g_squad = 0
g_group = 0
health = 2
dynamic_out_restrictions = 
dynamic_in_restrictions = 

upd:health = 2
upd:timestamp = 0
upd:creature_flags = 0
upd:position = 2.92000007629395,4.21000003814697,85.879997253418
upd:o_model = 0
upd:o_torso = 0,0,0
upd:g_team = 0
upd:g_squad = 2
upd:g_group = 2

; cse_alife_monster_abstract properties

upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0

; cse_alife_human_abstract properties
predicate5 = 2,2,1,2,0
predicate4 = 2,2,1,2

; cse_ph_skeleton properties

upd:start_dialog = 

; se_stalker properties


Точки новых путей в all.spawns
Файл way_l01_escape.ltx

[demon_ohr3_look]
points = p0,p1
p0:name = wp00
p0:flags = 0x1
p0:position = 17.26,4.03,61.08
p0:game_vertex_id = 3061
p0:level_vertex_id = 293842

p1:name = wp01
p1:flags = 0x2
p1:position = 0.53,4.01,59.85
p1:game_vertex_id = 3065
p1:level_vertex_id = 326060

[demon_ohr3_walk]
points = p0,p1
p0:name = wp00
p0:flags = 0x1
p0:position = 13.31,3.95,64.37
p0:game_vertex_id = 3065
p0:level_vertex_id = 326060
p0:links = p1(1)

p1:name = wp01
p1:flags = 0x2
p1:position = 2.34,4.01,62.71
p1:game_vertex_id = 3061
p1:level_vertex_id = 293842
p1:links = p0(1)

И вот сама логика
Файл esc_voron.ltx
[smart_terrains]
none = true

[logic]
active = walker@demon_ohr3

[walker@demon_ohr3]
path_walk = demon_ohr3_walk
path_look = demon_ohr3_look
danger = danger_condition@demon_ohr3

[danger_condition@demon_ohr3]
ignore_distance = 0

 

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

zitulok, либо в этом дело pN:links - они у тебя не прописаны как раз для начальных точек путей(да и вообще криво), либо НПС не видит точку пути(она находится вне аи сетки/за уровнем) и уходит гулять(что в данном случае маловероятно).

 

 

Как отследить что НПС был убит к примеру с гранаты или гранатомета?...если не возможно, то как отследить момент кидания гранаты и момент выстреливания подствольника/гранатомета?

 

 

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

Я создал скрипты телепорта, как его заспавнить не через create а через all.spawns, дайте пожалуйста пример.

 

Не путай конфиги для спавна со скриптами и подбери соответствующую тему, в зависимости от версии игры.

И раз написал для all.spawn'а - в него и включай тобою написанное, предварительно ознакомившись как работать с ним. --/Artos

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

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

К примеру...

Я хочу что бы вес объекта в рюкзаке, изменился после выполнения функции в скрипте.

Перепробовал несколько вариантов, но не что не работало.

 

Один из примеров моих попыток

function vsk94weight()
  local ltx = system_ini()
  if ltx:section_exist(wpn_vsk94_ttx) and ltx:line_exist(inv_weight, 2.82) then
return ltx:r_float(inv_weight, 4)
  else
return ltx:r_float(inv_weight, 1)
  end
end

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

GreadFiasco Значение в конфиге, через скрипт изменить нельзя. Можно его только прочитать оттуда, что ты и делаешь в своем примере.

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

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

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

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

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

Какой функцией можно получить ближайший левел_вертекс к данной позиции? Не перебирать же их все.

Freedom

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

Всем привет. Помогите, пожалуйста, разобраться.

Итак, адаптировал я "Ограничение объема рюкзака" и "Магазинный мод (обоймы)".

 

Ввел в resctrictor_stock.script, в таблицу - проверку всех обойм. Вот так:

...
local _table = {
_magazines  = {"clip_8_9x18_fmj","clip_8_9x18_pmm" и т.д.}
...

Всё прекрасно работает, но одно Но.

Как только разряжаю оружие - вылет:

Expression    : e_entity
Function      : xrServer::Process_event_reject
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\xrServer_process_event_reject.cpp
Line          : 12
Description   : entity not found. id_parent=0 id_entity=19200 frame=841

Как сделать проверку на патроны для оружия?

 

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

Доброго времени суток всем! :)

Artos, вопрос для меня актуальный по "отработавшим" свою логику рестрикторам.

зачем оставлять по всей Зоне, хотя и невидимые, но никомму не нужные и по сути рудиментарные уже об'екты?

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

В принципе, даже проверял и где-то применяю - в самой логике рестриктора по окончании активной секции переключая на 'nil' - вызываю функцию удаления "самого себя".

Идея понятна сама по себе. Если можно, подробнее о принципе определения "самого себя". Последующее удаление не представляется проблематичным.

Заранее благодарен.

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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