Код:
// if player is dead and stuck, send ghost to graveyard
chr->RepopAtGraveyard();
chr->ResurrectPlayer(0.0f, false);
int32 startLevel = sWorld.getConfig(CONFIG_DEATH_SICKNESS_LEVEL);
if(int32(chr->getLevel()) >= startLevel)
{
// set resurrection sickness
chr->CastSpell(chr,15007,false);
// not full duration
if(int32(chr->getLevel()) < startLevel+9)
{
int32 delta = (int32(chr->getLevel()) - startLevel + 1)*MINUTE;
if(Aura * aur = chr->GetAura(15007, chr->GetGUID()))
{
aur->SetDuration(delta*IN_MILISECONDS);
aur->SetAuraMaxDuration(delta * IN_MILISECONDS);
aur->RefreshAura();
}
}
}
return true;
}
// cast spell Stuck
chr->RepopAtGraveyard();
return true;
1. в GetAura второй параметр нужен индекс эффекта, сейчас не знаю как, а раньше всегда было 0, щас мб EFF_INDEX_0, т.к enum, вобщем смотреть по коду
2. ЧТоб установить свою длительность ауры, надо установить макс. длительность а потом ее зарефрешить
PS - каст маски 15007 лучше делать true, т.к true- означает триггерный спелл, кастуется инстантом, не требуя ни энергии(маны, ярости и т.д), ни реагентов, игонря любые эффекты LOS
Код:
chr->CastSpell(chr,15007,true);
PS2 - Visual Studio там есть такая вещь как "Go to Definition", "Go to Declaration" - в контекст меню правым целчком мыши на ф-ции в коде, первое к самой функции, второе - к ее обьявлению,
uint8, uint16, uint32, uint64 - unsigned int, беззнаковый целочисленный тип, цифра - битовость
беззнаковый - биты могут быть либо 0, либо положительными, за счет отрицательных значений мы вдвое расширяем диапазон, uint32 - 0 to 65536
Это обьясняет и любимый всеми баг с уходом спд в минус и появлятся 65536 при значении < 0