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



  • OnDamagedに入るスクリプト。
  • ダメージを受けた時に発動する。


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

#include "nw_i0_generic"
	
void main()
{
	if(GetFleeToExit()) {
		// 逃走可能であるか調べます。
	} else if (GetSpawnInCondition(NW_FLAG_SET_WARNINGS)) {
		// (NW_FLAG_SET_WARNINGS)がオンになっていた場合何もしません
	} else {
		object oDamager = GetLastDamager();
		// 最後にダメージを受けたクリーチャーをoDamagerとして習得します
		if (!GetIsObjectValid(oDamager)) {
			// 自分にダメージを与えた相手を確認できない場合。
		} else if (!GetIsFighting(OBJECT_SELF)) {
			// 自分が誰とも戦って無い場合は~
			if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) {
				DetermineSpecialBehavior(oDamager);
				//草食・肉食・その他に適した行動を取る
			} else {
				if(!GetObjectSeen(oDamager)
				   && GetArea(OBJECT_SELF) == GetArea(oDamager)) {
					// 対象が見えない場合も攻撃者が元居た位置まで移動して、
					// その後で改めて攻撃しようとする
					ActionMoveToLocation(GetLocation(oDamager), TRUE);
					ActionDoCommand(DetermineCombatRound());
				} else {
					// 敵がモロ見えの場合は攻撃する
					DetermineCombatRound();
				}
			}
		} else {
			// ここからは既に戦っている場合~
			// より強力な敵に攻撃されたら切り替わると考えて下さい。
			object oTarget = GetAttackTarget();
			// 自分が攻撃している相手を習得します
			if (!GetIsObjectValid(oTarget))
				oTarget = GetAttemptedAttackTarget();
				//それが駄目なら過去に攻撃した相手
			if (!GetIsObjectValid(oTarget))
				oTarget = GetAttemptedSpellTarget();
				//それも駄目なら過去に呪文を唱えた相手を習得

			// 一撃で自分のHPの25%を奪った相手
			// または今攻撃している相手よりHDが2高い相手に狙いを変えます
			if (!GetIsObjectValid(oTarget)
				|| (
					oTarget != oDamager
					&&  (
						 GetTotalDamageDealt() > (GetMaxHitPoints(OBJECT_SELF) / 4)
						 || (GetHitDice(oDamager) - 2) > GetHitDice(oTarget)
						 )
					)
				)
			{
				// Switch targets
				DetermineCombatRound(oDamager);
			}
		}
	}

	// Send the user-defined event signal
	if(GetSpawnInCondition(NW_FLAG_DAMAGED_EVENT))
	{
		SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DAMAGED));
	}
}