「OnHeartbeat」の編集履歴(バックアップ)一覧はこちら
「OnHeartbeat」(2005/12/01 (木) 22:04:40) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
----
・OnHeartbeatに入るスクリプト。
・最短6秒置きに発動する。
----
#Contents
**NWNデフォルト(翻訳付き)
void main()
{
if(GetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY))
//自分のコンディションNW_FLAG_FAST_BUFF_ENEMYが真の場合は真
{
if(TalentAdvancedBuff(40.0))
//40フィート以内のクリーチャーに強化を使用した場合は真
{
SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY, FALSE);
//自分のコンディションNW_FLAG_FAST_BUFF_ENEMYを偽にする
return;
//終了
}
}
if(GetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING))
//自分のコンディションNW_FLAG_DAY_NIGHT_POSTINGが真の場合は真
{
int nDay = FALSE;
//nDayをFALSEに設定する
if(GetIsDay() || GetIsDawn())
//現在日中、または日の出の場合は真
{
nDay = TRUE;
//nDayをTRUEに設定する
}
if(GetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT") != nDay)
//自分の所持する関数NW_GENERIC_DAY_NIGHTと、nDayが同一でない場合は真
{
if(nDay == TRUE)
//nDayがTRUEの場合は真
{
SetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", TRUE);
//自身が持つ関数NW_GENERIC_DAY_NIGHTをTRUEに設定する
}
else
{
SetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", FALSE);
//自身が持つ関数NW_GENERIC_DAY_NIGHTをFALSEに設定する
}
WalkWayPoints();
//次のウェイポイントに歩いて移動する
}
}
if(!GetHasEffect(EFFECT_TYPE_SLEEP))
//自分に睡眠のエフェクトが掛かってない場合は真
{
if(!GetIsPostOrWalking())
//指定されたウェイポイントを持ってない場合は真
{
if(!GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget()))
//自分が戦闘中で無い場合は真
{
if(!GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN)))
//最も近い対象が「自分にとって、対象の評判が敵対的で、対象が視認できる場合」は真
{
if(!GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL) && !IsInConversation(OBJECT_SELF))
//自分の振る舞いが設定されてない、かつ会話状態でない場合は真
{
if(GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS) || GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN))
//自分のコンディションが暇つぶし状態の場合は真
{
PlayMobileAmbientAnimations();
//暇つぶしアニメーションをする
}
else if(GetIsEncounterCreature() &&
!GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN)))
//自分がエンカウンターから発生した場合、
//かつ最も近い対象が「自分にとって、対象の評判が敵対的で、対象が視認できる場合」は真
{
PlayMobileAmbientAnimations();
//暇つぶしアニメーションをする
}
else if(GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS) &&
!GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN)))
//自分のコンディションがNW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS、
//かつ最も近い対象が「自分にとって、対象の評判が敵対的で、対象が視認できる場合」は真
{
PlayImmobileAmbientAnimations();
//暇つぶしアニメーションをする
}
}
else
{
DetermineSpecialBehavior();
//草食・肉食・その他に適した行動をする。
}
}
else
{
//DetermineCombatRound();
//これをオンにすると無差別に襲い掛かる。
}
}
}
}
else
{
if(GetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT))
//自身のコンディションの夜寝る設定(NW_FLAG_SLEEPING_AT_NIGHT)が真の場合は真
{
effect eVis = EffectVisualEffect(VFX_IMP_SLEEP);
//関数eVisに睡眠の視覚エフェクトを設定する
if(d10() > 6)
//ダイス判定1d10が6以下の場合は真
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
//自分に睡眠の視覚エフェクトを一瞬発生させる。
}
}
}
if(GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1001));
}
}
----
・OnHeartbeatに入るスクリプト。
・最短6秒置きに発動する。
----
#include "nw_i0_generic"
void main()
{
// AIレベルが低い時はここでスクリプトを終了します
if (GetAILevel() == AI_LEVEL_VERY_LOW) return;
// 強化魔法を使うコンディションが設定されていた場合
if(GetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY))
{
// 40m以内に居る仲間に対して強化魔法を使います
if(TalentAdvancedBuff(40.0))
{
// 一発打ったらコンディションを無効化します
SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY, FALSE);
//ここでユーザーイベントをすっ飛ばして終了します
return;
}
}
//既に寝てる時はコレを実行します
if(GetHasEffect(EFFECT_TYPE_SLEEP))
{
//夜寝るコンディションがオンの場合
if(GetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT))
{
//10分の6の確立でSLEEPのエフェクトを与えます
effect eVis = EffectVisualEffect(VFX_IMP_SLEEP);
if(d10() > 6)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
}
}
}
// ウェイポイントを歩く
else if ( GetWalkCondition(NW_WALK_FLAG_CONSTANT) )
{
WalkWayPoints();
}
// ここでアニメーションするかどうかをチェックします。
// 現在戦っているならこの部分は飛ばします
else if ( !GetIsObjectValid(GetAttemptedAttackTarget())
&& !GetIsObjectValid(GetAttemptedSpellTarget())
// && !GetIsPostOrWalking())
&& !GetIsObjectValid(GetNearestSeenEnemy()))
{
//肉食・草食・その他が設定されている場合
if (GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL) || GetBehaviorState(NW_FLAG_BEHAVIOR_OMNIVORE) ||
GetBehaviorState(NW_FLAG_BEHAVIOR_HERBIVORE))
{
// 肉食・草食・その他に相応しい行動を取ります
DetermineSpecialBehavior();
}
//そうでない場合で
else if (!IsInConversation(OBJECT_SELF))
{
//暇つぶしアニメのコンディションがオンになってたら
if (GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS)
|| GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN)
|| GetIsEncounterCreature())
{
//ぶらぶら歩き回って、仲間と喋る動きをします
PlayMobileAmbientAnimations();
}
else if (GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS))
{
//立ったまま細かい動きをします
PlayImmobileAmbientAnimations();
}
}
}
// Send the user-defined event signal if specified
if(GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_HEARTBEAT));
}
}