Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 16 Мая 2014 Это популярное сообщение. Поделиться Опубликовано 16 Мая 2014 Ковыряемся в файлах ТЧ Прежде чем писать в тему - внимательно читаем первый пост, и пользуемся поиском. Возможно, ответ на Ваш вопрос уже есть. Касательно телепатии: если Вы передаете Ваши файлы телепатическим путем - ответы будут передаваться тоже телепатически. Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком. 4 8 6 12 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
dsh 3 824 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 (изменено) А вот это последняя строчка лога, она не сигнализирует о проблеме? В том смарте действительно может находится тот объект? Так, на всякий случай. Изменено 7 Августа 2016 пользователем dsh dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 @dsh, отвечу. В смарте проблем нет. А если бы и были - вылетало бы нет. При самой то игре - сколько не бегай вылетов не будет... Для наглядности - это ПЫС смарт. Тут и ломаться вроде нечему... [2350]; cse_abstract propertiessection_name = smart_terrainname = agr_rushposition = 213.398498535156, 20.5153751373291, 77.0153503417969direction = 0.0470287166535854, 0.00845688115805388, -0.177990615367889id = 65535version = 118script_version = 6spawn_id = 1629; cse_alife_object propertiesgame_vertex_id = 501distance = 11.9level_vertex_id = 413648object_flags = 0xffffff3ecustom_data = <[smart_terrain]type = general_laircommunities = dogcapacity = 5;switch_0 = {=gulag_empty(agr2_st_factory)};switch_1 = {=gulag_population_ge(agr_rush:5) !gulag_empty(agr2_st_factory)}END; cse_shape propertiesshapes = 1shape_0:type = sphereshape_0:offset = 0,0,0shape_0:radius = 5; cse_alife_space_restrictor propertiesrestrictor_type = 0; se_smart_terrain properties Не соответствует правилам. Ссылка на комментарий
Silver Raven 197 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 (изменено) Оказывается автопауза после загрузки левела аля ЗП не совместима с этой правкой: -- ------------------------------------------------------------------------------------------------------------------- -- Схема удаления, в начале игры, всех объектов ставящих себе ID от левелчейнжера в качестве PARENT_ID -- © 2015 by makdm, Zander_driver -- ------------------------------------------------------------------------------------------------------------------- local parent_id = {} local remove_sobj = {} local i = 1 -- Пробегаем по объектам и айдишники всех level_changer помещаем в таблицу while i < 65535 do local sobj = alife():object( i ) if sobj and sobj:clsid() == clsid.level_changer then parent_id[ sobj.id ] = sobj.id end i = i + 1 end -- Пробегаем по объектам и все child level_changer помещаем в таблицу for n = 1, 65534 do local sobj = alife():object( n ) if sobj then for k,v in pairs( parent_id ) do if sobj.parent_id == v then table.insert(remove_sobj, sobj.id) end end end end --Удаляем child level_changer for _k,_v in pairs( remove_sobj ) do local sobj_for_remove = alife():object(_v) if sobj_for_remove then alife():release(sobj_for_remove, true) end end Я попробовал перенести выполнение функции на скажем так, более поздний срок: Выдать инфопоршень когда игрок уже нажал любую клавишу для перехода к игре: function mm_on_kbd(mm,dik, keyboard_action) if keyboard_action == ui_events.WINDOW_KEY_PRESSED then if mm.start_btn then level.show_indicators() level.set_snd_volume(mm.sv) _G.ui_main_menu.main_menu.OnKeyboard = _G.ap_mm_on_kbd _G.ui_main_menu.main_menu.Update = _G.ap_mm_upd get_console():execute("main_menu off") db.actor:give_info_portion("game_started") -- отсрочка работы "чистильщика" объектов ставящих себе ID от левелчейнжера в качестве PARENT_ID end end return mm.start_btn~=nil end local parent_id = {} local remove_sobj = {} local i = 1 -- Пробегаем по объектам и айдишники всех level_changer помещаем в таблицу if has_alife_info("geme_started") then -- отсрочка работы "чистильщика" объектов ставящих себе ID от левелчейнжера в качестве PARENT_ID while i < 65535 do local sobj = alife():object( i ) if sobj and sobj:clsid() == clsid.level_changer then parent_id[ sobj.id ] = sobj.id end i = i + 1 end -- Пробегаем по объектам и все child level_changer помещаем в таблицу for n = 1, 65534 do local sobj = alife():object( n ) if sobj then for k,v in pairs( parent_id ) do if sobj.parent_id == v then table.insert(remove_sobj, sobj.id) end end end end --Удаляем child level_changer for _k,_v in pairs( remove_sobj ) do local sobj_for_remove = alife():object(_v) if sobj_for_remove then alife():release(sobj_for_remove, true) end db.actor:disable_info_portion ("geme_started") -- отсрочка работы "чистильщика" объектов ставящих себе ID от левелчейнжера в качестве PARENT_ID end end Игра сваливается с логом: FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...e.r. - trilogy\shoc\gamedata\scripts\xr_logic.script:1143: attempt to index local 'obj' (a nil value) Как бы их совместить? З.Ы. Есть функция скрывающая курсор с экрана? (level.hide_indicators() в этом не помогает) Изменено 7 Августа 2016 пользователем Silver Raven aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 Добрый день. Как вывести информацию в консоль? Ссылка на комментарий
Wlad777 24 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 @dsh, отвечу. В смарте проблем нет. А если бы и были - вылетало бы нет. При самой то игре - сколько не бегай вылетов не будет... Для наглядности - это ПЫС смарт. Тут и ломаться вроде нечему... У тебя банальная опечатка в аллспавне, вот и не работает нормально. Вот это: custom_data = <[smart_terrain] --------------------------------- www.amk-zone.de Ссылка на комментарий
Kondr48 314 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 Kober(BRUC) get_console():execute("информация") 1 Ссылка на комментарий
Firebird 0 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 не совместима с этой правкой Не так давно сталкивался с той же проблемой. В итоге, просто вырезал эту схему.Помимо всего прочего, игра с регулярной периодичностью валилась с однотипным логом: Expression : e_entity->ID_Parent == id_parentFunction : xrServer::Process_event_rejectFile : E:\stalker\sources\trunk\xr_3da\xrGame\xrServer_process_event_reject.cppLine : 23Description : medkit_army24329Arguments : esc_specnaz5 Были проблемы и у нпс, когда из-за подобных ошибок они начинали бесконечно перезаряжаться. Ссылка на комментарий
Silver Raven 197 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 (изменено) @Firebird, ок, пока отрежу. Немного переработал часть скрипта автопаузы аля ЗП, для совместимости с движковой правкой, растягивающей интро текстуры на весь экран: ------------------- ДО: function on_mm_init(mm) if level.present() and _G.press_any_key_on_start then _G.press_any_key_on_start = false level.hide_indicators() mm.start_btn = CUIStatic() mm.start_btn:SetWndRect(Frect():set(0,0,1024,768)) mm.start_btn:InitTexture("ui\\ui_load") mm.start_btn:SetText("Нажмите любую клавишу для перехода к игре") mm.start_btn:SetTextAlign(CGameFont.alCenter) mm.start_btn:SetTextY(695) mm.start_btn:SetFont(GetFontGraffiti22Russian()) mm.alpha = 255 mm:AttachChild(mm.start_btn) mm:Show(false) mm.sv = level.get_snd_volume() mm.tmr = profile_timer() -- создаем таймер mm.tmr:start() -- запускаем его mm.last_time = 0 -- инициализируем время последнего апдейта _G.ui_main_menu.main_menu.__init = _G.ap_mm_init -- картинка загружаемой локации mm.level_intro = CUIStatic() if device().aspect_ratio >= 0.75 then mm.level_intro:SetWndRect(Frect():set(257,369,512,256)) mm.level_intro:InitTexture("intro\\intro_"..level.name()) else mm.level_intro:SetStretchTexture(true) mm.level_intro:SetWndRect(Frect():set(257,370,257+512,370+256)) mm.level_intro:InitTexture("intro\\intro_"..level.name()) end mm:AttachChild(mm.level_intro) end end ------------------- ПОСЛЕ: function on_mm_init(mm) if level.present() and _G.press_any_key_on_start then _G.press_any_key_on_start = false level.hide_indicators() mm.start_btn = CUIStatic() mm.start_btn:SetStretchTexture(true) mm.start_btn:SetWndRect(Frect():set(0,0,1024,768)) mm.start_btn:InitTexture("intro\\intro_"..level.name()) mm.start_btn:SetText("Нажмите любую клавишу для перехода к игре") mm.start_btn:SetTextAlign(CGameFont.alCenter) mm.start_btn:SetTextY(695) mm.start_btn:SetFont(GetFontGraffiti22Russian()) mm.alpha = 255 mm:AttachChild(mm.start_btn) mm:Show(false) mm.sv = level.get_snd_volume() mm.tmr = profile_timer() -- Создаем таймер mm.tmr:start() -- Запускаем его mm.last_time = 0 -- Инициализируем время последнего апдейта _G.ui_main_menu.main_menu.__init = _G.ap_mm_init end end На чистой игре работает стабильно, на моей сборке косячит: FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ... - trilogy\shoc\gamedata\scripts\bind_stalker.script:490: attempt to concatenate field '?' (a nil value) (строка 490: get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty]) - причем тут сложность игры, как ее "цепляет"?) Вроде, поменял по-мелочи... Изменено 7 Августа 2016 пользователем Silver Raven aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Ссылка на комментарий
Kondr48 314 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 Silver Raven, киньте правленый скрипт хоть. Хотя не понимаю как так можно исправить четыре цифры)) Скорее всего ошибка в синтаксисе. Ссылка на комментарий
Silver Raven 197 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 @Kondr48, ошибок в синтаксисе нет, я в первую очередь проверил Script Syntax Checker-ом. _G.press_any_key_on_start = true -- мод включен - true/false - мод выключен local function inj_mm_init(func_name) local name = "ap_mm_init" _G[name] = _G.ui_main_menu.main_menu.__init _G.ui_main_menu.main_menu.__init = function(...) _G[name](...) local arg={...} loadstring('return _G["'..string.gsub(func_name,"%.",'"]["')..'"]')()(arg[1]) end end local function inj_mm_upd(func_name) local name = "ap_mm_upd" if not _G.ui_main_menu.main_menu.Update then _G.ui_main_menu.main_menu.Update = function()end end _G[name] = _G.ui_main_menu.main_menu.Update _G.ui_main_menu.main_menu.Update = function(...) _G[name](...) local arg={...} loadstring('return _G["'..string.gsub(func_name,"%.",'"]["')..'"]')()(arg[1]) end end local function inj_mm_on_kbd(func_name) local name = "ap_mm_on_kbd" _G[name] = _G.ui_main_menu.main_menu.OnKeyboard _G.ui_main_menu.main_menu.OnKeyboard = function(...) local arg={...} if not loadstring('return _G["'..string.gsub(func_name,"%.",'"]["')..'"]')()(arg[1],arg[2],arg[3]) then return _G[name](...) end return true end end function main() if _G.press_any_key_on_start then inj_mm_init("autopause.on_mm_init",true) inj_mm_upd("autopause.mm_update",true) inj_mm_on_kbd("autopause.mm_on_kbd",true) inj.inj_update("autopause.on_upd",true) end end function on_mm_init(mm) if level.present() and _G.press_any_key_on_start then _G.press_any_key_on_start = false level.hide_indicators() mm.start_btn = CUIStatic() mm.start_btn:SetStretchTexture(true) mm.start_btn:SetWndRect(Frect():set(0,0,1024,768)) mm.start_btn:InitTexture("intro\\intro_"..level.name()) mm.start_btn:SetText("Нажмите любую клавишу для перехода к игре") mm.start_btn:SetTextAlign(CGameFont.alCenter) mm.start_btn:SetTextY(695) mm.start_btn:SetFont(GetFontGraffiti22Russian()) mm.alpha = 255 mm:AttachChild(mm.start_btn) mm:Show(false) mm.sv = level.get_snd_volume() mm.tmr = profile_timer() -- Создаем таймер mm.tmr:start() -- Запускаем его mm.last_time = 0 -- Инициализируем время последнего апдейта _G.ui_main_menu.main_menu.__init = _G.ap_mm_init end end function mm_update(mm) if mm.tmr then mm.tmr:stop() if mm.tmr:time() - mm.last_time > 6000 then -- Чем больше значение, тем медленнее моргание надписи mm.last_time = mm.tmr:time() mm.start_btn:SetTextColor(mm.alpha,159,142,126) if mm.alpha > 250 then mm.step = -2 elseif mm.alpha < 60 then mm.step = 2 end mm.alpha = mm.alpha + mm.step end mm.tmr:start() get_console():hide() end end function mm_on_kbd(mm,dik, keyboard_action) if keyboard_action == ui_events.WINDOW_KEY_PRESSED then if mm.start_btn then level.show_indicators() level.set_snd_volume(mm.sv) _G.ui_main_menu.main_menu.OnKeyboard = _G.ap_mm_on_kbd _G.ui_main_menu.main_menu.Update = _G.ap_mm_upd get_console():execute("main_menu off") db.actor:give_info_portion("game_started") end end return mm.start_btn~=nil end function on_upd() if device().precache_frame<3 then inj.inj_update("autopause.on_upd",false) if _G.g_start_avi then _G.ui_main_menu.main_menu.__init = _G.ap_mm_init _G.ui_main_menu.main_menu.OnKeyboard = _G.ap_mm_on_kbd _G.ui_main_menu.main_menu.Update = _G.ap_mm_upd else get_console():execute("main_menu 1") end end end aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 @Wlad777, допустим... смарт я снес. НО - ошибки в логике чреваты вылетами с руганью на формат. А тут они только в конкретной ситуации - сейв\лоад(и переход с локи). При заходе на нее вылета небыло ни разу.Странно, не находите? проверил Script Syntax Checker-ом. Огорчу - он не все ошибки видит...Личный опыт.Могу пример скрипта скинуть - ошибок чекер не показывает, но вызвать функцию из скрипта невозможно - вылетает... Не соответствует правилам. Ссылка на комментарий
UnLoaded 313 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 (изменено) Такой вопросец по универсальным лагерям: есть такой смарт [smart_terrain] type = general_lair capacity = 7 communities = boar switch_0 = {=gulag_empty(gar_dolg_blokpost)} switch_1 = {=gulag_population_comed_ge(gar_smart_boars:5) !gulag_empty(gar_dolg_blokpost)} stay = long есть такие пути gar_smart_boars_home_1 gar_smart_boars_home_2 gar_smart_boars_raid_1 Разъясните плиз, как эти пути связаны с переключателями состояний смарта. Переключателей 2 а путей 3, как это понимать ? Только на Вики не отправляйте, я там читал - ниче не понял. Изменено 7 Августа 2016 пользователем UnLoaded Ссылка на комментарий
Silver Raven 197 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 (изменено) Огорчу - он не все ошибки видит... Личный опыт. Могу пример скрипта скинуть - ошибок чекер не показывает, но вызвать функцию из скрипта невозможно - вылетает... Ну увы, мои глаза точно не лучше Script Syntax Checker-а. Если кто заметит ошибку в коде, надеюсь укажет здесь. (весь скрипт целиком в моем прошлом посте) Изменено 7 Августа 2016 пользователем Silver Raven aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Ссылка на комментарий
dsh 3 824 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 @UnLoaded, из того, что я вижу в имеющемся скрипте. На каждый путь home будет создано 10 работ. Т.е. этот смарт может принять максимум 20 кабанов. Полагаю, что первые 10 будут первый путь использовать, а вторые 10 - второй. Но так-как смарту указана емкость 7, вероятно, что все 7 будут использовать первый путь. Далее посмотрим на raid пути. Для каждого пути создается 5 работ. И вот тут должен быть вылет, т.к. емкость смарта ( 7 ) больше, чем кол-во работ для raid-а. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Карлан 1 049 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 Разъясните плиз, как эти пути связаны с переключателями состояний смарта. Переключателей 2 а путей 3, как это понимать ? Только на Вики не отправляйте, я там читал - ниче не понял. Хом работает на обоих стейтах, рейд только на первом. Как ты вообще связываешь пути и стейты? Это два разных понятия. У тебя может быть один стейт и десятки путей, и никаких переключателей вообще не будет. И тут все очевидно, если в гулаг приперлись 5 кабанов и на блокпосте есть мужики, то переключится в первый стейт и рейдить в их сторону чтобы сожрать. Как сожрали валить обратно. Что тут может быть не ясного? Точка сбора, путь атаки, точка после атаки, это логично. Могу ошибаться, но как я понял это реализация такого регулярного набега на блокпост, как гулаг собирает кабанов и есть кого жрать - начинается набег. И вот тут должен быть вылет, т.к. емкость смарта ( 7 ) больше, чем кол-во работ для raid-а. Я же сказал о прекондишне, какой еще вылет? Кабаны набираются на рейд и свитчятся в рейд, далее валят обратно, емкость гулага искусственно поддерживается. Ссылка на комментарий
Возрождённый 355 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 Перезаселяю глобально Зону и столкнулся с такой проблемкой. На насыпи, есть лагерь военных (все мы прекрасно знаем) и когда наступает ночь трое из вояк уходят к костру. Как сделать, чтобы они и днем тоже сидели у костра? Я в основном использую general_lager и general_lair, поэтому мне пока сложно разобраться в гулагах такого типа, как на насыпи. На вики почитал, не совсем разобрался. Добавлено HellRatz, 8 Августа 2016 Что бы сидели и днем и ночью просто, не ходили? Посмотри логику "kamp". Работы butcher_512. Все ссылки пропали, поэтому ложу свои сюда, чтобы никогда не потерять: Customization Pack 0.83 [Beta4] - SoC - Тема модификации. Customization Pack CoP [Beta] - CoP - Тема модификации. Ссылка на комментарий
dsh 3 824 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 @Карлан, ну какой вылет, какой. Простой вылет: for i, v in ipairs( jobs_avail_in_states ) do if v < self.capacity then print_table( self.Job ) abort( "[smart_terrain %s] type=%s state=%d capacity=%d: too few absolutely available jobs", self.name, self.type, i, self.capacity ) end end end dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Карлан 1 049 Опубликовано 7 Августа 2016 Поделиться Опубликовано 7 Августа 2016 ну какой вылет, какой. Простой вылет: Ты что-то не так понял, эта функция нигде не вызывается, этот вылет невозможен. Ссылка на комментарий
UnLoaded 313 Опубликовано 8 Августа 2016 Поделиться Опубликовано 8 Августа 2016 Хом работает на обоих стейтах, рейд только на первом. И тут все очевидно Где об этом почитать ? Вот мне - не очевидно, перерыл весь раздел по Алайфу на STALKER Inside Wiki, ничего нормального не нашел. Про mob_home знаю, а что за "raid" такой, смотрел схемы монстров - не вижу такой схемы. Каким образом движок понимает, что первые два пути - для switch_0, а третий - для switch_1. Я же сказал о прекондишне, какой еще вылет? Где он, этот прекондишн ? Ссылка на комментарий
dsh 3 824 Опубликовано 8 Августа 2016 Поделиться Опубликовано 8 Августа 2016 @Карлан, точно точно. Не заметил, что оно закомментировано. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти