※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。



  • 便利スクリプト一覧 判る人は分かると思う


炎ダメージエリア(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();
	}
}