예제 #1
0
        //Добавить траву в бд или обновить её в бд
        public static void AddOrUpdateHerb(uint ZoneID, DataBase.cHerbs.Herb item)
        {
            if (database.Herbs.ZoneExist(ZoneID))  //Если такая зона есть в списке зон
            {
                for (int i = 0; i < database.Herbs.HerbDict[ZoneID].Count; i++)
                {
                    if (database.Herbs.HerbDict[ZoneID][i].ID == item.ID) //Отсеиваем мусор
                    {
                        bool inRadius = Tools.Vec.InRadius(database.Herbs.HerbDict[ZoneID][i].Position, item.Position, Game1.settings.nodes.RadiusCheck);
                        if (inRadius)
                        {
                            //Установка позиции
                            database.Herbs.HerbDict[ZoneID][i].Position = item.Position;

                            //Обновляем максимальную дистанцию отрисовки
                            if (item.MaxSeeDistance > database.Herbs.HerbDict[ZoneID][i].MaxSeeDistance)
                            {
                                database.Herbs.HerbDict[ZoneID][i].MaxSeeDistance = item.MaxSeeDistance;
                            }

                            //Устанавливаем текущее время
                            if (item.LastSeen != "")
                            {
                                database.Herbs.HerbDict[ZoneID][i].LastSeen = item.LastSeen;
                            }


                            return;
                        }
                    }
                }

                //Если прошли цикл, значит это новая трава!
                database.Herbs.HerbDict[ZoneID].Add(item);
            }
            else
            {
                //Если не нашли эту зону в списке, добавляем
                database.Herbs.HerbDict.Add(ZoneID, new List <DataBase.cHerbs.Herb>()
                {
                    item
                });
            }
        }
예제 #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);
            }
        }