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

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

@Zander_driver я бы вообще ничего не писал, но аномалии он удалять может. @Jekyll поинтересовался о возможных проблемах, я выразил своё предположение (у меня всегда удаляет на НИ одни и те же зоны).  А заодно у меня есть вариант положить в свою копилочку маленько знаний на очередном мини-заседании.

Здесь могла быть ваша реклама.

Ссылка на комментарий
2 часа назад, Jekyll сказал(а):

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

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

Ну разве что там есть еще какие-нибудь физобъекты, которые эта аномаль будет зашвыривать туда, куда им не надо )

  • Спасибо 1

След от кругов на воде - это тоже след (с)

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

Здравствуйте!

При попадании в аномалию, заспавненную скриптом, неписи агрятся на ГГ. Видимо, неписи воспринимают хит от аномалии как хит от актора. Функция спавна аномалии:

Скрытый текст

function create_anom(section,x,y,z,lv,gv,rad_anom,mode)
	if gv==nil then gv=db.actor:game_vertex_id() end
	if lv==nil then lv=db.actor:level_vertex_id() end
	--if pos==nil then pos=db.actor:position() end
	local p_obj = alife():create(section,vector():set(x,y,z),lv,gv)
local packet = net_packet()
	packet:w_begin(0)
	p_obj:STATE_Write(packet)
	packet:r_seek(2)
local game_vertex_id = packet:r_u16()
local distance = packet:r_float()
local direct_control = packet:r_s32()
local level_vertex_id = packet:r_s32()
local object_flags = packet:r_s32()
local custom_data = packet:r_stringZ()
local story_id = packet:r_s32()
local spawn_story_id = packet:r_s32()
local shape_count = packet:r_u8()
	for i=1,shape_count do
	local shape_type = packet:r_u8()
		if shape_type == 0 then 
			local center = packet:r_vec3()
			local radius = packet:r_float()
		else
			local box = packet:r_matrix()
		end
	end
local restrictor_type = packet:r_u8()
local max_power = packet:r_float()
local owner_id = packet:r_s32()
local enabled_time = packet:r_s32()
local disabled_time = packet:r_s32()
local start_time_shift = packet:r_s32()
local offline_interactive_radius = packet:r_float()
local artefact_spawn_count = packet:r_u16()
local artefact_position_offset = packet:r_s32()
local last_spawn_time_present = packet:r_u8()

	packet:w_u16(game_vertex_id)
	packet:w_float(distance)
	packet:w_s32(direct_control)
	packet:w_s32(level_vertex_id)
	packet:w_s32(object_flags)
	if mode~=nil then custom_data = mode end
	packet:w_stringZ(custom_data)
	packet:w_s32(story_id)
	packet:w_s32(spawn_story_id)
	packet:w_u8(1) -- количество фигур
	packet:w_u8(0) -- тип фигуры: сфера
local sphere_center = vector()
	sphere_center:set(0,0,0)
	packet:w_vec3(sphere_center)
	radius = rad_anom
	packet:w_float(radius)
	packet:w_u8(restrictor_type)
	owner_id = bit_not(0)
	packet:w_s32(owner_id)
	if time1~=nil then packet:w_s32(time1) else packet:w_s32(enabled_time) end
	if time2~=nil then packet:w_s32(time2) else packet:w_s32(disabled_time) end
	packet:w_s32(start_time_shift)
	packet:w_float(offline_interactive_radius)
	packet:w_u16(artefact_spawn_count)
	packet:w_s32(artefact_position_offset)
	if mode==nil then packet:w_u8(last_spawn_time_present) else end
	p_obj:STATE_Read(packet,packet:w_tell()-packet:r_tell())
return p_obj
end

 

Грешил на owner_id, но его изменение или даже удаление строки owner_id = bit_not(0) не отменяет агрессию неписей; при удалении всех упоминаний owner_id аномалия вообще не спавнится. В чем может быть проблема?

P.S. Что означает bit_not(0) в данном случае?

New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор

Русификатор для игры Vendetta: Curse of Raven's Cry

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

@Jekyll 

ID = 0 это актер(ГГ). Естественно, что неписи на актера агрятся. Лучше, после создания объекта, получить его ID и присвоить его для owner_id.

  • Согласен 3
Ссылка на комментарий
19 часов назад, Jekyll сказал(а):

Что означает bit_not(0) в данном случае?

-1, т.е. нет значения.

  • Спасибо 1
  • Согласен 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий
5 часов назад, AndreySol сказал(а):

ID = 0

Не понял, где в функции указано, что там 0? Если bit_not(0), то, по словам @naxac , это -1, но не 0...

Ну ладно, ID аномалии я-то получил, а как его присвоить для owner_id? В нет_спавне биндера кусок нет-пакета перебрать? Таких вариантов, как self.object.owner_id или self.object:owner_id(), не существует...

New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор

Русификатор для игры Vendetta: Curse of Raven's Cry

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

@Jekyll , вот это

owner_id = bit_not(0)

заменить на

owner_id = p_obj.id

Хотя, по идее, при owner_id = -1 хит и так должен наноситься "от имени" аномалии.

Изменено пользователем naxac
  • Спасибо 1
  • Нравится 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий
11 часов назад, naxac сказал(а):

хит и так должен наноситься "от имени" аномалии.

А в движке Вы смотрели, действительно имеется проверка, что если owner_id = -1, то берем ID аномалии? Прежде, чем говорить об идее, надобно смотреть в исходники движка. У нас идеи одни, а у разрабов того времени, они могли сильно отличаться...

Это мое личное мнение.

  • Согласен 1
Ссылка на комментарий
3 часа назад, naxac сказал(а):

При записи пакета параметр max_power пропущен.

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

New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор

Русификатор для игры Vendetta: Curse of Raven's Cry

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

Как вывести сообщение в верхней центральной точке, где высвечиваетсч активное задание при нажатии таб? Мне нужен именно скрипт, отвечающий жа это, хочу заменить таким типом сообщения то, которое просто приходит на пда. Нужно сделать сообщение для дозиметра. Не хочется засорять историю сообщений пда постоянными измерениями уровня радиации.

Как проверить наличие артефакта (любого) в инвентаре гг? И как сделать функцию, которая будет каждую секунду прибавлять немного радиации?

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

Добрый день, подскажите пожалуйста, как прописать скрипт на дверь в сталкер зов припяти, чтоб дверь открывалась  нажатием клавиши "F" (использовать). Скрипт двери я прописал, но дверь открывается только в одну сторону и только тогда, когда актер в нее упирается. А хотелось бы как в игре, чтоб выскочило сообщение (открыть дверь - нажмите F)

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

@strannik-rus , стандартный набор  логики ph_door. От части к части, в принципе, не сильно менялся. Пример ingame:

gamedata\configs\scripts\jupiter\jup_b1_door.ltx

Скрытый текст

 

[logic]
active = ph_door@locked

[ph_door@locked]
locked = true
closed = true
snd_open_start = trader_door_locked
tip_open = jup_b1_door_is_closed
on_info = {=actor_in_zone(jup_b1_open_door_zone)} ph_door@close

[ph_door@close]
locked = false
closed = true
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop
on_use = {+jup_b1_give_task} ph_door@open %+jup_b1_already_visited%, ph_door@open
tip_open = tip_door_open
on_info = {!actor_in_zone(jup_b1_open_door_zone)} ph_door@locked

[ph_door@open]
locked = false
closed = false
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop
tip_close = jup_b1_bar_door
on_info = {+jup_b1_give_task -jup_b1_already_visited} ph_door@locked %+jup_b1_already_visited%

 

Смотри, что мог упустить :pardon:

Изменено пользователем Купер
Ссылка на комментарий
25.01.2021 в 11:50, Купер сказал(а):

@strannik-rus , стандартный набор  логики ph_door. От части к части, в принципе, не сильно менялся. Пример ingame:

gamedata\configs\scripts\jupiter\jup_b1_door.ltx

  Показать

 

[logic]
active = ph_door@locked

[ph_door@locked]
locked = true
closed = true
snd_open_start = trader_door_locked
tip_open = jup_b1_door_is_closed
on_info = {=actor_in_zone(jup_b1_open_door_zone)} ph_door@close

[ph_door@close]
locked = false
closed = true
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop
on_use = {+jup_b1_give_task} ph_door@open %+jup_b1_already_visited%, ph_door@open
tip_open = tip_door_open
on_info = {!actor_in_zone(jup_b1_open_door_zone)} ph_door@locked

[ph_door@open]
locked = false
closed = false
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop
tip_close = jup_b1_bar_door
on_info = {+jup_b1_give_task -jup_b1_already_visited} ph_door@locked %+jup_b1_already_visited%

 

Смотри, что мог упустить :pardon:

Это логика закрытой двери, тоесть выскакивает сообщение, что дверь закрыта изнутри. Но я уже нашел ту, что нужно.

Правильная - вот такая:

Скрытый текст

 

[collide]
ignore_static

[logic]
active = ph_door@close

[ph_door@close]
locked = false
closed = true
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop
on_use = ph_door@open

[ph_door@open]
locked = false
closed = false
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop
on_use = ph_door@close  

 

 

Добавлено  Опричник,

Изучите "Правила цитирования". https://www.amk-team.ru/forum/topic/13514-obyavleniya/

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

@strannik-rus , дык... более общий случай, "с наворотами". Для понимания принципа. :biggrin:

Впрочем, вопрос уже решён. :good:

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

Всем привет! Парни подскажите функцию на проверку рядом активной аномалии. Например: если аномалия ЖАРКА рядом с гг находится в радиусе 2 метров происходит то или иное действие!

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

@Colder Если совсем примитивно реализовать, то функция должна перебирать все 65к объектов в игре, выбирая среди них нужные аномалии и проверяя дистанцию до каждой.

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

Второй способ выгоднее тем, что перебираются только аномалии. А не все-подряд объекты.

Что-то еще более-другое, вряд ли возможно выдумать на оригинальном движке. А движок вы кстати не уточнили...

  • Согласен 1

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

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

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

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

@Colder обозначь аномалию, как объект и установи условие, при котором между ГГ и объектом будет меньше указанного расстояния для выполнения необходимого действия. И, как и обозначил Zander, это перебор 65 тысяч объектов, но способ рабочий.

Если движок 10006 и ранее, посмотри в файлах амк-мода (amk_anoms.script), как определить аномалию. Дальше методом научного тыка тебе станет уже понятнее.

Изменено пользователем mole venomous
  • Спасибо 1

Здесь могла быть ваша реклама.

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

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

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

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

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

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

Войти

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

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

AMK-Team.ru

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