Перейти к контенту

Wawka

 Ветераны
  • Число публикаций

    372
  • Регистрация

  • Последнее посещение

  • AMKoin

    0 [Подарить AMKoin]

Сообщения опубликованы Wawka

  1. Ооо, машина времени сработала)) Будто вернулся на 4 года назад. АМК форум - жив) Всё та же атмосфера, всё те же лица (почти). Всем ветеранам большой привет

     

    Добро пожаловать! ^_^ [kish]

    • Нравится 2
  2. Сомневаюсь, что этот самый кланмод научит чему-либо полезному для игры на обычных серваках. Там и ттх оружия изменены. И только дефолты. И техники нет. Побегай с бауром, пистолетами, кларком наконец - хочешь-не хочешь, меткость улучшится. А кланмодовцы мало чем могут похвастать, особенно перед опытными игроками. :russian_ru: Единственное веселят их постоянные приседания (малоэффективные). Ну научишься этим приседаниям, ну улучшится владение дефолтным оружием. Только на практике это мало где пригодится. Да и нет их, кланмодов, вроде уже.

    Чтоб приказ нормально отдать клавишей "T", старайся нацеливаться на пиктограммы шахт/флагов/титана. Чтоб пиктограмма была примерно в центре экрана. А проще открыть карту и мышкой приказ отдать или послать запрос главкому, выбрав нужный пункт в контекстном меню, раз уж при помощи "T" не получается.

    • Нравится 1
  3. Виталий Зверь

    В all.spawn на каждый костёр, имеются по три секции, с именами: lights_hanging_lamp, zone_flame_small и space_restrictor.

    lights_hanging_lamp, это видимо, зона свечения костра, zone_flame_small, собственно сам костёр и space_restrictor - зонка, которая запрещена для неписей (чтобы не сидели в кострах). Координаты для будущего гулага на этом месте, например, можно взять из zone_flame_small. Ну или встать в костёр и снять координаты.

    Если планируется просто посадить неписей у костра, без каких либо условий (несюжетный гулаг, а так, для фона), то это довольно просто.

    Для примера, покажу гулаг на эскейпе, у которого имя и тип будут называться, ну допустим, esc_test_lager, гулаг с населением 3 тела. Всё, что останется сделать - поместить смарт в нужный файл alife и прописать свои координаты. Ну можно ещё и названия поменять (все esc_test_lager на свои).

    В alife создать секцию смарта:

    [999]
    ; cse_abstract properties
    section_name = smart_terrain
    name = esc_test_lager
    position = -208.551208496094,-20.0917911529541,-141.64958190918
    direction = 0,0,0
    
    ; cse_alife_object properties
    game_vertex_id = 61
    distance = 1
    level_vertex_id = 44622
    object_flags = 0xffffffbe
    custom_data = <<END
    [smart_terrain]
    type = esc_test_lager
    capacity = 3
    END
    
    ; cse_shape properties
    shapes = shape0
    shape0:type = sphere
    shape0:offset = 0,0,0
    shape0:radius = 1
    
    ; cse_alife_space_restrictor properties
    restrictor_type = 3
    
    ; se_smart_terrain properties

    В position, game_vertex_id и в level_vertex_id - подставь координаты из zone_flame_small.

    Путь (center_point):

    [esc_test_lager_kamp]
    points = p0
    p0:name = wp00
    p0:position = -208.551208496094,-20.0917911529541,-141.64958190918
    p0:game_vertex_id = 61
    p0:level_vertex_id = 44622

    В p0:position, p0:game_vertex_id и в p0:level_vertex_id - подставь координаты из zone_flame_small.

    Если сможешь сам координаты снять, то можно в паре шагах от костра сделать точку спавна неписей при входе гулага в онлайн (чтобы не рождались в центре пламени), в логике строка path_walk :

    [esc_test_lager_kamp_task]
    points = p0
    p0:name = wp00
    p0:position = -208.551208496094,-20.0917911529541,-141.64958190918
    p0:game_vertex_id = 61
    p0:level_vertex_id = 44622

    Тут должны быть координаты в паре шагов от костра.

     

    Логика (можно добавить в любой файл логики гулагов, например в gulag_escape.ltx):

    [logic@esc_test_lager]
    active = kamp@esc_test_lager
    
    [kamp@esc_test_lager]
    center_point = kamp
    path_walk = kamp_task
    soundgroup = esc_test_lager

    Где:

    center_point - сам костёр. Неписи рассаживаются вокруг него, по умолчанию, если не ошибаюсь, радиус составляет 1 метр. Можно и свой прописать - добавить строку radius = и нужную цифру.

    path_walk - точка спавна неписей при входе гулага в онлайн (снять координаты недалеко от костра). Это необязательный параметр. По умолчанию, если убрать эту строку, неписи будут спавниться в точке center_point. Если это не суть важно, то можно и убрать.

    soundgroup - точно не знаю зачем, наверное для синхронности "беседы".

    И самое главное, не забывай, что в логике смартов имя пути пишется без имени гулага. То есть, в данном случае путь называется esc_test_lager_kamp, в нём esc_test_lager_ - имя гулага, а kamp - имя пути. Его то только и вписываем в логику.

    Ну и загрузка работ (можно так же добавить в имеющийся gulag_escape.script, чтоб свой не подключать):

    В function load_job(sj, gname, type, squad, groups) добавить:

        if type == "esc_test_lager" then
            t = { section = "logic@esc_test_lager",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@esc_test_lager",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@esc_test_lager",
                idle = 0,
                prior = 5, state = {0},
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
        end

     

    В function load_states(gname, type) добавить:

        if type == "esc_test_lager" then
            return function(gulag)
                return 0
            end
        end

     

    Ну и в function checkStalker(npc_community, gulag_type, npc_rank, se_obj) добавить:

        if gulag_type == "esc_test_lager" then
            return npc_community == "stalker"
        end

    Вроде ничего не забыл... В этом случае, если всё сделано правильно, заработает гулаг на три персоны и в него смогут попасть любые неписи, у кого комьюнити stalker. Лагерь начнёт свою работу со стартом новой игры и будет существовать на протяжении всей игры.

     

  4. Чтобы ГГ заспавнить в другом месте, надо его секцию:

    [63]
    ; cse_abstract properties
    section_name = actor
    name = level_prefix_actor_0001
    position = -246.726303100586,-24.7932605743408,-134.433868408203
    direction = 0.00431653670966625,-1.39625442028046,-0.00068671052576974
    s_flags = 0x29
    
    ; cse_alife_object properties
    game_vertex_id = 4
    distance = 0.699999988079071
    level_vertex_id = 11713
    object_flags = 0xffffffbf
    custom_data = <<END
    [dont_spawn_character_supplies]
    
    [spawn]
    wpn_binoc
    device_torch
    END
    
    ; cse_visual properties
    visual_name = actors\hero\stalker_novice
    
    ; cse_alife_creature_abstract properties
    g_team = 0
    g_squad = 0
    g_group = 0
    health = 1
    dynamic_out_restrictions = 
    dynamic_in_restrictions = 
    
    upd:health = 1
    upd:timestamp = 0x75732029
    upd:creature_flags = 0x70
    upd:position = -246.726303100586,-24.7932605743408,-134.433868408203
    upd:o_model = 0
    upd:o_torso = -1.39625442028046,0.00431653670966625,0
    upd:g_team = 0
    upd:g_squad = 0
    upd:g_group = 0
    
    ; cse_alife_trader_abstract properties
    money = 40
    trader_flags = 0
    character_profile = actor
    
    ; cse_ph_skeleton properties
    
    ; cse_alife_creature_actor properties
    
    upd:actor_state = 0xd20
    upd:actor_accel_header = 0
    upd:actor_accel_data = 0
    upd:actor_velocity_header = 0
    upd:actor_velocity_data = 0
    upd:actor_radiation = 0
    upd:actor_weapon = 110
    upd:num_items = 0

     

    Удалить из alife_l01_ecape.ltx и поместить в файл того уровня, в который необходимо. Прописать новые координаты не только в строках:

    position

    game_vertex_id

    level_vertex_id

    Но и в upd:position (взять из строки position). И все дела.

     

  5. но у меня посыпались гулаги военных и нейтралов на кордоне. Как сохранить гулаг при удалении НПС.
    Значит, точно ошибка в скрипте загрузки работ.

    До:

            -- Шустрый
            t = { section = "logic@esc_lager_shustryi",
                idle = 0,
                prior = 16, state = {0,1},
                online = true,
                in_rest = "", out_rest = "",
                predicate = function(obj_info)
                                return obj_info.profile_name == "esc_shustryi"
                            end
            }
            table.insert(sj, t)
            t = { section = "logic@esc_lager_kamp1",
                idle = 0,
                prior = 16, state = {2},
                online = true,
                in_rest = "", out_rest = "",
                predicate = function(obj_info)
                                return obj_info.profile_name == "esc_shustryi"
                            end
            }
            table.insert(sj, t)

    После:

            -- Шустрый
            t = { section = "logic@esc_lager_shustryi",
                idle = 0,
                prior = 16, state = {0,1},
                online = true,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)
            t = { section = "logic@esc_lager_kamp1",
                idle = 0,
                prior = 16, state = {2},
                online = true,
                in_rest = "", out_rest = ""
            }
            table.insert(sj, t)

    То есть, работу необходимо сохранить, но убрать проверку профиля esc_shustryi. Важно - обязательно убрать зпт в строке in_rest = "", out_rest = "" - в общем, как здесь. Можно так же, замениь его логику logic@esc_lager_shustryi на ту, что ниже logic@esc_lager_kamp1. То есть, воявится ещё одно место у костра, причём, для всех состояний - дня, ночи, атаки наёмников.

    Ещё, в этом гулаге, есть оигинальная ошибка:

            -- охранники
            t = { section = "logic@esc_lager_zoneguard1",
                idle = 0,
                prior = 9, state = {0, 1},
                in_rest = "", out_rest = "esc_lager_guard_kill_zone",
            }
            table.insert(sj, t)
            t = { section = "logic@esc_lager_zoneguard2",
                idle = 0,
                prior = 9, state = {0, 1},
                in_rest = "", out_rest = "esc_lager_guard_kill_zone",
            }
            table.insert(sj, t)

    Запятые в конце строк in_rest = "", out_rest = "esc_lager_guard_kill_zone",

    Их тоже убрать:

            -- охранники
            t = { section = "logic@esc_lager_zoneguard1",
                idle = 0,
                prior = 9, state = {0, 1},
                in_rest = "", out_rest = "esc_lager_guard_kill_zone"
            }
            table.insert(sj, t)
            t = { section = "logic@esc_lager_zoneguard2",
                idle = 0,
                prior = 9, state = {0, 1},
                in_rest = "", out_rest = "esc_lager_guard_kill_zone"
            }
            table.insert(sj, t)

    Ну и у самого шустрого убрать esc_lager = true.

     

  6. Эта строка attachable_items - здесь перечислены предметы, которые могут появиться в руках НПС (рация, бутылка водки, колбаса, батон и т.п.). Туда и следует добавить yad. Ragdol Mod, по сути, затрагивает лишь физику (в основном, строки ph_skeleton.... Они все находятся рядом - легко совмесить при помощи WinMerge) - остальное вовсе необязательно добавлять.

  7. Гулаг на всю локу создать, конечно же, можно.

    В загрузке работ проставить online = true и всё. Наделать пути, там где необходимо, прописать логику.

    А для непися, который должен покинуть своё место на некоторое время, можно сделать примерно следующее:

    [первая_логика]
    on_info = {!is_day} вторая_логика
    
    [вторая_логика]
    on_info = {=is_day} первая_логика

    Это условно. Можно и другие условия придумать. Функция is_day находится в xr_conditions.script. Можно создать по её аналогии другую, с другим промежутком времени. Назвать, к примеру, is_utro :)

    function is_utro (actor, npc)
        return level.get_time_hours() >= 5 and level.get_time_hours() < 12
    end

    То есть, с 5ти до 12ти непись будет использовать одну логику, а в остальное время другую.

    Конечно, можно заставить и покидать гулаг - прописать индивидуальную логику и имя_гулага = true - но только при этом гулаг необходимо распускать, используя cond = {+/-условие/инфопоршен}, по которому гулаг будет прекращать\возобновлять свою работу. Только это не есть хорошо, ибо все остальные жители так же будут покидать гулаг, если его отключить. Проще пользовать первый вариант - менять логику по условию или инфопоршену, не затрагивая остальных "жителей".

    Ну и ещё, как вариант, можно менять состояние всего гулага. В один промежуток времени гулаг в 0-ом состоянии, в другой промежуток - в 1-ом - делается это в скриптах загрузки работ:

        if type == "имя_гулага" then
            return function(gulag)
                if db.actor ~= nil then
                    if ( level.get_time_hours() >= 5 and level.get_time_hours() <= 12 ) then
                        return 0
                    else
                        return 1
                    end
                else
                    return gulag.state
                end
            end
        end

     

  8. Вот мои данные по вертексам для новых локаций - может кому пригодятся:

     atp_for_test22            = 1049687,
    peshera                = 32341,
    puzir                    = 377572,
    aver                    = 1790762,
    av_peshera                = 172637,
    limansk                = 61524,
    hospital                = 7865,
    generators                = 752337,
    warlab                    = 7776,
    red_forest                = 166431,
    lost_village            = 46826,
    marsh                    = 528961

     

     atp_for_test22            = {2792,2861},
    peshera                = {2862,2880},
    puzir                    = {2881,2885},
    aver                    = {2886,2908},
    av_peshera                = {2909,2987},
    limansk                = {2988,3027},
    hospital                = {3028,3075},
    generators                = {3076,3152},
    warlab                    = {3153,3223},
    red_forest                = {3224,3323},
    lost_village            = {3324,3336},
    marsh                    = {3337,3581}

     

  9. dipper, это скорее всего, из-за скрипта определения координат - там, по умолчанию, включено отображение костра (fire_movie) - и если не ошибаюсь, правится это дело в файле ui_main_menu.script , путём комментирования строк с упоминанием об этом fire_movie, либо заменой файлом из чистого АМК (если не планируется определять координаты).

    P.S. Очень надеюсь, кто-нибудь всё же возьмётся перекомпилировать АТП, но очень желательно, без смещения координат\вертексов. :)

    Координаты от этого не изменятся.
    Супер! Спасибо, Костя. :)
  10. Borsalino, а эти самые новые локации добавлены в amk_anoms.script?

    Если нет, то необходимо добавить в:

    local level_vertexes (указать имя локации = вертекс уровня)

    local level_number (указать имя локации = порядковый номер)

    local game_vertexes (указать имя локации = вертекс игры от и до)

    level_anoms (если нужны динамически спавнящиеся аномалии)

    level_arts (если нужны динамически спавнящиеся артефакты)

    local levelname

    В items.ltx добавить псевдобинты с названиями лок вида testsak_имялокации

    В sak.script в функцию add_tail добавить локи в исключения (на которых не планируется спавн артов)

  11. Нужно найти в amk_offline_alife.script найти строку:

                        news_main.trace("Process trade - unknown - "..sect.." "..v:name())

    И закомментировать её.

    Из xrGame.dll в лог выводится can't detach independant object. Раз непись подбирает ствол, может нужно добавить их в attachable_items?

  12. 1. При отказе никакого поршена не выдаётся. А лишь прекращается диалог и ГГ перемещается в точку.

    --' Мы отказываемся вступить в осознание, нас переносит на вторую станцию
    function osoznanie_decline(npc, actor)
        db.actor:disable_info_portion("oso_init_dialog")
        npc:stop_talk()
        actor:stop_talk()
        xr_effects.enable_ui(db.actor, nil)      
        local point = patrol("mon_jump_aes2_walk")
        local look = patrol("mon_jump_aes2_look")
        
        db.actor:set_actor_position(point:point(0))
        local dir = look:point(0):sub(point:point(0))
        db.actor:set_actor_direction(-dir:getH())
        
    end
    
    --' Мы соглашаемся вступить в осознание, конец игры.
    function osoznanie_agree(npc, actor)
        db.actor:disable_info_portion("oso_init_dialog")
        npc:stop_talk()
        actor:stop_talk()
        xr_effects.enable_ui(db.actor, nil)      
        game.start_tutorial("mov_join_osoznanie")
        
    end

     

    По второму - тоже очень интересно узнать. Понял только одно - это движковое.

AMK-Team.ru

×
×
  • Создать...