Здравствуйте! я тут пытался модифицировать заклинание Символ Охраны (Glyph of warding):
пытался сделать:
1. чтобы чистый клир 40 уровня мог накладывать его на бесконечное время и символ остается даже если сам клир вышел из модуля(игра предполагается на шарде)
2. если клир в игре, то если кто-то наступил на данный символ охраны и таким образом активирвоал его, то у клира, наложившего печать появляется сообщение "ваш символ охраны был нарушен".
У заклинания много подскриптов, но основная работа делается в скрипте
x2_o0_gliphhb.
я немного подкорректировал сам скрипт в соответствии с тем что написал выше, но ничего не работает. Заклинание по-прежнему временное, даже если накладывается героем священником 40 уровня и сообщение не появляется.
CODE
#include "x2_inc_switches"
void main()
{
int bSetup = GetLocalInt(OBJECT_SELF,"X2_PLC_GLYPH_INIT");
int nLevel = GetLocalInt(OBJECT_SELF,"X2_PLC_GLYPH_CASTER_LEVEL");
object oCaster = GetLocalObject(OBJECT_SELF,"X2_PLC_GLYPH_CASTER");
if (bSetup == 0)
{
int nDuration=nLevel/2;
SetLocalInt(OBJECT_SELF,"X2_PLC_GLYPH_INIT",1);
int nMetaMagic = GetLocalInt(OBJECT_SELF,"X2_PLC_GLYPH_CASTER_METAMAGIC");
//вот сдесь проверка на класс накладывающего заклинаие (это кстати может быть не обязательно игрок) и уровень класса
if(GetLevelByClass(CLASS_TYPE_CLERIC,oCaster)>=40)
{
nDuration=DURATION_TYPE_PERMANENT;
}
///
if (nMetaMagic == METAMAGIC_EXTEND)
{
nDuration = nDuration *2;//Duration is +100%
}
if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_INVISIBLE_GLYPH_OF_WARDIN
G))
{
// show glyph symbol only for 6 seconds
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(445),OBJECT_SELF,6.0f);
// use blur VFX therafter (which should be invisible);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(0),OBJECT_SELF,TurnsToSeconds(nDuration));
}
else
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect(445),OBJECT_SELF,TurnsToSeconds(nDuration));
}
effect eAOE = EffectAreaOfEffect(38, "x2_s0_glphwarda");
if (GetLocalInt(OBJECT_SELF,"X2_PLC_GLYPH_PERMANENT") == TRUE)
{
ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, eAOE, GetLocation(OBJECT_SELF));
}
else
{
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eAOE, GetLocation(OBJECT_SELF), TurnsToSeconds(nDuration));
}
}
else
{
effect e1 = GetFirstEffect(OBJECT_SELF);
int bGood = FALSE;
while (GetIsEffectValid(e1))
{
if (GetEffectType(e1) == EFFECT_TYPE_VISUALEFFECT)
{
if (GetEffectCreator(e1) == OBJECT_SELF)
{
bGood = TRUE;
}
}
e1 = GetNextEffect(OBJECT_SELF);
}
if (!bGood)
{
DestroyObject(OBJECT_SELF);
AssignCommand(oCaster, ActionSpeakString("*Ваш символ охраны был нарушен*"); //вот тут строчка которая сообщает игроку. о нарушеной печати
return;
}
};
//вот тут была проверка на "находится ли тот кто наложил печать в игре в данный момент. Если нет, то символ исчезает. " но я ее удалил.
}
Мастера, подскажите пожалуйста почему не работает =)
Заранее огромное спасибо!