Скриптование - Страница 221 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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

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

Здрасьте, народ. Собрал функцию облучения гг радиацией при порченном костюме, но как обычно с первого раза не заработало, а ошибок я что то не замечаю. Подскажите, плиз :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

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

Есть некий объект, на который мы сохраняем ссылку. Пусть это будет 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"

??

 

 

 

И/или, взгляни, например в _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 ...

 

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

Кактус_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

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

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

Профиль нового спавна в 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 Значение в конфиге, через скрипт изменить нельзя. Можно его только прочитать оттуда, что ты и делаешь в своем примере.

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

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

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

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

 

Ввел в 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 пользователей

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