Kane Опубликовано 25 февраля, 2009 Жалоба Поделиться Опубликовано 25 февраля, 2009 На написания и описания действий в этом скрипте, у меня ушел вчера почти весь день.Версия несколько упрощенная требующая минимум знаний. Компаньон будет красться, когда вы крадетесь. Прыгать когда прыгаете вы, бежать только в тот момент когда отдаляется от вас достаточно далеко. Так же ваш компаньон будет иметь навыки аналогичные вашим. Плюс пожалуй не помешает задать ему возможность перемещаться на ваше местоположение, если вы отошли совсем уж далеко.Ну и на пока по моему более, чем достаточно. Потому что при добавлении дальнейших умений нам потребуется приличное знание диалогов и скрипты будут уже не универсальными, а в расчете на одного 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 ;-конец второго скрипта Ссылка на комментарий Поделиться на другие сайты Поделиться
Ao3 Опубликовано 26 февраля, 2009 Жалоба Поделиться Опубликовано 26 февраля, 2009 Спасибо, полезная вещь. Может добавишь ещё управление через диалоги, и инфу о состоянии? И да, Personality ему нафиг не нужно) Ссылка на комментарий Поделиться на другие сайты Поделиться
Kane Опубликовано 26 февраля, 2009 Автор Жалоба Поделиться Опубликовано 26 февраля, 2009 (изменено) Это упрошенный вариант для тех кто не умеет делать диалоги, или ему это не нужно. Это также может служить образцом для создания более сложных скриптов.И да, Personality ему нафиг не нужно)Почему же... Как появится время возможно накалякую более сложный скрипт. Изменено 26 февраля, 2009 пользователем Kane Ссылка на комментарий Поделиться на другие сайты Поделиться
Unfecto Опубликовано 30 марта, 2009 Жалоба Поделиться Опубликовано 30 марта, 2009 А если хочеться чтобы он был с теми характеристиками которые ты указал,и не всунуть в скрипт эти коды с характеристиками,то выйдет или нет? Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 5 июля, 2010 Жалоба Поделиться Опубликовано 5 июля, 2010 А что нужно еще прописать в скрипте, чтоб компаньон сам нападал на приближающихся враждебных НПС/Кричеров? Как в плагине "Компаньон Джанин" Ссылка на комментарий Поделиться на другие сайты Поделиться
bi-666 Опубликовано 5 июля, 2010 Жалоба Поделиться Опубликовано 5 июля, 2010 (изменено) А что нужно еще прописать в скрипте, чтоб компаньон сам нападал на приближающихся враждебных НПС/Кричеров? Как в плагине "Компаньон Джанин"Посмотри в прилагающемся к компаньону CI_Global.esp - там глобальный скрипт, спелл, которым надо помечать того, кто будет враждебных кричуронеписей до игрока атаковать да пара переменных, которые я не знаю, для чего нужны. Изменено 5 июля, 2010 пользователем bi-666 Ссылка на комментарий Поделиться на другие сайты Поделиться
Ao3 Опубликовано 5 июля, 2010 Жалоба Поделиться Опубликовано 5 июля, 2010 Это не для МВСЕ который? Я с ним работать не умею, но хотелось бы знать как работает этот скрипт. Ссылка на комментарий Поделиться на другие сайты Поделиться
Kane Опубликовано 5 июля, 2010 Автор Жалоба Поделиться Опубликовано 5 июля, 2010 Это не для МВСЕ который?Он самый.А что нужно еще прописать в скрипте, чтоб компаньон сам нападал на приближающихся враждебных НПС/Кричеров? Как в плагине "Компаньон Джанин"Обычными средствами это не реализовать. Месяц назад начал пробовать писать скрипт для компаньона с фичами как в Джулиане. Пока что прогресс не очень заметный. Слишком много нужно держать значений в голове, из-за чего часто пропускаю их, потом могу час искать ошибку. Пока что сделать убер-умного и реалистичного компаньона в далеких планах. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти