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

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

7.9, верно, mass из cse_alife_object_physic - это не то. Это вроде как масса, определяющая обработку физ-движком, более того, ее можно получить не из нет-пакета, а просто с помощью mass() - метода CScriptGameObject. А инвентарной массы в нет-пакетах нет.

Artos, логика чтения last_spawn_time такая (во всех трех частях):

    local flag = packet:r_u8()
    if flag == 1 then
        self.last_spawn_time = utils.r_CTime(packet)
    end

Для 'se_' классов берите код из соответствующих методов se скриптов.

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

Помогите пожалуйста. Я прописал в логику НПСу воспроизведения звука при приближению к нему(как у Бороды, Сыча и т.д.).

Только звука нет. Вот логика:

[logic]

trade = misc\trade\holod.ltx

active = remark

prior = 200

can_select_weapon = true

level_spot = trader

combat_ignore = combat_ignore

 

[combat_ignore]

 

[remark]

anim = animpoint_stay_table_no_rnd

combat_ignore_cond = true

combat_ignore_keep_when_attacked = true

meet = meet

invulnerable = true

gather_items_enabled = true

help_wounded_enabled = true

corpse_detection_enabled = true

 

[meet]

close_snd_hello = holod_greeting

close_snd_bye = holod_farewell

close_anim = nil

close_victim = nil

far_anim = nil

far_victim = nil

close_distance = 0

far_distance = 0

close_snd_distance = 3

abuse = true

use = {=actor_enemy} false, true

allow_break = true

meet_on_talking = true

 

 

 

Звук пописан здесь:

[list_script_sound_marsh]

holod_greeting

holod_farewell

 

 

[holod_greeting]

type = npc

;npc_prefix = false

path = scenario\marsh\holod\holod_greeting_

shuffle = rnd

idle = 0,0,100

 

[holod_farewell]

type = npc

;npc_prefix = false

path = scenario\marsh\holod\holod_farewell_

shuffle = rnd

idle = 1,1,100

 

 

 

А файл script_sound_marsh.ltx прописан здесь:

#include "script_sound_music_and_stories.ltx"

#include "script_sound_zaton.ltx"

#include "script_sound_jupiter.ltx"

#include "script_sound_pripyat.ltx"

#include "script_sound_underpass.ltx"

#include "script_sound_marsh.ltx"

  • : list_music_and_stories, list_script_sound_zaton, list_script_sound_jupiter, list_script_sound_pripyat, list_script_sound_underpass, list_script_sound_marsh

 

 

 

Подскажите пожалуйста, что я упустил, в чём моя ошибка?

P.S.:Также, есть звуки:

holod_farewell_1,

holod_farewell_2,

holod_greeting_1,

holod_greeting_1

 

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

KD87

Логика то одинакова, но ... нюансы имеются.

а) В SHoC (ТЧ) метод utils.r_CTime(packet) всегда(!) вернет объект таймера, а вот в CS/SCoP (ЧН/ЗП) уже возвратить может и 'nil' и '0'. А вот метод utils.w_CTime(packet,oTimer) во всех версиях игры должен принять не число, а именно объект или 'nil', что упустил некоторое время назад и теперь подправил.

б) В моде Simbion, например, байт flag хранит уже не только в 1-ом бите факт наличия self.last_spawn_time, но еще и в других битах иные обнобитные значения/флаги (статус аномалии, в часности). Т.о. условие 'flag == 1' недостаточно и использовано более узкое: bit_and(flag,1) == 1, что совместимо и с исходными кодами игры. Сделал так, чтобы убрать 'мусор' из кастомдаты, что реализовано в АМК-моде.

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

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

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

Подскажите пожалуйста, если прописать в логику лидера монолитовца после вступления в долг\свободу (jup_b4_monolith_squad_leader_duty(freedom)_skin) следующию строчку: on_info = {+jup_b4_monolith_squad_in_duty} %=set_squad_goodwill(jup_b4_monolith_squad_leader_duty_skin_duty_leader:1000)%, будет ли все это дело работать.

Ссылка на комментарий
Artos, удачное решение. Но можно было просто добавить своих переменных. Смотри, например, zenobian mod - там сделан свой скриптовый класс аномальных полей (вроде на классе аномалии) и соответствующим образом поправлен acdc, чтобы при паковке добавлялись новые параметры. Вот еще одно решение :)
Ссылка на комментарий

KD87, вариант из Zenobian-mod конечно же смотрел в свое время и даже на каком-то этапе в сборке Симбиона присутствовали оба варианта (AMK+Zen). Однако в процессе работы над кодами принял решение идти оптимальным (на мой взгляд) путем.

Уже и сами разрабы для неписей использовали однобайтовые флаги для расширения (битовые флаги работ для сталкеров), и в том же АМК были добавлены доп. однобитовые флаги для монстров (офф/онлайна) и для сталкеров (состояние ранености).

Добавлять новые переменные и править ACDC в то время было и затруднительно и совместимость страдала ...

Выбранный вариант не зависит ни от версии ACDC, ни требует новых классов, и ресурсов сторонних (доп.байтов в пакетах) не потребляет. :-)

Это же решение позволило упаковать/разгрузить сохранки для таск-менеджера и для диалог-менеджера при сохранении совместимости с предыдущими сэйвами.

 

===

Вот, кстати в тему и топика и по следам модуля нет-пакетов, возник вопрос, который сейчас сам перепроверить не могу на ЧН/ЗП:

В utils.script (ЧН/ЗП) имеется функция 'w_CTime', в которой упоминается переменная 'CTime':

if (CTime == nil) or (t ~= CTime_0) then

- но если она (CTime) НЕ определена нигде выше/ранее - ведь и будет постоянно тождественна 'nil' и все последующие времена будут постоянно перезаписываться, т.е. до условия 't ~= CTime_0' никогда не будет доходить проверка.

Или что-то я упускаю или ... в кодах явный ляп?

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

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

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

Artos

Похоже на ошибку GSC. Если взять utils.script безпатченной версии, то там функция w_CTime() такая:

 

    if not (t == CTime_0) then
        local Y, M, D, h, m, s, ms = 0, 0, 0, 0, 0, 0, 0
        Y, M, D, h, m, s, ms = t:get( Y, M, D, h, m, s, ms )

 

А в патченой версии я нигде не нашёл, чтобы вызывался код вида utils.CTime

Разве что как то движково.

 

И да, так мне получается параметр updskeleton_flags просто удалить? А то я вставил его чтение\запись :D

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

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

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

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

*Shoker*

Да, упоминания про 'updskeleton_flags' нужно просто удалить из кодов.

Если есть желание можешь потестить новую версию:

m_net_utils_111015

- изменен формат получаемой таблицы нет-пакета. Параметры UPDATE выделены в субтаблицу 'Table.upd'

- изменена последовательность аргументов при вызове записи пакета: 'Table,soObj,Flag' -> 'soObj,Table'. Необходимость записи UPDATE_write определяется по наличию субтаблицы 'Table.upd'.

- введены общие функции: Get_NetPacket/Set_NetPacket, самостоятельно определяющие класс серверного объекта и выбирающие соотв.методы чтения/записи.

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

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

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

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

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

Scheduler tried to update object "Имя объекта"

И игра вылетает, с указанием только адресов в xrGame?

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

Как можно отследить поедание хлеба (bread)? Думал, через коллбэк на потерю, но так он подаёт сигнал не только, когда съедаем, но и когда выбрасываем.

Ссылка на комментарий
но так он подаёт сигнал не только, когда съедаем, но и когда выбрасываем.

Либо сделать колбек на потерю предмета

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

В общем открываем бинд_сталкер.скрипт В функции function actor_binder:reinit() пишем по аналогии инициализацию каллбека

self.object:set_callback(callback.use_object, self.use_object, self)

Вне всяких функций пишем

function actor_binder:use_object(obj,who)
if obj:section() == "bread" then
get_console():execute("Use_detected") --тут просто вывод в лог, что использование прошло, строку удалить
end
end

Ну и вот после then пишем то, что нужно нам сделать. Для полного счастья можно еще прописать в function actor_binder:net_destroy() это

self.object:set_callback(callback.use_object, nil)

Это вроде как удаление каллбека при выходе из игры.

ТЧ 1.0004. SAP и Trans mod

github

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

Desertir верно сказал, колбек на юзание объекта самый удобный способ.

 

А вот

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Здравствуйте. Для чего используется o_torso в параметрах НПС? Почему ПЫС не хватило такого параметра как direction?

Изменено пользователем _Призрак_

Freedom

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

Привет всем. Подскажите пожалуйста, как заставить НПС юзать только нож? То есть он, ни смотря ни на что, бежит к ГГ и нажинает лупить/резать пока не умрет, либо не убьет ГГ :lol: Благодарю)

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

Есть вопрос:

Зашёл в диалог и вылет:

[error]Expression : no_assert

[error]Function : CXML_IdToIndex<class CPhraseDialog>::GetById

[error]File : e:\stalker\patch_1_0004\xr_3da\xrgame\xml_str_id_loader.h

[error]Line : 112

[error]Description : item not found, id

[error]Arguments : nachalo

Инфопоршень nachalo зарегистрирован, где все инфы.

Тогда в чём дело?

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

Создаю глобальный мод с новыми локациямЭ

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

Scarabay

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

В общем смотри схемы 'мордобоя' из модов и делай по аналогии.

 

 

Поправлю немного Desertir'а, нет никакой надобности добавлять 'лишний' аргумент (self) в коллбэк актору.

И так понятно, что юзает (who) именно он, а не кто иной.

Также несколько странная фраза:

Desertir: А вот "проверять, существует ли предмет, который потерян" вообще интересен
Если тому же 'батону' в конфиге прописать 'многопорционность', то для таких 'многократных' использований как раз проверка 'съеден' ли батон иль только 'надкушен' (в процессе поедания) - совсем не лишне!

Следует все же различать то, о чем говорит событие, а не додумывать его иль ориентироваться только на общие случаи. Правильным для 'отследить поедание' (см. вопрос) - достаточен коллбэк 'use_object', а вот для однозначности 'съеден' - тут уже без доп. проверки на исчезновение предмета из игры не обойтись.

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

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

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

Возникла одна назойливая проблемка и вот я незнаю, возможно ли это исправить.

Возможно ли удаление статей или разделов из ПДА в разделе Справка?

 

Забыл кое что - статьи уже добавлены в ПДА в игре, т.е. их нужно именно в игре удалить из ПДА. Ищу скриптовое решение проблемы...

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

Ребят, у меня такой вопрос: как сделать чтобы НПС сидели вокруг костра, разговаривали, травили анекдоты и т.п. в ЗП? Тут в поиске не нашёл. Заранее спасибо :good: .

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

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

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

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

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

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

Войти

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

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

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