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



  • OnConversationに入るスクリプト。
  • メッセージを聞いた時に発動する。


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

#include "nw_i0_generic"

void main()
{
	// 石になってる時は飛ばす
	if (GetHasEffect(EFFECT_TYPE_PETRIFY, OBJECT_SELF) == TRUE)
	{
		return;
	}
	
	// 死んでる時も飛ばす
	if (GetIsDead(OBJECT_SELF) == TRUE)
	{
		return;
	}

	// 特定のパターンを数値に変換して習得する
	// 話者を習得する
	int nMatch = GetListenPatternNumber();
	object oShouter = GetLastSpeaker();

	if (nMatch == -1)
	{
		// どのパターンの会話でも無い場合は普通にカンバセーションを始める
		if (GetCommandable(OBJECT_SELF))
		{
			ClearActions(CLEAR_NW_C2_DEFAULT4_29);
			BeginConversation();
		}
		else
		//チャーム状態ならカンバセーションを開始する
		if (GetHasEffect(EFFECT_TYPE_CHARMED) == TRUE)
		{
			ClearActions(CLEAR_NW_C2_DEFAULT4_29);
			BeginConversation();
		}
	}
	// PC以外の仲間からの呼びかけに答える
	else if (GetIsObjectValid(oShouter)
			   && !GetIsPC(oShouter)
			   && GetIsFriend(oShouter))
	{
		object oIntruder = OBJECT_INVALID;
		// もしあるなら侵入者を決定してください
		if(nMatch == 4)
		{
			//叫んだ仲間が持っている"NW_BLOCKER_INTRUDER"関数をoIntruderとして習得
			oIntruder = GetLocalObject(oShouter, "NW_BLOCKER_INTRUDER");
		}
		else if (nMatch == 5)
		{
			//叫んだ仲間に最後に敵対行動をした相手をoIntruderとして習得
			oIntruder = GetLastHostileActor(oShouter);
			if(!GetIsObjectValid(oIntruder))
			{
				//見つからなかったら、自分が攻撃していた相手を習得します
				oIntruder = GetAttemptedAttackTarget();
				if(!GetIsObjectValid(oIntruder))
				{
					//それも駄目なら、呪文を唱えようとした相手を習得します
					oIntruder = GetAttemptedSpellTarget();
					if(!GetIsObjectValid(oIntruder))
					{
						oIntruder = OBJECT_INVALID;
					}
				}
			}
		}

		// oIntruderに警戒するように返事をします。
		// 最初の敵を見失った仲間に戻って来いと言う。
		RespondToShout(oShouter, nMatch, oIntruder);
	}

	// Send the user-defined event if appropriate
	if(GetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT))
	{
		SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DIALOGUE));
	}
}