Скинь 226 и 227 строки из bind_stalker.script А так же сам скрипт куда писал функцию. Всё в ЛС.
Quote (6poHR777)
Еще проблема, НПС перестали играть на гитаре wacko , но играют на руках biggrin , гармошки визуально не видно, поковырялся в state_mgr_animation_list.script
То есть НПС вообще не играют на гитаре, а когда играют на гармошке, её не видно?
Quote (6poHR777)
Как когда то у О-сознание были проблемы со стабильностью так и остались
FATAL ERROR
[error]Expression : xml_doc.NavigateToNode(path,index) [error]Function : CUIXmlInit::InitStatic [error]File : D:\xray-svn\xr_3da\xrGame\ui\UIXmlInit.cpp [error]Line : 172 [error]Description : XML node not found [error]Arguments : static_version
XemyL, ЛС скинул. Вроде перестали играть на гитаре, а гармошки не видно вообще. Это я убрал свою гэймдату (она была чистой), но в неё поставил эту осознанскую утилиту.
6poHR777, утилита от Osoznanie-MOD на 100% стабильная. Сам встроил в свой мод, ни одного вылета я тебе скажу. А ты скорее всего забыл перенести файлы из gamedata\config\ui С гармошкой давай в ЛС разбираться.
Вот при подключении локации словил вылет, все довольно просто. Требуется прописать где то текстуры локации, вопрос где? Понимаю что глупый вопрос но все же. Вот сам лог.
Expression : fatal error Function : CInifile::r_string File : E:\priquel\sources\engine\xrCore\Xr_ini.cpp Line : 352 Description : <no expression> Arguments : Can't find variable texture in [zaton]
Kail, проблема в том, что лога нет! И вылета нет, я просто всё сделал по ЦУ, но реакция не следует. Могу только Сталкер_бинд и свой скрипт дин. новостей.
return true end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:net_destroy() if(actor_stats.remove_from_ranking~=nil)then actor_stats.remove_from_ranking(self.object:id()) end -- game_stats.shutdown () db.del_actor(self.object)
if sr_psy_antenna.psy_antenna then sr_psy_antenna.psy_antenna:destroy() sr_psy_antenna.psy_antenna = false end
xr_sound.stop_all_sound_object()
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.next_restrictors_update_time = -10000
self.object:set_callback(callback.inventory_info, self.info_callback, self) self.object:set_callback(callback.article_info, self.article_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.actor_sleep, self.sleep_callback, self) self.object:set_callback(callback.task_state, self.task_callback, self) --self.object:set_callback(callback.map_location_added, self.map_location_added_callback, self) self.object:set_callback(callback.level_border_enter, self.level_border_enter, self) self.object:set_callback(callback.level_border_exit, self.level_border_exit, self) self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:take_item_from_box(box, item) local story_id = box:story_id() if story_id == nil then return end
treasure_manager.take_item_from_box(box, story_id) --[[ local respawner = se_respawn.get_respawner_by_parent(story_id) if respawner == nil then return end
--' Необходимо уменьшить счетчик в респавнере respawner:remove_spawned(item:id())
local smart_terrain = db.strn_by_respawn[respawner:name()] if smart_terrain == nil then return end
local npc = smart_terrain.gulag:get_nearest_online_obj(db.actor:position()) if npc ~= nil then xr_sound.set_sound_play(npc, "reac_box") xr_gulag.setGulagEnemy(smart_terrain:name() , db.actor) end ]] end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:level_border_enter(npc, info_id) self.actor_detector:actor_enter() end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:level_border_exit(npc, info_id) self.actor_detector:actor_exit() end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:info_callback(npc, info_id) printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id) --' Сюжет level_tasks.proceed(self.object) -- Отметки на карте level_tasks.process_info_portion(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) --printf("article_callback [%s][%s]", group, name) if device().precache_frame >1 then return end
if group == "Diary" then news_manager.send_encyclopedy("diary", group) else news_manager.send_encyclopedy("encyclopedy", group) end end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:on_item_take (obj) level_tasks.proceed(self.object) --game_stats.update_take_item (obj, self.object) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:on_item_drop (obj) level_tasks.proceed(self.object) --game_stats.update_drop_item (obj, self.object) end ----------------------------------------------------------------------------------------------------------------------
function actor_binder:task_callback(_task, _objective, _state) task_manager.task_callback(_task:get_id(), _objective:get_idx(), _state) if _objective:get_idx() == 0 then if _state == task.fail then news_manager.send_task(db.actor, "fail", _task, _objective) elseif _state == task.completed then task_manager.reward_by_task(_task) news_manager.send_task(db.actor, "complete", _task, _objective) else news_manager.send_task(db.actor, "new", _task, _objective) end else if _task:get_objective(0):get_state() == task.in_progress then news_manager.send_task(db.actor, "update", _task, _objective) end end end
---------------------------------------------------------------------------------------------------------------------- function actor_binder:map_location_added_callback(spot_type_str, object_id) if (false==app_ready()) or (device().precache_frame>1) then return end --'news_manager.send_task(db.actor, "new") end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:update(delta) object_binder.update(self, delta)
-- апдейт звуковой схемы актера xr_sound.update_actor() din_news.update_spam() --' Проверка потери жизни --[[ if self.object.health - lasthealth > 0.001 or self.object.health - lasthealth < -0.001 then printf("%f | %f", self.object.health, self.object.health - lasthealth, game.time() - lasttime) lasthealth = self.object.health lasttime = game.time() end ]] -- Обновление отключения ввода с клавиатуры. 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.st.sleep_relocate_time ~= nil and game.get_game_time():diffSec(self.st.sleep_relocate_time) >= self.st.sleep_relocate_idle then self.object:set_actor_position(self.st.sleep_relocate_point) local dir = self.st.sleep_relocate_point:sub(self.st.sleep_relocate_look) self.object:set_actor_direction(dir:getH()) self.st.sleep_relocate_time = nil end
-- Апдейт прятание оружия игрока во время диалога if weapon_hide == true or self.object:is_talking() then if self.weapon_hide == false then self.object:hide_weapon() self.weapon_hide = true end else if self.weapon_hide == true then self.object:restore_weapon() self.weapon_hide = false end end
-- обновление рестрикторов, которые под логикой, срабатывает через интервалы времени if self.next_restrictors_update_time < time then bind_restrictor.actor_update(delta)
self.next_restrictors_update_time = time + 200
task_manager.actor_update() end
-- обновление постпроцессов if post_process ~= 0 then if post_process:update () == true then post_process = 0 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():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("storyline_actor_start") and (level.name() == "l01_escape") then self.object:give_info_portion("storyline_actor_start") _G.g_start_avi = true printf("*AVI* RUN START AVI") end
-- if not has_alife_info("encyclopedy") then -- self.object:give_info_portion("encyclopedy") -- end
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
level_tasks.add_lchanger_location()
self.bCheckStart = false end end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:save(packet) printf("actor_binder:save(): self.object:name()='%s'", self.object:name()) object_binder.save(self, packet)
--' Сохраняем данные об отключенном вводе if self.st.disable_input_time == nil then packet:w_bool(false) else packer:w_bool(true) utils.w_CTime(packet, self.st.disable_input_time) end
sr_psy_antenna.load(reader) task_manager.load(reader) self.actor_detector:load(reader) end ----------------------------------------------------------------------------------------------------------------------
-- Weapon functions function hide_weapon() weapon_hide = true end function restore_weapon() weapon_hide = false end
// this is test for section iteration /** local function test_section_iteration(file_name, section_name) printf ("file : %s",file_name) printf ("section : %s",section_name)
local file = ini_file(file_name) local n = file:line_count(section_name) printf ("lines : %d",n)
local id, value = "", "", result for i=0,n-1 do result, id, value = file:r_line(section_name,i,"","") printf ("line %d : %s = %s",i,id,value) end end
local ant_spam ={ "Толик:\nСлышал что на АТП с Темной Долины гопники околачиваются. Осторожнее там.", "Морок:\nКто нибудь знает куда Шахматист делся?", "Азот - это новый механик в Баре, просто золотые руки!", "Сокол:\nМорок, Лёху Шахматиста я последний раз в Баре с Бронёй и Тенью видел.", "Военные вообще оборзели! Две тысячи рублей за проход на север кордона - это не хило!", "Да ладно, не надо было моменты упускать, может Волк тебя научил бы обоходить их с боку.)", "Стакан:\nЛюди, а кто знает, в Баре водка есть?", "Пёс:\nФреон, твою душу! Ты когда явишься?", "Арбалет:\nБроня с Тенью и Кэпом снова на Север попёрлись! Чо им на базах своих не сидится?!", "учёне:\nВнимание всем лицам, находящимся на территории Зоны! Необходим отряд добровольцев, для проведения замеров на территории "Янтаря". Заинтересованным подходить в бункер доктора Сахарова.", "Завелся Бука в наших местах. Бандос это с прозвищем таким. Дебил полный.", "Гоуст как-то говорил, что Максаня пропал. Неизвестно куда. Разминулись на Милитари.", "Долг:\nБлин переходите на свою волну. А то запалите Свободе планы!", "Свобода:\nКолян опять на Духа наехал. Кого-то скоро по закону Зоны на бой вызывать будут.", "Похоже мне еще в лагере сидеть. Блин долг когда я этот Сидоровичу то отдам?!", "Бергамот:\nНа Агропроме снова вояки зачастили, прямо как в старом, добром 2009.", "Люди, Дятлы на Янтаре и Радаре снова врубились!", "Братва, в Рыжике обнаружен танк, пулемёт на месте, кому инфа пригодится, с того пиво.)", "Волк:\nЭхх, уйду я наверное на Склады", "Сидорович:\nЕсли хотите разжится снарягой, купить пару сухпаев, получить хорошую наводку - обращайтесь ко мне.", "Броня:\nВступайте в ряды Вольных сталкеров, вместе мы очистим Зону, от бандитского отребья!", "Докер:\nСрочно нужен хороший техник! Вопрос жизни и смерти! Цена не имеет значения!", "Погиб сталкер: Юрий Семецкий. Х-19. Тушкан.", "Ментор:\nИщу проводника, который сможет довести меня до Радара или Лиманска.", "Тень:\nНужен человек, который сможет взломать пароль на флешке. О цене, думаю договоримся.", "Чехол:\nЛюди, тут мутанты на Аграпроме как с цепи сорвались, вы там по-аккуратнее. А после выброса аномалии ещё появилось и слепые пятна места сменили, но артов тоже не мало тут породилось.", "Короб:\nНа севере Мёртвого города заметил стаю слепых собак в 25-30 особей, под руководством 3 чернобыльских псов и одной пси-собаки, люди, вы там аккуратнее.", "Ящер:\nВступайте в "Последний день", человечество не может уже существовать, но только тебе решать, для кого этот день будет последним – для тебя или твоего врага.", "Долг:\nВетераны Чернобыля! Вступайте в ряды Долга! На нас лежит огромная ответственность!", "Скряга:\nЕсли вы хотите какой нибудь НАТОвский ствол - топайте ко мне", "Куплю патроны на Винторез, ждать буду на Агропроме, в сталкерском лагере.", "На Свалке, после выброса, снова зверья развелось, достали уже, мутанты грбанные.", "Со стороны выжигателя снова кто то прётся, то ли волна, то ли фанатики.", "Кирзач:\nВ Тёмной долине, с района заправки сигнал SOS поступил", "Сахаров:\nСталкеры, необходимы части тел мутантов, цена высокая.", "Сеть:\nБВП сталкер Шрам", "С Милитари на Дэд-Сити, наймами перекрыта дорога, осторожнее там, уж больно они нервные.", "Неверные прозрейте! Монолит вас примит, если вы осознайте свои ошибки!", "Лысый:\nФанатики ёб...е! Еле ноги с Радара унёс, жаль рюкзак с хабаром там пришлось кинуть...", "Продам новенькую "Грозу", кого интересует, буду ждать на базе Свободы.", "Болт:\nЛюди, никто не знает где можно бензина достать? Пишите в ЛС.", "На дальнем болоте, на блок-пост вояк волна попёрлось, давайте прячьтесь, пока авиация их не поддержала.", "В Долине гопников развелось! Долг, рать вашу, куда вы смотрите?!", "Свобода:\nЧуваки, переходим на нашу волну, что бы потом не удивлялись, какого хрена долги нам встречу организовывают.", "Шило:\nЛюди, никто не хочет СПАС рабочий продать?", "Вояки, козлы, за...ли!!!", "Марк:\nРебята, ни у кого струн на гитару нет?", "По-зарез нужны патроны на ТТ! В долгу не остансь!", "Видел на складах, как какого-то мужика, что то тащило, кровосос?", "Гопоты в подземке НИИ развелось! Хоть напалмом всё выжигай!", "Погиб сталкер Семецкий. Радар. Зомби.", "В Тёмной лощине заметил какую-то старую армейскую базу, стрёмно, скажу я вам...", "Сеть:\nБВП сталкер Ворон.", "Физик:\nНужны помощники для снятия замеров. Достойная оплата, со стороны ISG.", "Как все достало!", "Мастер:\nСобираем отряд для похода в центр.", "Орех:\nЛюди, а какой умелец сумеет "Грозу" под патрон АКСа перебить?", "Погиб сталкер Семецкий Юрий. Рыжий лес. Жарка.", "Серый Дым:\n С Припяти словили сигнал SOS, наши еще там держутся!", "Информатор:\n Сталкеры, предлогаю вам информацию, не дорого, место встречи Бар 100 рентген.", "В Тёмной лощине заметил отряд военных, а до этого греховцев видел, вы там аккуратнее.", "Будько:\nРебят, тут снорки бегают на Свалке. Я сам аж о**ел. Вы это - окуратней!", "Костюк:\nПиндосы проваливайте с Темной Долины - это наша територия!", "Санька Зелень:\nСлушай, Тяпа, ты давай без приколов, верни снарягу по хорошему!!!", "Деня Фримен:\nА у нас конопля подешевела. Давайте в Свободу!", "Макс Прицел:\nСашь, ты дебил чего группировку позоришь!", "Пятка:\nТут у Ростка, административной части, видел артефакт. Дорогой точно, но какой не скажу! Аномалий до ***, так что вы окуратней, а мне моя шкура дорога...", "Склянка:\nТолян, водяра есть?", "Толян Палеонтолог:\nСклянка, отдам по 100 рубласов за пузырь.", "Склянка:\nИди на .., жмот тупорылый!", "[Ошибка передачи]...Братва, не ну В натуре, эти совсем оборзели, давайте их причешем как нибудь!", "[Ошибка передачи]...Кореш, спакуха! Они уже успокоились, жмурикам положено. Гы-гы!" }
time_news = 0
function time_update_spam() local time = time_global() if time_news < time then time_news = time + 30000 din_news.update_spam() end end
function update_spam() news_manager.send_tip(db.actor, (ant_spam[math.random(#ant_spam)]), nil, nil, 30000) end