e1_nin0 3 Опубликовано 20 Марта 2016 Смотрю в каждом втором моде динамические аномалии реализованы, а отдельно нигде не найти. Из ARS мода взял скрипт level_anomaly.script, но как его запустить? В bind_stalker.script и остальных скриптах (которые упоминаются в level_anomaly.script) прописал, как и в ARS моде , но при загрузке вылетает. Может кто нибудь подскажет как сделать динамические аномалии с этим скриптом или другой способ? Пробовал еще скрипт из OGSM, все работает, но не так как нужно. Все аномалии рандомно по карте раскидываются, а надо, чтобы старые аномалии на месте оставались. Поделиться этим сообщением Ссылка на сообщение
e1_nin0 3 Опубликовано 21 Марта 2016 Просмотрел все скрипты, дин. аномалии вызываются из bind_stalker, остальные вызовы дин. аномалий используются для вызова других скриптов, которые мне не нужны. В level_anomaly используются скрипты ars, ars_mod, se_zones, xrs_utils. Оставил в них только нужные мне функции. В se_zones закоментировал ссылки на ненужный скрипт zone_mgr. Вписал в surge_manager нужные строки с вызовом менеджера аномалий из level_anomaly и в bind_stalker как в ARS модепрописал менеджер аномалий и в update(delta) обновление этого менеджера. В итоге все равно вылет при загрузке. Пробовал редактировать _g.script , вписал туда новый новый класс аномалий и функцию. Ничего не выходит. Если уж так не получается, может кто нибудь написать функцию аномалии с таймерами? Вернее функция у меня есть, я хочу узнать как эти таймеры работают. Напишите готовый пример. Поделиться этим сообщением Ссылка на сообщение
e1_nin0 3 Опубликовано 21 Марта 2016 (изменено) Или используя скрипт dexxxа function dinamic_anomalis() for k=1, 65535 do obj = level.object_by_id(k) if obj ~= nil then if IsAnom(obj)==true then lv_id=obj:level_vertex_id() gv_id=obj:game_vertex_id() local lv_new local pos_new = vector() local n_obj lv_new = math.random(1571597) pos_new = level.vertex_position(lv_new) if string.find(obj:section(), "zone_mine_gravitational") or string.find(obj:section(), "_field_") or string.find(obj:section(), "zone_radioactive") then n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field") else n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id) end remove_item(obj) end end end end Если убрать удаление аномалий remove_item(obj), то старые аномалии останутся на месте, а новые будут размножаться. Можно ли как то сделать, чтобы спустя какой то период аномалии, созданные скриптом удалялись? Изменено 21 Марта 2016 пользователем e1_nin0 Поделиться этим сообщением Ссылка на сообщение
e1_nin0 3 Опубликовано 21 Марта 2016 Ясно, спасибо за ответ. А можно создать псевдодинамические аномалии с таймерами, например по 30 минут реального времени. Чтобы каждая аномалия имела свой таймер запуска и спящего режима. Т.о. имитировать динамику. Или создать например 10 паков по 100 аномалий и каждый выброс рандомно выбирать какой из паков выберется. Это реально сделать или можно не заморачиваться? Поделиться этим сообщением Ссылка на сообщение
e1_nin0 3 Опубликовано 22 Марта 2016 (изменено) В общем подправил немного скрипт dexxxа. Теперь при первом посещении по локации рандомно спавнятся аномалии. Старые аномалии не затрагиваются, скрипт копирует имеющиеся аномалии на карте и разбрасывает эти копии по карте. Вот основная функция: function dinamic_anomalis() if level.name() == "zaton" then not has_alife_info("zaton_dinamic_anomalis_done") then for k=1, 65535 do obj = level.object_by_id(k) if obj ~= nil then if IsAnom(obj)==true then lv_id=obj:level_vertex_id() gv_id=obj:game_vertex_id() local lv_new local pos_new = vector() local n_obj lv_new = math.random(1571597) pos_new = level.vertex_position(lv_new) if string.find(obj:section(), "zone_mine_gravitational") or string.find(obj:section(), "zone_mine_acidic") or string.find(obj:section(), "zone_mine_electric") or string.find(obj:section(), "mine_thermal") or string.find(obj:section(), "_field_") then n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field") else n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id) end end end end db.actor:give_info_portion("zaton_dinamic_anomalis_done") elseif level.name() == "jupiter" then not has_alife_info("jupiter_dinamic_anomalis_done") then for k=1, 65535 do obj = level.object_by_id(k) if obj ~= nil then if IsAnom(obj)==true then lv_id=obj:level_vertex_id() gv_id=obj:game_vertex_id() local lv_new local pos_new = vector() local n_obj lv_new = math.random(1571597) pos_new = level.vertex_position(lv_new) if string.find(obj:section(), "zone_mine_gravitational") or string.find(obj:section(), "zone_mine_acidic") or string.find(obj:section(), "zone_mine_electric") or string.find(obj:section(), "mine_thermal") or string.find(obj:section(), "_field_") then n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field") else n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id) end end end end db.actor:give_info_portion("jupiter_dinamic_anomalis_done") elseif level.name() == "pripyat" then not has_alife_info("pripyat_dinamic_anomalis_done") then for k=1, 65535 do obj = level.object_by_id(k) if obj ~= nil then if IsAnom(obj)==true then lv_id=obj:level_vertex_id() gv_id=obj:game_vertex_id() local lv_new local pos_new = vector() local n_obj lv_new = math.random(1571597) pos_new = level.vertex_position(lv_new) if string.find(obj:section(), "zone_mine_gravitational") or string.find(obj:section(), "zone_mine_acidic") or string.find(obj:section(), "zone_mine_electric") or string.find(obj:section(), "mine_thermal") or string.find(obj:section(), "_field_") then n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field") else n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id) end end end end db.actor:give_info_portion("pripyat_dinamic_anomalis_done") end end Доп. функции: function IsAnom (obj) local s = obj:section() if string.find(s, "zone_mine_gravitational_strong") or string.find(s, "zone_mine_gravitational_average") or string.find(s, "zone_mine_acidic") or string.find(s, "zone_mine_thermal_strong") or string.find(s, "zone_mine_electric") then return true else return false end end 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) 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) 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) else end p_obj:STATE_Read(packet, packet:w_tell()-packet:r_tell()) return p_obj end Если прописать в bind_stalker работать будет? Именно так, как я хочу, чтобы аномалии спавнились только один раз на каждой локе. Устранил ошибке в скрипте. function dinamic_anomalis() if level.name() == "zaton" then if not has_alife_info("zaton_dinamic_anomalis_done") then for k=1, 65535 do obj = level.object_by_id(k) if obj ~= nil then if IsAnom(obj)==true then lv_id=obj:level_vertex_id() gv_id=obj:game_vertex_id() local lv_new local pos_new = vector() local n_obj lv_new = math.random(1571597) pos_new = level.vertex_position(lv_new) if string.find(obj:section(), "zone_mine_gravitational") or string.find(obj:section(), "zone_mine_acidic") or string.find(obj:section(), "zone_mine_electric") or string.find(obj:section(), "zone_mine_thermal") or string.find(obj:section(), "_field_") then n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field") else n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id) end end end db.actor:give_info_portion("zaton_dinamic_anomalis_done") end end elseif level.name() == "jupiter" then if not has_alife_info("jupiter_dinamic_anomalis_done") then for k=1, 65535 do obj = level.object_by_id(k) if obj ~= nil then if IsAnom(obj)==true then lv_id=obj:level_vertex_id() gv_id=obj:game_vertex_id() local lv_new local pos_new = vector() local n_obj lv_new = math.random(1571597) pos_new = level.vertex_position(lv_new) if string.find(obj:section(), "zone_mine_gravitational") or string.find(obj:section(), "zone_mine_acidic") or string.find(obj:section(), "zone_mine_electric") or string.find(obj:section(), "zone_mine_thermal") or string.find(obj:section(), "_field_") then n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field") else n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id) end end end db.actor:give_info_portion("jupiter_dinamic_anomalis_done") end end elseif level.name() == "pripyat" then if not has_alife_info("pripyat_dinamic_anomalis_done") then for k=1, 65535 do obj = level.object_by_id(k) if obj ~= nil then if IsAnom(obj)==true then lv_id=obj:level_vertex_id() gv_id=obj:game_vertex_id() local lv_new local pos_new = vector() local n_obj lv_new = math.random(1571597) pos_new = level.vertex_position(lv_new) if string.find(obj:section(), "zone_mine_gravitational") or string.find(obj:section(), "zone_mine_acidic") or string.find(obj:section(), "zone_mine_electric") or string.find(obj:section(), "zone_mine_thermal") or string.find(obj:section(), "_field_") then n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field") else n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id) end end end db.actor:give_info_portion("pripyat_dinamic_anomalis_done") end end end end function IsAnom (obj) local s = obj:section() if string.find(s, "zone_mine_gravitational_strong") or string.find(s, "zone_mine_gravitational_average") or string.find(s, "zone_mine_acidic") or string.find(s, "zone_mine_thermal_strong") or string.find(s, "zone_mine_electric") then return true else return false end end 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) 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) 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) else end p_obj:STATE_Read(packet, packet:w_tell()-packet:r_tell()) return p_obj end -- Вывод инфы в консоль function con(msg) get_console():execute(msg) end -- Записываем переменную function save(variable_name, value) xr_logic.pstor_store(db.actor, variable_name, value) end -- Загружаем переменную function load(variable_name, value_if_not_found) return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found) end -- Удаляем переменную function del(variable_name) if db.storage[db.actor:id()].pstor[variable_name] then db.storage[db.actor:id()].pstor[variable_name] = nil end end Но все равно вылет при загрузке получаю. Изменено 22 Марта 2016 пользователем e1_nin0 Поделиться этим сообщением Ссылка на сообщение
e1_nin0 3 Опубликовано 22 Марта 2016 (изменено) Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ...call of pripyat\gamedata\scripts\bind_stalker.script:71: attempt to index global 'dinamic_anomalies' (a nil value) в bind_stalker функцию добавил function actor_binder:update(delta) ... dinamic_anomalies.dinamic_anomalis() end Что не так? Скрипт с дин. аномалиями так и называется dinamic_anomalies.script А где найти инфопоршни рестрикторов на входе и выходе из локаций? Изменено 22 Марта 2016 пользователем e1_nin0 1 Поделиться этим сообщением Ссылка на сообщение
e1_nin0 3 Опубликовано 23 Марта 2016 (изменено) Нашел ошибку, были незакомментированы лишние строки Переписал немного и добавил в update(delta) -- Начало спавна аномалий if (not has_alife_info("zaton_random_anomalies_done") and level.name() =="zaton") then random_anomalies.zaton_random_anomalies() give_info("zaton_random_anomalies_done") end if (not has_alife_info("jupiter_random_anomalies_done") and level.name() == "jupiter") then random_anomalies.jupiter_random_anomalies() give_info("jupiter_random_anomalies_done") end if (not has_alife_info("pripyat_random_anomalies_done") and level.name() == "pripyat") then random_anomalies.pripyat_random_anomalies() give_info("pripyat_random_anomalies_done") end -- Конец спавна аномалий Сам скрипт function zaton_random_anomalies() for k=1, 65535 do obj = level.object_by_id(k) if obj ~= nil then if IsAnom(obj)==true then lv_id=obj:level_vertex_id() gv_id=obj:game_vertex_id() local lv_new local pos_new = vector() local n_obj lv_new = math.random(1571597) pos_new = level.vertex_position(lv_new) if string.find(obj:section(), "zone_mine_gravitational") or string.find(obj:section(), "zone_mine_thermal") or string.find(obj:section(), "zone_mine_electric") or string.find(obj:section(), "zone_mine_acidic") or string.find(obj:section(), "_field_") then n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field") else n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id) end end end end end function jupiter_random_anomalies() for k=1, 65535 do obj = level.object_by_id(k) if obj ~= nil then if IsAnom(obj)==true then lv_id=obj:level_vertex_id() gv_id=obj:game_vertex_id() local lv_new local pos_new = vector() local n_obj lv_new = math.random(1571597) pos_new = level.vertex_position(lv_new) if string.find(obj:section(), "zone_mine_gravitational") or string.find(obj:section(), "zone_mine_thermal") or string.find(obj:section(), "zone_mine_electric") or string.find(obj:section(), "zone_mine_acidic") or string.find(obj:section(), "_field_") then n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field") else n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id) end end end end end function pripyat_random_anomalies() for k=1, 65535 do obj = level.object_by_id(k) if obj ~= nil then if IsAnom(obj)==true then lv_id=obj:level_vertex_id() gv_id=obj:game_vertex_id() local lv_new local pos_new = vector() local n_obj lv_new = math.random(1571597) pos_new = level.vertex_position(lv_new) if string.find(obj:section(), "zone_mine_gravitational") or string.find(obj:section(), "zone_mine_thermal") or string.find(obj:section(), "zone_mine_electric") or string.find(obj:section(), "zone_mine_acidic") or string.find(obj:section(), "_field_") then n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field") else n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id) end end end end end function IsAnom (obj) local s = obj:section() if string.find(s, "zone_mine_gravitational") or string.find(s, "zone_mine_acidic") or string.find(s, "zone_mine_thermal") or string.find(s, "zone_mine_electric") then return true else return false end end 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) 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) 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) else end p_obj:STATE_Read(packet, packet:w_tell()-packet:r_tell()) return p_obj end -- Вывод инфы в консоль function con(msg) get_console():execute(msg) end -- Записываем переменную function save(variable_name, value) xr_logic.pstor_store(db.actor, variable_name, value) end -- Загружаем переменную function load(variable_name, value_if_not_found) return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found) end -- Удаляем переменную function del(variable_name) if db.storage[db.actor:id()].pstor[variable_name] then db.storage[db.actor:id()].pstor[variable_name] = nil end end Теперь все работает. _____________________________________________________________________________________________________ А может мне кто нибудь объяснить, зачем создавать файл с новыми инфопоршнями и прописывать его в system.ltx, если и без него эти новые инфопоршни нормально выдаются и убираются? Изменено 23 Марта 2016 пользователем e1_nin0 2 Поделиться этим сообщением Ссылка на сообщение
e1_nin0 3 Опубликовано 31 Марта 2016 (изменено) А кто знает как сделать, чтобы, если условие не выполняется, то действие возвращается в начало функции? Вот кусок для наглядности: function zat_give_treasure_to_actor(first_speaker, second_speaker) local a = math.random(1,3) if a == 1 then if not has_alife_info("zaton_give_treasure1_done") then spawn_treasure.random_spawn_zaton_1() give_info("zaton_give_treasure1_done") else return a end if a == 2 then if not has_alife_info("zaton_give_treasure2_done") then spawn_treasure.random_spawn_zaton_2() give_info("zaton_give_treasure2_done") else return a end if a == 3 then if not has_alife_info("zaton_give_treasure3_done") then spawn_treasure.random_spawn_zaton_3() give_info("zaton_give_treasure3_done") else return a end end Тут "return a" я так понимаю не то, что нужно. Изменено 31 Марта 2016 пользователем e1_nin0 Поделиться этим сообщением Ссылка на сообщение
e1_nin0 3 Опубликовано 31 Марта 2016 (изменено) naxac, я тут "end"ы потерял. Хочу рандомно выдавать разные тайники до тех пор, пока они не закончатся. function zat_give_treasure_to_actor(first_speaker, second_speaker) local a = math.random(1,3) if a == 1 then if not has_alife_info("zaton_give_treasure1_done") then spawn_treasure.random_spawn_zaton_1() give_info("zaton_give_treasure1_done") else return a end end if a == 2 then if not has_alife_info("zaton_give_treasure2_done") then spawn_treasure.random_spawn_zaton_2() give_info("zaton_give_treasure2_done") else return a end end if a == 3 then if not has_alife_info("zaton_give_treasure3_done") then spawn_treasure.random_spawn_zaton_3() give_info("zaton_give_treasure3_done") else return a end end end Вот только return - совсем не то. ____________________________________________________________________________________________________Все, я понял. Вызов функции самой себя, спасибо Изменено 31 Марта 2016 пользователем e1_nin0 Поделиться этим сообщением Ссылка на сообщение
e1_nin0 3 Опубликовано 31 Марта 2016 (изменено) naxac, А где мне прописать выдачу поршней? Добавил выдачу поршня в конец функции. Запуск через диалог. Ничего не спавнит. function zat_give_treasure_to_actor(first_speaker, second_speaker) local t = {} for i=1, 5 do -- кол-во тайников if not has_alife_info("zaton_give_treasure"..i.."_done" then t[#t+1] = i end end if #t == 0 then return end -- тайники закончились local n = t[math.random(#t)] spawn_treasure["random_spawn_zaton_"..n]() give_info("zaton_give_treasure"..n.."_done") end Скобка потерялась всего-то Изменено 31 Марта 2016 пользователем e1_nin0 Поделиться этим сообщением Ссылка на сообщение
e1_nin0 3 Опубликовано 3 Апреля 2016 А как запустить звук через скрипт? Поделиться этим сообщением Ссылка на сообщение
e1_nin0 3 Опубликовано 3 Апреля 2016 (изменено) UnLoaded, Ссылка на "Класс sound_object. (проигрывание звуков в игре в произвольном месте, от произвольного объекта, в голове актора)" битая. Нашел нужный скрипт xr_sound.script, функция function set_sound_play(npc_id, sound, faction, point). xr_sound.set_sound_play(db.actor:id(),"нужный_звук"). Изменено 3 Апреля 2016 пользователем e1_nin0 Поделиться этим сообщением Ссылка на сообщение