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

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


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

KD87 Спасибо, конечно. Но как это сделать? Я с нет пакетами не работаю вообще. Да и не будет ли это приводить к битым сейвам, перегрузкам стека и прочим мелким радостям?

 

З.Ы.: Если есть желание, объясни пожалуйста, как это можно реализовать?

З.З.Ы.: А нет ли в СДК 0.7 готовых галочек и т.п. для того чтобы НПС не уходил в оффлайн? Я конечно не нашел, но может у кого-то более глубокие знания в СДК 0.7 чем у меня. Неужели разрабам не понадобилась такая функция для НПС? :(

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

karavan,

А нет ли в СДК 0.7 готовых галочек и т.п. для того чтобы НПС не уходил в оффлайн?

Неписи уходят в онлайн/оффлайн по скриптовым правилам, не просто на основе некой галочки. Для этого в серверном классе сталкеров и кажется ещё монстров есть методы can_switch_online/can_switch_offline. Они периодически вызываются движком (примерно раз в секунду) и возвращают логическое значение, которое соответственно и говорит движку, можно или нет сменить состояние непися. Посмотри их, там имеется некая логика на основе в том числе наличия инфопорций и пр.

 

Для неживых объектов движок опрашивает два серверных флажка, имеющих тот-же самый смысл. Их установить можно с помощью вызовов

alife():set_switch_online(id, <true/false>)

alife():set_switch_offline(id, <true/false>)

Не проверял, но кажется тоже самое делают вызовы can_switch_online/can_switch_offline с логическим аргументом. Флажок опять же проверяется не для всех объектов. Для некоторых движок просто всегда возвращает находиться в онлайне или оффлайне вне зависимости от чего бы то ни было.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий
karavan, самое смешное, что в в параметрах НПС в СДК 0.7 есть галочки can_switch_online/can_switch_offline, но кто спавнит НПС в ЗП через СДК? Правильно, никто... Поэтому я даже не проверял, работает ли это.
Ссылка на комментарий

Clayman,

в параметрах НПС в СДК 0.7 есть галочки can_switch_online/can_switch_offline, но кто спавнит НПС в ЗП через СДК? Правильно, никто...

Эти галки есть у всех объектов во всех версиях SDK, поскольку это базовый серверный флажок, но эффект имеют разный, примерно как я описал выше.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

karavan: ... как сделать что бы НПС в скваде не переходил в оффлайн?
KD87: ... переводите непись в оффлайн, переписываете ему нет-пакет, заменяя object_flags. Из object_flags убираете флаг flCanSwitchOffline.
karavan: Но как это сделать? Я с нет пакетами не работаю вообще. ... объясни пожалуйста, как это можно реализовать?

1. Берешь готовый скрипт/функции для работы с нет-пакетами в SCoP, например, 'm_net_utils.script';

2. Получаешь по какому-либо признаку (ID, story_id, ...) серверный объект своего НПС (soNPC);

3. Считываешь нет-пакет своего объекта (tP);

4. Меняешь в этом пакете значение параметра 'object_flags' на требуемое, т.е. сбросив, как советует KD87 флаг ' flCanSwitchOffline';

5. Перезаписываешь нет-пакет своему НПС;

6. Для подстраховки, переводишь своего NPC в оффлайн и обратно.

Все это конспективно примерно так:

function Set_Always_OnLine(idNPC) --/< на входе игровой ID
  local soNPC = idNPC and alife():object(idNPC) --/ серверный объект НПС
  if soNPC and IsStalker(soNPC) and m_net_utils then --/ проверки готовности/возможности
    local tP = m_net_utils.Get_Data_Stalker(soNPC) --/ читаем нет-пакет
    tP.object_flags --/ меняешь параметр на нужное значение
    m_net_utils.Set_Data_Stalker(tP,soNPC) --/ сохраняем измененный нет-пакет
    if level.object_by_id(id) then --/ если объект в онлайне:
      --/ тут перевод online->offline->online
    end
  end
end

Остается найти требуемые скрипты/функции для нет пакетов и переводов 'офф-он-лайн' и попросить KD87 уточнить в 'object_flags' бит 'flCanSwitchOffline'.

 

 

KD87, не мог бы ты дать по-битовую информацию (какой бит чему соответствует) для 'object_flags' и, по возможности, др. аналогичных флаговых параметров в нет-пакетах объектов. Заранее спасибо.

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

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

Да не нужны нетпакеты для изменения флагов flCanSwitchOffline/flCanSwitchOnline. Я выше написал, какие функции за это отвечают.

Информация по флажкам, которую смог нарыть сам.

 

Флажок                   двоичное дес.  Функция-аксессор *  назначение
======================================================================
flUseSwitches       0000000000001    1                      используется только редактором level editor из SDK и отвечает
                                                            за видимость в редакторе флажков flSwitchOnline и flSwitchOffline
flSwitchOnline      0000000000010    2 can_switch_online    возможность перехода в онлайн 
flSwitchOffline     0000000000100    4 can_switch_offline   возможность перехода в оффлайн 
flInteractive       0000000001000    8 interactive      **  Такое ощущение, что ни на что не влияет
flVisibleForAI      0000000010000   16                      используется на клиентской стороне, в частности для зон 
                                                            отвечает за возможность реакции на контакт
flUsefulForAI       0000000100000   32                      кроме участия в interactive имет смысл для инвентарного предмета,
                                                            в частности, влияет на торговлю
flOfflineNoMove     0000001000000   64 move_offline         по идее должен отвечать за отсутствие движения в оффлайне, но не используется
flUsedAI_Locations  0000010000000  128 used_ai_locations*** При спавне будет привязан к сетке, при наличии таковой под объектом. 
                                                            Иначе будет создан в воздухе.
flGroupBehaviour    0000100000000  256                      неизвестно
flCanSave           0001000000000 1024 can_save             Сохранять ли объект. Если флажок снят, то при перезагрузке объект исчезнет.
flVisibleForMap     0010000000000 2048 visible_for_map      Устанавливает видимость на миникарте
flUseSmartTerrains  0100000000000 4096                      неизвестно
flCheckForSeparator 1000000000000 8192                      неизвестно

*  Для многих объектов соответствующая функция не связана с флагом, а имеет логику, специфичную для данного объекта.
** Функция interactive также учитывает флажки flVisibleForAI и flUsefulForAI
*** В ЗП имеется функция для установки флажка use_ai_locations(bool). Обратите внимание, имя отличается от функции для чтения флажка.

Изменено пользователем malandrinus
  • Полезно 1
 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Описание неполное. Я как-то пытался сделать полный разбор, но не закончил.

Сначала основы. object_flags - это битовое поле, в котором каждый бит соответствует бинарному флагу (то есть, вкл/выкл). Проверяется наличие/отсутствие флага операцией битового И по нужной маске.

Теперь сам разбор object_flags:

enum object_flags {

flUseSwitches = 1

flSwitchOnline = 2

flSwitchOffline = 4

flInteractive = 8

flVisibleForAI = 10h

flUsefulForAI = 20h

flOfflineNoMove = 40h

flUsedAI_Locations = 80h

flGroupBehaviour = 100h

flCanSave = 200h

flVisibleForMap = 400h

flUseSmartTerrains = 800h

flCheckForSeparator = 1000h

}

1. flUseSwitches

Будучи выставленым, разрешает движку использовать второй и третий флажок.

2. flSwitchOnline

Определяет возможность перевода объекта в онлайн. Проверяется методом can_switch_online, точнее, двумя его реализациями:

3. flSwitchOffline

Определяет возможность перевод объекта в оффлайн. Проверяется двумя реализациями метода can_switch_offline:

Хочу обратить внимание, что для некоторых объектов выставление этого флага бессмысленно. В некоторых классах метод can_switch_offline() перегружен и выдает false всегда. Это следующие классы:

CSE_ALifeObjectClimable (лестницы)

CSE_ALifeObjectBreakable (бьющиеся объекты)

CSE_AlifeSpaceRestrictor и все наследующие от него

4. flInteractive

Непонятно, но без пятого и шестого флага этот флаг бессмысленен.

5. flOfflineNoMove

Определяет возможность перевода объекта в онлайн (?)

6. flUsedAI_Locations

Определяет, куда спавнить объект. Если true - объект заспавнится в ближайшей АИ-ноде, если false - по заданным координатам. Соответственно, для объектов, возвращающих true в used_ai_locations() необходим корректный level_vertex_id, для остальных - нет.

7. flGroupBehaviour

Имеет смысл лишь для объектов класса CSE_AlifeHumanAbstract и объектов наследующих от него классов. Что означает - мне неизвестно.

8. flCanSave

Определяет возможность сохранения объекта. Характерно,что для всех объектов классов, наследующих от CSE_PHSkeleton возможность сохранения определяется не object_flags, а skeleton_flags (четвертый бит, FL_NOT_SAVE). Как и раньше, для управления флагом есть два метода:

9. flCheckForSeparator

Это вроде флаг для компилятора АИ. Устанавливает, проверять ли данный спейс-рестриктор на разделение АИ-сетки.

 

Замечания (для финалки ТЧ!):

1)CSE_ALifeObjectClimable, CSE_AlifeSpaceRestrictor и CSE_ALifeObjectBreakable возвращает false в can_switch_offline() и used_ai_locations()

2)возвращают false в used_ai_locations():

CSE_ALifeObjectPhysic,

CSE_ALifePHSkeletonObject,

CSE_ALifeObjectHangingLamp,

CSE_ALifeObjectProjector,

CSE_AlifeCreatureCrow,

CSE_AlifeCreaturePhantom,

CSE_AlifeItemBolt

 

3)у CSE_ALifeObjectHangingLamp в flags должны стоять третий и четвертый бит, иначе движок считает рендер ненастроенным (FL_R1 и FL_R2)

4)CSE_ALifeCreatureAbstract возвращают true в used_ai_locations()

5)CSE_AlifeTrader возвращает false в interactive()

6)CSE_AlifeItemBolt возвращает false в can_save()

7)CSE_AlifeItemAmmo добавляет в can_switch_offline() условие if m_elapsed, то есть в коробке должны оставаться патроны.

 

Как дополнение: malandrinus совершенно правильно заметил, что методы can_switch_offline и can_switch_online для некоторых объектов в скриптах перегружены. Поэтому соответствующие поля object_flags для таких объектов могут и не работать.

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

Можно ли реализовать, чтобы партикл использовался постоянно?

Вот есть партикл хита монстра в аномалии, мне нужно, чтобы он использовался постоянно.

Как это можно реализовать?

 

Условия, при которых он должен использоваться постоянно!?

ColR_iT

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

Выводы модмейкера:

1)Вылетает - это хорошо. Значит, работает :)

2) Если хочешь сделать что-то хорошо, делай сам!

3) Если падёшь духом, падёт и мод.

4) Он живой... :o

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

Как правильно ставить math.random? Просто хотел чтобы в начале игры у игрока была рандомная точка спавна, перенос сделал с помощью метода db.actor:set_actor_position поставил рандом x[math.random(14)] (было 14 видов координат). Всегда относит к шевченко (центр локации - 0, 0, 0).

https://www.youtube.com/embed/U0no-6tCxhU

Канал на "Трубе"

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

Ребят подскажите пожайлуста как сделать:

1.Кончающиеся болты.

2.Не исчезающие болты(чтобы после того как их выкинули, через несколько секунд они не пропадали в некуда).

Я брал configs гранаты и менял визуал на болт. Но ни чего не вышло...

Ссылка на комментарий
Можно ли реализовать, чтобы партикл использовался постоянно?

Вот есть партикл хита монстра в аномалии, мне нужно, чтобы он использовался постоянно.

Как это можно реализовать?

 

Условия, при которых он должен использоваться постоянно!?

ColR_iT

 

ColR_iT, мне нужно, чтобы партикл был постоянно.

В аномальках для этого дела есть строчка idle_particle, а у монстров... не знаю.

Выводы модмейкера:

1)Вылетает - это хорошо. Значит, работает :)

2) Если хочешь сделать что-то хорошо, делай сам!

3) Если падёшь духом, падёт и мод.

4) Он живой... :o

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

Rolan, так проверь :) в конфиге арта пропиши визуал..

 

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

Вобщем снимается только на статике и в мутном качестве, т.е. какая погода есть, такую и снимает, все в тумане... sv_setweather map походу вообще ни на что не влияет... На dx9 снимает все в пересвеченном желтом цвете, на dx10-dx11 вообще не снимает, т.е. снимок показывает, но в файл не пишет.. Не пойму, от чего это зависит, от видеокарты?

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

Всем доброго времени суток. Написал вот такую ф-ию лечения ГГ:

function healing()
     if  db.actor.heаlth < 1 then db.actor.heаlth = 1
end

Сделал активацию через диалог. Загружаюсь, говорю с НПС и ничего не происходит. В чем проблема?

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

LOG@N, по аналогии с существующим скриптом видимо нужно добавить:

 

function healing(first_speaker, second_speaker)

 

В оригинале функция лечения выглядит так:

 

function medic_magic_potion(first_speaker, second_speaker)
    db.actor.health = 1
    db.actor.power = 1
    db.actor.radiation = -1
    db.actor.bleeding = 1
end

 

Можно ее и вызывать..

Ссылка на комментарий
LOG@N, у тебя ошибка в синтаксисе - проверяйся. Изменено пользователем 7.9

всё легко

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

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

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

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

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

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

Войти

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

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

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