예제 #1
0
        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;
        }
예제 #2
0
		/// <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())));
			}
		}