strong 2 Опубликовано 24 Августа 2009 (изменено) Ну неужели никому не интересна эта идея. Я прикрутил эту фишку к двум своим сборкам на основе ФриплейСтарт-мода и ОГСМ, отключил видимость телепортов и их отметки на миникарте и КПК, оставил только звук. И в итоге получил Зону в которой никогда не уверен где окажешься через секунду. Попробуйте представить себе ситуацию когда идя по сюжету и , к примеру, спасая Шустрого вдруг телепортируешься со второго этажа АТП на Янтарь, прямиком на болота к сноркам, и после этого сюжет встает вверх ногами, и что-бы идти по сюжету дальше надо как-то вернутся назад. И прорвавшись через ДТ, пройдя Бар и Свалку и шагнув, наконец, в штатный пережод на Кордон, переносишься в Припять, на стадион,и опять шок и опять адреналин в голову. И это настолько интересно , что мне уже почти по фигу что после некоторых телепортаций приходиться переигровать с ранних сейвов (у меня сзади всегда два три сейва). Если бы знал как убрать эти вылеты за карту, основное из за чего происходят вылеты из игры, давно бы сделал сам. Но ,увы, я не програмист и ни черта не понимаю в скриптах. Может наши Мастера обратят внимание на эту разработку ? Изменено 24 Августа 2009 пользователем strong ЗОНА ДОЛЖНА БЫТЬ НЕПРЕДСКАЗУЕМОЙ !!! НЕТ ТАМ ЛОГИКИ И НЕ НУЖНА ОНА ТАМ !!! Поделиться этим сообщением Ссылка на сообщение
strong 2 Опубликовано 9 Декабря 2009 (изменено) Уф..ф..ф!!! Наконец то я дождался одной из лучших фишек для Сталкера!! Я верил в наших Мастеров!! Поставил , побегал, два часа кряду -- полет нормальный. Спасибо!! Gonarh, а почему ты исключил из зон спавна телепортов локации Бар, ЧАЭС-1 и ЧАЭС-2? Ну с баром более менее понятно - зона безопасности, хотя и там можно, по моему спаунить три-четыре телепорта, но с ЧАЭС-1 и ЧАЭС-2 не понятно. Изменено 12 Декабря 2009 пользователем strong ЗОНА ДОЛЖНА БЫТЬ НЕПРЕДСКАЗУЕМОЙ !!! НЕТ ТАМ ЛОГИКИ И НЕ НУЖНА ОНА ТАМ !!! Поделиться этим сообщением Ссылка на сообщение
strong 2 Опубликовано 11 Февраля 2010 (изменено) "Старые следы" и "Легенда Зоны" Немного беллетристики в столь серьезном разделе форума как "Школа..." Хочу описать пару моментов, замеченных мною при использовании данного мода. Все мы играем в ту игру, которую сами себе придумываем. И СТАЛКЕРА это касается в большей степени , чем многих других игр. Ждали одного - получили совсем другое. И по сему я принял для себя два варианта игры с данным модом: 1.Идти строго по сюжету. Поскольку за последние три года сюжет выучен как "отче наш.." и известны все основные сюжетные точки и пересечения приходится прилагать немалые усилия чтобы вернутся в нужную точку из тех мест куда забрасывает судьба, т.е. скрипт данного мода и соблюдать шаги очередности сюжета. 2.Не касаться сюжета вообще, не выполнять сюжетных заданий, довольствоваться только побочными квестами, короче просто жить в Зоне. И это мне нравится больше. Чтобы жизнь не казалась медом отключил отметки телепортов на миникарте и заменил загрузочные экраны уровней на один нейтральный. И теперь я почти никогда не знаю в каком месте сработает скрипт перехода и на какую локацию произойдет "прыжок". И это просто замечательно. Но это все лирика, а вот немного практики. Интегрировал данный мод в целую кучу модов:Freeplay Start, OGSM_v2.3.1_ultimate, чистый AMK_MOD_1.4.1, Priboi_Stori_1.1, Новый сюжет-5"Тайные тропы". Скрипт "прыжка" срабатывает идеально. Но при досаточно долгой игре (1.5-2часа) наблюдается такое : появляются телепорты-фантомы, т.е. телепорты без отметок на карте но в тех же самых местах где они были при предыдущей загрузки уровня. И срабатывают они мгновенно, без отыгрыша партиклов (побеление и мерцание экрана) и без звука. Вот это я и назвал "старые следы". Что это - недоработка скрипта или глюк игры в целом - меня в принципе не волнует. Мне интересней считать это очередным проявлением Зоны. Исправлять тоже по моему незачем, написал просто чтобы автор знал об этом. И напоследок еще чуть-чуть лирики. В очередной раз "присев" к сталкерскому костерку после целого дня мотания по Зоне и "прыжков" с локи на локу, я вдруг с удивлением понял, что сталкерская байка о сталкере Проводнике, которого видят одновременно в разных местах Зоны и которого не останавливают никакие кордоны и аномалии это рассказ про меня, т.е. конечно про ту ипостась ГГ, которую я сейчас, с данным модом, отыгрываю. Приятно, черт возьми, почувствовать себя "Легендой Зоны" И еще раз автору - СПАСИБО МАСТЕР! Изменено 11 Февраля 2010 пользователем strong ЗОНА ДОЛЖНА БЫТЬ НЕПРЕДСКАЗУЕМОЙ !!! НЕТ ТАМ ЛОГИКИ И НЕ НУЖНА ОНА ТАМ !!! Поделиться этим сообщением Ссылка на сообщение
strong 2 Опубликовано 12 Марта 2010 (изменено) Назрели вопросы. Есть большое желание максимально приблизить работу данного скрипта к воздействию на ГГ аномалии. Со всеми сопутствующими эффектами. 1- При увеличении радиуса срабатывания телепорта (не как сейчас, практически в точке), т.е. .грубо говоря, создания некой зоны аномалии, перестают проигрываться партиклы телепорта. Скорее всего просто не успевают. Можно ли это как-нибудь исправить? 2- Можно ли при загрузе уровня не показывать статичную картинку(intro), а проигрывать видео или те же партиклы? К примеру попал в зону срабатывания, заклубился туман, рассеялся и ГГ на новой локе. 3- Можно ли привязать к моменту появления ГГ на новой локе постэффект? Типа расколбас после перехода секунд на 10-15. 4- Как изменить количество телепортов на локе, что-то не нашел где это прописано в скрипте. Я понимаю что "концерты по заявкам" это не здесь , но я , к сожалению, в скриптах Дуб и именно с большой буквы. Обьясните "на пальцах" и по подробней. Изменено 13 Марта 2010 пользователем strong ЗОНА ДОЛЖНА БЫТЬ НЕПРЕДСКАЗУЕМОЙ !!! НЕТ ТАМ ЛОГИКИ И НЕ НУЖНА ОНА ТАМ !!! Поделиться этим сообщением Ссылка на сообщение
strong 2 Опубликовано 18 Марта 2010 (изменено) Gonarh Вот твой скрипт - http://depositfiles.com/files/8wiatufmd Покажи, если не сложно. Или тебе лучше так: ------------- Спавн динамических телепортов -------------- -------------------- Copyright 2009 Gonarh --------------- local real_lc_points = { [1] = {gvid = 3, lvid = 312314, pos = {31.3994522094727,16.5561962127686,677.265319824219}, dir = {0,0,0}, name = "l01_escape", graph = "start_actor_01"}, [2] = {gvid = 253, lvid = 209876, pos = {36.4117431640625,0.481237411499023,-305.824523925781}, dir = {0.0111562451347709,-0.000250374461757019,0.0224392339587212}, name = "l02_garbage", graph = "start_actor_01"}, [3] = {gvid = 693, lvid = 432735, pos = {273.589294433594,0.312782287597656,0.272092819213867}, dir = {0.0002013473858824,2.00711727142334,-0.00200603087432683}, name = "l03_agroprom", graph = "start_actor_02"}, [4] = {gvid = 813, lvid = 1321, pos = {-188.877655029297,3.94756889343262,-193.695678710938}, dir = {0,-1.12671363353729,0}, name = "l04_darkvalley", graph = "start_actor_01"}, [5] = {gvid = 1412, lvid = 67363, pos = {31.4319934844971,-0.632162094116211,140.407974243164}, dir = {0,0,0}, name = "l06_rostok", graph = "start_actor_01"}, [6] = {gvid = 1546, lvid = 16231, pos = {-334.578491210938,-25.5103607177734,45.0102348327637}, dir = {0,-0.698128044605255,0}, name = "l07_military", graph = "start_actor_01"}, [7] = {gvid = 1459, lvid = 136760, pos = {195.41227722168,5.87823486328125,-245.030059814453}, dir = {-0.0813582167029381,1.53351366519928,-0.0476411543786526}, name = "l08_yantar", graph = "start_actor_01"}, [8] = {gvid = 1868, lvid = 199539, pos = {568.326354980469,-53.4707336425781,-408.685577392578}, dir = {0.0186832379549742,-0.353888958692551,0.0474293567240238}, name = "l10_radar", graph = "start_actor_01"}, [9] = {gvid = 2269, lvid = 145458, pos = {34.8646354675293,-2.15999984741211,-290.553436279297}, dir = {0,0,0}, name = "l11_pripyat", graph = "start_actor_01"} } local levels ={ "l01_escape", "l02_garbage", "l03_agroprom", "l04_darkvalley", "l06_rostok", "l07_military", "l08_yantar", "l10_radar", "l11_pripyat"} local level_vertexes={ l01_escape = 595499, l02_garbage = 382663, l03_agroprom = 437420, l04_darkvalley=390124, l06_rostok=67712, l07_military=418267, l08_yantar=141470, l10_radar=227188, l11_pripyat=261218} local level_number={ l01_escape = 1, l02_garbage = 2, l03_agroprom = 3, l03u_agr_underground=4, l04_darkvalley=5, l04u_labx18=6, l05_bar=7, l06_rostok=8, l07_military=9, l08_yantar=10, l08u_brainlab=11, l10_radar=12, l10u_bunker=13, l11_pripyat=14 } local game_vertexes={ l01_escape={0,251}, l02_garbage={252,415}, l03_agroprom={416,702}, l03u_agr_underground={703,810}, l04_darkvalley={811,1108}, l04u_labx18={1109,1167}, l05_bar={1168,1307}, l06_rostok={1308,1437}, l08_yantar={1438,1528}, l08u_brainlab={1529,1544}, l07_military={1545,1861}, l10_radar={1862,2116}, l11_pripyat={2117,2272}} local array_lc = {} function save_variable(variable_name, value) xr_logic.pstor_store(db.actor, variable_name, value) end function load_variable(variable_name, value_if_not_found) return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found) end function get_random_coordinates(lname) local gvn, gvx, lvx = game_vertexes[lname][1], game_vertexes[lname][2], level_vertexes[lname] local min_dist = 100000 local data = {} data.lvid = math.random(1, lvx) data.pos = level.vertex_position(data.lvid) data.gvid = 0 for a = gvn, gvx do g1 = game_graph():vertex(a):game_point() if g1:distance_to(data.pos) < min_dist then min_dist = g1:distance_to(data.pos) data.gvid = a end end return data end function create_lc(source_dt,dist_dt) local obj = alife():create("level_changer", source_dt.pos, source_dt.lvid, source_dt.gvid) if obj then data = xr_packet.read_level_changer_params(obj) local rad data.shapes[1]={} data.shapes[1].shtype=0 data.shapes[1].center = vector():set(0,0,0) data.shapes[1].radius = 0.01 data.dest_gvid = dist_dt.gvid data.dest_lvid = dist_dt.lvid data.dest_pos = dist_dt.pos data.dest_dir = dist_dt.dir data.dest_lname = dist_dt.lname data.silent_mode = 1 xr_packet.write_level_changer_params(data, obj) return obj end end function show_teleport() local snd_obj = xr_sound.get_safe_sound_object([[affects\tinnitus3a]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) level.add_pp_effector ("teleport.ppe", 2006, false) db.actor.power = 0.07 end function spawn_restrictor(p_name, p_vector, p_lv, p_gv, p_radius, cust_data) local obj = alife():create(p_name, p_vector, p_lv, p_gv) local data = xr_packet.read_restrictor_params(obj) data.custom = cust_data data.shapes[1]={} data.shapes[1].shtype=0 data.shapes[1].center = vector():set(0,0,0) data.shapes[1].radius = p_radius xr_packet.write_restrictor_params(data,obj) return obj end function get_random_loc_index(lvl) local random_index = math.random(table.getn(levels)) local rand_lvl = levels[random_index] if rand_lvl ~= tostring(lvl) then return random_index else return get_random_loc_index(lvl) end end function get_dest_data(lname) local dst = {} index_point = get_random_loc_index(lname) for i, data in ipairs(real_lc_points) do if i == index_point then dst.pos = vector():set(data.pos[1], data.pos[2], data.pos[3]) dst.lvid = data.lvid dst.gvid = data.gvid dst.lname = data.name dst.dir = vector():set(data.dir[1], data.dir[2], data.dir[3]) dst.graph = data.graph break end end return dst end function spawn_random_lc(lname) local src = get_random_coordinates(lname) local obj = create_lc(src, get_dest_data(lname), 0.01, lname.."_dynamic_lc_gonarh") if obj then table.insert(array_lc, obj) level.map_add_object_spot(obj.id, "red_location", "Телепорт") end local custom_data = "[logic] \nactive = sr_idle \n[sr_idle] \non_actor_inside = %+teleport_show%\non_actor_outside = %-teleport_show%" spawn_restrictor(lname.."_dynamic_lc_gonarh_restrictor", src.pos, src.lvid, src.gvid, 2, custom_data) end function spawn_teleports() db.actor:disable_info_portion("teleport_show") local lname=level.name() for a=0,65535 do local obj = alife():object(a) if obj then if string.find(obj:name(), lname.."_dynamic_lc_gonarh") then alife():release(obj) end end end if level_vertexes[lname] and level_vertexes[lname] > 0 then array_lc = {} min_lc = level_number[lname]*2 lc_cnt = math.random(min_lc, min_lc+math.random(7,15)) for i=1, lc_cnt do spawn_random_lc(lname) end end if load_variable("mv_pos",0) == 1 then save_variable("mv_pos",0) db.actor:set_actor_position(get_random_coordinates(lname).pos) end end function detect_need_move_actor() local mv_pos = 0 for i, lc in pairs(array_lc) do obj = level.object_by_id(lc.id) if obj and db.actor:position():distance_to(obj:position()) <= 4 then mv_pos = 1 break end end if mv_pos > 0 then save_variable("mv_pos",1) end end А по поводу большего соответствия аномалии есть такая задумка. Распишу поэтапно как придумалось: - Вспоминаем первые секунды "жизни в Зоне", очухиваемся у Сидора, затем экран медленно гаснет и также медленно открывается по новой.Это начало срабатывания аномалии, точнее первая половина.При попадании в зону рестриктора происжодит "подтягивание" ГГ к центру (как у аномалии Трамплин кажется) и медленно гаснет экран. - Срабатывает скрипт перехода, идет загрузка уровня. При этом можно убрать dds-ки задника и загрузочного экрана, а точнее залить их, к примеру, черным цветом, также как и шрифты сообщений" ...загрузка текстур...синхронизация... и т.д." Черное на черном получаем черный экран.Я думаю не большая потеря, если мы не прочитаем этого, точно также как и отключение худа в этот момент. - В момент "материализации" на новой локе экран медленно светлеет. Эдесь хорошо бы реализовать что-то типа "выталкивания" из зоны рестриктора и небольшой расколбас. Придумать то я придумал, а вот как сделать... Хотя все кубики имеются в наличии, кто бы их сложил. Есть даже предварительное название аномалии - "чёрная дыра" Изменено 18 Марта 2010 пользователем strong ЗОНА ДОЛЖНА БЫТЬ НЕПРЕДСКАЗУЕМОЙ !!! НЕТ ТАМ ЛОГИКИ И НЕ НУЖНА ОНА ТАМ !!! Поделиться этим сообщением Ссылка на сообщение
strong 2 Опубликовано 24 Марта 2010 Спасибо за разьяснения, после правки телепорты-фантомы исчезли. Но непонятки с количеством телепортов остались. Я еще раз говорю, я в програмировании ноль, но руководствуясь только логикой и остатками английского я пришел к такому выводу. За количество телепортов на локе отвечают две строки в скрипте, вот эти: min_lc = level_number[lname]*2 lc_cnt = math.random(min_lc,min_lc+math.random(7,15)) Из первой строки ясно, что кол-во определяется номером левела(да еще умноженному на 2 кажется), а во второй к этому кол-ву прибавляется еще какое-то рандомное число. На начальных уровнях вроде все в порядке, но представте себе сколько спавнится телепортов на уровне Болото с порядковым номером 33 в MapPack-е. Но здесь хоть площадь локи позволяет, а на локе Госпиталь под номером 28 просто кошмар. Я немного переделал эти строки, вот так: min_lc = 3 lc_cnt = math.random(min_lc,min_lc+math.random(5,10)) И количество телепортов пришло в более-менее сносное состояние. И хочу задать еще пару вопросов. Что касается ТЧ, здесь все в порядке, все работает безупречно. Но я привинтил этот скрипт к сборке ЗП+MapPack. В принципе все работает как надо , только иногда вылетает в Винду вот с этими логами: Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\scri pt_storage.cpp Line : 748 Description : ....r. - cop\gamedata\scripts\bind_level_changer.script:46: attempt to index field 's_obj' (a nil value) Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\scri pt_storage.cppLine : 748 Description : ....t.a.l.k.e.r. - cop\gamedata\scripts\xr_logic.script:1270: attempt to index local 'obj' (a nil value) Насколько я понял затык идет из присутствия в ЗП файла bind_level_changer.script , их просто надо развести по времени срабатывания. Как это сделать? И второй вопрос почему на локах ЧАЭС и ЧАЭС-2 отметки переходов не отображаются в пда? Как их включить? ЗОНА ДОЛЖНА БЫТЬ НЕПРЕДСКАЗУЕМОЙ !!! НЕТ ТАМ ЛОГИКИ И НЕ НУЖНА ОНА ТАМ !!! Поделиться этим сообщением Ссылка на сообщение
strong 2 Опубликовано 25 Марта 2010 (изменено) Не верно.Минимальное количество телепортов на локации с именем lname равно удвоенному числу,которое берется из таблицы level_number,описанной в начале файла. Ни Болот, ни Госпиталя в ней нет,и динамических телепортов на этих локациях не будет. Уже есть. Я расширил таблицу на весь MapPack. И чем твой ответ отличается от моего вопроса, я кажется тоже самое и написал. Цитата почему на локах ЧАЭС и ЧАЭС-2 отметки переходов не отображаются в пда? По той же причине - динамических телепортов там нет. См. ответ выше, телепорты есть и их видно на миникарте, но не видно в ПДА, т.ч. вопрос остался. Мне это нужно на момент отработки. Потом отметки от рестрикторов будут отключены. Изменено 25 Марта 2010 пользователем strong ЗОНА ДОЛЖНА БЫТЬ НЕПРЕДСКАЗУЕМОЙ !!! НЕТ ТАМ ЛОГИКИ И НЕ НУЖНА ОНА ТАМ !!! Поделиться этим сообщением Ссылка на сообщение
strong 2 Опубликовано 25 Марта 2010 С этим вариантом скрипта не пробовал, а со старым вариантом у меня получалось. Вот в этом месте function get_random_coordinates(lname) local gvn, gvx, lvx = game_vertexes[lname][1], game_vertexes[lname][2], level_vertexes[lname] local min_dist = 100000 уменьшая значение local min_dist = 100000 до 1000 прыгал по телепортам на одной локе ЗОНА ДОЛЖНА БЫТЬ НЕПРЕДСКАЗУЕМОЙ !!! НЕТ ТАМ ЛОГИКИ И НЕ НУЖНА ОНА ТАМ !!! Поделиться этим сообщением Ссылка на сообщение
strong 2 Опубликовано 4 Января 2011 Работает и на ЗП. ЗОНА ДОЛЖНА БЫТЬ НЕПРЕДСКАЗУЕМОЙ !!! НЕТ ТАМ ЛОГИКИ И НЕ НУЖНА ОНА ТАМ !!! Поделиться этим сообщением Ссылка на сообщение