PazDim 0 Опубликовано 14 Августа 2010 Прошу извинить меня за тупой и, впрочем, ненужный вопрос, но зачем в СДК создавать дополнительный виртуальный диск? все ведь и так работает(я имею ввиду редактирование музыки) Поделиться этим сообщением Ссылка на сообщение
PazDim 0 Опубликовано 15 Августа 2010 (изменено) Есть функции для преобразовывания вертексов в координаты и обратно? Очень нужно Добавлено через 151 мин.: И еще вопрос: вот создал я зону "zone_field_radioactive". Визуальный эффект есть(темнеет в глазах, счетчик гейгера трещит), но сама радиация не прибавляется. Как это исправить? Заранее спасибо Изменено 15 Августа 2010 пользователем PazDim Поделиться этим сообщением Ссылка на сообщение
PazDim 0 Опубликовано 16 Августа 2010 можно как-то узнать наименования минилокаций(Скадовск, железный лес ...) и через их имена узнать их координаты? И еще вопрос: где находится скрипт выброса и какая функция отвечает за спавн в нем? P.S. - ну можете что-нибудь посоветовать по зоне радиоктивности? создал я зону "zone_field_radioactive". Визуальный эффект есть(темнеет в глазах, счетчик гейгера трещит), но сама радиация не прибавляется. Пробовал с другими полями(пси, термо, кислота) - только визуал. Как это исправить? Заранее спасибо Поделиться этим сообщением Ссылка на сообщение
PazDim 0 Опубликовано 16 Августа 2010 Вот функция: function create_anomaly(zone_name,zone_radius,lv,gv,pos) local sobj=alife():create(zone_name,pos,lv,gv) local packet=net_packet() packet:w_begin(0) sobj:STATE_Write(packet) packet:r_seek(2) local game_vertex_id=packet:r_u16() local cse_alife_object__unk1_f32=packet:r_float() local cse_alife_object__unk2_u32=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 cse_alife_object__unk3_u32=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 cse_alife_custom_zone__unk1_f32=packet:r_float() local cse_alife_custom_zone__unk2_u32=packet:r_s32() local on_off_mode_enabled_time=packet:r_s32() local on_off_mode_disabled_time=packet:r_s32() local on_off_mode_shift_time=packet:r_s32() local offline_interactive_radius=packet:r_float() local artefact_spawn_places_count=packet:r_u16() local cse_alife_anomalous_zone__unk1_u32=packet:r_s32() local last_spawn_time_present=packet:r_u8() packet:w_u16(game_vertex_id) packet:w_float(cse_alife_object__unk1_f32) packet:w_s32(cse_alife_object__unk2_u32) packet:w_s32(level_vertex_id) packet:w_s32(object_flags) if init_data~=nil then custom_data=init_data end packet:w_stringZ(custom_data) packet:w_s32(story_id) packet:w_s32(cse_alife_object__unk3_u32) packet:w_u8(1) packet:w_u8(0) local sphere_center=vector() sphere_center:set(0, 0, 0) packet:w_vec3(sphere_center) radius=zone_radius packet:w_float(radius) packet:w_u8(restrictor_type) packet:w_float(cse_alife_custom_zone__unk1_f32) cse_alife_custom_zone__unk2_u32=bit_not(0) packet:w_s32(cse_alife_custom_zone__unk2_u32) packet:w_s32(on_off_mode_enabled_time) packet:w_s32(on_off_mode_disabled_time) packet:w_s32(on_off_mode_shift_time) packet:w_float(offline_interactive_radius) packet:w_u16(artefact_spawn_places_count) packet:w_s32(cse_alife_anomalous_zone__unk1_u32) sobj:STATE_Read(packet, packet:w_tell()-packet:r_tell()) return sobj end Пробовал спавнить аномалии(электра, газировка...) - все работает. Жизни отнимаются... разве что на свароге не отображаются. А вот радиоактивные, пси и другие поля не работают(есть только визуал) Поделиться этим сообщением Ссылка на сообщение
PazDim 0 Опубликовано 16 Августа 2010 (изменено) Мне его дал Shredder, вроде-бы вытащил из SGM-мода(вроде так называется), щас попробую твой(просто вроде бы пробовал - не получалось. Насчет параметра mode - если хочу заспавнить обычную аномалию, то его вообще не указывать? Или инициализировать nil-ом? И еще вопрос: Спавнил аномалии на затоне. Алгоритм дал Shredder: function respawn() local level_vertexes={ zaton = 1844793, jupiter = 1422445, pripyat = 477061 } local game_vertexes={ zaton = {0,316}, jupiter = {317,665}, pripyat = {666,856} } local lname= "jupiter" local gvn,gvx,lvx = game_vertexes[lname][1], game_vertexes[lname][2], level_vertexes[lname] for i=1,1000 do new_lv = math.random(1,lvx) local pos = level.vertex_position(new_lv) local new_gv = 0 local min_dist = 100000 for a = gvn, gvx do g1 = game_graph():vertex(a):game_point() if g1:distance_to(pos)<min_dist then min_dist = g1:distance_to(pos) new_gv = a end end alife():create("wpn_ak74",pos,new_lv,new_gv) pos = level.vertex_position(new_lv) create_anomaly("zone_mine_electric",1,new_lv,new_gv,pos) end end Если спавнить на затоне, то все работает на ура - аномалии спавнятся, как положено, на земле, в воздухе не висят, все что нужно - исключить такие области как скадовск. Но если спавнить на юпитер и при этом находясь на затоне, то аномалии будут висеть в воздухе и под землей. Как сделать спавн аномалий независимым от локаций? Изменено 16 Августа 2010 пользователем PazDim Поделиться этим сообщением Ссылка на сообщение
PazDim 0 Опубликовано 16 Августа 2010 (изменено) Немного разобрался - при спавне объектов на другую локацию алгоритм берет схему ландшафта текущей локации(т.е. есть если спавнить на юпитер с затона, то на юпитере аномалии будут расположены так, как если бы были заспавнены на затоне ). Что с этим делать - не знаю. Вот функция, с помощью которой получаю координаты: level.vertex_position(). Она возвращает координаты текущего уровня, а не того, который нужен(мне кажется, что из-за этого они неправильно спавнятся). Можно ей как-то указать локацию? P.S. Попробовал заспавнить радиацию - пробовал по-всякому(и nil, и "field") - разницы нету Добавлено через 131 мин.: Как удалить заспавненные аномалии? Изменено 16 Августа 2010 пользователем PazDim Поделиться этим сообщением Ссылка на сообщение
PazDim 0 Опубликовано 16 Августа 2010 (изменено) Мне нужно сделать так, чтобы при каждом выбросе аномалии меняли свои координаты. Как это реализуется - удалением и созданием или просто сменой координат(как это сделать - смутно представляю)?. Как это вообще делается? Изменено 16 Августа 2010 пользователем PazDim Поделиться этим сообщением Ссылка на сообщение