Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий
Zander_driver 10348 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 (изменено) @Charsi, Просто чудо =) Спасибо огромное. И так можно переопределять любые методы объектов, возвращаемых всяческими функциями? типа system_ini() например. А переопределить движковые методы, например пространства level - наверно не получится так? Там нам объект не выдается, у которого можно поле изменить... Изменено 19 Сентября 2015 пользователем Zander_driver Ссылка на комментарий
Карлан 1050 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 Переопределять можно все методы, в т.ч. и для гейм объектов, а так же добавлять новые. Пространство левел тому явно не исключение. @RayTwitty, на 4 движке не работает ХЕ Ссылка на комментарий
RayTwitty 558 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 (изменено) на 4 движке не работает ХЕ 4 движке Приближался конец 2015 года... А переопределить движковые методы, например пространства level - наверно не получится так? function level.new() return 0 endвсё работает. Изменено 19 Сентября 2015 пользователем RayTwitty 1 Ссылка на комментарий
Romz 142 Опубликовано 25 Сентября 2015 Поделиться Опубликовано 25 Сентября 2015 (изменено) Уважаемые скриптеры! Опять нужна ваша помощь... Есть скрипт, под ЗП, спавнящий аномалии. С самим размещением аномалий - никаких проблем, вроде бы, но... Есть в этом скрипте функция, которая работает с net-пакетами function create_anom(section,rad_anom,x,y,z,lv,gv,mode,time1,time2) 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) packet:r_seek(2) p_obj:STATE_Write(packet) 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) if time1 ~= nil then packet:w_s32(time1) else packet:w_s32(on_off_mode_enabled_time) end if time2 ~= nil then packet:w_s32(time2) else packet:w_s32(on_off_mode_disabled_time) end 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 Так вот. Похоже, что где-то что-то неправильно работает, и, возможно, в ней. Потому что периодически бьются сейвы, слетают скрипты, вылеты непонятные происходят... В данный момент я пока отключил этот скрипт совсем - нет ни вылетов, ни боя сохранений, скрипты работают нормально... Дык, если в функции ошибка, ткните, плиз, где. Или ткните носом в аналогичную функцию, гарантированно работающую в ЗП. Поиском по темам пробежался - как-то ничего похожего не нашлось... Изменено 25 Сентября 2015 пользователем Romz Ссылка на комментарий
Kirgudu 1323 Опубликовано 26 Сентября 2015 Поделиться Опубликовано 26 Сентября 2015 @Romz, пробежался глазами, вроде всё правильно. Единственное, что смутило, это packet:w_begin(0) packet:r_seek(2) p_obj:STATE_Write(packet)Я бы STATE_Write и r_seek поменял местами, сделав установку позиции чтения после записи в пакет, а не до. Вдруг эта позиция при записи может смещаться.Ну и непонятно, какие аргументы передаёшь ты в функцию извне. 1 Ссылка на комментарий
Stalkeruga_238 2 Опубликовано 26 Сентября 2015 Поделиться Опубликовано 26 Сентября 2015 Помогите привязать скрипт телепортации к какому либо поедаемому объекту, мол гг съел хлебушек и его перекинуло на янтарь. Скрипт телепортации собирался сделать на примере этого function osoznanie_decline(npc, actor)db.actor:disable_info_portion("oso_init_dialog")npc:stop_talk()actor:stop_talk()xr_effects.enable_ui(db.actor, nil)local point = patrol("mon_jump_aes2_walk")local look = patrol("mon_jump_aes2_look")db.actor:set_actor_position(point:point(0))local dir = look:point(0):sub(point:point(0))db.actor:set_actor_direction(-dir:getH())end Ссылка на комментарий
naxac 2571 Опубликовано 26 Сентября 2015 Поделиться Опубликовано 26 Сентября 2015 (изменено) @Stalkeruga_238, "на примере этого" не получится - для перехода на другую локацию нужен level_changer. А "привязать" - через каллбэк use_object в биндере актера. Изменено 26 Сентября 2015 пользователем naxac Ссылка на комментарий
HESH 64 Опубликовано 27 Сентября 2015 Поделиться Опубликовано 27 Сентября 2015 Вопрос: возможно ли заспавнить, например, АК с сразу же надетым аддоном? ps: если что, платформа - ЗП. 1 Ссылка на комментарий
AndrewMor 533 Опубликовано 27 Сентября 2015 Поделиться Опубликовано 27 Сентября 2015 Помогите привязать скрипт телепортации к какому либо поедаемому объекту, мол гг съел хлебушек и его перекинуло на янтарь. Смотри, как это сделано в Солянке. Тайники Кости: там портирует в пределах локации - мама не горюй. А далее - делай по аналогии. А насчет другой локации - да, скриптовый левел_ченжер тебе в помощь. Добавлено BFG, 27 Сентября 2015 В той же Солянке , в самом начале, выпиваешь лекарство Доктора и ГГ телепортирует с Кордона в Пещеру. Ссылка на комментарий
AuReN 0 Опубликовано 27 Сентября 2015 Поделиться Опубликовано 27 Сентября 2015 Всем привет. Интересует такой момент. Если перевести npc, который находиться в оффлайне на другой локации, в онлайн, то он будет перемещаться по своей локации? Ссылка на комментарий
Dennis_Chikin 3664 Опубликовано 27 Сентября 2015 Поделиться Опубликовано 27 Сентября 2015 (изменено) "на другой локации, в онлайн" - не бывает. (С) а что произойдет если все жесм. п1 Изменено 27 Сентября 2015 пользователем Dennis_Chikin Ссылка на комментарий
AuReN 0 Опубликовано 27 Сентября 2015 Поделиться Опубликовано 27 Сентября 2015 @Dennis_Chikin, а что произойдет если все же попытаться перевести его в онлайн? Ссылка на комментарий
UnLoaded 313 Опубликовано 28 Сентября 2015 Поделиться Опубликовано 28 Сентября 2015 возможно ли заспавнить, например, АК с сразу же надетым аддоном? Обычный спавн + правка нет-пакета. 1 Ссылка на комментарий
Romz 142 Опубликовано 28 Сентября 2015 Поделиться Опубликовано 28 Сентября 2015 (изменено) Ну и непонятно, какие аргументы передаёшь ты в функцию извне. Сама функция вызывается из другого места в этом же скрипте function spawn_anomaly_from_queue() local anom_t = anomaly_queue[#anomaly_queue] create_anom(anom_t.section, 4, anom_t.x, anom_t.y, anom_t.z, anom_t.level_vertex, anom_t.game_vertex, anom_t.field) table.remove(anomaly_queue, #anomaly_queue) end anomaly_queue - это табличка, куда складываются аномалии, типа, уровень, где она будет, координаты, тип. Ещё у меня возникает некоторое сомнение по поводу anom_t.field, потому что оно или "_zone", или nil Так же, раскопки в различных модах дали ещё два варианта похожих скриптов function rewrite_anomaly(obj, in_custom_data, in_radius) -- dbglog("level_anomaly.rewrite_anomaly()") packet:w_begin(0) packet:r_seek(2) obj:STATE_Write(packet) 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() if packet:r_elapsed() ~= 0 then abort("left=%d", packet:r_elapsed()) end packet:w_begin(0) 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 in_custom_data ~= nil then custom_data = in_custom_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) if in_radius ~= nil then radius = in_radius end 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) packet:w_u8(last_spawn_time_present) packet:r_seek(2) obj:STATE_Read(packet, packet:w_tell()) return obj end и function create_anomaly( zone_name, zone_radius, position, lv, gv ) ----------------------------Создаём объект-аномалию local sobj = alife():create( zone_name, position, 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 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_u32() local disabled_time = packet:r_u32() local start_time_shift = packet:r_u32() 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 = packet:r_u8() ------------------------------------------Меняем данные пакета local new_center = vector():set( 0, 0, 0 ) owner_id = bit_not( 0 ) restrictor_type = 3 max_power = 0 offline_interactive_radius = 30 artefact_spawn_count = 32 last_spawn_time = 0 ------------------------------------------------Пишем в пакет packet:w_begin( 0 ) 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 ) packet:w_stringZ( custom_data ) packet:w_s32( story_id ) packet:w_s32( spawn_story_id ) packet:w_u8( 1 ) packet:w_u8( 0 ) packet:w_vec3( new_center ) packet:w_float( zone_radius ) packet:w_u8( restrictor_type ) packet:w_float( max_power ) packet:w_s32( owner_id ) packet:w_u32( enabled_time ) packet:w_u32( disabled_time ) packet:w_u32( start_time_shift ) packet:w_float( offline_interactive_radius ) packet:w_u16( artefact_spawn_count ) packet:w_s32( artefact_position_offset ) packet:w_u8( last_spawn_time ) packet:r_seek( 2 ) sobj:STATE_Read( packet, packet:w_tell() ) return sobj end Разницу в них-то я найду, но ввиду полного непонимания работы с нет-пакетами, боюсь туда лезть, чтобы не поломать совсем... Upd По различиям. Я вижу из различий: В том скрипте, что у меня есть сейчас 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 А в тех, что я нарыл - packet:w_u8( last_spawn_time ) packet:r_seek(2) obj:STATE_Read(packet, packet:w_tell()) return obj end и packet:w_u8( last_spawn_time ) packet:r_seek( 2 ) sobj:STATE_Read( packet, packet:w_tell() ) return sobj end Это самый конец функций. Может ли это влиять? Изменено 28 Сентября 2015 пользователем Romz Ссылка на комментарий
Kirgudu 1323 Опубликовано 28 Сентября 2015 Поделиться Опубликовано 28 Сентября 2015 @Romz, тут нужны, наверное, специалисты по аномалиям именно в ЗП, так как мои знания ограничиваются только ЧН. Например, Ещё у меня возникает некоторое сомнение по поводу anom_t.field, потому что оно или "_zone", или nilдля ЧН это применяется при спавне аномальных полей, и может принимать значение "field", а не "_zone". В целом же любые манипуляции с нет-пакетом аномалий преследуют, как правило, 2 цели: 1. установка нужного размера (через радиус сферы); 2. установка кастом даты (как раз "field" для аномальных полей в ЧН, и, возможно, что-то другое для аномалий в других частях игры). Этим целям удовлетворяет, на мой взгляд, как первый скрипт, так и два других, явных ошибок я не вижу. Разве что, как уже писал выше, поменять строчки записи в пакет и установки позиции чтения из него местами. Но это уже на всякий случай; не могу сказать точно, является ли это ошибкой в действительности. Возможно, кто-нибудь сможет оказать бОльшую помощь. 1 Ссылка на комментарий
Romz 142 Опубликовано 28 Сентября 2015 Поделиться Опубликовано 28 Сентября 2015 (изменено) для ЧН это применяется при спавне аномальных полей, и может принимать значение "field", а не "_zone". А, ну да, "_field_", конечно-же. Извиняюсь за дезинформацию. И без подчёркиваний! Kirgudu Изменено 28 Сентября 2015 пользователем Kirgudu Ссылка на комментарий
Romz 142 Опубликовано 28 Сентября 2015 Поделиться Опубликовано 28 Сентября 2015 (изменено) И без подчёркиваний! Kirgudu Само собой. Переписал функцию. function create_anom(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 local pos = db.actor:position() if x == nil then x = pos.x end if y == nil then y = pos.y end if z == nil then z = pos.z 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_u32() local disabled_time = packet:r_u32() local start_time_shift = packet:r_u32() 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 = packet:r_u8() ---------------------Меняем данные пакета--------------------- local new_center = vector():set(0, 0, 0) owner_id = bit_not(0) offline_interactive_radius = 30 if mode ~= nil then custom_data = mode end if rad_anom ~= nil then radius = rad_anom end ---------------------------Пишем в пакет--------------------- packet:w_begin( 0 ) 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) packet:w_stringZ(custom_data) packet:w_s32(story_id) packet:w_s32(spawn_story_id) packet:w_u8(1) packet:w_u8(0) packet:w_vec3(new_center) packet:w_float(radius) packet:w_u8(restrictor_type) packet:w_float(max_power) packet:w_s32(owner_id) packet:w_u32(enabled_time) packet:w_u32(disabled_time) packet:w_u32(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) end packet:r_seek(2) p_obj:STATE_Read(packet, packet:w_tell()) return p_obj end Погонял в таком виде, некоторое количество раз сохранился-загрузился, попереходил между локациями. Вроде бы теперь всё работает, как должно. Вылетов на загрузке сохранений нет, просто вылетов тоже нет, скрипты вроде не слетают. Вопрос возник такого плана: возможно ли аномалии переводить в офлайн при удалении от них ГГ на определённое расстояние, и выдёргивать их оттуда при приближении ГГ к ним? Смысл сего действа - повысить производительность. Просто НПЦ такое проделывают, может и для других объектов возможно? Изменено 28 Сентября 2015 пользователем Romz Ссылка на комментарий
Romz 142 Опубликовано 30 Сентября 2015 Поделиться Опубликовано 30 Сентября 2015 Блин, ну неужели нет никакой информации по переводу ЛЮБЫХ объектов в онлайн\офлайн? Про неписей понаписано дофига, а вот про остальное... Ладно, другой вопрос. Как проверить, что ГГ заспавнился на локе? Типа if db.actor:что_то_там then? А что? Нужно получить информацию о том, что локация и все объекты загрузились, при переходе на другую локу, начале игры, загрузке сохранения. Поиском по ресурсам пробежался - не нашёл. Не, ну можно, конечно, намутить инфопоршней там всяких и из разных биндов их вызывать и проверять. Но... Ради одной проверки такое городить не хочется. Нужно проверить это один раз в surge_manager.script, на апдейте этого самого CSurgeManager и вызвать определённое действие. Ссылка на комментарий
UnLoaded 313 Опубликовано 30 Сентября 2015 Поделиться Опубликовано 30 Сентября 2015 (изменено) Нужно получить информацию о том, что локация и все объекты загрузились Пробуй if device().precache_frame <= 1 then, обычно это используется в каком-либо апдейте. возможно ли аномалии переводить в офлайн при удалении от них ГГ на определённое расстояние А разве они и так не переходят в он\офф в зависимости от alife-расстояния ? Изменено 30 Сентября 2015 пользователем UnLoaded 1 Ссылка на комментарий
Romz 142 Опубликовано 30 Сентября 2015 Поделиться Опубликовано 30 Сентября 2015 (изменено) Пробуй if device().precache_frame <= 1 then, Ок, попробую. Только обычно if(device().precache_frame > 1) then return end Это так в CSurgeManager:update. То есть, внутри этой конструкции можно поставить флаг, а сразу после - вызвать функцию, которая проверит этот флаг, сделает какую-то работу, которую нужно сделать только один раз за загрузку, а в конце CSurgeManager:update сбросить этот флаг. А разве они и так не переходят в он\офф в зависимости от alife-расстояния ? Стандартные аномалии - возможно. А вот динамически добавленные - видны через всю локу. По крайней мере - в ЗП. Изменено 30 Сентября 2015 пользователем Romz Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти