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

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

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

Ссылка на комментарий
Поделиться на других сайтах

2 часа назад, Jekyll сказал(а):

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

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

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

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

Ссылка на комментарий
Поделиться на других сайтах

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

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

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

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) в данном случае?

Ссылка на комментарий
Поделиться на других сайтах

@Jekyll 

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

Ссылка на комментарий
Поделиться на других сайтах

19 часов назад, Jekyll сказал(а):

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

-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(), не существует...

Ссылка на комментарий
Поделиться на других сайтах

@Jekyll , вот это

owner_id = bit_not(0)

заменить на

owner_id = p_obj.id

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

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

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

naxac.gif

Ссылка на комментарий
Поделиться на других сайтах

11 часов назад, naxac сказал(а):

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

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

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

Ссылка на комментарий
Поделиться на других сайтах

3 часа назад, naxac сказал(а):

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

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

Ссылка на комментарий
Поделиться на других сайтах

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

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

Ссылка на комментарий
Поделиться на других сайтах

@ARTLantist , вот в этой теме можешь найти ответы. Поиском пользуйся.

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

naxac.gif

Ссылка на комментарий
Поделиться на других сайтах

Добрый день, подскажите пожалуйста, как прописать скрипт на дверь в сталкер зов припяти, чтоб дверь открывалась  нажатием клавиши "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к объектов в игре, выбирая среди них нужные аномалии и проверяя дистанцию до каждой.

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

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

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

Мод, где не бывает одинаковых путей - Судьба Зоны. На базе модифицированного движка OGSR Engine.

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

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

 

Ссылка на комментарий
Поделиться на других сайтах

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

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

Изменено пользователем mole venomous
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

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

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

AMK-Team.ru

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