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

Скрипты для компаньона


Kane

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

На написания и описания действий в этом скрипте, у меня ушел вчера почти весь день.

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

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

 

Первый скрипт:

begin my_script_companion
; Далее идет блок для размещения игрока в локальной ячейке
short py
short pz
short px
short companion
;а вот и сам скрипт в общем то
set companion to 1 ;---дает возможность делить вещи
;заставит не тормозить в режиме меню
if ( menumode == 1 )
If ( GetPCSleep == 0 )
Return
EndIf
EndIf
;заставляет телепортироваться к игроку, когда он слишком далеко
set pz to ( player->getpos, z )
set px to ( player->getpos, x )
set py to ( player->getpos, y )
if ( getdistance, "player" >= 1500 ) ;меняйте число по своему желанию
if ( state == 1 )
setpos, z, pz
setpos, x, px
setpos, y, py
endif
endif
;далее пойдет управление адекватным вашему поведению поведение NPS
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
;далее чуть посложнее, вам придется создать несколько заклинаний, типа характеристики, в скрипте я назову их ( 1-хождение по воде, 2-водное дыхание, 3-левитация, 4-хамелион )
If ( Player->GetEffect sEffectLevitate == 1 ) ;это про левитацию
If ( GetCurrentAIPackage == 3 )
addspell, "3"
endif
else
removespell, "3"
EndIf
If ( Player->GetEffect sEffectWaterWalking == 1 ) ;хождение по воде
addspell, "1"
else
removespell, "1"
endif
if ( player->geteffect sEffectWaterBreathing == 1 )
addspell, "2"
else
removespell, "2"
endif
if ( player->geteffect, sEffectChameleon == 1 )
addspell, "4"
else
removespell, "4"
endif
;так а теперерь идет соотношение ваших навыков и навыков нпс оно чтоб не кушать наши ресурсы пойдет вторым скриптом, который будет включатся когда вы спите скрипт будет называться "my_scills"
If ( GetPCSleep == 1 )
StartScript "my_scills"
EndIf
end ;-конец первого скрипта

 

Второй скрипт:

begin my_scills
Short doonce
Short p_strength
Short p_willpower
Short p_intelligence
Short p_agility
Short p_endurance
Short p_personality
Short p_luck
Short c_strength
Short c_willpower
Short c_intelligence
Short c_agility
Short c_endurance
Short c_personality
Short c_luck
Short p_health
Short p_magicka
Short p_fatigue
Short p_attackbonus
Short p_defendbonus
Short p_resistmagicka
Short c_health
Short c_magicka
Short c_fatigue
Short p_longblade
Short p_bluntweapon
Short p_shortblade
Short p_spear
Short p_axe
Short p_handtohand
Short p_heavyarmor
Short p_mediumarmor
Short p_lightarmor
Short p_unarmored
Short p_block
; делает уровень как у игрока ( вплоть до десятого )
If ( Player->GetLevel == 1 )
SetLevel 1
ElseIf ( Player->GetLevel == 2 )
SetLevel 2
ElseIf ( Player->GetLevel == 3 )
SetLevel 3
ElseIf ( Player->GetLevel == 4 )
SetLevel 4
ElseIf ( Player->GetLevel == 5 )
SetLevel 5
ElseIf ( Player->GetLevel == 6 )
SetLevel 6
ElseIf ( Player->GetLevel == 7 )
SetLevel 7
ElseIf ( Player->GetLevel == 8 )
SetLevel 8
ElseIf ( Player->GetLevel == 9 )
SetLevel 9
ElseIf ( Player->GetLevel == 10 )
SetLevel 10
endif
;установка навыков
If ( doonce == 0 )
Set c_strength To ( Player->GetStrength )
Set c_willpower To ( Player->GetWillpower )
Set c_intelligence To ( Player->GetIntelligence )
Set c_agility To ( Player->GetAgility )
Set c_endurance To ( Player->GetEndurance )
Set c_personality To ( Player->GetPersonality )
Set c_luck To ( Player->GetLuck )
Set c_health To ( Player->Gethealth )
Set c_magicka To ( GetIntelligence )
Set c_fatigue To ( Player->GetFatigue )
Set doonce To 1
EndIf
Set p_strength To ( Player->GetStrength )
Set p_willpower To ( Player->GetWillpower )
Set p_intelligence To ( Player->GetIntelligence )
Set p_agility To ( Player->GetAgility )
Set p_endurance To ( Player->GetEndurance )
Set p_personality To ( Player->GetPersonality )
Set p_luck To ( Player->GetLuck )
Set p_health To ( Player->Gethealth )
Set p_magicka To ( GetIntelligence )
Set p_fatigue To ( Player->GetFatigue )
Set p_attackbonus To ( Player->GetAttackBonus )
Set p_defendbonus To ( Player->GetDefendBonus )
Set p_resistmagicka To ( Player->GetResistMagicka )
Set p_longblade To ( Player->Getlongblade )
Set p_bluntweapon To ( Player->Getbluntweapon )
Set p_shortblade To ( Player->Getshortblade )
Set p_spear To ( Player->Getspear )
Set p_axe To ( Player->Getaxe )
Set p_handtohand To ( Player->Gethandtohand )
Set p_heavyarmor To ( Player->Getheavyarmor )
Set p_mediumarmor To ( Player->Getmediumarmor )
Set p_lightarmor To ( Player->Getlightarmor )
Set p_unarmored To ( Player->Getunarmored )
Set p_block To ( Player->Getblock )
If ( p_strength <= c_strength )
SetStrength, c_strength
ElseIf ( p_strength > c_strength )
SetStrength, p_strength
Set c_strength To GetStrength
EndIf
If ( p_willpower <= c_willpower )
SetWillpower, c_willpower
ElseIf ( p_willpower > c_willpower )
SetWillpower, p_willpower
Set c_willpower To GetWillpower
EndIf
If ( p_intelligence <= c_intelligence )
SetIntelligence, c_intelligence
ElseIf ( p_intelligence > c_intelligence )
SetIntelligence, p_intelligence
Set c_intelligence To GetIntelligence
EndIf
If ( p_agility <= c_agility )
SetAgility, c_agility
ElseIf ( p_agility > c_agility )
SetAgility, p_agility
Set c_agility To GetAgility
EndIf
If ( p_endurance <= c_endurance )
SetEndurance, c_endurance
ElseIf ( p_endurance > c_endurance )
SetEndurance, p_endurance
Set c_endurance To GetEndurance
EndIf
If ( p_personality <= c_personality )
SetPersonality, c_personality
ElseIf ( p_personality > c_personality )
SetPersonality, p_personality
Set c_personality To GetPersonality
EndIf
If ( p_luck <= c_luck )
SetLuck, c_luck
ElseIf ( p_luck > c_luck )
SetLuck, p_luck
Set c_luck To GetLuck
EndIf
If ( p_health <= c_health )
SetHealth, c_health
ElseIf ( p_health > c_health )
SetHealth, p_health
Set c_health To GetHealth
EndIf
If ( p_magicka <= c_magicka )
SetMagicka, c_magicka
ElseIf ( p_magicka > c_magicka )
SetMagicka, p_magicka
Set c_magicka To GetMagicka
EndIf
If ( p_fatigue <= c_fatigue )
SetFatigue, c_fatigue
ElseIf ( p_fatigue > c_fatigue )
SetFatigue, p_fatigue
Set c_fatigue To GetFatigue
EndIf
SetAttackBonus, p_attackbonus
SetDefendBonus, p_defendbonus
SetResistMagicka, p_resistmagicka
SetLongBlade, p_longblade
SetBluntWeapon, p_bluntweapon
SetShortblade, p_shortblade
SetSpear, p_spear
SetAxe, p_axe
SetHandToHand, p_handtohand
SetHeavyArmor, p_heavyarmor
SetMediumArmor, p_mediumarmor
SetLightArmor, p_lightarmor
SetUnarmored, p_unarmored
SetBlock, p_block
stopscript, "myscills
end ;-конец второго скрипта

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

Спасибо, полезная вещь. Может добавишь ещё управление через диалоги, и инфу о состоянии? И да, Personality ему нафиг не нужно)
Ссылка на комментарий
Поделиться на другие сайты

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

И да, Personality ему нафиг не нужно)

Почему же...

 

Как появится время возможно накалякую более сложный скрипт.

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

  • 1 месяц спустя...
А если хочеться чтобы он был с теми характеристиками которые ты указал,и не всунуть в скрипт эти коды с характеристиками,то выйдет или нет?
Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...
А что нужно еще прописать в скрипте, чтоб компаньон сам нападал на приближающихся враждебных НПС/Кричеров? Как в плагине "Компаньон Джанин"
Ссылка на комментарий
Поделиться на другие сайты

А что нужно еще прописать в скрипте, чтоб компаньон сам нападал на приближающихся враждебных НПС/Кричеров? Как в плагине "Компаньон Джанин"

Посмотри в прилагающемся к компаньону CI_Global.esp - там глобальный скрипт, спелл, которым надо помечать того, кто будет враждебных кричуронеписей до игрока атаковать да пара переменных, которые я не знаю, для чего нужны.

Изменено пользователем bi-666
Ссылка на комментарий
Поделиться на другие сайты

Это не для МВСЕ который?

Он самый.

А что нужно еще прописать в скрипте, чтоб компаньон сам нападал на приближающихся враждебных НПС/Кричеров? Как в плагине "Компаньон Джанин"

Обычными средствами это не реализовать.

 

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

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

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

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

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

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

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

Войти

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

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

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