Vano_Santuri 33 Опубликовано 17 Января 2010 Вот такой вопрос, если ответите, то буду очень признателен: 1)Есть функция нет-пакета для спавна аномалий, за авторством Шокера, делалась для ЧН, подходит ли для ЗП? Если нет , что поправить? function create_anomalies(section,rad_anom,x,y,z,lv,gv,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 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 mode~=nil then custom_data = mode 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 = rad_anom 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) if mode == nil then packet:w_u8(last_spawn_time_present) end p_obj:STATE_Read(packet, packet:w_tell()-packet:r_tell()) return p_obj end 2)Что такое стэки(стеки)? 3)Что такое перпелолнение стэков(стеков)? 4)К чему приводит переполнение стэков(стеков)? Вылеты без логов могут быть вызваны переполнением стэков(стеков)? 5)Если я заспавним аномалию через нет-пакет, могу ли я удалить ее этой функцией? function remove_anom(obj) if obj~=nil then alife():release(alife():object(obj:id()), true) return true end return false end вернее, это будет нормальное удаление? или оно может быть с ошибками? Есть ли специальная функция, удаляющая объекты, заспавненные нет-пакетом? 6)Довольно простой пример, заспавнил 100 аномалий, удалил их все, потом опять заспавнил, и так н-ое количество раз, в итоге, при подходе к какой нить области(аномалии) происходит вылет без лога(стар трэк), вопрос в следующем, почему так? Что-то кончается, что-то начинается... Поделиться этим сообщением Ссылка на сообщение
Vano_Santuri 33 Опубликовано 17 Января 2010 (изменено) Monnoroch, Все, решил свою проблему, вылет был из-за того, я так полагаю, что слишком много действий в один момент. Сделал по умному, разбил эти 100 аномалий на 10 циклов, и поставил на таймер, теперь через каждые 2 минуты спавнится цикл аномалий из 10 штук. класно Даже не зависает ни на капельку. Немнго инфы для людей, возможно к лассам она не имеет никакого значения, но вот : 1)Допустим вы хотите заспавнить предмет\монстра \непися или еще чего в случайно рандомном месте , но не знаете как.Вот пример простой функции: function random_place_spawn() lv_new = math.random(1845795) -- ( количество левелвертесов на уровне, или иное значение, если надо сузить область) pos_new = level.vertex_position(lv_new) --(этот метод находит вершины вертекса) alife():create("cекция объекта",vector():set(pos_new.x,pos_new.y,pos_new.z),lv_new,0) end 0 - это геймвертекс затона, т.е общий, но работает для всех точек. 317 - Юпитер 666 - Припять Изменено 15 Декабря 2017 пользователем Murarius 1 Что-то кончается, что-то начинается... Поделиться этим сообщением Ссылка на сообщение
Vano_Santuri 33 Опубликовано 17 Января 2010 malandrinus, я попробовал по 10 раз по 10 через некоторый промежуток времени, привязал к таймеру, все отлично, Просто делал динам.аномалии, принцип примитивный. Скрипт ищет нужные секции, и удаляет их (перебор каждого из 65565 айди и сравнения его с секциями, которые задал) и вторая чать просто спавнит их.Когда пробовал по 100 за раз , рано или поздно, происходили вылеты(лог есть, но только стак трэк и все), а сейчас через таймер амк сделал примитивный цикл, по 10 шт, пока все отлично, уже 125 раз на данный момент переспавним, оббегал всю локацию. Норм, и во время спавна (я туда посыл новости приписал) даже не подвисает нисколько. Единственно хотел спросить. Вергас как-то мне сказал, что если один скрипт (сам файл ил другое что-то) будет содержать очень много всяких функций, которые будут вызываться из разных мест, то будет переполнение стэков. Так вот у меня вопрос. Если я разделю один скрипт( 92 кб, там много чего) на несколько частей, то как это повлияет на работу скрипта\игры, будут ли тормоза? или лучше все в одном крипте хранить? Что-то кончается, что-то начинается... Поделиться этим сообщением Ссылка на сообщение
Vano_Santuri 33 Опубликовано 21 Января 2010 (изменено) У меня возник такой очень интересный вопрос. Он не по функциям или классам, а скорее по структуре и архитектуре. Допустим у меня есть пачка функций. Нужно написать такую функцию, что когда я её вызываю , она рандомно выбирает любую функцию из той пачки и вызывает её. Можно примерчик? А то у меня фантазии не хватило, получилось сделать через if math.random(0,1)>0.5 then ........ и так в несколько этажей, очень неудобно. Можно ли как-нибудь бахнуть все функции списочком, присвоить им циферки, и чтоб функция выбирала циферку, и запускала функцию, которая соответствует выбранной цифре? Изменено 21 Января 2010 пользователем Vano_Santuri Что-то кончается, что-то начинается... Поделиться этим сообщением Ссылка на сообщение
Vano_Santuri 33 Опубликовано 23 Января 2010 (изменено) Ясно, только один момент : [<ключ1>] = function1, <ключ1> - что подрузумевается под этим? произвольное слово? Или что-то другое. И еще вопрос, допустим идет вызов функции на какое-то условие : function has_info() if db.actor:has_info("info") then ................. end end Вызов пошел, если поршень есть, то скрипт срабатывает, а вот если поршня еще нет, то скрипт не срабатывает? и возвращает false ? Или это ему надо еще дописать? И несет ли такая форма записи нагрузку на память? Изменено 23 Января 2010 пользователем Vano_Santuri Что-то кончается, что-то начинается... Поделиться этим сообщением Ссылка на сообщение