1. Вопрос должен соответствовать выбранной Вами темы. 2. Изучите то, что уже есть в теме (воспользуйтесь поиском на форуме). 3. Указывайте необходимую информацию: чистая игра ТЧ или с установленным модом (указать какой). 4. Для того, чтобы было понятно в чем ошибка, приводите коды (оформленные соответствующем образом). 5. Вопросы по SDK задаем в этой теме.
Награды: 36
Регистрация: 08.11.2012
Город: Красноярск
strelok098, 1) f1_explode.ogg, f1_explode_.ogg, f1_explode2.ogg и rgd5_explode.ogg. 2) Для замены воспользуйся Sony Forge. Там и конвентер есть. Конвентируешь mp3 в ogg, открываешь оригиналы и вставляешь свои звуки. Сохраняешь и...Have Fun!
И даже после всего прочего - мы все равно остаемся здесь.
Репутация: 167
Регистрация: 01.04.2013
Город: Москва
Dmitriy_Nekratov, звуки оружия вставлять без обработки в СДК? А ты однако оригинал... strelok098, значит ты не те звуки менял. Для порядка посмотри в конфиге ствола что написано. Если ты правишь в моде, то могут быть большие сюрпризы с путями к звуку. И еще раз повторю. Не прогоняете через СДК, нечего и менять звуки. Хорошего из этого ничего не получится.
Зы...Я точно не помню, как грузятся звуки оружия. С амбиентом точно бывают проблемы, так как старый звук запоминается в сейве и читается из оперативки. Вполне может быть, что и с оружейными звуками может быть такая проблема.
Сообщение отредактировал Змея - Суббота, 30.11.2013, 17:48:09
Награды: 36
Регистрация: 08.11.2012
Город: Красноярск
Змея, всегда так делал и ничего... Ну да ладно. Я тут опять квест замутил. Все вроде правильно сделал, после диалога с Сидором должно выдаваться задание. На практике же - ничего не выдается, но и вылета нет. Все проверил - вроде как в учебнике...Нужна помощь.
<string id="escape_trader_artefact_0"> <text>Эй, Меченый, ты меня слушаешь?</text> </string> <string id="escape_trader_artefact_1"> <text>Ух..голова болит...Ты кто?</text> </string> <string id="escape_trader_artefact_2"> <text>Я - Сидорович, спаситель твой. Да, потратился я на тебя неслабо...много денег...</text> </string> <string id="escape_trader_artefact_3"> <text>Так может, я долг заглажу там...</text> </string> <string id="escape_trader_artefact_4"> <text>Вот, деловой разговор пошел. Значит так. Тут рядом поле аномалий "Мясорубка". Там артефакт находится. Новички за ним лезть боятся. А по тебе видно - далеко не зеленый...Вообщем, достань этот артефакт мне. А потом и дальше разговор пойдет...</text> </string> <string id="escape_trader_artefact_5"> <text>Ну ладно, пойду поищу...</text> </string>
<string id="escape_trader_artefact_ok_0"> <text>Ну, как успехи? Нашел артефакт?</text> </string> <string id="escape_trader_artefact_ok_1"> <text>Вот, принес что-то...Светится как-то странно..</text> </string> <string id="escape_trader_artefact_ok_2"> <text>Не лапай, дай сюда! "Медуза" радиоактивна, нехватало еще на тебя антирад переводить!</text> </string> <string id="escape_trader_artefact_ok_3"> <text>Ну принес я, и что дальше?</text> </string> <string id="escape_trader_artefact_ok_4"> <text>Так...держи двести...нет, сто тугриков - и пока свободен. Пойди, осмотрись, как чувством долга проникнешься - приходи.</text> </string> <string id="escape_trader_artefact_ok_5"> <text>Хорошо.</text> </string>
Репутация: 167
Регистрация: 01.04.2013
Город: Москва
ЦитатаDmitriy_Nekratov ()
всегда так делал и ничего...
Ну это в первую очередь говорит о качестве твоих модов. 1. Краснота в консоли от непрогнанных звуков. Чем ее больше, тем больше вероятность внезапных вылетов. 2. Звук выстрела звучит одинаково громко на любом расстоянии. Очень реалистично. А самое прикольное, когда у тебя над ухом заряжает помповик непись, до которого сто-двести метров.метров. Достал уже этот кровосос в окне ответа! 3. Неписи никак не реагируют на выстрелы и другие оружейные звуки, хотя у них это прописано в дефолтной логике. Это по СДК. До кучи хочу сказать, что исходники звука надо подгонять к анимациям, чтобы не было косяков с опережением или отставанием звука от движений ГГ при перезарядке и прочее...
Сообщение отредактировал Змея - Воскресенье, 01.12.2013, 14:54:34
А ты внимательно проверь ссылку на задание при регистрации поршней и на это задание в "таске". Тоже самое при отдаче арта торговцу, у тебя разные поршни - в диалоге одно, а при регистрации другое.
Не столь важно что ты делаешь, важно как ты это делаешь! (Джимми Лансфорд)
comador, извини за назойливость... если тебе не будет трудно... посмотри ещё разок. Я выкладываю оригинальный блок из АМК и тот который ты предложил попробовать (я скопировал его из спойлера и вставил в свой amk_mod)... вылетает с тем же логом.
Змея, ты не сердись... профи модерами так и становятся - сначала копируют у более опытных... а когда приходит время - помогают "салабонам" (коим я себя считаю). А вообще замечание дельное - стимулирует!!!
Dmitriy_Nekratov, нужно править логику в лагере. За это отвечает файл gulag_escape.ltx.
Цитатаsal777 ()
оригинальный блок из АМК
В оригинальном файле в amk_mod.script есть функция first_run, а у тебя ее нет. В твоем amk.script (тот, что ты показывал) есть вызов этой функции. Поэтому игра и вылетает.
Не столь важно что ты делаешь, важно как ты это делаешь! (Джимми Лансфорд)
comador, нет - нет... эта функция есть в моём amk_mod - при первом запуске мода, она(функция), реалезует задачи связанные со сном ГГ и наличием у ГГ спальника... вот:
--первый запуск мода function first_run() amk.g_start_timer("gg_need_sleep",0,0,6) amk.spawn_item_in_inv("matras") end
А вырезки блоков я сделал для того, что бы тебе было легче увидеть все ли твои советы, относительно худов противогазов, я выполнил правильно. То есть прицепленные файлы не есть самодостаточные и завершенные скрипты... ...Или ты имеешь в виду что и на худы должен быть такой же вызов, тогда как это должно выглядеть?!
Только Зона способна в полной мере показать "Тебе" - каков "Ты" есть,... на самом деле!!!
Награды: 36
Регистрация: 08.11.2012
Город: Красноярск
Однако, появились проблемы с заданием. Квест на убийство НПС выдается, но при убийстве того НПС ничего не происходит и задание стоит. А также не работает скрипт передачи предметов от квестодателя к ГГ.
Код
<specific_character id="esc_yagluch" team_default = "1"> <name>Яглыч</name> <icon>ui_npc_u_stalker_neytral_balon_1</icon> <bio>Сталкер - одиночка. Держит под своим контролем лагерь новичков.</bio>
sal777, у тебя вылет при старте игры. Поэтому нужно искать причину почему это происходит. Давай по порядку: 1. у тебя стоит чистая игра 2. ты добавил скрипты амк (amk_mod.script и amk.script) 3. что еще? Если больше ничего - скинь эти свои два файла (полные, без вырезок).
Dmitriy_Nekratov, а где выдается поршень esc_kill_shustryi_have? В функции отдачи (volk_ammo) отсутствует end.
Не столь важно что ты делаешь, важно как ты это делаешь! (Джимми Лансфорд)
Награды: 36
Регистрация: 08.11.2012
Город: Красноярск
Да, уж...Как не заметил.. Не хочу показаться назойливым, но у меня опять ошибка, хотя теперь я ТОЧНО все сделал по инструкции
Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:237: attempt to index global 'dynamic_news' (a nil value)
Код
function init (obj) xr_motivator.AddToMotivator(obj) end
function actor_init (npc) npc:bind_object(actor_binder(npc)) end
return true end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:net_destroy() if(actor_stats.remove_from_ranking~=nil)then actor_stats.remove_from_ranking(self.object:id()) end -- game_stats.shutdown () db.del_actor(self.object)
if sr_psy_antenna.psy_antenna then sr_psy_antenna.psy_antenna:destroy() sr_psy_antenna.psy_antenna = false end
xr_sound.stop_all_sound_object()
object_binder.net_destroy(self) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:reinit() object_binder.reinit(self)
local npc_id = self.object:id()
db.storage[npc_id] = { }
self.st = db.storage[npc_id] self.st.pstor = nil
self.next_restrictors_update_time = -10000
self.object:set_callback(callback.inventory_info, self.info_callback, self) self.object:set_callback(callback.article_info, self.article_callback, self) self.object:set_callback(callback.on_item_take, self.on_item_take, self) self.object:set_callback(callback.on_item_drop, self.on_item_drop, self) self.object:set_callback(callback.trade_sell_buy_item, self.on_trade, self) -- for game stats --self.object:set_callback(callback.actor_sleep, self.sleep_callback, self) self.object:set_callback(callback.task_state, self.task_callback, self) --self.object:set_callback(callback.map_location_added, self.map_location_added_callback, self) self.object:set_callback(callback.level_border_enter, self.level_border_enter, self) self.object:set_callback(callback.level_border_exit, self.level_border_exit, self) self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:take_item_from_box(box, item) local story_id = box:story_id() if story_id == nil then return end
treasure_manager.take_item_from_box(box, story_id) --[[ local respawner = se_respawn.get_respawner_by_parent(story_id) if respawner == nil then return end
--' Необходимо уменьшить счетчик в респавнере respawner:remove_spawned(item:id())
local smart_terrain = db.strn_by_respawn[respawner:name()] if smart_terrain == nil then return end
local npc = smart_terrain.gulag:get_nearest_online_obj(db.actor:position()) if npc ~= nil then xr_sound.set_sound_play(npc, "reac_box") xr_gulag.setGulagEnemy(smart_terrain:name() , db.actor) end ]] end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:level_border_enter(npc, info_id) self.actor_detector:actor_enter() end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:level_border_exit(npc, info_id) self.actor_detector:actor_exit() end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:info_callback(npc, info_id) printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id) --' Сюжет level_tasks.proceed(self.object) -- Отметки на карте level_tasks.process_info_portion(info_id) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:on_trade (item, sell_bye, money) if sell_bye == true then game_stats.money_trade_update (money) else game_stats.money_trade_update (-money) end end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:article_callback(npc, group, name) --printf("article_callback [%s][%s]", group, name) if device().precache_frame >1 then return end
if group == "Diary" then news_manager.send_encyclopedy("diary", group) else news_manager.send_encyclopedy("encyclopedy", group) end end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:on_item_take (obj) level_tasks.proceed(self.object) --game_stats.update_take_item (obj, self.object) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:on_item_drop (obj) level_tasks.proceed(self.object) --game_stats.update_drop_item (obj, self.object) end ----------------------------------------------------------------------------------------------------------------------
function actor_binder:task_callback(_task, _objective, _state) task_manager.task_callback(_task:get_id(), _objective:get_idx(), _state) if _objective:get_idx() == 0 then if _state == task.fail then news_manager.send_task(db.actor, "fail", _task, _objective) elseif _state == task.completed then task_manager.reward_by_task(_task) news_manager.send_task(db.actor, "complete", _task, _objective) else news_manager.send_task(db.actor, "new", _task, _objective) end else if _task:get_objective(0):get_state() == task.in_progress then news_manager.send_task(db.actor, "update", _task, _objective) end end end
---------------------------------------------------------------------------------------------------------------------- function actor_binder:map_location_added_callback(spot_type_str, object_id) if (false==app_ready()) or (device().precache_frame>1) then return end --'news_manager.send_task(db.actor, "new") end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:update(delta) object_binder.update(self, delta)
--' Проверка потери жизни --[[ if self.object.health - lasthealth > 0.001 or self.object.health - lasthealth < -0.001 then printf("%f | %f", self.object.health, self.object.health - lasthealth, game.time() - lasttime) lasthealth = self.object.health lasttime = game.time() end ]] -- Обновление отключения ввода с клавиатуры. if self.st.disable_input_time ~= nil and game.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idle then level.enable_input() self.st.disable_input_time = nil end -- Обновление сна с переносом чувака в указанную позицию if self.st.sleep_relocate_time ~= nil and game.get_game_time():diffSec(self.st.sleep_relocate_time) >= self.st.sleep_relocate_idle then self.object:set_actor_position(self.st.sleep_relocate_point) local dir = self.st.sleep_relocate_point:sub(self.st.sleep_relocate_look) self.object:set_actor_direction(dir:getH()) self.st.sleep_relocate_time = nil end
-- Апдейт прятание оружия игрока во время диалога if weapon_hide == true or self.object:is_talking() then if self.weapon_hide == false then self.object:hide_weapon() self.weapon_hide = true end else if self.weapon_hide == true then self.object:restore_weapon() self.weapon_hide = false end end
-- обновление рестрикторов, которые под логикой, срабатывает через интервалы времени if self.next_restrictors_update_time < time then bind_restrictor.actor_update(delta)
self.next_restrictors_update_time = time + 200
task_manager.actor_update() end
-- обновление постпроцессов if post_process ~= 0 then if post_process:update () == true then post_process = 0 end end
-- обновление пси-антенны if sr_psy_antenna.psy_antenna then sr_psy_antenna.psy_antenna:update(delta) end
--' Вывод сообщения о большой радиации if self.object.radiation >= 0.7 then local hud = get_hud() local custom_static = hud:GetCustomStatic("cs_radiation_danger") if custom_static == nil then hud:AddCustomStatic("cs_radiation_danger", true) hud:GetCustomStatic("cs_radiation_danger"):wnd():SetTextST("st_radiation_danger") end else local hud = get_hud() local custom_static = hud:GetCustomStatic("cs_radiation_danger") if custom_static ~= nil then hud:RemoveCustomStatic("cs_radiation_danger") end end
if self.bCheckStart then printf("SET DEFAULT INFOS")
if not has_alife_info("storyline_actor_start") and (level.name() == "l01_escape") then self.object:give_info_portion("storyline_actor_start") _G.g_start_avi = true printf("*AVI* RUN START AVI") end
-- if not has_alife_info("encyclopedy") then -- self.object:give_info_portion("encyclopedy") -- end
if not has_alife_info("global_dialogs") then self.object:give_info_portion("global_dialogs") end
if not has_alife_info("level_changer_icons") then self.object:give_info_portion("level_changer_icons") end
level_tasks.add_lchanger_location()
self.bCheckStart = false end funcs.on_actor_update()
ogsm_funcs.on_actor_update() end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:save(packet)
--' Сохраняем уровень сложности if save_treasure_manager == true then packet:w_u8(level.get_game_difficulty() + 128) else packet:w_u8(level.get_game_difficulty()) end
--' Сохраняем данные об отключенном вводе if self.st.disable_input_time == nil then packet:w_bool(false) else packer:w_bool(true) utils.w_CTime(packet, self.st.disable_input_time) end
-- Weapon functions function hide_weapon() weapon_hide = true end function restore_weapon() weapon_hide = false end
// this is test for section iteration /** local function test_section_iteration(file_name, section_name) printf ("file : %s",file_name) printf ("section : %s",section_name)
local file = ini_file(file_name) local n = file:line_count(section_name) printf ("lines : %d",n)
local id, value = "", "", result for i=0,n-1 do result, id, value = file:r_line(section_name,i,"","") printf ("line %d : %s = %s",i,id,value) end end
local ant_spam ={ "Скряга: Кому нужны деньги, подходите ко мне. Есть работа.", "Костя: Давайте жить дружно и не засорять эфир.", "Саня Паленый: Недавно видел сталкеров "Свободы" возле стройки в Темной долине. Смотрите, на пулю не нарвитесь.", "Илья Длинный: на Агропроме приметил несколько новых аномалий возле тоннеля. Осторожней там.", "Дмитро Гашеный: Вояки на Агропроме что-то или кого-то ищут. Туда не суйтесь", "Яглыч: Есть работа. Подходите, если интересно. Я в лагере новичков на Кордоне.", "СВОБОДА: Это Грива 5-1, меняем свое место положение в квадрат Х0-23.", "Юра Козырь: Братва, на Свалке какая-то тема неясная. Фраера мутят что-то. Пацаны, подтягивайтесь сюда!", "ДОЛГ: Сталкеры, если вы ищете место, где можно перекусить и отдохнуть, место, где можно хорошо выпитьи поговорить, место, где вам всегда подскажут как подзароботать - подходите в Бар "100 Рентген"! Мы всегда рады новым посетителям!", "Зафиксирова смерть: Семецкий. Причина - неизвестна.", "Семенов: Возле вертолета на Янтаре приметил группу зомби. Хорошо вооружены", "Бес: Ребята, мы собираемся отбить у бандосов депо. Кто может помочь - присоединяйтесь!", "Пуля: Набираем сталкеров для похода на базу "Свободы" в Темной Долине. Вознаграждение хорошее.", "Арни: Сталкер! У тебя закончились деньги? Хочешь добиться признания и уважения? Приходи на Арену! Новые бои каждый день.", "Бармен: В продаже появились новые винтовки и бронекостюмы. Чисто за символические цены.", "Женя Полтергейст: Возле автобуса на Янтаре запалил партию зомби.", "Даня Кровель: На Армейских складах увидел группу военных. Шли от военной базы.", "СВОБОДА: Зона - это сталкеры! Сталкеры - это "Свобода"! Вступай в "Свободу"! ", "ДОЛГ: Сталкер, вступи в Долг! Защитить мир от заразы Зоны - наша общая цель и задача!.", "Сэм Литой: Увидел большую группу наемников на Ростке возле стройки. Видно засада, сволочи, чтоб их!", "Сидорович: В продаже появились новые Форт-12 и ПМ! Спешите, товар ограничен!" }
time_news = 0 -- переменная промежутка времени
function time_update_spam() -- функция промежутка времени local time = time_global() -- переменная времени if time_news < time then time_news = time + 30000 -- время через которое будет вызываться сообщение dynamic_news.update_spam() end end
function update_spam() dynamic_news.send_tip(db.actor, (ant_spam[math.random(#ant_spam)]), nil, nil, 8000) end
И даже после всего прочего - мы все равно остаемся здесь.
Сообщение отредактировал Dmitriy_Nekratov - Вторник, 03.12.2013, 12:10:12