Модостроение. Общие вопросы и ответы
|
|
denis2000 | Дата: Сб, 15.06.2013, 11:51 | Сообщение # 1 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Помощь тем кто хочет знать больше о игре и модах Если у вас появились вопросы по модостроению в игре S.T.A.L.K.E.R. Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7
Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML [cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл: 1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R]) 2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx" 3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо) Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#" Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut] [cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти? Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда. Для того чтоб найти LOG необходимо зайти вот сюда:
В Win хр лог находится:
C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs
Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.
В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs
Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка: ... $app_data_root$ = true | false| $fs_root$| users\(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx) ... $logs$ = true| false| $app_data_root$| logs\(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи) ... [/cut][cut=Получение более подробной информации о вылете (ХОВАН)] Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...) Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так: Код function abort(fmt, ...) local reason = string.format(fmt, ...) error_log(reason) end Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией
Первый: Код Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil) Второй: Код Expression : 0 Function : ErrorLog File : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp Line : 49 Description : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic' [/cut]
Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы, статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
Посты, для которых есть свои категории, из этой темы будут удаляться или перемещаться в соответсвующую тему. Персональных извещений в ЛС о переносе\удалении поста не будет, ищите сами. Учитывайте, что в системах Ucoz тема не обновляется в статистике при переносе поста. Посты, написанные здесь-же после переноса, будут расцениваться как кросспостинг, со всеми вытекающими
[cut noguest=Первый юбилей нашей темы] Здравствуйте господа модостроители, и все так или иначе причастные к этому. Нашей теме исполнился 1 год. От души поздравляю Всех Вас дорогие друзья, творческих успехов. Хочу так же выразить отдельную благодарность denis2000 и ХОВАН. tracker 23.06.11
[/cut]
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Voland-777 | Дата: Пн, 03.07.2017, 12:27 | Сообщение # 2506 |
Эмиссар
Пользователи
Сообщений: 1702
| Melarsky, в папке gamedata/configs/misc/trade/order_traders: esc_stalker_trader.ltx - это конфиг торговли Кривоухова, торгаша сталкеров на Кордоне; mar_stalker_trader.ltx - конфиг Мармелюка, торгаша сталкеров на Болотах.
Сообщение отредактировал Voland-777 - Пн, 03.07.2017, 12:28 |
|
|
Эти 0 пользователя(ей) поблагодарили Voland-777 за это полезное сообщение: |
|
|
sergej5500 | Дата: Пн, 03.07.2017, 12:38 | Сообщение # 2507 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Цитата Наблюдатель ( ) Уважаемый sergej5500, а не подскажите, плиз, как это сделать?
--переменная-индикатор щелчка включения local onoff = 0
--*** "замена" батарейки *** --вызывается из bind_stalker.script function replacebatt() if (emergency == 1) then
Функция называется replacebatt. Она должна упоминаться в bind_stalker. Вероятнее всего в функции update(delta).
Её и надо оттуда убрать.
Скорее всего, после такой правки потребуется новая игра.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Наблюдатель | Дата: Пн, 03.07.2017, 17:48 | Сообщение # 2508 |
Ветеран
Пользователи
Сообщений: 400
| Цитата sergej5500 ( ) Функция называется replacebatt. Она должна упоминаться в bind_stalker. Вероятнее всего в функции update(delta).
Её и надо оттуда убрать. Уважаемый sergej5500, в этом файле аж три функции update(delta): [cut=Тыц]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() 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() 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: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 --=============================================================== --============ Звук при продаже/покупке предмета ================ --=============================================================== local snd_obj snd_obj = sound_object([[interface\inv_dengi]]) snd_obj:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d) --=============================================================== --=============================================================== 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()) --=============================================================== --=============== Звук при подбирании предмета ================== --=============================================================== local snd_obj snd_obj = sound_object([[interface\inv_belt]]) snd_obj:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d) --=============================================================== --=============================================================== end ----------------------------------------------------------------------------------------------------------------------
--################################################################### function actor_binder:on_item_drop (obj) --- устанавливаем свой рюкзак для помещения в него хабара --- if obj:section()=="inv_ruck" then -- запомним id объекта self.rr_id=obj:id() --создаем новую классовую переменную end ------------------------------------------------------------- end
function actor_binder:take_item_from_box(box, item) local box_name = box:name() ------------------ убираем рюкзак --------------------------- if box:section() == "active_ruck" and box:is_inv_box_empty() then level.map_remove_object_spot(box:id(), "habar") -- убираем с тайника метку alife():release(alife():object(box:id()), true) -- удаляем тайник alife():create("inv_ruck", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) -- спавним рюкзак в инвентарь end ------------------------------------------------------------- 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()=="conserva") then if db.actor:object("wpn_knife") == nil then news_manager.send_tip(db.actor, game.translate_string("st_no_knife")) alife():create("conserva", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) else local snd_obj snd_obj = sound_object([[interface\inv_konserva]]) snd_obj:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d) end end if(s_obj) and (s_obj:section_name()=="bichki") then if db.actor:object("wpn_knife") == nil then news_manager.send_tip(db.actor, game.translate_string("st_no_knife")) alife():create("bichki", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) else local snd_obj snd_obj = sound_object([[interface\inv_konserva]]) snd_obj:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d) end end -- АНАБИОТИК ################################################# if(s_obj) and (s_obj:section_name()=="drug_anabiotic") then if not (surge_manager.actor_in_cover()) then local sm = surge_manager.get_surge_manager() if sm.started then --give_info("anabiotic_in_process") --------- surge counter --------- if not has_alife_info("surge_outdoor_1") then db.actor:give_info_portion("surge_outdoor_1") elseif has_alife_info("surge_outdoor_1") and not has_alife_info("surge_outdoor_2") then db.actor:give_info_portion("surge_outdoor_2") elseif has_alife_info("surge_outdoor_2") and not has_alife_info("surge_outdoor_3") then db.actor:give_info_portion("surge_outdoor_3") end --------------------------------- 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) _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") surge_manager.stop_surge() brodiaga.asp() else alife():create("drug_anabiotic", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) news_manager.send_tip(db.actor, game.translate_string("st_anabiotic_nosurge")) end else alife():create("drug_anabiotic", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) news_manager.send_tip(db.actor, game.translate_string("st_anabiotic_indoor")) end end -- СПАЛЬНИК ################################################# if(s_obj) and (s_obj:section_name()=="spalnik") then if (surge_manager.actor_in_cover()) then ui_sleep_dialog.sleep() give_info("sleep_active") else if not has_alife_info("surge_outdoor_3") then news_manager.send_tip(db.actor, game.translate_string("st_spalnik_nosleep")) else ui_sleep_dialog.sleep() give_info("sleep_active") end end -- Спавним предмет актору в инвентарь alife():create("spalnik", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end -- РЕМКОМПЛЕКТ ################################################# if(s_obj) and (s_obj:section_name()=="remkomplekt") then if db.actor:item_in_slot(2)~= nil then local gun1 = db.actor:item_in_slot(2) gun1:set_condition(1.0) end if db.actor:item_in_slot(3)~= nil then local gun1 = db.actor:item_in_slot(3) gun1:set_condition(1.0) end if db.actor:item_in_slot(7)~= nil then local gun1 = db.actor:item_in_slot(7) gun1:set_condition(1.0) end if db.actor:item_in_slot(12)~= nil then local gun1 = db.actor:item_in_slot(12) gun1:set_condition(1.0) end local text = "Ваше снаряжение успешно отремонтировано!" local texture = "ui_iconsTotal_esc_blockpost_case_to_trader" local news_text = "%c[255,60,255,60]"..text local news_caption = game.translate_string("st_tip") db.actor:give_game_news(news_caption, news_text, texture, 0, 12*1000) end -- РЕМКОМПЛЕКТ-2 ############################################### if(s_obj) and (s_obj:section_name()=="pochinka") then if db.actor:item_in_slot(2)~= nil then local gun1 = db.actor:item_in_slot(2) local hp1 = gun1:condition() + 0.25 gun1:set_condition(hp1) end if db.actor:item_in_slot(3)~= nil then local gun1 = db.actor:item_in_slot(3) local hp1 = gun1:condition() + 0.25 gun1:set_condition(hp1) end if db.actor:item_in_slot(7)~= nil then local gun1 = db.actor:item_in_slot(7) local hp1 = gun1:condition() + 0.25 gun1:set_condition(hp1) end if db.actor:item_in_slot(12)~= nil then local gun1 = db.actor:item_in_slot(12) local hp1 = gun1:condition() + 0.25 gun1:set_condition(hp1) end local text = "Ваше снаряжение немного улучшено!" local texture = "ui_inGame2_Instrumenti" local news_text = "%c[255,60,255,60]"..text local news_caption = game.translate_string("st_tip") db.actor:give_game_news(news_caption, news_text, texture, 0, 12*1000) end -- ГИТАРА ################################################# if(s_obj) and (s_obj:section_name()=="gitara") then brodiaga.play_gitar() end if(s_obj) and (s_obj:section_name()=="gitara2") then brodiaga.play_gitar() end if(s_obj) and (s_obj:section_name()=="gitara3") then brodiaga.play_gitar() end if(s_obj) and (s_obj:section_name()=="gitara4") then brodiaga.play_gitar() end if(s_obj) and (s_obj:section_name()=="gitara5") then brodiaga.play_gitar() end -- РАЦИЯ ################################################# if(s_obj) and (s_obj:section_name()=="reinforcement") then local m_game_vertex = db.actor:game_vertex_id() local lvert = game_graph():vertex(m_game_vertex) local lid = lvert:level_id() local mlevel = alife():level_name(lid) local m_s_level = mlevel if game.translate_string(m_s_level) == "Лаборатория X8" or game.translate_string(m_s_level) == "Путепровод «Припять-1»" then local text = "Вы не можете вызвать отряд под землей!" local texture = "ui_inGame2_Radiopomehi" local news_text = "%c[255,255,60,60]"..text local news_caption = game.translate_string("st_tip") db.actor:give_game_news(news_caption, news_text, texture, 0, 12*1000) alife():create("reinforcement", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) else if has_alife_info("jup_b207_freedom_wins") or has_alife_info("vstup_to_svoboda") then brodiaga.spawn_near_me("sim_default_freedom_4") brodiaga.spawn_near_me("sim_default_freedom_4") brodiaga.spawn_near_me("sim_default_freedom_4") brodiaga.spawn_near_me("sim_default_freedom_4") brodiaga.spawn_near_me("sim_default_freedom_4") local text = "Вызван отряд «Свободы»!" local texture = "ui_npc_u_freedom_4" local news_text = "%c[255,60,255,60]"..text local news_caption = game.translate_string("st_tip") db.actor:give_game_news(news_caption, news_text, texture, 0, 12*1000) elseif has_alife_info("jup_b207_duty_wins") or has_alife_info("vstup_to_dolg") then brodiaga.spawn_near_me("sim_default_duty_4") brodiaga.spawn_near_me("sim_default_duty_4") brodiaga.spawn_near_me("sim_default_duty_4") brodiaga.spawn_near_me("sim_default_duty_4") brodiaga.spawn_near_me("sim_default_duty_4") local text = "Вызван отряд «Долга»!" local texture = "ui_npc_u_dolg_4" local news_text = "%c[255,60,255,60]"..text local news_caption = game.translate_string("st_tip") db.actor:give_game_news(news_caption, news_text, texture, 0, 12*1000) else local text = "Вызван отряд сталкеров!" brodiaga.spawn_near_me("sim_default_stalker_4") brodiaga.spawn_near_me("sim_default_stalker_4") brodiaga.spawn_near_me("sim_default_stalker_4") brodiaga.spawn_near_me("sim_default_stalker_4") brodiaga.spawn_near_me("sim_default_stalker_4") local texture = "ui_npc_u_neutral_3" local news_text = "%c[255,60,255,60]"..text local news_caption = game.translate_string("st_tip") db.actor:give_game_news(news_caption, news_text, texture, 0, 12*1000) end end end -- ЗАМЕНА БАТАРЕЕК В ФОНАРИКЕ ############################# if(s_obj) and (s_obj:section_name()=="batareyka") then xr_statistic.torch_rec() end -- АКТИВАТОР ВЫБРОСА ###################################### if(s_obj) and (s_obj:section_name()=="avd") then local m_game_vertex = db.actor:game_vertex_id() local lvert = game_graph():vertex(m_game_vertex) local lid = lvert:level_id() local mlevel = alife():level_name(lid) local m_s_level = mlevel if game.translate_string(m_s_level) == "Лаборатория X8" or game.translate_string(m_s_level) == "Путепровод «Припять-1»" then local text = "Вы не можете вызвать выброс, будучи под землей!" local texture = "ui_inGame2_Radiopomehi" local news_text = "%c[255,255,60,60]"..text local news_caption = game.translate_string("st_tip") db.actor:give_game_news(news_caption, news_text, texture, 0, 12*1000) alife():create("avd", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) else local snd_obj snd_obj = sound_object([[device\pda\pda_alarm]]) snd_obj:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d) local m = surge_manager.get_surge_manager() if not m.started then m:start(true) else local text = "Выброс уже начался! Использование прибора на данный момент бессмысленно." local texture = "ui_inGame2_Radiopomehi" local news_text = "%c[255,255,60,60]"..text local news_caption = game.translate_string("st_tip") db.actor:give_game_news(news_caption, news_text, texture, 0, 12*1000) alife():create("avd", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end end end -- КЕЙС С ХАБАРОМ ######################################### if(s_obj) and (s_obj:section_name()=="habar_case") then habar_case.spawn() end -- СИГАРЕТНАЯ ЗАВИСИМОСТЬ ################################# if(s_obj) and ((s_obj:section_name()=="marlboro") or (s_obj:section_name()=="belomor") or (s_obj:section_name()=="captain")) then xr_statistic.sigaret_otpustilo() 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") xr_sound.set_sound_play(db.actor:id(), "spat") 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) --################################################################### -------- RUKZAK --------- if self.rr_id~=nil then -- пытаемся получить объект по id local se_obj=alife():object(self.rr_id) -- проверяем, что объекта нет if se_obj==nil or se_obj:section_name()~="inv_ruck" then local ruck=alife():create("active_ruck", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id()) level.map_add_object_spot_ser(ruck.id, "habar", "%c[255,23,255,23]Мой хабар") local text = "Тайник успешно заложен!" local texture = "ui_iconsTotal_found_thing" --"ui_inGame2_Mesta_evakuatsii" local news_text = "%c[255,60,255,60]"..text local news_caption = game.translate_string("st_tip") db.actor:give_game_news(news_caption, news_text, texture, 0, 12*1000) end -- сбросим переменную self.rr_id=nil end ------------------------- --###################################################################
-- апдейт погоды 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 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()
--############################################## -- Апдейт скриптовой логики (бродяга) brodiaga.player_update() trade_stages.tovar_update() geophysics.gf_update() credits.cr_update() torch.torch_update() speceffects.effects_update() xr_statistic.sigaret_zavisimost() sublocation_musics.slm_update() --##############################################
--********** Использование минигана только в экзоскелете! *********** local mgun = db.actor:active_item() local bron = db.actor:item_in_slot(7) if mgun ~= nil and mgun:section() == "wpn_m134" then if bron ~= nil then if not (bron:section()=="exo_outfit" or bron:section()=="exo_servo" or bron:section()=="exo_dolg" or bron:section()=="exo_svoboda" or bron:section()=="exo_monolith" or bron:section()=="exo_merc") then db.actor:activate_slot(6) brodiaga.minigtimer() end else db.actor:activate_slot(6) brodiaga.minigtimer() end 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(b) 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[/cut] Подскажите, плиз, недалёкому, что именно править. Буду весьма признателен.
|
|
|
Эти 0 пользователя(ей) поблагодарили Наблюдатель за это полезное сообщение: |
|
|
sergej5500 | Дата: Пн, 03.07.2017, 18:03 | Сообщение # 2509 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Наблюдатель,
Попробуй убрать строку
torch.torch_update()
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Наблюдатель | Дата: Вт, 04.07.2017, 12:30 | Сообщение # 2510 |
Ветеран
Пользователи
Сообщений: 400
| Цитата sergej5500 ( ) Попробуй убрать строку
torch.torch_update() Приветствую Всех! Премного благодарен, уважаемый sergej5500, таки сработало! Thank you so much!
|
|
|
Эти 0 пользователя(ей) поблагодарили Наблюдатель за это полезное сообщение: |
|
|
Korvin_Melarsky | Дата: Вт, 04.07.2017, 21:29 | Сообщение # 2511 |
Боец штурмового отряда
Военные сталкеры
Сообщений: 80
| такой вопрос - а ТТХ объектов типа nimble откуда берутся? дано - в списке оружия есть куча с приставкой Nimble но в папке weaponsих нет. не понятно как их балансить и откуда они цепляют ТТХ, Сигероус 2.2+пак Енота
Сталкер: Зов Припяти 1602 + SGM 2.2 + оружейная сборка Енота
|
|
|
Эти 0 пользователя(ей) поблагодарили Korvin_Melarsky за это полезное сообщение: |
|
|
asd123 | Дата: Вт, 04.07.2017, 21:33 | Сообщение # 2512 |
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Melarsky, пример СВУ:
Код [wpn_svu_nimble]:wpn_svu,mod_svu_nimble_damage,cost_wpn_svu_nimble $spawn = "weapons\wpn_svu_nimble" class = WP_SVU inv_name = st_wpn_svu_nimble description = st_wpn_svu_nimble_descr grenade_class = ammo_vog-25 ammo_mag_size = 10 fire_modes = 1 scope_status = 1 silencer_status = 0 grenade_launcher_status = 0 launch_speed = 0 fire_dispersion_base = 0.12 control_inertion_factor = 1.6f cam_return = 0 cam_relax_speed = 5 cam_relax_speed_ai = 360 cam_dispersion = 1.5 cam_dispersion_inc = 1.5 cam_dispersion_frac = 1.0 cam_max_angle = 12.0 cam_max_angle_horz = 3.0 cam_step_angle_horz = 1.5 PDM_disp_base = 1.8 PDM_disp_vel_factor = 3.5 PDM_disp_accel_factor = 3.5 PDM_disp_crouch = 1.0 PDM_disp_crouch_no_acc = 1.0 zoom_cam_relax_speed = 5 zoom_cam_relax_speed_ai = 120.75 zoom_cam_dispersion = 0.45 zoom_cam_dispersion_inc = 0.45 zoom_cam_dispersion_frac= 1.0 zoom_cam_max_angle = 10.0 zoom_cam_max_angle_horz = 5.0 zoom_cam_step_angle_horz= 1.5 fire_dispersion_condition_factor = 8 grenade_flame_particles = weapons\generic_weapon01
Вот тут указано, что данная винтовка берёт ТТХ(и всё остальное) от своей "матери", то бишь стандартной СВУ. После чего в ней прописано, что изменяет эта модель в отличии от стандартной:
Код [wpn_svu_nimble]:wpn_svu,...
В SGM 2.2. ТТХ всего вооружения находятся в файле w_sections.ltx.
У мутантов тоже есть группировки. © Движок X-Ray
Сообщение отредактировал asd123 - Вт, 04.07.2017, 21:35 |
|
|
Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
Voland-777 | Дата: Вт, 04.07.2017, 21:40 | Сообщение # 2513 |
Эмиссар
Пользователи
Сообщений: 1702
| Цитата asd123 ( ) В SGM 2.2. ТТХ всего вооружения находятся в файле w_sections.ltx. А также конфиги тактик для оружия, звуков и партиклов.
Сообщение отредактировал Voland-777 - Вт, 04.07.2017, 21:41 |
|
|
Эти 0 пользователя(ей) поблагодарили Voland-777 за это полезное сообщение: |
|
|
Sergeant_Fox | Дата: Чт, 06.07.2017, 14:52 | Сообщение # 2514 |
Разработчик вооружения
Военные сталкеры
Сообщений: 10668
| Доброго всем! Вопрос: мне нужно дернуть локацию сталкера (агропром) для 3д редактора. Какой софт для этого нужен и как делать?
|
|
|
Эти 0 пользователя(ей) поблагодарили Sergeant_Fox за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 06.07.2017, 14:58 | Сообщение # 2515 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Sergeant_Fox, X-Ray Tools convertor, читаем мануал к программе.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Чт, 06.07.2017, 23:31 | Сообщение # 2516 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый вечер.
С помощью горячей клавиши в Зове Припяти заспавнил предмет stationary_mgun
Получилось вот это.
Пользоваться как либо этим аппаратом нельзя. Предлагает "открыть дверь". Но ничего не происходит.
Как можно воспользоваться этой штукой в игре?
Сообщение отредактировал sergej5500 - Чт, 06.07.2017, 23:32 |
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Дизель | Дата: Пт, 07.07.2017, 06:21 | Сообщение # 2517 |
Сталкер
Разработчики
Сообщений: 260
| sergej5500, в движке вырезано ActorMountedWeapon.cpp.
Можно тут пострелять - должно быть активно. http://www.amk-team.ru/forum....1055355
andreyholkin
Сообщение отредактировал Дизель - Пт, 07.07.2017, 06:29 |
|
|
Эти 0 пользователя(ей) поблагодарили Дизель за это полезное сообщение: |
|
|
Korvin_Melarsky | Дата: Сб, 08.07.2017, 10:10 | Сообщение # 2518 |
Боец штурмового отряда
Военные сталкеры
Сообщений: 80
| кто-нибудь может подсказать мод из которого можно вырезать револьверы и мосинку, желательно, чтоб их без конфликтов можно было вставить в СГМ 2.2 с оруженой сборкой Енота
Сталкер: Зов Припяти 1602 + SGM 2.2 + оружейная сборка Енота
|
|
|
Эти 0 пользователя(ей) поблагодарили Korvin_Melarsky за это полезное сообщение: |
|
|
Sergeant_Fox | Дата: Сб, 08.07.2017, 10:12 | Сообщение # 2519 |
Разработчик вооружения
Военные сталкеры
Сообщений: 10668
| Melarsky, Все есть в сталкер Зов Чернобыля.
|
|
|
Эти 0 пользователя(ей) поблагодарили Sergeant_Fox за это полезное сообщение: |
|
|
Korvin_Melarsky | Дата: Сб, 08.07.2017, 11:04 | Сообщение # 2520 |
Боец штурмового отряда
Военные сталкеры
Сообщений: 80
| еще вопрос - в файлах торговцев нашел [supplies_stage_??] ?? = 1-20 это я так понимаю сменяющийся ассортимент? т.е. один раз зашел - торговец тебе продает выборку из [supplies_stage_01] например. другой - из [supplies_stage_20]?? моя догадка верна?
и далее - непонятно как эти сапплай стейдж чередуются. по кругу от 1-20? или рандомно?
Сталкер: Зов Припяти 1602 + SGM 2.2 + оружейная сборка Енота
|
|
|
Эти 0 пользователя(ей) поблагодарили Korvin_Melarsky за это полезное сообщение: |
|
|
|