Example #1
0
 public void AddMount(MountRecord record)
 {
     if (!m_mounts.ContainsKey(record.Id))
     {
         m_mounts.Add(record.Id, record);
     }
 }
        public static CharacterMountRecord New(CharacterItemRecord item)
        {
            MountRecord template = MountRecord.GetMount(item.GId);
            long        uid      = CharactersMounts.DynamicPop(x => x.UId);

            return(new CharacterMountRecord(uid, item.CharacterId, false, true, false, false,
                                            template.Id, DefaultMountName, template.Effects.ConvertAll <EffectInteger>(x => x.GenerateEffect() as EffectInteger), false, false));
        }
Example #3
0
        public Mount(MountRecord record)
        {
            Record = record;
            Level  = ExperienceManager.Instance.GetMountLevel(Experience);
            ExperienceLevelFloor     = ExperienceManager.Instance.GetMountLevelExperience(Level);
            ExperienceNextLevelFloor = ExperienceManager.Instance.GetMountNextLevelExperience(Level);

            if (Record.PaddockId != null)
            {
                Paddock = PaddockManager.Instance.GetPaddock(Record.PaddockId.Value);
            }
            m_effects = MountManager.Instance.GetMountEffects(this);
        }
Example #4
0
        public void SaveMount(MountRecord record)
        {
            if (record.IsNew)
            {
                Database.Insert(record);
            }
            else
            {
                Database.Update(record);
            }

            record.IsDirty = false;
            record.IsNew   = false;
        }
Example #5
0
        public bool AddMount(uint spellId, MountStatusFlags flags, bool factionMount = false, bool learned = false)
        {
            Player player = _owner.GetPlayer();

            if (!player)
            {
                return(false);
            }

            MountRecord mount = Global.DB2Mgr.GetMount(spellId);

            if (mount == null)
            {
                return(false);
            }

            var value = FactionSpecificMounts.LookupByKey(spellId);

            if (value != 0 && !factionMount)
            {
                AddMount(value, flags, true, learned);
            }

            _mounts[spellId] = flags;

            // Mount condition only applies to using it, should still learn it.
            if (mount.PlayerConditionID != 0)
            {
                PlayerConditionRecord playerCondition = CliDB.PlayerConditionStorage.LookupByKey(mount.PlayerConditionID);
                if (playerCondition != null && !ConditionManager.IsPlayerMeetingCondition(player, playerCondition))
                {
                    return(false);
                }
            }

            if (!learned)
            {
                if (!factionMount)
                {
                    SendSingleMountUpdate(spellId, flags);
                }
                if (!player.HasSpell(spellId))
                {
                    player.LearnSpell(spellId, true);
                }
            }

            return(true);
        }
Example #6
0
        public Mount CreateMount(Character owner, MountTemplate template, bool sex)
        {
            var record = new MountRecord()
            {
                IsNew      = true,
                TemplateId = template.Id,
                OwnerId    = owner.Id,
                OwnerName  = owner.Name,
                Name       = template.Name,
                Sex        = sex,
            };

            record.AssignIdentifier();

            AddMount(record);

            return(new Mount(owner, record));
        }
Example #7
0
        public static void SynchnronizeMounts()
        {
            BigEndianReader reader = new BigEndianReader(File.ReadAllBytes(MountsPath));

            while (reader.BytesAvailable > 0)
            {
                MA3Mount mount = new MA3Mount();
                mount.Deserialize(reader);

                var record = MountRecord.GetMount(mount.Id);

                if (record == null)
                {
                    var         itemRecord = ItemRecord.Items.Find(x => x.Name == mount.Name);
                    MountRecord newRecord  = new MountRecord(mount.Id, mount.Name, ContextActorLook.Parse(mount.Look), itemRecord.Id, new List <Models.Effects.EffectInstance>());
                    newRecord.AddInstantElement();
                    logger.Gray(mount.Name + " added to mount records.");
                }
            }
        }
Example #8
0
        void HandleActivateTaxi(ActivateTaxi activateTaxi)
        {
            Creature unit = GetPlayer().GetNPCIfCanInteractWith(activateTaxi.Vendor, NPCFlags.FlightMaster);

            if (unit == null)
            {
                Log.outDebug(LogFilter.Network, "WORLD: HandleActivateTaxiOpcode - {0} not found or you can't interact with it.", activateTaxi.Vendor.ToString());
                SendActivateTaxiReply(ActivateTaxiReply.TooFarAway);
                return;
            }

            uint curloc = Global.ObjectMgr.GetNearestTaxiNode(unit.GetPositionX(), unit.GetPositionY(), unit.GetPositionZ(), unit.GetMapId(), GetPlayer().GetTeam());

            if (curloc == 0)
            {
                return;
            }

            TaxiNodesRecord from = CliDB.TaxiNodesStorage.LookupByKey(curloc);
            TaxiNodesRecord to   = CliDB.TaxiNodesStorage.LookupByKey(activateTaxi.Node);

            if (to == null)
            {
                return;
            }

            if (!GetPlayer().isTaxiCheater())
            {
                if (!GetPlayer().m_taxi.IsTaximaskNodeKnown(curloc) || !GetPlayer().m_taxi.IsTaximaskNodeKnown(activateTaxi.Node))
                {
                    SendActivateTaxiReply(ActivateTaxiReply.NotVisited);
                    return;
                }
            }

            uint        preferredMountDisplay = 0;
            MountRecord mount = CliDB.MountStorage.LookupByKey(activateTaxi.FlyingMountID);

            if (mount != null)
            {
                if (GetPlayer().HasSpell(mount.SourceSpellID))
                {
                    var mountDisplays = Global.DB2Mgr.GetMountDisplays(mount.Id);
                    if (mountDisplays != null)
                    {
                        List <MountXDisplayRecord> usableDisplays = mountDisplays.Where(mountDisplay =>
                        {
                            PlayerConditionRecord playerCondition = CliDB.PlayerConditionStorage.LookupByKey(mountDisplay.PlayerConditionID);
                            if (playerCondition != null)
                            {
                                return(ConditionManager.IsPlayerMeetingCondition(GetPlayer(), playerCondition));
                            }

                            return(true);
                        }).ToList();

                        if (!usableDisplays.Empty())
                        {
                            preferredMountDisplay = usableDisplays.SelectRandom().CreatureDisplayInfoID;
                        }
                    }
                }
            }

            List <uint> nodes = new List <uint>();

            Global.TaxiPathGraph.GetCompleteNodeRoute(from, to, GetPlayer(), nodes);
            GetPlayer().ActivateTaxiPathTo(nodes, unit, 0, preferredMountDisplay);
        }
Example #9
0
 public void DeleteMount(MountRecord record)
 {
     RemoveMount(record);
     Database.Delete(record);
 }
Example #10
0
 public void RemoveMount(MountRecord record)
 {
     m_mounts.Remove(record.Id);
 }