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

[SoC] Ковыряемся в файлах


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

(ну тогда продолжим конкретным кодом для чисток респавнеров)

Правим файл se_respawn.script исходной игры, хотя и к модифицированным вариантам применимо:

 

1. Добавляем в конец конструктора класса se_respawn (например перед 'function spawn(name)') новую функцию расширенной чистки:

--/ -----------------------------------------------------------------------------------------------
--/#+# Clearing: проверка и очистка списков уже заспавненных объектов
--/ удаляются идентификаторы объектов (ID): мертвых, уничтоженных, изъятых из ящиков или с невалидными секциями
--/ -----------------------------------------------------------------------------------------------
function se_respawn:clear_spawned()
  --/ проверка: респавнер инициализирован, список не пуст и окончен тайм-аут
  if self.respawn_section and next(self.spawned_obj) and (self.tm_clear or 0) < time_global() then
    self.tm_clear = time_global() + 5000 --/ обновляем тайм-аут: проверять 1 раз в 5 секунд
    for k,v in pairs(self.spawned_obj) do --/ итерация по списку заспавненных ID (v)
      local bRemove = false --/ метка для удаления записи из списка
      local Obj = level.object_by_id(v) or alife():object(v) --/ объект в игре?
      if not Obj then --/ удаленный объекта
        bRemove = true
      elseif IsMonster(Obj) or IsStalker(Obj) then --/ сталкер/монстр?
        if self.item_spawn then --/ если спавнились предметы ('предметный' респавнер)
          bRemove = true
        elseif Obj.alive and not Obj:alive() then --/ если объект мертв
          bRemove = true
        end
      elseif self.parent then --/ для респавнеров 'в ящик'
        --/ проверка 'валидности владельца' при спавне 'в ящик'
        local idParent = Obj.parent_id or (Obj.parent and Obj:parent() and Obj:parent():id()) --/ ID владельца объекта
        local soParent = idParent and alife():object(idParent) --/ текущий владелец объекта(предмета)
        if not soParent then --/ объект не имеет владельца (или не предмет)
          bRemove = true
        elseif soParent.m_story_id ~= self.parent then --/ SIDы не соответствуют? (объект не в 'своем' ящике)
          bRemove = true
        end
      end
      if not bRemove then
        --/ проверка соответвия секции объекта списку секций респавнера
        local sSection = (Obj.section and Obj:section()) or (Obj.section_name and Obj:section_name()) or "nil"
        local bValided = false --/ метка соответствия
        for _,vv in ipairs(self.respawn_section) do
          if sSection == vv.section then --/ секция объекта соответствует списку?
            bValided = true
            break
          end
        end
        bRemove = not bValided
      end
      if bRemove then --/ чистить?
        --if Obj then printf("clear_spawned:Respawner=[%s/%s]:Del(%s)=[%s]:Obj=[%s]:(%s):[%s]", self:name(), self.id, k, v, Obj:name(), #self.spawned_obj, "x") end --/#~#
        table.remove(self.spawned_obj, k)
      end
    end
  end
end
--/ -----------------------------------------------------------------------------------------------

 

2. Заменяем это:

-- Попытка спаунить объекты. Анализируется сколько уже заспавнено и выбирается один из механизмов - либо 
-- мы доспавниваем до минимального количества, либо спавним с заданной вероятностью
function se_respawn:spawn()
--  printf("RESPAWN: [%s] spawn execute", tostring(self:name()))
  
  -- Пробегаемся по списку уже заспавненных объектов и удаляем из них мертвые либо уничтоженные.
  for k,v in pairs(self.spawned_obj) do
    local obj = level.object_by_id(v)
    if obj == nil then
      obj = alife():object(v)
    end
    
    if obj ~= nil then
      if (IsStalker(obj) or IsMonster(obj)) and obj:alive() ~= true then
        table.remove(self.spawned_obj, k)
      end
    else
      table.remove(self.spawned_obj, k)
    end
  end 

  if xr_logic.pick_section_from_condlist(db.actor_proxy, self, self.conditions) == "0" then
...

на это:

-- Попытка спаунить объекты. Анализируется сколько уже заспавнено и выбирается один из механизмов - либо 
-- мы доспавниваем до минимального количества, либо спавним с заданной вероятностью
function se_respawn:spawn()
--  printf("RESPAWN: [%s] spawn execute", tostring(self:name()))
  
  self:clear_spawned() --/#+# проверка и чистка списков заспавненного
  
  if xr_logic.pick_section_from_condlist(db.actor_proxy, self, self.conditions) == "0" then
...

 

Дополнительно можно добавить вызов очистки при сохранении пакета респавнера в сэйв, дабы не записывать в сэйв 'мусор':

-- сохранение
function se_respawn:STATE_Write( packet )
  cse_alife_smart_zone.STATE_Write( self, packet )
  self:clear_spawned() --/#+# проверка/чистка списка заспавненного
  local table_size = table.getn(self.spawned_obj)
...

 

Т.о. списки респавнеров всегда будут актуальны и можно перебалансировать параметры респавна в более логичную сторону.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Артос спасибо, потестирую на выходных. Что то мне подсказывает что ты не обошел вниманием _g.script - уж больно много там мусора. Если да то отпиши, будет интересно посмотреть.

 

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

Andrey07071977

Хм ... а почему бы не взглянуть в коды SIMBION'а, который и является текущим материалом того, что мною наработано и уже хоть в каком-то рабочем (играбельном) состоянии?

Там не только _g.script вычищен и переработан ... , тот же se_respawn.script перелопачен основательно, и пр. ...

Писать сюда кусками - так весь топик будет в описании и толковании кодов.

(см. в мастерской на сайте мода текущую альфа-сборку)

 

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

В последнее время в момент наступления на воду происходит вылет с логом:

FATAL ERROR

 

[error]Expression : SG

[error]Function : CRender::model_CreateParticles

[error]File : E:\stalker\patch_1_0004\xr_3da\xrRender_R2\r2.cpp

[error]Line : 330

[error]Description : Particle effect or group doesn't exist

[error]Arguments : hit_fx\hit_water_00

 

Я пробовал декомпилировать и вставить партикл,но:

1-Я этого партикла нигде не нашёл

2-Я пробовал скопировать hit_water_01 и переименовать.Скомпилировал.Но при повторной декомпиляции этого hit_water_00 уже нету.

Ссылка на комментарий
Арбитр, у тебя нет этого партикла надо заменить в свойствах материалов партикл на тот который у тебя имеется

S.T.A.L.K.E.R 1.004, Народная..Солянка от 19.04.10, дополнение 14.08.10, патч 3.09.10, DMX 1.3.5, Saruman addon 1.1

Vkontakte

Добавление нового транспорта в сталкер

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

Народ, подскажите как заспаунить стационарный пулемет? Очень странно, что до сих пор этот вопрос не решили, по крайней мере ответа на форуме я не нашел. С помощью команды alife():create("stationary_mgun"... он спаунится, но невидимый и не рабочий. Через аллспаун тоже не могу, все конфиги перепробовал.

 

"Народ безмолствует ..." © А.С.Пушкин "Борис Годунов"

Задавая вопрос не клич толпу. --/Artos

Изменено пользователем Artos
Ссылка на комментарий
Roman82, его можно заспаунить, но при посадке в него тебя вместе с ним перенесет по координатам 0,0,0

S.T.A.L.K.E.R 1.004, Народная..Солянка от 19.04.10, дополнение 14.08.10, патч 3.09.10, DMX 1.3.5, Saruman addon 1.1

Vkontakte

Добавление нового транспорта в сталкер

Ссылка на комментарий
Roman82 В Шадовс аддоне на РМА помню когда ридми читал, там был такой пункт, что реализованы или восстановлены станционарные пулеметы, посмотри последнюю версию аддона..

FANAT.gif

Мой канал на ютабчике... / Недельки из жизни фаната STALKER'a / Клуб 'Фанат Отчуждения'

Я нет-нет, а думаю, может я неправильно жил, надо ж брать деньги у богатых и давать их бедным, а таким как ты давать по морде, шоб у мире была красота и гармония.(с)Ликвидация

Всё в порядке, всё нормально, я беру тебя с собой, я беру тебя с собой. В тёмный омут головой.(с)Смысловые Галлюцинации

Ссылка на комментарий
FANAT, там не в описании не в аддоне их нет, там: "Добавлены стационарные компьютеры" Изменено пользователем saruman_ten

S.T.A.L.K.E.R 1.004, Народная..Солянка от 19.04.10, дополнение 14.08.10, патч 3.09.10, DMX 1.3.5, Saruman addon 1.1

Vkontakte

Добавление нового транспорта в сталкер

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

Вопрос снят. Нельзя его заспаунить, или доделывать модель нужно или забить. Скорее всего второе. Всем большое спасибо за ответы.

 

Если снят, то можешь проигнорировать...

Стационарные пулемёты, хотя наверно больше турели, были в Zenobian mod.

ColR_iT

 

Добавлено через 324 мин.:

Стационарные пулемёты, хотя наверно больше турели, были в Zenobian mod

Да турели то не вопрос, спаунятся без проблем. Нужен именно стационарник для юзания.

Всех с наступающим! :)

 

Добавлено через 17 мин.:

Мне все неймется. :) Подскажите пожалуйста кто в курсе, с какого билда скрины? -

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

Roman82, Максим Р. выкладывал скрин, на кордоне на мешках с песком установлен ПКМ, он хотел в РМА это сделать, на болотах для квеста с волной мутантов, вроде как станционарник, попробуй у него узнать..

===

Не не эти скрины, а в ТЧ(мошь + РМА)..

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

FANAT.gif

Мой канал на ютабчике... / Недельки из жизни фаната STALKER'a / Клуб 'Фанат Отчуждения'

Я нет-нет, а думаю, может я неправильно жил, надо ж брать деньги у богатых и давать их бедным, а таким как ты давать по морде, шоб у мире была красота и гармония.(с)Ликвидация

Всё в порядке, всё нормально, я беру тебя с собой, я беру тебя с собой. В тёмный омут головой.(с)Смысловые Галлюцинации

Ссылка на комментарий
FANAT, там это переделаная локация вроде бы, там координаты 0,0,0 сделаны именно в той точке на блокпосте

S.T.A.L.K.E.R 1.004, Народная..Солянка от 19.04.10, дополнение 14.08.10, патч 3.09.10, DMX 1.3.5, Saruman addon 1.1

Vkontakte

Добавление нового транспорта в сталкер

Ссылка на комментарий
saruman_ten, Ды он тестил на Кордоне просто, я ж говорю что на болотах билдовских планировалось..

FANAT.gif

Мой канал на ютабчике... / Недельки из жизни фаната STALKER'a / Клуб 'Фанат Отчуждения'

Я нет-нет, а думаю, может я неправильно жил, надо ж брать деньги у богатых и давать их бедным, а таким как ты давать по морде, шоб у мире была красота и гармония.(с)Ликвидация

Всё в порядке, всё нормально, я беру тебя с собой, я беру тебя с собой. В тёмный омут головой.(с)Смысловые Галлюцинации

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

S.T.A.L.K.E.R 1.004, Народная..Солянка от 19.04.10, дополнение 14.08.10, патч 3.09.10, DMX 1.3.5, Saruman addon 1.1

Vkontakte

Добавление нового транспорта в сталкер

Ссылка на комментарий
Gaz24, Можно посмотреть в Шадовс аддоне и ДМХ, лучше в Шадовс аддоне..

FANAT.gif

Мой канал на ютабчике... / Недельки из жизни фаната STALKER'a / Клуб 'Фанат Отчуждения'

Я нет-нет, а думаю, может я неправильно жил, надо ж брать деньги у богатых и давать их бедным, а таким как ты давать по морде, шоб у мире была красота и гармония.(с)Ликвидация

Всё в порядке, всё нормально, я беру тебя с собой, я беру тебя с собой. В тёмный омут головой.(с)Смысловые Галлюцинации

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

Max_Plohih, для работы с рангами в классе game_object имеется два метода:

    void set_character_rank(int char_rank);
           //устанавливает ранг объекта равным char_rank
    int character_rank();
       //возвращает ранг объекта.

Если хочется наладить свою систему рангов, отлавливай в биндерах сталкеров и монстров их смерть и увеличивай ранг убийце.

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

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

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

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

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

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

Войти

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

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

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