SoC. Фриплей — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(Новая страница: «== Таймер/выброс на ЧАЭС == Первым делом уберем таймер (ЧАЭС-1) и выброс (ЧАЭС-1 и ЧАЭС-2). Открыв...») |
(<<< aka_sektor) |
||
Строка 198: | Строка 198: | ||
Скрипт из OGSM. | Скрипт из OGSM. | ||
+ | [[Категория:Неоформленные статьи]] |
Текущая версия на 00:22, 20 марта 2014
Таймер/выброс на ЧАЭС
Первым делом уберем таймер (ЧАЭС-1) и выброс (ЧАЭС-1 и ЧАЭС-2). Открываем sr_timer.script и в начале всех функций пишем:
if not has_alife_info("freeplay") then
С файлом sr_aes_deadzone.script делаем тоже самое.
В файл info_l19_stanciya.xml(это в gamedata/config/gameplay) пишем:
<info_portion id="freeplay"></info_portion>
В xr_effects.script, в начале функции aes_earthshake напишите:
<info_portion id="freeplay"></info_portion>
Точки перехода
В freeplay.script пишем:
-- Спавним левел-чейнджер function spawn_level_changer(sid, from_pos, from_level, dest_pos, dest_level, hint, mode, dest_dir) local vertexes = { l01_escape = {lvid=594266, gvid=0}, l04_darkvalley = {lvid=121712, gvid=815}, l11_pripyat = {lvid=142116, gvid=2270}, l12_stancia = {lvid=405348, gvid=2400}, l12_stancia_2 = {lvid=9914, gvid=2517} -- l12_stancia_2 = {lvid=227423, gvid=2635} } local obj = alife():create("level_changer", from_pos, vertexes[from_level]["lvid"], vertexes[from_level]["gvid"]) if obj then level.map_add_object_spot(obj.id, "level_changer", hint) local packet = net_packet() obj:STATE_Write(packet) -- свойства cse_alife_object local game_vertex_id = packet:r_u16() local cse_alife_object__unk1_f32 = packet:r_float() local cse_alife_object__unk2_u32 = packet:r_s32() local level_vertex_id = packet:r_s32() local object_flags = packet:r_s32() local custom_data = packet:r_stringZ() local story_id = packet:r_s32() local cse_alife_object__unk3_u32 = packet:r_s32() -- свойства cse_shape local shape_count = packet:r_u8() local shape_type local center local radius if shape_count == 0 then shape_type = 0 center = vector():set(0,0,0) radius = 10.0 shape_count = 1 else for i=1,shape_count do local shape_type = packet:r_u8() if shape_type == 0 then local center = packet:r_vec3() local radius = packet:r_float() else local v1 = packet:r_vec3() local v2 = packet:r_vec3() local v3 = packet:r_vec3() local v4 = packet:r_vec3() end end end -- свойства cse_alife_space_restrictor local restrictor_type = packet:r_u8() -- свойства cse_alife_level_changer local dest_game_vertex_id = packet:r_u16() local dest_level_vertex_id = packet:r_s32() local dest_position = packet:r_vec3() local dest_direction = packet:r_vec3() local dest_level_name = packet:r_stringZ() local dest_graph_point = packet:r_stringZ() local silent_mode = packet:r_u8() if packet:r_elapsed() ~= 0 then get_console():execute("left="..packet:r_elapsed()) end -- свойства cse_alife_object packet:w_u16(game_vertex_id) packet:w_float(cse_alife_object__unk1_f32) packet:w_s32(cse_alife_object__unk2_u32) packet:w_s32(level_vertex_id) packet:w_s32(object_flags) packet:w_stringZ(custom_data) packet:w_s32(sid) packet:w_s32(cse_alife_object__unk3_u32) -- свойства cse_shape packet:w_u8(shape_count) for i=1,shape_count do packet:w_u8(shape_type) if shape_type == 0 then packet:w_vec3(vector():set(0,0,0)) packet:w_float(3) else packet:w_vec3(vector():set(3,0,0)) packet:w_vec3(vector():set(0,3,0)) packet:w_vec3(vector():set(0,0,3)) packet:w_vec3(vector():set(0,0,0)) end end -- свойства cse_alife_space_restrictor packet:w_u8(restrictor_type) -- свойства cse_alife_level_changer packet:w_u16(vertexes[dest_level]["gvid"]) packet:w_s32(vertexes[dest_level]["lvid"]) packet:w_vec3(dest_pos) if dest_dir then packet:w_vec3(dest_dir) else packet:w_vec3(dest_direction) end packet:w_stringZ(dest_level) packet:w_stringZ(dest_graph_point) packet:w_u8(mode) obj:STATE_Read(packet, packet:w_tell()-packet:r_tell()) end end -- Спавн всех нужных переходов function set_lc(actor, npc) -- Кордон - Темная долина spawn_level_changer(6001, vector():set(368.9,15.17,-42.65), "l01_escape", vector():set(-44.77, 0.43, -541.35), "l04_darkvalley", "to_darkvalley", 0) -- ЧАЭС - Припять spawn_level_changer(6002, vector():set(918.1,-0.1,-401.96), "l12_stancia", vector():set(31.28,1.135,420.61), "l11_pripyat", "to_pripyat", 0, vector():set(0,-3.1,0)) -- ЧАЭС2 - ЧАЭС -- spawn_level_changer(6003, vector():set(554.52,150,201), "l12_stancia_2", vector():set(117.6,-0.1,-76.3), "l12_stancia", "to_aes", 1, vector():set(0,-1.5,0)) spawn_level_changer(6003, vector():set(-42.15,-0.02,56.03), "l12_stancia_2", vector():set(126,-0.1,-76.3), "l12_stancia", "to_aes", 0, vector():set(0,-1.5,0)) -- ЧАЭС - ЧАЭС2 spawn_level_changer(6004, vector():set(117.6,-0.1,-76.3), "l12_stancia", vector():set(-42.15,-0.02,64), "l12_stancia_2", "to_aes", 0) -- Перемещаем актора, ато он на трубе станет db.actor:set_actor_position(vector():set(1035.12,-0.0999,229.564)) -- Ставим стандартную погоду, отключаем таймер и выброс level.set_weather("default") db.actor:give_info_portion("freeplay") end end -- Отмечаем на карте новые точки перехода function mark_lc() local obj = alife():story_object(6001) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_darkvalley") end local obj = alife():story_object(6002) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_pripyat") end local obj = alife():story_object(6003) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_aes") end local obj = alife():story_object(6004) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_aes") end end
Точки перехода нужны для того, чтобы актор не застрял на ЧАЭС-2, чтобы он мог вернуться к любимому Сидоровичу - на кордон, в Припять, на ЧАЭС-1, на Радар, Янтарь, бар, в Темную долину.
Пишем в файл bind_stalker.script, в функцию actor_binder:update(delta)
-- помечаем точки переходов
freeplay.mark_lc()
Активация
В ui_movies.xml(gamedata/config/ui), в теге mov_refuse_osoznanie, элемент <function_on_stop> модифицировать, чтобы было так:
<function_on_stop>freeplay.set_lc</function_on_stop>
Авторы
Статью писал Я - vllzl.
Скрипт из OGSM.