예제 #1
0
        public bool LoadFromDB(SQLFields fields)
        {
            _marketId = fields.Read <uint>(0);

            // Invalid MarketID
            BlackMarketTemplate templ = Global.BlackMarketMgr.GetTemplateByID(_marketId);

            if (templ == null)
            {
                Log.outError(LogFilter.Misc, "Black market auction {0} does not have a valid id.", _marketId);
                return(false);
            }

            _currentBid       = fields.Read <ulong>(1);
            _secondsRemaining = (uint)(fields.Read <uint>(2) - Global.BlackMarketMgr.GetLastUpdate());
            _numBids          = fields.Read <uint>(3);
            _bidder           = fields.Read <ulong>(4);

            // Either no bidder or existing player
            if (_bidder != 0 && ObjectManager.GetPlayerAccountIdByGUID(ObjectGuid.Create(HighGuid.Player, _bidder)) == 0) // Probably a better way to check if player exists
            {
                Log.outError(LogFilter.Misc, "Black market auction {0} does not have a valid bidder (GUID: {1}).", _marketId, _bidder);
                return(false);
            }

            return(true);
        }
예제 #2
0
        public override bool LoadFromDB(ulong guid, ObjectGuid ownerGuid, SQLFields fields, uint entry)
        {
            if (!base.LoadFromDB(guid, ownerGuid, fields, entry))
            {
                return(false);
            }

            bool needSave = false;

            ulong xp             = fields.Read <ulong>(43);
            uint  level          = fields.Read <uint>(44);
            uint  knowledgeLevel = fields.Read <uint>(45);

            if (!CliDB.AzeriteLevelInfoStorage.ContainsKey(level))
            {
                xp             = 0;
                level          = 1;
                knowledgeLevel = GetCurrentKnowledgeLevel();
                needSave       = true;
            }
            else if (level > PlayerConst.MaxAzeriteItemLevel)
            {
                xp       = 0;
                level    = PlayerConst.MaxAzeriteItemLevel;
                needSave = true;
            }

            if (knowledgeLevel != GetCurrentKnowledgeLevel())
            {
                // rescale XP to maintain same progress %
                ulong oldMax = CalcTotalXPToNextLevel(level, knowledgeLevel);
                knowledgeLevel = GetCurrentKnowledgeLevel();
                ulong newMax = CalcTotalXPToNextLevel(level, knowledgeLevel);
                xp       = (ulong)(xp / (double)oldMax * newMax);
                needSave = true;
            }
            else if (knowledgeLevel > PlayerConst.MaxAzeriteItemKnowledgeLevel)
            {
                knowledgeLevel = PlayerConst.MaxAzeriteItemKnowledgeLevel;
                needSave       = true;
            }

            SetUpdateFieldValue(m_values.ModifyValue(m_azeriteItemData).ModifyValue(m_azeriteItemData.Xp), xp);
            SetUpdateFieldValue(m_values.ModifyValue(m_azeriteItemData).ModifyValue(m_azeriteItemData.Level), level);
            SetUpdateFieldValue(m_values.ModifyValue(m_azeriteItemData).ModifyValue(m_azeriteItemData.KnowledgeLevel), knowledgeLevel);

            if (needSave)
            {
                PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_ITEM_INSTANCE_AZERITE_ON_LOAD);
                stmt.AddValue(0, xp);
                stmt.AddValue(1, knowledgeLevel);
                stmt.AddValue(2, guid);
                DB.Characters.Execute(stmt);
            }

            return(true);
        }
예제 #3
0
        public GameAccountInfo(SQLFields fields, int startColumn)
        {
            Id                   = fields.Read <uint>(startColumn + 0);
            Name                 = fields.Read <string>(startColumn + 1);
            UnbanDate            = fields.Read <uint>(startColumn + 2);
            IsPermanenetlyBanned = fields.Read <uint>(startColumn + 3) != 0;
            IsBanned             = IsPermanenetlyBanned || UnbanDate > Time.UnixTime;
            SecurityLevel        = (AccountTypes)fields.Read <byte>(startColumn + 4);

            int hashPos = Name.IndexOf('#');

            if (hashPos != -1)
            {
                DisplayName = "WoW" + Name[(hashPos + 1)..];
예제 #4
0
 public void LoadRewardChoiceItems(SQLFields fields)
 {
     for (int i = 0; i < SharedConst.QuestRewardChoicesCount; ++i)
     {
         RewardChoiceItemType[i] = (LootItemType)fields.Read <byte>(1 + i);
     }
 }
예제 #5
0
        public void LoadQuestObjective(SQLFields fields)
        {
            QuestObjective obj = new QuestObjective();

            obj.ID                = fields.Read <uint>(0);
            obj.QuestID           = fields.Read <uint>(1);
            obj.Type              = (QuestObjectiveType)fields.Read <byte>(2);
            obj.StorageIndex      = fields.Read <sbyte>(3);
            obj.ObjectID          = fields.Read <int>(4);
            obj.Amount            = fields.Read <int>(5);
            obj.Flags             = (QuestObjectiveFlags)fields.Read <uint>(6);
            obj.Flags2            = fields.Read <uint>(7);
            obj.ProgressBarWeight = fields.Read <float>(8);
            obj.Description       = fields.Read <string>(9);

            Objectives.Add(obj);
        }
예제 #6
0
        public void LoadQuestDetails(SQLFields fields)
        {
            for (int i = 0; i < SharedConst.QuestEmoteCount; ++i)
            {
                ushort emoteId = fields.Read <ushort>(1 + i);
                if (!CliDB.EmotesStorage.ContainsKey(emoteId))
                {
                    Log.outError(LogFilter.Sql, "Table `quest_details` has non-existing Emote{0} ({1}) set for quest {2}. Skipped.", 1 + i, emoteId, fields.Read <uint>(0));
                    continue;
                }
                DetailsEmote[i] = emoteId;
            }

            for (int i = 0; i < SharedConst.QuestEmoteCount; ++i)
            {
                DetailsEmoteDelay[i] = fields.Read <uint>(5 + i);
            }
        }
예제 #7
0
        public void LoadQuestRequestItems(SQLFields fields)
        {
            EmoteOnComplete   = fields.Read <ushort>(1);
            EmoteOnIncomplete = fields.Read <ushort>(2);

            if (!CliDB.EmotesStorage.ContainsKey(EmoteOnComplete))
            {
                Log.outError(LogFilter.Sql, "Table `quest_request_items` has non-existing EmoteOnComplete ({0}) set for quest {1}.", EmoteOnComplete, fields.Read <uint>(0));
            }

            if (!CliDB.EmotesStorage.ContainsKey(EmoteOnIncomplete))
            {
                Log.outError(LogFilter.Sql, "Table `quest_request_items` has non-existing EmoteOnIncomplete ({0}) set for quest {1}.", EmoteOnIncomplete, fields.Read <uint>(0));
            }

            EmoteOnCompleteDelay   = fields.Read <uint>(3);
            EmoteOnIncompleteDelay = fields.Read <uint>(4);
            RequestItemsText       = fields.Read <string>(5);
        }
예제 #8
0
        public void LoadResult(SQLFields fields, int startColumn)
        {
            Id                   = fields.Read <uint>(startColumn + 0);
            Name                 = fields.Read <string>(startColumn + 1);
            IsBanned             = fields.Read <ulong>(startColumn + 2) != 0;
            IsPermanenetlyBanned = fields.Read <ulong>(startColumn + 3) != 0;
            SecurityLevel        = (AccountTypes)fields.Read <byte>(startColumn + 4);

            int hashPos = Name.IndexOf('#');

            if (hashPos != -1)
            {
                DisplayName = "WoW" + Name.Substring(hashPos + 1);
            }
            else
            {
                DisplayName = Name;
            }
        }
예제 #9
0
        public void LoadRewardDisplaySpell(SQLFields fields)
        {
            uint spellId           = fields.Read <uint>(1);
            uint playerConditionId = fields.Read <uint>(2);

            if (!Global.SpellMgr.HasSpellInfo(spellId, Difficulty.None))
            {
                Log.outError(LogFilter.Sql, $"Table `quest_reward_display_spell` has non-existing Spell ({spellId}) set for quest {Id}. Skipped.");
                return;
            }

            if (playerConditionId != 0 && !CliDB.PlayerConditionStorage.ContainsKey(playerConditionId))
            {
                Log.outError(LogFilter.Sql, $"Table `quest_reward_display_spell` has non-existing PlayerCondition ({spellId}) set for quest {Id}. Set to 0.");
                playerConditionId = 0;
            }

            RewardDisplaySpell.Add(new QuestRewardDisplaySpell(spellId, playerConditionId));
        }
예제 #10
0
        public GameAccountInfo(SQLFields fields, int startColumn)
        {
            Id                   = fields.Read <uint>(startColumn + 0);
            Name                 = fields.Read <string>(startColumn + 1);
            UnbanDate            = fields.Read <uint>(startColumn + 2);
            IsPermanenetlyBanned = fields.Read <uint>(startColumn + 3) != 0;
            IsBanned             = IsPermanenetlyBanned || UnbanDate > Time.UnixTime;
            SecurityLevel        = (AccountTypes)fields.Read <byte>(startColumn + 4);

            int hashPos = Name.IndexOf('#');

            if (hashPos != -1)
            {
                DisplayName = "WoW" + Name.Substring(hashPos + 1);
            }
            else
            {
                DisplayName = Name;
            }

            CharacterCounts      = new Dictionary <uint, byte>();
            LastPlayedCharacters = new Dictionary <string, LastPlayedCharacterInfo>();
        }
예제 #11
0
        public void LoadQuestObjectiveVisualEffect(SQLFields fields)
        {
            uint objID = fields.Read <uint>(1);

            foreach (QuestObjective obj in Objectives)
            {
                if (obj.ID == objID)
                {
                    byte effectIndex = fields.Read <byte>(3);
                    if (obj.VisualEffects == null)
                    {
                        obj.VisualEffects = new int[effectIndex + 1];
                    }

                    if (effectIndex >= obj.VisualEffects.Length)
                    {
                        Array.Resize(ref obj.VisualEffects, effectIndex + 1);
                    }

                    obj.VisualEffects[effectIndex] = fields.Read <int>(4);
                    break;
                }
            }
        }
예제 #12
0
        public bool LoadFromDB(SQLFields fields)
        {
            MarketID    = fields.Read <uint>(0);
            SellerNPC   = fields.Read <uint>(1);
            Item        = new ItemInstance();
            Item.ItemID = fields.Read <uint>(2);
            Quantity    = fields.Read <uint>(3);
            MinBid      = fields.Read <ulong>(4);
            Duration    = fields.Read <uint>(5);
            Chance      = fields.Read <float>(6);

            var         bonusListIDsTok = new StringArray(fields.Read <string>(7), ' ');
            List <uint> bonusListIDs    = new();

            if (!bonusListIDsTok.IsEmpty())
            {
                foreach (string token in bonusListIDsTok)
                {
                    if (uint.TryParse(token, out uint id))
                    {
                        bonusListIDs.Add(id);
                    }
                }
            }

            if (!bonusListIDs.Empty())
            {
                Item.ItemBonus.HasValue           = true;
                Item.ItemBonus.Value.BonusListIDs = bonusListIDs;
            }

            if (Global.ObjectMgr.GetCreatureTemplate(SellerNPC) == null)
            {
                Log.outError(LogFilter.Misc, "Black market template {0} does not have a valid seller. (Entry: {1})", MarketID, SellerNPC);
                return(false);
            }

            if (Global.ObjectMgr.GetItemTemplate(Item.ItemID) == null)
            {
                Log.outError(LogFilter.Misc, "Black market template {0} does not have a valid item. (Entry: {1})", MarketID, Item.ItemID);
                return(false);
            }

            return(true);
        }
예제 #13
0
        public bool LoadFromFieldList(SQLFields fields)
        {
            // Loads an AuctionEntry item from a field list. Unlike "LoadFromDB()", this one
            //  does not require the AuctionEntryMap to have been loaded with items. It simply
            //  acts as a wrapper to fill out an AuctionEntry struct from a field list

            Id          = fields.Read <uint>(0);
            auctioneer  = fields.Read <uint>(1);
            itemGUIDLow = fields.Read <uint>(2);
            itemEntry   = fields.Read <uint>(3);
            itemCount   = fields.Read <uint>(4);
            owner       = fields.Read <uint>(5);
            buyout      = fields.Read <uint>(6);
            expire_time = fields.Read <uint>(7);
            bidder      = fields.Read <uint>(8);
            bid         = fields.Read <uint>(9);
            startbid    = fields.Read <uint>(10);
            deposit     = fields.Read <uint>(11);

            CreatureData auctioneerData = Global.ObjectMgr.GetCreatureData(auctioneer);

            if (auctioneerData == null)
            {
                Log.outError(LogFilter.Server, "AuctionEntry:LoadFromFieldList() - Auction {0} has not a existing auctioneer (GUID : {1})", Id, auctioneer);
                return(false);
            }

            CreatureTemplate auctioneerInfo = Global.ObjectMgr.GetCreatureTemplate(auctioneerData.id);

            if (auctioneerInfo == null)
            {
                Log.outError(LogFilter.Server, "AuctionEntry:LoadFromFieldList() - Auction {0} has not a existing auctioneer (GUID : {1} Entry: {2})", Id, auctioneer, auctioneerData.id);
                return(false);
            }

            factionTemplateId = auctioneerInfo.Faction;
            auctionHouseEntry = Global.AuctionMgr.GetAuctionHouseEntry(factionTemplateId);

            if (auctionHouseEntry == null)
            {
                Log.outError(LogFilter.Server, "AuctionEntry:LoadFromFieldList() - Auction {0} has auctioneer (GUID : {1} Entry: {2}) with wrong faction {3}", Id, auctioneer, auctioneerData.id, factionTemplateId);
                return(false);
            }

            return(true);
        }
예제 #14
0
        public Quest(SQLFields fields)
        {
            Id                    = fields.Read <uint>(0);
            Type                  = (QuestType)fields.Read <byte>(1);
            Level                 = fields.Read <int>(2);
            PackageID             = fields.Read <uint>(3);
            MinLevel              = fields.Read <int>(4);
            QuestSortID           = fields.Read <short>(5);
            QuestInfoID           = fields.Read <ushort>(6);
            SuggestedPlayers      = fields.Read <uint>(7);
            NextQuestInChain      = fields.Read <uint>(8);
            RewardXPDifficulty    = fields.Read <uint>(9);
            RewardXPMultiplier    = fields.Read <float>(10);
            RewardMoney           = fields.Read <int>(11);
            RewardMoneyDifficulty = fields.Read <uint>(12);
            RewardMoneyMultiplier = fields.Read <float>(13);
            RewardBonusMoney      = fields.Read <uint>(14);

            for (int i = 0; i < SharedConst.QuestRewardDisplaySpellCount; ++i)
            {
                RewardDisplaySpell[i] = fields.Read <uint>(15 + i);
            }

            RewardSpell                = fields.Read <uint>(18);
            RewardHonor                = fields.Read <uint>(19);
            RewardKillHonor            = fields.Read <uint>(20);
            SourceItemId               = fields.Read <uint>(21);
            RewardArtifactXPDifficulty = fields.Read <uint>(22);
            RewardArtifactXPMultiplier = fields.Read <float>(23);
            RewardArtifactCategoryID   = fields.Read <uint>(24);
            Flags   = (QuestFlags)fields.Read <uint>(25);
            FlagsEx = (QuestFlagsEx)fields.Read <uint>(26);

            for (int i = 0; i < SharedConst.QuestItemDropCount; ++i)
            {
                RewardItemId[i]     = fields.Read <uint>(27 + i * 4);
                RewardItemCount[i]  = fields.Read <uint>(28 + i * 4);
                ItemDrop[i]         = fields.Read <uint>(29 + i * 4);
                ItemDropQuantity[i] = fields.Read <uint>(30 + i * 4);

                if (RewardItemId[i] != 0)
                {
                    ++_rewItemsCount;
                }
            }

            for (int i = 0; i < SharedConst.QuestRewardChoicesCount; ++i)
            {
                RewardChoiceItemId[i]        = fields.Read <uint>(43 + i * 3);
                RewardChoiceItemCount[i]     = fields.Read <uint>(44 + i * 3);
                RewardChoiceItemDisplayId[i] = fields.Read <uint>(45 + i * 3);

                if (RewardChoiceItemId[i] != 0)
                {
                    ++_rewChoiceItemsCount;
                }
            }

            POIContinent = fields.Read <uint>(61);
            POIx         = fields.Read <float>(62);
            POIy         = fields.Read <float>(63);
            POIPriority  = fields.Read <uint>(64);

            RewardTitleId     = fields.Read <uint>(65);
            RewardArenaPoints = fields.Read <int>(66);
            RewardSkillId     = fields.Read <uint>(67);
            RewardSkillPoints = fields.Read <uint>(68);

            QuestGiverPortrait  = fields.Read <uint>(69);
            QuestTurnInPortrait = fields.Read <uint>(70);

            for (int i = 0; i < SharedConst.QuestRewardReputationsCount; ++i)
            {
                RewardFactionId[i]       = fields.Read <uint>(71 + i * 4);
                RewardFactionValue[i]    = fields.Read <int>(72 + i * 4);
                RewardFactionOverride[i] = fields.Read <int>(73 + i * 4);
                RewardFactionCapIn[i]    = fields.Read <uint>(74 + i * 4);
            }

            RewardReputationMask = fields.Read <uint>(91);

            for (int i = 0; i < SharedConst.QuestRewardCurrencyCount; ++i)
            {
                RewardCurrencyId[i]    = fields.Read <uint>(92 + i * 2);
                RewardCurrencyCount[i] = fields.Read <uint>(93 + i * 2);

                if (RewardCurrencyId[i] != 0)
                {
                    ++_rewCurrencyCount;
                }
            }

            SoundAccept    = fields.Read <uint>(100);
            SoundTurnIn    = fields.Read <uint>(101);
            AreaGroupID    = fields.Read <uint>(102);
            LimitTime      = fields.Read <uint>(103);
            AllowableRaces = fields.Read <int>(104);
            QuestRewardID  = fields.Read <uint>(105);
            Expansion      = fields.Read <int>(106);

            LogTitle           = fields.Read <string>(107);
            LogDescription     = fields.Read <string>(108);
            QuestDescription   = fields.Read <string>(109);
            AreaDescription    = fields.Read <string>(110);
            PortraitGiverText  = fields.Read <string>(111);
            PortraitGiverName  = fields.Read <string>(112);
            PortraitTurnInText = fields.Read <string>(113);
            PortraitTurnInName = fields.Read <string>(114);
            QuestCompletionLog = fields.Read <string>(115);
        }
예제 #15
0
        public bool LoadCorpseFromDB(ulong guid, SQLFields field)
        {
            //        0     1     2     3            4      5          6          7       8       9      10        11    12          13          14
            // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, flags, dynFlags, time, corpseType, instanceId, guid FROM corpse WHERE mapId = ? AND instanceId = ?

            float  posX  = field.Read <float>(0);
            float  posY  = field.Read <float>(1);
            float  posZ  = field.Read <float>(2);
            float  o     = field.Read <float>(3);
            ushort mapId = field.Read <ushort>(4);

            _Create(ObjectGuid.Create(HighGuid.Corpse, mapId, 0, guid));

            SetObjectScale(1.0f);
            SetUInt32Value(CorpseFields.DisplayId, field.Read <uint>(5));
            _LoadIntoDataField(field.Read <string>(6), (int)CorpseFields.Item, EquipmentSlot.End);
            SetUInt32Value(CorpseFields.Bytes1, field.Read <uint>(7));
            SetUInt32Value(CorpseFields.Bytes2, field.Read <uint>(8));
            SetUInt32Value(CorpseFields.Flags, field.Read <byte>(9));
            SetUInt32Value(CorpseFields.DynamicFlags, field.Read <byte>(10));
            SetGuidValue(CorpseFields.Owner, ObjectGuid.Create(HighGuid.Player, field.Read <ulong>(14)));
            CharacterInfo characterInfo = Global.WorldMgr.GetCharacterInfo(GetGuidValue(CorpseFields.Owner));

            if (characterInfo != null)
            {
                SetUInt32Value(CorpseFields.FactionTemplate, CliDB.ChrRacesStorage.LookupByKey(characterInfo.RaceID).FactionID);
            }

            m_time = field.Read <uint>(11);

            uint instanceId = field.Read <uint>(13);

            // place
            SetLocationInstanceId(instanceId);
            SetMapId(mapId);
            Relocate(posX, posY, posZ, o);

            if (!IsPositionValid())
            {
                Log.outError(LogFilter.Player, "Corpse ({0}, owner: {1}) is not created, given coordinates are not valid (X: {2}, Y: {3}, Z: {4})",
                             GetGUID().ToString(), GetOwnerGUID().ToString(), posX, posY, posZ);
                return(false);
            }

            _cellCoord = GridDefines.ComputeCellCoord(GetPositionX(), GetPositionY());
            return(true);
        }
예제 #16
0
        public void LoadQuestTemplateAddon(SQLFields fields)
        {
            MaxLevel              = fields.Read <byte>(1);
            AllowableClasses      = fields.Read <uint>(2);
            SourceSpellID         = fields.Read <uint>(3);
            PrevQuestId           = fields.Read <int>(4);
            NextQuestId           = fields.Read <int>(5);
            ExclusiveGroup        = fields.Read <int>(6);
            RewardMailTemplateId  = fields.Read <uint>(7);
            RewardMailDelay       = fields.Read <uint>(8);
            RequiredSkillId       = fields.Read <ushort>(9);
            RequiredSkillPoints   = fields.Read <ushort>(10);
            RequiredMinRepFaction = fields.Read <ushort>(11);
            RequiredMaxRepFaction = fields.Read <ushort>(12);
            RequiredMinRepValue   = fields.Read <int>(13);
            RequiredMaxRepValue   = fields.Read <int>(14);
            SourceItemIdCount     = fields.Read <byte>(15);
            RewardMailSenderEntry = fields.Read <uint>(16);
            SpecialFlags          = (QuestSpecialFlags)fields.Read <byte>(17);
            ScriptId              = Global.ObjectMgr.GetScriptId(fields.Read <string>(18));

            if (SpecialFlags.HasAnyFlag(QuestSpecialFlags.AutoAccept))
            {
                Flags |= QuestFlags.AutoAccept;
            }
        }
예제 #17
0
        public override void LoadFromDB(SQLFields fields)
        {
            byte idx = 0;

            _id                  = fields.Read <uint>(idx);
            _playerGuid          = ObjectGuid.Create(HighGuid.Player, fields.Read <ulong>(++idx));
            _note                = fields.Read <string>(++idx);
            _createTime          = fields.Read <ulong>(++idx);
            _mapId               = fields.Read <ushort>(++idx);
            _pos                 = new Vector3(fields.Read <float>(++idx), fields.Read <float>(++idx), fields.Read <float>(++idx));
            _facing              = fields.Read <float>(++idx);
            _targetCharacterGuid = ObjectGuid.Create(HighGuid.Player, fields.Read <ulong>(++idx));
            _complaintType       = (GMSupportComplaintType)fields.Read <byte>(++idx);
            int reportLineIndex = fields.Read <int>(++idx);

            if (reportLineIndex != -1)
            {
                _chatLog.ReportLineIndex.Set((uint)reportLineIndex);
            }

            long closedBy = fields.Read <long>(++idx);

            if (closedBy == 0)
            {
                _closedBy = ObjectGuid.Empty;
            }
            else if (closedBy < 0)
            {
                _closedBy.SetRawValue(0, (ulong)closedBy);
            }
            else
            {
                _closedBy = ObjectGuid.Create(HighGuid.Player, (ulong)closedBy);
            }

            ulong assignedTo = fields.Read <ulong>(++idx);

            if (assignedTo == 0)
            {
                _assignedTo = ObjectGuid.Empty;
            }
            else
            {
                _assignedTo = ObjectGuid.Create(HighGuid.Player, assignedTo);
            }

            _comment = fields.Read <string>(++idx);
        }
예제 #18
0
 public void LoadChatLineFromDB(SQLFields fields)
 {
     _chatLog.Lines.Add(new SupportTicketSubmitComplaint.SupportTicketChatLine(fields.Read <long>(0), fields.Read <string>(1)));
 }
예제 #19
0
 public void LoadQuestMailSender(SQLFields fields)
 {
     RewardMailSenderEntry = fields.Read <uint>(1);
 }
예제 #20
0
        public override void LoadFromDB(SQLFields fields)
        {
            byte idx = 0;

            _id         = fields.Read <uint>(idx);
            _playerGuid = ObjectGuid.Create(HighGuid.Player, fields.Read <ulong>(++idx));
            _note       = fields.Read <string>(++idx);
            _createTime = fields.Read <ulong>(++idx);
            _mapId      = fields.Read <ushort>(++idx);
            _pos        = new Vector3(fields.Read <float>(++idx), fields.Read <float>(++idx), fields.Read <float>(++idx));
            _facing     = fields.Read <float>(++idx);

            long closedBy = fields.Read <long>(++idx);

            if (closedBy == 0)
            {
                _closedBy = ObjectGuid.Empty;
            }
            else if (closedBy < 0)
            {
                _closedBy.SetRawValue(0, (ulong)closedBy);
            }
            else
            {
                _closedBy = ObjectGuid.Create(HighGuid.Player, (ulong)closedBy);
            }

            ulong assignedTo = fields.Read <ulong>(++idx);

            if (assignedTo == 0)
            {
                _assignedTo = ObjectGuid.Empty;
            }
            else
            {
                _assignedTo = ObjectGuid.Create(HighGuid.Player, assignedTo);
            }

            _comment = fields.Read <string>(++idx);
        }
예제 #21
0
            public CharacterInfo(SQLFields fields)
            {
                Guid            = ObjectGuid.Create(HighGuid.Player, fields.Read <ulong>(0));
                Name            = fields.Read <string>(1);
                RaceId          = fields.Read <byte>(2);
                ClassId         = (Class)fields.Read <byte>(3);
                SexId           = fields.Read <byte>(4);
                ExperienceLevel = fields.Read <byte>(5);
                ZoneId          = fields.Read <uint>(6);
                MapId           = fields.Read <uint>(7);
                PreloadPos      = new Vector3(fields.Read <float>(8), fields.Read <float>(9), fields.Read <float>(10));

                ulong guildId = fields.Read <ulong>(11);

                if (guildId != 0)
                {
                    GuildGuid = ObjectGuid.Create(HighGuid.Guild, guildId);
                }

                PlayerFlags  playerFlags  = (PlayerFlags)fields.Read <uint>(12);
                AtLoginFlags atLoginFlags = (AtLoginFlags)fields.Read <ushort>(13);

                if (atLoginFlags.HasAnyFlag(AtLoginFlags.Resurrect))
                {
                    playerFlags &= ~PlayerFlags.Ghost;
                }

                if (playerFlags.HasAnyFlag(PlayerFlags.Ghost))
                {
                    Flags |= CharacterFlags.Ghost;
                }

                if (atLoginFlags.HasAnyFlag(AtLoginFlags.Rename))
                {
                    Flags |= CharacterFlags.Rename;
                }

                if (fields.Read <uint>(18) != 0)
                {
                    Flags |= CharacterFlags.LockedByBilling;
                }

                if (WorldConfig.GetBoolValue(WorldCfg.DeclinedNamesUsed) && !string.IsNullOrEmpty(fields.Read <string>(23)))
                {
                    Flags |= CharacterFlags.Declined;
                }

                if (atLoginFlags.HasAnyFlag(AtLoginFlags.Customize))
                {
                    Flags2 = CharacterCustomizeFlags.Customize;
                }
                else if (atLoginFlags.HasAnyFlag(AtLoginFlags.ChangeFaction))
                {
                    Flags2 = CharacterCustomizeFlags.Faction;
                }
                else if (atLoginFlags.HasAnyFlag(AtLoginFlags.ChangeRace))
                {
                    Flags2 = CharacterCustomizeFlags.Race;
                }

                Flags3     = 0;
                Flags4     = 0;
                FirstLogin = atLoginFlags.HasAnyFlag(AtLoginFlags.FirstLogin);

                // show pet at selection character in character list only for non-ghost character
                if (!playerFlags.HasAnyFlag(PlayerFlags.Ghost) && (ClassId == Class.Warlock || ClassId == Class.Hunter || ClassId == Class.Deathknight))
                {
                    CreatureTemplate creatureInfo = Global.ObjectMgr.GetCreatureTemplate(fields.Read <uint>(14));
                    if (creatureInfo != null)
                    {
                        PetCreatureDisplayId = fields.Read <uint>(15);
                        PetExperienceLevel   = fields.Read <ushort>(16);
                        PetCreatureFamilyId  = (uint)creatureInfo.Family;
                    }
                }

                BoostInProgress  = false;
                ProfessionIds[0] = 0;
                ProfessionIds[1] = 0;

                StringArguments equipment = new(fields.Read <string>(17));

                ListPosition   = fields.Read <byte>(19);
                LastPlayedTime = fields.Read <long>(20);

                var spec = Global.DB2Mgr.GetChrSpecializationByIndex(ClassId, fields.Read <byte>(21));

                if (spec != null)
                {
                    SpecID = (ushort)spec.Id;
                }

                LastLoginVersion = fields.Read <uint>(22);

                for (byte slot = 0; slot < InventorySlots.BagEnd; ++slot)
                {
                    VisualItems[slot].InvType          = (byte)equipment.NextUInt32();
                    VisualItems[slot].DisplayId        = equipment.NextUInt32();
                    VisualItems[slot].DisplayEnchantId = equipment.NextUInt32();
                    VisualItems[slot].Subclass         = (byte)equipment.NextUInt32();
                }
            }
예제 #22
0
            public CharacterInfo(SQLFields fields)
            {
                //         0                1                2                3                 4                  5                6                7
                // "SELECT characters.guid, characters.name, characters.race, characters.class, characters.gender, characters.skin, characters.face, characters.hairStyle, "
                //  8                     9                       10                         11                         12                         13
                // "characters.hairColor, characters.facialStyle, characters.customDisplay1, characters.customDisplay2, characters.customDisplay3, characters.level, "
                //  14               15              16                     17                     18
                // "characters.zone, characters.map, characters.position_x, characters.position_y, characters.position_z, "
                //  19                    20                      21                   22                   23                     24                   25
                // "guild_member.guildid, characters.playerFlags, characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, characters.equipmentCache, "
                //  26                     27               28                      29                            30                         31
                // "character_banned.guid, characters.slot, characters.logout_time, characters.activeTalentGroup, characters.lastLoginBuild, character_declinedname.genitive"

                Guid             = ObjectGuid.Create(HighGuid.Player, fields.Read <ulong>(0));
                Name             = fields.Read <string>(1);
                RaceId           = fields.Read <byte>(2);
                ClassId          = (Class)fields.Read <byte>(3);
                SexId            = fields.Read <byte>(4);
                SkinId           = fields.Read <byte>(5);
                FaceId           = fields.Read <byte>(6);
                HairStyle        = fields.Read <byte>(7);
                HairColor        = fields.Read <byte>(8);
                FacialHair       = fields.Read <byte>(9);
                CustomDisplay[0] = fields.Read <byte>(10);
                CustomDisplay[1] = fields.Read <byte>(11);
                CustomDisplay[2] = fields.Read <byte>(12);
                ExperienceLevel  = fields.Read <byte>(13);
                ZoneId           = fields.Read <uint>(14);
                MapId            = fields.Read <uint>(15);
                PreloadPos       = new Vector3(fields.Read <float>(16), fields.Read <float>(17), fields.Read <float>(18));

                ulong guildId = fields.Read <ulong>(19);

                if (guildId != 0)
                {
                    GuildGuid = ObjectGuid.Create(HighGuid.Guild, guildId);
                }

                PlayerFlags  playerFlags  = (PlayerFlags)fields.Read <uint>(20);
                AtLoginFlags atLoginFlags = (AtLoginFlags)fields.Read <ushort>(21);

                if (atLoginFlags.HasAnyFlag(AtLoginFlags.Resurrect))
                {
                    playerFlags &= ~PlayerFlags.Ghost;
                }

                if (playerFlags.HasAnyFlag(PlayerFlags.Ghost))
                {
                    Flags |= CharacterFlags.Ghost;
                }

                if (atLoginFlags.HasAnyFlag(AtLoginFlags.Rename))
                {
                    Flags |= CharacterFlags.Rename;
                }

                if (fields.Read <uint>(26) != 0)
                {
                    Flags |= CharacterFlags.LockedByBilling;
                }

                if (WorldConfig.GetBoolValue(WorldCfg.DeclinedNamesUsed) && !string.IsNullOrEmpty(fields.Read <string>(31)))
                {
                    Flags |= CharacterFlags.Declined;
                }

                if (atLoginFlags.HasAnyFlag(AtLoginFlags.Customize))
                {
                    Flags2 = CharacterCustomizeFlags.Customize;
                }
                else if (atLoginFlags.HasAnyFlag(AtLoginFlags.ChangeFaction))
                {
                    Flags2 = CharacterCustomizeFlags.Faction;
                }
                else if (atLoginFlags.HasAnyFlag(AtLoginFlags.ChangeRace))
                {
                    Flags2 = CharacterCustomizeFlags.Race;
                }

                Flags3     = 0;
                Flags4     = 0;
                FirstLogin = atLoginFlags.HasAnyFlag(AtLoginFlags.FirstLogin);

                // show pet at selection character in character list only for non-ghost character
                if (!playerFlags.HasAnyFlag(PlayerFlags.Ghost) && (ClassId == Class.Warlock || ClassId == Class.Hunter || ClassId == Class.Deathknight))
                {
                    CreatureTemplate creatureInfo = Global.ObjectMgr.GetCreatureTemplate(fields.Read <uint>(22));
                    if (creatureInfo != null)
                    {
                        PetCreatureDisplayId = fields.Read <uint>(23);
                        PetExperienceLevel   = fields.Read <ushort>(24);
                        PetCreatureFamilyId  = (uint)creatureInfo.Family;
                    }
                }

                BoostInProgress  = false;
                ProfessionIds[0] = 0;
                ProfessionIds[1] = 0;

                StringArguments equipment = new StringArguments(fields.Read <string>(25));

                ListPosition   = fields.Read <byte>(27);
                LastPlayedTime = fields.Read <uint>(28);

                var spec = Global.DB2Mgr.GetChrSpecializationByIndex(ClassId, fields.Read <byte>(29));

                if (spec != null)
                {
                    SpecID = (ushort)spec.Id;
                }

                LastLoginVersion = fields.Read <uint>(30);

                for (byte slot = 0; slot < InventorySlots.BagEnd; ++slot)
                {
                    VisualItems[slot].InvType          = (byte)equipment.NextUInt32();
                    VisualItems[slot].DisplayId        = equipment.NextUInt32();
                    VisualItems[slot].DisplayEnchantId = equipment.NextUInt32();
                    VisualItems[slot].Subclass         = (byte)equipment.NextUInt32();
                }
            }
예제 #23
0
        public bool LoadFromDB(SQLFields fields)
        {
            Id          = fields.Read <uint>(0);
            auctioneer  = fields.Read <ulong>(1);
            itemGUIDLow = fields.Read <ulong>(2);
            itemEntry   = fields.Read <uint>(3);
            itemCount   = fields.Read <uint>(4);
            owner       = fields.Read <ulong>(5);
            buyout      = fields.Read <ulong>(6);
            expire_time = fields.Read <uint>(7);
            bidder      = fields.Read <ulong>(8);
            bid         = fields.Read <ulong>(9);
            startbid    = fields.Read <ulong>(10);
            deposit     = fields.Read <ulong>(11);

            CreatureData auctioneerData = Global.ObjectMgr.GetCreatureData(auctioneer);

            if (auctioneerData == null)
            {
                Log.outError(LogFilter.Server, "Auction {0} has not a existing auctioneer (GUID : {1})", Id, auctioneer);
                return(false);
            }

            CreatureTemplate auctioneerInfo = Global.ObjectMgr.GetCreatureTemplate(auctioneerData.id);

            if (auctioneerInfo == null)
            {
                Log.outError(LogFilter.Server, "Auction {0} has not a existing auctioneer (GUID : {1} Entry: {2})", Id, auctioneer, auctioneerData.id);
                return(false);
            }

            factionTemplateId = auctioneerInfo.Faction;
            auctionHouseEntry = Global.AuctionMgr.GetAuctionHouseEntry(factionTemplateId, ref houseId);
            if (auctionHouseEntry == null)
            {
                Log.outError(LogFilter.Server, "Auction {0} has auctioneer (GUID : {1} Entry: {2}) with wrong faction {3}", Id, auctioneer, auctioneerData.id, factionTemplateId);
                return(false);
            }

            // check if sold item exists for guid
            // and itemEntry in fact (GetAItem will fail if problematic in result check in AuctionHouseMgr.LoadAuctionItems)
            if (!Global.AuctionMgr.GetAItem(itemGUIDLow))
            {
                Log.outError(LogFilter.Server, "Auction {0} has not a existing item : {1}", Id, itemGUIDLow);
                return(false);
            }
            return(true);
        }
예제 #24
0
        public AccountInfo(SQLFields fields)
        {
            //         0             1           2          3                4            5           6          7            8      9     10          11
            // SELECT a.id, a.sessionkey, ba.last_ip, ba.locked, ba.lock_country, a.expansion, a.mutetime, ba.locale, a.recruiter, a.os, ba.id, aa.gmLevel,
            //                                                              12                                                            13    14
            // bab.unbandate > UNIX_TIMESTAMP() OR bab.unbandate = bab.bandate, ab.unbandate > UNIX_TIMESTAMP() OR ab.unbandate = ab.bandate, r.id
            // FROM account a LEFT JOIN battlenet_accounts ba ON a.battlenet_account = ba.id LEFT JOIN account_access aa ON a.id = aa.id AND aa.RealmID IN (-1, ?)
            // LEFT JOIN battlenet_account_bans bab ON ba.id = bab.id LEFT JOIN account_banned ab ON a.id = ab.id LEFT JOIN account r ON a.id = r.recruiter
            // WHERE a.username = ? ORDER BY aa.RealmID DESC LIMIT 1
            game.Id                = fields.Read <uint>(0);
            game.SessionKey        = fields.Read <string>(1).ToByteArray();
            battleNet.LastIP       = fields.Read <string>(2);
            battleNet.IsLockedToIP = fields.Read <bool>(3);
            battleNet.LockCountry  = fields.Read <string>(4);
            game.Expansion         = fields.Read <byte>(5);
            game.MuteTime          = fields.Read <long>(6);
            battleNet.Locale       = (LocaleConstant)fields.Read <byte>(7);
            game.Recruiter         = fields.Read <uint>(8);
            game.OS                = fields.Read <string>(9);
            battleNet.Id           = fields.Read <uint>(10);
            game.Security          = (AccountTypes)fields.Read <byte>(11);
            battleNet.IsBanned     = fields.Read <uint>(12) != 0;
            game.IsBanned          = fields.Read <uint>(13) != 0;
            game.IsRectuiter       = fields.Read <uint>(14) != 0;

            if (battleNet.Locale >= LocaleConstant.Total)
            {
                battleNet.Locale = LocaleConstant.enUS;
            }
        }
예제 #25
0
        public bool LoadCorpseFromDB(ulong guid, SQLFields field)
        {
            //        0     1     2     3            4      5          6          7       8       9      10        11    12          13          14
            // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, flags, dynFlags, time, corpseType, instanceId, guid FROM corpse WHERE mapId = ? AND instanceId = ?

            float  posX  = field.Read <float>(0);
            float  posY  = field.Read <float>(1);
            float  posZ  = field.Read <float>(2);
            float  o     = field.Read <float>(3);
            ushort mapId = field.Read <ushort>(4);

            _Create(ObjectGuid.Create(HighGuid.Corpse, mapId, 0, guid));

            SetObjectScale(1.0f);
            SetDisplayId(field.Read <uint>(5));
            StringArray items = new StringArray(field.Read <string>(6), ' ');

            for (uint index = 0; index < EquipmentSlot.End; ++index)
            {
                SetItem(index, uint.Parse(items[(int)index]));
            }

            uint bytes1 = field.Read <uint>(7);
            uint bytes2 = field.Read <uint>(8);

            SetRace((Race)((bytes1 >> 8) & 0xFF));
            SetSex((Gender)((bytes1 >> 16) & 0xFF));
            SetSkin((byte)((bytes1 >> 24) & 0xFF));
            SetFace((byte)(bytes2 & 0xFF));
            SetHairStyle((byte)((bytes2 >> 8) & 0xFF));
            SetHairColor((byte)((bytes2 >> 16) & 0xFF));
            SetFacialHairStyle((byte)((bytes2 >> 24) & 0xFF));
            SetFlags((CorpseFlags)field.Read <byte>(9));
            SetCorpseDynamicFlags((CorpseDynFlags)field.Read <byte>(10));
            SetOwnerGUID(ObjectGuid.Create(HighGuid.Player, field.Read <ulong>(14)));
            SetFactionTemplate(CliDB.ChrRacesStorage.LookupByKey(m_corpseData.RaceID).FactionID);

            m_time = field.Read <uint>(11);

            uint instanceId = field.Read <uint>(13);

            // place
            SetLocationInstanceId(instanceId);
            SetMapId(mapId);
            Relocate(posX, posY, posZ, o);

            if (!IsPositionValid())
            {
                Log.outError(LogFilter.Player, "Corpse ({0}, owner: {1}) is not created, given coordinates are not valid (X: {2}, Y: {3}, Z: {4})",
                             GetGUID().ToString(), GetOwnerGUID().ToString(), posX, posY, posZ);
                return(false);
            }

            _cellCoord = GridDefines.ComputeCellCoord(GetPositionX(), GetPositionY());
            return(true);
        }