※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。



  • OnPerceptionに入るスクリプト。
  • 対象を知覚した時に発動する。(視覚&聴覚)


NWNデフォルト(翻訳付き)

#include "nw_i0_generic"

void main()
{
	if(GetFleeToExit()) {
		// 逃げる場所が設定されてるなら逃げる
		ActivateFleeToExit();
	} else if (GetSpawnInCondition(NW_FLAG_SET_WARNINGS)) {
		// 攻撃する前に一つの警告を与えますが…完全に実装していません
		SetSpawnInCondition(NW_FLAG_SET_WARNINGS, FALSE);

		//Put a check in to see if this attacker was the last attacker
		//Possibly change the GetNPCWarning function to make the check
	} else {
		object oAttacker = GetLastAttacker();
		if (!GetIsObjectValid(oAttacker)) {
			// 見失った相手には何もしない
		} else if (!GetIsFighting(OBJECT_SELF)) {
			// この場合誰とも戦っていないので、攻撃してきた相手と戦いはじめる
			if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) {
				SetSummonHelpIfAttacked();
				//特定のエンカウンターをオンにする
				DetermineSpecialBehavior(oAttacker);
				//草食、肉食、その他に相応しい行動を取る
			} else if (GetArea(oAttacker) == GetArea(OBJECT_SELF)) {
				SetSummonHelpIfAttacked();
				//特定のエンカウンターをオンにする
				DetermineCombatRound(oAttacker);
				//戦闘行動を取る
			}

			//コンディションが設定されてるなら仲間に攻撃命令を出す
			SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);

			//自分が攻撃していることを伝える
			SpeakString("NW_I_WAS_ATTACKED", TALKVOLUME_SILENT_TALK);
		}
	}


	if(GetSpawnInCondition(NW_FLAG_ATTACK_EVENT))
	{
		SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_ATTACKED));
	}
}