Скриптование - Страница 582 - Скрипты / конфиги / движок - 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/

upd: 2. Функция on_actor_pay(). (та, что выше, рассчитана для оружия, в котором всего один патрон, эта - подойдет для любого) 

function on_actor_pay()
local curr_ammo_yes = db.actor:active_item():get_ammo_in_magazine()
=============================================--свой код писать только ниже этой полоски
-- тут код того, что вы хотите сделать при выстреле
=============================================--свой код писать только выше этой полоски
if curr_ammo_yes== 0 then
start_timer()
end
end

 

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

God save Hatsune Miku!

Всем привет. Решил тут прикрутить-таки звуки приветствия и прощания Сахарову для ТЧ, на манер ЧН...

Скрытый текст

--дописано

 yan_professor_hello                        = {min_snd = 1, max_snd = 1, rnd = 100, prior = 5, rnd_id = id(), into_id = id(), max_ids = {}},
 yan_professor_goodbye                          = {min_snd = 1, max_snd = 1, rnd = 100, prior = 5, rnd_id = id(), into_id = id(), max_ids = {}},

Скрытый текст

--дописано

[yan_professor_hello_rnd]
yan_general_ecolog = 0,scenario\yantar\yan_sakharov_meet_

[yan_professor_goodbye_rnd]
yan_general_ecolog = 0,scenario\yantar\yan_sakharov_meet_bye_

Соотв. звуки добавлены в нужную папку.

А вот с файлом логики Сахарова у меня непонятки.

Скрытый текст

[logic]
active = walker@yan_start
actor_dialogs = actor_dialogs
combat_ignore = combat_ignore
trade = misc\trade_ecolog.ltx
inv_max_weight = 10000

[walker@yan_start]
path_walk = yan_ucheniy_walk_talk
path_look = yan_ucheniy_look_talk
combat_ignore_cond = always
on_info = {-yantar_kruglov_phrase_2 +yantar_scientists_talk} remark@yan_professor_talk_1
on_info2 = {+yantar_kruglov_phrase_2} walker@yan_1
danger = danger_condition@yan_ecolog
def_state_standing = yan_professor_wait
def_state_moving1 = yan_professor_walk
def_state_moving2 = yan_professor_walk
def_state_moving3 = yan_professor_walk
meet = no_meet

[remark@yan_professor_talk_1]
snd = yantar_professor_to_kruglov_1
anim = yan_professor_wait
target = logic@scientist_out_rest, yan_scientist
on_timer = 5000 | %+yantar_kruglov_phrase_1%
on_info = {+yantar_professor_phrase_2} remark@yan_professor_talk_2
combat_ignore_cond = always
danger = danger_condition@yan_ecolog
meet = no_meet

[remark@yan_professor_talk_2]
snd = yantar_professor_to_kruglov_2
anim = yan_professor_wait
target = logic@scientist_out_rest, yan_scientist
on_timer = 5000 | walker@yan_1 %+yantar_kruglov_phrase_2%
combat_ignore_cond = always
danger = danger_condition@yan_ecolog
meet = no_meet

[walker@yan_1]
path_walk = yan_ucheniy_walk
path_look = yan_ucheniy_look
combat_ignore_cond = always
on_info = {+yan_actor_talk_ucheniy} walker@yan_2
on_info2 = {+yan_find_scientist_done} walker@scientist_quest_good    
danger = danger_condition@yan_ecolog
def_state_standing = yan_professor_wait
def_state_moving1 = yan_professor_walk
def_state_moving2 = yan_professor_walk
def_state_moving3 = yan_professor_walk
meet = meet@yan_general_scientist_1

;Дописано
on_actor_dist_le = 2 | remark@yan_professor_hello
on_actor_dist_ge = 4 | remark@yan_professor_goodbye

[walker@scientist_quest_good]
path_walk = yan_ucheniy_walk_talk
path_look = yan_ucheniy_look_talk
combat_ignore_cond = always
on_info = {+yantar_scientist_talk_helmet} remark@talk_about_helmet
danger = danger_condition@yan_ecolog
def_state_standing = yan_professor_wait
def_state_moving1 = yan_professor_walk
def_state_moving2 = yan_professor_walk
def_state_moving3 = yan_professor_walk
meet = meet@yan_general_scientist_1

;Дописано
on_actor_dist_le = 2 | remark3@yan_professor_hello
on_actor_dist_ge = 4 | remark3@yan_professor_goodbye

[remark@talk_about_helmet]
snd = yantar_professor_radiation_quest_2
anim = yan_professor_wait
target = logic@scientist_out_rest, yan_scientist
meet = no_meet
combat_ignore_cond = always
on_signal = sound_end | walker@go_to_room %-yantar_scientist_talk_helmet%
danger = danger_condition@yan_ecolog

[walker@go_to_room]
path_walk = yan_general_scientist_room_walk
path_look = yan_general_scientist_room_look
on_signal = make_helmet | remark@make_helmet
combat_ignore_cond = always
danger = danger_condition@yan_ecolog
meet = no_meet
def_state_standing = yan_professor_wait
def_state_moving1 = yan_professor_walk
def_state_moving2 = yan_professor_walk
def_state_moving3 = yan_professor_walk

[remark@make_helmet]
anim = mode_shlem
target = 920
combat_ignore_cond = always
on_signal = action_end | walker@go_to_actor
danger = danger_condition@yan_ecolog
meet = no_meet

[walker@go_to_actor]
path_walk = yan_ucheniy_walk_talk
path_look = yan_ucheniy_look_talk
combat_ignore_cond = always
on_info = {+yan_kill_brain_task_start} walker@yan_2
danger = danger_condition@yan_ecolog
def_state_standing = yan_professor_wait
def_state_moving1 = yan_professor_walk
def_state_moving2 = yan_professor_walk
def_state_moving3 = yan_professor_walk
meet = meet@yan_general_scientist_1

;Дописано
on_actor_dist_le = 2 | remark3@yan_professor_hello
on_actor_dist_ge = 4 | remark3@yan_professor_goodbye

[walker@yan_2]
path_walk = yan_ucheniy_walk_talk
path_look = yan_ucheniy_look_talk
combat_ignore_cond = always
on_info = {-yan_actor_talk_ucheniy} walker@yan_1
on_info2 = {+yantar_scientist_talk_helmet} remark@talk_about_helmet
meet = meet@yan_general_scientist_1
danger = danger_condition@yan_ecolog
def_state_standing = yan_professor_wait
def_state_moving1 = yan_professor_walk
def_state_moving2 = yan_professor_walk
def_state_moving3 = yan_professor_walk

[meet@yan_general_scientist]
meet_state     = 2 | yan_professor_wait@yantar_professor_talk_1
meet_state_wpn     = 2 | yan_professor_wait@yantar_professor_talk_1
victim         = 2 | actor
victim_wpn     = nil
use             = true
use_wpn         = false

[meet@yan_general_scientist_1]
meet_state     = 1 | yan_professor_wait@yantar_professor_talk_1
meet_state_wpn     = 1 | yan_professor_wait@yantar_professor_talk_1
victim         = 1 | actor
victim_wpn     = nil
use             = true
use_wpn         = false
abuse = false
precond = usability

[meet@no_talk]
meet_state     = 1 | yan_professor_wait@yantar_professor_talk_1
meet_state_wpn     = 1 | yan_professor_wait@yantar_professor_talk_1
victim         = 1 | actor
victim_wpn     = nil
use             = false
use_wpn         = false
abuse = false

[danger_condition@yan_ecolog]
ignore_distance = 0

[actor_dialogs]
id = yantar_general_ucheniy_talk_start,yantar_general_ucheniy_talk_end

[combat_ignore]
combat_ignore_cond = always

;Дописано

[remark@yan_professor_hello]
anim = yan_professor_wait
snd = yan_professor_hello
on_signal = sound_end | walker@yan_1

[remark@yan_professor_goodbye]
anim = yan_professor_wait
snd = yan_professor_goodbye
on_signal = sound_end | walker@yan_1

[remark2@yan_professor_hello]
anim = yan_professor_wait
snd = yan_professor_hello
on_signal = sound_end | walker@yan_2

[remark2@yan_professor_goodbye]
anim = yan_professor_wait
snd = yan_professor_goodbye
on_signal = sound_end | walker@yan_2

[remark3@yan_professor_hello]
anim = yan_professor_wait
snd = yan_professor_hello
on_signal = sound_end | walker@scientist_quest_good

[remark3@yan_professor_goodbye]
anim = yan_professor_wait
snd = yan_professor_goodbye
on_signal = sound_end | walker@scientist_quest_good

В общем, при приближении ближе 2 метров по идее должен здороваться, при удалении более чем на 4 метра прощаться. Но работает только прощание изредка и то при этом, Сахарова можно поймать при подходе к столу так, что будет звучать только рандомное прощание. Где я с логикой накосячил?

  • Полезно 1

@Colder , что-то вроде такого (если вызывать из логики)

function some_monster_inside(actor, rest)
  local obj 
  for k,v in pairs(db.storage) do
    obj = level.object_by_id(k)
    if obj and alife():object(k) and IsMonster(obj) then
      if rest:inside(obj:position()) then
        return true
      end
    end
  end
  return false
end
Изменено пользователем naxac
  • Спасибо 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

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

 

Платформа ТЧ.

 

https://infamous.fandom.com/wiki/Karma?file=Meter.jpg

 

540?cb=20110510160814

 

P.S. В скриншотах показываю как в идеале должно это выглядить. Игра на скрине, если что, игра Infamous.

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

Создал фриплейный старт игры https://yadi.sk/i/ya2rFPr8BFbS-A

 

Пытаюсь заспавнить предметы в инвентарь так:

Скрытый текст

Сама кнопка

 

function ui_main_menu_new:novice_on_start()
    local console = get_console()
    console:execute("g_game_difficulty gd_novice")
    self:StartGame()
    start_game_novice()
end

 

Функция

 

function start_game_novice()

local spawn_items = {

    "wpn_pm",
    "medkit",
    "conserva",
    "zvezda_2",
    "bandage"

}

    for i = 1,2 do
    table.insert(spawn_items, "ammo_9x18_fmj")
end
    local k,v = 0,0
    for k,v in pairs(spawn_items) do
    alife():create(v,
    db.actor:position(),
    db.actor:level_vertex_id(),
    db.actor:game_vertex_id(),
    db.actor:id())
end
end

Может кто подсказать как все таки заспавнить предметы.

 

Скрытый текст

function start_game_novice()
    local ini = ini_file("misc\\items_link.ltx")
    if not ini then ini=system_ini() end
    if ini:section_exist("generic_list") then
    local n = ini:line_count("generic_list")
    local key = math.random(0,n-1)
    local result, item, num = ini:r_line("generic_list",key,"","")
    return item, num
end
end

 

в ltx

[generic_list]
wpn_pm = 0.7

Тоже не выходит

7 часов назад, Colder сказал:

скрипт отлова мини-карты?

Скрытый текст

function init_minimap()
  local wnd = get_main_window()
  minimap_static = wnd:GetStatic( "minimap" )
  back_static    = wnd:GetStatic( "minimap:background" )
  frame_static   = wnd:GetStatic( "minimap:level_frame" )
  compass_static = wnd:GetStatic( "minimap:compass" )
end

 

P.S Можешь посмотреть тут еще https://github.com/dsh2dsh/op2ogse/blob/master/gamedata/scripts/dsh/dsh_ui_minimap.script#L94

Изменено пользователем I am Dead
  • Спасибо 1
  • Полезно 1

Здравствуйте, не могу разобраться как работает модуль m_netpk от Artos'a, хочу попробовать как в примере переместить вентилятор из бункера на тумбочку в лагере новичков, но не чего не происходит.

И всё-таки что за ерунда с вылетом вида:

stack trace:

0023:05175AF0 xrGame.dll
[error][      87]    : Параметр задан неверно.

Делаем квиксейв клавишей F6, при попытке загрузиться с него клавишей F7 (или другой назначенной) - вылет выше, при попытке загрузиться с него из меню - всё грузится нормально...

 

1 час назад, Капрал Хикс сказал:

Параметр задан неверно

Ну вот очень знакомые слова. Значит где-то встречал. Здесь видел или себя, но у себя я всегда назначаю клавиши F5/F8. Если такой вылет и был у меня, то либо вначале игры на базовых настойках, либо он возможен на моих тоже...

Здесь могла быть ваша реклама.

7 часов назад, mole venomous сказал:

Ну вот очень знакомые слова.

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

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

Может такое быть, что вылет вида: 

stack trace:

0023:05175AF0 xrGame.dll
[error][      87]    : Параметр задан неверно.

вызван тем, что какой-то из скриптов сохранён в формате UTF-8, а не ANSI? Я просто не знаю, на что подумать ещё.

Приветствую всех! Созрело несколько вопросов, на которые (хотя бы на некоторые) хотелось бы получить ответ, либо же дельный совет.

 

1. Подскажите как в главном меню можно изменить разрешение видео с 1024х768 на 1920х1080 без правок двига?

2. Как можно сменить имя и иконку гг по ходу игры?

3. Есть ли способ вывести на худ переработанную карму (репутацию) гг и представить ее в числовом виде (то есть, допустим, при обыске персонажа карма уменьшается, на худ приходит уведомление + число на худе уменьшается на 5 показателей)?

4. Как можно вывести иконку гг на худ и сделать ее динамической (то есть настроить сменяемость картинок таким образом, чтобы получилась анимация (примерно как в 1 думе)).

5. Есть ли способ вывода любого изображения на сам худ инвентаря? (Допустим, на место где указано имя и иконка гг)

6. Также интересует момент с выводом абсолютно рандомной динамической картинки на карту пда, чтобы, допустим, закрасить недоступные локации, а потом эти картинки убрать.

7. Существует ли на чистом тч нормальный пак с анимациями применения предметов из инвентаря. Интересует именно в высоком разрешении анимации, допустим, как от LADS, но на чистой ТЧ.

8. Прошу скинуть скрипты на тч, которые не дают игроку открыть пда, инвентарь и диалоговое окно.

 

Платформа разработки, соответственно, ТЧ.

 

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

Новые окна в интерфейсе:

1. Позади существующих окон или в свободной области, авто-скрытие вместе с HUD: get_hud():Add/RemoveCustomStatic(имя), где имя – ссылка на XML-описание окна или хотя бы пустышки в [config\ui\ui_custom_msgs.xml].

2. Поверх существующих окон, скрывать вручную (в катсценах по инфо-поршням или привязкой к [scripts\xr_effects.script] disable_ui, при использовании оптики через апдейт и т. д.): get_hud():Add/RemoveDialogToRender(cuiw), где cuiw – окно класса CUIWindow или любого из дочерних классов со скриптовым описанием. Вариант: level.add/remove_dialog_to_render(cuiw). Обязательно сохранять такие окна в переменные и чистить их в actor_binder:net_destroy(), если окна могут быть открытыми при перезагрузке (включая смерть при открытом инвентаре).

3. Привязкой к движковым окнам – например, к инвентарю: инфо-поршень ui_inventory + inv = level.main_input_receiver(), затем inv:AttachChild(cuiw). При перезагрузке хотя бы закрывать дочерние окна, а лучше удалять при каждом выходе из инвентаря.

 

Варианты анимации текстур:

1. Цикл с запуском от случайного кадра: текстовый файл с именем текстуры, расширением SEQ и описанием "кадров/с имя имя …" Образец – анимированный указатель мыши. Можно ставить несколько одинаковых кадров для вывода дольше секунды или с долями, вроде "2 кадра в секунду + 3 копии = 1,5 секунды на кадр".

2. Анимация с набором кадров в общей текстуре: XML-описание под заголовком <a_static> (не везде работает) или скриптовый вызов InitAnimStatic(окно, родитель). Образец – анимированные кольца и кубики в заголовках "Энциклопедии".

3. Теги анимации light_anim и xform_anim в XML-описании – мигание с циклом 1 или 2 секунды, поворот на месте, масштаб ±. Список доступных вариантов – [gamedata\lanims.xr].

4. Скриптовая замена текстуры окна по таймеру с привязкой к time_global() через апдейт.

 

Способ запретить диалог или инвентарь, ЕМНИП, в чистом ТЧ только один: отследить любое окно через апдейт level.main_input_receiver() ~= nil или отдельно по инфо-поршням ui_trade / ui_inventory / ui_talk / ui_pda, после чего закрыть окно wnd = level.main_input_receiver() через level.start_stop_menu(wnd) или wnd:GetHolder():start_stop_menu(wnd). Скрипт реагирует на событие вывода окна, так что долю секунды будет и само окно, и взаимодействие с ним.

 

Для закрашивания области карты с учетом перемещения можно, разве что, создать метку level.map_add_object_spot(id, имя, "") с непрозрачной текстурой, но это еще надо сослаться на id какого-то объекта – можно на id рестриктора, если область с логикой, вроде аномалии, тайника или зоны "убрать оружие".

  • Полезно 2
  • Сомнительно 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

@Rod_K 

Практически все ваши хотелки - только под правку движка, некоторые частично можно реализовать скриптовыми кривыми костылями(уже примерно написал NE). Если вы надеетесь на чудо, что кто-то вам щас вынет зайчика из шляпы - забудьте.

  • Не нравится 1
  • Согласен 4

@Rod_K Половину списка можно сделать и без правок движка( мб и больше ),ноо,в исходя из данных вопросов,  ПОКА ЧТО не в твоём случае

  • Согласен 1

Прошу помощи! Не срабатывает проверка:

Скрытый текст

function generic_object_binder:use_callback(obj, who)
    if self.use_flag == nil and self.object:section()~="m_trader" then
    self.object:set_nonscript_usable(false)
    self.use_flag = true

end
    if self.object:alive() or self.used then return end

    local knife = who:item_in_slot(0)
    if who:id() ~= db.actor:id() or (knife~=nil and who:active_slot() == 0) then
    local wnd = mutant_lut.MutaNTlut(obj,who)
    level.start_stop_menu(wnd, true)
    wnd.owner = self
    self.used = true
    else
    news_manager.send_tip(db.actor,"1 есть!")

    if db.actor:item_in_slot(0):condition() <= 0.20 then
    news_manager.send_tip(db.actor,"2 есть!")
end
    return
end
end

 

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

Всем привет, пилил озвучку ГГ во время убийства мутантов на ЗП, все ок, звуки запускаются, но обрываются спустя 2 секунды. С файлами звуков все окей, вне игры воспроизводятся полностью. С чем это может быть связано? Код в bind_monster.script, в функции death_callback:
 

local snd_ppc = {
[clsid.bloodsucker_s] = {'ppc\\kill\\humanoid_1','ppc\\kill\\monster_1'}
}
if snd_ppc[victim:clsid()] then
sound_object(snd_ppc[victim:clsid()][math.random(#snd_ppc[victim:clsid()])]):play(db.actor,0,sound_object.s2d)			
end

 

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

  • Спасибо 1
  • Согласен 1
  • Полезно 2

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

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

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

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

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

Войти

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

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

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