Артём_killer 12 Опубликовано 4 Июня 2013 А есть уже готовые файлы? а то я не могу разобраться со своим модом, что да как, мне для чистого неба нужно на чистую игру. Поделиться этим сообщением Ссылка на сообщение
Артём_killer 12 Опубликовано 4 Июня 2013 Я сделал, вылетает; Expression : fatal error Function : CScriptEngine::lua_error File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp Line : 180 Description : <no expression> Arguments : LUA error: ...lver edition\cs\gamedata\scripts\bind_stalker.script:597: table index is nil не знаю, я просто уже много чего добавил в чн, а теперь разобраться не могу, мне нужен сталкер бин готовый для сравнения с моим) под версию 1.5.10, да кстати вылетает когда аптечку использую Поделиться этим сообщением Ссылка на сообщение
Артём_killer 12 Опубликовано 4 Июня 2013 Да я хочу сам разобраться, спасибо за помощь конечно, мне бы просто на готовый файл глянуть с чистой игры, чтобы я потом сам ручками доделал)) я вставлял Slow Medicine 0.2b работало нормально, но спальник глючило из-за этого) и еще вопрос, по этому же принципу можно сделать медленный вывод радиации из организма? ато я его щас буду калупать до посинения и свой скрипт сломаю) function init (obj) xr_motivator.AddToMotivator(obj)endfunction actor_init (npc)npc:bind_object(actor_binder(npc))enddelayed_alife_release_objects = {}to_delayed_alife_release_objects = {}local game_difficulty_by_num = {[0] = "gd_novice",[1] = "gd_stalker",[2] = "gd_veteran",[3] = "gd_master"}lasthealth = 0lasttime = 0post_process = 0local weapon_hide = {}----------------------------------------------------------------------------------------------------------------------class "actor_binder" (object_binder)----------------------------------------------------------------------------------------------------------------------function actor_binder:__init (obj) super(obj)self.bCheckStart = falseself.weather_manager = level_weathers.get_weather_manager()--self.actor_detector = xr_detector.actor_detector()self.last_level_name = nilend----------------------------------------------------------------------------------------------------------------------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)if self.st.disable_input_time == nil thenlevel.enable_input()endxr_s.on_game_load() --' Distemper 03.2008 --self.weather_manager:reset()-- game_stats.initialize ()-- if(actor_stats.add_to_ranking~=nil)then-- actor_stats.add_to_ranking(self.object:id())-- end--' Загружаем настройки дропаdeath_manager.init_drop_settings()--'Устанавливаем ссылку на таскменеджерself.task_manager = task_manager.get_task_manager()-- Анремте это, чтобы пропустить интро на марше.--self.object:give_info_portion("mar_lvl_sim")if level.name() ~= "marsh" thensim_board.get_sim_board():start_sim()end--spawn_items.main()self.spawn_frame = device().frameself.already_jumped = 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().playersfor k,v in pairs (board_factions) doxr_sound.stop_sounds_by_id(v.id)endif(actor_stats.remove_from_ranking~=nil)thenactor_stats.remove_from_ranking(self.object:id())endxr_effects.stc_stop_particle_sounds()level.show_indicators()level.show_weapon(true)-- get_console():execute("hud_crosshair 1")-- get_console():execute("hud_weapon 1")-- get_console():execute("r2_dof -0.250000,1.400000,200.000000")-- game_stats.shutdown ()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.actor_sleep, 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)if sr_psy_antenna.psy_antenna thensr_psy_antenna.psy_antenna:destroy()sr_psy_antenna.psy_antenna = falseendxrs_dyn_music.stop_sound()object_binder.net_destroy(self)-- xr_sound.stop_all_sounds()xr_s.on_actor_destroy() --' Distemper 03.2008 --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.next_restrictors_update_time = -10000self.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)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()treasure_manager.take_item_from_box(box, box_name, item)--local smart_name = string.sub(box_name, 1, string.len(box_name)-4)--if(sim_board.get_sim_board().smarts_by_names[smart_name]~=nil) then-- game_relations.set_gulag_relation_actor(smart_name, "enemy")--endend----------------------------------------------------------------------------------------------------------------------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 thengame_stats.money_trade_update (money)xr_statistic.inc_recieved_money_counter(money)elsegame_stats.money_trade_update (-money)xr_statistic.inc_spent_money_counter(money)endend----------------------------------------------------------------------------------------------------------------------function actor_binder:article_callback(npc, group, name)--printf("article_callback [%s][%s]", group, name)if device().precache_frame >1 then return endif group == "Diary" thennews_manager.send_encyclopedy("diary", group)elsenews_manager.send_encyclopedy("encyclopedy", group)endend----------------------------------------------------------------------------------------------------------------------function actor_binder:on_item_take (obj)level_tasks.proceed(self.object)printf("on_item_take [%s]", obj:name())if isArtefact(obj) thenbind_anomaly_zone.artefact_ways_by_id[obj:id()] = nillocal artefact = obj:get_artefact()artefact:FollowByPath("NULL",0,vector():set(500,500,500))if bind_anomaly_zone.parent_zones_by_artefact_id[obj:id()] ~= nil thenbind_anomaly_zone.parent_zones_by_artefact_id[obj:id()]:on_artefact_take()endendfor k,v in pairs(task_manager:get_task_manager().task_info) doif(v.type=="bring_item" and v.state~="finished") thenv:on_item_take(obj)endend--game_stats.update_take_item (obj, self.object)end----------------------------------------------------------------------------------------------------------------------function actor_binder:on_item_drop (obj)level_tasks.proceed(self.object)for k,v in pairs(task_manager:get_task_manager().task_info) doif(v.type=="bring_item" and v.state~="finished") thenv:on_item_drop(obj)endend--game_stats.update_drop_item (obj, self.object)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: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----------------------------------------------------------------------------------------------------------------------local item_ = {["medkit"] = true, ["medkit_army"] = true, ["medkit_scientic"] = true,}function actor_binder:use_inventory_item(obj)if item_[obj:section()] thenmedicine.Rehabilitation(obj)endendfunction actor_binder:update(delta)object_binder.update(self, delta)if 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-- DEBUG slowdown-- slowdown.update()xr_s.on_actor_update(delta)local time = time_global()game_stats.update (delta, self.object)-- апдейт погодыself.weather_manager:update()-- апдейт схемы детектора--self.actor_detector:update()--' Апдейт саундменеджераxr_sound.update(self.object:id())--' Проверка потери жизни--[[if self.object.health - lasthealth > 0.001 orself.object.health - lasthealth < -0.001 thenprintf("%f | %f", self.object.health, self.object.health - lasthealth, game.time() - lasttime)lasthealth = self.object.healthlasttime = game.time()end]]-- Обновление отключения ввода с клавиатуры.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.st.sleep_relocate_time ~= nil andgame.get_game_time():diffSec(self.st.sleep_relocate_time) >= self.st.sleep_relocate_idlethenself.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 = nilend-- Апдейт прятание оружия игрока во время диалогаif self.object:is_talking() thenif self.weapon_hide_in_dialog == false then--printf("PL:HIDE_D1 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))self.object:hide_weapon()self.weapon_hide_in_dialog = true--printf("PL:HIDE_D2 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))endelseif self.weapon_hide_in_dialog == true then--printf("PL:RESTORE_D1 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))self.object:restore_weapon()self.weapon_hide_in_dialog = false--printf("PL:RESTORE_D2 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))endend-- Апдейт прятание оружия игрока в зоне sr_no_weaponif check_for_weapon_hide_by_zones() == true then--printf("weapon_hide1 = [%s]", tostring(weapon_hide))if self.weapon_hide == false then--printf("PL:HIDE_W1 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))self.object:hide_weapon()self.weapon_hide = true--printf("PL:HIDE_W2 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))endelse--printf("weapon_hide3 = [%s]", tostring(weapon_hide))if self.weapon_hide == true then--printf("PL:RESTORE_W1 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))self.object:restore_weapon()self.weapon_hide = false--printf("PL:RESTORE_W2 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))endend-- обновление рестрикторов, которые под логикой, срабатывает через интервалы времениif self.next_restrictors_update_time < time thenself.next_restrictors_update_time = time + 200self.task_manager:update()end-- обновление постпроцессовif post_process ~= 0 thenif post_process:update () == true thenpost_process = 0endend-- обновление пси-антенныif sr_psy_antenna.psy_antenna thensr_psy_antenna.psy_antenna:update(delta)end--[[local hud_demo = get_hud()local custom_static_demo = hud_demo:GetCustomStatic("cs_demo_play")if custom_static_demo == nil thenhud_demo:AddCustomStatic("cs_demo_play", true)if level.name() == "agroprom_underground" thenhud_demo:GetCustomStatic("cs_demo_play"):wnd():SetTextST("st_demo_agr")elseif level.name() == "military_nvidia" thenhud_demo:GetCustomStatic("cs_demo_play"):wnd():SetTextST("st_demo_mil")elsehud_demo:GetCustomStatic("cs_demo_play"):wnd():SetTextST("st_demo_play")endendif jump_level.need_jump==true thenhud_demo:GetCustomStatic("cs_demo_play"):wnd():SetTextST("L: " .. level.name() .. " frame [" ..tostring(device().frame) .."] delta[" ..tostring(device().frame - self.spawn_frame) .."]")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():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")endendif 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")endlevel_tasks.add_lchanger_location()self.bCheckStart = falseend--' Distemper 03.2008 --if xrs_dyn_music.play_combat == 0 thenxrs_dyn_music.interactive_music(0)elseif xrs_dyn_music.play_combat == 1 thenxrs_dyn_music.interactive_music(20)elseif xrs_dyn_music.play_combat == 2 thenxrs_dyn_music.interactive_music(10)endxr_s.on_actor_update(delta)--' end --if xr_surge_hide.start_surge thenif not xr_surge_hide.weather_surge thenxr_surge_hide.weather_surge = truelevel.set_weather("default_cloudy", true)endlocal diff_sec = math.ceil(game.get_game_time():diffSec(xr_surge_hide.initialization_time)/level.get_time_factor())local time_before_lag_noosphere = 0local time_before_give_task = 0if level.name() == "marsh" thentime_before_lag_noosphere = 12time_before_give_task = 15elsetime_before_lag_noosphere = 17time_before_give_task = 27endif diff_sec>=time_before_lag_noosphere and xr_surge_hide.phase == 1 thenxr_surge_hide.activate_surge()elseif diff_sec>=time_before_give_task and xr_surge_hide.phase == 2 thenxr_surge_hide.activate_surge(xr_surge_hide.time_before_surge)endendlocal al = alife()if al ~= nil thenlocal name = al:level_name(al:level_id())if(self.last_level_name==nil) thenself.last_level_name = nameelseif(name~=self.last_level_name) thenself.last_level_name = namelocal time = xr_surge_hide.surge_can_be_started(name)if time thenxr_surge_hide.activate_surge(time)endendendendif guiders.teleported_to_another_level and not guiders.level_changed thenguiders.action_teleport_to_point()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) --' Distemper 12.02.2008xr_surge_hide.save(packet)sr_psy_antenna.save( packet )--self.actor_detector:save(packet)packet:w_bool(sim_board.get_sim_board().simulation_started)-- Сохранение списка ожидания на команду атаки от игрокаlocal n = 0for k,v in pairs(sim_combat.wait_for_combat) don = n + 1endpacket:w_u8(n)for k,v in pairs(sim_combat.wait_for_combat) dopacket:w_u16(k)packet:w_stringZ(v)endxr_sound.actor_save(packet)packet:w_stringZ(tostring(self.last_level_name))xr_statistic.save(packet)guiders.save(packet)treasure_manager.save(packet)n = 0for k,v in pairs(delayed_alife_release_objects) don = n + 1endpacket:w_u8(n)for k,v in pairs (delayed_alife_release_objects) doprintf("TO_RELEASING OBJ:[%s]", tostring(k))packet:w_u16(k)endn = 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)end-- minigames_manager.get_minigames_manager():save(packet)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 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) --' Distemper 12.02.2008xr_surge_hide.load(reader)sr_psy_antenna.load(reader)--self.actor_detector:load(reader)sim_board.get_sim_board().simulation_started = reader:r_bool()-- Загрузка списка ожидания на команду атаки от игрокаlocal n = reader:r_u8()sim_combat.wait_for_combat = {}for i = 1,n dosim_combat.wait_for_combat[reader:r_u16()] = reader:r_stringZ()endxr_sound.actor_load(reader)local n = reader:r_stringZ()if(n~="nil") thenself.last_level_name = nendxr_statistic.load(reader)guiders.load(reader)treasure_manager.load(reader)n = reader:r_u8()for i = 1,n doto_delayed_alife_release_objects[reader:r_u16()] = trueendprintf("delayed_alife_release_objects")print_table(delayed_alife_release_objects)n = reader:r_u8()for i = 1,n dodb.script_ids[reader:r_u16()] = reader:r_stringZ()end-- minigames_manager.get_minigames_manager():load(reader)set_save_marker(reader, "load", true, "actor_binder")end------------------------------------------------------------------------------------------------------------------------старт префетча звуков--if string.find(command_line(), "-noprefetch") == nil then-- sound_prefetch.prefetch_sounds()--endfunction 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)weapon_hide[zone_id] = trueendfunction restore_weapon(zone_id)weapon_hide[zone_id] = falseendfunction add_to_delayed_release(obj_id)printf("TO_RELEASING_add OBJ:[%s]", tostring(obj_id))delayed_alife_release_objects[obj_id] = trueendfunction del_to_delayed_release(obj_id)printf("TO_RELEASING_del OBJ:[%s]", tostring(obj_id))delayed_alife_release_objects[obj_id] = nilend @ColR_iT, Укажи что я не правильно написал, я просто только учусь работать со скриптами) Поделиться этим сообщением Ссылка на сообщение
Артём_killer 12 Опубликовано 4 Июня 2013 @ColR_iT, И тебе большое спасибо) А как по этому же принципу сделать вывод радиации? Вылета нет, но медикаменты не действуют здоровье не прибавляется почему-то А еще если на базе чн используешь аптечку, то когда выходишь на болото гг не достает ничего из оружия, только детектор и все. А вообще реально медицину из зп, перенести в чн, вмести со всеми ее свойствами? Поделиться этим сообщением Ссылка на сообщение
Артём_killer 12 Опубликовано 4 Июня 2013 визуалы это не трудно, впрочем как и сами медикаменты и предметы, но мот их функциональность этого я не могу. Поделиться этим сообщением Ссылка на сообщение
Артём_killer 12 Опубликовано 4 Июня 2013 Убрал, тоже самое нечего не происходит @ColR_iT, Напиши пожалуйста свой bind_stalker.script, я уже все перепробовал, не выходит ничего, игра работает стабильно, но от аптечек нет толку действий ноль. Поделиться этим сообщением Ссылка на сообщение
Артём_killer 12 Опубликовано 4 Сентября 2014 Доброго времени суток, помогите адаптировать мод под этот файл https://yadi.sk/d/mZwLxikRayiFH Очень рад буду помощи Поделиться этим сообщением Ссылка на сообщение
Артём_killer 12 Опубликовано 6 Сентября 2014 S.T.A.L.K.E.R. - Lost Alpha, это его бинсталкер С RMA, я его совместил, а еще добавил худ рук в и HD Graphics 3 туда же всунул). Но в случае с Lost Alpha не смог понять скрипты Поделиться этим сообщением Ссылка на сообщение
Артём_killer 12 Опубликовано 12 Декабря 2016 Всем доброго, подскажите почему не идет на ЧН сее чудо, все сделал как написано, вылетов нет, но хпшка не хилится)) Поделиться этим сообщением Ссылка на сообщение