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

Рекомендуемые сообщения

@I am Dead @Купер 

Диалог - это возможность для игрока, управляющего актером, начать взаимодействие с НПС и войти в режим выбора фраз в соответствующем диалоговом окне. А все то, о чем вы написали - это обыкновенный отыгрыш неписями своей логики, с анимациями и воспроизведением прописанных звуков, и с определенной синхронизацией между схем.

  • Согласен 3
  • Не согласен 1
Ссылка на комментарий

@AndreySol Полнейший бред, уроки русского языка вам поучить, товарищ! Диалог это в первую очередь разговор между двумя и более лицами, что в свою очередь и имел ввиду товарищ @Rod_K

1 час назад, AndreySol сказал(а):

обыкновенный отыгрыш неписями своей логики, с анимациями и воспроизведением прописанных звуков, и с определенной синхронизацией между схем.

По твоему именно с такой трактовкой должны все задавать вопросы в этой теме?

Изменено пользователем I am Dead
  • Не согласен 2
  • Сомнительно 1

Подарки

  • 2
  • Ссылка на комментарий

    Оффтоп:

    Скрытый текст

    Да ладно, чего зря оффтопить, всё равно без предоставленной проблемной логики гадать можно до морковкиного заговенья :biggrin:

     

    Ссылка на комментарий
    1 час назад, I am Dead сказал(а):

    Полнейший бред, уроки русского языка вам поучить, товарищ!

    В чём же там бред? Всё правильно. То что вы, мил человек, упоминали, есть не более чем сценки - логика + анимации + звуки. С точки зрения игры, диалог с неписями может вести только гг.

     Моя нычкаНычка в арендованном у Опричника холодильнике  

    Мы хорошие ребята, жаль патронов маловато:):ukostra:

    UriZzz.gif

    Ссылка на комментарий

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

    Здесь идет логика персонажа:

    [logic]
    active = remark1
    danger = danger_ignore
     
    [danger_ignore]
    ignore_distance = 5
     
    [remark1]
    no_move = true
    meet = meet@self
     
    [meet@self]
    use = {=dist_to_actor_le(12) -kvest_vodka_started} self
    meet_dialog = {-kvest_vodka_started} escape_trader_oops

    Она, до поры до времени, работала, но как только я начал дальше разрабатывать модификацию, начались баги. Теперь, при приближении актора к нпс, полностью пропадает возможность сдвинуться с места, а также диалоговое окно не появляется на экране. Прошу заметить, что раньше все отменно работало без нареканий, но теперь диалог не работает. Хотя, если актор сам начинает диалог (пишу вместо <start_dialog>escape_trader_oops</start_dialog> ---> <actor_dialog>escape_trader_oops</actor_dialog>, то диалог появляется и квест работает (нажимаю F и можно отвечать НПСу), если же начинает нпс, то диалог не показывается, хотя логика персонажа отчасти работает, поскольку при приближении к нпс что-то происходит ( блокируется движение).

    Добавлено  Опричник,

    Для "Спасибо" в каждом сообщении справа-внизу есть кнопки.

    Ссылка на комментарий

    @Rod_K , попробуй уменьшить дистанцию с 12 до, например, 5 метров. В движке на дистанцию, с которой можно начинать диалог, ограничение стоит, не помню только, какое именно. И, да - ремарк в качестве основной схемы - это моветон.

    Изменено пользователем naxac
    • Согласен 3

    Аддон для ОП-2.09.2: Яндекс/Google/GitHub

    naxac.gif


    Подарки

    Ссылка на комментарий
    7 часов назад, naxac сказал(а):

    И, да - ремарк в качестве основной схемы - это моветон.

    Много раз встречал подобное утверждение и до сих пор не знаю, что значит "основная/активная схема"? Объясните, пожалуйста.

    Изменено пользователем WinCap

    S.T.A.L.K.E.R. CoP Objects (upd 10.04.24)


    Подарки

  • Ссылка на комментарий

    @WinCap, под "основной схемой" подразумевается та схема, которая используется на постоянной основе для просто стоящего на месте NPC (или циклично перемещающего по определённым путям). Для этих целей используются walker и animpoint.

     

    Как правило, remark применяется исключительно для небольших сценок с последующим переходом на "основные схемы" (отыграл нужную анимацию/реплику в remark и снова перешёл в walker). Если использовать её в качестве постоянной, то NPC банально не вернётся "на своё место" после столкновения с противником (или если кто-то его случайно "отодвинет").

    • Согласен 1
    Ссылка на комментарий

    @naxac К сожалению, ничего не происходит. Актор при приближении к нпс убирает оружие, бинокль и т.д. и стоит на месте. Диалоговое окно не появляется.

    Ссылка на комментарий

    Очередное кострище ушло в свободное плаванье (переместилось метров на 5 вверх):

    2375746ebbe3t.jpg

    При этом координаты всех элеменетов костра одинаковые и указывают правильное местоположение:

    Скрытый текст
    
    
    [25.06.21 12:02:44.041] 1. smart_terrain -- bar_ecolog_kamp x=53.180000305176 y=-11.630000114441 z=-260.14001464844; id=15023; story_id=-1
    [25.06.21 12:02:44.041] 2. space_restrictor -- yan_campfire1_restr x=53.180000305176 y=-11.630000114441 z=-260.14001464844; id=15026; story_id=-1
    [25.06.21 12:02:44.042] 3. physic_object -- yan_campfire1 x=53.180000305176 y=-11.630000114441 z=-260.14001464844; id=15027; story_id=-1
    [25.06.21 12:02:44.108] 4. zone_flame_small -- yan_campfire1_flame x=53.180000305176 y=-11.630000114441 z=-260.14001464844; id=60440; story_id=804729
    [25.06.21 12:02:44.109] 5. lights_hanging_lamp -- yan_campfire1_light x=53.180000305176 y=-11.630000114441 z=-260.14001464844; id=60441; story_id=804730

     

    Написал функцию принудительного перемещения с помощью нет-пакетов - при выполнении кострище на мгновение исчезает, а затем вновь появляется на старом месте.

    Скрытый текст
    
    function test25062021()
        for i = 1, 65534 do    
            local obj = alife():object(i)
            if obj and obj:name()== "yan_campfire1" then
                --перемещение        
                local xpos=obj.position.x
                local ypos=obj.position.y
                local zpos=obj.position.z
                ypos=ypos+5    --на 5 метров вверх!
                local vPos = vector():set(xpos,ypos,zpos)
                local pk = m_netpk.net_cse_abstract(obj)
                if pk:isOk() then
                    log("!ОК!")
                    local status = pk:setCallback( function(data)
                        data.position  = vPos --/ change property 'position' in 'cse_abstract'
                    end )
                end            
            end
        end
    end

     

    Что это такое, и как это побороть (вернуть кострище на место!)?

    Изменено пользователем phalcor
    Ссылка на комментарий

    Можно ли скриптово, переместить актора на другую локацию без использования спавна? Или где можно подсмотреть подобное?


    Подарки

  • Ссылка на комментарий

    @Colder В некоторых спавнерах есть возможность телепортирования на другие Локи и был ещё мод "кпк разработчика" (если правильно помню название) ,там тоже есть такая возможность.

    • Спасибо 1

    Подарки

  • 2
  • Ссылка на комментарий

    @phalcor я пришел к выводу,что это проблема физики. Могу посоветовать только переспаун. В движке я пытался это исправить, но не уверен, получилось или нет. Точнее, не стал заморачиваться с проверкой, т.к. автоматический скриптовый переспаун, который уже работал на тот момент, меня устраивал.

    • Спасибо 1
    • Согласен 1
    Ссылка на комментарий

    @dsh Понятно, физика, будь она неладна. Удаляется кострище без проблем, а вот как его заспавнить из скрипта? 

    В распакованном алл-спавне нашёл его секцию, но что-то не соображу, как сделать спавн?

    Скрытый текст
    
    [8380]
    ; cse_abstract properties
    section_name = physic_object
    name = yan_campfire1
    position = 53.1800003051758,-11.6300001144409,-260.140014648438
    direction = 0,0,0
    unknown_id = 0
    script_version = 7
    
    ; cse_alife_object properties
    game_vertex_id = 1480
    distance = 0.300000011920929
    level_vertex_id = 66633
    object_flags = 0xffffff3a
    custom_data = <<END
    [collide]
    ignore_static
    END
    
    ; cse_visual properties
    visual_name = dynamics\koster\koster_palki
    
    ; cse_ph_skeleton properties
    skeleton_name = 
    skeleton_flags = 1
    
    ; cse_alife_object_physic properties
    physic_type = 0x3
    mass = 10
    fixed_bones = bone01


     


     

    Изменено пользователем phalcor
    Ссылка на комментарий
    28 минут назад, phalcor сказал(а):

    fixed_bones = bone01

    Тебе надо зафиксировать вот эту кость. Попробуй в свою функцию после data.position  = vPos добавить что-то типа 

     data.physic_type = 3
      data.mass        = 10
      data.fixed_bones = "bone01"

     

    Изменено пользователем Marafon6540
    • Спасибо 1
    Ссылка на комментарий
    2 hours ago, Marafon6540 said:

    Тебе надо зафиксировать вот эту кость.

    Это не поможет. В том месте, где происходит эта проблема, фиксированные кости не обрабатываются. Оно там о такой штуке просто не знает. Хотя это не отменяет необходимость фиксации костей. Но против этой проблемы - это не поможет.

    • Полезно 2
    Ссылка на комментарий

    @dsh 

    10 минут назад, dsh сказал(а):

    Это не поможет. 

    Ну пока да, не помогло. :(

    Если не сложно, подскажи, как ты из скрипта делаешь переспавн?

    Ссылка на комментарий

    Решил сделать фичу, как в ОП 2. При смерти ГГ выводится сообщение о том, что он сдох. Решил сделать также, но у меня не получилось.

    Вписал проверку жив ли ГГ в начальную инфопорцию. (Не знаю важно ли это) 

    info_portion id="storyline_actor_start">
     <task>storyline_eliminate_gunslinger</task>
        <action>my.god_spawn</action>
        <action>my.gg_podoh</action>
      </info_portion>

    Сам скрипт:

     

    function gg_podoh()

    if not db.actor:alive() then

    db.actor:give_info_portion("gg_pomer")

    end

     

    function sms_otpravka()

    local snd = sound_object([[device\pda\pda_tip]])

    local sactor = alife():actor()

    local cactor = level.object_by_id(sactor.id)

    snd:play_no_feedback(db.actor,sound_object.s2d, 5, vector():set(0, 0, 0), 0.7)

    cactor:give_game_news("Система:\\n%c[255,200,200,200]ГГ сдох.", "ui_iconsTotal_found_money", Frect():set(0,0,83,47), 5001, 8 000)

    end

    end

     

    Пробовал также через news_manager.send_tip. Но это не помогло.

    Сам поршень:

     

      <info_portion id="gg_pomer">

     <action>kalecheniy_death.sms_otpravka

    </action>

        </info_portion>

     

    Скорее всего скрипт неправильно написан, или же сообщения после смерти главного героя просто не отправляются. Уже кучу раз перепробовал и всё никак не получается. 

    Ссылка на комментарий

    Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

    Комментарии могут оставлять только зарегистрированные пользователи

    Создать аккаунт

    Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

    Зарегистрировать новый аккаунт

    Войти

    Есть аккаунт? Войти.

    Войти
    • Недавно просматривали   0 пользователей

      Ни один зарегистрированный пользователь не просматривает эту страницу.

    AMK-Team.ru

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