Это популярное сообщение. Rolan 22 Опубликовано 28 Декабря 2010 Это популярное сообщение. Поделиться Опубликовано 28 Декабря 2010 Software Development Kit для движка X-Ray 1.6 (версия S.T.A.L.K.E.R.: Зов Припяти) Полная версия, позволяет работать с модификациями любой сложности, вплоть до тотальных конверсий с полностью новым содержимым. Инструментарий предоставляется "как есть" (as is), при этом компания GSC Game World не предоставляет какой-либо технической поддержки по данному SDK. Ниже приведены основные изменения по сравнению с предыдущими версиями SDK. В отличие от SDK 0.5 (ЧН), предназначенного исключительно для работы с мультиплеерными уровнями и содержавшего лишь LevelEditor с основными компиляторами, SDK 0.7 содержит полный набор инструментов последних версий: -- ActorEditor -- LevelEditor -- ParticleEditor -- ShaderEditor -- Postprocess -- DialogEditor -- ScriptDebugger А также компиляторов: -- xrAI -- xrDO -- xrLC (+ coordinator + agent) ---В компиляторах новой версии улучшена поддержка многопоточной работы на многоядерных процессорах, и они используют до 4гб памяти (для сравнения: компиляторы ЧН хоть и поддерживали 4 ядра, но в них еще не была реализована адресация памяти, а в ТЧ и вовсе использовался только один поток). Скорость компиляции при полной нагрузке, соответственно, может вырасти до двух раз по сравнению с ЧН. ---Также стоит заметить, что именно невозможность адресации компилятором более, чем 2гб RAM, была причиной ряда ограничений, с которыми сталкивались разработчики модов: на максимальный размер ai-сетки (и, следовательно, размер играбельной площади уровня) и на максимальное количество вершин, - причем в ситуациях, когда сама игра бы вполне выдержала уровень. Разумеется, это не означает, что стоит пробовать делать уровни в 5х5км или 20 миллионов полигонов, но ситуаций, когда движок может работать с уровнем, а компилятор - не в состоянии его собрать из-за ошибок переполнения памяти, - происходить уже не должно. --- Нельзя не упомянуть о реализации для всех редакторов SDK поддержки Windows Vista и Windows 7. ---Важное нововведение - возможность компиляции уровня на нескольких компьютерах одновременно. Выполняется она с помощью xrLC и дополнительных приложений. Один компьютер выполняет роль "координатора", остальные, "агенты", работают с определенными им задачами. Для простоты работы к SDK приложены уже настроенные исполняемые файлы, с которыми достаточно лишь указать имя уровня и IP координирующего компьютера. Смысл использования такой компиляции понятен - она позволяет собирать сложные уровни с очень высокими установками качества за куда меньшее время, чем на одном пк. Разумеется, со времен xrLC ТЧ, у которого уходило до недели чистого времени на сборку крупного уровня в высоком качестве, скорость работы компилятора возросла до четырех раз, но время компиляции всё равно не назовешь быстрым. --- Совершенно кардинальных изменений нет - движок создан не вчера, и большинство инструментов подходит для работы в неизменном виде уже который год. Главным является то, что все инструменты присутствуют в полном объеме, и совместимы с последними версиями форматов, используемых в X-Ray 1.6 (ЗП). --- Отличия, о которых стоит упомянуть отдельно, могут быть приведены как по сравнению с SDK 0.5 (ЧН), так и с SDK 0.4 (ТЧ), так как в SDK ЧН целый ряд инструментов отсутствовал. --- Доработан инструмент Move: теперь необязательно переключаться нужную ось для перемещения объекта: на объекте отображаются контроллеры, за которые достаточно просто потянуть курсором. --- Появилась отсутствовавшая в SDK ЧН возможность использования spawn element классов: ---- actor ---- camp ---- smart_terrain ---- smart_cover ---- и им подобных Таким образом, в SDK появилась возможность работы со смарткаверами (которые хоть и появились впервые в ЧН, но в его SDK были недоступны) в частности и уровнями для одиночной игры в целом (имевшаяся в LE ЧН, но достаточно ограниченная). --- Убран ряд устаревших классов spawn element, добавлены задействованные в ЗП классы. --- Появился инструмент Simulate / UseSimulatePositions, предназначенный для проверки физики прямо в редакторе. --- Для ряда классов spawn element отображаются вспомогательные модели, упрощающие работу в ситуациях, когда в сцене много объектов. Приложение для создания и редактирования файлов .ppe (постпроцесс-эффектов). Достаточно просто в освоении: семь классов эффектов, ряд параметров в каждом, возможность строить последовательности и другие возможности. Приложение для редактирования диалогов игры в формате .xml с поддержкой условий и проверок has_info, dont_has_info, give_info, disable_info, precondition, action. Отладка Lua скриптов, проверка синтаксиса и их валидности, поддерживает работу с Source Control Center. --- Формат уровней (за исключением данных, относящихся к xrAI), практически не менялся, поэтому результаты работы xrLC могут быть использованы и в ЧН. Разумеется, это относится только к мультиплеерным картам либо использованию геометрии. Таким образом, если вы хотите использовать SDK 0.7 для компиляции одиночного уровня к ЧН (скажем, из-за скорости работы xrLC), то это возможно, - но, соответственно, только с xrAI от ЧН. ---Файлы, собранные xrDO, совместимы как с ЗП, так и с ЧН и ТЧ. Файлы .thm совместимы со всеми версиями игры вплоть до ТЧ 1.0004. Формат скелетных объектов .ogf в ЗП и ЧН одинаков, - результаты работы в ActorEditor можно использовать в обеих играх. --- Благодарим всех поклонников S.T.A.L.K.E.R.-a за интерес к нашей игре. --- Особая благодарность модмейкерам и @bac9-flcl за помощь в сборке этого SDK. Причины вылета Invalid vertex for object: 1. В секции этого объекта position или level_vertex_ud НЕ соответствуют game_vertex_id. Решение простое - загрузите локацию и замерьте нормальные координаты. 2. В секции этого объекта неправильный object_flags. Берите его от объекта такого же типа. Для компиляции карты (в xrLC) с нормальным освещением используйте ключ -nosmg xrLC.exe -nosmg -f test_map X-Ray SDK v.0.7 (размер файла: 446 мб) Зеркало (спасибо @stunder) Патч 1.0 (размер файла: 3,82 мб) Документация к SDK Плагин импорта статики формата object в 3ds Max (плагин кривоватый, автор Neo][) Плагин импорта статики формата geom в 3ds Max (surfer, Neo][): Плагины импорта/экспорта геометрии в Milkshape 3D (bardak, Kamikazze): Плагины импорта/экспорта геометрии в Maya (bardak, surfer): Плагины экспорта геометрии из 3ds Max/Maya/Lightwave (официальные от GSC): Ускоренные компиляторы для ЧН-ЗП, присутствует обход ошибки Invalid Face (@macron, drvoodoo-guru) Конвертер уровней в формате СДК ТЧ в формат СДК ЧН и ЗП (S_P_S), зеркало (спасибо @genior) Декомпилятор уровней, конвертер моделей и анимаций и пр. (bardak, x-ray engine toolset team) Конвертер файлов thm из формата ТЧ в формат ЧН/ЗП (Kln) Конвертер scene_object.part любой карты из SDK ТЧ в формат SDK ЧН/ЗП Перед тем, как задать вопрос, пожалуйста, прочитайте вот это и это. Поверьте, там есть ответы на многие ваши вопросы. Также используйте поиск по форуму. Bопросы, на которые уже были ответы, будут нещадно удаляться. Если пишете сообщение об ошибке или вылете, то обязательно прикладывайте лог: без него весь смысл вашего сообщения теряется и оно, скорее всего, будет удалено. 3 4 Ссылка на комментарий
RvP 1 Опубликовано 4 Сентября 2011 Поделиться Опубликовано 4 Сентября 2011 zoidberg123456789, в 0,4 и ТЧ использовался textures.ltx а не thm-ки Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий
Lagos 688 Опубликовано 4 Сентября 2011 Поделиться Опубликовано 4 Сентября 2011 RvP, в SDK 0,4 в папке rawdata есть thm-текстуры(весят по 40-60 кб) Добавлено через 12 мин.: И ещё: Где в настройках опция"детальные текстуры"? Официальный сайт . Ссылка на комментарий
RvP 1 Опубликовано 4 Сентября 2011 Поделиться Опубликовано 4 Сентября 2011 zoidberg123456789, есть, но они идут только как вспомогательные. Основная масса настроек в textures.ltx Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий
Lagos 688 Опубликовано 4 Сентября 2011 Поделиться Опубликовано 4 Сентября 2011 RvP, видно придётся вручную detail-текстуры делать.... Официальный сайт . Ссылка на комментарий
KDit 3 Опубликовано 4 Сентября 2011 Поделиться Опубликовано 4 Сентября 2011 Где в настройках опция"детальные текстуры"? zoidberg123456789, вот где они подключаютса: Ссылка на комментарий
Lagos 688 Опубликовано 4 Сентября 2011 Поделиться Опубликовано 4 Сентября 2011 Скажите: почему текстура отображается так: http://f9.i-fotki.info/org/ee929ed9201f9a1a...c3597800886.jpg http://f9.i-fotki.info/org/899aac5a5a225998...c3597800887.jpg ? Строгое предупреждение от модератора Cyclone Запрещены изображения, крупнее 320x240. Или превью или ссылка. Официальный сайт . Ссылка на комментарий
KDit 3 Опубликовано 4 Сентября 2011 Поделиться Опубликовано 4 Сентября 2011 (изменено) zoidberg123456789, дело в детальных текстурах! (возможно и ещо в бампе...) Посмотры какая у тебя на етот труп сталкера назначена (детаил). Он должен генерироватса как Лод, в оригинальных текстурах с ЗП или СДК 0.7 такого нет, ты походу изменял настройки текстуры, попробуй заменить на оригинальную с ЗП с thm. Изменено 4 Сентября 2011 пользователем [KDit] Ссылка на комментарий
Lagos 688 Опубликовано 5 Сентября 2011 Поделиться Опубликовано 5 Сентября 2011 Как исправить это(очень засвеченные текстуры): Заранее спасибо за помощь. Официальный сайт . Ссылка на комментарий
KDit 3 Опубликовано 6 Сентября 2011 Поделиться Опубликовано 6 Сентября 2011 Может кто встречался с такой ошибкой: stack trace: 0023:07720351 xrGame.dll, CxIOFile:: Scanf () [error] [259]: Дополнительные данные отсутствуют. Компилю левел для мультиплеира, сначала скомпилил на Draft - запускаю игру все работает, далее исправил Invalid Faces и перекомпилирую на настройках Medium и выше, запускаю мультиплеир и ловлю такой вылет при старте в любом режиме сетевой игры, сразу как только появляетса окно вибора команды. Ссылка на комментарий
Lagos 688 Опубликовано 7 Сентября 2011 Поделиться Опубликовано 7 Сентября 2011 (изменено) Подключил Припять ТЧ к ЗП, и при переходе на неё(в данном случае с Радара) произвольный вылет: Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : .... - Cia I?eiyoe\gamedata\scripts\bind_stalker.script:454: attempt to concatenate field '?' (a nil value) Причём вылет появляется не всегда, а вот наример: Я начал навую игру, дошёл до перехода Радар>Припять, перехожу и все ОК, после этого я начинаю новую игру повторно, опять дохожу до перехода Радар>Припять, перехожу, и вот тут-то происходит вылет. Прошу помощи. Заранее спасибо. Изменено 7 Сентября 2011 пользователем zoidberg123456789 Официальный сайт . Ссылка на комментарий
Clayman 104 Опубликовано 7 Сентября 2011 Поделиться Опубликовано 7 Сентября 2011 zoidberg123456789, ну если посмотреть в файле bind_stalker.script в строке 454 (ну если логически проанализировать лог) то можно найти там строчку sim_board.get_sim_board().simulation_started = reader:r_bool() - это если ты не изменял этот файл. Подобный вылет может происходить совершенно по разным причинам - и часто из-за ошибок с заселением, смарт-террейнами и работами для них. Пустая лока может вообще быть не причем. Тут еще куча причин может быть - оставлял ли ты старый спавн на локе, заселял ли ты ее и проч.. Ссылка на комментарий
Lagos 688 Опубликовано 7 Сентября 2011 Поделиться Опубликовано 7 Сентября 2011 (изменено) Clayman, у меня в спавне содержится только ogf-объекты, лестницы, и один переход. Всё. Я удалил все ogf-объекты. Вылет(Такой же) Вот bind_stalker.script function init (obj) xr_motivator.AddToMotivator(obj) end function actor_init (npc) npc:bind_object(actor_binder(npc)) end local game_difficulty_by_num = { [0] = "gd_novice", [1] = "gd_stalker", [2] = "gd_veteran", [3] = "gd_master" } local weapon_hide = {} local primary_objects_filled = false ---------------------------------------------------------------------------------------------------------------------- class "actor_binder" (object_binder) ---------------------------------------------------------------------------------------------------------------------- function actor_binder:__init (obj) super(obj) self.bCheckStart = false self.weather_manager = level_weathers.get_weather_manager() self.surge_manager = surge_manager.get_surge_manager() --self.actor_detector = xr_detector.actor_detector() self.last_level_name = nil self.deimos_intensity = nil -- self.actor_weapon_on_start = true self.loaded_active_slot = 3 self.loaded_slot_applied = false self.last_detective_achievement_spawn_time = nil self.last_mutant_hunter_achievement_spawn_time = nil end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:net_spawn(data) -- printf("actor net spawn") level.show_indicators() self.bCheckStart = true self.weapon_hide = false -- спрятано или нет оружие при разговоре. self.weapon_hide_in_dialog = false weapon_hide = {} -- устанавливаем глобальный дефолтовый флаг. if object_binder.net_spawn(self,data) == false then return false end db.add_actor(self.object) db.actor.deimos_intensity = self.deimos_intensity self.deimos_intensity = nil if self.st.disable_input_time == nil then level.enable_input() end xr_s.on_game_load() --' Distemper 03.2008 -- self.weather_manager:reset() --' Загружаем настройки дропа death_manager.init_drop_settings() --'Устанавливаем ссылку на таскменеджер self.task_manager = task_manager.get_task_manager() -- ДИНАМИЧЕСКИЕ НОВОСТИ -------------------------------- ds_mod.on_game_load(obj) -- ДИНАМИЧЕСКИЕ НОВОСТИ -------------------------------- self.spawn_frame = device().frame self.already_jumped = false self.loaded = false benchmark.main() --' Distemper 06.2008 -- return true end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:net_destroy() -- ДИНАМИЧЕСКИЕ НОВОСТИ -------------------------------- ds_mod.on_game_save(obj) -- ДИНАМИЧЕСКИЕ НОВОСТИ -------------------------------- xr_sound.stop_sounds_by_id(self.object:id()) local board_factions = sim_board.get_sim_board().players if(board_factions) then for k,v in pairs (board_factions) do xr_sound.stop_sounds_by_id(v.id) end end if(actor_stats.remove_from_ranking~=nil)then actor_stats.remove_from_ranking(self.object:id()) end level.show_weapon(true) db.del_actor(self.object) self.object:set_callback(callback.inventory_info, nil) self.object:set_callback(callback.article_info, nil) self.object:set_callback(callback.on_item_take, nil) self.object:set_callback(callback.on_item_drop, nil) self.object:set_callback(callback.task_state, nil) self.object:set_callback(callback.level_border_enter, nil) self.object:set_callback(callback.level_border_exit, nil) self.object:set_callback(callback.take_item_from_box, nil) self.object:set_callback(callback.use_object, nil) log("--------->"..tostring(_G.amb_vol)) log("--------->"..tostring(_G.mus_vol)) if(_G.amb_vol~=0) then get_console():execute("snd_volume_eff "..tostring(_G.amb_vol)) _G.amb_vol = 0 end if(_G.mus_vol~=0) then get_console():execute("snd_volume_music "..tostring(_G.mus_vol)) _G.mus_vol = 0 end if sr_psy_antenna.psy_antenna then sr_psy_antenna.psy_antenna:destroy() sr_psy_antenna.psy_antenna = false end xrs_dyn_music.finish_theme() xr_s.on_actor_destroy() object_binder.net_destroy(self) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:reinit() object_binder.reinit(self) local npc_id = self.object:id() db.storage[npc_id] = { } self.st = db.storage[npc_id] self.st.pstor = nil self.object:set_callback(callback.inventory_info, self.info_callback, self) self.object:set_callback(callback.on_item_take, self.on_item_take, self) self.object:set_callback(callback.on_item_drop, self.on_item_drop, self) self.object:set_callback(callback.trade_sell_buy_item, self.on_trade, self) -- for game stats self.object:set_callback(callback.task_state, self.task_callback, self) self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) self.object:set_callback(callback.use_object, self.use_inventory_item, self) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:take_item_from_box(box, item) local box_name = box:name() end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:info_callback(npc, info_id) printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id) --' Сюжет -- Отметки на карте end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:on_trade (item, sell_bye, money) if sell_bye == true then game_stats.money_trade_update (money) else game_stats.money_trade_update (-money) end end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:article_callback(npc, group, name) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:on_item_take (obj) printf("on_item_take [%s]", obj:name()) if isArtefact(obj) then local anomal_zone = bind_anomaly_zone.parent_zones_by_artefact_id[obj:id()] if anomal_zone ~= nil then anomal_zone:on_artefact_take(obj) else bind_anomaly_zone.artefact_ways_by_id[obj:id()] = nil end local artefact = obj:get_artefact() artefact:FollowByPath("NULL",0,vector():set(500,500,500)) xr_statistic.inc_founded_artefacts_counter(obj:id()) --[[ local s_art = alife():object(obj:id()) if(s_art) then xr_statistic.inc_founded_artefacts_counter(s_art:section_name()) else xr_statistic.inc_founded_artefacts_counter() end ]] end treasure_manager.get_treasure_manager():on_item_take(obj:id()) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:on_item_drop (obj) end function actor_binder:use_inventory_item(obj) if(obj) then local s_obj = alife():object(obj:id()) if(s_obj) and (s_obj:section_name()=="drug_anabiotic") then xr_effects.disable_ui_only(db.actor, nil) level.add_cam_effector("camera_effects\\surge_02.anm", 10, false, "bind_stalker.anabiotic_callback") level.add_pp_effector("surge_fade.ppe", 11, false) give_info("anabiotic_in_process") _G.mus_vol = get_console():get_float("snd_volume_music") _G.amb_vol = get_console():get_float("snd_volume_eff") get_console():execute("snd_volume_music 0") get_console():execute("snd_volume_eff 0") end end end function anabiotic_callback() level.add_cam_effector("camera_effects\\surge_01.anm", 10, false, "bind_stalker.anabiotic_callback2") local rnd = math.random(35,45) local m = surge_manager.get_surge_manager() if(m.started) then local tf = level.get_time_factor() local diff_sec = math.ceil(game.get_game_time():diffSec(m.inited_time)/tf) if(rnd>(m.surge_time-diff_sec)*tf/60) then m.time_forwarded = true m.ui_disabled = true m:kill_all_unhided() m:end_surge() end end level.change_game_time(0,0,rnd) level_weathers.get_weather_manager():forced_weather_change() printf("anabiotic_callback: time forwarded on [%d]", rnd) end function anabiotic_callback2() xr_effects.enable_ui(db.actor, nil) get_console():execute("snd_volume_music "..tostring(_G.mus_vol)) get_console():execute("snd_volume_eff "..tostring(_G.amb_vol)) _G.amb_vol = 0 _G.mus_vol = 0 disable_info("anabiotic_in_process") end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:task_callback(_task, _state) if _state ~= task.fail then if _state == task.completed then news_manager.send_task(db.actor, "complete", _task) else news_manager.send_task(db.actor, "new", _task) end end task_manager.task_callback(_task, _state) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:update(delta) object_binder.update(self, delta) if string.find(command_line(), "-designer") then return end if self.already_jumped==false and jump_level.need_jump==true and (device().frame > self.spawn_frame+2000) then jump_level.try_to_jump() self.already_jumped = true return end -- Вызов апдейта переноса игрока проводником if travel_func ~= nil then travel_func() end -- DEBUG slowdown --slowdown.update() local time = time_global() game_stats.update (delta, self.object) -- апдейт погоды self.weather_manager:update() self:check_detective_achievement() self:check_mutant_hunter_achievement() --' Апдейт саундменеджера xr_sound.update(self.object:id()) -- Обновление отключения ввода с клавиатуры. if self.st.disable_input_time ~= nil and game.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idle then level.enable_input() self.st.disable_input_time = nil end -- Апдейт прятание оружия игрока во время диалога if self.object:is_talking() then if self.weapon_hide_in_dialog == false then self.object:hide_weapon() printf("hiding weapon!!!") self.weapon_hide_in_dialog = true end else if self.weapon_hide_in_dialog == true then printf("restoring weapon!!!") self.object:restore_weapon() self.weapon_hide_in_dialog = false end end -- Апдейт прятание оружия игрока в зоне sr_no_weapon if check_for_weapon_hide_by_zones() == true then if self.weapon_hide == false then printf("hiding weapon!!!") self.object:hide_weapon() self.weapon_hide = true end else if self.weapon_hide == true then printf("restoring weapon!!!") self.object:restore_weapon() self.weapon_hide = false end end -- обновление пси-антенны if sr_psy_antenna.psy_antenna then sr_psy_antenna.psy_antenna:update(delta) end --[[ --' Вывод сообщения о большой радиации if self.object.radiation >= 0.7 then local hud = get_hud() local custom_static = hud:GetCustomStatic("cs_radiation_danger") if custom_static == nil then hud:AddCustomStatic("cs_radiation_danger", true) hud:GetCustomStatic("cs_radiation_danger"):wnd():TextControl():SetTextST("st_radiation_danger") end else local hud = get_hud() local custom_static = hud:GetCustomStatic("cs_radiation_danger") if custom_static ~= nil then hud:RemoveCustomStatic("cs_radiation_danger") end end ]]-- if self.bCheckStart then printf("SET DEFAULT INFOS") if not has_alife_info("global_dialogs") then self.object:give_info_portion("global_dialogs") end if not has_alife_info("level_changer_icons") then self.object:give_info_portion("level_changer_icons") end self.bCheckStart = false -- if self.actor_weapon_on_start == true then -- db.actor:activate_slot(3) -- self.actor_weapon_on_start = false -- end end -- device().precache_frame == 0 and if not self.loaded_slot_applied then self.object:activate_slot(self.loaded_active_slot) self.loaded_slot_applied = true end -- ДИНАМИЧЕСКИЕ НОВОСТИ -------------------------------- ds_mod.on_actor_upade(delta) -- ДИНАМИЧЕСКИЕ НОВОСТИ -------------------------------- xr_s.on_actor_update(delta) if(self.surge_manager) then if(self.f_surge_manager_loaded ~= true) then self.surge_manager:initialize() self.f_surge_manager_loaded = true end if(self.surge_manager.levels_respawn[level.name()]) then self.surge_manager:respawn_artefacts_and_replace_anomaly_zone() end self.surge_manager:update() end -- Апдейт доступности для симуляции. simulation_objects.get_sim_obj_registry():update_avaliability(alife():actor()) if not self.loaded then get_console():execute("dump_infos") self.loaded = true end treasure_manager.get_treasure_manager():update() if not(primary_objects_filled) then pda.fill_primary_objects() primary_objects_filled = true end pda.fill_sleep_zones() if dinamic_hud then dinamic_hud.update() end end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:save(packet) set_save_marker(packet, "save", false, "actor_binder") object_binder.save(self, packet) --' Сохраняем уровень сложности packet:w_u8(level.get_game_difficulty()) --' Сохраняем данные об отключенном вводе if self.st.disable_input_time == nil then packet:w_bool(false) else packet:w_bool(true) utils.w_CTime(packet, self.st.disable_input_time) end xr_logic.pstor_save_all(self.object, packet) self.weather_manager:save(packet) release_body_manager.get_release_body_manager():save(packet) self.surge_manager:save(packet) sr_psy_antenna.save( packet ) packet:w_bool(sim_board.get_sim_board().simulation_started) xr_sound.actor_save(packet) packet:w_stringZ(tostring(self.last_level_name)) xr_statistic.save(packet) treasure_manager.get_treasure_manager():save(packet) local n = 0 for k,v in pairs(db.script_ids) do n = n + 1 end packet:w_u8(n) for k,v in pairs (db.script_ids) do packet:w_u16(k) packet:w_stringZ(v) end task_manager.get_task_manager():save(packet) -- packet:w_bool(self.actor_weapon_on_start) packet:w_u8(self.object:active_slot()) local deimos_exist = false for k,v in pairs(db.zone_by_name) do if(db.storage[v:id()] and db.storage[v:id()].active_scheme=="sr_deimos") then deimos_exist = true packet:w_bool(true) packet:w_float(db.storage[v:id()].sr_deimos.intensity) end end if not deimos_exist then packet:w_bool(false) end if self.last_detective_achievement_spawn_time == nil then packet:w_bool(false) else packet:w_bool(true) utils.w_CTime(packet, self.last_detective_achievement_spawn_time) end if self.last_mutant_hunter_achievement_spawn_time == nil then packet:w_bool(false) else packet:w_bool(true) utils.w_CTime(packet, self.last_mutant_hunter_achievement_spawn_time) end set_save_marker(packet, "save", true, "actor_binder") end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:load(reader) set_save_marker(reader, "load", false, "actor_binder") object_binder.load(self, reader) --' Загружаем уровень сложности local game_difficulty = reader:r_u8() printf("load game_difficulty %s", tostring(game_difficulty)) get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty]) local stored_input_time = reader:r_u8() if stored_input_time == true then self.st.disable_input_time = utils.r_CTime(reader) end xr_logic.pstor_load_all(self.object, reader) self.weather_manager:load(reader) release_body_manager.get_release_body_manager():load(reader) -- self.surge_manager:initialize() self.surge_manager:load(reader) self.f_surge_manager_loaded = true sr_psy_antenna.load(reader) sim_board.get_sim_board().simulation_started = reader:r_bool() xr_sound.actor_load(reader) local n = reader:r_stringZ() if(n~="nil") then self.last_level_name = n end xr_statistic.load(reader) treasure_manager.get_treasure_manager():load(reader) n = reader:r_u8() for i = 1,n do db.script_ids[reader:r_u16()] = reader:r_stringZ() end task_manager.get_task_manager():load(reader) -- self.actor_weapon_on_start = reader:r_bool() self.loaded_active_slot = reader:r_u8() self.loaded_slot_applied = false local b = reader:r_bool() if( then self.deimos_intensity = reader:r_float() end local stored_achievement_time = reader:r_bool() if stored_achievement_time == true then self.last_detective_achievement_spawn_time = utils.r_CTime(reader) end stored_achievement_time = reader:r_bool() if stored_achievement_time == true then self.last_mutant_hunter_achievement_spawn_time = utils.r_CTime(reader) end set_save_marker(reader, "load", true, "actor_binder") end --************************************************************* --* Подспаун вещей в ящики * --************************************************************* local detective_achievement_items = { "medkit", "antirad", "bandage"} local mutant_hunter_achievement_items = { "ammo_5.45x39_ap", "ammo_5.56x45_ap", "ammo_9x39_ap", "ammo_5.56x45_ap", "ammo_12x76_zhekan"} local function spawn_achivement_items(items_table, count, inv_box_story_id) local inv_box = alife():object(get_story_object_id(inv_box_story_id)) for i = 1,count do alife():create(items_table[math.random(#items_table)], inv_box.position, inv_box.m_level_vertex_id, inv_box.m_game_vertex_id, inv_box.id) end end function actor_binder:check_detective_achievement() if not has_alife_info("detective_achievement_gained") then return end if self.last_detective_achievement_spawn_time == nil then self.last_detective_achievement_spawn_time = game.get_game_time() end if game.get_game_time():diffSec(self.last_detective_achievement_spawn_time) > 43200 then spawn_achivement_items(detective_achievement_items, 4, "zat_a2_actor_treasure") xr_effects.send_tip(db.actor, nil, {"st_detective_news","got_medicine"}) self.last_detective_achievement_spawn_time = game.get_game_time() end end function actor_binder:check_mutant_hunter_achievement() if not has_alife_info("mutant_hunter_achievement_gained") then return end if self.last_mutant_hunter_achievement_spawn_time == nil then self.last_mutant_hunter_achievement_spawn_time = game.get_game_time() end if game.get_game_time():diffSec(self.last_mutant_hunter_achievement_spawn_time) > 43200 then spawn_achivement_items(mutant_hunter_achievement_items, 5, "jup_b202_actor_treasure") xr_effects.send_tip(db.actor, nil, {"st_mutant_hunter_news","got_ammo"}) self.last_mutant_hunter_achievement_spawn_time = game.get_game_time() end end ---------------------------------------------------------------------------------------------------------------------- function check_for_weapon_hide_by_zones() for k,v in pairs(weapon_hide) do if v == true then return true end end return false end -- Weapon functions function hide_weapon(zone_id) printf("[WEAPON_CONTROL]:hiding weapon from zone [%s] in section [%s]!!!", zone_id, db.storage[zone_id].active_section) weapon_hide[zone_id] = true end function restore_weapon(zone_id) printf("[WEAPON_CONTROL]:restoring weapon from zone [%s] in section [%s]!!!", zone_id, db.storage[zone_id].active_section) weapon_hide[zone_id] = false end Вот ссылка на скрипт. Скрипт редактировался. Изменено 7 Сентября 2011 пользователем zoidberg123456789 Официальный сайт . Ссылка на комментарий
Gektor 0 Опубликовано 7 Сентября 2011 Поделиться Опубликовано 7 Сентября 2011 Добрый день. Такой вопрос: Сей скрин сделан на полном динамическом освещении в DX11. Все параметры на максимум разрешение 1024х768. Параметры компиляции максимальные, на карте один источник света из вкладки Группы в СДК. Локация темная долина из 2215 с попиленым на сектора зданиями + база бандитов с оригинальной локи. Такой же лаг встречается на дх10 и представляет он собой подобное "световое шоу" которое постоянно бьёт из центра координат. Оно встречается на большинстве скомпилированых лок на моем компе, в том числе на оригинальном агропроме после перекомпиляции (но несколько в ином виде - вместо белого черный), а также проблемы с водой (кривая тень). Пропадает при переходе на дх9 или статику и при отключении теней от солнца. Компилятор из пака ускоренных компиляторов для зп-чн вариант fixxed (с пропуском инвалид фейсов). Теперь вопрос - В чем прикол? Где я мог накосячить? или виноват виндоус и видеокарта? Как с этим боротся? Связаны ли с этим лаги сдк? Кто вообще с подобным сталкивался? Тип ЦП QuadCore AMD Phenom II X4 Black Edition 955, 3516 MHz (17.5 x 201) Системная плата Gigabyte GA-790XT-USB3 Чипсет системной платы AMD 790X, AMD K10 Системная память 4096 Мб (DDR3-1333 DDR3 SDRAM) DIMM3: Patriot Memory PSD32G13332 2 Гб DDR3-1333 DIMM4: Patriot Memory PSD32G13332 2 Гб DDR3-1333 Видеоадаптер ATI Radeon HD 5750 Series (1024 Мб) Команда ReWrite Team. От сталкера отошли. Пересели за другую платформу. Ссылка на комментарий
Lagos 688 Опубликовано 7 Сентября 2011 Поделиться Опубликовано 7 Сентября 2011 (изменено) Что означает этот вылет: Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....e.r. - Cia I?eiyoe\gamedata\scripts\xr_logic.script:1270: attempt to index local 'obj' (a nil value) ? Это при переходе на другую локацию. Изменено 7 Сентября 2011 пользователем zoidberg123456789 Официальный сайт . Ссылка на комментарий
Gektor 0 Опубликовано 8 Сентября 2011 Поделиться Опубликовано 8 Сентября 2011 zoidberg123456789 Проверь логику нпц и вообще всех динамических обьектов, у меня похожее было когда я ошибки допускал при забивании логики предметам, нпц и прочего чему логику можно присвоить. Команда ReWrite Team. От сталкера отошли. Пересели за другую платформу. Ссылка на комментарий
Lagos 688 Опубликовано 8 Сентября 2011 Поделиться Опубликовано 8 Сентября 2011 Gektor, дело в том, что лока пустая.... Это может быть из-за того, что на другой локации неправильная логика прописана? Официальный сайт . Ссылка на комментарий
Gektor 0 Опубликовано 8 Сентября 2011 Поделиться Опубликовано 8 Сентября 2011 (изменено) По идее если ты неправильно на другой локе прописал, то проблема вылезет когда нпц подгрузится. А смарт террайны расставлял на своей локе на которую заходиш? просто смарт террайны без прописаной логики тоже валят игру, причем как раз при загрузке локи. Если ты правильно прописал параметры в спавне в сдк (имеется в виду по примеру других лок). Но если совсем пустая, то не знаю... Изменено 8 Сентября 2011 пользователем Gektor Команда ReWrite Team. От сталкера отошли. Пересели за другую платформу. Ссылка на комментарий
fresor 1 Опубликовано 8 Сентября 2011 Поделиться Опубликовано 8 Сентября 2011 Expression : fatal error Function : CBlender_default::Compile File : D:\prog_repository\sources\trunk\Layers\xrRenderPC_R1\BlenderDefault.cpp Line : 63 Description : <no expression> Arguments : Not enought textures for shader, base tex: mtl\mtl_rust_dark_iov Можно ли добавить не переделывая карты?? Ссылка на комментарий
Lagos 688 Опубликовано 9 Сентября 2011 Поделиться Опубликовано 9 Сентября 2011 Вот переход с радара нп припять: [30039] ; cse_abstract properties section_name = level_changer name = srnp_spot position = 382.401306152344,-33.621452331543,158.711959838867 direction = 0,0,0 cse_abstract__unk1_h16 = 0x1 ; cse_alife_object properties game_vertex_id = 1090 distance = 0 level_vertex_id = 197671 object_flags = 0xffffff3e custom_data = <<END [story_object] story_id = srnp_spot END ; cse_shape properties shapes = shape0 shape0:type = box shape0:axis_x = 1.25219917297363,0,0 shape0:axis_y = 0,3.09340000152588,0 shape0:axis_z = 0,0,1.25219917297363 shape0:offset = 0,0,0 ; cse_alife_space_restrictor properties restrictor_type = 3 ; cse_alife_level_changer properties dest_game_vertex_id = 938 dest_level_vertex_id = 92389 dest_position = 9.8809499740601,-1.8526647090912,-289.40298461914 dest_direction = 0.014594338834286,0,0.99989348649979 dest_level_name = l11_pripyat dest_graph_point = start_actor_02 silent_mode = 1 ; se_level_changer properties А вот переход с припяти на радар: [6468] ; cse_abstract properties section_name = level_changer name = spnr_spot position = 8.7971210479736,-2.222327709198,-300.89776611328 direction = -0.045590002089739,0,-0.99896025657654 cse_abstract__unk1_h16 = 0x1 ; cse_alife_object properties game_vertex_id = 934 distance = 0 level_vertex_id = 92389 object_flags = 0xffffff3e custom_data = <<END [story_object] story_id = spnr_spot END ; cse_shape properties shapes = shape0 shape0:type = box shape0:axis_x = 1.25219917297363,0,0 shape0:axis_y = 0,3.09340000152588,0 shape0:axis_z = 0,0,1.25219917297363 shape0:offset = 0,0,0 ; cse_alife_space_restrictor properties restrictor_type = 3 ; cse_alife_level_changer properties dest_game_vertex_id = 1090 dest_level_vertex_id = 197671 dest_position = 385.625518798828,-34.0934371948242,143.099517822266 dest_direction = 0,0,0 dest_level_name = l10_radar dest_graph_point = start_actor_01 silent_mode = 1 ; se_level_changer properties Вопрос: Когда я перехожу с радара на припять(эти локи я подключил) игра загружается, только актор появляется не в припяти, а на радаре! Да ещё и под локацией! Подскажите пожалуйста, счем это связано, в чём моя ошибка? Заранее спасибо. Официальный сайт . Ссылка на комментарий
Clayman 104 Опубликовано 9 Сентября 2011 Поделиться Опубликовано 9 Сентября 2011 zoidberg123456789, скорее всего у тебя неправильно расположены граф-поинты спавна актора при переходе. И видимо в припяти графпонит спавна находится в шейпе левел-ченджера, вот и кидает обратно на радар Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти