Перейти к содержанию

Как понижать компаньона?


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

Заметил, если дать компаньону предмет с постоянным эффектом левитации, в экстерьере он будет все время подиматься все выше, драка с кем-то заставляет его понижаться, но потом при движении все равно поднимается и становится бесполезен, а если зайти в интерьер и выйти, падает с огромной высоты и умирает. Как исправить это скриптом? Думал сделать это через отслеживание координат игрока, чтобы когда из-за его высоты он на огромной дистанции, перемещать его к игроку (взял идею из плагина, улучшающего компаньонов):

Begin DreamerServant

short noLore
short companion
short doOnce
short fightOnce
short py
short pz
short px
short satellit
;short state

if ( MenuMode == 1 )
    if ( GetPCSleep == 0 )
        return
    endif
endIf

if ( fightOnce != 1 )
    if ( GetPCRank "Sixth House" > -1 )
        SetFight 30
        set fightOnce to 1
    endif
endif

if ( doOnce != 1 )
    if ( GetPCRank "Sixth House" >= 6 )
        addtopic "прислуживать"
        set doOnce to 1
    endif
endif

if ( satellit == 1 )
    set pz to ( player->getpos, z )
    set px to ( player->getpos, x )
    set py to ( player->getpos, y )

    if ( getdistance, "player" >= 1500 )
;        if ( state == 0 )
            setpos, z, pz
            setpos, x, px
            setpos, y, py
;            set state to 1
;        elseif ( state == 1 )
;            set state to 0
;    endif
    endif

    if ( GetDistance Player > 350 )
        ForceRun
    elseif ( GetDistance Player < 300 )
        ClearForceRun
    endif

    if ( Player->GetPCSneaking == 1 )
        ForceSneak
    elseif ( Player->GetPCSneaking == 0 )
        ClearForceSneak
    endif

    if ( GetCurrentAIPackage == 3 )
        if ( getdistance, "player" <= 150 )
            if ( getpcjumping == 1 )
                ForceMoveJump
            endif
        endif
    endif

    if ( GetCurrentAIPackage == 3 )
        if ( getpcjumping == 0 )
            if ( getforcejump == 1 )
                clearForceJump
            endif
        endif
    endif
endif

end DreamerServant

, но теперь он при большой высоте вообще куда-то исчезает, решил проверить по консоли динамику его переменных и в этот момент он исчезает и из консоли так, словно бы я убирал его командой SetDelete.

Ссылка на комментарий
Поделиться на другие сайты

Эта переменная в диалоге устанавливается, чтобы они следовали за мной только когда я им прикажу. Переустановил порядок setpos, теперь он хотя бы не исчезает, но когда отлетел от него подльше, он просто на месте застрял, меня не видит, а когда вошел в интерьер и вышел, куда-то исчез, провалился что ли.
https://ibb.co/bLzRDZM

Ссылка на комментарий
Поделиться на другие сайты

Разобрался, в том плагине был неправильно установлен тип переменных, в которых записываются координаты игрока, надо float, а не short, теперь все работает (характеристики: 1_sat_spells_1 - левитация 100, нужна, потому что когда мантии с постоянным эффектом левитации на мне и на приспешнике, а я улетаю слишком далеко, он устанавливается рядом со мной с деактивированной мантией и упал бы без этого; 1_sat_spells_2 - хождение по воде, 1_sat_spells_3 - водное дыхание, 1_sat_spells_4 - хамелеон 80%; также установил, чтобы не возвращался к игроку, когда он обнажил оружие или приготовил заклинание, чтобы если начнется битва с врагом, можно было бы отлететь и посмотреть издали, если захочется):

Begin DreamerServant

float px
float py
float pz
short noLore
short companion
short doOnce
short fightOnce
short satellit
short state

if ( MenuMode == 1 )
    if ( GetPCSleep == 0 )
        return
    endif
endIf

if ( fightOnce != 1 )
    if ( GetPCRank "Sixth House" > -1 )
        SetFight 30
        set fightOnce to 1
    endif
endif

if ( doOnce != 1 )
    if ( GetPCRank "Sixth House" >= 6 )
        addtopic "прислуживать"
        set doOnce to 1
    endif
endif

if ( satellit == 1 )
    set px to ( player->getpos, x )
    set py to ( player->getpos, y )
    set pz to ( player->getpos, z )

    if ( getdistance, "player" >= 1500 )
        if ( GetWeaponDrawn == 0 )
            if ( GetSpellReadied == 0 )
                if ( state == 0 )
                    setpos, x, px
                    setpos, y, py
                    setpos, z, pz
                    set state to 1
                endif
            endif
        endif
    elseif ( getdistance, "player" < 1500 )
        if  ( getdistance, "player" > 350 )
            ForceRun
            if ( state == 1 )
                set state to 0
            endif
        elseif ( getdistance, "player" < 350 )
            ClearForceRun
            if ( state == 1 )
                set state to 0
            endif
        endif
    endif

    if ( Player->GetPCSneaking == 1 )
        ForceSneak
    elseif ( Player->GetPCSneaking == 0 )
        ClearForceSneak
    endif

    if ( GetCurrentAIPackage == 3 )
        if ( getdistance, "player" <= 150 )
            if ( getpcjumping == 1 )
                ForceMoveJump
            endif
        endif
    endif

    if ( GetCurrentAIPackage == 3 )
        if ( getpcjumping == 0 )
            if ( getforcejump == 1 )
                clearForceJump
            endif
        endif
    endif

    if ( Player->GetEffect sEffectLevitate == 1 )
        addspell, "1_sat_spells_1"
    else
        removespell, "1_sat_spells_1"
    endif

    if ( Player->GetEffect sEffectWaterWalking == 1 )
        addspell, "1_sat_spells_2"
    else
        removespell, "1_sat_spells_2"
    endif

    if ( player->geteffect sEffectWaterBreathing == 1 )
        addspell, "1_sat_spells_3"
    else
        removespell, "1_sat_spells_3"
    endif

    if ( player->geteffect, sEffectChameleon == 1 )
        addspell, "1_sat_spells_4"
    else
        removespell, "1_sat_spells_4"
    endif

endif

if ( OnDeath == 1 )
    set satellit to 0
endif

end DreamerServant

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

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

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...