void NeedCheckCubeStatus() { uint32 ClickerNum = 0; // now checking if every clicker has debuff from manticron(it is dispelable atm rev 6110 : S) // if not - apply mind exhaustion and delete from clicker's list for (CubeMap::iterator i = Cube.begin(); i != Cube.end(); ++i) { Unit* clicker = Unit::GetUnit(*me, i->second); if (!clicker || !clicker->FindCurrentSpellBySpellId(SPELL_SHADOW_GRASP_VISUAL)) { DebuffClicker(clicker); i->second = 0; } else ++ClickerNum; } // if 5 clickers from other cubes apply shadow cage if (ClickerNum >= CLICKERS_COUNT && !me->HasAura(SPELL_SHADOW_CAGE)) { DoScriptText(SAY_BANISH, me); DoCast(me, SPELL_SHADOW_CAGE, true); } else if (ClickerNum < CLICKERS_COUNT && me->HasAura(SPELL_SHADOW_CAGE)) me->RemoveAurasDueToSpell(SPELL_SHADOW_CAGE); if (!ClickerNum) NeedCheckCube = false; }
void WorldSession::HandleUpdateProjectilePosition(WorldPacket& recvPacket) { ObjectGuid casterGuid; uint32 spellId; uint8 castCount; float x, y, z; // Position of missile hit recvPacket >> casterGuid; recvPacket >> spellId; recvPacket >> castCount; recvPacket >> x; recvPacket >> y; recvPacket >> z; Unit* caster = ObjectAccessor::GetUnit(*_player, casterGuid); if (!caster) return; Spell* spell = caster->FindCurrentSpellBySpellId(spellId); if (!spell || !spell->m_targets.HasDst()) return; Position pos = *spell->m_targets.GetDstPos(); pos.Relocate(x, y, z); spell->m_targets.ModDst(pos); WorldPacket data(SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION, 21); data << casterGuid; data << uint8(castCount); data << float(x); data << float(y); data << float(z); caster->SendMessageToSet(&data, true); }