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."); }
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); } }
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); }