炎ダメージエリア(OnEnterOn&HeartBeat)
/**********************[炎ダメージエリア]*********************
入って来た対象に指定属性のダメージを指定数与える。
OnEnter OnHeartBeatの二種類があることに注意、間違えるとヤバい。
int VG_AREA_DMG_REFLEX 反応セーブDC デフォルトは14
成功するとダメージ半減、身かわし強化があるならダメージ無し。
int VG_AREA_DMG_AMOUNT ダメージの量 デフォルトは10
int VG_AREA_DMG_CONDITION 1以上ならダメージを与える、0なら無反応
***********************************************************************/
//OnEnter 単独で使うと特定トリガー内に入った対象に一度だけ影響を及ぼす
void main()
{
int nCondition = GetLocalInt(OBJECT_SELF, "VG_AREA_DMG_CONDITION");
if(nCondition >= 1)
{
object oCreature = GetEnteringObject();
int nDamageAmount = GetLocalInt(OBJECT_SELF, "VG_AREA_DMG_AMOUNT");
int nDamageType = GetLocalInt(OBJECT_SELF, "VG_AREA_DMG_TYPE");
int nDC = GetLocalInt(OBJECT_SELF, "VG_AREA_DMG_REFLEX");
int nSave = ReflexSave(oCreature, nDC);
//セーブ成功か、身かわし強化でダメージ半減
if(nSave >= 1 || GetHasFeat(FEAT_IMPROVED_EVASION, oCreature))
{
nDamageAmount = nDamageAmount / 2;
//身かわし強化でセーブに成功したらダメージ0
if(GetHasFeat(FEAT_IMPROVED_EVASION, oCreature))
nDamageAmount = 0;
}
//炎属性のダメージをnDamageAmountだけクリーチャーに与える
effect eDamage = EffectDamage(nDamageAmount, DAMAGE_TYPE_FIRE, DAMAGE_POWER_ENERGY);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oCreature);
//炎のエフェクトを与える
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_S), oCreature);
}
}
//OnHeartBeat 単独で使うと特定トリガー内に入った対象にだけ影響を及ぼす
void main()
{
int nCondition = GetLocalInt(OBJECT_SELF, "VG_AREA_DMG_CONDITION");
if(nCondition >= 1)
{
object oCreature = GetFirstInPersistentObject();
while (GetIsObjectValid(oCreature))
{
int nDamageAmount = GetLocalInt(OBJECT_SELF, "VG_AREA_DMG_AMOUNT");
int nDC = GetLocalInt(OBJECT_SELF, "VG_AREA_DMG_REFLEX");
int nSave = ReflexSave(oCreature, nDC);
//セーブ成功か、身かわし強化でダメージ半減
if(nSave >= 1 || GetHasFeat(FEAT_IMPROVED_EVASION, oCreature))
{
nDamageAmount = nDamageAmount / 2;
//身かわし強化でセーブに成功したらダメージ0
if(GetHasFeat(FEAT_IMPROVED_EVASION, oCreature))
nDamageAmount = 0;
}
//炎属性のダメージをnDamageAmountだけクリーチャーに与える
effect eDamage = EffectDamage(nDamageAmount, DAMAGE_TYPE_FIRE, DAMAGE_POWER_ENERGY);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oCreature);
oCreature = GetNextInPersistentObject();
//炎のエフェクトを与える
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_S), oCreature);
}
}
}
炎ビームバリア(炎ダメージエリアのOnEnterと併用)
/******************************[炎ビームバリア]*****************************
指定のメッセージがに反応してビームを撃つ
一定時間でメッセージを喋る(これでビームを撃たせる)
ビームの照射中のみ指定ダメージトリガーをONにする。
この3点で構築されたビームバリアスクリプト。
int VG_BEAM_CONDITION 現在のビームの状態 0で起動前 1で起動
int VG_BEAM_DURATION 1ステップ目のビーム照射時間
string VG_BEAM_START 開始オブジェクト ここがエフェクトの開始地点
string VG_BEAM_TARGET 目標オブジェクト ここがエフェクトの目標
それと同時に指定トリガーの中に居るクリーチャー全てにダメージを与える
string VG_AREA_NAME 指定トリガーの名前
int VG_AREA_DMG_REFLEX 反応セーブDC デフォルトは14
成功するとダメージ半減、身かわし強化があるならダメージ無し。
int VG_AREA_DMG_AMOUNT ダメージの量 デフォルトは10
***********************************************************************/
//OnHeartBeatに入れるべき
void AreaDamage()
{
//範囲トリガー名と、その中に居る一体目のクリーチャーを習得
string sPerObject = GetLocalString(OBJECT_SELF,"VG_AREA_NAME");
object oPerObject = GetObjectByTag(sPerObject);
object oCreature = GetFirstInPersistentObject(oPerObject);
while (GetIsObjectValid(oCreature))
{
int nDamageAmount = GetLocalInt(OBJECT_SELF, "VG_AREA_DMG_AMOUNT");
int nDC = GetLocalInt(OBJECT_SELF, "VG_AREA_DMG_REFLEX");
int nSave = ReflexSave(oCreature, nDC);
//セーブ成功か、身かわし強化でダメージ半減
if(nSave >= 1 || GetHasFeat(FEAT_IMPROVED_EVASION, oCreature))
{
nDamageAmount = nDamageAmount / 2;
//身かわし強化でセーブに成功したらダメージ0
if(GetHasFeat(FEAT_IMPROVED_EVASION, oCreature))
nDamageAmount = 0;
}
//炎属性のダメージをnDamageAmountだけクリーチャーに与える
effect eDamage = EffectDamage(nDamageAmount, DAMAGE_TYPE_FIRE, DAMAGE_POWER_ENERGY);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oCreature);
//炎のエフェクトを与える
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_S), oCreature);
oCreature = GetNextInPersistentObject();
}
}
void main()
{
//ダメージを与える
int nCondition = GetLocalInt(OBJECT_SELF, "VG_BEAM_CONDITION");
if (nCondition >= 1)
{
float fDuration = GetLocalFloat(OBJECT_SELF, "VG_BEAM_DURATION");
//ビームの起点、ビームの終点を習得する。
string sStartName = GetLocalString(OBJECT_SELF, "VG_BEAM_START");
object oStart = GetObjectByTag(sStartName);
string sTargetName = GetLocalString(OBJECT_SELF, "VG_BEAM_TARGET");
object oTarget = GetObjectByTag(sTargetName);
//ビームエフェクトを作成する
effect eEffect = EffectBeam(VFX_BEAM_FIRE, oStart, BODY_NODE_CHEST);
//トリガーを習得
string sPerObject = GetLocalString(OBJECT_SELF,"VG_AREA_NAME");
object oPerObject = GetObjectByTag(sPerObject);
SetLocalInt(oPerObject, "VG_AREA_DMG_CONDITION", 1);
DelayCommand(fDuration, SetLocalInt(oPerObject, "VG_AREA_DMG_CONDITION", 0));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, fDuration);
AreaDamage();
}
}
最終更新:2006年01月01日 21:39