Beispiel #1
0
        //Добавить игрока или обновить его в бд
        public static void AddOrUpdatePlayer(DataBase.cPlayers.Player item)
        {
            if (item.GUID != 0)
            {
                for (int i = 0; i < database.Players.PlayersCount; i++)
                {
                    if (database.Players.PlayerList[i].GUID == item.GUID)
                    {
                        //Устанавливаем имя
                        if (item.Name != "")
                        {
                            database.Players.PlayerList[i].Name = item.Name;
                        }

                        //Установка уровня
                        if (item.LvL != 0)
                        {
                            database.Players.PlayerList[i].LvL = item.LvL;
                        }

                        //Устанавливаем последнюю зону
                        if (item.LastZoneID != 0)
                        {
                            database.Players.PlayerList[i].LastZoneID = item.LastZoneID;
                        }

                        //Устанавливаем дату последнего обнаружения
                        if (item.LastSeen != "")
                        {
                            database.Players.PlayerList[i].LastSeen = item.LastSeen;
                        }


                        //Обновляем последнюю позицию
                        database.Players.PlayerList[i].LastPos = Tools.Vec.Round(item.LastPos, 2);

                        //Обновляем уровень в списке уровней
                        UpdateLevel(i, item.LvL);

                        //Обновляем обнаружения
                        UpdatePlayerSeen(i, item.LastZoneID);


                        return;
                    }
                }

                //Если не нашли в базе данных, то значит добавляем новый экземпляр
                if (item.LvL != 0 & item.LvL != 80)
                {
                    item.Levels.Add(new LVL(item.LvL, Tools.GetNowTime()));
                }
                if (item.LastZoneID != 0)
                {
                    item.Seens.Add(new SEEN(item.LastZoneID, Tools.GetNowTime()));
                }

                database.Players.PlayerList.Add(item);
            }
        }
Beispiel #2
0
        //Отдельный поток для обновления базы данных
        public static void DB_Updater()
        {
            while (true)
            {
                Stopwatch dbTime = Stopwatch.StartNew();
                {
                    //Обноляем и добавляем игроков
                    for (int i = 0; i < scanner.Players.Count; i++)
                    {
                        //Бережно берем из списка
                        Radar.PlayerObject player;
                        try   { player = scanner.Players[i] as Radar.PlayerObject; }
                        catch { SystemSounds.Exclamation.Play(); continue; }


                        if (player != null)        //Если игрок не багнулся
                        {
                            if (player.Name != "") //Если имя загрузилось
                            {
                                DataBase.cPlayers.Player pl = new DataBase.cPlayers.Player()
                                {
                                    Name       = player.Name,
                                    GUID       = player.Guid,
                                    LvL        = (byte)player.Level,
                                    Class      = player.Class,
                                    Race       = player.Race,
                                    Gender     = player.Gender,
                                    LastPos    = new Vector3(player.XPos, player.YPos, player.ZPos),
                                    LastSeen   = Tools.GetNowTime(),
                                    LastZoneID = scanner.CurrentZoneID,
                                };
                                DB.AddOrUpdatePlayer(pl);
                            }
                        }
                    }


                    //Обноляем и добавляем всякие объекты и т.п
                    for (int i = 0; i < scanner.Objects.Count; i++)
                    {
                        //Бережно берем из списка
                        Radar.OtherObject obj;
                        try   { obj = scanner.Objects[i] as Radar.OtherObject; }
                        catch { SystemSounds.Exclamation.Play(); continue; }


                        if (obj != null)  //Если объект не багнулся
                        {
                            //Временная переменная
                            Enums.Name_And_TextureName temp = new Enums.Name_And_TextureName();

                            if (Enums.ObjDB.GetOre(obj.ObjectId, ref temp))  //Это руда
                            {
                                DataBase.cOres.Ore oreToUpdate = new DataBase.cOres.Ore()
                                {
                                    Name           = temp.name,
                                    ID             = obj.ObjectId,
                                    Position       = Tools.Vec.Round(new Vector2(obj.XPos, obj.YPos), 2),
                                    MaxSeeDistance = (float)Math.Round(Vector2.Distance(new Vector2(obj.XPos, obj.YPos), new Vector2(scanner.MyPlayer.XPos, scanner.MyPlayer.YPos)), 2),
                                    LastSeen       = Tools.GetNowTime(),
                                };
                                DB.AddOrUpdateOre(scanner.CurrentZoneID, oreToUpdate);
                            }
                            else if (Enums.ObjDB.GetHerb(obj.ObjectId, ref temp))  //Трава
                            {
                                DataBase.cHerbs.Herb herbToUpdate = new DataBase.cHerbs.Herb()
                                {
                                    Name           = temp.name,
                                    ID             = obj.ObjectId,
                                    Position       = Tools.Vec.Round(new Vector2(obj.XPos, obj.YPos), 2),
                                    MaxSeeDistance = (float)Math.Round(Vector2.Distance(new Vector2(obj.XPos, obj.YPos), new Vector2(scanner.MyPlayer.XPos, scanner.MyPlayer.YPos)), 2),
                                    LastSeen       = Tools.GetNowTime(),
                                };
                                DB.AddOrUpdateHerb(scanner.CurrentZoneID, herbToUpdate);
                            }
                            else  //Это не руда и не трава, добавляем в список объектов!
                            {
                                DataBase.cObjects.Object objectToUpdate = new DataBase.cObjects.Object()
                                {
                                    ID             = obj.ObjectId,
                                    Position       = Tools.Vec.Round(new Vector2(obj.XPos, obj.YPos), 2),
                                    MaxSeeDistance = (float)Math.Round(Vector2.Distance(new Vector2(obj.XPos, obj.YPos), new Vector2(scanner.MyPlayer.XPos, scanner.MyPlayer.YPos)), 2),
                                    LastSeen       = Tools.GetNowTime(),
                                };
                                DB.AddOrUpdateObject(scanner.CurrentZoneID, objectToUpdate);
                            }
                        }
                    }
                }
                dbTime.Stop();
                DbUpdateTime = dbTime.ElapsedTicks;

                Thread.Sleep(500);
            }
        }
Beispiel #3
0
        public static void SaveDBtoShow()
        {
            DBtoShow DatabaseToShow = new DBtoShow();

            try
            {
                for (int i = 0; i < DB.database.Players.PlayerList.Count; i++)
                {
                    DataBase.cPlayers.Player player = DB.database.Players.PlayerList[i];

                    string Nick = player.Name;
                    string Team = Defines.IsHorde(player.Race) ? "Орда" : "Альянс";
                    string GUID = player.GUID != 0 ? player.GUID.ToString("#,#") : null;

                    byte LvL = player.LvL;

                    string Race   = Defines.GetTextOfRace(player.Race);
                    string Class  = Defines.GetTextOfClass(player.Class);
                    string Gender = player.Gender == 0 ? "М" : player.Gender == 1 ? "Ж" : null;

                    string LastPos    = Tools.Vec.Round(player.LastPos, 2).ToString().Replace("{", "").Replace("}", "");
                    string LastSeen   = player.LastSeen;
                    string LastZoneID = Enums.ZonesDB.GetTextOfZone(player.LastZoneID);

                    //Отражение уровней
                    List <Уровень> Levels = new List <Уровень>();
                    for (int l = 0; l < player.Levels.Count; l++)
                    {
                        Уровень lvlChanged = new Уровень()
                        {
                            ЛвЛ = " " + player.Levels[l].L + " ", Дата = player.Levels[l].T
                        };
                        Levels.Add(lvlChanged);
                    }

                    //Отражение зон
                    List <Обнаружение> Seens = new List <Обнаружение>();
                    for (int z = 0; z < player.Seens.Count; z++)
                    {
                        Обнаружение zoneChanged = new Обнаружение()
                        {
                            Зона = Enums.ZonesDB.GetTextOfZone(player.Seens[z].I), Дата = player.Seens[z].T
                        };
                        Seens.Add(zoneChanged);
                    }

                    DatabaseToShow.Игроки.Add(new DBtoShow.Игрок()
                    {
                        Ник = Nick, Сторона = Team, GUID = GUID, ЛвЛ = LvL.ToString(), аса = Race, Класс = Class, Пол = Gender, ПоследняяПозиция = LastPos, ПоследнееОбнаружение = LastSeen, ПоследняяЗона = LastZoneID, Уровни = Levels, Обнаружения = Seens
                    });
                }
            }
            catch (Exception ex)
            {
                Tools.MsgBox.Exception(ex, "Ошибка отражения основной БД в БД для просмотра.");
                return;
            }



            try
            {
                XmlSerializer ser = new XmlSerializer(typeof(DBtoShow));

                string dbPath = DB.PlayersPath + "\\" + "Игроки.xml";
                using (Stream fStream = new FileStream(dbPath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
                {
                    ser.Serialize(fStream, DatabaseToShow);
                    fStream.Flush();
                    fStream.Close();
                }
            }
            catch (Exception ex)
            {
                Tools.MsgBox.Exception(ex, "Ошибка сохранения бд игроков для просмотра.");
            }
        }