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

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

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

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

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

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

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

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

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

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

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

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

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

    Войти

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

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

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

    AMK-Team.ru

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