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

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

@naxac @CRAZY_STALKER666 А почему бы и не вот так?)

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

 local can_leave = {

    wpn_knife = true,

    wpn_binoc = true,

    device_pda = true

  }

  local sim, obj = alife(), nil

  db.actor:iterate_inventory(

    function (dummy, item)

      obj = sim:object(item:id())

      if obj and not can_leave[item:section()] then

        sim:release(obj, true)

      end

    end,

  nil )

 

 

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

Братишки, помогите разобраться, что за (цензура).

Скрипты ли это не оптимизированные или движог УГ, не особо предназначен для такого.

В чём суть. Есть мод, в котором спавнятся мутанты (волны), последовательно. 

При этом каждая следующая волна садит FPS. 

В начале игры допустим 200, волна 8-9 уже 30.

Реализация:

1. При убийстве мутанта спавнится в инвертарь ГГ предмет (сделано через скрипт ogsm_mutants, думаю многие знают суть. Моб мёртв - даём предмет).

2. Считаем количество предметов, при определённом количестве даём инфо.

 

function item_2_volna()
local cnt = db.actor:object_count()
local ch=0
for i=0, cnt-1 do
local item = db.actor:object(i)
       if item:section() == "trofey_volna" then
          local sobj = alife():object(item:id())
             if sobj then
      
                    ch = ch+1
                 if ch == 20 then
                  
                    db.actor:give_info_portion("volna_2")

 

if has_alife_info("volna_2") and not has_alife_info("music_volna_2") then
        local snd = sound_object([[gameplay\next_volna]])
        snd:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 1.0)
        db.actor:give_info_portion("music_volna_2")
zombie_timer.next_volna_timer()

if db.actor:object("double_points1") ~= nil then
         del_x2()
end
    
end


 end
end
end
end
end

3. Определили? Спавн следующей волны.

 


function sidor_volna_2()
if level.name() == "predbannik" and not has_alife_info("mob_l2")  and has_alife_info("volna_2") then
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
           db.actor:give_info_portion("mob_l2")
up_remove_corpses()

           save_volna_2()
    end
end

4. Ну и так далее, далее по аналогии.

Что только не пробовал... И переносил спавн волны с помощью кол-ва убитых мобов в xr_statistic (то бишь спавн предмета не причём), 

часть функций переносил в load, а не update (bind_stalker), и есть перерывы между спавном (10 сек... минута... разницы ноль).

И спавн мобов с помощью ogsm_packet, и так далее.

Ничего не помогает.

FPS падает и падает...

Вопрос: в чём проблема, как решить?

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

Если каждая "волна" по 20 штук мутантов (*9=180 нехило так полигонов в кадре прибавилось) то, вполне возможно, что количество мобов и есть причина просадки FPS. Попробуй каждую "волну" заменить на всего одного моба и проверь, что получится. Кстати, проще сделать цикл спона мобов, чем городить кучу одинаковых строк кода:

 for a=1, 20 do
        alife():create("zombie_game2",vector():set(-475,-0.73,-170),288029,967)
end

А, только что заметил - вроде, уборщик трупов есть какой-то? Ну, тогда не знаю :) ...

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

Количество влияет, но не оч сильно. Когда мобов 60, FPS садится чуть быстрее.

Трупы удаляются, даже делал удаление при убийстве половины мобов.

Ничего не помогает. Мне кажется даже если 1 будет, всё тоже самое.

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

Насчёт перезагрузки не знаю, но save\load не помогает.

И опять таки, эти костыли даже если и работали б, всё равно не подойдут для геймплея, отрывают же.

+ в сталкере не мало мест, где много мобов (чаэс) и т.д., но всё нормально. Мне кажется дело не в количестве.

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

Не знаю куда конкретно написать, перенести плз куда правильнее.

У меня тут непонятка какая-то, при запаковке в архивы левелы, если запаковывать вот с таким конфигом:

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

local data_for_levels = [[
[header]
auto_load = true
level_name = single ; former level name, now can be mod name
level_ver = 1.0 ; former level version, now can be mod version
entry_point = $fs_root$\gamedata\ ; do not change !
creator = "Team EPIC" ; creator's name
link = "forum.epicstalker.com" ; creator's link

[options] ; exclude files from compression with such extension
exclude_exts = *.ncb,*.sln,*.vcproj,*.old,*.rc,*.scc,*.vssscc,*.bmp,*.exe,*.cmd,*.bat,*.db,*.xdb,*.bak*,*.bmp,*.smf,*.uvm,*.prj,*.tga,*.txt,*.rtf,*.doc,*.log,*.~*,*.rar,*.sfk,*.tmp,*.xr

[include_folders]
levels\%s\ = true   -- %s - это название левела(и папки)
]]
local data = strformat(data_for_levels, dir)

 

Игра крашится.
А если запаковывать вот с таким конфигом:

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

 


local data_for_levels = [[
[header]
auto_load = true
level_name = single ; former level name, now can be mod name
level_ver = 1.0 ; former level version, now can be mod version
entry_point = $fs_root$\gamedata\ ; do not change !
creator = "Team EPIC" ; creator's name
link = "forum.epicstalker.com" ; creator's link

[options] ; exclude files from compression with such extension
exclude_exts = *.ncb,*.sln,*.vcproj,*.old,*.rc,*.scc,*.vssscc,*.bmp,*.exe,*.cmd,*.bat,*.db,*.xdb,*.bak*,*.bmp,*.smf,*.uvm,*.prj,*.tga,*.txt,*.rtf,*.doc,*.log,*.~*,*.rar,*.sfk,*.tmp,*.xr

[include_folders]
.\ = true

[exclude_folders]
ai\ = true
anims\ = true
%s\ = true
;levels\ = true
meshes\ = true
scripts\ = true
shaders\ = true
sounds\ = true
spawns\ = true
textures\ = true
]]
local data = strformat(data_for_levels, type_dbs[ahkGetVar("UICoCDBToolDBToolListDbTypePack"..tab)])   -- под %s подставляется название папки с конфигами "configs"
   for k,v in pairs(level_directories) do   -- к data приписываются пути к каждому левелу, кроме того, который запаковываем, для исключения всех левелов, кроме пакуемого
    if (k ~= dir) then
     data = data .. "\nlevels\\" .. k .. "\\ = true"
    end
   end

То всё нормально, и не крашится.
Где косяк? В компрессоре или движке?

 


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

Подскажите, пожалуйста, как отловить момент выстрела из РПГ через скрипт?

Суть вопроса: У меня РПГ - 22 (одноразовый), выстрел, и у нас в место РПГ остается пустой контейнер. Платформа: ТЧ  1.0004

Ссылка на РПГ -22 https://yadi.sk/d/h0V8gPx83LN9aU

Pir%40t%40s.gif

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

Копался в sr_timer.script. Возникли вопросы.

1.Как выключить отображение счётчика на экране? Сколько не пытался - пока что только вылеты.

2. Почему функция action_timer:save(), которая, как я понимаю, сохраняет в pstor счётчик - закоментирована?

 

Вот полный скрипт, чтобы не искать его.

http://rgho.st/6N7YS9FmH

Не соответствует правилам.

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

@CRAZY_STALKER666

1. Закомментируй строки: 36, 49-52, 88-96.

2. Потому что запись нужных данных делается в функции xr_logic.save_logic() при сохранении рестриктора. Аналогично для чтения.

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

Здравствуйте. Есть такой код

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

function particle(self)  -- прописана в xr_motivator на хит_колбэке
   local victim = self.object
   local weapon = db.actor:item_in_slot(2)  
    if db.actor:active_slot()==2 and weapon and weapon:section()=="оружие" then
     if victim:who_hit_name()=="single_player" and victim.health < 1 then
   ash_particle(self)
     end
   end
end

 

function ash_particle(self)
   local victim = self.object
   local sect = victim:section()
   local type = {"stalker","neutral","dolg","freedom","soldier"} -- список значительно сокращен
   local ash = particles_object("путь_до_партикла")
    for t = 1,20 do
      if not string.find(sect,type[t]) then
      ash:play_at_pos(victim:position())
      end
   end
end

 

Задумка в том, чтобы партиклы проигрывались у всех подстреленных, кроме указанных в таблице. При этом если вместо строчки
      if not string.find(sect,type[t]) then
сделать просто перечисление
      if not (string.find(sect,"stalker") or string.find(sect,"neutral") or string.find(sect,"dolg") or string.find(sect,"freedom") or string.find(sect,"soldier")) then  -- соответственно список значительно сокращен
то все работает как надо. Что я упустил?

New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор

Русификатор для игры Vendetta: Curse of Raven's Cry

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

@Jekyll , попробуй так

function ash_particle(self)
	   local victim = self.object
	   local sect = victim:section()
	   local type = { "stalker", "neutral", "dolg", "freedom", "soldier" } -- список значительно сокращен
	    for t = 1,20 do
	      if string.find( sect, type[t] ) then return end
	   end
	   local ash = particles_object("путь_до_партикла")
	   ash:play_at_pos(victim:position())
	end

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

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

naxac.gif

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

2 Jekyll - в твоём коде с таблицей на каждую "подходящую" жертву будет по 20 раз (сколько итераций указано, если нет ни одного совпадения) срабатывать установка партикла. Проверка же набора строк вернёт всего лишь одно значение - верно/не верно. Поэтому во втором случае результат положительный.

Кстати, строчку

for t = 1,20 do

лучше сразу заменить на

 for t = 1,table.getn(type) do

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

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

Jekyll

Я могу сейчас всё расписать от и до.
Только один вопрос - Почему именно до двадцати?

for t = 1,20 do

В чём сакральная задумка?

P.S. Нет, я и так вижу что человек не разбирается. Просто хотелось определиться что именно нужно.
P.P.S. А что это с редактором? Жесть какая-то при изменении. Но это в общем-то не особо важно.

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

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

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

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

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

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

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

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

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

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

Войти

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

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

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