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); } } }
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 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, "Ошибка сохранения бд игроков для просмотра."); } }