Мне пришел в голову вот такой вариант:
скрипт вешается на ХБ игрока ("default") и работает при надетом на персонаже плаще с тегом "auracloak":
Neverwinter Script Source
void main()
{
if (GetTag(GetItemInSlot(INVENTORY_SLOT_CLOAK))=="auracloak")
{
float fRadius = 10.0;
object oFriend = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, GetLocation(OBJECT_SELF));
while (GetIsObjectValid(oFriend))
{
if (GetIsFriend(oFriend) && oFriend!=OBJECT_SELF)
{
effect eSpell = EffectDamageImmunityIncrease(DAMAGE_TYPE_MAGICAL, 10);
effect eVisual = EffectVisualEffect(VFX_COM_HIT_DIVINE);
effect eEffect = EffectLinkEffects(eVisual, eSpell);
if (GetLocalInt(oFriend, "auracloak_affected"))
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSpell, oFriend, 6.0);
else
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oFriend, 6.0);
DelayCommand(4.0, SetLocalInt(oFriend, "auracloak_affected", 1));
DelayCommand(8.0, SetLocalInt(oFriend, "auracloak_affected", 0));
}
oFriend = GetNextObjectInShape(SHAPE_SPHERE, fRadius, GetLocation(OBJECT_SELF));
}
}
}
Если визуальный эффект должен висеть постоянно, а не применяться 1 раз, то скрипт будет еще проще:
Neverwinter Script Source
void main()
{
if (GetTag(GetItemInSlot(INVENTORY_SLOT_CLOAK))=="auracloak")
{
float fRadius = 10.0;
object oFriend = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, GetLocation(OBJECT_SELF));
while (GetIsObjectValid(oFriend))
{
if (GetIsFriend(oFriend) && oFriend!=OBJECT_SELF)
{
effect eSpell = EffectDamageImmunityIncrease(DAMAGE_TYPE_MAGICAL, 10);
effect eVisual = EffectVisualEffect(VFX_DUR_BLUR);
effect eEffect = EffectLinkEffects(eVisual, eSpell);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oFriend, 6.0);
}
oFriend = GetNextObjectInShape(SHAPE_SPHERE, fRadius, GetLocation(OBJECT_SELF));
}
}
}
Если нужно применять эффект ауры на самого игрока, то лучше это делать отдельно в событиях OnItemEquip/Unequip.