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

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

9 часов назад, 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 can_leave[item:section()] == nil then

        sim:release(obj, true)

      end

    end,

  nil )
 

 

куда это нужно приписывать что бы активировать?

Pir%40t%40s.gif

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

@KURT2013 В диалог, например. А вообще - куда хочешь... Не забудь границы функции определить.

  • Нравится 1

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

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

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

@=VENOM= Я согласен, но мне кажется лаконичней)

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

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

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

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

При этом каждая следующая волна садит 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 будет, всё тоже самое.

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

Интересно... А перезагрузка уровня (выход-вход обратно на локацию) после отстрела всей массы мутантов как-то влияет на FPS?

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

Насчёт перезагрузки не знаю, но 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
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

AMK-Team.ru

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