「OnDamaged」の編集履歴(バックアップ)一覧はこちら

OnDamaged」(2005/12/01 (木) 21:46:28) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

---- ・OnDamagedに入るスクリプト。 ・ダメージを受けた時に発動する。 ---- #Contents **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)); } }
---- ・OnDamagedに入るスクリプト。 ・ダメージを受けた時に発動する。 ---- #Contents **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)); } }

表示オプション

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