Home Random Page


CATEGORIES:

BiologyChemistryConstructionCultureEcologyEconomyElectronicsFinanceGeographyHistoryInformaticsLawMathematicsMechanicsMedicineOtherPedagogyPhilosophyPhysicsPolicyPsychologySociologySportTourism






Short AllowWerewolfForceGreeting 4 page

Для сложного скриптнига Актеров возможна переменная, в которой хранится значение текущего типа ИИ и от которой зависят действия скрипта.

 

GetCurrentAIPackage(returns short)

 

If ( GetCurrentAIPackage == 2 )

[делать что-то]

endif

 

Возвращаемые значения:

Никакой -1
Wander (Бродить)
Travel (Идти)
Escort (Эскорт)
Follow (Следовать)
Activate (Активировать)
Pursue (Преследовать)

 

Заставляем актера красться

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: 650


<== previous page | next page ==>
Short AllowWerewolfForceGreeting 3 page | Short AllowWerewolfForceGreeting 5 page
doclecture.net - lectures - 2014-2024 year. Copyright infringement or personal data (0.015 sec.)