예제 #1
0
 /// <summary>
 /// [addedInVersion, +inf[
 /// </summary>
 /// <param name="name">database field name</param>
 /// <param name="locale">initial locale</param>
 /// <param name="isPrimaryKey">true if field is a primary key</param>
 public DBFieldNameAttribute(string name, LocaleConstant locale, bool isPrimaryKey = false)
 {
     Name = name;
     IsPrimaryKey = isPrimaryKey;
     Count = 1;
     Locale = locale;
 }
예제 #2
0
 /// <summary>
 /// [addedInVersion, +inf[
 /// </summary>
 /// <param name="name">database field name</param>
 /// <param name="addedInVersion">initial version</param>
 /// <param name="locale">initial locale</param>
 /// <param name="isPrimaryKey">true if field is a primary key</param>
 public DBFieldNameAttribute(string name, TargetedDatabase addedInVersion, LocaleConstant locale, bool isPrimaryKey = false)
 {
     Name = name;
     IsPrimaryKey = isPrimaryKey;
     Count = 1;
     Locale = locale;
     _addedInVersion = addedInVersion;
 }
 /// <summary>
 /// [addedInVersion, +inf[
 /// </summary>
 /// <param name="name">database field name</param>
 /// <param name="locale">initial locale</param>
 /// <param name="isPrimaryKey">true if field is a primary key</param>
 public DBFieldNameAttribute(string name, LocaleConstant locale, bool isPrimaryKey = false, bool noQuotes = false, bool nullable = false)
 {
     Name = name;
     IsPrimaryKey = isPrimaryKey;
     NoQuotes = noQuotes;
     Nullable = nullable;
     Count = 1;
     Locale = locale;
 }
예제 #4
0
 /// <summary>
 /// [addedInVersion, +inf[
 /// </summary>
 /// <param name="name">database field name</param>
 /// <param name="locale">initial locale</param>
 public DBFieldNameAttribute(string name, LocaleConstant locale)
 {
     if (BinaryPacketReader.GetLocale() == locale)
     {
         Name = name;
         Count = 1;
     }
     else
     {
         Name = null;
         Count = 0;
     }
 }
예제 #5
0
        public void LoadData(uint indexField, DBClientHelper[] helpers, HotfixStatements preparedStatement, HotfixStatements preparedStatementLocale)
        {
            SQLResult result = DB.Hotfix.Query(DB.Hotfix.GetPreparedStatement(preparedStatement));

            if (!result.IsEmpty())
            {
                do
                {
                    var idValue = result.Read <uint>((int)indexField);

                    var obj   = new T();
                    int index = 0;
                    for (var fieldIndex = 0; fieldIndex < helpers.Length; fieldIndex++)
                    {
                        var helper = helpers[fieldIndex];
                        if (helper.IsArray)
                        {
                            Array array = (Array)helper.Getter(obj);
                            for (var i = 0; i < array.Length; ++i)
                            {
                                switch (Type.GetTypeCode(helper.RealType))
                                {
                                case TypeCode.SByte:
                                    helper.SetValue(array, result.Read <sbyte>(index++), i);
                                    break;

                                case TypeCode.Byte:
                                    helper.SetValue(array, result.Read <byte>(index++), i);
                                    break;

                                case TypeCode.Int16:
                                    helper.SetValue(array, result.Read <short>(index++), i);
                                    break;

                                case TypeCode.UInt16:
                                    helper.SetValue(array, result.Read <ushort>(index++), i);
                                    break;

                                case TypeCode.Int32:
                                    helper.SetValue(array, result.Read <int>(index++), i);
                                    break;

                                case TypeCode.UInt32:
                                    helper.SetValue(array, result.Read <uint>(index++), i);
                                    break;

                                case TypeCode.Single:
                                    helper.SetValue(array, result.Read <float>(index++), i);
                                    break;

                                case TypeCode.String:
                                    helper.SetValue(array, result.Read <string>(index++), i);
                                    break;

                                case TypeCode.Object:
                                    switch (helper.FieldType.Name)
                                    {
                                    case "Vector2":
                                        var vector2 = new Vector2();
                                        vector2.X = result.Read <float>(index++);
                                        vector2.Y = result.Read <float>(index++);
                                        helper.SetValue(array, vector2, i);
                                        break;

                                    case "Vector3":
                                        var vector3 = new Vector3();
                                        vector3.X = result.Read <float>(index++);
                                        vector3.Y = result.Read <float>(index++);
                                        vector3.Z = result.Read <float>(index++);
                                        helper.SetValue(array, vector3, i);
                                        break;

                                    case "LocalizedString":
                                        LocalizedString locString = new LocalizedString();
                                        locString[Global.WorldMgr.GetDefaultDbcLocale()] = result.Read <string>(index++);
                                        helper.SetValue(array, locString, i);
                                        break;

                                    default:
                                        Log.outError(LogFilter.ServerLoading, "Wrong Array Type: {0}", helper.FieldType.Name);
                                        break;
                                    }
                                    break;

                                default:
                                    Log.outError(LogFilter.ServerLoading, "Wrong Array Type: {0}", helper.FieldType.Name);
                                    break;
                                }
                            }
                        }
                        else
                        {
                            switch (Type.GetTypeCode(helper.RealType))
                            {
                            case TypeCode.SByte:
                                helper.SetValue(obj, result.Read <sbyte>(index++));
                                break;

                            case TypeCode.Byte:
                                helper.SetValue(obj, result.Read <byte>(index++));
                                break;

                            case TypeCode.Int16:
                                helper.SetValue(obj, result.Read <short>(index++));
                                break;

                            case TypeCode.UInt16:
                                helper.SetValue(obj, result.Read <ushort>(index++));
                                break;

                            case TypeCode.Int32:
                                helper.SetValue(obj, result.Read <int>(index++));
                                break;

                            case TypeCode.UInt32:
                                helper.SetValue(obj, result.Read <uint>(index++));
                                break;

                            case TypeCode.Single:
                                helper.SetValue(obj, result.Read <float>(index++));
                                break;

                            case TypeCode.String:
                                string str = result.Read <string>(index++);
                                helper.SetValue(obj, str);
                                break;

                            case TypeCode.Object:
                                switch (helper.FieldType.Name)
                                {
                                case "Vector2":
                                    var vector2 = new Vector2();
                                    vector2.X = result.Read <float>(index++);
                                    vector2.Y = result.Read <float>(index++);
                                    helper.SetValue(obj, vector2);
                                    break;

                                case "Vector3":
                                    var vector3 = new Vector3();
                                    vector3.X = result.Read <float>(index++);
                                    vector3.Y = result.Read <float>(index++);
                                    vector3.Z = result.Read <float>(index++);
                                    helper.SetValue(obj, vector3);
                                    break;

                                case "LocalizedString":
                                    LocalizedString locString = new LocalizedString();
                                    locString[Global.WorldMgr.GetDefaultDbcLocale()] = result.Read <string>(index++);
                                    helper.SetValue(obj, locString);
                                    break;

                                default:
                                    Log.outError(LogFilter.ServerLoading, "Wrong Array Type: {0}", helper.FieldType.Name);
                                    break;
                                }
                                break;

                            default:
                                Log.outError(LogFilter.ServerLoading, "Wrong Array Type: {0}", helper.FieldType.Name);
                                break;
                            }
                        }
                    }

                    base[idValue] = obj;
                }while (result.NextRow());
            }

            if (preparedStatementLocale == 0)
            {
                return;
            }

            for (LocaleConstant locale = 0; locale < LocaleConstant.OldTotal; ++locale)
            {
                if (Global.WorldMgr.GetDefaultDbcLocale() == locale || locale == LocaleConstant.None)
                {
                    continue;
                }

                PreparedStatement stmt = DB.Hotfix.GetPreparedStatement(preparedStatementLocale);
                stmt.AddValue(0, locale.ToString());
                SQLResult localeResult = DB.Hotfix.Query(stmt);
                if (localeResult.IsEmpty())
                {
                    continue;
                }

                do
                {
                    int index = 0;
                    var obj   = this.LookupByKey(localeResult.Read <uint>(index++));
                    if (obj == null)
                    {
                        continue;
                    }

                    for (var i = 0; i < helpers.Length; i++)
                    {
                        var fieldInfo = helpers[i];
                        if (fieldInfo.FieldType != typeof(LocalizedString))
                        {
                            continue;
                        }

                        LocalizedString locString = (LocalizedString)fieldInfo.Getter(obj);
                        locString[locale] = localeResult.Read <string>(index++);
                    }
                } while (localeResult.NextRow());
            }
        }
 /// <summary>
 /// [addedInVersion, removedInVersion[
 /// </summary>
 /// <param name="name">database field name</param>
 /// <param name="addedInVersion">initial version</param>
 /// <param name="removedInVersion">final version</param>
 /// <param name="locale">initial locale</param>
 /// <param name="isPrimaryKey">true if field is a primary key</param>
 public DBFieldNameAttribute(string name, TargetedDatabase addedInVersion, TargetedDatabase removedInVersion, LocaleConstant locale, bool isPrimaryKey = false, bool noQuotes = false, bool nullable = false)
 {
     Name = name;
     IsPrimaryKey = isPrimaryKey;
     NoQuotes = noQuotes;
     Nullable = nullable;
     Count = 1;
     Locale = locale;
     _addedInVersion = addedInVersion;
     _removedInVersion = removedInVersion;
 }
예제 #7
0
 public bool HasString(LocaleConstant locale = SharedConst.DefaultLocale)
 {
     return(!string.IsNullOrEmpty(stringStorage[(int)locale]));
 }
예제 #8
0
 public string GetName(LocaleConstant locale = SharedConst.DefaultLocale)
 {
     return(ExtendedData.Display[locale]);
 }
예제 #9
0
 public void SetLocale(LocaleConstant locale)
 {
     _locale = locale;
 }
예제 #10
0
파일: Gossip.cs 프로젝트: WoWCMS/CypherCore
        public void SendQuestGiverQuestDetails(Quest quest, ObjectGuid npcGUID, bool autoLaunched, bool displayPopup)
        {
            QuestGiverQuestDetails packet = new QuestGiverQuestDetails();

            packet.QuestTitle         = quest.LogTitle;
            packet.LogDescription     = quest.LogDescription;
            packet.DescriptionText    = quest.QuestDescription;
            packet.PortraitGiverText  = quest.PortraitGiverText;
            packet.PortraitGiverName  = quest.PortraitGiverName;
            packet.PortraitTurnInText = quest.PortraitTurnInText;
            packet.PortraitTurnInName = quest.PortraitTurnInName;

            LocaleConstant locale = _session.GetSessionDbLocaleIndex();

            if (locale != LocaleConstant.enUS)
            {
                QuestTemplateLocale localeData = Global.ObjectMgr.GetQuestLocale(quest.Id);
                if (localeData != null)
                {
                    ObjectManager.GetLocaleString(localeData.LogTitle, locale, ref packet.QuestTitle);
                    ObjectManager.GetLocaleString(localeData.LogDescription, locale, ref packet.LogDescription);
                    ObjectManager.GetLocaleString(localeData.QuestDescription, locale, ref packet.DescriptionText);
                    ObjectManager.GetLocaleString(localeData.PortraitGiverText, locale, ref packet.PortraitGiverText);
                    ObjectManager.GetLocaleString(localeData.PortraitGiverName, locale, ref packet.PortraitGiverName);
                    ObjectManager.GetLocaleString(localeData.PortraitTurnInText, locale, ref packet.PortraitTurnInText);
                    ObjectManager.GetLocaleString(localeData.PortraitTurnInName, locale, ref packet.PortraitTurnInName);
                }
            }

            packet.QuestGiverGUID        = npcGUID;
            packet.InformUnit            = _session.GetPlayer().GetDivider();
            packet.QuestID               = quest.Id;
            packet.PortraitGiver         = quest.QuestGiverPortrait;
            packet.PortraitTurnIn        = quest.QuestTurnInPortrait;
            packet.AutoLaunched          = autoLaunched;
            packet.DisplayPopup          = displayPopup;
            packet.QuestFlags[0]         = (uint)quest.Flags;
            packet.QuestFlags[1]         = (uint)quest.FlagsEx;
            packet.SuggestedPartyMembers = quest.SuggestedPlayers;

            if (quest.SourceSpellID != 0)
            {
                packet.LearnSpells.Add(quest.SourceSpellID);
            }

            quest.BuildQuestRewards(packet.Rewards, _session.GetPlayer());

            for (int i = 0; i < SharedConst.QuestEmoteCount; ++i)
            {
                var emote = new QuestDescEmote(quest.DetailsEmote[i], quest.DetailsEmoteDelay[i]);
                packet.DescEmotes.Add(emote);
            }

            var objs = quest.Objectives;

            for (int i = 0; i < objs.Count; ++i)
            {
                var obj = new QuestObjectiveSimple();
                obj.ID       = objs[i].ID;
                obj.ObjectID = objs[i].ObjectID;
                obj.Amount   = objs[i].Amount;
                obj.Type     = (byte)objs[i].Type;
                packet.Objectives.Add(obj);
            }

            _session.SendPacket(packet);
        }
예제 #11
0
파일: Gossip.cs 프로젝트: WoWCMS/CypherCore
        public void SendQuestGiverOfferReward(Quest quest, ObjectGuid npcGUID, bool autoLaunched)
        {
            QuestGiverOfferRewardMessage packet = new QuestGiverOfferRewardMessage();

            packet.QuestTitle         = quest.LogTitle;
            packet.RewardText         = quest.OfferRewardText;
            packet.PortraitGiverText  = quest.PortraitGiverText;
            packet.PortraitGiverName  = quest.PortraitGiverName;
            packet.PortraitTurnInText = quest.PortraitTurnInText;
            packet.PortraitTurnInName = quest.PortraitTurnInName;

            LocaleConstant locale = _session.GetSessionDbLocaleIndex();

            if (locale != LocaleConstant.enUS)
            {
                QuestTemplateLocale localeData = Global.ObjectMgr.GetQuestLocale(quest.Id);
                if (localeData != null)
                {
                    ObjectManager.GetLocaleString(localeData.LogTitle, locale, ref packet.QuestTitle);
                    ObjectManager.GetLocaleString(localeData.PortraitGiverText, locale, ref packet.PortraitGiverText);
                    ObjectManager.GetLocaleString(localeData.PortraitGiverName, locale, ref packet.PortraitGiverName);
                    ObjectManager.GetLocaleString(localeData.PortraitTurnInText, locale, ref packet.PortraitTurnInText);
                    ObjectManager.GetLocaleString(localeData.PortraitTurnInName, locale, ref packet.PortraitTurnInName);
                }

                QuestOfferRewardLocale questOfferRewardLocale = Global.ObjectMgr.GetQuestOfferRewardLocale(quest.Id);
                if (questOfferRewardLocale != null)
                {
                    ObjectManager.GetLocaleString(questOfferRewardLocale.RewardText, locale, ref packet.RewardText);
                }
            }

            QuestGiverOfferReward offer = new QuestGiverOfferReward();

            quest.BuildQuestRewards(offer.Rewards, _session.GetPlayer());
            offer.QuestGiverGUID = npcGUID;

            // Is there a better way? what about game objects?
            Creature creature = ObjectAccessor.GetCreature(_session.GetPlayer(), npcGUID);

            if (creature)
            {
                offer.QuestGiverCreatureID = creature.GetCreatureTemplate().Entry;
            }

            offer.QuestID               = quest.Id;
            offer.AutoLaunched          = autoLaunched;
            offer.SuggestedPartyMembers = quest.SuggestedPlayers;

            for (uint i = 0; i < SharedConst.QuestEmoteCount && quest.OfferRewardEmote[i] != 0; ++i)
            {
                offer.Emotes.Add(new QuestDescEmote(quest.OfferRewardEmote[i], quest.OfferRewardEmoteDelay[i]));
            }

            offer.QuestFlags[0] = (uint)quest.Flags;
            offer.QuestFlags[1] = (uint)quest.FlagsEx;

            packet.PortraitTurnIn = quest.QuestTurnInPortrait;
            packet.PortraitGiver  = quest.QuestGiverPortrait;
            packet.QuestPackageID = quest.PackageID;

            packet.QuestData = offer;

            _session.SendPacket(packet);
        }
예제 #12
0
 public virtual void Invoke(List <ServerPacket> data, LocaleConstant locale = LocaleConstant.enUS)
 {
 }
예제 #13
0
 /// <summary>
 /// [addedInVersion, removedInVersion[
 /// </summary>
 /// <param name="name">database field name</param>
 /// <param name="addedInVersion">initial version</param>
 /// <param name="removedInVersion">final version</param>
 /// <param name="locale">initial locale</param>
 /// <param name="isPrimaryKey">true if field is a primary key</param>
 public DBFieldNameAttribute(string name, TargetedDatabase addedInVersion, TargetedDatabase removedInVersion, LocaleConstant locale, bool isPrimaryKey = false, bool noQuotes = false, bool nullable = false)
 {
     Name              = name;
     IsPrimaryKey      = isPrimaryKey;
     NoQuotes          = noQuotes;
     Nullable          = nullable;
     Count             = 1;
     Locale            = locale;
     _addedInVersion   = addedInVersion;
     _removedInVersion = removedInVersion;
 }
예제 #14
0
 public void AddGreetingLocale(LocaleConstant locale, string greeting)
 {
     _greeting[(int)locale] = greeting;
 }
예제 #15
0
 public virtual ServerPacket Invoke(LocaleConstant locale = LocaleConstant.enUS)
 {
     return(null);
 }
예제 #16
0
            static bool HandleLearnAllRecipesCommand(StringArguments args, CommandHandler handler)
            {
                //  Learns all recipes of specified profession and sets skill to max
                //  Example: .learn all_recipes enchanting

                Player target = handler.GetSelectedPlayer();

                if (!target)
                {
                    handler.SendSysMessage(CypherStrings.PlayerNotFound);
                    return(false);
                }

                if (args.Empty())
                {
                    return(false);
                }

                // converting string that we try to find to lower case
                string namePart = args.NextString().ToLower();

                string name    = "";
                uint   skillId = 0;

                foreach (var skillInfo in CliDB.SkillLineStorage.Values)
                {
                    if ((skillInfo.CategoryID != SkillCategory.Profession &&
                         skillInfo.CategoryID != SkillCategory.Secondary) ||
                        skillInfo.CanLink == 0)                            // only prof with recipes have set
                    {
                        continue;
                    }

                    LocaleConstant locale = handler.GetSessionDbcLocale();
                    name = skillInfo.DisplayName[locale];
                    if (string.IsNullOrEmpty(name))
                    {
                        continue;
                    }

                    if (!name.Like(namePart))
                    {
                        locale = 0;
                        for (; locale < LocaleConstant.Total; ++locale)
                        {
                            if (locale == handler.GetSessionDbcLocale())
                            {
                                continue;
                            }

                            name = skillInfo.DisplayName[locale];
                            if (name.IsEmpty())
                            {
                                continue;
                            }

                            if (name.Like(namePart))
                            {
                                break;
                            }
                        }
                    }

                    if (locale < LocaleConstant.Total)
                    {
                        skillId = skillInfo.Id;
                        break;
                    }
                }

                if (skillId == 0)
                {
                    return(false);
                }

                HandleLearnSkillRecipesHelper(target, skillId);

                ushort maxLevel = target.GetPureMaxSkillValue((SkillType)skillId);

                target.SetSkill(skillId, target.GetSkillStep((SkillType)skillId), maxLevel, maxLevel);
                handler.SendSysMessage(CypherStrings.CommandLearnAllRecipes, name);
                return(true);
            }
예제 #17
0
        public override String GetSQLRequest()
        {
            String returnSql = "";

            if (m_creatureTemplateData.id == 0 || isError)
            {
                return(returnSql);
            }

            // Creature Template
            if (IsCheckboxChecked("template"))
            {
                switch (GetVersion())
                {
                case "7.3.5.26972":
                {
                    m_creatureTemplateBuilder = new SqlBuilder("creature_template", "entry");
                    m_creatureTemplateBuilder.SetFieldsNames("minlevel", "maxlevel", "name", "subname", "modelid1", "rank", "type", "family");

                    m_creatureTemplateBuilder.AppendFieldsValue(m_creatureTemplateData.id, m_creatureTemplateData.minlevel, m_creatureTemplateData.maxlevel, m_creatureTemplateData.name, m_subname ?? "", m_modelid, m_isBoss ? "3" : "0", m_creatureTemplateData.type, m_creatureTemplateData.family);
                    returnSql += m_creatureTemplateBuilder.ToString() + "\n";
                }
                break;

                default:     // 8.0.1.28153
                {
                    m_creatureTemplateBuilder = new SqlBuilder("creature_template", "entry");
                    m_creatureTemplateBuilder.SetFieldsNames("minlevel", "maxlevel", "name", "subname", "rank", "type", "family");

                    m_creatureTemplateBuilder.AppendFieldsValue(m_creatureTemplateData.id, m_creatureTemplateData.minlevel, m_creatureTemplateData.maxlevel, m_creatureTemplateData.name, m_subname ?? "", m_isBoss ? "3" : "0", m_creatureTemplateData.type, m_creatureTemplateData.family);
                    returnSql += m_creatureTemplateBuilder.ToString() + "\n";

                    // models are now saved in creature_template_model as of BFA
                    m_creatureTemplateModelBuilder = new SqlBuilder("creature_template_model", "CreatureID");
                    m_creatureTemplateModelBuilder.SetFieldsNames("Idx", "CreatureDisplayID", "Probability");

                    m_creatureTemplateModelBuilder.AppendFieldsValue(m_creatureTemplateData.id, "0", m_modelid, "1");
                    returnSql += m_creatureTemplateModelBuilder.ToString() + "\n";
                }
                break;
                }
            }

            if (IsCheckboxChecked("health modifier") && m_creatureTemplateData.health != null)
            {
                SqlBuilder builder = new SqlBuilder("creature_template", "entry", SqlQueryType.Update);
                builder.SetFieldsNames("HealthModifier");

                String healthModifier = Tools.GetHealthModifier(float.Parse(m_creatureTemplateData.health), 6, m_creatureTemplateData.minlevel, 1);

                builder.AppendFieldsValue(m_creatureTemplateData.id, healthModifier);
                returnSql += builder.ToString() + "\n";
            }

            // faction
            if (IsCheckboxChecked("simple faction"))
            {
                SqlBuilder m_creatureFactionBuilder = new SqlBuilder("creature_template", "entry", SqlQueryType.Update);
                m_creatureFactionBuilder.SetFieldsNames("faction");

                m_creatureFactionBuilder.AppendFieldsValue(m_creatureTemplateData.id, m_faction);
                returnSql += m_creatureFactionBuilder.ToString() + "\n";
            }

            // Creature Template
            if (IsCheckboxChecked("money"))
            {
                SqlBuilder m_creatureMoneyBuilder = new SqlBuilder("creature_template", "entry", SqlQueryType.Update);
                m_creatureMoneyBuilder.SetFieldsNames("mingold", "maxgold");

                m_creatureMoneyBuilder.AppendFieldsValue(m_creatureTemplateData.id, m_creatureTemplateData.minGold, m_creatureTemplateData.maxGold);
                returnSql += m_creatureMoneyBuilder.ToString() + "\n";
            }

            // Locales
            if (IsCheckboxChecked("locale"))
            {
                LocaleConstant localeIndex = (LocaleConstant)Properties.Settings.Default.localIndex;

                String localeName = localeIndex.ToString();

                if (localeIndex != 0)
                {
                    m_creatureLocalesBuilder = new SqlBuilder("creature_template_locales", "entry");
                    m_creatureLocalesBuilder.SetFieldsNames("locale", "Name", "Title");

                    m_creatureLocalesBuilder.AppendFieldsValue(m_creatureTemplateData.id, localeIndex.ToString(), m_creatureTemplateData.name, m_subname ?? "");
                    returnSql += m_creatureLocalesBuilder.ToString() + "\n";
                }
                else
                {
                    m_creatureLocalesBuilder = new SqlBuilder("creature_template", "entry");
                    m_creatureLocalesBuilder.SetFieldsNames("name", "subname");

                    m_creatureLocalesBuilder.AppendFieldsValue(m_creatureTemplateData.id, m_creatureTemplateData.name, m_subname ?? "");
                    returnSql += m_creatureLocalesBuilder.ToString() + "\n";
                }
            }

            if (IsCheckboxChecked("vendor") && m_npcVendorDatas != null)
            {
                m_npcVendorBuilder = new SqlBuilder("npc_vendor", "entry", SqlQueryType.DeleteInsert);
                m_npcVendorBuilder.SetFieldsNames("slot", "item", "maxcount", "incrtime", "ExtendedCost", "type", "PlayerConditionID");

                foreach (NpcVendorParsing npcVendorData in m_npcVendorDatas)
                {
                    m_npcVendorBuilder.AppendFieldsValue(m_creatureTemplateData.id, npcVendorData.slot, npcVendorData.id, npcVendorData.avail, npcVendorData.incrTime, npcVendorData.integerExtendedCost, 1, 0);
                }

                returnSql += m_npcVendorBuilder.ToString() + "\n";
            }

            if (IsCheckboxChecked("loot") && m_creatureLootDatas != null)
            {
                bool referenceAdded   = false;
                int  maxReferenceLoot = 2; // A voir si on peut trouver

                int templateEntry = m_creatureTemplateData.id;
                m_creatureLootBuilder = new SqlBuilder("creature_loot_template", "entry", SqlQueryType.DeleteInsert);
                m_creatureLootBuilder.SetFieldsNames("Item", "Reference", "Chance", "QuestRequired", "LootMode", "GroupId", "MinCount", "MaxCount", "Comment");

                m_creatureReferenceLootBuilder = new SqlBuilder("reference_loot_template", "entry", SqlQueryType.DeleteInsert);
                m_creatureReferenceLootBuilder.SetFieldsNames("Item", "Reference", "Chance", "QuestRequired", "LootMode", "GroupId", "MinCount", "MaxCount", "Comment");

                returnSql += "UPDATE creature_template SET lootid = " + templateEntry + " WHERE entry = " + templateEntry + " AND lootid = 0;\n";
                foreach (CreatureLootParsing creatureLootData in m_creatureLootDatas)
                {
                    List <int> entryList = new List <int>();

                    CreatureLootItemParsing creatureLootItemData = null;
                    try
                    {
                        creatureLootItemData = (CreatureLootItemParsing)creatureLootData;
                    }
                    catch (Exception ex) { }

                    CreatureLootCurrencyParsing creatureLootCurrencyData = null;
                    try
                    {
                        creatureLootCurrencyData = (CreatureLootCurrencyParsing)creatureLootData;
                    }
                    catch (Exception ex) { }

                    int minLootCount = creatureLootData.stack.Length >= 1 ? creatureLootData.stack[0] : 1;
                    int maxLootCount = creatureLootData.stack.Length >= 2 ? creatureLootData.stack[1] : minLootCount;

                    // If bonuses, certainly an important loot, set to references
                    if (!IsCheckboxChecked("is dungeon/raid boss") || (creatureLootItemData == null || creatureLootItemData.bonustrees == null))
                    {
                        switch (creatureLootData.mode)
                        {
                        default:
                            entryList.Add(templateEntry);
                            break;;
                        }

                        foreach (int entry in entryList)
                        {
                            int idMultiplier = creatureLootCurrencyData != null ? -1 : 1;

                            if (idMultiplier < 1)
                            {
                                continue;
                            }

                            m_creatureLootBuilder.AppendFieldsValue(entry,                              // Entry
                                                                    creatureLootData.id * idMultiplier, // Item
                                                                    0,                                  // Reference
                                                                    creatureLootData.percent,           // Chance
                                                                    creatureLootData.questRequired,     // QuestRequired
                                                                    1,                                  // LootMode
                                                                    0,                                  // GroupId
                                                                    minLootCount,                       // MinCount
                                                                    maxLootCount,                       // MaxCount
                                                                    "");                                // Comment
                        }
                    }
                    else
                    {
                        if (!referenceAdded)
                        {
                            m_creatureLootBuilder.AppendFieldsValue(templateEntry,    // Entry
                                                                    0,                // Item
                                                                    templateEntry,    // Reference
                                                                    100,              // Chance
                                                                    0,                // QuestRequired
                                                                    1,                // LootMode
                                                                    0,                // GroupId
                                                                    maxReferenceLoot, // MinCount
                                                                    maxReferenceLoot, // MaxCount
                                                                    "");              // Comment
                            referenceAdded = true;
                        }

                        m_creatureReferenceLootBuilder.AppendFieldsValue(templateEntry,                  // Entry
                                                                         creatureLootData.id,            // Item
                                                                         0,                              // Reference
                                                                         creatureLootData.percent,       // Chance
                                                                         creatureLootData.questRequired, // QuestRequired
                                                                         1,                              // LootMode
                                                                         1,                              // GroupId
                                                                         minLootCount,                   // MinCount
                                                                         maxLootCount,                   // MaxCount
                                                                         "");                            // Comment
                    }

                    if (creatureLootData.percent == "0")
                    {
                        m_zeroPercentLootChance = true;
                    }
                }

                returnSql += m_creatureLootBuilder.ToString() + "\n";
                returnSql += m_creatureReferenceLootBuilder.ToString() + "\n";
            }

            if (IsCheckboxChecked("skinning") && m_creatureSkinningDatas != null)
            {
                m_creatureSkinningBuilder = new SqlBuilder("skinning_loot_template", "entry", SqlQueryType.DeleteInsert);
                m_creatureSkinningBuilder.SetFieldsNames("Item", "Reference", "Chance", "QuestRequired", "LootMode", "GroupId", "MinCount", "MaxCount", "Comment");

                returnSql += "UPDATE creature_template SET skinloot = " + m_creatureTemplateData.id + " WHERE entry = " + m_creatureTemplateData.id + " AND skinloot = 0;\n";
                foreach (CreatureLootParsing creatureSkinningData in m_creatureSkinningDatas)
                {
                    m_creatureSkinningBuilder.AppendFieldsValue(m_creatureTemplateData.id,     // Entry
                                                                creatureSkinningData.id,       // Item
                                                                0,                             // Reference
                                                                creatureSkinningData.percent,  // Chance
                                                                0,                             // QuestRequired
                                                                1,                             // LootMode
                                                                0,                             // GroupId
                                                                creatureSkinningData.stack[0], // MinCount
                                                                creatureSkinningData.stack[1], // MaxCount
                                                                "");                           // Comment
                }

                returnSql += m_creatureSkinningBuilder.ToString() + "\n";
            }

            if (IsCheckboxChecked("trainer") && m_creatureTrainerDatas != null)
            {
                m_creatureTrainerBuilder = new SqlBuilder("npc_trainer", "entry", SqlQueryType.DeleteInsert);
                m_creatureTrainerBuilder.SetFieldsNames("spell", "spellcost", "reqskill", "reqskillvalue", "reqlevel");

                returnSql += "UPDATE creature_template SET npc_flag = 16 WHERE entry = " + m_creatureTemplateData.id + ";\n";
                foreach (CreatureTrainerParsing creatureTrainerData in m_creatureTrainerDatas)
                {
                    int reqskill = creatureTrainerData.learnedat > 0 ? creatureTrainerData.skill[0] : 0;
                    m_creatureTrainerBuilder.AppendFieldsValue(m_creatureTemplateData.id, creatureTrainerData.id, creatureTrainerData.trainingcost, reqskill, creatureTrainerData.learnedat, creatureTrainerData.level);
                }

                returnSql += m_creatureTrainerBuilder.ToString() + "\n";
            }

            if (IsCheckboxChecked("quest starter") && m_creatureQuestStarterDatas != null)
            {
                m_creatureQuestStarterBuilder = new SqlBuilder("creature_queststarter", "entry", SqlQueryType.DeleteInsert);
                m_creatureQuestStarterBuilder.SetFieldsNames("quest");

                foreach (QuestStarterEnderParsing creatureQuestStarterData in m_creatureQuestStarterDatas)
                {
                    m_creatureQuestStarterBuilder.AppendFieldsValue(m_creatureTemplateData.id, creatureQuestStarterData.id);
                }

                returnSql += m_creatureQuestStarterBuilder.ToString() + "\n";
            }

            if (IsCheckboxChecked("quest ender") && m_creatureQuestEnderDatas != null)
            {
                m_creatureQuestEnderBuilder = new SqlBuilder("creature_questender", "entry", SqlQueryType.DeleteInsert);
                m_creatureQuestEnderBuilder.SetFieldsNames("quest");

                foreach (QuestStarterEnderParsing creatureQuestEnderData in m_creatureQuestEnderDatas)
                {
                    m_creatureQuestEnderBuilder.AppendFieldsValue(m_creatureTemplateData.id, creatureQuestEnderData.id);
                }

                returnSql += m_creatureQuestEnderBuilder.ToString() + "\n";
            }

            return(returnSql);
        }
예제 #18
0
        void HandleCreatureQuery(QueryCreature packet)
        {
            QueryCreatureResponse response = new QueryCreatureResponse();

            response.CreatureID = packet.CreatureID;

            CreatureTemplate creatureInfo = Global.ObjectMgr.GetCreatureTemplate(packet.CreatureID);

            if (creatureInfo != null)
            {
                response.Allow = true;

                CreatureStats stats = new CreatureStats();

                stats.Leader = creatureInfo.RacialLeader;

                string name    = creatureInfo.Name;
                string nameAlt = creatureInfo.FemaleName;

                stats.Flags[0] = (uint)creatureInfo.TypeFlags;
                stats.Flags[1] = creatureInfo.TypeFlags2;

                stats.CreatureType   = (int)creatureInfo.CreatureType;
                stats.CreatureFamily = (int)creatureInfo.Family;
                stats.Classification = (int)creatureInfo.Rank;

                for (uint i = 0; i < SharedConst.MaxCreatureKillCredit; ++i)
                {
                    stats.ProxyCreatureID[i] = creatureInfo.KillCredit[i];
                }

                stats.CreatureDisplayID[0] = creatureInfo.ModelId1;
                stats.CreatureDisplayID[1] = creatureInfo.ModelId2;
                stats.CreatureDisplayID[2] = creatureInfo.ModelId3;
                stats.CreatureDisplayID[3] = creatureInfo.ModelId4;

                stats.HpMulti     = creatureInfo.ModHealth;
                stats.EnergyMulti = creatureInfo.ModMana;

                stats.CreatureMovementInfoID = creatureInfo.MovementId;
                stats.RequiredExpansion      = creatureInfo.RequiredExpansion;
                stats.HealthScalingExpansion = creatureInfo.HealthScalingExpansion;
                stats.VignetteID             = creatureInfo.VignetteID;

                stats.Title      = creatureInfo.SubName;
                stats.TitleAlt   = creatureInfo.TitleAlt;
                stats.CursorName = creatureInfo.IconName;

                var items = Global.ObjectMgr.GetCreatureQuestItemList(packet.CreatureID);
                foreach (uint item in items)
                {
                    stats.QuestItems.Add(item);
                }

                LocaleConstant localeConstant = GetSessionDbLocaleIndex();
                if (localeConstant != LocaleConstant.enUS)
                {
                    CreatureLocale creatureLocale = Global.ObjectMgr.GetCreatureLocale(packet.CreatureID);
                    if (creatureLocale != null)
                    {
                        ObjectManager.GetLocaleString(creatureLocale.Name, localeConstant, ref name);
                        ObjectManager.GetLocaleString(creatureLocale.NameAlt, localeConstant, ref nameAlt);
                        ObjectManager.GetLocaleString(creatureLocale.Title, localeConstant, ref stats.Title);
                        ObjectManager.GetLocaleString(creatureLocale.TitleAlt, localeConstant, ref stats.TitleAlt);
                    }
                }
                stats.Name[0]    = name;
                stats.NameAlt[0] = nameAlt;

                response.Stats = stats;
            }

            SendPacket(response);
        }
예제 #19
0
        static bool HandleCharacterReputationCommand(StringArguments args, CommandHandler handler)
        {
            Player target;

            if (!handler.extractPlayerTarget(args, out target))
            {
                return(false);
            }

            LocaleConstant loc = handler.GetSessionDbcLocale();

            var targetFSL = target.GetReputationMgr().GetStateList();

            foreach (var pair in targetFSL)
            {
                FactionState   faction      = pair.Value;
                FactionRecord  factionEntry = CliDB.FactionStorage.LookupByKey(faction.ID);
                string         factionName  = factionEntry != null ? factionEntry.Name[loc] : "#Not found#";
                ReputationRank rank         = target.GetReputationMgr().GetRank(factionEntry);
                string         rankName     = handler.GetCypherString(ReputationMgr.ReputationRankStrIndex[(int)rank]);
                StringBuilder  ss           = new StringBuilder();
                if (handler.GetSession() != null)
                {
                    ss.AppendFormat("{0} - |cffffffff|Hfaction:{0}|h[{1} {2}]|h|r", faction.ID, factionName, loc);
                }
                else
                {
                    ss.AppendFormat("{0} - {1} {2}", faction.ID, factionName, loc);
                }

                ss.AppendFormat(" {0} ({1})", rankName, target.GetReputationMgr().GetReputation(factionEntry));

                if (faction.Flags.HasAnyFlag(FactionFlags.Visible))
                {
                    ss.Append(handler.GetCypherString(CypherStrings.FactionVisible));
                }
                if (faction.Flags.HasAnyFlag(FactionFlags.AtWar))
                {
                    ss.Append(handler.GetCypherString(CypherStrings.FactionAtwar));
                }
                if (faction.Flags.HasAnyFlag(FactionFlags.PeaceForced))
                {
                    ss.Append(handler.GetCypherString(CypherStrings.FactionPeaceForced));
                }
                if (faction.Flags.HasAnyFlag(FactionFlags.Hidden))
                {
                    ss.Append(handler.GetCypherString(CypherStrings.FactionHidden));
                }
                if (faction.Flags.HasAnyFlag(FactionFlags.InvisibleForced))
                {
                    ss.Append(handler.GetCypherString(CypherStrings.FactionInvisibleForced));
                }
                if (faction.Flags.HasAnyFlag(FactionFlags.Inactive))
                {
                    ss.Append(handler.GetCypherString(CypherStrings.FactionInactive));
                }

                handler.SendSysMessage(ss.ToString());
            }

            return(true);
        }
예제 #20
0
        public void WriteRecord(uint id, LocaleConstant locale, ByteBuffer buffer)
        {
            T entry = this.LookupByKey(id);

            foreach (var fieldInfo in entry.GetType().GetFields())
            {
                if (fieldInfo.Name == "Id")
                {
                    continue;
                }

                var type = fieldInfo.FieldType;
                if (type.IsArray)
                {
                    WriteArrayValues(entry, fieldInfo, buffer);
                    continue;
                }

                switch (Type.GetTypeCode(type))
                {
                case TypeCode.Boolean:
                    buffer.WriteUInt8(fieldInfo.GetValue(entry));
                    break;

                case TypeCode.SByte:
                    buffer.WriteInt8(fieldInfo.GetValue(entry));
                    break;

                case TypeCode.Byte:
                    buffer.WriteUInt8(fieldInfo.GetValue(entry));
                    break;

                case TypeCode.Int16:
                    buffer.WriteInt16(fieldInfo.GetValue(entry));
                    break;

                case TypeCode.UInt16:
                    buffer.WriteUInt16(fieldInfo.GetValue(entry));
                    break;

                case TypeCode.Int32:
                    buffer.WriteInt32(fieldInfo.GetValue(entry));
                    break;

                case TypeCode.UInt32:
                    buffer.WriteUInt32(fieldInfo.GetValue(entry));
                    break;

                case TypeCode.Int64:
                    buffer.WriteInt64(fieldInfo.GetValue(entry));
                    break;

                case TypeCode.UInt64:
                    buffer.WriteUInt64(fieldInfo.GetValue(entry));
                    break;

                case TypeCode.Single:
                    buffer.WriteFloat(fieldInfo.GetValue(entry));
                    break;

                case TypeCode.Object:
                    switch (type.Name)
                    {
                    case "LocalizedString":
                        LocalizedString locStr = (LocalizedString)fieldInfo.GetValue(entry);
                        if (!locStr.HasString(locale))
                        {
                            locale = 0;
                            if (!locStr.HasString(locale))
                            {
                                buffer.WriteUInt16(0);
                                break;
                            }
                        }

                        string str = locStr[locale];
                        buffer.WriteCString(str);
                        break;
                    }
                    break;
                }
            }
        }
예제 #21
0
파일: Gossip.cs 프로젝트: WoWCMS/CypherCore
        public void SendGossipMenu(uint titleTextId, ObjectGuid objectGUID)
        {
            _interactionData.Reset();
            _interactionData.SourceGuid = objectGUID;

            GossipMessagePkt packet = new GossipMessagePkt();

            packet.GossipGUID = objectGUID;
            packet.GossipID   = (int)_gossipMenu.GetMenuId();
            packet.TextID     = (int)titleTextId;

            uint count = 0;

            foreach (var pair in _gossipMenu.GetMenuItems())
            {
                ClientGossipOptions opt  = new ClientGossipOptions();
                GossipMenuItem      item = pair.Value;
                opt.ClientOption = (int)pair.Key;
                opt.OptionNPC    = item.MenuItemIcon;
                opt.OptionFlags  = (byte)(item.IsCoded ? 1 : 0); // makes pop up box password
                opt.OptionCost   = (int)item.BoxMoney;           // money required to open menu, 2.0.3
                opt.Text         = item.Message;                 // text for gossip item
                opt.Confirm      = item.BoxMessage;              // accept text (related to money) pop up box, 2.0.3
                packet.GossipOptions.Add(opt);

                ++count;
            }

            count = 0;
            for (byte i = 0; i < _questMenu.GetMenuItemCount(); ++i)
            {
                QuestMenuItem item    = _questMenu.GetItem(i);
                uint          questID = item.QuestId;
                Quest         quest   = Global.ObjectMgr.GetQuestTemplate(questID);
                if (quest != null)
                {
                    ClientGossipText text = new ClientGossipText();
                    text.QuestID              = (int)questID;
                    text.QuestType            = item.QuestIcon;
                    text.QuestLevel           = quest.Level;
                    text.QuestMaxScalingLevel = quest.MaxScalingLevel;
                    text.QuestFlags           = (int)quest.Flags;
                    text.QuestFlagsEx         = (int)quest.FlagsEx;
                    text.Repeatable           = quest.IsRepeatable();

                    text.QuestTitle = quest.LogTitle;
                    LocaleConstant locale = _session.GetSessionDbLocaleIndex();
                    if (locale != LocaleConstant.enUS)
                    {
                        QuestTemplateLocale localeData = Global.ObjectMgr.GetQuestLocale(quest.Id);
                        if (localeData != null)
                        {
                            ObjectManager.GetLocaleString(localeData.LogTitle, locale, ref text.QuestTitle);
                        }
                    }

                    packet.GossipText.Add(text);
                    ++count;
                }
            }

            _session.SendPacket(packet);
        }
예제 #22
0
        public void LoadData(int indexField, HotfixStatements preparedStatement, HotfixStatements preparedStatementLocale)
        {
            SQLResult result = DB.Hotfix.Query(DB.Hotfix.GetPreparedStatement(preparedStatement));

            if (!result.IsEmpty())
            {
                do
                {
                    var id = result.Read <uint>(indexField == -1 ? 0 : indexField);

                    var obj = new T();

                    int dbIndex = 0;
                    foreach (var f in typeof(T).GetFields())
                    {
                        Type type = f.FieldType;

                        if (type.IsArray)
                        {
                            Type arrayElementType = type.GetElementType();
                            if (arrayElementType.IsEnum)
                            {
                                arrayElementType = arrayElementType.GetEnumUnderlyingType();
                            }

                            Array array = (Array)f.GetValue(obj);
                            switch (Type.GetTypeCode(arrayElementType))
                            {
                            case TypeCode.SByte:
                                f.SetValue(obj, ReadArray <sbyte>(result, dbIndex, array.Length));
                                break;

                            case TypeCode.Byte:
                                f.SetValue(obj, ReadArray <byte>(result, dbIndex, array.Length));
                                break;

                            case TypeCode.Int16:
                                f.SetValue(obj, ReadArray <short>(result, dbIndex, array.Length));
                                break;

                            case TypeCode.UInt16:
                                f.SetValue(obj, ReadArray <ushort>(result, dbIndex, array.Length));
                                break;

                            case TypeCode.Int32:
                                f.SetValue(obj, ReadArray <int>(result, dbIndex, array.Length));
                                break;

                            case TypeCode.UInt32:
                                f.SetValue(obj, ReadArray <uint>(result, dbIndex, array.Length));
                                break;

                            case TypeCode.Single:
                                f.SetValue(obj, ReadArray <float>(result, dbIndex, array.Length));
                                break;

                            case TypeCode.String:
                                f.SetValue(obj, ReadArray <string>(result, dbIndex, array.Length));
                                break;

                            case TypeCode.Object:
                                if (arrayElementType == typeof(Vector3))
                                {
                                    f.SetValue(obj, new Vector3(ReadArray <float>(result, dbIndex, 3)));
                                }
                                break;

                            default:
                                Log.outError(LogFilter.ServerLoading, "Wrong Array Type: {0}", arrayElementType.Name);
                                break;
                            }

                            dbIndex += array.Length;
                        }
                        else
                        {
                            if (type.IsEnum)
                            {
                                type = type.GetEnumUnderlyingType();
                            }

                            switch (Type.GetTypeCode(type))
                            {
                            case TypeCode.SByte:
                                f.SetValue(obj, result.Read <sbyte>(dbIndex++));
                                break;

                            case TypeCode.Byte:
                                f.SetValue(obj, result.Read <byte>(dbIndex++));
                                break;

                            case TypeCode.Int16:
                                f.SetValue(obj, result.Read <short>(dbIndex++));
                                break;

                            case TypeCode.UInt16:
                                f.SetValue(obj, result.Read <ushort>(dbIndex++));
                                break;

                            case TypeCode.Int32:
                                f.SetValue(obj, result.Read <int>(dbIndex++));
                                break;

                            case TypeCode.UInt32:
                                f.SetValue(obj, result.Read <uint>(dbIndex++));
                                break;

                            case TypeCode.Single:
                                f.SetValue(obj, result.Read <float>(dbIndex++));
                                break;

                            case TypeCode.String:
                                string str = result.Read <string>(dbIndex++);
                                f.SetValue(obj, str);
                                break;

                            case TypeCode.Object:
                                if (type == typeof(LocalizedString))
                                {
                                    LocalizedString locString = new LocalizedString();
                                    locString[Global.WorldMgr.GetDefaultDbcLocale()] = result.Read <string>(dbIndex++);

                                    f.SetValue(obj, locString);
                                }
                                else if (type == typeof(Vector2))
                                {
                                    f.SetValue(obj, new Vector2(ReadArray <float>(result, dbIndex, 2)));
                                    dbIndex += 2;
                                }
                                else if (type == typeof(Vector3))
                                {
                                    f.SetValue(obj, new Vector3(ReadArray <float>(result, dbIndex, 3)));
                                    dbIndex += 3;
                                }
                                else if (type == typeof(FlagArray128))
                                {
                                    f.SetValue(obj, new FlagArray128(ReadArray <uint>(result, dbIndex, 4)));
                                    dbIndex += 4;
                                }
                                break;

                            default:
                                Log.outError(LogFilter.ServerLoading, "Wrong Type: {0}", type.Name);
                                break;
                            }
                        }
                    }

                    base[id] = obj;
                }while (result.NextRow());
            }

            if (preparedStatementLocale == 0)
            {
                return;
            }

            for (LocaleConstant locale = 0; locale < LocaleConstant.Total; ++locale)
            {
                if (Global.WorldMgr.GetDefaultDbcLocale() == locale || locale == LocaleConstant.None)
                {
                    continue;
                }

                PreparedStatement stmt = DB.Hotfix.GetPreparedStatement(preparedStatementLocale);
                stmt.AddValue(0, locale.ToString());
                SQLResult localeResult = DB.Hotfix.Query(stmt);
                if (localeResult.IsEmpty())
                {
                    continue;
                }

                do
                {
                    int index = 0;
                    var obj   = this.LookupByKey(localeResult.Read <uint>(index++));
                    if (obj == null)
                    {
                        continue;
                    }

                    foreach (var f in typeof(T).GetFields())
                    {
                        if (f.FieldType != typeof(LocalizedString))
                        {
                            continue;
                        }

                        LocalizedString locString = (LocalizedString)f.GetValue(obj);
                        locString[locale] = localeResult.Read <string>(index++);
                    }
                } while (localeResult.NextRow());
            }
        }
예제 #23
0
파일: Gossip.cs 프로젝트: WoWCMS/CypherCore
        public void SendQuestQueryResponse(Quest quest)
        {
            QueryQuestInfoResponse packet = new QueryQuestInfoResponse();

            packet.Allow   = true;
            packet.QuestID = quest.Id;

            packet.Info.LogTitle           = quest.LogTitle;
            packet.Info.LogDescription     = quest.LogDescription;
            packet.Info.QuestDescription   = quest.QuestDescription;
            packet.Info.AreaDescription    = quest.AreaDescription;
            packet.Info.QuestCompletionLog = quest.QuestCompletionLog;
            packet.Info.PortraitGiverText  = quest.PortraitGiverText;
            packet.Info.PortraitGiverName  = quest.PortraitGiverName;
            packet.Info.PortraitTurnInText = quest.PortraitTurnInText;
            packet.Info.PortraitTurnInName = quest.PortraitTurnInName;

            LocaleConstant locale = _session.GetSessionDbLocaleIndex();

            if (locale != LocaleConstant.enUS)
            {
                QuestTemplateLocale questTemplateLocale = Global.ObjectMgr.GetQuestLocale(quest.Id);
                if (questTemplateLocale != null)
                {
                    ObjectManager.GetLocaleString(questTemplateLocale.LogTitle, locale, ref packet.Info.LogTitle);
                    ObjectManager.GetLocaleString(questTemplateLocale.LogDescription, locale, ref packet.Info.LogDescription);
                    ObjectManager.GetLocaleString(questTemplateLocale.QuestDescription, locale, ref packet.Info.QuestDescription);
                    ObjectManager.GetLocaleString(questTemplateLocale.AreaDescription, locale, ref packet.Info.AreaDescription);
                    ObjectManager.GetLocaleString(questTemplateLocale.QuestCompletionLog, locale, ref packet.Info.QuestCompletionLog);
                    ObjectManager.GetLocaleString(questTemplateLocale.PortraitGiverText, locale, ref packet.Info.PortraitGiverText);
                    ObjectManager.GetLocaleString(questTemplateLocale.PortraitGiverName, locale, ref packet.Info.PortraitGiverName);
                    ObjectManager.GetLocaleString(questTemplateLocale.PortraitTurnInText, locale, ref packet.Info.PortraitTurnInText);
                    ObjectManager.GetLocaleString(questTemplateLocale.PortraitTurnInName, locale, ref packet.Info.PortraitTurnInName);
                }
            }

            packet.Info.QuestID              = quest.Id;
            packet.Info.QuestType            = (int)quest.Type;
            packet.Info.QuestLevel           = quest.Level;
            packet.Info.QuestMaxScalingLevel = quest.MaxScalingLevel;
            packet.Info.QuestPackageID       = quest.PackageID;
            packet.Info.QuestMinLevel        = quest.MinLevel;
            packet.Info.QuestSortID          = quest.QuestSortID;
            packet.Info.QuestInfoID          = quest.QuestInfoID;
            packet.Info.SuggestedGroupNum    = quest.SuggestedPlayers;
            packet.Info.RewardNextQuest      = quest.NextQuestInChain;
            packet.Info.RewardXPDifficulty   = quest.RewardXPDifficulty;
            packet.Info.RewardXPMultiplier   = quest.RewardXPMultiplier;

            if (!quest.HasFlag(QuestFlags.HiddenRewards))
            {
                packet.Info.RewardMoney = quest.RewardMoney < 0 ? quest.RewardMoney : (int)_session.GetPlayer().GetQuestMoneyReward(quest);
            }

            packet.Info.RewardMoneyDifficulty = quest.RewardMoneyDifficulty;
            packet.Info.RewardMoneyMultiplier = quest.RewardMoneyMultiplier;
            packet.Info.RewardBonusMoney      = quest.RewardBonusMoney;
            for (byte i = 0; i < SharedConst.QuestRewardDisplaySpellCount; ++i)
            {
                packet.Info.RewardDisplaySpell[i] = quest.RewardDisplaySpell[i];
            }

            packet.Info.RewardSpell = quest.RewardSpell;

            packet.Info.RewardHonor     = quest.RewardHonor;
            packet.Info.RewardKillHonor = quest.RewardKillHonor;

            packet.Info.RewardArtifactXPDifficulty = (int)quest.RewardArtifactXPDifficulty;
            packet.Info.RewardArtifactXPMultiplier = quest.RewardArtifactXPMultiplier;
            packet.Info.RewardArtifactCategoryID   = (int)quest.RewardArtifactCategoryID;

            packet.Info.StartItem          = quest.SourceItemId;
            packet.Info.Flags              = (uint)quest.Flags;
            packet.Info.FlagsEx            = (uint)quest.FlagsEx;
            packet.Info.RewardTitle        = quest.RewardTitleId;
            packet.Info.RewardArenaPoints  = quest.RewardArenaPoints;
            packet.Info.RewardSkillLineID  = quest.RewardSkillId;
            packet.Info.RewardNumSkillUps  = quest.RewardSkillPoints;
            packet.Info.RewardFactionFlags = quest.RewardReputationMask;
            packet.Info.PortraitGiver      = quest.QuestGiverPortrait;
            packet.Info.PortraitTurnIn     = quest.QuestTurnInPortrait;

            for (byte i = 0; i < SharedConst.QuestItemDropCount; ++i)
            {
                packet.Info.ItemDrop[i]         = (int)quest.ItemDrop[i];
                packet.Info.ItemDropQuantity[i] = (int)quest.ItemDropQuantity[i];
            }

            if (!quest.HasFlag(QuestFlags.HiddenRewards))
            {
                for (byte i = 0; i < SharedConst.QuestRewardItemCount; ++i)
                {
                    packet.Info.RewardItems[i]  = quest.RewardItemId[i];
                    packet.Info.RewardAmount[i] = quest.RewardItemCount[i];
                }
                for (byte i = 0; i < SharedConst.QuestRewardChoicesCount; ++i)
                {
                    packet.Info.UnfilteredChoiceItems[i].ItemID   = quest.RewardChoiceItemId[i];
                    packet.Info.UnfilteredChoiceItems[i].Quantity = quest.RewardChoiceItemCount[i];
                }
            }

            for (byte i = 0; i < SharedConst.QuestRewardReputationsCount; ++i)
            {
                packet.Info.RewardFactionID[i]       = quest.RewardFactionId[i];
                packet.Info.RewardFactionValue[i]    = quest.RewardFactionValue[i];
                packet.Info.RewardFactionOverride[i] = quest.RewardFactionOverride[i];
                packet.Info.RewardFactionCapIn[i]    = (int)quest.RewardFactionCapIn[i];
            }

            packet.Info.POIContinent = quest.POIContinent;
            packet.Info.POIx         = quest.POIx;
            packet.Info.POIy         = quest.POIy;
            packet.Info.POIPriority  = quest.POIPriority;

            packet.Info.AllowableRaces = quest.AllowableRaces;
            packet.Info.QuestRewardID  = (int)quest.QuestRewardID;
            packet.Info.Expansion      = quest.Expansion;

            foreach (QuestObjective questObjective in quest.Objectives)
            {
                if (locale != LocaleConstant.enUS)
                {
                    QuestObjectivesLocale questObjectivesLocaleData = Global.ObjectMgr.GetQuestObjectivesLocale(questObjective.ID);
                    if (questObjectivesLocaleData != null)
                    {
                        ObjectManager.GetLocaleString(questObjectivesLocaleData.Description, locale, ref questObjective.Description);
                    }
                }

                packet.Info.Objectives.Add(questObjective);
            }

            for (int i = 0; i < SharedConst.QuestRewardCurrencyCount; ++i)
            {
                packet.Info.RewardCurrencyID[i]  = quest.RewardCurrencyId[i];
                packet.Info.RewardCurrencyQty[i] = quest.RewardCurrencyCount[i];
            }

            packet.Info.AcceptedSoundKitID = quest.SoundAccept;
            packet.Info.CompleteSoundKitID = quest.SoundTurnIn;
            packet.Info.AreaGroupID        = quest.AreaGroupID;
            packet.Info.TimeAllowed        = quest.LimitTime;

            _session.SendPacket(packet);
        }
예제 #24
0
        public WorldSession(uint id, string name, uint battlenetAccountId, WorldSocket sock, AccountTypes sec, Expansion expansion, long mute_time, string os, LocaleConstant locale, uint recruiter, bool isARecruiter)
        {
            m_muteTime = mute_time;
            AntiDOS    = new DosProtection(this);
            m_Socket[(int)ConnectionType.Realm] = sock;
            _security           = sec;
            _accountId          = id;
            _accountName        = name;
            _battlenetAccountId = battlenetAccountId;
            m_accountExpansion  = expansion;
            m_expansion         = (Expansion)Math.Min((byte)expansion, WorldConfig.GetIntValue(WorldCfg.Expansion));
            _os = os;
            m_sessionDbcLocale     = Global.WorldMgr.GetAvailableDbcLocale(locale);
            m_sessionDbLocaleIndex = locale;
            recruiterId            = recruiter;
            isRecruiter            = isARecruiter;
            expireTime             = 60000; // 1 min after socket loss, session is deleted
            m_currentBankerGUID    = ObjectGuid.Empty;
            _battlePetMgr          = new BattlePetMgr(this);
            _collectionMgr         = new CollectionMgr(this);

            m_Address = sock.GetRemoteIpAddress().ToString();
            ResetTimeOutTime();
            DB.Login.Execute("UPDATE account SET online = 1 WHERE id = {0};", GetAccountId());     // One-time query
        }
예제 #25
0
파일: Gossip.cs 프로젝트: WoWCMS/CypherCore
        public void SendQuestGiverRequestItems(Quest quest, ObjectGuid npcGUID, bool canComplete, bool autoLaunched)
        {
            // We can always call to RequestItems, but this packet only goes out if there are actually
            // items.  Otherwise, we'll skip straight to the OfferReward

            if (!quest.HasSpecialFlag(QuestSpecialFlags.Deliver) && canComplete)
            {
                SendQuestGiverOfferReward(quest, npcGUID, true);
                return;
            }

            QuestGiverRequestItems packet = new QuestGiverRequestItems();

            packet.QuestTitle     = quest.LogTitle;
            packet.CompletionText = quest.RequestItemsText;

            LocaleConstant locale = _session.GetSessionDbLocaleIndex();

            if (locale != LocaleConstant.enUS)
            {
                QuestTemplateLocale localeData = Global.ObjectMgr.GetQuestLocale(quest.Id);
                if (localeData != null)
                {
                    ObjectManager.GetLocaleString(localeData.LogTitle, locale, ref packet.QuestTitle);
                }

                QuestRequestItemsLocale questRequestItemsLocale = Global.ObjectMgr.GetQuestRequestItemsLocale(quest.Id);
                if (questRequestItemsLocale != null)
                {
                    ObjectManager.GetLocaleString(questRequestItemsLocale.CompletionText, locale, ref packet.CompletionText);
                }
            }

            packet.QuestGiverGUID = npcGUID;

            // Is there a better way? what about game objects?
            Creature creature = ObjectAccessor.GetCreature(_session.GetPlayer(), npcGUID);

            if (creature)
            {
                packet.QuestGiverCreatureID = creature.GetCreatureTemplate().Entry;
            }

            packet.QuestID = quest.Id;

            if (canComplete)
            {
                packet.CompEmoteDelay = quest.EmoteOnCompleteDelay;
                packet.CompEmoteType  = quest.EmoteOnComplete;
            }
            else
            {
                packet.CompEmoteDelay = quest.EmoteOnIncompleteDelay;
                packet.CompEmoteType  = quest.EmoteOnIncomplete;
            }

            packet.QuestFlags[0]       = (uint)quest.Flags;
            packet.QuestFlags[1]       = (uint)quest.FlagsEx;
            packet.SuggestPartyMembers = quest.SuggestedPlayers;

            // incomplete: FD
            // incomplete quest with item objective but item objective is complete DD
            packet.StatusFlags = canComplete ? 0xFF : 0xFD;

            packet.MoneyToGet = 0;
            foreach (QuestObjective obj in quest.Objectives)
            {
                switch (obj.Type)
                {
                case QuestObjectiveType.Item:
                    packet.Collect.Add(new QuestObjectiveCollect((uint)obj.ObjectID, obj.Amount, (uint)obj.Flags));
                    break;

                case QuestObjectiveType.Currency:
                    packet.Currency.Add(new QuestCurrency((uint)obj.ObjectID, obj.Amount));
                    break;

                case QuestObjectiveType.Money:
                    packet.MoneyToGet += obj.Amount;
                    break;

                default:
                    break;
                }
            }

            packet.AutoLaunched = autoLaunched;

            _session.SendPacket(packet);
        }
예제 #26
0
        public void Initialize(ChatMsg chatType, Language language, WorldObject sender, WorldObject receiver, string message, uint achievementId = 0, string channelName = "", LocaleConstant locale = LocaleConstant.enUS, string addonPrefix = "")
        {
            // Clear everything because same packet can be used multiple times
            Clear();

            SenderGUID.Clear();
            SenderAccountGUID.Clear();
            SenderGuildGUID.Clear();
            PartyGUID.Clear();
            TargetGUID.Clear();
            SenderName = "";
            TargetName = "";
            _ChatFlags = ChatFlags.None;

            SlashCmd  = chatType;
            _Language = language;

            if (sender)
            {
                SetSender(sender, locale);
            }

            if (receiver)
            {
                SetReceiver(receiver, locale);
            }

            SenderVirtualAddress = Global.WorldMgr.GetVirtualRealmAddress();
            TargetVirtualAddress = Global.WorldMgr.GetVirtualRealmAddress();
            AchievementID        = achievementId;
            Channel  = channelName;
            Prefix   = addonPrefix;
            ChatText = message;
        }
예제 #27
0
    public BattlenetRpcErrorCode JoinRealm(uint realmAddress, uint build, IPAddress clientAddress, Array <byte> clientSecret, LocaleConstant locale, string os, string accountName, Bgs.Protocol.GameUtilities.V1.ClientResponse response)
    {
        Realm realm = GetRealm(new RealmHandle(realmAddress));

        if (realm != null)
        {
            if (realm.Flags.HasAnyFlag(RealmFlags.Offline) || realm.Build != build)
            {
                return(BattlenetRpcErrorCode.UserServerNotPermittedOnRealm);
            }

            RealmListServerIPAddresses serverAddresses = new RealmListServerIPAddresses();
            AddressFamily addressFamily = new AddressFamily();
            addressFamily.Id = 1;

            var address = new Address();
            address.Ip   = realm.GetAddressForClient(clientAddress).Address.ToString();
            address.Port = realm.Port;
            addressFamily.Addresses.Add(address);
            serverAddresses.Families.Add(addressFamily);

            byte[] compressed = Json.Deflate("JSONRealmListServerIPAddresses", serverAddresses);

            byte[] serverSecret = new byte[0].GenerateRandomKey(32);
            byte[] keyData      = clientSecret.ToArray().Combine(serverSecret);

            PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.UPD_BNET_GAME_ACCOUNT_LOGIN_INFO);
            stmt.AddValue(0, keyData.ToHexString());
            stmt.AddValue(1, clientAddress.ToString());
            stmt.AddValue(2, locale);
            stmt.AddValue(3, os);
            stmt.AddValue(4, accountName);
            DB.Login.DirectExecute(stmt);

            Bgs.Protocol.Attribute attribute = new Bgs.Protocol.Attribute();
            attribute.Name            = "Param_RealmJoinTicket";
            attribute.Value           = new Bgs.Protocol.Variant();
            attribute.Value.BlobValue = Google.Protobuf.ByteString.CopyFrom(accountName, System.Text.Encoding.UTF8);
            response.Attribute.Add(attribute);

            attribute                 = new Bgs.Protocol.Attribute();
            attribute.Name            = "Param_ServerAddresses";
            attribute.Value           = new Bgs.Protocol.Variant();
            attribute.Value.BlobValue = Google.Protobuf.ByteString.CopyFrom(compressed);
            response.Attribute.Add(attribute);

            attribute                 = new Bgs.Protocol.Attribute();
            attribute.Name            = "Param_JoinSecret";
            attribute.Value           = new Bgs.Protocol.Variant();
            attribute.Value.BlobValue = Google.Protobuf.ByteString.CopyFrom(serverSecret);
            response.Attribute.Add(attribute);
            return(BattlenetRpcErrorCode.Ok);
        }

        return(BattlenetRpcErrorCode.UtilServerUnknownRealm);
    }
예제 #28
0
 /// <summary>
 /// [addedInVersion, +inf[
 /// </summary>
 /// <param name="name">database field name</param>
 /// <param name="addedInVersion">initial version</param>
 /// <param name="locale">initial locale</param>
 public DBFieldNameAttribute(string name, ClientVersionBuild addedInVersion, LocaleConstant locale)
 {
     if (ClientVersion.AddedInVersion(addedInVersion) && BinaryPacketReader.GetLocale() == locale)
     {
         Name = name;
         Count = 1;
     }
     else
     {
         Name = null;
         Count = 0;
     }
 }
예제 #29
0
        public void SendQuestGiverQuestListMessage(WorldObject questgiver)
        {
            ObjectGuid     guid           = questgiver.GetGUID();
            LocaleConstant localeConstant = _session.GetSessionDbLocaleIndex();

            QuestGiverQuestListMessage questList = new QuestGiverQuestListMessage();

            questList.QuestGiverGUID = guid;

            QuestGreeting questGreeting = Global.ObjectMgr.GetQuestGreeting(questgiver.GetTypeId(), questgiver.GetEntry());

            if (questGreeting != null)
            {
                questList.GreetEmoteDelay = questGreeting.EmoteDelay;
                questList.GreetEmoteType  = questGreeting.EmoteType;
                questList.Greeting        = questGreeting.Text;

                if (localeConstant != LocaleConstant.enUS)
                {
                    QuestGreetingLocale questGreetingLocale = Global.ObjectMgr.GetQuestGreetingLocale(questgiver.GetTypeId(), questgiver.GetEntry());
                    if (questGreetingLocale != null)
                    {
                        ObjectManager.GetLocaleString(questGreetingLocale.Greeting, localeConstant, ref questList.Greeting);
                    }
                }
            }

            for (var i = 0; i < _questMenu.GetMenuItemCount(); ++i)
            {
                QuestMenuItem questMenuItem = _questMenu.GetItem(i);

                uint  questID = questMenuItem.QuestId;
                Quest quest   = Global.ObjectMgr.GetQuestTemplate(questID);
                if (quest != null)
                {
                    string title = quest.LogTitle;

                    if (localeConstant != LocaleConstant.enUS)
                    {
                        QuestTemplateLocale localeData = Global.ObjectMgr.GetQuestLocale(quest.Id);
                        if (localeData != null)
                        {
                            ObjectManager.GetLocaleString(localeData.LogTitle, localeConstant, ref title);
                        }
                    }

                    GossipText text = new GossipText();
                    text.QuestID              = questID;
                    text.QuestType            = questMenuItem.QuestIcon;
                    text.QuestLevel           = (uint)quest.Level;
                    text.QuestMaxScalingLevel = (uint)quest.MaxScalingLevel;
                    text.QuestFlags           = (uint)quest.Flags;
                    text.QuestFlagsEx         = (uint)quest.FlagsEx;
                    text.Repeatable           = false; // NYI
                    text.QuestTitle           = title;
                    questList.QuestDataText.Add(text);
                }
            }

            _session.SendPacket(questList);
        }
예제 #30
0
        public void SendQuestGiverQuestDetails(Quest quest, ObjectGuid npcGUID, bool autoLaunched, bool displayPopup)
        {
            QuestGiverQuestDetails packet = new QuestGiverQuestDetails();

            packet.QuestTitle         = quest.LogTitle;
            packet.LogDescription     = quest.LogDescription;
            packet.DescriptionText    = quest.QuestDescription;
            packet.PortraitGiverText  = quest.PortraitGiverText;
            packet.PortraitGiverName  = quest.PortraitGiverName;
            packet.PortraitTurnInText = quest.PortraitTurnInText;
            packet.PortraitTurnInName = quest.PortraitTurnInName;

            LocaleConstant locale = _session.GetSessionDbLocaleIndex();

            if (locale != LocaleConstant.enUS)
            {
                QuestTemplateLocale localeData = Global.ObjectMgr.GetQuestLocale(quest.Id);
                if (localeData != null)
                {
                    ObjectManager.GetLocaleString(localeData.LogTitle, locale, ref packet.QuestTitle);
                    ObjectManager.GetLocaleString(localeData.LogDescription, locale, ref packet.LogDescription);
                    ObjectManager.GetLocaleString(localeData.QuestDescription, locale, ref packet.DescriptionText);
                    ObjectManager.GetLocaleString(localeData.PortraitGiverText, locale, ref packet.PortraitGiverText);
                    ObjectManager.GetLocaleString(localeData.PortraitGiverName, locale, ref packet.PortraitGiverName);
                    ObjectManager.GetLocaleString(localeData.PortraitTurnInText, locale, ref packet.PortraitTurnInText);
                    ObjectManager.GetLocaleString(localeData.PortraitTurnInName, locale, ref packet.PortraitTurnInName);
                }
            }

            packet.QuestGiverGUID        = npcGUID;
            packet.InformUnit            = _session.GetPlayer().GetDivider();
            packet.QuestID               = quest.Id;
            packet.PortraitGiver         = quest.QuestGiverPortrait;
            packet.PortraitGiverMount    = quest.QuestGiverPortraitMount;
            packet.PortraitTurnIn        = quest.QuestTurnInPortrait;
            packet.QuestSessionBonus     = 0; //quest.GetQuestSessionBonus(); // this is only sent while quest session is active
            packet.AutoLaunched          = autoLaunched;
            packet.DisplayPopup          = displayPopup;
            packet.QuestFlags[0]         = (uint)(quest.Flags & (WorldConfig.GetBoolValue(WorldCfg.QuestIgnoreAutoAccept) ? ~QuestFlags.AutoAccept : ~QuestFlags.None));
            packet.QuestFlags[1]         = (uint)quest.FlagsEx;
            packet.SuggestedPartyMembers = quest.SuggestedPlayers;

            // RewardSpell can teach multiple spells in trigger spell effects. But not all effects must be SPELL_EFFECT_LEARN_SPELL. See example spell 33950
            if (quest.RewardSpell != 0)
            {
                SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(quest.RewardSpell);
                if (spellInfo.HasEffect(SpellEffectName.LearnSpell))
                {
                    var effects = spellInfo.GetEffectsForDifficulty(Difficulty.None);
                    foreach (var spellEffectInfo in effects)
                    {
                        if (spellEffectInfo.IsEffect(SpellEffectName.LearnSpell))
                        {
                            packet.LearnSpells.Add(spellEffectInfo.TriggerSpell);
                        }
                    }
                }
            }

            quest.BuildQuestRewards(packet.Rewards, _session.GetPlayer());

            for (int i = 0; i < SharedConst.QuestEmoteCount; ++i)
            {
                var emote = new QuestDescEmote(quest.DetailsEmote[i], quest.DetailsEmoteDelay[i]);
                packet.DescEmotes.Add(emote);
            }

            var objs = quest.Objectives;

            for (int i = 0; i < objs.Count; ++i)
            {
                var obj = new QuestObjectiveSimple();
                obj.Id       = objs[i].Id;
                obj.ObjectID = objs[i].ObjectID;
                obj.Amount   = objs[i].Amount;
                obj.Type     = (byte)objs[i].Type;
                packet.Objectives.Add(obj);
            }

            _session.SendPacket(packet);
        }
예제 #31
0
        public override String GetSQLRequest()
        {
            String returnSql = "";

            if (m_creatureTemplateData.id == 0 || isError)
            {
                return(returnSql);
            }

            // Creature Template
            if (IsCheckboxChecked("template"))
            {
                m_creatureTemplateBuilder = new SqlBuilder("creature_template", "entry");
                m_creatureTemplateBuilder.SetFieldsNames("minlevel", "maxlevel", "name", "subname", "modelid1", "rank", "type", "family");

                m_creatureTemplateBuilder.AppendFieldsValue(m_creatureTemplateData.id, m_creatureTemplateData.minlevel, m_creatureTemplateData.maxlevel, m_creatureTemplateData.name, m_subname ?? "", m_modelid, m_isBoss ? "3" : "0", m_creatureTemplateData.type, m_creatureTemplateData.family);
                returnSql += m_creatureTemplateBuilder.ToString() + "\n";
            }

            // faction
            if (IsCheckboxChecked("simple faction"))
            {
                SqlBuilder m_creatureFactionBuilder = new SqlBuilder("creature_template", "entry", SqlQueryType.Update);
                m_creatureFactionBuilder.SetFieldsNames("faction");

                m_creatureFactionBuilder.AppendFieldsValue(m_creatureTemplateData.id, m_faction);
                returnSql += m_creatureFactionBuilder.ToString() + "\n";
            }

            // Creature Template
            if (IsCheckboxChecked("money"))
            {
                SqlBuilder m_creatureMoneyBuilder = new SqlBuilder("creature_template", "entry", SqlQueryType.Update);
                m_creatureMoneyBuilder.SetFieldsNames("mingold", "maxgold");

                m_creatureMoneyBuilder.AppendFieldsValue(m_creatureTemplateData.id, m_creatureTemplateData.minGold, m_creatureTemplateData.maxGold);
                returnSql += m_creatureMoneyBuilder.ToString() + "\n";
            }

            // Locales
            if (IsCheckboxChecked("locale"))
            {
                LocaleConstant localeIndex = (LocaleConstant)Properties.Settings.Default.localIndex;

                String localeName = localeIndex.ToString();

                if (localeIndex != 0)
                {
                    m_creatureLocalesBuilder = new SqlBuilder("creature_template_locales", "entry");
                    m_creatureLocalesBuilder.SetFieldsNames("locale", "Name", "Title");

                    m_creatureLocalesBuilder.AppendFieldsValue(m_creatureTemplateData.id, localeIndex.ToString(), m_creatureTemplateData.name, m_subname ?? "");
                    returnSql += m_creatureLocalesBuilder.ToString() + "\n";
                }
                else
                {
                    m_creatureLocalesBuilder = new SqlBuilder("creature_template", "entry");
                    m_creatureLocalesBuilder.SetFieldsNames("name", "subname");

                    m_creatureLocalesBuilder.AppendFieldsValue(m_creatureTemplateData.id, m_creatureTemplateData.name, m_subname ?? "");
                    returnSql += m_creatureLocalesBuilder.ToString() + "\n";
                }
            }

            if (IsCheckboxChecked("vendor") && m_npcVendorDatas != null)
            {
                m_npcVendorBuilder = new SqlBuilder("npc_vendor", "entry", SqlQueryType.DeleteInsert);
                m_npcVendorBuilder.SetFieldsNames("slot", "item", "maxcount", "incrtime", "ExtendedCost", "type", "PlayerConditionID");

                foreach (NpcVendorParsing npcVendorData in m_npcVendorDatas)
                {
                    m_npcVendorBuilder.AppendFieldsValue(m_creatureTemplateData.id, npcVendorData.slot, npcVendorData.id, npcVendorData.avail, npcVendorData.incrTime, npcVendorData.integerExtendedCost, 1, 0);
                }

                returnSql += m_npcVendorBuilder.ToString() + "\n";
            }

            if (IsCheckboxChecked("loot") && m_creatureLootDatas != null)
            {
                bool referenceAdded   = false;
                int  maxReferenceLoot = 2; // A voir si on peut trouver

                int templateEntry = m_creatureTemplateData.id;
                m_creatureLootBuilder = new SqlBuilder("creature_loot_template", "entry", SqlQueryType.DeleteInsert);
                m_creatureLootBuilder.SetFieldsNames("Item", "Reference", "Chance", "QuestRequired", "LootMode", "GroupId", "MinCount", "MaxCount", "Comment");

                m_creatureReferenceLootBuilder = new SqlBuilder("reference_loot_template", "entry", SqlQueryType.DeleteInsert);
                m_creatureReferenceLootBuilder.SetFieldsNames("item", "ChanceOrQuestChance", "lootmode", "groupid", "mincountOrRef", "maxcount", "itemBonuses");

                bool atLeastOneNormal = false;

                returnSql += "UPDATE creature_template SET lootid = " + templateEntry + " WHERE entry = " + templateEntry + " AND lootid = 0;\n";
                foreach (CreatureLootParsing creatureLootData in m_creatureLootDatas)
                {
                    List <int> entryList = new List <int>();

                    CreatureLootItemParsing creatureLootItemData = null;
                    try
                    {
                        creatureLootItemData = (CreatureLootItemParsing)creatureLootData;
                    }
                    catch (Exception ex) { }

                    CreatureLootCurrencyParsing creatureLootCurrencyData = null;
                    try
                    {
                        creatureLootCurrencyData = (CreatureLootCurrencyParsing)creatureLootData;
                    }
                    catch (Exception ex) { }

                    switch (creatureLootData.mode)
                    {
                    default:
                        entryList.Add(templateEntry);
                        break;;
                    }

                    foreach (int entry in entryList)
                    {
                        int idMultiplier = creatureLootCurrencyData != null ? -1 : 1;

                        if (idMultiplier < 1)
                        {
                            continue;
                        }

                        int minLootCount = creatureLootData.stack.Length >= 1 ? creatureLootData.stack[0]: 1;
                        int maxLootCount = creatureLootData.stack.Length >= 2 ? creatureLootData.stack[1]: minLootCount;

                        m_creatureLootBuilder.AppendFieldsValue(entry,                              // Entry
                                                                creatureLootData.id * idMultiplier, // Item
                                                                0,                                  // Reference
                                                                creatureLootData.percent,           // Chance
                                                                creatureLootData.questRequired,     // QuestRequired
                                                                1,                                  // LootMode
                                                                0,                                  // GroupId
                                                                minLootCount,                       // MinCount
                                                                maxLootCount,                       // MaxCount
                                                                "");                                // Comment
                    }
                }

                returnSql += m_creatureLootBuilder.ToString() + "\n";
                returnSql += m_creatureReferenceLootBuilder.ToString() + "\n";
            }

            if (IsCheckboxChecked("skinning") && m_creatureSkinningDatas != null)
            {
                m_creatureLootBuilder = new SqlBuilder("skinning_loot_template", "entry", SqlQueryType.DeleteInsert);
                m_creatureLootBuilder.SetFieldsNames("Item", "Reference", "Chance", "QuestRequired", "LootMode", "GroupId", "MinCount", "MaxCount", "Comment");

                returnSql += "UPDATE creature_template SET skinloot = " + m_creatureTemplateData.id + " WHERE entry = " + m_creatureTemplateData.id + " AND skinloot = 0;\n";
                foreach (CreatureLootParsing creatureSkinningData in m_creatureSkinningDatas)
                {
                    m_creatureSkinningBuilder.AppendFieldsValue(m_creatureTemplateData.id,     // Entry
                                                                creatureSkinningData.id,       // Item
                                                                0,                             // Reference
                                                                creatureSkinningData.percent,  // Chance
                                                                0,                             // QuestRequired
                                                                1,                             // LootMode
                                                                0,                             // GroupId
                                                                creatureSkinningData.stack[0], // MinCount
                                                                creatureSkinningData.stack[1], // MaxCount
                                                                "");                           // Comment
                }

                returnSql += m_creatureSkinningBuilder.ToString() + "\n";
            }

            if (IsCheckboxChecked("trainer") && m_creatureTrainerDatas != null)
            {
                m_creatureTrainerBuilder = new SqlBuilder("npc_trainer", "entry", SqlQueryType.DeleteInsert);
                m_creatureTrainerBuilder.SetFieldsNames("spell", "spellcost", "reqskill", "reqskillvalue", "reqlevel");

                returnSql += "UPDATE creature_template SET npc_flag = 16 WHERE entry = " + m_creatureTemplateData.id + ";\n";
                foreach (CreatureTrainerParsing creatureTrainerData in m_creatureTrainerDatas)
                {
                    int reqskill = creatureTrainerData.learnedat > 0 ? creatureTrainerData.skill[0] : 0;
                    m_creatureTrainerBuilder.AppendFieldsValue(m_creatureTemplateData.id, creatureTrainerData.id, creatureTrainerData.trainingcost, reqskill, creatureTrainerData.learnedat, creatureTrainerData.level);
                }

                returnSql += m_creatureTrainerBuilder.ToString() + "\n";
            }

            if (IsCheckboxChecked("quest starter") && m_creatureQuestStarterDatas != null)
            {
                m_creatureQuestStarterBuilder = new SqlBuilder("creature_queststarter", "entry", SqlQueryType.InsertIgnore);
                m_creatureQuestStarterBuilder.SetFieldsNames("quest");

                foreach (QuestStarterEnderParsing creatureQuestStarterData in m_creatureQuestStarterDatas)
                {
                    m_creatureQuestStarterBuilder.AppendFieldsValue(m_creatureTemplateData.id, creatureQuestStarterData.id);
                }

                returnSql += m_creatureQuestStarterBuilder.ToString() + "\n";
            }

            if (IsCheckboxChecked("quest ender") && m_creatureQuestEnderDatas != null)
            {
                m_creatureQuestEnderBuilder = new SqlBuilder("creature_questender", "entry", SqlQueryType.InsertIgnore);
                m_creatureQuestEnderBuilder.SetFieldsNames("quest");

                foreach (QuestStarterEnderParsing creatureQuestEnderData in m_creatureQuestEnderDatas)
                {
                    m_creatureQuestEnderBuilder.AppendFieldsValue(m_creatureTemplateData.id, creatureQuestEnderData.id);
                }

                returnSql += m_creatureQuestEnderBuilder.ToString() + "\n";
            }

            return(returnSql);
        }
예제 #32
0
        public override String GetSQLRequest()
        {
            String returnSql = "";

            if (m_data.id == 0 || isError)
            {
                return(returnSql);
            }

            if (IsCheckboxChecked("locale"))
            {
                LocaleConstant localeIndex = (LocaleConstant)Properties.Settings.Default.localIndex;

                if (localeIndex != 0)
                {
                    m_gameobjectLocalesBuilder = new SqlBuilder("gameobject_template_locale", "entry");
                    m_gameobjectLocalesBuilder.SetFieldsNames("locale", "name");

                    m_gameobjectLocalesBuilder.AppendFieldsValue(m_data.id, localeIndex.ToString(), m_data.name);
                    returnSql += m_gameobjectLocalesBuilder.ToString() + "\n";
                }
                else
                {
                    m_gameobjectLocalesBuilder = new SqlBuilder("gameobject_template", "entry");
                    m_gameobjectLocalesBuilder.SetFieldsNames("name");

                    m_gameobjectLocalesBuilder.AppendFieldsValue(m_data.id, m_data.name);
                    returnSql += m_gameobjectLocalesBuilder.ToString() + "\n";
                }
            }

            if (IsCheckboxChecked("loot") && m_gameobjectLootDatas != null)
            {
                m_gameobjectLootBuilder = new SqlBuilder("gameobject_loot_template", "entry", SqlQueryType.DeleteInsert);
                m_gameobjectLootBuilder.SetFieldsNames("Item", "Reference", "Chance", "QuestRequired", "LootMode", "GroupId", "MinCount", "MaxCount", "Comment");

                returnSql += "UPDATE gameobject_template SET data1 = " + m_data.id + " WHERE entry = " + m_data.id + " AND type IN (3, 50);\n";
                foreach (GameObjectLootParsing gameobjectLootData in m_gameobjectLootDatas)
                {
                    GameObjectLootCurrencyParsing currentLootCurrencyData = null;
                    try
                    {
                        currentLootCurrencyData = (GameObjectLootCurrencyParsing)gameobjectLootData;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Erreur : " + ex);
                    }

                    int idMultiplier = currentLootCurrencyData != null ? -1 : 1;

                    if (idMultiplier < 1)
                    {
                        continue;
                    }

                    int minLootCount = gameobjectLootData.stack.Length >= 1 ? gameobjectLootData.stack[0] : 1;
                    int maxLootCount = gameobjectLootData.stack.Length >= 2 ? gameobjectLootData.stack[1] : minLootCount;


                    m_gameobjectLootBuilder.AppendFieldsValue(m_data.id,                            // Entry
                                                              gameobjectLootData.id * idMultiplier, // Item
                                                              0,                                    // Reference
                                                              gameobjectLootData.percent,           // Chance
                                                              gameobjectLootData.questRequired,     // QuestRequired
                                                              1,                                    // LootMode
                                                              0,                                    // GroupId
                                                              minLootCount,                         // MinCount
                                                              maxLootCount,                         // MaxCount
                                                              "");                                  // Comment
                }

                returnSql += m_gameobjectLootBuilder.ToString() + "\n";
            }

            if (IsCheckboxChecked("herbalism") && m_gameobjectHerbalismDatas != null)
            {
                m_gameobjectHerbalismBuilder = new SqlBuilder("gameobject_loot_template", "entry", SqlQueryType.InsertIgnore);
                m_gameobjectHerbalismBuilder.SetFieldsNames("Item", "Reference", "Chance", "QuestRequired", "LootMode", "GroupId", "MinCount", "MaxCount", "Comment");

                returnSql += "UPDATE gameobject_template SET data1 = " + m_data.id + " WHERE entry = " + m_data.id + " AND type IN (3, 50);\n";
                foreach (GameObjectLootParsing gameobjectHerbalismData in m_gameobjectHerbalismDatas)
                {
                    m_gameobjectHerbalismBuilder.AppendFieldsValue(m_data.id,                        // Entry
                                                                   gameobjectHerbalismData.id,       // Item
                                                                   0,                                // Reference
                                                                   gameobjectHerbalismData.percent,  // Chance
                                                                   0,                                // QuestRequired
                                                                   1,                                // LootMode
                                                                   0,                                // GroupId
                                                                   gameobjectHerbalismData.stack[0], // MinCount
                                                                   gameobjectHerbalismData.stack[1], // MaxCount
                                                                   "");                              // Comment
                }
                returnSql += m_gameobjectHerbalismBuilder.ToString() + "\n";
            }

            if (IsCheckboxChecked("mining") && m_gameobjectMiningDatas != null)
            {
                m_gameobjectMiningBuilder = new SqlBuilder("gameobject_loot_template", "entry", SqlQueryType.InsertIgnore);
                m_gameobjectMiningBuilder.SetFieldsNames("Item", "Reference", "Chance", "QuestRequired", "LootMode", "GroupId", "MinCount", "MaxCount", "Comment");

                returnSql += "UPDATE gameobject_template SET data1 = " + m_data.id + " WHERE entry = " + m_data.id + " AND type IN (3, 50);\n";
                foreach (GameObjectLootParsing gameobjectMiningData in m_gameobjectMiningDatas)
                {
                    m_gameobjectMiningBuilder.AppendFieldsValue(m_data.id,                     // Entry
                                                                gameobjectMiningData.id,       // Item
                                                                0,                             // Reference
                                                                gameobjectMiningData.percent,  // Chance
                                                                0,                             // QuestRequired
                                                                1,                             // LootMode
                                                                0,                             // GroupId
                                                                gameobjectMiningData.stack[0], // MinCount
                                                                gameobjectMiningData.stack[1], // MaxCount
                                                                "");                           // Comment
                }
                returnSql += m_gameobjectMiningBuilder.ToString() + "\n";
            }

            return(returnSql);
        }
예제 #33
0
 /// <summary>
 /// [addedInVersion, removedInVersion[
 /// </summary>
 /// <param name="name">database field name</param>
 /// <param name="addedInVersion">initial version</param>
 /// <param name="removedInVersion">final version</param>
 /// <param name="locale">initial locale</param>
 public DBFieldNameAttribute(string name, ClientVersionBuild addedInVersion, ClientVersionBuild removedInVersion, LocaleConstant locale)
 {
     if (ClientVersion.AddedInVersion(addedInVersion) && ClientVersion.RemovedInVersion(removedInVersion) && BinaryPacketReader.GetLocale() == locale)
     {
         Name  = name;
         Count = 1;
     }
     else
     {
         Name  = null;
         Count = 0;
     }
 }
예제 #34
0
        public string GetLocalizedChatString(uint entry, Gender gender, byte textGroup, uint id, LocaleConstant locale = LocaleConstant.enUS)
        {
            var multiMap = mTextMap.LookupByKey(entry);

            if (multiMap == null)
            {
                return("");
            }

            var creatureTextEntryList = multiMap.LookupByKey(textGroup);

            if (creatureTextEntryList.Empty())
            {
                return("");
            }

            CreatureTextEntry creatureTextEntry = null;

            for (var i = 0; i != creatureTextEntryList.Count; ++i)
            {
                creatureTextEntry = creatureTextEntryList[i];
                if (creatureTextEntry.id == id)
                {
                    break;
                }
            }

            if (creatureTextEntry == null)
            {
                return("");
            }

            if (locale >= LocaleConstant.Total)
            {
                locale = LocaleConstant.enUS;
            }

            string baseText         = "";
            BroadcastTextRecord bct = CliDB.BroadcastTextStorage.LookupByKey(creatureTextEntry.BroadcastTextId);

            if (bct != null)
            {
                baseText = Global.DB2Mgr.GetBroadcastTextValue(bct, locale, gender);
            }
            else
            {
                baseText = creatureTextEntry.text;
            }

            if (locale != LocaleConstant.enUS && bct == null)
            {
                var creatureTextLocale = mLocaleTextMap.LookupByKey(new CreatureTextId(entry, textGroup, id));
                if (creatureTextLocale != null)
                {
                    ObjectManager.GetLocaleString(creatureTextLocale.Text, locale, ref baseText);
                }
            }

            return(baseText);
        }