Clayman 104 Опубликовано 23 Мая 2014 Поделиться Опубликовано 23 Мая 2014 @stalker_grez, почитай - http://stalker-2.com.ua/articles.php?article_id=4, расписал про смарты подробней некуда. Многие вопросы отпадут сами собой. Ссылка на комментарий
stalker_grez 130 Опубликовано 24 Мая 2014 Поделиться Опубликовано 24 Мая 2014 @Clayman, в обычном спавне и респавне отрядов у меня всё в порядке. Не пробовал только поработать с секцией [smart_control], позже попробую по этой статье. ПК - Intel® Core i5-6600 CPU 4x @ 3.30GHz-3.90GHz, NVIDIA GeForce GTX 1060 MSI Gaming-X 3G, 8Гб DDR4-2133 МГц. ОС Win10/64 Ссылка на комментарий
Clayman 104 Опубликовано 24 Мая 2014 Поделиться Опубликовано 24 Мая 2014 Там например есть описание arrive_dist =, который и определяет, с какой дистанции сквад берется под логику смарта. Ссылка на комментарий
stalker_grez 130 Опубликовано 24 Мая 2014 Поделиться Опубликовано 24 Мая 2014 @stalker_grez,ясно. Но я сделал, чтобы он сначала заспавнился в одном смарте, потом добежал до второго и после диалога перешел к логике во втором. ПК - Intel® Core i5-6600 CPU 4x @ 3.30GHz-3.90GHz, NVIDIA GeForce GTX 1060 MSI Gaming-X 3G, 8Гб DDR4-2133 МГц. ОС Win10/64 Ссылка на комментарий
ммихаилл 1 Опубликовано 27 Мая 2014 Поделиться Опубликовано 27 Мая 2014 Можно ли прописать проверку на использования определенного оружия? То бишь: ГГ стреляет из ПМ в НПС и тот переходит на схему врага, а если ГГ стреляет из Форта, то НПС просто погибает. Вторая часть особо не важна, главное функция проверки. Ссылка на комментарий
Дедушка Тапок 61 Опубликовано 28 Мая 2014 Поделиться Опубликовано 28 Мая 2014 Здравствуйте форумчане! Я столкнулся с проблемой. При добавлении скриптов на убирание рук ГГ при исп. предметов у меня вылетает ошибка! [error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard[error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp[error]Line : 748[error]Description : ...op\bin\gamedata\scripts\smart_terrain_control.script:65: attempt to index field 'actor' (a nil value) Хотя вписывал как положено! function init (obj)xr_motivator.AddToMotivator(obj)endfunction actor_init (npc)npc:bind_object(actor_binder(npc))endlocal 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 = falseself.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 = nilself.deimos_intensity = nil-- self.actor_weapon_on_start = trueself.loaded_active_slot = 3self.loaded_slot_applied = falseself.last_detective_achievement_spawn_time = nilself.last_mutant_hunter_achievement_spawn_time = nil-- AtmosFearself.atmosfear=atmosfear.get_atmosfear()self.fallout_manager = fallout_manager.get_fallout_manager()self.psi_storm_manager = psi_storm_manager.get_psi_storm_manager()end----------------------------------------------------------------------------------------------------------------------function actor_binder:net_spawn(data)-- printf("actor net spawn")level.show_indicators()self.bCheckStart = trueself.weapon_hide = false -- спрятано или нет оружие при разговоре.self.weapon_hide_in_dialog = falseweapon_hide = {} -- устанавливаем глобальный дефолтовый флаг.if object_binder.net_spawn(self,data) == false thenreturn falseenddb.add_actor(self.object)db.actor.deimos_intensity = self.deimos_intensityself.deimos_intensity = nilif self.st.disable_input_time == nil thenlevel.enable_input()endxr_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().frameself.already_jumped = falseself.loaded = falsebenchmark.main() --' Distemper 06.2008 --return trueend----------------------------------------------------------------------------------------------------------------------function actor_binder:net_destroy()xr_sound.stop_sounds_by_id(self.object:id())local board_factions = sim_board.get_sim_board().playersif(board_factions) thenfor k,v in pairs (board_factions) doxr_sound.stop_sounds_by_id(v.id)endendif(actor_stats.remove_from_ranking~=nil)thenactor_stats.remove_from_ranking(self.object:id())endlevel.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) thenget_console():execute("snd_volume_eff "..tostring(_G.amb_vol))_G.amb_vol = 0endif(_G.mus_vol~=0) thenget_console():execute("snd_volume_music "..tostring(_G.mus_vol))_G.mus_vol = 0endif sr_psy_antenna.psy_antenna thensr_psy_antenna.psy_antenna:destroy()sr_psy_antenna.psy_antenna = falseendxrs_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 = nilself.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 statsself.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 thengame_stats.money_trade_update (money)elsegame_stats.money_trade_update (-money)endend----------------------------------------------------------------------------------------------------------------------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) thenlocal anomal_zone = bind_anomaly_zone.parent_zones_by_artefact_id[obj:id()]if anomal_zone ~= nil thenanomal_zone:on_artefact_take(obj)elsebind_anomaly_zone.artefact_ways_by_id[obj:id()] = nilendlocal 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) thenxr_statistic.inc_founded_artefacts_counter(s_art:section_name())elsexr_statistic.inc_founded_artefacts_counter()end]]endtreasure_manager.get_treasure_manager():on_item_take(obj:id())end----------------------------------------------------------------------------------------------------------------------function actor_binder:on_item_drop (obj)endfunction actor_binder:use_inventory_item(obj)if(obj) thenlocal s_obj = alife():object(obj:id())if(s_obj) and (s_obj:section_name()=="drug_anabiotic") thenxr_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")elseif (spalnik) then spalnik.use_inventory_item(s_obj) end --Idler используем спальник?elsedfz_hide_wpn.object_eat(obj)endendend-- AtmosFear Booster Checkif (s_obj) and (s_obj:section_name() == "drug_psy_blockade" or s_obj:section_name() == "drug_radioprotector" or s_obj:section_name() == "drug_antidot") thenlocal boost_time = system_ini():r_float(s_obj:section_name(),"boost_time")xr_logic.pstor_store(db.actor,s_obj:section_name().."_expiration",atmosfear.CTimeAddSec(game.get_game_time(),boost_time*level.get_time_factor()))end-- End AtmosFear Booster Checkendendfunction 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) thenlocal 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) thenm.time_forwarded = truem.ui_disabled = truem:kill_all_unhided()m:end_surge()endendlocal m = psi_storm_manager.get_psi_storm_manager()if(m.started) thenlocal tf = level.get_time_factor()local diff_sec = math.ceil(game.get_game_time():diffSec(m.inited_time)/tf)if(rnd>(m.psi_storm_duration-diff_sec)*tf/60) thenm.time_forwarded = true--m.ui_disabled = truem:finish()endendlevel.change_game_time(0,0,rnd)level_weathers.get_weather_manager():forced_weather_change()printf("anabiotic_callback: time forwarded on [%d]", rnd)endfunction 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 = 0disable_info("anabiotic_in_process")end----------------------------------------------------------------------------------------------------------------------function actor_binder:task_callback(_task, _state)if _state ~= task.fail thenif _state == task.completed thennews_manager.send_task(db.actor, "complete", _task)elsenews_manager.send_task(db.actor, "new", _task)endendtask_manager.task_callback(_task, _state)end----------------------------------------------------------------------------------------------------------------------function actor_binder:update(delta)object_binder.update(self, delta)--[[ Вызывается раз в 2 секунды. ]]--local interval_to_callback = 0if interval_to_callback < time_global() thendfz_hide_wpn.timer_minutes_wpn_hide()local interval_to_callback = time_global() + 2000end--[[ Вызывается раз в 2 секунды. ]]--if string.find(command_line(), "-designer") thenreturnendif self.already_jumped==false and jump_level.need_jump==true and (device().frame > self.spawn_frame+2000) thenjump_level.try_to_jump()self.already_jumped = truereturnend-- Вызов апдейта переноса игрока проводникомif travel_func ~= nil thentravel_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 andgame.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idlethenlevel.enable_input()self.st.disable_input_time = nilend-- Апдейт прятание оружия игрока во время диалогаif self.object:is_talking() thenif self.weapon_hide_in_dialog == false thenself.object:hide_weapon()printf("hiding weapon!!!")self.weapon_hide_in_dialog = trueendelseif self.weapon_hide_in_dialog == true thenprintf("restoring weapon!!!")self.object:restore_weapon()self.weapon_hide_in_dialog = falseendend-- Апдейт прятание оружия игрока в зоне sr_no_weaponif check_for_weapon_hide_by_zones() == true thenif self.weapon_hide == false thenprintf("hiding weapon!!!")self.object:hide_weapon()self.weapon_hide = trueendelseif self.weapon_hide == true thenprintf("restoring weapon!!!")self.object:restore_weapon()self.weapon_hide = falseendend-- обновление пси-антенныif sr_psy_antenna.psy_antenna thensr_psy_antenna.psy_antenna:update(delta)end--[[--' Вывод сообщения о большой радиацииif self.object.radiation >= 0.7 thenlocal hud = get_hud()local custom_static = hud:GetCustomStatic("cs_radiation_danger")if custom_static == nil thenhud:AddCustomStatic("cs_radiation_danger", true)hud:GetCustomStatic("cs_radiation_danger"):wnd():TextControl():SetTextST("st_radiation_danger")endelselocal hud = get_hud()local custom_static = hud:GetCustomStatic("cs_radiation_danger")if custom_static ~= nil thenhud:RemoveCustomStatic("cs_radiation_danger")endend]]--if self.bCheckStart thenprintf("SET DEFAULT INFOS")if not has_alife_info("global_dialogs") thenself.object:give_info_portion("global_dialogs")endif not has_alife_info("level_changer_icons") thenself.object:give_info_portion("level_changer_icons")endself.bCheckStart = false-- if self.actor_weapon_on_start == true then-- db.actor:activate_slot(3)-- self.actor_weapon_on_start = false-- endend-- device().precache_frame == 0 andif not self.loaded_slot_applied thenself.object:activate_slot(self.loaded_active_slot)self.loaded_slot_applied = trueendxr_s.on_actor_update(delta)if(self.surge_manager) thenif(self.f_surge_manager_loaded ~= true) thenself.surge_manager:initialize()self.f_surge_manager_loaded = trueendif(self.surge_manager.levels_respawn[level.name()]) thenself.surge_manager:respawn_artefacts_and_replace_anomaly_zone()endself.surge_manager:update()end-- AtmosFearif(self.psi_storm_manager) thenif(self.f_psi_storm_manager_loaded ~= true) thenself.psi_storm_manager:initialize()self.f_psi_storm_manager_loaded = trueendself.psi_storm_manager:update()endif(self.fallout_manager) thenself.fallout_manager:update()endif(self.atmosfear) thenself.atmosfear:update()endif not db.actor:has_info("atmosfear_default_console_settings_loaded") thenself.atmosfear:loadDefaultConsoleSettings()db.actor:give_info_portion("atmosfear_default_console_settings_loaded")end-- End AtmosFear-- Апдейт доступности для симуляции.simulation_objects.get_sim_obj_registry():update_avaliability(alife():actor())if not self.loaded thenget_console():execute("dump_infos")self.loaded = trueendtreasure_manager.get_treasure_manager():update()if not(primary_objects_filled) thenpda.fill_primary_objects()primary_objects_filled = trueendpda.fill_sleep_zones()if dinamic_hud thendinamic_hud.update()endend----------------------------------------------------------------------------------------------------------------------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 thenpacket:w_bool(false)elsepacket:w_bool(true)utils.w_CTime(packet, self.st.disable_input_time)endxr_logic.pstor_save_all(self.object, packet)self.weather_manager:save(packet)release_body_manager.get_release_body_manager():save(packet)-- AtmosFearself.atmosfear:save(packet)self.psi_storm_manager:save(packet)self.fallout_manager:save(packet)-- End AtmosFearself.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 = 0for k,v in pairs(db.script_ids) don = n + 1endpacket:w_u8(n)for k,v in pairs (db.script_ids) dopacket:w_u16(k)packet:w_stringZ(v)endtask_manager.get_task_manager():save(packet)-- packet:w_bool(self.actor_weapon_on_start)packet:w_u8(self.object:active_slot())local deimos_exist = falsefor k,v in pairs(db.zone_by_name) doif(db.storage[v:id()] and db.storage[v:id()].active_scheme=="sr_deimos") thendeimos_exist = truepacket:w_bool(true)packet:w_float(db.storage[v:id()].sr_deimos.intensity)endendif not deimos_exist thenpacket:w_bool(false)endif self.last_detective_achievement_spawn_time == nil thenpacket:w_bool(false)elsepacket:w_bool(true)utils.w_CTime(packet, self.last_detective_achievement_spawn_time)endif self.last_mutant_hunter_achievement_spawn_time == nil thenpacket:w_bool(false)elsepacket:w_bool(true)utils.w_CTime(packet, self.last_mutant_hunter_achievement_spawn_time)endset_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 thenself.st.disable_input_time = utils.r_CTime(reader)endxr_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()-- AtmosFearself.atmosfear:load(reader)self.psi_storm_manager:load(reader)self.fallout_manager:load(reader)self.f_psi_storm_manager_loaded = true-- End AtmosFearself.surge_manager:load(reader)self.f_surge_manager_loaded = truesr_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") thenself.last_level_name = nendxr_statistic.load(reader)treasure_manager.get_treasure_manager():load(reader)n = reader:r_u8()for i = 1,n dodb.script_ids[reader:r_u16()] = reader:r_stringZ()endtask_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 = falselocal b = reader:r_bool()if( thenself.deimos_intensity = reader:r_float()endlocal stored_achievement_time = reader:r_bool()if stored_achievement_time == true thenself.last_detective_achievement_spawn_time = utils.r_CTime(reader)endstored_achievement_time = reader:r_bool()if stored_achievement_time == true thenself.last_mutant_hunter_achievement_spawn_time = utils.r_CTime(reader)endset_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 doalife():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)endendfunction actor_binder:check_detective_achievement()if not has_alife_info("detective_achievement_gained") thenreturnendif self.last_detective_achievement_spawn_time == nil thenself.last_detective_achievement_spawn_time = game.get_game_time()endif game.get_game_time():diffSec(self.last_detective_achievement_spawn_time) > 43200 thenspawn_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()endendfunction actor_binder:check_mutant_hunter_achievement()if not has_alife_info("mutant_hunter_achievement_gained") thenreturnendif self.last_mutant_hunter_achievement_spawn_time == nil thenself.last_mutant_hunter_achievement_spawn_time = game.get_game_time()endif game.get_game_time():diffSec(self.last_mutant_hunter_achievement_spawn_time) > 43200 thenspawn_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()endend----------------------------------------------------------------------------------------------------------------------function check_for_weapon_hide_by_zones()for k,v in pairs(weapon_hide) doif v == true thenreturn trueendendreturn falseend-- Weapon functionsfunction 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] = trueendfunction 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] = falseend -- Состояние смарттеррейна-- Может быть трех видов: normal, danger, alarm-- normal - все как обычно, без ограничений-- danger - в зоне контроля находится игрок с оружием. Нужно запереть двери и предложить ему убираться-- alarm - игрок атаковал смарт. Нужно запереть двери и подождать время.NORMAL = 0DANGER = 1ALARM = 2current_smart_id = nillocal ALARM_TIME = 2*60*60class "CBaseOnActorControl"function CBaseOnActorControl:__init(smart, ini, section)self.noweap_zone = utils.cfg_get_string(ini, section, "noweap_zone", self, true, "")self.ignore_zone = utils.cfg_get_string(ini, section, "ignore_zone", self, false, "")self.alarm_start_sound = xr_logic.parse_condlist(smart, section, "alarm_start_sound", utils.cfg_get_string(ini, section, "alarm_start_sound", self, false, "") )self.alarm_stop_sound = xr_logic.parse_condlist(smart, section, "alarm_stop_sound", utils.cfg_get_string(ini, section, "alarm_stop_sound", self, false, "") )self.smart = smartself.status = NORMALendfunction CBaseOnActorControl:update()--printf("%s alarm status [%s]", self.smart:name(), self.status)if self.status == ALARM thenif game.get_game_time():diffSec(self.alarm_time) < ALARM_TIME then--printf("TIME %s", game.get_game_time():diffSec(self.alarm_time))returnendlocal sound = xr_logic.pick_section_from_condlist(db.actor, self.smart, self.alarm_stop_sound)--printf("SOUND = %s", tostring(sound))--' Озвучка на конец атакиif sound ~= nil thenxr_sound.set_sound_play(db.actor:id(), sound)endfor squad_id,squad in pairs(sim_board.get_sim_board().smarts[self.smart.id].squads) dogame_relations.set_squad_goodwill(squad_id, "neutral")endendif self:get_actor_treat() == true thenself.status = DANGERelseself.status = NORMALendend-- Возвращает статус угрожает ли игрок смарту или нет (находится ли с оружием в пределах новеапон зоны).function CBaseOnActorControl:get_actor_treat()local zone = db.zone_by_name[self.noweap_zone]if zone == nil thenreturn falseendif not zone:inside(db.actor:position()) thenif current_smart_id == self.smart.id thencurrent_smart_id = nilendreturn falseelsecurrent_smart_id = self.smart.idendif isWeapon(db.actor:active_item()) thenreturn trueendreturn falseend-- Устанавливает, что игрок атаковал смартfunction CBaseOnActorControl:actor_attack()if self.status ~= ALARM thenlocal sound = xr_logic.pick_section_from_condlist(db.actor, self.smart, self.alarm_start_sound)--' Озвучка на начало атаки.if sound ~= nil thenxr_sound.set_sound_play(db.actor:id(), sound)endfor squad_id,squad in pairs(sim_board.get_sim_board().smarts[self.smart.id].squads) dogame_relations.set_squad_goodwill(squad_id, "enemy")endendself.status = ALARMself.alarm_time = game.get_game_time()endfunction CBaseOnActorControl:get_status()return self.statusend-- НЕ ЗАБЫТЬ СЕЙВ ЛОАДfunction CBaseOnActorControl:save(packet)set_save_marker(packet, "save", false, "CBaseOnActorControl")packet:w_u8(self.status)utils.w_CTime(packet, self.alarm_time)set_save_marker(packet, "save", true, "CBaseOnActorControl")endfunction CBaseOnActorControl:load(packet)set_save_marker(packet, "load", false, "CBaseOnActorControl")self.status = packet:r_u8()self.alarm_time = utils.r_CTime(packet)set_save_marker(packet, "load", true, "CBaseOnActorControl")end Ссылка на комментарий
alex5773 1 330 Опубликовано 28 Мая 2014 Поделиться Опубликовано 28 Мая 2014 Хотя вписывал как положено! Если бы ты вписывал как положено, то с проблемой бы этой не столкнулся. Вот тебе script Syntax Checker(для проверки скриптов, запускаешь и указываешь на папку scripts, и программка проверяет правильность написания скриптов, ну и указывает на ошибку) http://rghost.ru/private/55911083/903850d1e1ce6ed1742bc31610c64e2b И удачи в освоении модинга 1 Ссылка на комментарий
Дедушка Тапок 61 Опубликовано 28 Мая 2014 Поделиться Опубликовано 28 Мая 2014 Объясните, для чего нужны такие скрипты: bind_stalker.script.bak, bind_monster.script.bak, xr_motivator.script.bak ? Ссылка на комментарий
alex5773 1 330 Опубликовано 28 Мая 2014 Поделиться Опубликовано 28 Мая 2014 для чего нужны такие скрипты: bind_stalker.script.bak, bind_monster.script.bak Чтоб удалить их, они тебе явно не нужны, и игре тоже. Это просто кто-то их так сохранял оригинальными(до изменений). Ссылка на комментарий
dPlayer 527 Опубликовано 31 Мая 2014 Поделиться Опубликовано 31 Мая 2014 Ну все, придется вам все ваши моды под новый патч переделывать http://cop.stalker-game.ru/?page=patches&item=4 2 Самый некомпетентный на форуме. Ссылка на комментарий
andreyich 30 Опубликовано 31 Мая 2014 Поделиться Опубликовано 31 Мая 2014 Народ помогите. Какой файл отвечает за картинку в меню? И еще вопрос как сделать регулируемым несъемный прицел (например прицел на фн2000)? И еще можно ли сделать так что бы когда включен режим подствольного гранатамета (несъемного) нажатием правой кнопки включался оптический прицел? Ссылка на комментарий
stalker_grez 130 Опубликовано 2 Июня 2014 Поделиться Опубликовано 2 Июня 2014 @andreyich,Файл отвечающий за картинку в меню лежит в gamedata/textures/ui/ui_actor_main_menu.dds 1 ПК - Intel® Core i5-6600 CPU 4x @ 3.30GHz-3.90GHz, NVIDIA GeForce GTX 1060 MSI Gaming-X 3G, 8Гб DDR4-2133 МГц. ОС Win10/64 Ссылка на комментарий
Ezio_Auditore900 66 Опубликовано 18 Июня 2014 Поделиться Опубликовано 18 Июня 2014 Всем привет! Не подскажете, как привязать wpn_hand_оружие_hud_animation.omf к рукам? Пытался дописать в Hex-редакторе - вылет с жалобой can't find motion file... Заранее спасибо! P.S. извеняюсь, если пишу не туда. Диск Канал Ссылка на комментарий
andreyich 30 Опубликовано 18 Июня 2014 Поделиться Опубликовано 18 Июня 2014 Скажите как сделать рандомную музыку в меню? Ссылка на комментарий
Ezio_Auditore900 66 Опубликовано 18 Июня 2014 Поделиться Опубликовано 18 Июня 2014 (изменено) @andreyich, Заходишь в файл по пути configs\ui\ui_mm_main, находишь строку <menu_sound random="0" > и меняешь 0 на 1. Тоже самое нужно сделать и с файлом ui_mm_main_16. Затем нужно дописать после <menu_music>music\menu</menu_music> свою музыку по аналогии. <menu_sound random="1" > <menu_music>music\menu</menu_music> <menu_music>music\menu0</menu_music> <menu_music>music\menu1</menu_music> <menu_music>music\menu2</menu_music> Удачи Изменено 18 Июня 2014 пользователем Ezio_Auditore900 Диск Канал Ссылка на комментарий
AnoniM12 45 Опубликовано 18 Июня 2014 Поделиться Опубликовано 18 Июня 2014 @Ezio_Auditore900, в Actor Editor добавляешь новые анимации оружия для каждой модели рук и экспортируешь. Еще вариант - добавить новые анимации к GSC-анимации. 1 Портфолио: https://yadi.sk/d/rkLI73WUcsu3p Ссылка на комментарий
ммихаилл 1 Опубликовано 5 Июля 2014 Поделиться Опубликовано 5 Июля 2014 В каком файле логику нужно пустить в nil, чтобы на "скадовске" во время атаки на сталкера, не пускалась функция войны между бандитами и сталкирами и ГГ, то бишь = -тревога. Ссылка на комментарий
Painter 3 446 Опубликовано 5 Июля 2014 Поделиться Опубликовано 5 Июля 2014 (изменено) Для того, чтобы вырезать тревогу на базах, в файле smart_terrain_control.script достаточно "закомментить" следующие строки: -- Устанавливает, что игрок атаковал смарт function CBaseOnActorControl:actor_attack() if self.status ~= ALARM then local sound = xr_logic.pick_section_from_condlist(db.actor, self.smart, self.alarm_start_sound) --' Озвучка на начало атаки. if sound ~= nil then xr_sound.set_sound_play(db.actor:id(), sound) end for squad_id,squad in pairs(sim_board.get_sim_board().smarts[self.smart.id].squads) do game_relations.set_squad_goodwill(squad_id, "enemy") end end self.status = ALARM self.alarm_time = game.get_game_time() end -- Устанавливает, что игрок атаковал смарт function CBaseOnActorControl:actor_attack() --[[ if self.status ~= ALARM then local sound = xr_logic.pick_section_from_condlist(db.actor, self.smart, self.alarm_start_sound) --' Озвучка на начало атаки. if sound ~= nil then xr_sound.set_sound_play(db.actor:id(), sound) end for squad_id,squad in pairs(sim_board.get_sim_board().smarts[self.smart.id].squads) do game_relations.set_squad_goodwill(squad_id, "enemy") end end self.status = ALARM self.alarm_time = game.get_game_time() ]]-- end Как итог: больше не будет активироваться соответствующая реплика, а двери останутся открытыми. Разумеется, это самый простой (и не далеко не лучший способ). Дальше придётся дорабатывать самому. Изменено 5 Июля 2014 пользователем Jurok 1 3 Портфолио Ссылка на комментарий
DarkSatellite 5 Опубликовано 14 Июля 2014 Поделиться Опубликовано 14 Июля 2014 Подскажите пожалуйста, как в Зове Припяти сделать так, чтобы в случае смерти сталкеров и мутантов, их тела оставались полностью неподвижными. То есть, не катились с неровных поверхностей или от прикосновений ног ГГ, словно они весят очень легко... Ссылка на комментарий
DimasDsf 1 Опубликовано 17 Июля 2014 Поделиться Опубликовано 17 Июля 2014 (изменено) Здравствуйте, собираюсь задать вопрос не из легкихМожет кто-то все-таки знает. В моде Atmosfear3 есть опция превращения нпс в зомби, но... происходит это наиубогийшим образом, а то есть нпс полностью удаляется и вместо него спавнится зомби. Выглядит убого и самое главное экипировка никак не соответствует.Так вот я решил взяться за другой подход то есть переназначение нпс в группировку зомби, и выставление вражеского отношения. Отношение решил делать так function enemy(actor, npc) npc:set_relation (game_object.enemy, db.actor) end используя за "npc" нпс которого скрипт решил удалять Если есть более удобный код или этот не сработает подскажите как сделать лучше А вот с группировкой проблема... Вопрос:можно ли через скрипт сменить группировку у нпс и если можно то как? за написание пока не брался так как стрельба по тому же долговцу хоть и враждебному скорее всего закончится "хейтом" всей группировки да и врагом нпс станет только мне вот кстати дефаултная функция превращения в зомби function CSurgeManager:turn_to_zombie(obj) local cl_obj = level.object_by_id(obj.id)local positionlocal sectionlocal zombie_typeif cl_obj ~= nil thenposition=cl_obj:position()section=cl_obj:section()elseposition=obj.positionsection=obj:section_name()endalife():release(alife():object(obj.id), true)local section_number = string.sub(section, -1)if section_number=="4" thenzombie_type="sim_default_zombied_4"elseif section_number=="3" thenzombie_type="sim_default_zombied_3"elseif section_number=="2" or section_number=="1" thenzombie_type="sim_default_zombied_2"elsezombie_type="sim_default_zombied_1"endalife():create(zombie_type, position, db.actor:level_vertex_id(), db.actor:game_vertex_id())--self.debugMessages[1]:SetText("type: "..tostring(zombie_type))end Изменено 17 Июля 2014 пользователем DimasDsf Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти