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

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

Господа, нужна ваша помощь. Кто шарит в скриптах? Хочу сделать комментарии к сообщениям о смерти сталкеров( чтобы сами НПЦ комментировали чью-либо смерть). 

Вот функция, отвечающая за выдачу новости о смерти сталкера:

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

-- Погиб сталкер.
-- Собираем инфу о погибшем
-- Собираем инфу о виновнике смерти
-- Готовим сообщение
function on_stalker_death(victim_, killer_)
 local rnd = math.random
 if (victim_ == nil) then
  return
 end
 local m_killer = ""
 local m_killer_s = ""
 local m_victim = ""
 local victim
 if (isGameObject(victim_)) then
  victim = victim_
 else
  victim = get_obj(victim_.id)
 end
 local killer
 local m_name  = get_npc_name(victim)
 m_victim = format_death_stalker_corpse(victim)
 local m_level = get_level_name(get_object_levelname(victim))
 if (killer_) then
  if (isGameObject(killer_)) then
   killer = killer_
  else
   killer = get_obj(killer_.id)
  end
  if (IAmAMonster[killer:clsid()]) then
   m_killer = format_death_by_monster(killer)
   m_killer_str = get_monster_name(killer, 2)
  elseif (IsAnomaly(killer)) then
   m_killer = format_death_by_anomaly(killer)
   m_killer_str = get_anomaly_name(killer, 1)
  elseif (IsNpcStalker(killer)) then
   local m_o_weapon = get_npc_weapon(killer)
   local m_s_weapon = ""
   if (m_o_weapon) then
    m_s_weapon = get_weapon_type(m_o_weapon)
    if (m_s_weapon < 5) then m_killer_str = "пулевое ранение" end
    if (m_s_weapon == 6) then m_killer_str = "нож" end
    if (m_s_weapon == 8) then m_killer_str = "ожоги" end
    if (m_s_weapon == 7 or m_s_weapon == 5) then m_killer_str = "граната" end
   end
   if (IsNpcActor(killer)) then
    add_killed_by_actor(victim) -- Отметим, что это ГГ постарался.
   end      
   m_killer = format_death_by_stalker(killer)
  elseif (IsNpcOther(killer)) then
   local m_o_weapon2 = get_npc_weapon(killer)
   local m_s_weapon2 = ""
   if (m_o_weapon2) then
    m_s_weapon2 = get_weapon_type(m_o_weapon2)
    if (m_s_weapon2 < 5) then m_killer_str = "пулевое ранение" end
    if (m_s_weapon2 == 6) then m_killer_str = "нож" end
    if (m_s_weapon == 8) then m_killer_str = "ожоги" end
    if (m_s_weapon2 == 7 or m_s_weapon2 == 5) then m_killer_str = "граната" end
   end
   m_killer = format_death_by_stalker(killer)
  else
   m_killer_str = "причина смерти - неизвестна"
   m_killer = ""
   if _debug == true then mylog("On stalker death - unknown killer. "..killer:name().." clsid="..get_clsid(killer)) end
  end
 end
 if (m_killer_str==nil or m_killer_str=="") then m_killer_str = "причина смерти - неизвестна" end
 local m_string = m_name..". "..m_level..", "..m_killer_str.."."
  do_news(m_string, "Погиб сталкер:", rnd(timer_stalker_death, timer_stalker_death * 3), 10, "death", nil, 1)   --------оригинальная строчка вывода сообщения на экран


  amk.send_tip("ТЕКСТ КОММЕНТАРИЯ НПЦ",  "ИМЯ НПЦ ", time, show time, "death(иконка)")         ---------этой строчкой рандомные НПЦ должны оставлять комментарии

  end

end
  

 


Суть проблемы вот в чем: строчка Do_News - тут прописан хитрый механизм, чтобы не засорять нам экран сообщениями о смертях, когда мы убили разом целую группу сталкеров (гранатой, например). Поэтому если мы разом убьем сразу 10 человек, придет только одно сообщение о смерти какого-нибудь из этих жмуриков..  Зато тут же через  amk.send_tip покажутся сразу 10 сообщений с комментариями. 

И вот тут мне нужна ваша помощь, скриптеры. Помогите как-нибудь реализовать такой механизм, чтобы либо:  1) Комментарий (amk.send_tip) вызывался бы только после вывода сообщения (do_news) о смерти НПЦ на экран (сделать какую-то зависимость, не знаю), либо 2) тоже сделать "антиспам", чтобы на 10 практически одновременных сообщений о смерти сталкеров (do_news) отобразился бы только один комментарий (amk.send_tip).

Есть какие-нибудь идеи?

 

Добавлено Ixterra,

Для таких сообщений на сайте есть свой форум "Школа моддинга", а в нем тема "Скрипты\конфиги\движок". Спроси там. Удачи. Ixterra.

Добавлено  HellRatz,

Перемещено.

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

Здравствуйте, где-то видел фишку, в CoM кажется, там вроде в инвентаре лом перетаскиваешь на оружие и оно разбирается, не подскажите код?

  • Полезно 1
Ссылка на комментарий

Не нахожу нет-пакета куда записываются не стартовые диалоги НПС, есть пакет только для стартовых диалогов. Кроме как в XML профиле, больше ни как нельзя НПС задать нестартовые диалоги?

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

Камрады скриптовики!

 

Не дайте помереть, да поможите провести дебаг!

В моей сборке что-то адски жрёт fps.

Адски именно. Движок от ОГСЕ. При максимальных настройках на паузе имею 150 fps. А при игре 20-30 fps на открытых уровнях и 40-50 fps в подземельях.

Жрёт что-то в скриптах, ибо если иногда происходит какой-то сбой у актора при загрузке, то в игре подскакивают до этих 150 fps.

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

Вещи, висящие на апдейте актора, пробовал отключать - изменений нет.

 

Где пробовать копать?

---------------------------------

www.amk-zone.de

Ссылка на комментарий
1 час назад, Wlad777 сказал:

Где пробовать копать?

Понатыкать profile_timer в апдейте и увидеть, где надо копать?

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

С помощью profile_timer можно замерить время выполнения куска кода(методы в lua_help.script). Расставляешь пару замеров в апдейте, находишь тормозящий кусок, расставляешь в нем, и так пока не поймешь в чем дело.

  • Спасибо 1
Ссылка на комментарий

@Wlad777 вот так как-то

local pt = profile_timer()
pt:start()
-- подозрительный код
pt:stop()
log2( "работало %s ms", pt:time() )

 

  • Спасибо 2
  • Полезно 2
Ссылка на комментарий

Вопрос по воронам - их класс вообще полностью поддерживает скриптовую обвязку bind_monster?

Попробовал добавить строку вида:

script_binding = bind_monster.bind

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

Код:

 --if string.find(self.object:section(), "m_crow") then - не работает
 if self.object:section() == "m_crow" then - тоже метод не работает
 if not has_alife_info("crow_dead") then db.actor:give_info_portion("crow_dead") end
 end

Upd. подсмотрел метод в моде OLR, кому интересно - смотрите скрипт bind_crow.

Изменено пользователем Капрал Хикс
неактуальность помощи
  • Полезно 1
Ссылка на комментарий

У меня вопрос из области GUI, можно ли сделать скролл InitStatic'ку, а то большой текст за статик вылазит?

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

875a05134f48783c7a06e360ae333289.jpg

 

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

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

 

Если это реально. То как. Прошу примера т.к. подобного не встречается ни в одной из игр оригинала?

Изменено пользователем Lebedev30
Ссылка на комментарий
Только что, Lebedev30 сказал:

можно через скрипты или как-то блокировать срабатывание перехода с локации на локацию

Можно спавнить переход по условию, до определённого события перехода просто не будет.

  • Согласен 1
Ссылка на комментарий
1 hour ago, Graff46 said:

сделать скролл InitStatic'ку

Я делаю scroll

    <descr_scroll x="247" y="10" width="355" height="150" always_show_scroll="0"/>
  self.descr_scroll = xml:InitScrollView(
    "main_dialog:descr_scroll", self.dialog
  )

и к нему уже аттачу статик с текстом

    <descr_text x="0" y="0" width="335" height="250" complex_mode="1">
      <font font="letterica16" r="255" g="255" b="255"/>
    </descr_text>
  self.item_descr = self.xml:InitStatic(
    "main_dialog:descr_text", self.descr_scroll
  )
  self.item_descr:SetText( self:get_item_description( ui_item.data ) )
  self.item_descr:AdjustHeightToText()

 

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

@Lebedev30 Как вариант: перед переходом поставить большой рестриктор и в логике вызывать функцию, когда ГГ будет внутри. А в функции телепортировать (например 2 метра назад) и развернуть ГГ и написать сообщение на экран типа "Переход заблокирован". После выполнения квеста, рестриктор удаляем.

  • Согласен 1
Ссылка на комментарий
5 часов назад, Graff46 сказал:

Можно спавнить переход по условию, до определённого события перехода просто не будет.

Вот только тогда игрок сможет выйти за пределы локации и упасть например)

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

Здравствуйте ВАМ. Как можно в ТЧ...04 сделать арты, увеличивающие переносимый вес? 

Одна голова хорошо, а две лучше. А вот три, это уже змей Горыныч.

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

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

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

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

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

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

Войти

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

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

AMK-Team.ru

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