示例#1
0
        public static void BuySpell(this NPC trainer, Character chr, SpellId spellEntryId)
        {
            if (!trainer.CheckTrainerCanTrain(chr))
            {
                return;
            }
            TrainerSpellEntry spellEntry = trainer.TrainerEntry.GetSpellEntry(spellEntryId);

            if (spellEntry == null || !trainer.CheckBuySpellConditions(chr, spellEntry))
            {
                return;
            }
            chr.SubtractMoney(spellEntry.GetDiscountedCost(chr, trainer));
            WCell.RealmServer.Handlers.NPCHandler.SendTrainerBuySucceeded((IPacketReceiver)chr.Client, trainer,
                                                                          spellEntry);
            SpellHandler.SendVisual((WorldObject)trainer, 179U);
            if (spellEntry.Spell.IsTeachSpell)
            {
                trainer.SpellCast.Trigger(spellEntry.Spell, new WorldObject[1]
                {
                    (WorldObject)chr
                });
            }
            else if (chr.PowerType == PowerType.Mana || spellEntry.Spell.PreviousRank == null)
            {
                chr.Spells.AddSpell(spellEntry.Spell);
                trainer.TalkToTrainer(chr);
            }
            else
            {
                chr.Spells.Replace(spellEntry.Spell.PreviousRank, spellEntry.Spell);
            }
        }
示例#2
0
        public static bool CanLearn(this Character chr, TrainerSpellEntry trainerSpell)
        {
            if (trainerSpell.Spell == null)
            {
                return(false);
            }

            if (trainerSpell.GetTrainerSpellState(chr) != TrainerSpellState.Available)
            {
                return(false);
            }
            return(true);
        }
示例#3
0
 private static bool CheckBuySpellConditions(this NPC trainer, Character curChar, TrainerSpellEntry trainerSpell)
 {
     if (curChar.CanLearn(trainerSpell))
     {
         return(curChar.Money >= trainerSpell.GetDiscountedCost(curChar, trainer));
     }
     return(false);
 }
示例#4
0
 public static bool CanLearn(this Character chr, TrainerSpellEntry trainerSpell)
 {
     return(trainerSpell.Spell != null && trainerSpell.GetTrainerSpellState(chr) == TrainerSpellState.Available);
 }
示例#5
0
        public static void SendTrainerBuySucceeded(IPacketReceiver client, NPC trainer, TrainerSpellEntry spell)
        {
            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_TRAINER_BUY_SUCCEEDED, 8 + 4))
            {
                packet.Write(trainer.EntityId);
                packet.Write(spell.Spell.Id);

                client.Send(packet);
            }
        }