protected override IControlledBrain GetPetBrain(GameLiving owner) { IControlledBrain controlledBrain = null; BDSubPet.SubPetType type = (BDSubPet.SubPetType)(byte)this.Spell.DamageType; owner = owner.ControlledBrain.Body; switch (type) { //Melee case BDSubPet.SubPetType.Melee: controlledBrain = new BDMeleeBrain(owner); break; //Healer case BDSubPet.SubPetType.Healer: controlledBrain = new BDHealerBrain(owner); break; //Mage case BDSubPet.SubPetType.Caster: controlledBrain = new BDCasterBrain(owner); break; //Debuffer case BDSubPet.SubPetType.Debuffer: controlledBrain = new BDDebufferBrain(owner); break; //Buffer case BDSubPet.SubPetType.Buffer: controlledBrain = new BDBufferBrain(owner); break; //Range case BDSubPet.SubPetType.Archer: controlledBrain = new BDArcherBrain(owner); break; //Other default: controlledBrain = new ControlledNpcBrain(owner); break; } return controlledBrain; }
/// <summary> /// When an applied effect starts /// duration spells only /// </summary> /// <param name="effect"></param> public override void OnEffectStart(GameSpellEffect effect) { base.OnEffectStart(effect); GamePlayer player = Caster as GamePlayer; GameNPC npc = effect.Owner as GameNPC; if (player != null && npc != null) { if (m_controlledBrain == null) m_controlledBrain = new ControlledNpcBrain(player); if (!m_isBrainSet) { npc.AddBrain(m_controlledBrain); m_isBrainSet = true; GameEventMgr.AddHandler(npc, GameLivingEvent.PetReleased, new DOLEventHandler(ReleaseEventHandler)); } if (player.ControlledBrain != m_controlledBrain) { // sorc: "The slough serpent is enthralled!" ct_spell Message.SystemToArea(effect.Owner, Util.MakeSentence(Spell.Message1, npc.GetName(0, false)), eChatType.CT_Spell); MessageToCaster(npc.GetName(0, true) + " is now under your control.", eChatType.CT_Spell); player.SetControlledBrain(m_controlledBrain); } npc.BroadcastUpdate(); //if (GameServer.Instance.Configuration.ServerType == eGameServerType.GST_PvP) { foreach (GamePlayer ply in npc.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE)) ply.Out.SendObjectGuildID(npc, player.Guild); } } else { // hmm if (log.IsWarnEnabled) log.Warn(string.Format("charm effect start: Caster={0} effect.Owner={1}", (Caster == null ? "(null)" : Caster.GetType().ToString()), (effect.Owner == null ? "(null)" : effect.Owner.GetType().ToString()))); } }