![]() CATEGORIES: BiologyChemistryConstructionCultureEcologyEconomyElectronicsFinanceGeographyHistoryInformaticsLawMathematicsMechanicsMedicineOtherPedagogyPhilosophyPhysicsPolicyPsychologySociologySportTourism |
Short AllowWerewolfForceGreeting 4 pageДля сложного скриптнига Актеров возможна переменная, в которой хранится значение текущего типа ИИ и от которой зависят действия скрипта.
GetCurrentAIPackage(returns short)
If ( GetCurrentAIPackage == 2 ) [делать что-то] endif
Возвращаемые значения:
Заставляем актера красться ForceSneak ClearForceSneak "Actor_ID" -> ForceSneak
GetForceSneak (returns Boolean/short) If ( "actor_ID" -> GetForceSneak == 1 )
Команда ForceSneak переводит актера в режим скрытности, все движения будут выполняться, как будто он крадется. ClearForceSneak завершает режим ForceSneak. К сожалению, нет соответствующей команды для бега (добавлена в Трибунале). GetForceSneak возвращает 1, если режим ForceSneak для вызывающего актера включен. Смотрите LookoutScript для примера. Вот отрывок:
elseif ( walkstate == 2 ) Fargoth->ForceSneak ; войти в режим скрытности Fargoth->AiTravel -11468.595,-71511.531,173.728 ;идти к дереву set walkstate to 3
elseif ( walkstate == 3 ) if ( Fargoth->GetAiPackageDone == 1 ) ;Fargoth->Equip "torch_infinite_time_unique" set walkstate to 4 ;MessageBox "ДОЛЖЕН БЫТЬ У ДЕРЕВА" endif
elseif ( walkstate == 4 )
set timer to timer + GetSecondsPassed
Fargoth->ClearForceSneak ; выйти из режима скрытности Fargoth->AiWander 0 0 0 0 0 0 0 0 0
if ( timer > 3 ) Fargoth->ForceSneak ; снова вйоти в режим скрытности Fargoth->AiTravel -11410.590,-72057.188,133.644 ;идти к стене set walkstate to 5 endif Заставляем актера бегать и прыгать: Движения в Трибунале ForceRun ClearForceRun GetForceRun(short)
ForceJump ClearForceJump GetForceJump(short)
ForceMoveJump ClearForceMoveJump GetForceMoveJump(short)
Все эти функции управляют движением указанного NPC. ForceRun заставляет актера всегда бежать при движении, ForceJump заставляет актера постоянно прыгать, ForceMoveJump заставляет актера постоянно прыгать при движении. Версии функций с Get возвращают 1, если NPC был принужден войти в эти режимы, и 0 в противном случае. Функции Clear используются для сброса эти режимов. Каждый NPC может быть только в одном из этих режимов одновременно. Приоритет для этих режимов: Sneak > Running > Jump > MoveJump.
Пример: Этот скрипт позволяет объекту контролировать тип движения Athlete (Атлет), NPC, который бесконечно движется по квадрату с четырьмя точками-углами.
Begin AthleteControl
short questionAsked short button short isrunning short isjumping
if ( MenuMode ) return endif
if ( OnActivate == 1 ) set isrunning to ( Athlete->GetForceRun ) set isjumping to ( Athlete->GetForceMoveJump ) if ( questionAsked == 0 ) if ( isrunning ) MessageBox, "Атлет должен прекратить бежать? " "Да" "Нет" else MessageBox, "Заставить Атлета бежать? " "Да" "Нет" endif set questionAsked to 1 endif endif
if ( questionAsked == 1 ) set button to GetButtonPressed if ( button == -1 ) else if ( isrunning == 0 ) if ( button == 0 ) Athlete->ClearForceMoveJump Athlete->ForceRun endif else if ( button == 0 ) Athlete->ClearForceRun endif endif if ( isjumping ) MessageBox, "Атлет должен прекратить прыгать? " "Да" "Нет" else MessageBox, "Заставить Атлета прыгать? " "Да" "Нет" endif set questionAsked to 2 set button to –1 endif endif
if ( questionAsked == 2 ) set button to GetButtonPressed if ( button == -1 ) else if ( isjumping == 0 ) if ( button == 0 ) Athlete->ClearForceRun Athlete->ForceMoveJump endif else if ( button == 0 ) Athlete->ClearForceMoveJump endif endif set questionAsked to 0 set button to –1 endif endif end Проверка действий игрока: бежит, прыгает, крадется? [no fix] GetPCSneaking(short) [no fix] GetPCRunning(short) [no fix] GetPCJumping(short)
if ( GetPCRunning )
Эти функции возвращают 1, если игрок выполняет подходящее действие, и 0 – если нет. Поскольку в Морре нет функций прямого тестирования ввода с клавиатуры, это альтернативный способ проверить, что игрок нажал определенную клавишу. Они широко используются в движущихся кораблях, лошадях или в моем моде про скалолазание.
Пример: Когда этот скрипт помещен на NPC и игрок имеет надетый предмет scissors, появляются сообщения о действиях игрока.
Begin momscript
short warn
if ( player->HasItemEquipped "scissors" ) if ( warn != 1 ) if ( GetPCRunning ) MessageBox "Не бегай с ножницами!" set warn to 1 endif endif if ( warn != 2 ) if ( GetPCJumping ) MessageBox "Не прыгай с ножницами! Ты себе глаз выколешь!" set warn to 2 endif endif if ( warn != 3 ) if ( GetPCSneaking ) MessageBox "Ты не спрячешь ножницы от меня!" set warn to 3 endif endif else set warn to 0 endif
end Определение готовности к бою GetWeaponDrawn(short) GetSpellReadied(short)
if ( player -> GetWeaponDrawn )
Эти функции могут использоваться для определения, достал ли Актер свое оружие (GetWeaponDrawn) или приготовил заклинание для кастинга[29] (GetSpellReadied).
Пример: Этот глобальный скрипт выдает сообщения о состоянии готовности оружия и заклинаний.
Begin player_notifications
short weapstate short spelstate
if ( player->GetWeaponDrawn ) if ( weapstate != 1 ) set weapstate to 1 MessageBox "Игрок вытащил оружие." Endif else if ( weapstate != 0 ) set weapstate to 0 MessageBox "Игрок зачехлил оружие." Endif endif
if ( player->GetSpellReadied ) if ( spelstate != 1 ) set spelstate to 1 MessageBox "Игрок приготовил заклинание." Endif else if ( spelstate != 0 ) set spelstate to 0 MessageBox "Игрок отложил вызов заклинания." Endif endif
end
Заставляем кого-то падать Fall
Actor -> Fall
Похоже, дает NPC дополнительный толчок вниз, который им необходим, даже когда вы убрали пол у них под ногами. Также спускает вниз летающие существа. Используется на падающем товарище с Полетом Икара. Когда я пытался применить ее на игроке в моем моде про скалолазание, она иногда телепортировала, а не спускала игрока прямо на землю под ним.
Доля в экипировке и другие функции компаньонов [no fix] companion (is local short)
short companion Set companion to 1
В Трибунале есть опция для дележа вещей с NPC и монстрами. Что ее включить, объявите локальную переменную типа short с именем companion и установит ее в 1. Установка в 0 отключит возможность дележа.
[no fix] minimumprofit (is local float)
Float minimumprofit If ( minimumprofit < 0 )
Похоже, еще одна переменная, устанавливаемая игрой, видимо, разница между текущей ценой все вещей и золота минус начальное значение. Если она отрицательна, то наемник может быть заскриптован на уход от игрока. Пример:Вот важная часть скрипта Калвуса (наемник в Морнхолде). Эта секция оперирует изменением состояния, когда Калвус разрывает контракт, или потому что срок контракта истек, или потому что игрок взял вещи Калвуса. Дележ запускается в диалоге (установкой companion в 1), не в самом скрипте.
if ( GetJournalIndex Merc_Calvus_Quit < 1 ) ;если Калвус уже ушел, не делать этого if ( Contract_Calvus == 1 ) ;если Калвус не заключил контракт, не делать этого if ( minimumProfit < 0 ) ;Калвус уходит, так как игрок взял его вещи AiWander 128 6 0 40 30 20 0 0 0 0 0 0 Set Companion to 0;прекаратить дележ StopScript Contract_Calvus Set Contract_Calvus to 0 ForceGreeting return else if ( Contract_Calvus == 0 ) ;управляет Калвусом после истечения срока AiWander 128 6 0 40 30 20 0 0 0 0 0 0 Set Companion to 0;прекратить дележ if ( GetJournalIndex Merc_Calvus < 10 ) Journal Merc_Calvus 10 ;первый контракт истек else Journal Merc_Calvus 20 ; самый недавний контракт истек endif endif endif endif endif
[no fix] StayOutside (is local float)
short StayOutside set StayOutside to 1
Ценная переменная для использования с компаньонами. Когда используется в скрипте, она заставляет всякого, у кого установлена в 1, автоматически оставаться (и ждать) снаружи любого интерьера, пока игрок не вернется (потом автоматически с ним соединяется). (Информация с форумов / Grumpy) Date: 2015-12-17; view: 751
|