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

Внимание.

В следствии глобального сбоя системы сайт восстановлен из бэкапа за 16.10.2026

 

_Val_ _Val_

Скриптование


Svoboда

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

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

Такой вопрос, для общего развития: может ли привести скриптовый спавн аномалий по "невалидным" координатам к проблемам впоследствии? Под "невалидными" координатами подразумеваются, например, крыши зданий, вышек, транспорт и т.п., когда при снятии позиции известным способом выводится инфа valid = false. Кто-нибудь так экспериментировал? Аномалии-то спавнятся и работают без проблем, но хотелось бы знать наверняка.

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

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

Поделиться этим сообщением


Ссылка на сообщение
11 минут назад, Zander_driver сказал(а):

Какого рода "проблемы" имеются в виду?

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

 

4 минуты назад, mole venomous сказал(а):

он для чего то нужен

 

5 минут назад, Zander_driver сказал(а):

предполагаю что не для аномалий

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

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

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

Поделиться этим сообщением


Ссылка на сообщение

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

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

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

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

Поделиться этим сообщением


Ссылка на сообщение
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

Поделиться этим сообщением


Ссылка на сообщение
3 часа назад, naxac сказал(а):

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

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

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

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

Поделиться этим сообщением


Ссылка на сообщение

Считать какой-либо параметр в секции монстра можно через system_ini():r_string(секция,"параметр"), но как установить новое значение нужного параметра скриптом?

На некоторые параметры есть свои функции (например, eye_range - set_range()). А как быть с остальными? Только править движок?

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

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

Поделиться этим сообщением


Ссылка на сообщение

Здравствуйте. Как определить, принадлежит ли определенный гейм-вертекс текущей локации? ЗП.

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

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

Поделиться этим сообщением


Ссылка на сообщение

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

Как передать предмет неписю от актора не по секции, а по id? Нужно сделать это в диалоговом окне, типа как функцией "dialogs.relocate_item_section_from_actor(first_speaker,second_speaker,section)".

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

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

Поделиться этим сообщением


Ссылка на сообщение

Здравствуйте!
Как итерировать инвентарь НПС во время диалога с ним? Способ, подсмотренный в скрипте оригинала ЗП, типа

local npc = dialogs.who_is_npc(first_speaker,second_speaker)
	local function itr_inv(temp,item)
	.....
	end
npc:iterate_inventory(itr_inv,nil)

не помог.

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

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

Поделиться этим сообщением


Ссылка на сообщение

Как заставить math.max обратиться к таблице?


math.max(1,2,3,4,5) - работает, но таблица предполагается динамичной, способ не подходит

local table = {1,2,3,4,5} (условно)

math.max(table) - не работает (вылет - number expected, got table)

Искал ответ в справочниках по луа и здесь на форуме - не нашел. Полагаю, нужно использовать какой-то метод, но какой - не знаю. table.concat выдает строку, следовательно - вылет (number expected, got string).

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

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

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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