2007-6-17 15:08
Metatron
哪位帮我解答一下脚本问题啊……多谢多谢~
想做个OnActivateItem的Epic Spell Book,不过遇到意外……
脚本可以正常作用,对自身、召唤生物和敌对生物同时造成伤害,豁免正常作用,法术范围正常作用。
可以看到自己的豁免情况,头顶可以看到伤害数字。
召唤生物可以看到伤害数字,貌似没有豁免信息。
敌人正常受伤,看不到伤害数字和豁免信息。
【附脚本】
void main ()
{
object oItem = GetItemActivated();
object oPC = GetItemActivator();
object oTarget = GetItemActivatedTarget();
location lTargetLocation = GetItemActivatedTargetLocation();
float fDelay = 0.0;
int nDamage01,nDamage02;
effect eDamage01,eDamage02;
int nCasterLevel;
int nSpellDC = GetEpicSpellSaveDC(oPC);
effect eVis01,eVis02;
int nDuration = GetCasterLevel(oPC);
effect eLink;
effect eSpellEffect;
if (GetHasFeat(FEAT_EPIC_WIZARD,oPC) == 1)
{nCasterLevel = GetLevelByClass (CLASS_TYPE_WIZARD,oPC);}
else if ((GetHasFeat(FEAT_EPIC_SORCERER,oPC) == 1))
{nCasterLevel = GetLevelByClass (CLASS_TYPE_SORCERER,oPC);}
else if ((GetHasFeat(FEAT_EPIC_CLERIC,oPC) == 1))
{nCasterLevel = GetLevelByClass (CLASS_TYPE_CLERIC,oPC);}
else if ((GetHasFeat(FEAT_EPIC_DRUID,oPC) == 1))
{nCasterLevel = GetLevelByClass (CLASS_TYPE_DRUID,oPC);}
//Epic Spell: Cataract of Fire
if (GetTag(oItem) == "EPICSPELLCF")
{
if (GetHasFeat(FEAT_EPIC_WIZARD,oPC) == 1
||GetHasFeat(FEAT_EPIC_SORCERER,oPC) == 1
||GetHasFeat(FEAT_EPIC_CLERIC,oPC) == 1
||GetHasFeat(FEAT_EPIC_DRUID,oPC) == 1)
{
effect eEPICSPELLCF01 = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_FIRE);
effect eEPICSPELLCF02 = EffectVisualEffect(VFX_FNF_SUMMONDRAGON);
effect eEPICSPELLCF03 = EffectVisualEffect(VFX_FNF_SCREEN_BUMP);
effect eVis01 = EffectVisualEffect(VFX_IMP_FLAME_M);
effect eVis02 = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_FIRE);
DelayCommand(0.0,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eEPICSPELLCF01,lTargetLocation,1.0f));
DelayCommand(0.2,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eEPICSPELLCF02,lTargetLocation,1.0f));
DelayCommand(1.2,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eEPICSPELLCF03,lTargetLocation,1.0f));
oTarget = GetFirstObjectInShape(SHAPE_SPHERE,RADIUS_SIZE_HUGE,lTargetLocation,TRUE,OBJECT_TYPE_CREATURE|OBJECT_TYPE_DOOR|OBJECT_TYPE_PLACEABLE);
while (GetIsObjectValid(oTarget))
{
if (spellsIsTarget(oTarget,SPELL_TARGET_STANDARDHOSTILE,oPC))
{
SignalEvent(oTarget, EventSpellCastAt(oPC, SPELL_FIREBALL));
nDamage01 = d4(nCasterLevel);
nDamage02 = d4(nCasterLevel);
if (MySavingThrow(SAVING_THROW_REFLEX,oTarget,nSpellDC,SAVING_THROW_TYPE_SPELL,OBJECT_SELF,0.1f)>0)
{
nDamage01 = nDamage01/2;
nDamage02 = nDamage02/2;
}
eDamage01 = EffectDamage(nDamage01, DAMAGE_TYPE_FIRE);
eDamage02 = EffectDamage(nDamage02, DAMAGE_TYPE_MAGICAL);
DelayCommand(0.4, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage01, oTarget));
DelayCommand(0.4, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage02, oTarget));
DelayCommand(0.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,eEPICSPELLCF01,oTarget,1.0f));
DelayCommand(0.4,ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis01,oTarget,1.0f));
DelayCommand(0.4,ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis02,oTarget,1.0f));
}
oTarget = GetNextObjectInShape(SHAPE_SPHERE,RADIUS_SIZE_HUGE,lTargetLocation,TRUE,OBJECT_TYPE_CREATURE|OBJECT_TYPE_DOOR|OBJECT_TYPE_PLACEABLE);
}
}
}
}
define部分有很多废渣……是给别的段落准备的,不管它^_^。
请求达人解答,谢谢。