コード例 #1
0
        public static Interfaces.IConquerItem GetSingleItem(uint UID)
        {
            Interfaces.IConquerItem item = new Network.GamePackets.ConquerItem(true);
            MySqlCommand cmd = new MySqlCommand(MySqlCommandType.SELECT);
            cmd.Select("items").Where("UID", UID);
            PhoenixProject.Database.MySqlReader r = new PhoenixProject.Database.MySqlReader(cmd);
            if (r.Read())
            {
                item.ID = r.ReadUInt32("ID");
                item.UID = r.ReadUInt32("UID");
                item.Durability = r.ReadUInt16("Durability");
                item.MaximDurability = r.ReadUInt16("MaximDurability");
                item.Position = r.ReadUInt16("Position");
                item.SocketProgress = r.ReadUInt32("SocketProgress");
                item.PlusProgress = r.ReadUInt32("PlusProgress");
                item.SocketOne = (Game.Enums.Gem)r.ReadByte("SocketOne");
                item.SocketTwo = (Game.Enums.Gem)r.ReadByte("SocketTwo");
                item.Effect = (Game.Enums.ItemEffect)r.ReadByte("Effect");
                item.Mode = Game.Enums.ItemMode.Default;
                item.Plus = r.ReadByte("Plus");
                item.Bless = r.ReadByte("Bless");
                item.Bound = r.ReadBoolean("Bound");
                item.Enchant = r.ReadByte("Enchant");
                item.Lock = r.ReadByte("Locked");
                item.UnlockEnd = DateTime.FromBinary(r.ReadInt64("UnlockEnd"));
                item.Suspicious = r.ReadBoolean("Suspicious");

                item.SuspiciousStart = DateTime.FromBinary(r.ReadInt64("SuspiciousStart"));
                item.Color = (Game.Enums.Color)r.ReadByte("Color");
                item.Warehouse = r.ReadUInt16("Warehouse");
                if (item.Lock == 2)
                    if (DateTime.Now >= item.UnlockEnd)
                        item.Lock = 0;
            }
            r.Close();
            //r.Close();
            r.Dispose();

            return item;
        }
コード例 #2
0
        public static void LoadSpells(Client.GameState client, MySql.Data.MySqlClient.MySqlConnection conn)
        {
            if (client.Entity == null)
                return;

            client.Spells = new System.SafeDictionary<ushort, Interfaces.ISkill>(100);
            MySqlCommand cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("skills").Where("EntityID", client.Entity.UID);
            PhoenixProject.Database.MySqlReader r = new PhoenixProject.Database.MySqlReader(cmd);
            while (r.Read())
            {
                Interfaces.ISkill spell = new Network.GamePackets.Spell(true);
                spell.ID = r.ReadUInt16("ID");
                spell.Level = r.ReadByte("Level");
                spell.PreviousLevel = r.ReadByte("PreviousLevel");
                spell.Experience = r.ReadUInt32("Experience");
                spell.TempLevel = r.ReadByte("TempLevel");
                spell.Available = true;
                if (!client.Spells.ContainsKey(spell.ID))
                    client.Spells.Add(spell.ID, spell);
            }
            r.Close();
            r.Dispose();
        }
コード例 #3
0
        public static void LoadProficiencies(Client.GameState client)
        {
            if (client.Entity == null)
                return;

            client.Proficiencies = new System.SafeDictionary<ushort, Interfaces.IProf>(100);
            MySqlCommand cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("profs").Where("EntityID", client.Entity.UID);
            PhoenixProject.Database.MySqlReader r = new PhoenixProject.Database.MySqlReader(cmd);
            while (r.Read())
            {
                Interfaces.IProf proficiency = new Network.GamePackets.Proficiency(true);
                proficiency.ID = r.ReadUInt16("ID");
                proficiency.Level = r.ReadByte("Level");
                proficiency.PreviousLevel = r.ReadByte("PreviousLevel");
                proficiency.Experience = r.ReadUInt32("Experience");
                proficiency.TempLevel = r.ReadByte("TempLevel");
                proficiency.Available = true;
                if (!client.Proficiencies.ContainsKey(proficiency.ID))
                    client.Proficiencies.Add(proficiency.ID, proficiency);
            }
            r.Close();
            r.Dispose();
        }
コード例 #4
0
        public static void GetMembers()
        {
            foreach (KeyValuePair<uint, Game.Clans> G in PhoenixProject.ServerBase.Kernel.ServerClans)
            {
                Game.Clans clan = G.Value;
                MySqlCommand cmd = new MySqlCommand(MySqlCommandType.SELECT);
                cmd.Select("entities").Where("ClanId", clan.ClanId);
                PhoenixProject.Database.MySqlReader r = new PhoenixProject.Database.MySqlReader(cmd);
                while (r.Read())
                {

                    Game.ClanMembers member = new PhoenixProject.Game.ClanMembers();
                    member.Donation = r.ReadUInt32("ClanDonation");
                    //member.Rank = r.ReadByte("ClanRank");
                    member.UID = r.ReadUInt32("UID");
                    member.Name = r.ReadString("Name");
                    member.Class = r.ReadUInt16("Class");
                    member.Level = r.ReadByte("Level");

                    if (clan.ClanLider == member.Name)
                    {
                        member.Rank = 100;
                    }
                    else
                    {
                        member.Rank = 10;
                    }

                    if (!clan.Members.ContainsKey(member.UID))
                        clan.Members.Add(member.UID, member);
                }
                r.Close();
                //r.Close();
                r.Dispose();
                //Console.WriteLine("1818");
            }
        }
コード例 #5
0
        public static void Load()
        {
            MySqlCommand cmd = new MySqlCommand(MySqlCommandType.SELECT);
            cmd.Select("specialdrops");
            PhoenixProject.Database.MySqlReader rdr = new PhoenixProject.Database.MySqlReader(cmd);
            while (rdr.Read())
            {
                SpecialItemDrop sitem = new SpecialItemDrop();
                sitem.ItemID = rdr.ReadInt32("itemid");
                sitem.Rate = rdr.ReadInt32("rate");
                sitem.Discriminant = rdr.ReadInt32("discriminant");
                sitem.Map = rdr.ReadUInt64("map");
                SpecialItemDropList.Add(sitem);
            }
            rdr.Close();
            rdr.Dispose();
            MySqlCommand command = new MySqlCommand(MySqlCommandType.SELECT);
            command.Select("monsterinfos");
            PhoenixProject.Database.MySqlReader reader = new PhoenixProject.Database.MySqlReader(command);
            while (reader.Read())
            {
                MonsterInformation mf = new MonsterInformation();
                mf.ID = reader.ReadUInt32("id");
                mf.Name = reader.ReadString("name");
                mf.Mesh = reader.ReadUInt16("lookface");
                mf.Level = reader.ReadByte("level");
                mf.Hitpoints = reader.ReadUInt32("life");
                ServerBase.IniFile IniFile = new ServerBase.IniFile(ServerBase.Constants.MonstersPath);
                if (IniFile.ReadString(mf.Name, "MaxLife") != "")
                {
                    if (uint.Parse(IniFile.ReadString(mf.Name, "MaxLife")) != 0)
                    {
                        mf.Hitpoints = uint.Parse(IniFile.ReadString(mf.Name, "MaxLife"));
                        byte boss = byte.Parse(IniFile.ReadString(mf.Name, "Boss"));
                        if (boss == 0)
                            mf.Boss = false;
                        else mf.Boss = true;
                    }
                }
                mf.ViewRange = reader.ReadUInt16("view_range");
                mf.AttackRange = reader.ReadUInt16("attack_range");
                mf.AttackType = reader.ReadByte("attack_user");
                mf.MinAttack = reader.ReadUInt32("attack_min");
                mf.MaxAttack = reader.ReadUInt32("attack_max");
                mf.SpellID = reader.ReadUInt16("magic_type");
                mf.MoveSpeed = reader.ReadInt32("move_speed");
                mf.RunSpeed = reader.ReadInt32("run_speed");
                mf.OwnItemID = reader.ReadInt32("ownitem");
                mf.HPPotionID = reader.ReadInt32("drop_hp");
                mf.MPPotionID = reader.ReadInt32("drop_mp");
                mf.OwnItemRate = reader.ReadInt32("ownitemrate");
                mf.AttackSpeed = reader.ReadInt32("attack_speed");
                mf.ExtraExperience = reader.ReadUInt32("extra_exp");
                uint MoneyDropAmount = reader.ReadUInt16("level");
                if (MoneyDropAmount != 0)
                {
                    mf.MaxMoneyDropAmount = MoneyDropAmount * 25;
                    if (mf.MaxMoneyDropAmount != 0)
                        mf.MinMoneyDropAmount = 1;
                }
                if (mf.MoveSpeed <= 500)
                    mf.MoveSpeed += 500;
                if (mf.AttackSpeed <= 500)
                    mf.AttackSpeed += 500;
                MonsterInfos.Add(mf.ID, mf);
                byte lvl = mf.Level;
                if (mf.Name == "Slinger" ||
                    mf.Name == "GoldGhost" ||
                    mf.Name == "AgileRat" ||
                    mf.Name == "Bladeling" ||
                    mf.Name == "BlueBird" ||
                    mf.Name == "BlueFiend" ||
                    mf.Name == "MinotaurL120")
                {
                    mf.LabirinthDrop = true;
                    lvl = 20;
                }
                if (!ItemDropCache.ContainsKey(lvl))
                {
                    List<uint> itemdroplist = new List<uint>();
                    foreach (ConquerItemBaseInformation itemInfo in ConquerItemInformation.BaseInformations.Values)
                    {

                        if (itemInfo.ID >= 800000 && itemInfo.ID <= 824014)
                            continue;
                        ushort position = Network.PacketHandler.ItemPosition(itemInfo.ID);
                        if (Network.PacketHandler.IsArrow(itemInfo.ID) || itemInfo.Level == 0 || itemInfo.Level > 121)
                            continue;
                        if (position < 9 && position != 7)
                        {
                            if (itemInfo.Level == 100)
                                if (itemInfo.Name.Contains("Dress"))
                                    continue;
                            if (itemInfo.Level > 121)
                                continue;
                            int diff = (int)lvl - (int)itemInfo.Level;
                            if (!(diff > 10 || diff < -10))
                            {
                                itemdroplist.Add(itemInfo.ID);
                            }
                        }
                        if (position == 10 || position == 11 && lvl >= 70)
                            itemdroplist.Add(itemInfo.ID);
                    }
                    ItemDropCache.Add(lvl, itemdroplist);
                }
                if (mf.Boss)
                {
                    List<uint> itemdroplist = new List<uint>();
                    foreach (ConquerItemBaseInformation itemInfo in ConquerItemInformation.BaseInformations.Values)
                    {
                        if (itemInfo.ID >= 800000 && itemInfo.ID <= 824014)
                        {
                            if (itemInfo.PurificationLevel <= 3)
                            {
                                int diff = (int)mf.Level - (int)itemInfo.Level;
                                if (!(diff > 10 || diff < -10))
                                {
                                    itemdroplist.Add(itemInfo.ID);
                                }
                            }
                        }
                    }
                    SoulItemCache.Add(lvl, itemdroplist);
                }
            }

            reader.Close();
            reader.Dispose();
            Console.WriteLine("Monster information loaded.");
            Console.WriteLine("Monster drops generated.");
        }
コード例 #6
0
 private void LoadNpcs()
 {
     Database.MySqlCommand command = new PhoenixProject.Database.MySqlCommand(PhoenixProject.Database.MySqlCommandType.SELECT);
     command.Select("npcs").Where("mapid", ID);
     PhoenixProject.Database.MySqlReader reader = new PhoenixProject.Database.MySqlReader(command);
     while (reader.Read())
     {
         INpc npc = new Network.GamePackets.NpcSpawn();
         npc.UID = reader.ReadUInt32("id");
         npc.Mesh = reader.ReadUInt16("lookface");
         npc.Type = (Enums.NpcType)reader.ReadByte("type");
         npc.X = reader.ReadUInt16("cellx"); ;
         npc.Y = reader.ReadUInt16("celly");
         npc.MapID = ID;
         //Network.GamePackets.PokerTable npc2 = new Network.GamePackets.PokerTable();
         AddNpc(npc);
     }
     reader.Close();
     reader.Dispose();
     command = new PhoenixProject.Database.MySqlCommand(PhoenixProject.Database.MySqlCommandType.SELECT);
     command.Select("sobnpcs").Where("mapid", ID);
     reader = new PhoenixProject.Database.MySqlReader(command);
     while (reader.Read())
     {
         Network.GamePackets.SobNpcSpawn npc = new Network.GamePackets.SobNpcSpawn();
         npc.UID = reader.ReadUInt32("id");
         npc.Mesh = reader.ReadUInt16("lookface");
         if (ID == 1039)
             npc.Mesh = (ushort)(npc.Mesh - npc.Mesh % 10 + 7);
         npc.Type = (Enums.NpcType)reader.ReadByte("type");
         npc.X = reader.ReadUInt16("cellx"); ;
         npc.Y = reader.ReadUInt16("celly");
         npc.MapID = reader.ReadUInt16("mapid");
         npc.Sort = reader.ReadUInt16("sort");
         npc.ShowName = true;
         npc.Name = reader.ReadString("name");
         npc.Hitpoints = reader.ReadUInt32("life");
         npc.MaxHitpoints = reader.ReadUInt32("maxlife");
         AddNpc(npc);
     }
     reader.Close();
     reader.Dispose();
 }
コード例 #7
0
        public void LoadMonsters()
        {
            // Companions = new SafeDictionary<uint, Entity>(1000);
            Database.MySqlCommand command = new PhoenixProject.Database.MySqlCommand(PhoenixProject.Database.MySqlCommandType.SELECT);
            command.Select("monsterspawns").Where("mapid", ID);
            PhoenixProject.Database.MySqlReader reader = new PhoenixProject.Database.MySqlReader(command);
            int mycount = 0;
            try
            {
                while (reader.Read())
                {
                    uint monsterID = reader.ReadUInt32("npctype");
                    ushort CircleDiameter = reader.ReadUInt16("maxnpc");
                    ushort X = reader.ReadUInt16("bound_x");
                    ushort Y = reader.ReadUInt16("bound_y");
                    ushort XPlus = reader.ReadUInt16("bound_cx");
                    ushort YPlus = reader.ReadUInt16("bound_cy");
                    ushort Amount = reader.ReadUInt16("max_per_gen");
                    int respawn = reader.ReadInt32("rest_secs");
                    if (Database.MonsterInformation.MonsterInfos.ContainsKey(monsterID))
                    {
                        Database.MonsterInformation mt = Database.MonsterInformation.MonsterInfos[monsterID];
                        mt.RespawnTime = respawn + 5;
                        mt.BoundX = X;
                        mt.BoundY = Y;
                        mt.BoundCX = XPlus;
                        mt.BoundCY = YPlus;

                        bool more = true;
                        for (int count = 0; count < Amount; count++)
                        {
                            if (!more)
                                break;
                            Entity entity = new Entity(EntityFlag.Monster, false);
                            entity.MapObjType = MapObjectType.Monster;
                            entity.MonsterInfo = mt.Copy();
                            entity.MonsterInfo.Owner = entity;
                            entity.Name = mt.Name;
                            entity.MinAttack = mt.MinAttack;
                            entity.MaxAttack = entity.MagicAttack = mt.MaxAttack;
                            entity.Hitpoints = entity.MaxHitpoints = mt.Hitpoints;
                            entity.Body = mt.Mesh;
                            entity.Level = mt.Level;
                            entity.UID = EntityUIDCounter.Next;
                            entity.MapID = ID;
                            entity.SendUpdates = true;
                            entity.X = (ushort)(X + ServerBase.Kernel.Random.Next(0, XPlus));
                            entity.Y = (ushort)(Y + ServerBase.Kernel.Random.Next(0, YPlus));
                            for (int count2 = 0; count2 < 50; count2++)
                            {
                                if (!Floor[entity.X, entity.Y, MapObjectType.Monster, entity])
                                {
                                    entity.X = (ushort)(X + ServerBase.Kernel.Random.Next(0, XPlus));
                                    entity.Y = (ushort)(Y + ServerBase.Kernel.Random.Next(0, YPlus));
                                    if (count2 == 50)
                                        more = false;
                                }
                                else
                                    break;
                            }
                            if (more)
                            {
                                if (Floor[entity.X, entity.Y, MapObjectType.Monster, entity])
                                {
                                    mycount++;
                                    AddEntity(entity);

                                }
                            }
                        }
                    }
                }
            }
            catch (Exception e) { Program.SaveException(e); }
            reader.Close();
            reader.Dispose();
            if (mycount != 0)
            {
                MyTimer = new System.Timers.Timer(interval);
                MyTimer.AutoReset = true;
                MyTimer.Elapsed += new System.Timers.ElapsedEventHandler(_timerCallBack);
                MyTimer.Start();
               // _timercallback = new TimerCallback(_timerCallBack);
               // _timer = new Timer(_timercallback, this, 10000, 1000);
            }
        }
コード例 #8
0
        public static void LoadHouse()
        {
            MySqlCommand command = new MySqlCommand(MySqlCommandType.SELECT);
            command.Select("house");
            PhoenixProject.Database.MySqlReader reader = new PhoenixProject.Database.MySqlReader(command);
            while (reader.Read())
            {
                uint id;
                uint BaseID;
                uint HouseLevel;
                //MapsTable.MapInformation info = new MapsTable.MapInformation();
                id = reader.ReadUInt16("id");
                BaseID = 3024;
                // info.Status = reader.ReadUInt32("type");
                // info.Weather = reader.ReadUInt32("weather");
                id = reader.ReadUInt32("owner");
                HouseLevel = reader.ReadUInt32("HouseLevel");
                // info.Box = reader.ReadUInt32("Box");
                // info.BoxX = reader.ReadUInt32("BoxX");
                // info.BoxY = reader.ReadUInt32("BoxY");
                bool Success = CreateDynamicMap2(id, (ushort)BaseID, id, HouseLevel);

            }
            reader.Close();
            reader.Dispose();
            Console.WriteLine("Houses Loaded informations loaded.");
        }