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

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

Здрасьте.

 

ЧН 1.5.10, расстановка меток NPC в [sim_squad_generic.script].

 

Задача: скрыть метки отрядов противника при переключении статуса нейтрал/враг.

Решение: добавить проверку по имени метки – if not string.find(spot, "enemy") …

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

В указанном скрипте есть проверка "при наличии лидера отряда проверять отношение ГГ к нему". Отряд не был обстрелян, лидер у него точно есть и, судя по метке, остался нейтральным, но атакует как свидетель нападения.

 

Как принудительно сделать такой отряд враждебным, чтобы скрыть метку?

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

Шпаргалка

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

@Norman Eisenherz, game_relations.set_squad_goodwill(squad_id, "enemy").

И вообще, стоит поизучать этот модуль и его применение в других скриптах и логике.

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

@Kirgudu Как определить, что отряд стал враждебным и, возможно, уже начал стрелять по ГГ, оставаясь при этом на нейтральном отношении? Какой параметр отряда меняется, когда отряд становится свидетелем нападения?

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

Шпаргалка

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

@Norman Eisenherz, достаточно определить, что командир отряда стал враждебным, ведь метка отряда вешается на него.
См. commander:general_goodwill(db.actor) в модуле sim_squad_generic.script (commander определяется там же) и дальнейшее использование этого показателя. При определённых его значениях можно вызывать self:hide() / self:show(), что приведёт к нужному результату.

Изменено пользователем Kirgudu
была ошибка в названии метода
Ссылка на комментарий

Вот именно там и смотрю, и именно эта проверка при явном наличии командиров выдает для соседних отрядов отношение "нейтрал".

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

Шпаргалка

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

Всем здравия. Имеется вопросик : можно ли нанести хит НПСу находясь оффлайн от него. Например на другой локе. СИД у НПСа есть.

Пробовал так, но не сработало, только находясь в зоне алайфа убивает.

function hit (actor, npc)
    local source = nil
    local sim = alife ()
    if sim then
       local se_obj = sim:story_object (9450573052- СИД)  
       if se_obj then
          source = level_object_by_id(se_obj.id)
       end
    end
    if source == nil then
        return
    end
    local h = hit ()
    h.power = 2000
    h.direction = vector():set( 1, 0, 0 )
    h.impulse = 60
    h.draftsman = source
      h.type = hit.fire_wound
    source:hit (h)
end

 

Есть ли вообще такой способ ? Гугл читал, форумы курил. Не нашёл ничего.

Спасибо.

"Кругом зомби.....у меня кончаются патроны...."

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

@BFG

Хит возможен только по клиентскому объекту, а в оффлайне его нет. Пробуй через установку health в 0.

Добавлено BFG,

Хмммм... мдааа. Спасибо большое за идею и за новые познания.

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

Доброго времени! 

Есть ли способ проверить, что ГГ из текущего активного оружия прямо сейчас целится правой кнопкой мыши?

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

Прошу помощи. Игра ОП-2.1, вымогатель антирадов Гарик, на входе к ремонтникам. Хотелось пересадить его на еду. Но не на одну колбасу, консерву, батон, а комплектом. например батон-колбаса- пиво, батон-консерва-водка, буттерброд-батончик-фляжка. Все фалы нашёл, текст исправил. Не соображу как прописать в скрипте три названия продукта, через запятую, через тире, что бы он забирал их за раз. Подскажите как? Строки на антирады в скрипте, выглядят так;

 

function give_antirad(first_speaker, second_speaker)
    lost("antirad", 1)
end
function antirad_have()
    return has("antirad",1)

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

MinyaUr.gif

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

@Minya Как-то так:

function give_antirad(first_speaker, second_speaker)
    lost("батон", 1)

    lost("колбаса", 1)

    lost("пиво", 1)
end
function antirad_have()
    return (has("батон",1) and has("колбаса",1) and has("пиво",1))

end

Секции продуктов пропишешь как надо.

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

@dsh, огср, да

Огромное спасибо, скоро проверю :)

@dsh Метод работает! А есть ли способ проверить, нажал ли ГГ левую кнопку мыши, иначе говоря - выстрелил? 

Нужно скриптово отследить момент, когда ГГ, удерживая зум, выстрелит, и вызвать ф-цию в момент выстрела...

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

Можно обратиться к движковому счетчику патронов: если active_item:get_ammo_in_magazine() и active_item:get_ammo_total() уменьшились на одну величину, это как раз выстрел.

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

Шпаргалка

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

Решил по быстрому заспавнить освещение скриптом. Использовал код из AEM (для смены освещения на арене). Всё спавниться и работает, но после сейв/лоада объекты меняют свой direction. По висячим лампам "ильича" этого не видно, а несимметричные объекты, типа настольной лампы, доставляют. Думаю, в коде нужны дополнительные манипуляции с direction и если так, то какие? Код почти без правок, добавил аргументы lvid и gvid:

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

function v3f(x,y,z) 
    return vector():set(x,y,z)
end

 

пример спавна

add_lamp(v3f(139.67343139648,-6.1285934448242,180.18035888672),1203772,3686,v3f(0,-1.0,0),"physics\\light\\lampa_01_on",0.8,true)

 

function add_lamp(pos, lvid, gvid, dir, visual, brightness, shadow, color)
    local light_flags = 56                
    if shadow then light_flags = light_flags + 2 end
    local packet = net_packet()
    packet:w_u16(gvid)
    packet:w_float(0.0)
    packet:w_s32(1)
    packet:w_s32(lvid)
    packet:w_s32(-70)                
    packet:w_stringZ("")
    packet:w_s32(-1)
    packet:w_s32(-1)
    packet:w_stringZ(visual)
    packet:w_u8(0)
    packet:w_stringZ("$editor")
    packet:w_u8(0)
    packet:w_u16(-1)
    if color ~= nil then
        packet:w_s32(color)
        packet:w_float(brightness)
        packet:w_stringZ("")
    else
        packet:w_s32(-1)
        packet:w_float(brightness)
        packet:w_stringZ("light\\light_omni_white_idle")
    end
    packet:w_float(14.0)
    packet:w_u16(light_flags)
    packet:w_stringZ("$editor")
    packet:w_stringZ("link")
    packet:w_float(100.0)  
    packet:w_float(0.1)    
    packet:w_float(4.0)    
    packet:w_float(0.3)    
    packet:w_stringZ("")
    packet:w_stringZ("")
    packet:w_stringZ("bone_lamp")  
    packet:w_float(1.0)            
    packet:w_stringZ("")
    packet:w_float(0.7) 
    packet:w_stringZ("bone_omni")

    local se_obj = alife():create("aem_lamp", pos, lvid, gvid)
    se_obj:STATE_Read(packet, packet:w_tell())

    if dir ~= nil then
        se_obj.direction = vector():set(dir)
    end
end

После спауна (как запланировано):

https://yadi.sk/i/Wqubj3MUGLwvhA

После сейв/лоада(повёрнута):

https://yadi.sk/d/aqF7QfAZH5y5GQ

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

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

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

Здрасьте.

 

Задача: создать одноименный текстовый файл при создании сейва.

В [ui_save_dialog.script] можно отследить имя и создать свой файл при сейве через меню "Сохранить игру". Как сделать то же самое при вводе имени нового сейва через консоль?

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

Шпаргалка

Ссылка на комментарий
9 часов назад, Norman Eisenherz сказал:

Как сделать то же самое при вводе имени нового сейва через консоль?

Скорее всего никак. Не предусмотрен никакой кэллбэк на это действие, соответственно отследить его не получится.

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

Ссылка на комментарий
29.10.2020 в 18:26, _Sk8_AsTeR_ сказал:

А есть ли способ проверить, нажал ли ГГ левую кнопку мыши, иначе говоря - выстрелил?

Таки вы для начала определитесь, собираетесь вы ловить нажатие ЛКМ, или ловить событие выстрела.

Это разные события. В ОГСР ловится и то и другое.

Нажатия - callback.on_key_press (и там надо ловить код клавиши),

Выстрел - callback.on_actor_weapon_fire,

Начало стрельбы - callback.on_actor_weapon_start_firing - от предыдущего отличается тем, что при стрельбе очередью будет вызван только 1 раз.

  • Полезно 3

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий
6 часов назад, AndreySol сказал:

слепить скриптовые костыли, типа мониторинга на апдейте кол-ва файлов

Лучше тогда при сохранении (вызове метода save биндера того же актёра) - сделать небольшой таймаут и получить самый новый файл из папки сохранений, его и переименовывать. 

  • Согласен 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

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

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

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

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

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

Войти

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

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

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