public static void DrawInfo(this SpriteBatch sb) { string players = Game1.settings.PlayersEnabled ? Game1.scanner.Players.Count.ToString() : "Disabled"; string npcs = Game1.settings.NpcEnabled ? Game1.scanner.Npcs.Count.ToString() : "Disabled"; string objects = Game1.settings.ObjectsEnabled ? Game1.scanner.Objects.Count.ToString() : "Disabled"; string currZone = Game1.scanner.CurrentZoneName; string XPos = Math.Round(Game1.scanner.MyPlayer.XPos, 2).ToString(); string YPos = Math.Round(Game1.scanner.MyPlayer.YPos, 2).ToString(); string ZPos = Math.Round(Game1.scanner.MyPlayer.ZPos, 2).ToString(); string targetGuid = ""; string npcTargetID = ""; if (Game1.scanner.Target != null) { if (Game1.scanner.Target is Radar.PlayerObject) { Radar.PlayerObject pl = Game1.scanner.Target as Radar.PlayerObject; targetGuid = pl.Guid.ToString(); npcTargetID = "Player Selected!"; } else if (Game1.scanner.Target is Radar.NpcObject) { Radar.NpcObject npc = Game1.scanner.Target as Radar.NpcObject; targetGuid = npc.Guid.ToString(); npcTargetID = npc.NpcID.ToString(); } } sb.DrawTextForInfo("Ping Time: " + Tools.MsFromTicks(Game1.PingTime) + " ms", new Vector2(8, 32), 14.0f); sb.DrawTextForInfo("DbUpdate Time: " + Tools.MsFromTicks(Game1.DbUpdateTime) + " ms", new Vector2(8, 48), 14.0f); sb.DrawTextForInfo("-", new Vector2(8, 64), 14.0f); sb.DrawTextForInfo("TotalObjects: " + Game1.scanner.TotalWowObjects, new Vector2(8, 80), 14.0f); sb.DrawTextForInfo("ReadedObjects: " + Game1.scanner.ReadedWowObjects, new Vector2(8, 96), 14.0f); sb.DrawTextForInfo("-", new Vector2(8, 112), 14.0f); sb.DrawTextForInfo("Players: " + Game1.scanner.Players.Count, new Vector2(8, 128), 14.0f); sb.DrawTextForInfo("Npcs: " + npcs, new Vector2(8, 144), 14.0f); sb.DrawTextForInfo("Objects: " + objects, new Vector2(8, 160), 14.0f); sb.DrawTextForInfo("-", new Vector2(8, 176), 14.0f); sb.DrawTextForInfo("My GUID: " + Game1.scanner.MyPlayer.Guid, new Vector2(8, 192), 14.0f); sb.DrawTextForInfo("XPos: " + XPos, new Vector2(8, 208), 14.0f); sb.DrawTextForInfo("YPos: " + YPos, new Vector2(8, 224), 14.0f); sb.DrawTextForInfo("ZPos: " + ZPos, new Vector2(8, 240), 14.0f); sb.DrawTextForInfo("Current Zone: " + currZone, new Vector2(8, 256), 14.0f); sb.DrawTextForInfo("Target GUID: " + targetGuid, new Vector2(8, 270), 14.0f); sb.DrawTextForInfo("Target Npc ID: " + npcTargetID, new Vector2(8, 284), 14.0f); }
public static void DrawMeAtCenter(this SpriteBatch sb, Radar.PlayerObject im) { float Rotation = -im.Rotation; float Zoom = Game1.settings.RadarZoom / 4; Texture2D main_tex = Textures.GetTextureByRaceAndGender(im.Race, im.Gender); Texture2D arrow_tex = Textures.GetTexture("other_arrow"); //Calc destinations for textures Rectangle ClassDest = new Rectangle((int)RadarCenterXPos, (int)RadarCenterYPos, (int)(main_tex.Width * Zoom), (int)(main_tex.Height * Zoom)); Rectangle ArrowDest = new Rectangle((int)RadarCenterXPos, (int)RadarCenterYPos, (int)(arrow_tex.Width * Zoom), (int)(arrow_tex.Height * Zoom)); float medium_lenght = (main_tex.Width / 2) + (main_tex.Height / 2); sb.DrawLine(new Vector2(RadarCenterXPos, RadarCenterYPos), (medium_lenght) * Zoom, (Rotation - 1.577f), Color.Black, 2); //Draw class sb.DrawTexture(main_tex, ClassDest); //And finally arrow of sight sb.DrawTexture(arrow_tex, ArrowDest, Rotation, Color.Black); }
public static void ChecksHighLevels(ArrayList players, Radar.PlayerObject im) { //Чекаем, теряем ли мы хп? if (Game1.settings.sounds.PlayMeDamaged) { if (im.CurrentHealth < LastMyHP) { if (my_player_damaged.State == SoundState.Stopped) { //Нас дамажат, проигрываем эффект удара my_player_damaged.Volume = 0.3f; my_player_damaged.Pitch = Game1.random.Next(4, 6) / 10.0f; my_player_damaged.Play(); } } } LastMyHP = im.CurrentHealth; ArrayList playerToCheckDistance = new ArrayList(); bool HighLvlFinded = false; foreach (Radar.PlayerObject player in players) { if (player.Guid != im.Guid) { if (!player.IsDead & !im.IsDead) { if (Defines.IsEnemy(player.Race, im.Race)) { if (player.IsHighLvl) { playerToCheckDistance.Add(player); HighLvlFinded = true; } } } } } //Ищем ближайших высокий левелов float nearestDistance = MaxSoundDistance; foreach (Radar.PlayerObject player in players) { float currPlayer_Distance = Vector2.Distance(new Vector2(im.XPos, im.YPos), new Vector2(player.XPos, player.YPos)); if (currPlayer_Distance < nearestDistance) { nearestDistance = currPlayer_Distance; } } //Вычисляем громкость, чем ближе - тем громче float procVal = (nearestDistance / MaxSoundDistance) * 100; float limit = 70; float procents = procVal > limit ? limit : procVal; //Ограничиваем float volume = Math.Abs((100 - procents) / 666); high_lvl_rogue.Volume = volume; high_lvl.Volume = volume; low_lvl.Volume = volume; //Проигрование звуки если высокий лвл bool findedAny = false; foreach (Radar.PlayerObject player in players) { if (player.Guid != im.Guid) { if (!player.IsDead & !im.IsDead) { if (Defines.IsEnemy(player.Race, im.Race)) { if (HighLvlFinded) //Высокий уровень { //Если рога bool hasRogue = (player.Class == (byte)Defines.Classes.ROGUE | player.Class == (byte)Defines.Classes.DRUID); if (Game1.settings.sounds.PlayInvisibles & hasRogue) { if (Game1.settings.sounds.PlayInvisibles) //Если проигрывать звуки для инвизчиков { if (high_lvl_rogue.State != SoundState.Playing) { low_lvl.Stop(); high_lvl.Stop(); high_lvl_rogue.Play(); //Проигрываем звук для инвизеров } } } else { if (Game1.settings.sounds.PlayHighLvl) //Если проигрывать звуки для высоких лвл { if (high_lvl.State != SoundState.Playing) { low_lvl.Stop(); high_lvl_rogue.Stop(); high_lvl.Play(); //Проигрываем звук для высоких лвл } } } findedAny = true; break; } else if (!player.IsHighLvl) //Низкий уровень { if (Game1.settings.sounds.PlayLowLvl) //Если проигрывать звуки для низких лвл { if (low_lvl.State != SoundState.Playing & high_lvl_rogue.State != SoundState.Playing) { high_lvl.Stop(); low_lvl.Play(); //Проигрываем звук для низких лвл } findedAny = true; break; } } } } } } //Если не нашло ничего, вырубаем (кроме роги) if (!findedAny) { low_lvl.Stop(); high_lvl.Stop(); } }
public static void DrawPlayer(this SpriteBatch sb, Radar.PlayerObject player, Radar.PlayerObject im) { float RadarZoom = Game1.settings.RadarZoom; bool IsEnemy = Defines.IsEnemy(player.Race, im.Race); float XPos = (im.XPos - player.XPos) * RadarZoom + Game1.RadarWidth / 2; float YPos = (im.YPos - player.YPos) * RadarZoom + Game1.RadarHeight / 2; float Rotation = -player.Rotation; float Zoom = RadarZoom / 3.2f; Color color = Tools.GetRandomColor(Game1.random); int Size = Game1.settings.Player_Size; Texture2D class_tex = Textures.GetTextureByClass(player.Class); Texture2D arrow_tex = Textures.GetTexture("other_arrow"); //Calc destinations for textures Rectangle ClassDest = new Rectangle((int)XPos, (int)YPos, (int)(class_tex.Width * Zoom), (int)(class_tex.Height * Zoom)); Rectangle ArrowDest = new Rectangle((int)XPos, (int)YPos, (int)(arrow_tex.Width * (Zoom / 1.4f)), (int)(arrow_tex.Height * (Zoom / 1.4f))); //Рисуем линию взгляда если высокий лвл if (IsEnemy) { if (player.IsHighLvl) { sb.DrawLine(new Vector2(XPos, YPos), Game1.RadarWidth * 1.5f, (Rotation - 1.577f), Color.Red, 2); sb.DrawText(player.Name + ":" + player.Level.ToString(), new Vector2(XPos, YPos + Size), 15.0f, color); } else { float medium_lenght = (class_tex.Width / 2) + (class_tex.Height / 2); sb.DrawLine(new Vector2(XPos, YPos), (medium_lenght) * Zoom + (medium_lenght / 2), (Rotation - 1.577f), Color.Red, 2); sb.DrawText(player.Name + ":" + player.Level.ToString(), new Vector2(XPos, YPos + Size), 14.0f, Color.Red); } } else { float medium_lenght = (class_tex.Width / 2) + (class_tex.Height / 2); sb.DrawLine(new Vector2(XPos, YPos), (medium_lenght) * Zoom, (Rotation - 1.577f), Color.LightSkyBlue, 2); sb.DrawText(player.Name + ":" + player.Level.ToString(), new Vector2(XPos, YPos + Size), 14.0f, Color.Gold); } if (player.IsDead) { sb.DrawOpacityTexture(class_tex, ClassDest, 120); } else { //Draw class sb.DrawTexture(class_tex, ClassDest); //And finally arrow of sight if (IsEnemy) { sb.DrawTexture(arrow_tex, ArrowDest, Rotation, Color.Red); } else { sb.DrawTexture(arrow_tex, ArrowDest, Rotation, Color.LightSkyBlue); } } }
protected override void Draw(GameTime gameTime) { float RadarZoom = settings.RadarZoom; Stopwatch drawTime = Stopwatch.StartNew(); GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); //Рисуем миникарту //spriteBatch.DrawMinimapOverlay(scanner.MyPlayer); //Отрисовываем гуи если в мире и мышка под меню if (!GUI.MouseOver | !(HasConnected & HasInWorld)) { if (HasConnected) { if (HasInWorld) { //Реинициализируем адресса, если что-то пошло не так { if (LastGameState != 3) { scanner.InitAddresses(); } LastGameState = 3; } #region Отрисовка руд, трав и объектов из базы данных!! { #region Отрисовка руды из бд { if (settings.ores.Find) //Если ищем с бд { if (DB.database.Ores.ZoneExist(scanner.CurrentZoneID)) //Если есть хоть что-то в этой зоне { for (int i = 0; i < DB.database.Ores.OresDict[scanner.CurrentZoneID].Count; i++) { //Бережно берем из списка DataBase.cOres.Ore ore; try { ore = DB.database.Ores.OresDict[scanner.CurrentZoneID][i] as DataBase.cOres.Ore; } catch { continue; } //Если руда в радиусе прорисовки Vector2 orePos = new Vector2(ore.Position.X, ore.Position.Y); Vector2 imPos = new Vector2(scanner.MyPlayer.XPos, scanner.MyPlayer.YPos); if (Tools.Vec.InRadius(orePos, imPos, (DB.database.Ores.MaxSeeDistance * 2))) { bool breaked = false; foreach (Radar.OtherObject obj in scanner.Objects) { if (Enums.ObjDB.HasOre(obj.ObjectId)) { if (Tools.Vec.InRadius(orePos, new Vector2(obj.XPos, obj.YPos), settings.nodes.RadiusCheck)) { breaked = true; break; } } } if (!breaked) { int XPos = (int)((imPos.X - orePos.X) * RadarZoom + RadarWidth / 2); int YPos = (int)((imPos.Y - orePos.Y) * RadarZoom + RadarHeight / 2); float DistanceToOre = Vector2.Distance(orePos, imPos); if (DistanceToOre < (ore.MaxSeeDistance / 1.5f)) { float Zoom = RadarZoom / 4; float divide_factor = settings.nodes.NotExist_DivideFactor; int NodeSize = (int)((settings.nodes.Size * Zoom) / divide_factor); Color textureColor = Tools.GetOpacity(Color.Red, 96); Color textColor = Tools.GetOpacity(Color.Red, 200); Rectangle TextureDest = new Rectangle(XPos, YPos, NodeSize, NodeSize); spriteBatch.DrawTexture("other_notexist_node", TextureDest, textureColor); spriteBatch.DrawText(ore.Name, new Vector2(XPos, YPos + NodeSize), (settings.ores.FontSize / divide_factor), textColor); } else { float Zoom = RadarZoom / 4; int NodeSize = (int)(settings.nodes.Size * Zoom); Rectangle TextureDest = new Rectangle(XPos, YPos, NodeSize, NodeSize); spriteBatch.DrawTexture("other_notsee_node", TextureDest, Color.DarkRed); spriteBatch.DrawText(ore.Name, new Vector2(XPos, YPos + NodeSize), settings.ores.FontSize, Color.DarkRed); } } } } } } } #endregion #region Отрисовка травы из бд { if (settings.herbs.Find) //Если ищем с бд { if (DB.database.Herbs.ZoneExist(scanner.CurrentZoneID)) //Если есть хоть что-то в этой зоне { for (int i = 0; i < DB.database.Herbs.HerbDict[scanner.CurrentZoneID].Count; i++) { //Бережно берем из списка DataBase.cHerbs.Herb herb; try { herb = DB.database.Herbs.HerbDict[scanner.CurrentZoneID][i] as DataBase.cHerbs.Herb; } catch { continue; } //Если трава в радиусе прорисовки Vector2 herbPos = new Vector2(herb.Position.X, herb.Position.Y); Vector2 imPos = new Vector2(scanner.MyPlayer.XPos, scanner.MyPlayer.YPos); if (Tools.Vec.InRadius(herbPos, imPos, (DB.database.Herbs.MaxSeeDistance * 2))) { bool breaked = false; foreach (Radar.OtherObject obj in scanner.Objects) { if (Enums.ObjDB.HasHerb(obj.ObjectId)) { if (Tools.Vec.InRadius(herbPos, new Vector2(obj.XPos, obj.YPos), settings.nodes.RadiusCheck)) { breaked = true; break; } } } if (!breaked) { int XPos = (int)((imPos.X - herbPos.X) * RadarZoom + RadarWidth / 2); int YPos = (int)((imPos.Y - herbPos.Y) * RadarZoom + RadarHeight / 2); float DistanceToHerb = Vector2.Distance(herbPos, imPos); if (DistanceToHerb < 5) { } if (DistanceToHerb < (herb.MaxSeeDistance / 1.5f)) { float Zoom = RadarZoom / 4; float divide_factor = settings.nodes.NotExist_DivideFactor; int NodeSize = (int)((settings.nodes.Size * Zoom) / divide_factor); Color textureColor = Tools.GetOpacity(Color.Red, 96); Color textColor = Tools.GetOpacity(Color.Red, 200); Rectangle TextureDest = new Rectangle(XPos, YPos, NodeSize, NodeSize); spriteBatch.DrawTexture("other_notexist_node", TextureDest, textureColor); spriteBatch.DrawText(herb.Name, new Vector2(XPos, YPos + NodeSize), (settings.herbs.FontSize / divide_factor), textColor); } else { float Zoom = RadarZoom / 4; int NodeSize = (int)(settings.nodes.Size * Zoom); Rectangle TextureDest = new Rectangle(XPos, YPos, NodeSize, NodeSize); spriteBatch.DrawTexture("other_notsee_node", TextureDest, Color.DarkRed); spriteBatch.DrawText(herb.Name, new Vector2(XPos, YPos + NodeSize), settings.herbs.FontSize, Color.DarkRed); } } } } } } } #endregion #region Отрисовка редких объектов из бд { if (settings.rareobjects.Find | settings.otherobjects.Draw) //Если ищем с бд { if (DB.database.Objects.ZoneExist(scanner.CurrentZoneID)) ////Если есть хоть что-то в этой зоне { for (int i = 0; i < DB.database.Objects.ObjectsDict[scanner.CurrentZoneID].Count; i++) { //Бережно берем из списка DataBase.cObjects.Object abject; try { abject = DB.database.Objects.ObjectsDict[scanner.CurrentZoneID][i] as DataBase.cObjects.Object; } catch { continue; } //Если трава в радиусе прорисовки Vector2 objPos = new Vector2(abject.Position.X, abject.Position.Y); Vector2 imPos = new Vector2(scanner.MyPlayer.XPos, scanner.MyPlayer.YPos); if (Tools.Vec.InRadius(objPos, imPos, (DB.database.Herbs.MaxSeeDistance * 2))) { bool breaked = false; foreach (Radar.OtherObject obj in scanner.Objects) { if (Enums.ObjDB.HasRareObject(obj.ObjectId)) { if (Tools.Vec.InRadius(objPos, new Vector2(obj.XPos, obj.YPos), settings.nodes.RadiusCheck)) { breaked = true; break; } } else { bool hasOre = Enums.ObjDB.HasOre(obj.ObjectId); bool hasHerb = Enums.ObjDB.HasHerb(obj.ObjectId); bool hasRare = Enums.ObjDB.HasRareObject(obj.ObjectId); bool hasBlacklist = Enums.ObjDB.HasInBlackList(obj.ObjectId); if (!hasOre & !hasHerb & !hasRare & !hasBlacklist) //Если это обычный объект { breaked = true; break; } } } if (!breaked) { Enums.Name_And_TextureName finded = new Enums.Name_And_TextureName(); //Если отрисовываемый объект не обычный, а редкий if (Enums.ObjDB.GetRareObject(abject.ID, ref finded)) { int XPos = (int)((imPos.X - objPos.X) * RadarZoom + RadarWidth / 2); int YPos = (int)((imPos.Y - objPos.Y) * RadarZoom + RadarHeight / 2); float DistanceToObject = Vector2.Distance(objPos, imPos); Color randomColor = Tools.GetRandomColor(random); if (DistanceToObject < (abject.MaxSeeDistance / 1.5f)) { float Zoom = RadarZoom / 4; float divide_factor = settings.nodes.NotExist_DivideFactor; int NodeSize = (int)((settings.nodes.Size * Zoom) / divide_factor); Color textureColor = Tools.GetOpacity(Color.Red, 96); Color textColor = Tools.GetOpacity(Color.Red, 200); Rectangle TextureDest = new Rectangle(XPos, YPos, NodeSize, NodeSize); spriteBatch.DrawTexture("other_notexist_node", TextureDest, textureColor); spriteBatch.DrawText(finded.name, new Vector2(XPos, YPos + NodeSize), (settings.rareobjects.FontSize / divide_factor), textColor); } else { float Zoom = RadarZoom / 4; int NodeSize = (int)(settings.nodes.Size * Zoom); Rectangle TextureDest = new Rectangle(XPos, YPos, NodeSize, NodeSize); spriteBatch.DrawTexture("other_notsee_node", TextureDest, randomColor); spriteBatch.DrawText(finded.name, new Vector2(XPos, YPos + NodeSize), settings.rareobjects.FontSize, randomColor); } } else //Для обычных объектов { if (settings.otherobjects.Draw) { int XPos = (int)((imPos.X - objPos.X) * RadarZoom + RadarWidth / 2); int YPos = (int)((imPos.Y - objPos.Y) * RadarZoom + RadarHeight / 2); float DistanceToObject = Vector2.Distance(objPos, imPos); string id = abject.ID.ToString(); if (DistanceToObject < (abject.MaxSeeDistance / 1.5f)) { float Zoom = RadarZoom / 4; float divide_factor = settings.nodes.NotExist_DivideFactor; int NodeSize = (int)((settings.nodes.Size * Zoom) / divide_factor); Color textureColor = Tools.GetOpacity(settings.otherobjects.Color, 96); Color textColor = Tools.GetOpacity(settings.otherobjects.Color, 200); Rectangle TextureDest = new Rectangle(XPos, YPos, NodeSize, NodeSize); spriteBatch.DrawTexture("other_notexist_node", TextureDest, textureColor); spriteBatch.DrawText(id, new Vector2(XPos, YPos + NodeSize), (settings.otherobjects.FontSize / divide_factor), textColor); } else { float Zoom = RadarZoom / 4; int NodeSize = (int)(settings.nodes.Size * Zoom); Rectangle TextureDest = new Rectangle(XPos, YPos, NodeSize, NodeSize); spriteBatch.DrawTexture("other_notsee_node", TextureDest, Color.DarkRed); spriteBatch.DrawText(id, new Vector2(XPos, YPos + NodeSize), settings.otherobjects.FontSize, Color.DarkRed); } } } } } } } } } #endregion } #endregion #region Отрисовка объектов которые видим foreach (Radar.OtherObject obj in scanner.Objects) { Enums.Name_And_TextureName finded = new Enums.Name_And_TextureName(); if (Enums.ObjDB.GetHerb(obj.ObjectId, ref finded)) //Если это травка { if (settings.herbs.Draw) //Если отрисовываем травы, то рисуем уже { float XPos = (scanner.MyPlayer.XPos - obj.XPos) * RadarZoom + RadarWidth / 2; float YPos = (scanner.MyPlayer.YPos - obj.YPos) * RadarZoom + RadarHeight / 2; int Size = settings.herbs.Size; Rectangle TextureDest = new Rectangle((int)XPos, (int)YPos, Size, Size); spriteBatch.DrawTexture(finded.textureName, TextureDest); spriteBatch.DrawText(finded.name, new Vector2(XPos, YPos + Size), settings.herbs.FontSize, settings.herbs.Color); } } else if (Enums.ObjDB.GetOre(obj.ObjectId, ref finded)) //Если это руда { if (settings.ores.Draw) //Если отрисовываем травы, то рисуем уже { float XPos = (scanner.MyPlayer.XPos - obj.XPos) * RadarZoom + RadarWidth / 2; float YPos = (scanner.MyPlayer.YPos - obj.YPos) * RadarZoom + RadarHeight / 2; int Size = settings.ores.Size; Rectangle TextureDest = new Rectangle((int)XPos, (int)YPos, Size, Size); spriteBatch.DrawTexture(finded.textureName, TextureDest); spriteBatch.DrawText(finded.name, new Vector2(XPos, YPos + Size), settings.ores.FontSize, settings.ores.Color); } } else if (Enums.ObjDB.GetRareObject(obj.ObjectId, ref finded)) //Если это редкий объект { if (settings.rareobjects.Draw) //Если отрисовываем редкие объекты, то рисуем уже { float XPos = (scanner.MyPlayer.XPos - obj.XPos) * RadarZoom + RadarWidth / 2; float YPos = (scanner.MyPlayer.YPos - obj.YPos) * RadarZoom + RadarHeight / 2; int Size = settings.rareobjects.Size; Rectangle TextureDest = new Rectangle((int)XPos, (int)YPos, Size, Size); Color randomColor = Tools.GetRandomColor(random); spriteBatch.DrawLine(new Vector2(XPos, YPos), new Vector2(Drawing.RadarCenterXPos, Drawing.RadarCenterYPos), randomColor, 2); spriteBatch.DrawTexture(finded.textureName, TextureDest, GlobalRotating); spriteBatch.DrawText(finded.name, new Vector2(XPos, YPos + Size), settings.rareobjects.FontSize, randomColor); } } else //Просто объекты { if (settings.otherobjects.Draw) //Если отрисовываем обычные объекты, то рисуем уже { float XPos = (scanner.MyPlayer.XPos - obj.XPos) * RadarZoom + RadarWidth / 2; float YPos = (scanner.MyPlayer.YPos - obj.YPos) * RadarZoom + RadarHeight / 2; if (settings.otherobjects.DrawLines) { if (!Enums.ObjDB.HasInBlackList(obj.ObjectId)) { Vector2 radarCenter = new Vector2(Drawing.RadarCenterXPos, Drawing.RadarCenterYPos); Vector2 objPos = new Vector2(XPos, YPos); spriteBatch.DrawLine(radarCenter, objPos, Color.AliceBlue, 1); } } int Size = settings.otherobjects.Size; Rectangle TextureDest = new Rectangle((int)XPos, (int)YPos, Size, Size); spriteBatch.DrawTexture("other_object", TextureDest); spriteBatch.DrawText(obj.ObjectId.ToString(), new Vector2(XPos, YPos + Size), settings.rareobjects.FontSize, settings.otherobjects.Color); } } } #endregion //Отрисовываем игроков foreach (Radar.PlayerObject player in scanner.Players) { spriteBatch.DrawPlayer(player, scanner.MyPlayer); } //Ищем объект? //foreach (object obj in scanner.All) //{ // if (obj is Radar.OtherObject) // { // Radar.OtherObject otherObj = obj as Radar.OtherObject; // } // else if (obj is Radar.NpcObject) // { // Radar.NpcObject npc = obj as Radar.NpcObject; // } // else if (obj is Radar.PlayerObject) // { // Radar.PlayerObject player = obj as Radar.PlayerObject; // } //} //Отрисовываем цель if (scanner.Target != null) { float result = Tools.Oscillate(0.32f, 1.5f, (float)(gameTime.TotalGameTime.TotalMilliseconds / 1000.0f)); Texture2D target_tex = Textures.GetTexture("other_target"); if (scanner.Target is Radar.PlayerObject) { Radar.PlayerObject player = scanner.Target as Radar.PlayerObject; float XPos = (scanner.MyPlayer.XPos - player.XPos) * RadarZoom + RadarWidth / 2; float YPos = (scanner.MyPlayer.YPos - player.YPos) * RadarZoom + RadarHeight / 2; spriteBatch.DrawLine(new Vector2(Drawing.RadarCenterXPos, Drawing.RadarCenterYPos), new Vector2(XPos, YPos), Color.SlateBlue, 4); spriteBatch.DrawTexture(target_tex, new Rectangle((int)XPos, (int)YPos, (int)(target_tex.Width * result), (int)(target_tex.Height * result)), GlobalRotating / 8, Color.Gold); } else if (scanner.Target is Radar.NpcObject) { Radar.NpcObject npc = scanner.Target as Radar.NpcObject; float XPos = (scanner.MyPlayer.XPos - npc.XPos) * RadarZoom + RadarWidth / 2; float YPos = (scanner.MyPlayer.YPos - npc.YPos) * RadarZoom + RadarHeight / 2; spriteBatch.DrawLine(new Vector2(Drawing.RadarCenterXPos, Drawing.RadarCenterYPos), new Vector2(XPos, YPos), Color.SlateBlue, 4); spriteBatch.DrawTexture(target_tex, new Rectangle((int)XPos, (int)YPos, (int)(target_tex.Width * result), (int)(target_tex.Height * result)), GlobalRotating / 8, Color.Gold); spriteBatch.DrawText(npc.Name, new Vector2(XPos, YPos + target_tex.Height), 14.0f, Color.Gold); } } //Рисуем себя по центру spriteBatch.DrawMeAtCenter(scanner.MyPlayer); } else { Texture2D not_in_world_tex = Textures.GetTexture("other_not_in_world"); spriteBatch.DrawTextureFromLeft(not_in_world_tex, new Rectangle(0, 0, RadarWidth, RadarHeight)); LastGameState = 2; } } else { GraphicsDevice.Clear(Color.White); spriteBatch.DrawText("Not connected!", new Vector2(RadarHeight / 2, RadarWidth / 2), 25.0f, Color.Black); LastGameState = 1; } } else //Иначе рисуем инфу { GraphicsDevice.Clear(Color.AntiqueWhite); spriteBatch.DrawInfo(); } spriteBatch.End(); drawTime.Stop(); //Устанавливаем таймер и обновляем значение DrawTime = drawTime.ElapsedTicks; base.Draw(gameTime); }
protected override void Update(GameTime gameTime) { // Allows the game to exit if (Keyboard.GetState().IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Escape)) { this.Exit(); } GlobalRotating += Game1.random.Next(4, 6) / 10.0f; //Обновляем гуи GUI.Update(); //Если сканнер запустился if (scanner != null) { //Если игрок в мире HasConnected = scanner.HasConnected(); if (HasConnected) { HasInWorld = scanner.InWorld(); if (HasInWorld) { //Обновляем звуки Sounds.ChecksHighLevels(scanner.Players, scanner.MyPlayer); Stopwatch pingTime = Stopwatch.StartNew(); { scanner.Ping(settings.NpcEnabled, settings.PlayersEnabled, settings.FriendlyPlayersEnabled, settings.ObjectsEnabled); } pingTime.Stop(); PingTime = pingTime.ElapsedTicks; if (scanner.Target != null) { if (scanner.Target is Radar.PlayerObject) { Radar.PlayerObject player = scanner.Target as Radar.PlayerObject; this.Window.Title = "Rio WoW Radar - Target[" + player.Name + ":" + player.Level + "]"; } else if (scanner.Target is Radar.NpcObject) { Radar.NpcObject npc = scanner.Target as Radar.NpcObject; this.Window.Title = "Rio WoW Radar - Target[" + npc.Name + ":" + npc.Level + "]"; } else { this.Window.Title = "Rio WoW Radar - target has broken! (because emlpdr!)"; } } else { this.Window.Title = "Rio WoW Radar - [Draw: " + Tools.MsFromTicks(DrawTime) + " ms]"; } } else { this.Window.Title = "Rio WoW Radar - Not in world!"; } } else { this.Window.Title = "Rio WoW Radar - Not connected!"; } } else { this.Exit(); } base.Update(gameTime); }