「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)); } }

表示オプション

横に並べて表示:
変化行の前後のみ表示: