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

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

Artos,

1. Если ты (или кто-то ...) считаете такую строку кода валидной:
second_speaker:set_relation(1--[[first_speaker:relation(obj)]], obj)

а что не так? Закомментирован кусок кода блочным комментарием, но фрагмент синтаксически корректен.

 

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

_Призрак_,

Есть ли на данный момент возможность повернуть объект типа physic_object? Пытался выбирать кость и хитовать ее - не подходит. Смотрел m_net_utils, но судя по коду возможности изменить direction у объекта при помощи нет_пакетов еще нет. А можно ли как нибудь по другому?

Доуточню то, что выше сказал Artos. Поля из cse_abstract доступны в STATE_Write только в момент создания объекта. При этом нетпакет уже заполнен этими данными, но они ещё не прочитаны движком. Если в этот момент перепаковать пакет, то можно всё там поменять.

 

По поводу физики и вращения. Это требует специального визуала для объекта. Надо добавить что-то типа маховика с вращательной степенью свободы. Затем методами класса сочленения (джоинта, вроде как) вращаешь маховик в одну сторону, а весь объект крутится при этом в другую. Точных названий классов сейчас не припомню, но можешь глянуть модуль управления дверью. Двери открываются как раз физическим вращением, и эти команды для этого и были экспортированы.

 

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

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

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

 

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

malandrinus

1. В данном конкретном случае нет ошибки и парсер игры не увидит ошибки в синтаксисе, но(!) это именно частный случай и не применим во многих других. Блочный комментарий внутри вызова метода валиден, внутри просто функции - ошибочен. Привычка использовать подобное - верный путь к набиванию шишек ... (ИМХО)

2. Когда возникает сомнение в корректности кода - стОит писать код 'классическим' способом, т.е. и без сокращений и тем более без сомнительных комментариев.

Строка: second_speaker:set_relation(game_object.neutral, obj) - и ни чем по результату не отличима от исходной и при любом раскладе похволяет отсечь любые нюансы как парсера движка, так и прочее ...

 

И чуть дополню/поправлю вышесказанное:

Поля из cse_abstract доступны в STATE_Write только в момент создания объекта
1. 'Только' - для немалого числа классов тут излишне. Немало обьектов периодически перезаписывают свои нет-пакеты в процессе игры и при этом можно получить доступ к секции 'cse_abstract', распарсив нет-пакет. Так что тут не все так однозначно и требует индивидуального подхода. А вот менять параметры 'на лету', т.е. для объекта в онлайне - порой чревато ... и требует специальных мер (если они вообще доступны).

2. Пытаться изменять параметры в секции 'cse_abstract' следует в методе 'STATE_Read', т.к. именно при этом серверный объект считывает измененные параметры. Но после этого клиентский объект должен как минимум синхронизироваться с серверным, т.к. должен быть хотя бы один раз метод 'STATE_Write' для объекта.

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

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

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

Строка: second_speaker:set_relation(game_object.neutral, obj) - и ни чем по результату не отличима от исходной и при любом раскладе похволяет отсечь любые нюансы как парсера движка, так и прочее ...

 

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

 

Если меняем отношения с ГГ - срабатывает мгновенно. Хотя и криво (непись продолжает сколь угодно долгое время воспринимать ГГ как дэнжер-объект с типом enemy_sound).

 

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

Dennis_Chikin

А почему ты считаешь, что изменив один параметр, и игнорируя наличие иных, ты достигнешь желаемого рузультата?

Не стоит забывать, что в игре многое и взаимосвязано и взаимозависимо.

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

А при необходимости даже и денжеры сбрасывать ... Не стоит думать, что игра все сама за модмейкера разрулит.

Приводи конкретную ситуацию (желательно применимо к исходной игре) и бум посмотреть ...

 

Не рабочий метод и отсутствие результата после применения метода - далеко не одно и то же.

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

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

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

Artos,

Немало обьектов периодически перезаписывают свои нет-пакеты в процессе игры и при этом можно получить доступ к секции 'cse_abstract', распарсив нет-пакет.

Это противоречит тому, что я знаю. По моим данным, вызов STATE_read/write не при записи/сохранении - результат прямого вызова этих методов со стороны скриптов, и при этом всегда в нём отсутствует начальная часть cse_abstract по понятным причинам. В немодифицированной игре эти вызовы происходят строго при загрузке/сохранении за исключением пары случаев, когда этими манипуляциями занимаются сами авторы игры (они и сами этим грешили, есть такое дело).

Серверные данные переписываются постоянно, это факт, но вызовы STATE_read/write в этом не участвуют. Внутри движка клиентская часть имеет прямой доступ к серверной, и в этом попросту нет необходимости.

 

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

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

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

 

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

malandrinus

Немного ранее, *Shoker*'у мимоходом давал информацию, что получать кол-во патронов в оружии можно и без использования сторонних апдейтеров ...

Что имелось ввиду:

Смотрим 'se_item.script', в котором к счастью имеются все классы для оружия (кстати и класс физ.объекта там же).

Да, в оригинальном скрипте в этих классах отсутствуют коды с методами STATE_Read|Write, но внеся эти коды мы видим, что они работают(!) и есть доступ к начальной части нет-пакета с секцией 'cse_abstract'. Причем, чтение/запись нет-пакетов происходит не только при старте/сейве игры или при спавне соотв. объекта, но и в процессе(!) игры.

Применительно к задаче, которую ставил себе *Shoker*', достаточно было мониторить активный для ГГ ствол (его ID) и для этого оружия распарсивать пакет (точнее его самый конец) чтобы получать значение текущего кол-ва патронов в стволе. Причем(!) не нужно утруждать ни себя ни игру сторонними принудительными вызовами, объект (движек) сам вызывает метод STATE_Write в нужное время (при изменении кол-ва) и дает нам требуемые данные. Есть только минус - при стрельбе очередью периодичность вызова этого метода ниже 'единичного выстрела' и имеется локальная погрешность.

Пример кода для чтения в SHoC:

function se_weapon_magazined:STATE_Read(reader, iSize)
  cse_alife_item_weapon.STATE_Read(self, reader, iSize) --/ можно распарсить cse_abstract!!!
end

function se_weapon_magazined:STATE_Write(packet)
  cse_alife_item_weapon.STATE_Write(self, packet) --/ можно распарсить cse_abstract!!!
  if self.id == idWeaponActor then --/ это оружие активное для ГГ?
    packet:r_seek(packet:w_tell() -5) --/ for SHOC
    local iAmmoElapsed = packet:r_u16() --/ текущее кол-во патронов в стволе
    packet:r_seek(packet:w_tell() +3) --/ ставим читалку в конец пакета
    printf("se_weapon_magazined:STATE_Write:Wpn=[%s],AmmoElapsed=[%s]", self:name(), iAmmoElapsed)
  end
end

 

К чему это? К тому, что, как писал выше, немалое кол-во класcов объектов, параметры которых динамически меняются, имеют вызовы методов STATE_Read|Write для объектов в прцессе игры, а значит(!) и есть доступ к начальной части пакета из которой как минимум можно прочитать секцию 'cse_abstract'. А раз можно прочитать - то скорее всего можно ее и изменить и попробовать заставить прочитать объект этот измененный нет-пакет ... даже в процессе игры, а не только на ее старте/сэйве. К принудительному чтению/записи нет-пакетов можмейкерами из своих скриптов это не имеет отношения.

 

Примечание: При необходимости (и возможности) принудительно вызвать для объекта его 'штатные' STATE_Read|Write можно, например, переводом объекта он-офф-лайн ...

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

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

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

Приводи конкретную ситуацию (желательно применимо к исходной игре) и бум посмотреть ...

 

Сбрасывать - это как ?

 

А ситуацию описывал чуть раньше.

Соль. Конкретно я пытался поправить сцену на входе в Темную Долину. Там бандита можно лечить, после чего ГГ меняется группировка, а бандит выгоняется из под смарта val_escort и захватывается val_lager_bandits. И идет в этот самый лагерь.

 

Было изменено лечение, с попыткой изменять отношения неписей. Изменения отношений я не вижу. Отношение к ГГ меняется, но бандит находится под дэнжером, и выгоняться из смарта - выгоняется, но не захватывается, а вместо этого начинает охотиться на долговцев.

 

Результаты лечения других неписей в других местах - тоже странны. По логу - отношения неписей к ГГ меняются, а вот между собой - нет.

 

P.S. Общегрупповые правила - похоже, да. Попробую посмотреть.

 

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

Dennis_Chikin

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

 

По денджерам: имеется конкретно схема 'xr_danger.script' и если потребно, то неслодно внести требуемые правки, дабы можно было в нужное время для нужного НПС сбрасывать иль изменять требуемое ...

 

По отношениям: Если бы ты не только на НС был зациклен, то например, в том же HLC5, в котором есть и лечение раненых врагов и изменение отношений (и смена группировки вылесенного!) мог бы наблюдать, как 'групповые отношения' влияют на игру. Например ни что не влияет на отношения внутри группировки неписей, но если вылечить солдата и сменит ему группировку - свои же и пристрелят сразу, хотя их отношения и не изменялись.

Также можешь легко убедиться, что сделав врагами того же Волка и сидящего у костра сталкера-новичка (в начале игры) - они будут мирно сосуществовать в своем гулаге и не кинутся убивать друг друга.

 

В общем если не отпала нужда - объясняй 'на пальцах' применительно к понятным всем кодам и ситуациям. И повторю, 'не рабочесть метода' тут не при чем, просто это далеко не то, что тебе нужно и/или достаточно.

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

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

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

Artos,

Смотрим 'se_item.script', в котором к счастью имеются все классы для оружия (кстати и класс физ.объекта там же).

Да, в оригинальном скрипте в этих классах отсутствуют коды с методами STATE_Read|Write, но внеся эти коды мы видим, что они работают(!) и есть доступ к начальной части нет-пакета с секцией 'cse_abstract'.

...

Причем, чтение/запись нет-пакетов происходит не только при старте/сейве игры или при спавне соотв. объекта, но и в процессе(!) игры.

...

При необходимости (и возможности) принудительно вызвать для объекта его 'штатные' STATE_Read|Write можно, например, переводом объекта он-офф-лайн ...

Ещё раз, это не подтверждается моими наблюдениями. Специально взял чистую игру, выдал себе автомат, пострелял, убрал в оффлайн, вывел обратно в онлайн. Ничего такого нет. STATE_Read/Write вызываются строго один раз при появлении офлайнового объекта, и всякий раз при записи сохранения. Выход объекта в онлайн/уход в онлайн тоже на этом никак не сказывается.

 

Проверь сам, только возьми чистую игру.

 

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

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

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

 

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

malandrinus

Попробую и на чистой игре проверить, хотя не возьму в толк - в чем именно в этом отношении имеется различие между каким-либо модом и чистой ... Тем более чтобы это проверить - все одно потребуется внести изменения, хотя бы для вывода в читаемый лог. Суть то все одна, в чистой ничего само собою не видно (нет в логе), а как только вносим изменение - это уже и не чистая ... Каков критерий, чтобы говорить не о причудах модмейкера, а о работе именно исходных кодов?

 

Пока однозначно для физ.объектов (cse_alife_object_physic) при переводе выбранного объекта (экспериментировал с вентилятором Сидоровича) в оффлайн и обратно - автоматически вызываются функции STATE_Write|Read и корректно читается секция 'cse_abstract'.

Вот этот лог получен после первого апдейта актора:

se_item:se_physic:STATE_Write:=[trader_ventilyator_0000]:r_tell=64714633:w_tell=86

Print_Table:NetPacket(trader_ventilyator_0000):
dummy16 = [1]
section_name = [physic_object]
name = [trader_ventilyator_0000]
s_gameid = [0]
s_rp = [254]
position.<userdata>.x = [-243.89122009277]
position.<userdata>.y = [-23.180002212524]
position.<userdata>.z = [-133.19967651367]
position = [vec(x=-243.891:y=-23.180:z=-133.200)]
direction.<userdata>.x = [0]
direction.<userdata>.y = [-0.26178956031799]
direction.<userdata>.z = [0]
direction = [vec(x=0.000:y=-0.262:z=0.000)]
respawn_time = [0]
unknown_id = [102]
parent_id = [65535]
phantom_id = [65535]
s_flags = [96]
version = [118]
script_version = [7]
unused = [0]
spawn_id = [101]
extended_size = [0]

se_item:se_physic:STATE_Read:=[trader_ventilyator_0000/102]:Size=75:r_tell=86:w_tell=159

- что полностью до знака соответствует параметрам этого объекта из all.spawn'а.

 

Примечание: А вот для оружия прочитать в процессе игры эту секцию пока не удалось ... Только из первого пакета можно получить начальную секцию, позже ... только без 'cse_abstract' удается прочитать, мешает 'мусор'.

Почему то после первого пакета далее w_tell постоянно равен 2 (двум) и никак не могу определить начало пакета ...

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

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

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

Artos,

ты прав, на самом деле вызывается при переходе в онлайн. Однако, других моментов, когда это ещё вызывается, я пока не вижу.

 

хотя не возьму в толк - в чем именно в этом отношении имеется различие между каким-либо модом и чистой

разница может быть как небо и земля. Я сам, к примеру, использую перепаковку нетпакетом кастомдаты оружия. Это кстати можно в онлайне делать. А как сходу отличить вызов скриптом и вызов движком? Разве только по значению w_tell.

 

Почему то после первого пакета далее w_tell постоянно равен 2 (двум) и никак не могу определить начало пакета ...

Так вот это скорее всего скриптовые вызовы, поскольку в движковых в нетпакете уже есть данные cse_abstract и w_tell как раз и даёт их размер.

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

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

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

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

 

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

malandrinus

;) Ну ... на то и модмейкеру голова, чтобы когда очень хотса - значит можно и поизвращаться ...

Тот же физ-объект можно в игре удалить и вновь заспавнить на место удаленного, чтобы вызвать самый корректный первый пакет и его перепаковать.

Но это все же уже изврат.

 

P.S. В своих ковыряниях на эту тему НЕ использовал никаких скриптовых вызовов связанных с нет-пакетами для тестируемых объектоов. Хотя для активного оружия актора у меня как раз стоИт постоянное чтение из нет-пакета кол-ва патронов именно 'своим' скриптовым вызовом на чтение общего нет-пакета. Перепроверю с чистым переводом в офф-он ... Тут ты вероятно прав!

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

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

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

Artos,

Хотя для активного оружия актора у меня как раз стоИт постоянное чтение из нет-пакета кол-ва патронов именно 'своим' скриптовым вызовом на чтение общего нет-пакета.

А зачем нетпакетом? Есть же вроде get_ammo_in_magazine

 

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

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

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

 

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

malandrinus

Неточно выразился ...

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

 

Перепроверил с оружием. Ты прав, это 'мои грабли' и 'штатные' вызовы в игре чтения/записи нет-пакетов пока тоже только при манипуляциях с онлайном обнаружил.

 

P.P.S.

Вот теперь, после обмена знаниями/навыками и ошибками, открыт путь к смене позиции и дирекции для объектов (неписей и пр.).

Суть (для объектов в онлайне):

- в подходящий момент отправляем объект в оффлайн и обратно в онлайн, одновременно выставив разрешающий флаг для чтения из нет-пакета секции 'cse_abstract' объекта и дав (запомнив) информацию по необходимым изменениям в координатах;

- читаем в 'штатном' для объекта методе STATE_Read|Write нет-пакет и перепаковываем его с новыми параметрами.

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

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

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

Сделал я анимпоинт в смартерраине. Заспавнил сквад. Непись(у него новая группировка) ест хлеб, колбасу, но не играет на гитаре, и не рассказывает анекдоты...

Как сделать?

В файлах script_sound_music_and_stories и script_sound группировка прописна:

[list_music_and_stories]

attack_begin

attack_begin_reply

 

alife_stalker_counter_check

alife_bandit_counter_check

alife_dolg_counter_check

alife_freedom_counter_check

alife_army_counter_check

alife_clear_sky_counter_check

 

alife_stalker_counter_begin

alife_stalker_counter_reply

alife_bandit_counter_begin

alife_bandit_counter_reply

alife_dolg_counter_begin

alife_dolg_counter_reply

alife_freedom_counter_begin

alife_freedom_counter_reply

alife_army_counter_begin

alife_army_counter_reply

alife_clear_sky_counter_begin

alife_clear_sky_counter_reply

 

intro_music

play_guitar

reac_music

 

play_harmonica

 

intro_joke

joke

reac_joke

reac_laugh

 

;***************************************************************

;** Сбор отряда в атаку

;***************************************************************

[attack_begin]

type = npc

avail_communities = stalker, bandit, dolg, freedom, army, clear_sky

npc_prefix = true

path = alife\attack\attack_begin_

shuffle = rnd

idle = 0,0,100

 

[attack_begin_reply]

type = npc

avail_communities = stalker, bandit, dolg, freedom, army, clear_sky

npc_prefix = true

path = alife\attack\begin_reply_

shuffle = rnd

idle = 0,0,100

;group_snd = true

 

[alife_clear_sky_counter_check]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\csky\alife\counter_attack\check_

shuffle = seq

idle = 0,0,100

 

[alife_stalker_counter_check]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\stalker\alife\counter_attack\check_

shuffle = seq

idle = 0,0,100

 

[alife_bandit_counter_check]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\bandit\alife\counter_attack\check_

shuffle = seq

idle = 0,0,100

 

[alife_dolg_counter_check]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\dolg\alife\counter_attack\check_

shuffle = seq

idle = 0,0,100

 

[alife_freedom_counter_check]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\freedom\alife\counter_attack\check_

shuffle = seq

idle = 0,0,100

 

[alife_army_counter_check]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\military\alife\counter_attack\check_

shuffle = seq

idle = 0,0,100

 

[alife_clear_sky_counter_begin]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\stalker\alife\counter_attack\counter_attack_begin_

shuffle = rnd

idle = 0,0,100

 

[alife_clear_sky_counter_reply]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\stalker\alife\counter_attack\reply_

shuffle = rnd

idle = 0,0,100

 

[alife_stalker_counter_begin]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\stalker\alife\counter_attack\counter_attack_begin_

shuffle = rnd

idle = 0,0,100

 

[alife_stalker_counter_reply]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\stalker\alife\counter_attack\reply_

shuffle = rnd

idle = 0,0,100

 

[alife_bandit_counter_begin]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\bandit\alife\counter_attack\counter_attack_begin_

shuffle = rnd

idle = 0,0,100

 

[alife_bandit_counter_reply]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\bandit\alife\counter_attack\reply_

shuffle = rnd

idle = 0,0,100

 

[alife_dolg_counter_begin]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\dolg\alife\counter_attack\counter_attack_begin_

shuffle = rnd

idle = 0,0,100

 

[alife_dolg_counter_reply]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\dolg\alife\counter_attack\reply_

shuffle = rnd

idle = 0,0,100

 

[alife_freedom_counter_begin]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\freedom\alife\counter_attack\counter_attack_begin_

shuffle = rnd

idle = 0,0,100

 

[alife_freedom_counter_reply]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\freedom\alife\counter_attack\reply_

shuffle = rnd

idle = 0,0,100

 

[alife_army_counter_begin]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\military\alife\counter_attack\counter_attack_begin_

shuffle = rnd

idle = 0,0,100

 

[alife_army_counter_reply]

type = actor

actor_stereo = false

npc_prefix = false

path = characters_voice\human_02\military\alife\counter_attack\reply_

shuffle = rnd

idle = 0,0,100

 

 

;************************************************************

;** Игра на гитаре

;************************************************************

[intro_music]

type = npc

avail_communities = stalker, bandit, dolg, freedom, clear_sky

npc_prefix = true

path = talk\intros\intro_music_

shuffle = rnd

idle = 1,1,100

 

[play_guitar]

type = 3d

avail_communities = stalker, bandit, dolg, freedom, clear_sky

npc_prefix = true

path = music\guitar_

shuffle = rnd

idle = 1,1,100

 

[reac_music]

type = npc

avail_communities = stalker, bandit, dolg, freedom, clear_sky

npc_prefix = true

path = reactions\music\reaction_music_

shuffle = rnd

idle = 1,1,100

group_snd = true

 

[play_harmonica]

type = 3d

avail_communities = stalker, bandit, dolg, freedom, clear_sky

npc_prefix = true

path = music\harmonica_

shuffle = rnd

idle = 1,1,100

 

;***************************************************************

;** Истории

;***************************************************************

[intro_joke]

type = npc

avail_communities = stalker, bandit, dolg, freedom, army, monolith, clear_sky

npc_prefix = true

path = talk\intros\intro_joke_

shuffle = rnd

idle = 0,0,100

group_snd = true

 

[joke]

type = npc

avail_communities = stalker, bandit, dolg, freedom, army, monolith, clear_sky

npc_prefix = true

path = talk\jokes\joke_

shuffle = rnd

idle = 0,0,100

group_snd = true

 

[reac_joke]

type = npc

avail_communities = stalker, bandit, dolg, freedom, army, monolith, clear_sky

npc_prefix = true

path = reactions\joke\reaction_joke_

shuffle = rnd

idle = 0,0,100

group_snd = true

 

[reac_laugh]

type = npc

avail_communities = stalker, bandit, dolg, freedom, army, monolith, clear_sky

npc_prefix = true

path = reactions\story\laughter_

shuffle = rnd

idle = 0,0,100

group_snd = true

 

 

 

[meet_hello]

type = npc

avail_communities = army, stalker, bandit, dolg, freedom, clear_sky

npc_prefix = true

path = states\meet\meet_hello_

shuffle = rnd

idle = 2,2,100

 

[meet_hide_weapon]

type = npc

avail_communities = army, stalker, bandit, dolg, freedom, clear_sky

npc_prefix = true

path = states\meet\meet_hide_weapon_

shuffle = rnd

idle = 5,7,100

 

[meet_use_no_default]

type = npc

avail_communities = army, stalker, bandit, dolg, freedom, clear_sky

npc_prefix = true

path = states\meet\meet_use_no_default_

shuffle = rnd

idle = 1,1,100

 

[meet_use_no_fight]

type = npc

avail_communities = army, stalker, bandit, dolg, freedom, clear_sky

npc_prefix = true

path = states\meet\meet_use_no_fight_

shuffle = rnd

idle = 2,2,100

 

[meet_use_no_weapon]

type = npc

avail_communities = army, stalker, bandit, dolg, freedom, clear_sky

npc_prefix = true

path = states\meet\meet_use_no_weapon_

shuffle = rnd

idle = 5,7,100

 

[meet_use_no_talk_leader]

type = npc

avail_communities = army, stalker, bandit, dolg, freedom, clear_sky

npc_prefix = true

path = states\meet\meet_use_no_talk_leader_

shuffle = rnd

idle = 5,7,100

 

 

[corpse_loot_begin]

type = npc

avail_communities = army, stalker, bandit, dolg, freedom, clear_sky

npc_prefix = true

path = states\loot\loot_begin_

shuffle = rnd

idle = 10,11,100

 

[corpse_loot_good]

type = npc

avail_communities = army, stalker, bandit, dolg, freedom, clear_sky

npc_prefix = true

path = states\loot\loot_good_

shuffle = rnd

idle = 10,11,100

 

[corpse_loot_bad]

type = npc

avail_communities = army, stalker, bandit, dolg, freedom, clear_sky

npc_prefix = true

path = states\loot\loot_bad_

shuffle = rnd

idle = 10,11,100

 

[help_heavy]

type = npc

avail_communities = army, stalker, bandit, dolg, freedom, clear_sky

npc_prefix = true

path = help\wounded_heavy\help_

shuffle = rnd

idle = 4,8,100

 

[help_thanks]

type = npc

avail_communities = army, stalker, bandit, dolg, freedom, killer, clear_sky

npc_prefix = true

path = help\wounded_thanx\thanx_

shuffle = rnd

idle = 1,1,100

 

[wounded_medkit]

type = npc

avail_communities = army, stalker, bandit, dolg, freedom, killer, monolith, clear_sky

npc_prefix = true

path = help\wounded\medkit_

shuffle = rnd

idle = 1,1,100

 

[post_combat_wait]

type = npc

actor_stereo = false

npc_prefix = true

group_snd = true

path = fight\post_combat_wait\wait_

avail_communities = stalker, bandit, dolg, freedom, army, clear_sky

shuffle = rnd

idle = 3,5,100

 

[post_combat_wait_long]

type = npc

actor_stereo = false

npc_prefix = true

group_snd = true

path = fight\post_combat_wait\wait_

avail_communities = stalker, bandit, dolg, freedom, army, clear_sky

shuffle = rnd

idle = 7,10,100

 

[post_combat_relax]

type = npc

actor_stereo = false

npc_prefix = true

group_snd = true

path = fight\post_combat_wait\relax_

avail_communities = stalker, bandit, dolg, freedom, army, clear_sky

shuffle = rnd

idle = 1,1,100

 

[wait]

type = npc

avail_communities = stalker, bandit, dolg, freedom, army, monolith, clear_sky

npc_prefix = true

path = states\idle\idle_

shuffle = rnd

idle = 7,10,100

 

 

 

Читаем шапку:

6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
--/ Artos

 

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

Artos, ЗП.

Модов нет.

Изменено пользователем Artos
Ссылка на комментарий
- в подходящий момент отправляем объект в оффлайн и обратно в онлайн, одновременно выставив разрешающий флаг для чтения из нет-пакета секции 'cse_abstract' объекта (?) и дав (запомнив) информацию по необходимым изменениям в координатах;

 

В целом понято, новость хорошая, но всё-таки:

- какие моменты являются "подходящими" (или "неподходящими")?

- куда и как выставлять флаг?

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

всё легко

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

7.9

Не торопись ;) , пока информация дана скорее для опытных модмейкеров, которые предпочитают самостоятельно выбирать пути решения ... Вариантов может быть достаточно много.

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

Пока могу сказать:

- в модуль нет-пакетов (m_net_utils.script) добавлено чтение/изменение секции 'cse_abstract' для объектов (чтобы не плодить в каждом скрипте);

- написан достаточно общий (в смысле применимости в модах) кусок кода для включения в штатные классы серверных объектов для чтения/перепаковки секции 'cse_abstract' в нет-пакетах (это по сути и один из вариантов 'установки флага' и 'задание новых параметров');

- опробовано на физ.объектах, сталкерах и монстрах ...

Требуется некоторое время на проверку отсутствия коллизий с рестрикторами (если таковые прописаны) и иными нюансами (это по поводу 'неподходящих' моментов).

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

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

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

Artos

Присоединяюсь к вопросу о флаге.

 

> Ты прав, это 'мои грабли'

А если не секрет, для чего они были необходимы.

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

*Shoker*

О 'граблях' уже дал ответ ранее.

Мониторинг текущей секции патронов в стволе ГГ, что связано с периодичностью вызовов чтения нет-пакета активного оружия внес ошибку в проверку наличия штатных вызовов чтения/записи нет-пакетов серверных объектов.

Без 'моих' вызовов - штатных вызовов в процессе игры не было.

Т.е. справедлив вывод, что штатные вызовы чтения/записи нет-пакетов для серверных объектов происходят ТОЛЬКО при загрузке/сохранении игры и при переходе объектов в онлайн (что может быть вызвано искуственно модмейкером в процессе игры).

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

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

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

Дополню вопрос про сталкеров, сидящих у костра:

поправил кое-чего:

сталкеры теперь разговаривают.

Но всё равно не играют на гитаре\гармошке...

Помогите пожалуйста.

P.S.: camp_zone присутствует.

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

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

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

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

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

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

Войти

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

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

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