public void Init() { RogueEncampmentWp = null; RedPortal = null; InGame = false; FullyEnteredGame = false; LastTeleport = 0; Experience = 0; Me = new Player(); Logger.Write("Reset GameData"); SkillLevels.Clear(); ItemSkillLevels.Clear(); Players.Clear(); Npcs.Clear(); Items.Clear(); WorldObjects.Clear(); Inventory = new Container("Inventory", ContainerType.Inventory, InventoryWidth, InventoryHeight); Stash = new Container("Stash", ContainerType.Stash, StashWidth, StashHeight); Cube = new Container("Cube", ContainerType.Cube, CubeWidth, CubeHeight); //todo make configurable Belt = new Container("Belt", ContainerType.Belt, 4, 4); //todo make size depend on belt type... MalahId = 0; CurrentLife = 0; FirstNpcInfoPacket = true; AttacksSinceLastTeleport = 0; WeaponSet = 0; HasMerc = false; }
public void Init() { RogueEncampmentWp = null; RedPortal = null; InGame = false; FullyEnteredGame = false; LastTeleport = 0; Experience = 0; Me = new Player(); Logging.Logger.Write("Reset self"); SkillLevels.Clear(); ItemSkillLevels.Clear(); Logging.Logger.Write("Cleared Skills"); Players.Clear(); Logging.Logger.Write("Cleared Players"); Npcs.Clear(); Logging.Logger.Write("Cleared Npcs"); Items.Clear(); WorldObjects.Clear(); Inventory = new Container("Inventory", GameData.InventoryWidth, GameData.InventoryHeight); Stash = new Container("Stash", GameData.StashWidth, GameData.StashHeight); Cube = new Container("Cube", GameData.CubeWidth, GameData.CubeHeight); Belt = new Container("Belt", 4, 4); MalahId = 0; CurrentLife = 0; FirstNpcInfoPacket = true; AttacksSinceLastTeleport = 0; WeaponSet = 0; HasMerc = false; }
public void Clear() { Data = null; Players.Clear(); Monsters.Clear(); Npcs.Clear(); Others.Clear(); }
protected void SoftReset() { WarpToNextField = false; bStarted = false; bLost = false; StageExp = 0; CumulativeExp = 0; MobKills.Clear(); Mobs.aMobGen.Clear(); // clear default spawns so we can add our own Mobs.Clear(); Npcs.Clear(); }
public void UpdateLocationNpcs() { ObservableCollection <Npc> updateLocationNpcs = new ObservableCollection <Npc>(); foreach (Npc Npc in _npcs) { updateLocationNpcs.Add(Npc); } Npcs.Clear(); foreach (Npc npc in updateLocationNpcs) { Npcs.Add(npc); } }
private void HandleMapComplementaryInformationsDataMessage(IAccount account, MapComplementaryInformationsDataMessage message) { lock (CheckLock) { SubAreaId = message.SubAreaId; Data = MapsManager.FromId(message.MapId); var subArea = ObjectDataManager.Instance.Get <SubArea>(SubAreaId); var mapName = FastD2IReader.Instance.GetText(ObjectDataManager.Instance.Get <Area>(subArea.AreaId).NameId); var subAreaName = FastD2IReader.Instance.GetText(subArea.NameId); Position = $"[{X}, {Y}]"; Zone = $"{mapName} ({subAreaName})"; Entities.Clear(); Monsters.Clear(); Npcs.Clear(); Players.Clear(); Resources.Clear(); AddActors(message.Actors); StatedElements.Clear(); //Populate the StateElements with new ones received. //StatesElements are the elements which our current bot in theory can harvest. foreach (var statedElement in message.StatedElements) { if (!StatedElements.ContainsKey(statedElement.ElementId)) { StatedElements.Add(statedElement.ElementId, new StatedElement(statedElement.ElementCellId, (uint)statedElement.ElementId, statedElement.ElementState)); } } InteractiveElements.Clear(); Doors.Clear(); //populate the interactiveElements which are essencially items that we can interact with. Their location is hardcoded into the map.layer foreach (var interactiveElement in message.InteractiveElements) { if (!InteractiveElements.ContainsKey(interactiveElement.ElementId)) { InteractiveElements.Add(interactiveElement.ElementId, new InteractiveElement((uint)interactiveElement.ElementId, interactiveElement.ElementTypeId, interactiveElement.EnabledSkills, interactiveElement.DisabledSkills)); } } } UpdateMapControl(); OnMapChanged(); }
void NewGame() { var assets = Resolve <IAssetManager>(); PartyMembers.Clear(); foreach (PartyCharacterId charId in Enum.GetValues(typeof(PartyCharacterId))) { PartyMembers.Add(charId, assets.LoadCharacter(AssetType.PartyMember, charId)); } Npcs.Clear(); foreach (NpcCharacterId charId in Enum.GetValues(typeof(NpcCharacterId))) { Npcs.Add(charId, assets.LoadCharacter(AssetType.Npc, charId)); } Chests.Clear(); foreach (ChestId id in Enum.GetValues(typeof(ChestId))) { Chests.Add(id, assets.LoadChest(id)); } Merchants.Clear(); foreach (MerchantId id in Enum.GetValues(typeof(MerchantId))) { Merchants.Add(id, assets.LoadMerchant(id)); } _party.Clear(); Raise(new AddPartyMemberEvent(PartyCharacterId.Tom)); Raise(new AddPartyMemberEvent(PartyCharacterId.Rainer)); Raise(new AddPartyMemberEvent(PartyCharacterId.Drirr)); Raise(new AddPartyMemberEvent(PartyCharacterId.Sira)); Raise(new AddPartyMemberEvent(PartyCharacterId.Mellthas)); Raise(new AddPartyMemberEvent(PartyCharacterId.Khunag)); SetupTestState(); Raise(new ReloadAssetsEvent()); // No need to keep character info cached once we've loaded it. New game is also a good point to clear out state. Raise(new PartyChangedEvent()); Raise(new LoadMapEvent(MapDataId.Toronto2DGesamtkarteSpielbeginn)); Raise(new StartClockEvent()); Loaded = true; }
public void LoadAlgorithmSettings() { FloorSettings.Clear(); TileLayers.Clear(); TileData.Clear(); Items.Clear(); Npcs.Clear(); Rooms.Clear(); if (Algorithm > -1) { FloorAlgorithm settingsGuide = GameData.FloorAlgorithmDex[Algorithm]; for (int i = 0; i < settingsGuide.FloorSettings.Count; i++) { FloorSettings.Add(settingsGuide.FloorSettings[i].Item1, 0); } for (int i = 0; i < settingsGuide.LayerSettings.Count; i++) { TileLayers.Add(settingsGuide.LayerSettings[i], new List <Maps.TileAnim>()); } for (int i = 0; i < settingsGuide.TileSettings.Count; i++) { TileData.Add(settingsGuide.TileSettings[i], new List <Maps.TileData>()); } for (int i = 0; i < settingsGuide.ItemGroups.Count; i++) { Items.Add(settingsGuide.ItemGroups[i], new List <Tuple <ItemPreset, int> >()); } for (int i = 0; i < settingsGuide.NpcGroups.Count; i++) { Npcs.Add(settingsGuide.NpcGroups[i], new List <Tuple <NpcPreset, int> >()); } for (int i = 0; i < settingsGuide.RoomGroups.Count; i++) { Rooms.Add(settingsGuide.RoomGroups[i], new List <Tuple <int, int> >()); } } }
private void HandleMapComplementaryInformationsDataMessage(IAccount account, MapComplementaryInformationsDataMessage message) { lock (CheckLock) { SubAreaId = message.SubAreaId; Data = MapsManager.FromId(message.MapId); var subArea = ObjectDataManager.Instance.Get <SubArea>(SubAreaId); var mapName = FastD2IReader.Instance.GetText(ObjectDataManager.Instance.Get <Area>(subArea.AreaId).NameId); var subAreaName = FastD2IReader.Instance.GetText(subArea.NameId); Position = $"[{X}, {Y}]"; Zone = $"{mapName} ({subAreaName})"; Entities.Clear(); Monsters.Clear(); Npcs.Clear(); Players.Clear(); AddActors(message.Actors); StatedElements.Clear(); foreach (var statedElementDofus in message.StatedElements) { if (!StatedElements.ContainsKey(statedElementDofus.ElementId) && statedElementDofus.OnCurrentMap) { StatedElements.Add(statedElementDofus.ElementId, new StatedElement(statedElementDofus.ElementCellId, (uint)statedElementDofus.ElementId, statedElementDofus.ElementState)); } } InteractiveElements.Clear(); Doors.Clear(); foreach (var element in message.InteractiveElements) { if (!element.OnCurrentMap) { continue; } InteractiveElements.Add(element.ElementId, new InteractiveElement((uint)element.ElementId, element.ElementTypeId, element.EnabledSkills.ToList(), element.DisabledSkills.ToList())); var interactiveElement = element; var listDoorSkillId = new List <int>(new[] { 184, 183, 187, 198, 114 }); var listDoorTypeId = new List <int>(new[] { -1, 128, 168, 16 }); if (!listDoorTypeId.Contains(interactiveElement.ElementTypeId) || interactiveElement.EnabledSkills.Count <= 0 || !listDoorSkillId.Contains((int)interactiveElement.EnabledSkills[0].SkillId)) { continue; } foreach (var layer in ((API.Gamedata.D2p.Map)Data).Layers) { foreach (var cell in layer.Cells) { foreach (var layerElement in cell.Elements) { if (layerElement is GraphicalElement graphicalElement) { if (graphicalElement.Identifier == interactiveElement.ElementId && !Doors.ContainsKey(cell.CellId)) { Doors.Add(cell.CellId, new InteractiveElement((uint)element.ElementId, element.ElementTypeId, element.EnabledSkills.ToList(), element.DisabledSkills.ToList())); } } } } } } } UpdateMapControl(); OnMapChanged(); }
public void EndGame(bool gmtrig) { this.Active = false; InvalidateProperties(); if (gmtrig == false) { if (m_Team1 > 0 && m_Team2 == 0 && m_Team3 == 0 && m_Team4 == 0) { World.Broadcast(0x22, true, m_Team1Name + " has won in Paintball!"); foreach (Mobile mob in Announcers) { mob.PublicOverheadMessage(MessageType.Regular, 0x22, false, m_Team1Name + " has won"); } } else if (m_Team2 > 0 && m_Team1 == 0 && m_Team3 == 0 && m_Team4 == 0) { World.Broadcast(0x22, true, "Team 2 has won in Paintball!"); foreach (Mobile mob in Announcers) { mob.PublicOverheadMessage(MessageType.Regular, 0x22, false, m_Team2Name + " has won"); } } else if (m_Team3 > 0 && m_Team1 == 0 && m_Team2 == 0 && m_Team4 == 0) { World.Broadcast(0x22, true, "Team 3 has won in Paintball!"); foreach (Mobile mob in Announcers) { mob.PublicOverheadMessage(MessageType.Regular, 0x22, false, m_Team3Name + " has won"); } } else if (m_Team4 > 0 && m_Team1 == 0 && m_Team2 == 0 && m_Team3 == 0) { World.Broadcast(0x22, true, "Team 4 has won in Paintball!"); foreach (Mobile mob in Announcers) { mob.PublicOverheadMessage(MessageType.Regular, 0x22, false, m_Team4Name + " has won"); } } else { World.Broadcast(0x22, true, "Error:"); World.Broadcast(0x22, true, m_Team1.ToString() + " = team 1"); World.Broadcast(0x22, true, m_Team2.ToString() + " = team 2"); World.Broadcast(0x22, true, m_Team3.ToString() + " = team 3"); World.Broadcast(0x22, true, m_Team4.ToString() + " = team 4"); } } else if (gmtrig == true) { World.Broadcast(0x22, true, "The Paintball game was ended by the GM. No winner was declared."); } ArrayList MobDel = new ArrayList(); if (Players != null) { foreach (Mobile pm in Players) { pm.SendMessage("The game has ended."); pm.Hidden = true; pm.Warmode = false; pm.Frozen = false; if (gmtrig == false) { GivePrizes(pm); } Item PBSI; Item LPackI; Item IPackI; Container bank = pm.FindBankNoCreate(); PBSI = bank.FindItemByType(typeof(PBPlayerStorage)); LPackI = bank.FindItemByType(typeof(LayerPack)); IPackI = bank.FindItemByType(typeof(ItemsPack)); pm.AddToBackpack(PBSI); pm.AddToBackpack(LPackI); pm.AddToBackpack(IPackI); List <Item> Layer = LPackI.Items; if (Layer != null && LPackI != null) { if (Layer.Count > 0) { for (int i = Layer.Count - 1; i >= 0; --i) { if (i >= Layer.Count) { continue; } pm.AddItem(Layer[i]); } } LPackI.Delete(); } List <Item> Pack = IPackI.Items; if (Pack != null && IPackI != null) { if (Pack.Count > 0) { for (int i = Pack.Count - 1; i >= 0; --i) { if (i >= Pack.Count) { continue; } pm.AddToBackpack(Pack[i]); } } IPackI.Delete(); } if (PBSI != null) { PBPlayerStorage PBStorage = PBSI as PBPlayerStorage; if (PBStorage != null) { PBStorage.Use(pm); } } ArrayList toDelete = new ArrayList(); foreach (Item litem in pm.Items) { if (litem is PBArmor || litem is PBWeapon || litem is PaintBall || litem is Cloak || litem is Squash || litem is PBGrenade) { toDelete.Add(litem); } } if (pm.Backpack != null) { foreach (Item bitem in pm.Backpack.Items) { if (bitem is PBArmor || bitem is PBWeapon || bitem is PaintBall || bitem is Cloak || bitem is Squash || bitem is PBGrenade) { toDelete.Add(bitem); } } } foreach (Item ditem in toDelete) { ditem.Delete(); } } } if (DeadPlayers != null) { foreach (Mobile dm in DeadPlayers) { dm.SendMessage("The game has ended."); dm.Hidden = true; dm.Warmode = false; dm.Frozen = false; if (gmtrig == false) { GivePrizes(dm); } Item PBSI; PBPlayerStorage PBS; Item LPackI; Item IPackI; Container bank = dm.FindBankNoCreate(); PBSI = bank.FindItemByType(typeof(PBPlayerStorage)); LPackI = bank.FindItemByType(typeof(LayerPack)); IPackI = bank.FindItemByType(typeof(ItemsPack)); dm.AddToBackpack(PBSI); dm.AddToBackpack(LPackI); dm.AddToBackpack(IPackI); PBS = (PBPlayerStorage)PBSI; List <Item> Layer = LPackI.Items; if (Layer != null && LPackI != null) { if (Layer.Count > 0) { for (int i = Layer.Count - 1; i >= 0; --i) { if (i >= Layer.Count) { continue; } dm.AddItem(Layer[i]); } } LPackI.Delete(); } List <Item> Pack = IPackI.Items; if (Pack != null && IPackI != null) { if (Pack.Count > 0) { for (int i = Pack.Count - 1; i >= 0; --i) { if (i >= Pack.Count) { continue; } dm.AddToBackpack(Pack[i]); } } IPackI.Delete(); } ArrayList toDelete = new ArrayList(); foreach (Item item in dm.Items) { if (item is PBArmor || item is PBWeapon || item is PaintBall || item is Cloak || item is Squash || item is PBGrenade) { toDelete.Add(item); } } if (dm.Backpack != null) { foreach (Item bpitem in dm.Backpack.Items) { if (bpitem is PBArmor || bpitem is PBWeapon || bpitem is PaintBall || bpitem is Cloak || bpitem is Squash || bpitem is PBGrenade) { toDelete.Add(bpitem); } if (PBS != null) { PBS.Use(dm); } } } if (toDelete != null) { foreach (Item item in toDelete) { item.Delete(); } } } } if (NpcPlayers != null) { foreach (Mobile npc in NpcPlayers) { MobDel.Add(npc); } NpcPlayers.Clear(); NpcPlayers = new ArrayList(); } if (MobDel != null) { foreach (Mobile Mob in MobDel) { if (Mob != null) { Mob.Delete(); } } } if (Players != null) { Players.Clear(); Players = new ArrayList(); } if (Npcs != null) { Npcs.Clear(); } if (m_WinnersPrizes != null) { m_WinnersPrizes.Clear(); } if (m_Team1List != null) { m_Team1List.Clear(); } if (m_Team2List != null) { m_Team2List.Clear(); } if (m_Team3List != null) { m_Team3List.Clear(); } if (m_Team4List != null) { m_Team4List.Clear(); } m_Team1 = 0; m_Team2 = 0; m_Team3 = 0; m_Team4 = 0; UpdateTeams(); m_CurrentTeam = 0; Players = new ArrayList(); m_Npcs = new ArrayList(); m_Team1List = new ArrayList(); m_Team2List = new ArrayList(); m_Team3List = new ArrayList(); m_Team4List = new ArrayList(); NpcPlayers = new ArrayList(); m_WinnersPrizes = new ArrayList(); DeadPlayers = new ArrayList(); Reset(); /* if( m_Timer != null ) * m_Timer.Stop(); */ }
private void AddServerToRecent(string server, string password) { if (string.IsNullOrWhiteSpace(server)) { return; } var split = server.Split(':'); if (split.Length < 2 || string.IsNullOrWhiteSpace(split[0]) || string.IsNullOrWhiteSpace(split[1]) || !int.TryParse(split[1], out int tmpPort)) { return; } if (!PlayerSettings.RecentServers.Contains(server)) { PlayerSettings.RecentServers.Add(server); if (PlayerSettings.RecentServers.Count > 20) { PlayerSettings.RecentServers.RemoveAt(0); } Util.Util.SaveSettings(GTANInstallDir + "\\settings.xml"); var item = new UIMenuItem(server) { Description = server }; item.SetRightLabel(server); item.Activated += (sender, selectedItem) => { if (IsOnServer()) { Client.Disconnect("Switching servers"); NetEntityHandler.ClearAll(); if (Npcs != null) { Npcs.ToList().ForEach(pair => pair.Value.Clear()); Npcs.Clear(); } while (IsOnServer()) { Script.Yield(); } } var splt = server.Split(':'); if (splt.Length < 2) { return; } if (!int.TryParse(splt[1], out int port)) { return; } ConnectToServer(splt[0], port, false, password); MainMenu.TemporarilyHidden = true; _connectTab.RefreshIndex(); }; _recentBrowser.Items.Add(item); } }
private void BuildMainMenu() { MainMenu = new TabView("Cherry Multiplayer") { CanLeave = false, MoneySubtitle = "Cherry MP " + CurrentVersion }; _mainMapItem = new TabMapItem(); #region Welcome Screen { _welcomePage = new TabWelcomeMessageItem("Welcome to Cherry Multiplayer", "Development branch."); MainMenu.Tabs.Add(_welcomePage); } #endregion #region ServerBrowser { var dConnect = new TabButtonArrayItem("Quick Connect"); { var ipButton = new TabButton { Text = "IP Address", Size = new Size(500, 40) }; ipButton.Activated += (sender, args) => { MainMenu.TemporarilyHidden = true; var newIp = InputboxThread.GetUserInput(_clientIp ?? "", 30, TickSpinner); _clientIp = newIp; ipButton.Text = string.IsNullOrWhiteSpace(newIp) ? "IP Address" : newIp; MainMenu.TemporarilyHidden = false; }; dConnect.Buttons.Add(ipButton); } { var ipButton = new TabButton { Text = "Port", Size = new Size(500, 40) }; ipButton.Activated += (sender, args) => { MainMenu.TemporarilyHidden = true; var port = InputboxThread.GetUserInput(Port.ToString(), 30, TickSpinner); if (string.IsNullOrWhiteSpace(port)) { port = "4499"; } if (!int.TryParse(port, out int newPort)) { Util.Util.SafeNotify("Wrong port format!"); MainMenu.TemporarilyHidden = false; return; } Port = newPort; ipButton.Text = Port.ToString(); MainMenu.TemporarilyHidden = false; }; dConnect.Buttons.Add(ipButton); } { var ipButton = new TabButton { Text = "Password", Size = new Size(500, 40) }; ipButton.Activated += (sender, args) => { MainMenu.TemporarilyHidden = true; var newIp = InputboxThread.GetUserInput("", 30, TickSpinner); MainMenu.TemporarilyHidden = false; _QCpassword = newIp; ipButton.Text = string.IsNullOrWhiteSpace(newIp) ? "Password" : "*******"; }; dConnect.Buttons.Add(ipButton); } { var ipButton = new TabButton { Text = "Connect", Size = new Size(500, 40) }; ipButton.Activated += (sender, args) => { var isPassworded = false; if (!string.IsNullOrWhiteSpace(_QCpassword)) { isPassworded = true; } AddServerToRecent(_clientIp + ":" + Port, _QCpassword); ConnectToServer(_clientIp, Port, isPassworded, _QCpassword); MainMenu.TemporarilyHidden = true; }; dConnect.Buttons.Add(ipButton); } _Verified = new TabInteractiveListItem("Verified", new List <UIMenuItem>()); _serverBrowser = new TabInteractiveListItem("Internet", new List <UIMenuItem>()); _favBrowser = new TabInteractiveListItem("Favorites", new List <UIMenuItem>()); _lanBrowser = new TabInteractiveListItem("Local Network", new List <UIMenuItem>()); _recentBrowser = new TabInteractiveListItem("Recent", new List <UIMenuItem>()); _connectTab = new TabSubmenuItem("connect", new List <TabItem>() { dConnect, _favBrowser, _Verified, _serverBrowser, _lanBrowser, _recentBrowser }); MainMenu.AddTab(_connectTab); _connectTab.DrawInstructionalButtons += (sender, args) => { MainMenu.DrawInstructionalButton(4, Control.Jump, "Refresh"); if (Game.IsControlJustPressed(0, Control.Jump)) { RebuildServerBrowser(); } #region Verified, Iternet, LAN and Recent if (_connectTab.Index == 2 && _connectTab.Items[2].Focused || _connectTab.Index == 3 && _connectTab.Items[3].Focused || _connectTab.Index == 4 && _connectTab.Items[4].Focused || _connectTab.Index == 5 && _connectTab.Items[5].Focused) { MainMenu.DrawInstructionalButton(5, Control.Enter, "Add to Favorites"); if (Game.IsControlJustPressed(0, Control.Enter)) { var selectedServer = _serverBrowser.Items[_serverBrowser.Index]; if (_connectTab.Index == 2 && _connectTab.Items[2].Focused) { selectedServer = _Verified.Items[_Verified.Index]; } else if (_connectTab.Index == 4 && _connectTab.Items[4].Focused) { selectedServer = _lanBrowser.Items[_lanBrowser.Index]; } else if (_connectTab.Index == 5 && _connectTab.Items[5].Focused) { selectedServer = _recentBrowser.Items[_recentBrowser.Index]; } selectedServer.SetRightBadge(UIMenuItem.BadgeStyle.None); if (PlayerSettings.FavoriteServers.Contains(selectedServer.Description)) { var favItem = _favBrowser.Items.FirstOrDefault(i => i.Description == selectedServer.Description); if (favItem != null) { selectedServer.SetRightBadge(UIMenuItem.BadgeStyle.None); RemoveFromFavorites(selectedServer.Description); _favBrowser.Items.Remove(favItem); _favBrowser.RefreshIndex(); } } else { AddToFavorites(selectedServer.Description); selectedServer.SetRightBadge(UIMenuItem.BadgeStyle.Star); var item = new UIMenuItem(selectedServer.Text) { Description = selectedServer.Description }; item.SetRightLabel(selectedServer.RightLabel); item.SetLeftBadge(selectedServer.LeftBadge); item.Activated += (faf, selectedItem) => { if (IsOnServer()) { Client.Disconnect("Switching servers"); NetEntityHandler.ClearAll(); if (Npcs != null) { Npcs.ToList().ForEach(pair => pair.Value.Clear()); Npcs.Clear(); } while (IsOnServer()) { Script.Yield(); } } bool pass = false; if (selectedServer.LeftBadge == UIMenuItem.BadgeStyle.Lock) { pass = true; } var splt = selectedServer.Description.Split(':'); if (splt.Length < 2) { return; } if (!int.TryParse(splt[1], out int port)) { return; } ConnectToServer(splt[0], port, pass); MainMenu.TemporarilyHidden = true; _connectTab.RefreshIndex(); }; _favBrowser.Items.Add(item); } } } #endregion #region Favorites if (_connectTab.Index == 1 && _connectTab.Items[1].Focused) { MainMenu.DrawInstructionalButton(6, Control.NextCamera, "Add Server"); #region Add server if (Game.IsControlJustPressed(0, Control.NextCamera)) { MainMenu.TemporarilyHidden = true; var serverIp = InputboxThread.GetUserInput("Server IP(:Port)", 40, TickSpinner); if (serverIp.Contains("Server IP(:Port)") || string.IsNullOrWhiteSpace(serverIp)) { Util.Util.SafeNotify("Incorrect input!"); MainMenu.TemporarilyHidden = false; return; } else if (!serverIp.Contains(":")) { serverIp += ":4499"; } MainMenu.TemporarilyHidden = false; if (!PlayerSettings.FavoriteServers.Contains(serverIp)) { AddToFavorites(serverIp); var item = new UIMenuItem(serverIp) { Description = serverIp }; _favBrowser.Items.Add(item); } else { Util.Util.SafeNotify("Server already on the list"); return; } } #endregion MainMenu.DrawInstructionalButton(5, Control.Enter, "Remove"); #region Remove if (Game.IsControlJustPressed(0, Control.Enter)) { var selectedServer = _favBrowser.Items[_favBrowser.Index]; var favItem = _favBrowser.Items.FirstOrDefault(i => i.Description == selectedServer.Description); if (_Verified.Items.FirstOrDefault(i => i.Description == selectedServer.Description) != null) { _Verified.Items.FirstOrDefault(i => i.Description == selectedServer.Description).SetRightBadge(UIMenuItem.BadgeStyle.None); } if (_serverBrowser.Items.FirstOrDefault(i => i.Description == selectedServer.Description) != null) { _serverBrowser.Items.FirstOrDefault(i => i.Description == selectedServer.Description).SetRightBadge(UIMenuItem.BadgeStyle.None); } if (_lanBrowser.Items.FirstOrDefault(i => i.Description == selectedServer.Description) != null) { _lanBrowser.Items.FirstOrDefault(i => i.Description == selectedServer.Description).SetRightBadge(UIMenuItem.BadgeStyle.None); } if (_recentBrowser.Items.FirstOrDefault(i => i.Description == selectedServer.Description) != null) { _recentBrowser.Items.FirstOrDefault(i => i.Description == selectedServer.Description).SetRightBadge(UIMenuItem.BadgeStyle.None); } if (favItem != null) { Util.Util.SafeNotify("Server removed from Favorites!"); RemoveFromFavorites(selectedServer.Description); _favBrowser.Items.Remove(favItem); _favBrowser.RefreshIndex(); } } #endregion } #endregion }; CherryDiscord.CherryDiscord.InMenuDiscordInitialize(CurrentVersion.ToString()); CherryDiscord.CherryDiscord.InMenuDiscordUpdatePresence(); } #endregion #region Settings { #region General Menu var GeneralMenu = new TabInteractiveListItem("General", new List <UIMenuItem>()); { var nameItem = new UIMenuItem("Display Name"); nameItem.SetRightLabel(PlayerSettings.DisplayName); nameItem.Activated += (sender, item) => { if (IsOnServer()) { GTA.UI.Screen.ShowNotification("You cannot change your Display Name while connected to a server."); return; } MainMenu.TemporarilyHidden = true; var newName = InputboxThread.GetUserInput(PlayerSettings.DisplayName ?? "Enter a new Display Name", 32, TickSpinner); if (!string.IsNullOrWhiteSpace(newName)) { if (newName.Length > 32) { newName = newName.Substring(0, 32); } newName = newName.Replace(' ', '_'); PlayerSettings.DisplayName = newName; SaveSettings(); nameItem.SetRightLabel(newName); } MainMenu.TemporarilyHidden = false; }; GeneralMenu.Items.Add(nameItem); } { var debugItem = new UIMenuCheckboxItem("Show Game FPS Counter", PlayerSettings.ShowFPS); debugItem.CheckboxEvent += (sender, @checked) => { PlayerSettings.ShowFPS = @checked; DebugInfo.FPS = @checked; SaveSettings(); }; GeneralMenu.Items.Add(debugItem); } { var debugItem = new UIMenuCheckboxItem("Disable Rockstar Editor", PlayerSettings.DisableRockstarEditor); debugItem.CheckboxEvent += (sender, @checked) => { PlayerSettings.DisableRockstarEditor = @checked; SaveSettings(); }; GeneralMenu.Items.Add(debugItem); } { var debugItem = new UIMenuCheckboxItem("Allow Webcam/Microphone Streaming (Requires restart)", PlayerSettings.MediaStream); debugItem.CheckboxEvent += (sender, @checked) => { PlayerSettings.MediaStream = @checked; SaveSettings(); }; GeneralMenu.Items.Add(debugItem); } { var nameItem = new UIMenuItem("Update Channel"); nameItem.SetRightLabel(PlayerSettings.UpdateChannel); nameItem.Activated += (sender, item) => { MainMenu.TemporarilyHidden = true; var newName = InputboxThread.GetUserInput(PlayerSettings.UpdateChannel ?? "stable", 40, TickSpinner); if (!string.IsNullOrWhiteSpace(newName)) { PlayerSettings.UpdateChannel = newName; SaveSettings(); nameItem.SetRightLabel(newName); } MainMenu.TemporarilyHidden = false; }; GeneralMenu.Items.Add(nameItem); } #endregion #region Chat var ChatboxMenu = new TabInteractiveListItem("Chat", new List <UIMenuItem>()); { var chatItem = new UIMenuCheckboxItem("Enable Timestamp", PlayerSettings.Timestamp); chatItem.CheckboxEvent += (sender, @checked) => { PlayerSettings.Timestamp = @checked; SaveSettings(); }; ChatboxMenu.Items.Add(chatItem); } { var chatItem = new UIMenuCheckboxItem("Use Military Time", PlayerSettings.Militarytime); chatItem.CheckboxEvent += (sender, @checked) => { PlayerSettings.Militarytime = @checked; SaveSettings(); }; ChatboxMenu.Items.Add(chatItem); } { var chatItem = new UIMenuCheckboxItem("Scale Chatbox With Safezone", PlayerSettings.ScaleChatWithSafezone); chatItem.CheckboxEvent += (sender, @checked) => { PlayerSettings.ScaleChatWithSafezone = @checked; SaveSettings(); }; ChatboxMenu.Items.Add(chatItem); } { var chatItem = new UIMenuItem("Horizontal Chatbox Offset"); chatItem.SetRightLabel(PlayerSettings.ChatboxXOffset.ToString()); chatItem.Activated += (sender, item) => { MainMenu.TemporarilyHidden = true; var strInput = InputboxThread.GetUserInput(PlayerSettings.ChatboxXOffset.ToString(), 10, TickSpinner); if (!int.TryParse(strInput, out int newSetting)) { Util.Util.SafeNotify("Input was not in the correct format."); MainMenu.TemporarilyHidden = false; return; } MainMenu.TemporarilyHidden = false; PlayerSettings.ChatboxXOffset = newSetting; chatItem.SetRightLabel(PlayerSettings.ChatboxXOffset.ToString()); SaveSettings(); }; ChatboxMenu.Items.Add(chatItem); } { var chatItem = new UIMenuItem("Vertical Chatbox Offset"); chatItem.SetRightLabel(PlayerSettings.ChatboxYOffset.ToString()); chatItem.Activated += (sender, item) => { MainMenu.TemporarilyHidden = true; var strInput = InputboxThread.GetUserInput(PlayerSettings.ChatboxYOffset.ToString(), 10, TickSpinner); if (!int.TryParse(strInput, out int newSetting)) { Util.Util.SafeNotify("Input was not in the correct format."); MainMenu.TemporarilyHidden = false; return; } MainMenu.TemporarilyHidden = false; PlayerSettings.ChatboxYOffset = newSetting; chatItem.SetRightLabel(PlayerSettings.ChatboxYOffset.ToString()); SaveSettings(); }; ChatboxMenu.Items.Add(chatItem); } { var chatItem = new UIMenuCheckboxItem("Use Classic Chatbox", PlayerSettings.UseClassicChat); chatItem.CheckboxEvent += (sender, @checked) => { PlayerSettings.UseClassicChat = @checked; SaveSettings(); }; ChatboxMenu.Items.Add(chatItem); } #endregion #region Experimental var ExpMenu = new TabInteractiveListItem("Experimental", new List <UIMenuItem>()); { var expItem = new UIMenuCheckboxItem("Disable Chromium Embedded Framework (Requires restart)", PlayerSettings.DisableCEF); expItem.CheckboxEvent += (sender, @checked) => { PlayerSettings.DisableCEF = @checked; SaveSettings(); }; ExpMenu.Items.Add(expItem); } #endregion #region Debug Menu var DebugMenu = new TabInteractiveListItem("Debug", new List <UIMenuItem>()); { { var expItem = new UIMenuCheckboxItem("Enable CEF Development Tools (http://localhost:9222) [Restart required]", PlayerSettings.CEFDevtool); expItem.CheckboxEvent += (sender, @checked) => { PlayerSettings.CEFDevtool = @checked; SaveSettings(); }; DebugMenu.Items.Add(expItem); } { var expItem = new UIMenuCheckboxItem("Enable Debug mode (Requires an extra tool)", PlayerSettings.DebugMode); expItem.CheckboxEvent += (sender, @checked) => { PlayerSettings.DebugMode = @checked; SaveSettings(); }; DebugMenu.Items.Add(expItem); } { var expItem = new UIMenuCheckboxItem("Save Debug to File (Huge performance impact)", SaveDebugToFile); expItem.CheckboxEvent += (sender, @checked) => { SaveDebugToFile = @checked; SaveSettings(); }; DebugMenu.Items.Add(expItem); } { var debugItem = new UIMenuCheckboxItem("Remove Game Entities", RemoveGameEntities); debugItem.CheckboxEvent += (sender, @checked) => { RemoveGameEntities = @checked; }; DebugMenu.Items.Add(debugItem); } { var debugItem = new UIMenuCheckboxItem("Show Streamer Debug Data", DebugInfo.StreamerDebug); debugItem.CheckboxEvent += (sender, @checked) => { DebugInfo.StreamerDebug = @checked; }; DebugMenu.Items.Add(debugItem); } { var debugItem = new UIMenuCheckboxItem("Disable Nametag Draw", ToggleNametagDraw); debugItem.CheckboxEvent += (sender, @checked) => { ToggleNametagDraw = @checked; }; DebugMenu.Items.Add(debugItem); } { var debugItem = new UIMenuCheckboxItem("Disable Position Update", TogglePosUpdate); debugItem.CheckboxEvent += (sender, @checked) => { TogglePosUpdate = @checked; }; DebugMenu.Items.Add(debugItem); } } #endregion var welcomeItem = new TabSubmenuItem("settings", new List <TabItem>() { GeneralMenu, ChatboxMenu, //DisplayMenu, //GraphicsMenu, ExpMenu, DebugMenu }); MainMenu.AddTab(welcomeItem); } #endregion #region Quit { var welcomeItem = new TabTextItem("Quit", "Quit Cherry Multiplayer", "Are you sure you want to quit Cherry Multiplayer and return to desktop?") { CanBeFocused = false }; welcomeItem.Activated += (sender, args) => { if (Client != null && IsOnServer()) { Client.Disconnect("Quit"); } CEFManager.Dispose(); CEFManager.DisposeCef(); Script.Wait(500); //Environment.Exit(0); Process.GetProcessesByName("GTA5")[0].Kill(); Process.GetCurrentProcess().Kill(); }; MainMenu.Tabs.Add(welcomeItem); } #endregion #region Current Server Tab #region Players _serverPlayers = new TabItemSimpleList("Players", new Dictionary <string, string>()); #endregion var favTab = new TabTextItem("Favorite", "Add to Favorites", "Add the current server to favorites.") { CanBeFocused = false }; favTab.Activated += (sender, args) => { var serb = _currentServerIp + ":" + _currentServerPort; AddToFavorites(_currentServerIp + ":" + _currentServerPort); var item = new UIMenuItem(serb) { Description = serb }; Util.Util.SafeNotify("Server added to favorites!"); item.Activated += (faf, selectedItem) => { if (IsOnServer()) { Client.Disconnect("Switching servers"); NetEntityHandler.ClearAll(); if (Npcs != null) { Npcs.ToList().ForEach(pair => pair.Value.Clear()); Npcs.Clear(); } while (IsOnServer()) { Script.Yield(); } } var splt = serb.Split(':'); if (splt.Length < 2) { return; } if (!int.TryParse(splt[1], out int port)) { return; } ConnectToServer(splt[0], port); MainMenu.TemporarilyHidden = true; _connectTab.RefreshIndex(); AddServerToRecent(serb, ""); }; _favBrowser.Items.Add(item); }; var dcItem = new TabTextItem("Disconnect", "Disconnect", "Disconnect from the current server.") { CanBeFocused = false }; dcItem.Activated += (sender, args) => { if (Client != null) { Client.Disconnect("Quit"); } }; _statsItem = new TabTextItem("Statistics", "Network Statistics", "") { CanBeFocused = false }; _serverItem = new TabSubmenuItem("server", new List <TabItem>() { _serverPlayers, favTab, _statsItem, dcItem }) { Parent = MainMenu }; #endregion MainMenu.RefreshIndex(); }