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.");
        }
Exemplo n.º 2
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);
            }
        }
Exemplo n.º 3
0
        private void LoadZones()
        {
            Database.MySqlCommand command = new PhoenixProject.Database.MySqlCommand(PhoenixProject.Database.MySqlCommandType.SELECT);
            command.Select("notavailablepaths").Where("mapid", ID);

            PhoenixProject.Database.MySqlReader reader = new PhoenixProject.Database.MySqlReader(command);
            while (reader.Read())
            {
                Zoning.Zone zone = new Zoning.Zone(
                    new Point() { X = reader.ReadInt32("Point1_X"), Y = reader.ReadInt32("Point1_Y") },
                    new Point() { X = reader.ReadInt32("Point2_X"), Y = reader.ReadInt32("Point2_Y") },
                    new Point() { X = reader.ReadInt32("Point3_X"), Y = reader.ReadInt32("Point3_Y") },
                    new Point() { X = reader.ReadInt32("Point4_X"), Y = reader.ReadInt32("Point4_Y") }
                    );
                Zones.Add(zone);
            }
            reader.Close();
            reader.Dispose();
        }
        public FlowerRank(uint UID)
        {
            int PacketLength = 80;
            uint charamount = 0;
            uint place = 1;
            string[] playernames = new string[100000];
            uint[] playerflowers = new uint[1000000];
            MemoryStream Stream = new MemoryStream();
            BinaryWriter Writer = new BinaryWriter(Stream);
            Database.MySqlCommand cmd = new Database.MySqlCommand(Database.MySqlCommandType.SELECT);
            cmd.Select("flowers").Order("redroses DESC");
            PhoenixProject.Database.MySqlReader r = new PhoenixProject.Database.MySqlReader(cmd);
            while (r.Read())
            {
                int redroses = r.ReadInt32("redroses");
                if (redroses != 0)
                {
                    uint charuid = r.ReadUInt32("id");
                    PacketLength += (r.ReadString("name").Length * 2) + 36;
                    playernames[charamount] = r.ReadString("name");
                    playerflowers[charamount] = r.ReadUInt32("redroses");
                    charamount++;

                }
            }
            Buffer = new byte[80 +8];
            WriteUInt16(80, 0, Buffer);
            WriteUInt16(1151, 2, Buffer);

            WriteUInt32(1, 4, Buffer);
            WriteUInt32(UID, 8, Buffer);
            WriteUInt32(0, 12, Buffer);
            WriteUInt32(charamount, 16, Buffer);
            int position = 24;
            for(int x = 0; x < charamount; x++)
            {
               // WriteUInt32(1, position, Buffer);
               // position+=4;
                WriteUInt32(place, position, Buffer);
                place++;
                //WriteUInt32(place, position, Buffer);
                position+=4;
                WriteUInt32(playerflowers[1], position, Buffer);
                position += 4;
                WriteUInt32(playerflowers[1], position, Buffer);
                position += 4;
                WriteUInt32(UID, position, Buffer);
                position += 4;
                WriteUInt32(UID, position, Buffer);
                position += 4;
                WriteString(playernames[x], position, Buffer);
                position += 16;
                WriteUInt32(1, position, Buffer);
                position += 4;
                WriteString(playernames[x], position, Buffer);
                position += 8;
                position = position + 16;

            }

            WriteString("TQServer", position, Buffer);
        }