Войти на сайт Регистрация Новые сообщения Пользователи Правила сайта Поиск по форуму
Страница 24 из 30«1222232425262930»
Форум » Вселенная S.T.A.L.K.E.R. » S.T.A.L.K.E.R. » По следам Черных Ангелов. Бета-версия. (Тут обсуждаем прохождение бета-версии.)
По следам Черных Ангелов. Бета-версия.
sergej5500Дата: Вторник, 21.04.2015, 18:40 | Сообщение # 1
Полевой Исследователь
Ученые сталкеры
Сообщений: 3017
Награды: 24
Репутация: [ 1189 ]

Добрый вечер.

Выкладываю пробную версию аддона для открытого тестирования.

Аддон поделен на 2 части. Основная часть включает локации, модели, озвучку и текстуры. Дополнительная часть включает конфиги, скрипты и спавн. Для нормальной работы нужны обе части аддона.

[cut=Ссылки]Основная часть аддона

Дополнительная часть аддона[/cut]

[cut=Установка]1. Скачиваем аддон по ссылкам.
2. Распаковываем архивы.
3. Обе папки gamedata, полученные после распаковки, копируем в папку с игрой.
4. Аддон устанавливается на чистую игру.
5. Новая игра обязательна.
[/cut]

[cut=Внимание]1. Аддон устанавливаем на Зов Припяти 1.602.
2. Дополнения и надстройки для СГМ для этого аддона не подходят!
3. На основных локациях ЗП много новых квестов. На локациях Лиманск, ЧАЭС и Рыжий Лес пока нет ничего. Туда можно сходить для ознакомления. [/cut]

[cut=Выбор стартовой локации]В аддоне есть возможность выбора. Начать игру с Кордона или с Затона.

Открываем файл gamedata\configs\scripts\escape\esc_task_line. Находим строки:

;on_info2 = {+esc_game_start_saved} sr_idle@esc_way_to_zaton_sms
on_info2 = {+esc_game_start_saved} sr_idle@teleport_to_zaton

Первая строка запускает квестовую линию на Кордоне. Вторая строка телепортирует игрока на Затон.
Перед первой строкой стоит точка с запятой. То есть движок её на читает и игрок будет отправлен на Затон сразу после начала новой игры. Если вы хотите пройти квестовую линию Кордон-Болота, то нужно убрать точку с запятой у первой строки и поставить точку с запятой у второй строки. Вот так:

on_info2 = {+esc_game_start_saved} sr_idle@esc_way_to_zaton_sms
;on_info2 = {+esc_game_start_saved} sr_idle@teleport_to_zaton.

Точку с запятой нужно ставить в английской раскладке клавиатуры. Файл правим до начала новой игры.[/cut]

Данная версия аддона тестовая. Поэтому возможны разнообразные проблемы при прохождении.

Благодарности.
1. GeJorge - за прекрасный мод.
2. denis2000, makdm, FantomICW - за неоценимую помощь в создании дополнения.
3. Мирянин, greg и Glomar - за помощь в тестировании дополнения.
4. greg и Glomar - идеи по сюжету и квестам.
5. Geonezis - за учебник по квестостроению и некоторые квесты.
6. Разработчикам аддона "Время Альянса" за полезные скрипты и модели сталкеров.


[cut=Как найти лог вылета]Что такое LOG ошибки, и как мне его найти?

Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда.
Для того чтоб найти LOG необходимо зайти вот сюда:

В Win XP лог находится:

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

Если по указанным адресам вы не нашли папку с логами (ситуация встречается в "кривых" репаках), то вбейте в поисковике своего компьютера слово logs или logs*, и если эти данные имеют место быть, поисковик выдаст вам все адреса нахождения этих данных... останется выбрать только тот который необходим. [/cut]

[cut=Фикс от 12.05.15]
Ссылка
Установка:
1. Удалить из сборки папки configs, scripts и spawns.
2. Распаковать архив фикса.
3. Скопировать папки фикса в геймдату мода с заменой файлов.
4. Новая игра обязательна.

Основные изменения:
1. Торговцу военных добавлен новый квест. Награда - диск для съема денег.
2. Устранил проблемы с работодателями. Квесты теперь выполняются без сбоев.
3. Изменен баланс у торговцев и механиков.
4. Исправлены все замеченные ранее критические ошибки.
5. На Кордон и Болото добавлены сберегатели.
6. Добавлен патрон 7.62х39. Соответственно, поправлено оружие.
7. Частично заселена Свалка. Там есть обычные и СГМ-тайники, СГМ-мины. Ходят сталкеры и мутанты. Квестов пока нет.
[/cut]

[cut=Фикс от 23.05.15]

Фикс
Исправлено зависание квеста Волка.
Исправлен вылет на Болоте.
Исправлено отсутствие метки в квесте "Лечь спать".
Установка: Объединить геймдату фикса с геймдатой мода с заменой файлов.
Ставить поверх фикса от 12.05.15
[/cut]
 
veselchakДата: Четверг, 23.07.2015, 11:45 | Сообщение # 346
Хозяин Зоны
Одиночки
Сообщений: 2600
Награды: 10
Репутация: [ 2742 ]

Ну не знаю. У меня сейв который выкладывал ранее грузится. Несколько раз пробывал-как часики.
Вот ещё http://rghost.ru/6vFqQBycY
А вот мой уже правленный [cut=бинд_сталкер]function init(obj)
xr_motivator.AddToMotivator(obj)
end
function actor_init(npc)
npc:bind_object(actor_binder(npc))
end
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.last_level_name = nil
self.deimos_intensity = nil
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)
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()
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()
if rx_ai then
rx_ai.actor_net_spawn()
end
sgm_callbacks.on_game_load()
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:take_item_from_box(box, item)
local box_name = box:name()
sgm_callbacks.on_take_item_from_box(box,item)
end
------------------------------------>
function actor_binder:info_callback(npc, info_id)
printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id)
sgm_callbacks.on_enterring_info(npc,info_id)
end
------------------------------------>
function actor_binder:on_trade(item,sell_bye,money)
if sell_bye == true then
sgm_callbacks.on_trade(item,money,1)
game_stats.money_trade_update(money)
else
sgm_callbacks.on_trade(item,money,2)
game_stats.money_trade_update(-money)
end
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())
end
treasure_manager.get_treasure_manager():on_item_take(obj:id())
sgm_callbacks.on_item_take(obj)
if rx_ai then
rx_ai.actor_item_take(obj)
end
end
------------------------------------>
function actor_binder:on_item_drop (obj)
sgm_callbacks.on_item_drop(obj)
end
------------------------------------>
function actor_binder:use_inventory_item(obj)
if(obj) then
local item_name=obj:section()
local s_obj = alife():object(obj:id())
if (s_obj) and (s_obj:section_name()=="drug_anabiotic") then
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)
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")
end
sgm_callbacks.on_use_item(obj)
if find_in_string(item_name,"dv_") and find_in_string(item_name,"_case") then
sgm_callbacks.on_use_deserve(obj)
end
if find_in_string(item_name,"skill_book") then
sgm_callbacks.on_use_skill_book(obj)
end
if find_in_string(item_name,"sleeping_bag") then
sgm_callbacks.on_use_sleeping_bag(obj)
end
end
end
------------------------------------>
function anabiotic_callback()
sgm_flags.is_ui_disabled=true
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
sgm_callbacks.on_forward_game_time(0,rnd)
level.change_game_time(0,0,rnd)
level_weathers.get_weather_manager():forced_weather_change()
end
------------------------------------>
function anabiotic_callback2()
sgm_flags.is_ui_disabled=false
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")
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)
-- апдейт погоды
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.bCheckStart then
printf("SET DEFAULT INFOS")
if dont_has_alife_info("global_dialogs") then
self.object:give_info_portion("global_dialogs")
end
if dont_has_alife_info("level_changer_icons") then
self.object:give_info_portion("level_changer_icons")
end
self.bCheckStart = false
end
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()
-- загрузка мода(постоянное обновление)
if mod_update() then
sgm_loader.sigerous_mod_main()
end
if rx_ai then rx_ai.actor_update() end
end
------------------------------------>
function actor_binder:save(packet)
set_save_marker(packet, "save", false, "actor_binder")
if rx_ai then rx_ai.actor_save(packet) end
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)
sgm_loader.save(packet)
sr_psy_antenna.save( packet )
packet:w_bool(sim_board.get_sim_board().simulation_started)
sim_board.save(packet)
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_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()
if game_difficulty~=nil and game_difficulty>=0 and game_difficulty<=3 then
get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty])
else
mod_abort("Ваше сохранение битое. Попробуйте загрузится c раннего сохранения.")
get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty])
end
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:load(reader)
sgm_loader.load(reader)
self.f_surge_manager_loaded = true
sr_psy_antenna.load(reader)
sim_board.get_sim_board().simulation_started = reader:r_bool()
sim_board.load(reader)
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.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 dont_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")
sgm_dialogs.bankir_deposit_add_2000()
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 dont_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")
sgm_dialogs.bankir_deposit_add_3000()
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] Посмотри всё ли сделал как нужно


MSI LGA1151, i5 4460, GTX 1060, RAM 16Gb, HDD 1.5Tb, SSD 120Gb

Сообщение отредактировал veselchak - Четверг, 23.07.2015, 11:53
 
makdmДата: Четверг, 23.07.2015, 13:04 | Сообщение # 347
Рожденный в СССР
Разработчики
Сообщений: 1268
Награды: 26
Репутация: [ 1858 ]

Цитата veselchak ()
У меня сейв который выкладывал ранее грузится.

У меня тоже загрузился. И всё шло нормально.
После того как сохранился\загрузился получил такой же вылет как у тебя.

Т.е. у тебя игра идёт сначала нормально, а в какой-то момент начинает появляться такой вылет?
Я правильно понял?

Пока единственное объяснение вижу в том, что у тебя на календаре 29 июля. Т.е в зоне ты уже 29 дней.
Возможно где-то в движке переполняется счётчик - отсюда глюки.

Попробуй загрузиться с более ранней сохранки. Например где ты в зоне дней 20.
Сохранись\загрузись. Всё нормально? Уложи ГГ спать сутки. Затем снова сохранись\загрузись.
И т.д.
Если моя гипотеза верна, то в какой-то день( 26, или 27 или 28 или 29) у тебя начнётся вылет на "ровном месте".


Терпение......
И все получится!
 
veselchakДата: Четверг, 23.07.2015, 14:54 | Сообщение # 348
Хозяин Зоны
Одиночки
Сообщений: 2600
Награды: 10
Репутация: [ 2742 ]

Цитата makdm ()
Я правильно понял?
Точно. Сейв грузится, игра идёт без тормозов, но стоит сохраниться и выйти по делам то игра не грузится. И даже если ты прав, то что мне делать? Я не люблю галопом по европам, у меня обратно будет больше месяца прохождение.


MSI LGA1151, i5 4460, GTX 1060, RAM 16Gb, HDD 1.5Tb, SSD 120Gb
 
makdmДата: Четверг, 23.07.2015, 15:14 | Сообщение # 349
Рожденный в СССР
Разработчики
Сообщений: 1268
Награды: 26
Репутация: [ 1858 ]

Цитата veselchak ()
Я не люблю галопом по европам, у меня обратно будет больше месяца прохождение.

Если моя гипотеза верна и вылет обусловлен переполнением какого счётчика в движке, то без правок движка эту проблему не решить. Старайся всё делать дней за 20. Просто разрабы Сталкера не предвидели такую ситуацию, что ты будешь месяц бродить по локациям.


Терпение......
И все получится!
 
sergej5500Дата: Четверг, 23.07.2015, 16:17 | Сообщение # 350
Полевой Исследователь
Ученые сталкеры
Сообщений: 3017
Награды: 24
Репутация: [ 1189 ]

Добрый день.

Цитата makdm ()
Старайся всё делать дней за 20. Просто разрабы Сталкера не предвидели такую ситуацию, что ты будешь месяц бродить по локациям.


Думаю, что причина не в этом. В ЗП используется 32 битный таймер. Всего 2 в 32 степени миллисекунд. Или 4 миллиона секунд (примерно). В сутках 86400 секунд. Проблемы наступают на 50-е сутки. Всем известно зависание квестов Монолита. Но к вылетам это не приводило. На форумах давно видел сообщение одного игрока. У него в игре вообще наступил февраль.

veselchak,

bind_stalker у Вас странный. Функция записи данных должна выглядеть так.

[cut=actor_binder:save(packet)]function actor_binder:save(packet)
set_save_marker(packet, "save", false, "actor_binder")
----------------------------------------------------------------------makdm_start
if self.store_obj_id ~= nil then
alife():release( alife():object( self.store_obj_id ), true )
end
local s_obj = alife():create( "fake_store_obj", vector(), 0, 0 )
self.store_obj_id = s_obj.id
-------перенесено в стор - объект
-- release_body_manager.get_release_body_manager():save(packet)
-- sgm_loader.save(packet)
-- sr_psy_antenna.save( packet )
-- sim_board.save(packet)
-- xr_sound.actor_save(packet)
-- xr_statistic.save(packet)
-- packet:w_bool(sim_board.get_sim_board().simulation_started)
-- task_manager.get_task_manager():save(packet)
------------------------------------------------------------------------makdm_end
if rx_ai then rx_ai.actor_save(packet) end
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)
self.surge_manager:save(packet)
packet:w_stringZ(tostring(self.last_level_name))
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
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

[/cut]

Вы выложили нужный файл? В папке 2 файла. bind_stalker и bind_stalker_1. Файл с цифрой 1 нерабочий. Сохранен на всякий случай. Это старая версия файла.
 
veselchakДата: Четверг, 23.07.2015, 16:31 | Сообщение # 351
Хозяин Зоны
Одиночки
Сообщений: 2600
Награды: 10
Репутация: [ 2742 ]

На календаре 2 августа все сейвы нормальные http://rghost.ru/6dDmxB2Yz
У меня проблемы начались после Припяти, вернее Х8. До лаборатории сейвы в Припяти целые.[cut=bind_stalker]function init(obj)
xr_motivator.AddToMotivator(obj)
end
function actor_init(npc)
npc:bind_object(actor_binder(npc))
end
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.last_level_name = nil
self.deimos_intensity = nil
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
-----------------------------------------makdm_start
self.store_obj_id = nil
-------------------------------------------makdm_end
end
------------------------------------>
function actor_binder:net_spawn(data)
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()
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()
if rx_ai then
rx_ai.actor_net_spawn()
end
sgm_callbacks.on_game_load()
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:take_item_from_box(box, item)
local box_name = box:name()
sgm_callbacks.on_take_item_from_box(box,item)
end
------------------------------------>
function actor_binder:info_callback(npc, info_id)
printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id)
sgm_callbacks.on_enterring_info(npc,info_id)
end
------------------------------------>
function actor_binder:on_trade(item,sell_bye,money)
if sell_bye == true then
sgm_callbacks.on_trade(item,money,1)
game_stats.money_trade_update(money)
else
sgm_callbacks.on_trade(item,money,2)
game_stats.money_trade_update(-money)
end
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())
end
treasure_manager.get_treasure_manager():on_item_take(obj:id())
sgm_callbacks.on_item_take(obj)
if rx_ai then
rx_ai.actor_item_take(obj)
end
end
------------------------------------>
function actor_binder:on_item_drop (obj)
sgm_callbacks.on_item_drop(obj)
end
------------------------------------>
function actor_binder:use_inventory_item(obj)
if(obj) then
local item_name=obj:section()
local s_obj = alife():object(obj:id())
if (s_obj) and (s_obj:section_name()=="drug_anabiotic") then
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)
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")
end
sgm_callbacks.on_use_item(obj)
if find_in_string(item_name,"dv_") and find_in_string(item_name,"_case") then
sgm_callbacks.on_use_deserve(obj)
end
if find_in_string(item_name,"skill_book") then
sgm_callbacks.on_use_skill_book(obj)
end
if find_in_string(item_name,"sleeping_bag") then
sgm_callbacks.on_use_sleeping_bag(obj)
end
end
end
------------------------------------>
function anabiotic_callback()
sgm_flags.is_ui_disabled=true
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
sgm_callbacks.on_forward_game_time(0,rnd)
level.change_game_time(0,0,rnd)
level_weathers.get_weather_manager():forced_weather_change()
end
------------------------------------>
function anabiotic_callback2()
sgm_flags.is_ui_disabled=false
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")
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)
local news_caption = game.translate_string( "st_tip" )
local texture = "ui_iconsTotal_grouping"
local news_text = ""
if _G["ui_mod_elements"] then
news_text = ""
else
news_text = "Модуль ui_mod_elements отключён"
xr_sound.set_sound_play( db.actor:id(), "pda_tips" )
db.actor:give_game_news( news_caption, news_text, texture, 0, 5000, 0 )
end

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)
-- апдейт погоды
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.bCheckStart then
printf("SET DEFAULT INFOS")
if dont_has_alife_info("global_dialogs") then
self.object:give_info_portion("global_dialogs")
end
if dont_has_alife_info("level_changer_icons") then
self.object:give_info_portion("level_changer_icons")
end
self.bCheckStart = false
end
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()
-- загрузка мода(постоянное обновление)
if mod_update() then
sgm_loader.sigerous_mod_main()
end
if rx_ai then rx_ai.actor_update() end
end
------------------------------------>
function actor_binder:save(packet)
set_save_marker(packet, "save", false, "actor_binder")
----------------------------------------------------------------------makdm_start
if self.store_obj_id ~= nil then
alife():release( alife():object( self.store_obj_id ), true )
end
local s_obj = alife():create( "fake_store_obj", vector(), 0, 0 )
self.store_obj_id = s_obj.id
-------перенесено в стор - объект
-- release_body_manager.get_release_body_manager():save(packet)
-- sgm_loader.save(packet)
-- sr_psy_antenna.save( packet )
-- sim_board.save(packet)
-- xr_sound.actor_save(packet)
-- xr_statistic.save(packet)
-- packet:w_bool(sim_board.get_sim_board().simulation_started)
-- task_manager.get_task_manager():save(packet)
------------------------------------------------------------------------makdm_end
if rx_ai then rx_ai.actor_save(packet) end
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)
self.surge_manager:save(packet)
packet:w_stringZ(tostring(self.last_level_name))
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
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")
----------------------------------------------------------------------makdm_start
---перенесено в стор - объект
-- release_body_manager.get_release_body_manager():load(reader)
-- sgm_loader.load(reader)
-- sr_psy_antenna.load(reader)
-- sim_board.load(reader)
-- xr_sound.actor_load(reader)
-- xr_statistic.load(reader)
-- sim_board.get_sim_board().simulation_started = reader:r_bool()
-- task_manager.get_task_manager():load(reader)
------------------------------------------------------------------------makdm_end
object_binder.load(self, reader)
local game_difficulty = reader:r_u8()
if game_difficulty~=nil and game_difficulty>=0 and game_difficulty<=3 then
get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty])
else
mod_abort("Ваше сохранение битое. Попробуйте загрузится c раннего сохранения.")
get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty])
end
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)
self.surge_manager:load(reader)
self.f_surge_manager_loaded = true
local n = reader:r_stringZ()
if(n~="nil") then
self.last_level_name = n
end
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
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 dont_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")
sgm_dialogs.bankir_deposit_add_2000()
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 dont_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")
sgm_dialogs.bankir_deposit_add_3000()
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]


MSI LGA1151, i5 4460, GTX 1060, RAM 16Gb, HDD 1.5Tb, SSD 120Gb

Сообщение отредактировал veselchak - Четверг, 23.07.2015, 16:38
 
sergej5500Дата: Четверг, 23.07.2015, 16:52 | Сообщение # 352
Полевой Исследователь
Ученые сталкеры
Сообщений: 3017
Награды: 24
Репутация: [ 1189 ]

veselchak,

Попробуй в bind_stalker строки

if mod_update() then
sgm_loader.sigerous_mod_main()
end

заменить на

sgm_loader.sigerous_mod_main()
 
veselchakДата: Четверг, 23.07.2015, 17:04 | Сообщение # 353
Хозяин Зоны
Одиночки
Сообщений: 2600
Награды: 10
Репутация: [ 2742 ]

sergej5500, Если не трудно исправь мой бинд-сталкер что я выложил выше постом.


MSI LGA1151, i5 4460, GTX 1060, RAM 16Gb, HDD 1.5Tb, SSD 120Gb
 
sergej5500Дата: Четверг, 23.07.2015, 17:11 | Сообщение # 354
Полевой Исследователь
Ученые сталкеры
Сообщений: 3017
Награды: 24
Репутация: [ 1189 ]

veselchak,

[cut=bind_stalker]function init(obj)
xr_motivator.AddToMotivator(obj)
end
function actor_init(npc)
npc:bind_object(actor_binder(npc))
end
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.last_level_name = nil
self.deimos_intensity = nil
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
-----------------------------------------makdm_start
self.store_obj_id = nil
-------------------------------------------makdm_end
end
------------------------------------>
function actor_binder:net_spawn(data)
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()
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()
if rx_ai then
rx_ai.actor_net_spawn()
end
sgm_callbacks.on_game_load()
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:take_item_from_box(box, item)
local box_name = box:name()
sgm_callbacks.on_take_item_from_box(box,item)
end
------------------------------------>
function actor_binder:info_callback(npc, info_id)
printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id)
sgm_callbacks.on_enterring_info(npc,info_id)
end
------------------------------------>
function actor_binder:on_trade(item,sell_bye,money)
if sell_bye == true then
sgm_callbacks.on_trade(item,money,1)
game_stats.money_trade_update(money)
else
sgm_callbacks.on_trade(item,money,2)
game_stats.money_trade_update(-money)
end
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())
end
treasure_manager.get_treasure_manager():on_item_take(obj:id())
sgm_callbacks.on_item_take(obj)
if rx_ai then
rx_ai.actor_item_take(obj)
end
end
------------------------------------>
function actor_binder:on_item_drop (obj)
sgm_callbacks.on_item_drop(obj)
end
------------------------------------>
function actor_binder:use_inventory_item(obj)
if(obj) then
local item_name=obj:section()
local s_obj = alife():object(obj:id())
if (s_obj) and (s_obj:section_name()=="drug_anabiotic") then
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)
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")
end
sgm_callbacks.on_use_item(obj)
if find_in_string(item_name,"dv_") and find_in_string(item_name,"_case") then
sgm_callbacks.on_use_deserve(obj)
end
if find_in_string(item_name,"skill_book") then
sgm_callbacks.on_use_skill_book(obj)
end
if find_in_string(item_name,"sleeping_bag") then
sgm_callbacks.on_use_sleeping_bag(obj)
end
end
end
------------------------------------>
function anabiotic_callback()
sgm_flags.is_ui_disabled=true
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
sgm_callbacks.on_forward_game_time(0,rnd)
level.change_game_time(0,0,rnd)
level_weathers.get_weather_manager():forced_weather_change()
end
------------------------------------>
function anabiotic_callback2()
sgm_flags.is_ui_disabled=false
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")
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)
local news_caption = game.translate_string( "st_tip" )
local texture = "ui_iconsTotal_grouping"
local news_text = ""
if _G["ui_mod_elements"] then
news_text = ""
else
news_text = "Модуль ui_mod_elements отключён"
xr_sound.set_sound_play( db.actor:id(), "pda_tips" )
db.actor:give_game_news( news_caption, news_text, texture, 0, 5000, 0 )
end

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)
-- апдейт погоды
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.bCheckStart then
printf("SET DEFAULT INFOS")
if dont_has_alife_info("global_dialogs") then
self.object:give_info_portion("global_dialogs")
end
if dont_has_alife_info("level_changer_icons") then
self.object:give_info_portion("level_changer_icons")
end
self.bCheckStart = false
end
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()
-- загрузка мода(постоянное обновление)
sgm_loader.sigerous_mod_main()
if rx_ai then rx_ai.actor_update() end
end
------------------------------------>
function actor_binder:save(packet)
set_save_marker(packet, "save", false, "actor_binder")
----------------------------------------------------------------------makdm_start
if self.store_obj_id ~= nil then
alife():release( alife():object( self.store_obj_id ), true )
end
local s_obj = alife():create( "fake_store_obj", vector(), 0, 0 )
self.store_obj_id = s_obj.id
-------перенесено в стор - объект
-- release_body_manager.get_release_body_manager():save(packet)
-- sgm_loader.save(packet)
-- sr_psy_antenna.save( packet )
-- sim_board.save(packet)
-- xr_sound.actor_save(packet)
-- xr_statistic.save(packet)
-- packet:w_bool(sim_board.get_sim_board().simulation_started)
-- task_manager.get_task_manager():save(packet)
------------------------------------------------------------------------makdm_end
if rx_ai then rx_ai.actor_save(packet) end
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)
self.surge_manager:save(packet)
packet:w_stringZ(tostring(self.last_level_name))
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
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")
----------------------------------------------------------------------makdm_start
---перенесено в стор - объект
-- release_body_manager.get_release_body_manager():load(reader)
-- sgm_loader.load(reader)
-- sr_psy_antenna.load(reader)
-- sim_board.load(reader)
-- xr_sound.actor_load(reader)
-- xr_statistic.load(reader)
-- sim_board.get_sim_board().simulation_started = reader:r_bool()
-- task_manager.get_task_manager():load(reader)
------------------------------------------------------------------------makdm_end
object_binder.load(self, reader)
local game_difficulty = reader:r_u8()
if game_difficulty~=nil and game_difficulty>=0 and game_difficulty<=3 then
get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty])
else
mod_abort("Ваше сохранение битое. Попробуйте загрузится c раннего сохранения.")
get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty])
end
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)
self.surge_manager:load(reader)
self.f_surge_manager_loaded = true
local n = reader:r_stringZ()
if(n~="nil") then
self.last_level_name = n
end
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
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 dont_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")
sgm_dialogs.bankir_deposit_add_2000()
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 dont_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")
sgm_dialogs.bankir_deposit_add_3000()
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]
 
makdmДата: Пятница, 24.07.2015, 12:53 | Сообщение # 355
Рожденный в СССР
Разработчики
Сообщений: 1268
Награды: 26
Репутация: [ 1858 ]

veselchak, sergej5500, решил я эту проблему с вылетом. Позже выложу фикс.
Новую Игру начинать НЕ нужно.

Добавлено (24.07.2015, 12:53)
---------------------------------------------
Вот фикс. Ставим - можно продолжать тестировать.

http://rghost.ru/7p72cKl5M



Терпение......
И все получится!
 
Дядька_ЯрДата: Суббота, 25.07.2015, 12:57 | Сообщение # 356
Инженер «Свободы»
Свобода
Сообщений: 28
Награды: 1
Репутация: [ 0 ]

Здравствуйте. Хотел спросить, со Свалки реально выбратся?
 
veselchakДата: Воскресенье, 26.07.2015, 04:58 | Сообщение # 357
Хозяин Зоны
Одиночки
Сообщений: 2600
Награды: 10
Репутация: [ 2742 ]

Дядька_Яр, Не. Я тоже застрял там. Пришлось переигрывать со старого сейва.
А у меня неожиданность. Впервые , сколько играю, спустился в Путепровод! И там почемуто Зулус и Ко Правда сам квест скучный и не интересный. Получилась резня барашков. Встал в проходе с ПКМом Зулуса и выстрелил. А потом просто косил вбегающих цепочкой монолитовцев. В оригинале СГМ снайперы своих позиций не покидали и приходится повоевать чтобы пробиться к Мельнику.
p.s. А Мельника я вытащил.
Вопросы по квесту гон на Юпитере. Можно ли место около зила сделать недоступным для гопников на это время? Я 4(четыре) раза переигрывал его из-за них, так как квест проваливался потомучто вместе с ними прибивал и помощников, или их (помощников) затаптывали зверюшки. Самое обидное когда в конце третьей волны пришлось заново начинать. Я думал что клаву разобью.

Добавлено (26.07.2015, 04:58)
---------------------------------------------
Так. Вроде закончил игру. Из активных квестов остался собрать носители информации. Отсюда вопрос. Их искать только на Затоне и Янове?



MSI LGA1151, i5 4460, GTX 1060, RAM 16Gb, HDD 1.5Tb, SSD 120Gb

Сообщение отредактировал veselchak - Воскресенье, 26.07.2015, 03:04
 
sergej5500Дата: Воскресенье, 26.07.2015, 09:13 | Сообщение # 358
Полевой Исследователь
Ученые сталкеры
Сообщений: 3017
Награды: 24
Репутация: [ 1189 ]

Цитата veselchak ()
Их искать только на Затоне и Янове?


И на Припяти.
 
veselchakДата: Понедельник, 27.07.2015, 11:00 | Сообщение # 359
Хозяин Зоны
Одиночки
Сообщений: 2600
Награды: 10
Репутация: [ 2742 ]

А в Припяти ключ только у Киборга?


MSI LGA1151, i5 4460, GTX 1060, RAM 16Gb, HDD 1.5Tb, SSD 120Gb
 
sergej5500Дата: Понедельник, 27.07.2015, 11:15 | Сообщение # 360
Полевой Исследователь
Ученые сталкеры
Сообщений: 3017
Награды: 24
Репутация: [ 1189 ]

Цитата veselchak ()
А в Припяти ключ только у Киборга?


Да. Ключ от второго сейфа должен дать Герман с Юпитера.
 
Форум » Вселенная S.T.A.L.K.E.R. » S.T.A.L.K.E.R. » По следам Черных Ангелов. Бета-версия. (Тут обсуждаем прохождение бета-версии.)
Страница 24 из 30«1222232425262930»
Поиск: