「OnConversation」の編集履歴(バックアップ)一覧はこちら
「OnConversation」(2005/12/01 (木) 21:25:44) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
----
・OnConversationに入るスクリプト。
・メッセージを聞いた時に発動する。
----
#Contents
**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));
}
}
----
・OnConversationに入るスクリプト。
・メッセージを聞いた時に発動する。
----
#Contents
**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));
}
}