Jekyll 92 Опубликовано 10 Января 2021 Здравствуйте. Такой вопрос, для общего развития: может ли привести скриптовый спавн аномалий по "невалидным" координатам к проблемам впоследствии? Под "невалидными" координатами подразумеваются, например, крыши зданий, вышек, транспорт и т.п., когда при снятии позиции известным способом выводится инфа valid = false. Кто-нибудь так экспериментировал? Аномалии-то спавнятся и работают без проблем, но хотелось бы знать наверняка. New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор Русификатор для игры Vendetta: Curse of Raven's Cry Поделиться этим сообщением Ссылка на сообщение
Jekyll 92 Опубликовано 10 Января 2021 11 минут назад, Zander_driver сказал(а): Какого рода "проблемы" имеются в виду? Мало ли, сейвы начнут биться или еще что в таком же духе. Просто так, потому что вертекс вдруг невалидный. Это же Х-рэй как-никак:) 4 минуты назад, mole venomous сказал(а): он для чего то нужен 5 минут назад, Zander_driver сказал(а): предполагаю что не для аномалий Вроде бы, если арты спавнятся в невалидных вертексах (например, за пределами игровой зоны локации - не помню, как это правильно называется), будет вылет, или я что-то путаю? New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор Русификатор для игры Vendetta: Curse of Raven's Cry Поделиться этим сообщением Ссылка на сообщение
Jekyll 92 Опубликовано 15 Января 2021 Здравствуйте! При попадании в аномалию, заспавненную скриптом, неписи агрятся на ГГ. Видимо, неписи воспринимают хит от аномалии как хит от актора. Функция спавна аномалии: Скрытый текст 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 92 Опубликовано 16 Января 2021 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 92 Опубликовано 19 Января 2021 3 часа назад, naxac сказал(а): При записи пакета параметр max_power пропущен. И правда... Вернул на место - все заработало как надо... Не представлял даже, что отсутствие этого параметра так важно и может сломать нанесение хита неписям... Урок усвоен. New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор Русификатор для игры Vendetta: Curse of Raven's Cry Поделиться этим сообщением Ссылка на сообщение
Jekyll 92 Опубликовано 24 Марта 2021 Считать какой-либо параметр в секции монстра можно через system_ini():r_string(секция,"параметр"), но как установить новое значение нужного параметра скриптом? На некоторые параметры есть свои функции (например, eye_range - set_range()). А как быть с остальными? Только править движок? New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор Русификатор для игры Vendetta: Curse of Raven's Cry Поделиться этим сообщением Ссылка на сообщение
Jekyll 92 Опубликовано 26 Июля 2021 Здравствуйте. Как определить, принадлежит ли определенный гейм-вертекс текущей локации? ЗП. New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор Русификатор для игры Vendetta: Curse of Raven's Cry Поделиться этим сообщением Ссылка на сообщение
Jekyll 92 Опубликовано 28 Декабря 2021 Здравствуйте. Как передать предмет неписю от актора не по секции, а по id? Нужно сделать это в диалоговом окне, типа как функцией "dialogs.relocate_item_section_from_actor(first_speaker,second_speaker,section)". New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор Русификатор для игры Vendetta: Curse of Raven's Cry Поделиться этим сообщением Ссылка на сообщение
Jekyll 92 Опубликовано 9 Февраля 2023 Здравствуйте! Как итерировать инвентарь НПС во время диалога с ним? Способ, подсмотренный в скрипте оригинала ЗП, типа 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 Поделиться этим сообщением Ссылка на сообщение
Jekyll 92 Опубликовано 12 Февраля 2023 Как заставить 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 Поделиться этим сообщением Ссылка на сообщение
Jekyll 92 Опубликовано 12 Февраля 2023 @WinCap Да. New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор Русификатор для игры Vendetta: Curse of Raven's Cry Поделиться этим сообщением Ссылка на сообщение