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

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

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

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
Ссылка на комментарий

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

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

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
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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