/* CLASS STARTS HERE - COPY BELOW INTO THE SCRIPT WINDOW */

        #region Data Persistence
        public static void SaveData()
        {
            // clear the file before so that data doesn't get inserted at the end of file
            Mutex.WaitOne();   // Wait until it is safe to enter.

            GlobalGame.GetSharedStorage(GetCurrentStorageFileName()).Clear();
            string data        = OtherData;
            var    menusToSave = PlayerMenuList.Where(m => m.Player != null).ToList();

            for (int i = 0; i < menusToSave.Count; i++)
            {
                var player     = menusToSave[i].Player;
                var playerData = menusToSave[i].Save(saveOnlyIfActive: false);
                data += playerData;

                if (ShowDebugMessages)
                {
                    DebugLogger.DebugOnlyDialogLog("SAVED DATA FOR PLAYER " + player.Name + ". PLAYER DATA SAVED: [ " + playerData + " ]");
                }
            }
            GlobalGame.GetSharedStorage(GetCurrentStorageFileName()).SetItem("SaveData", data);
            IsDataSaved = true;
            var playersSavedCount = data.Split(';').Count();

            DebugLogger.DebugOnlyDialogLog("GAME SAVED " + playersSavedCount + " PLAYERS IN DATABASE");
            Mutex.ReleaseMutex();

            // GlobalGame.Data = "BEGIN" + "DATA" + data + "ENDDATA";
        }
Beispiel #2
0
 private void PreparePlayerMenus()
 {
     for (int i = 0; i <= 7; i++)
     {
         PlayerMenuList.Add(new TPlayerMenu()
         {
             Menu = (IObjectText)Game.GetSingleObjectByCustomId("PlayerMenu" + (i).ToString()),
         });
     }
 }
Beispiel #3
0
            public int Update()
            {
                int blue = 0, red = 0;

                if (GlobalGame.GetCameraArea().Left == CameraPosition.X && GlobalGame.GetCameraArea().Top == CameraPosition.Y && !_PlayersHaveSpawned)
                {
                    for (int i = 0; i < PlayerList.Count; i++)
                    {
                        var player = PlayerList[i];
                        var menu   = PlayerMenuList.Where(m => m.Player != null && m.Player.Name != null && m.Player.Name.Equals(player.Name)).FirstOrDefault();
                        if (menu == null)
                        {
                            DebugLogger.DebugOnlyDialogLog("PLAYER " + menu.Player.Name + " CAN'T BE SPAWNED BECAUSE HE HAS NO MENU ASSIGNED");
                            continue;
                        }
                        if (player.Team == PlayerTeam.Team1)
                        {
                            menu.SpawnPlayer(BlueSpawnPosition[blue].GetWorldPosition());
                            DebugLogger.DebugOnlyDialogLog("PLAYER " + menu.Player.Name + " SPAWNED AT BLUE POSITION NUMBER " + blue);
                            blue++;
                        }
                        else
                        {
                            menu.SpawnPlayer(RedSpawnPosition[red].GetWorldPosition());
                            DebugLogger.DebugOnlyDialogLog("PLAYER " + menu.Player.Name + " SPAWNED AT RED POSITION NUMBER " + blue);
                            red++;
                        }
                    }


                    for (int i = 0; i < PlayerList.Count; i++)
                    {
                        PlayerList[i].Start();
                    }

                    _PlayersHaveSpawned = true;
                }

                //if (_PlayersHaveSpawned)
                //{
                //    var activeUsers = Game.GetActiveUsers();
                //    for (int i = 0; i < activeUsers.Length; i++)
                //    {

                //        var u = activeUsers[i];
                //        if (u != null && u.GetPlayer() != null)
                //        {
                //            var body = u.GetPlayer();
                //            if (body.GetWorldPosition().Y > WorldTop)
                //            {
                //                DebugLogger.DebugOnlyDialogLog("PLAYER " + u.Name + " DIDN'T SPAWNED CORRECTLY. TELEPORTING THEM");
                //                var menu = PlayerMenuList.Where(m => m.Player != null && m.Player.Name != null && m.Player.Name.Equals(u.Name)).FirstOrDefault();
                //                var player = PlayerList.Where(p => p.Name != null && p.Name.Equals(u.Name)).FirstOrDefault();
                //                if (player != null)
                //                {
                //                    DebugLogger.DebugOnlyDialogLog("PLAYER " + player.Name + " EXISTS IN PlayerList");
                //                }
                //                else
                //                {
                //                    DebugLogger.DebugOnlyDialogLog("PLAYER " + player.Name + " DOESN'T EXIST IN PlayerList");
                //                }

                //                DebugLogger.DebugOnlyDialogLog("PLAYER " + u.Name + " DIDN'T SPAWNED CORRECTLY. TELEPORTING THEM");

                //                if (menu == null)
                //                {
                //                    DebugLogger.DebugOnlyDialogLog("PLAYER " + player.Name + " DOESN'T HAVE AN ASSIGNED MENU. HIS PROGRESS WILL BE LOST");

                //                    switch (body.GetTeam())
                //                    {
                //                        case PlayerTeam.Team1:
                //                            body.SetWorldPosition(BlueSpawnPosition[0].GetWorldPosition());
                //                            break;
                //                        case PlayerTeam.Team2:
                //                            body.SetWorldPosition(RedSpawnPosition[0].GetWorldPosition());
                //                            break;
                //                        case PlayerTeam.Team3:
                //                            DebugLogger.DebugOnlyDialogLog("BODY WAS FROM GREEN TEAM.");
                //                            break;
                //                    }
                //                }
                //                else
                //                {
                //                    DebugLogger.DebugOnlyDialogLog("PLAYER " + player.Name + " HAS AN ASSIGNED MENU. USING MENU TO SPAWN HIM");


                //                    switch (body.GetTeam())
                //                    {
                //                        case PlayerTeam.Team1:
                //                            DebugLogger.DebugOnlyDialogLog("BODY WAS FROM BLUE TEAM.");
                //                            menu.SpawnPlayer(BlueSpawnPosition[0].GetWorldPosition());
                //                            break;
                //                        case PlayerTeam.Team2:
                //                            DebugLogger.DebugOnlyDialogLog("BODY WAS FROM RED TEAM.");
                //                            menu.SpawnPlayer(RedSpawnPosition[0].GetWorldPosition());
                //                            break;
                //                        case PlayerTeam.Team3:
                //                            DebugLogger.DebugOnlyDialogLog("BODY WAS FROM GREEN TEAM.");
                //                            break;
                //                    }
                //                }


                //            }
                //        }
                //    }
                //}


                if (CapturedBy != 0)
                {
                    return(0);
                }
                bool blueWin = true;
                bool redWin  = true;

                for (int i = 0; i < PointList.Count; i++)
                {
                    PointList[i].Update();
                    if (PointList[i].CaptureProgress != MaxCapturePointProgress)
                    {
                        blueWin = false;
                    }
                    if (PointList[i].CaptureProgress != -MaxCapturePointProgress)
                    {
                        redWin = false;
                    }
                }
                if (blueWin)
                {
                    CapturedBy = 1;
                    return(1);
                }
                else if (redWin)
                {
                    CapturedBy = 2;
                    return(2);
                }
                return(0);
            }
Beispiel #4
0
        private void RefreshPlayerMenus()
        {
            IUser[] users = Game.GetActiveUsers();

            if (users == null || users.Length == 0)
            {
                return;
            }

            foreach (var u in users)
            {
                var menus = PlayerMenuList.Where(m => m.Player != null && m.Player.User != null && m.Player.User.Name == u.Name).ToList();
                if (menus.Count > 1)
                {
                    DebugLogger.DebugOnlyDialogLog("PLAYER " + u.Name + " HAD MORE THAN ONE MENU. DELETING THE OTHER MENUS");
                    menus[1].Player = null;
                    menus[1].Menu.SetText(string.Empty);
                    menus[1].Ready = false;
                }
            }

            if (PlayerList.Count == users.Length)
            {
                return;
            }
            try
            {
                int initialPlayercount = PlayerList.Count;



                if (PlayerList.Count < users.Length)
                {
                    var availableMenus = PlayerMenuList.Where(m => m.Player == null || m.Player.User == null).ToList();
                    for (int i = 0; i < users.Length; i++)
                    {
                        IUser currentUser = null;
                        currentUser = users[i];
                        if (currentUser == null)
                        {
                            continue;
                        }
                        if (currentUser.IsSpectator)
                        {
                            continue;
                        }

                        if (PlayerList.Any(p => p.User.Name.Equals(currentUser.Name)))
                        {
                            continue;
                        }

                        if (currentUser.GetPlayer() == null)
                        {
                            DebugLogger.DebugOnlyDialogLog("SPAWNING BODY FOR PLAYER " + currentUser.Name, CameraPosition);
                            var positionToSpawn = Game.GetSingleObjectByCustomId("StartSpawnPoint").GetWorldPosition();
                            var p = Game.CreatePlayer(positionToSpawn);
                            p.SetTeam(PlayerTeam.Team3);
                            p.SetUser(currentUser);
                            p.SetProfile(currentUser.GetProfile());
                            p.SetWorldPosition(positionToSpawn);
                        }

                        var player = new TPlayer(currentUser);



                        if (availableMenus.Count == 0)
                        {
                            DebugLogger.DebugOnlyDialogLog("NO AVAILABLE MENUS FOR PLAYER " + player.Name);
                            return;
                        }
                        TPlayerMenu menu = null;
                        menu = availableMenus.FirstOrDefault();
                        availableMenus.RemoveAt(availableMenus.IndexOf(menu));
                        if (menu == null)
                        {
                            return;
                        }


                        try
                        {
                            var playerFound = false;
                            if (!string.IsNullOrEmpty(OtherData))
                            {
                                // try to look for player in OtherData
                                var playerList = OtherData.Split(';');

                                for (int p = 0; p < playerList.Length; p++)
                                {
                                    string[] plData = playerList[p].Split(':');
                                    if (plData.Length == 11)
                                    {
                                        List <string> list = new List <string>(plData);
                                        list.RemoveAt(3);
                                        plData = list.ToArray();
                                    }

                                    string name = FormatName(player.Name);
                                    if (name == plData[0])
                                    {
                                        menu.SetPlayer(player);
                                        player.Level      = Math.Min(Convert.ToInt32(plData[1]), LevelList.Count - 1);
                                        player.CurrentExp = Convert.ToInt32(plData[2]);
                                        for (int u = 0; u < menu.Equipment.Count; u++)
                                        {
                                            menu.Equipment[u] = Convert.ToInt32(plData[3 + u]);
                                        }
                                        menu.ValidateEquipment();
                                        menu.Change = true;
                                        menu.Update();
                                        playerFound = true;
                                        DebugLogger.DebugOnlyDialogLog("PLAYER FOUND IN MEMORY DATA. WELCOME BACK!" + player.Name);
                                        break;
                                    }
                                }
                            }

                            if (!playerFound)
                            {
                                DebugLogger.DebugOnlyDialogLog("ASSIGNING MENU TO PLAYER " + player.Name);
                                if (ShowDebugMessages && !string.IsNullOrEmpty(OtherData))
                                {
                                    DebugLogger.DebugOnlyDialogLog("THEY ARE A NEW PLAYER! WELCOME " + player.Name + "!");
                                }
                                menu.SetPlayer(player);
                                menu.Change = true;
                                menu.Update();
                            }
                        }
                        catch (Exception e)
                        {
                            DebugLogger.DebugOnlyDialogLog(e.Message);
                            DebugLogger.DebugOnlyDialogLog(e.StackTrace);
                            DebugLogger.DebugOnlyDialogLog("COULDN'T INSTANTIATE PLAYER " + player.Name);
                        }

                        PlayerList.Add(player);
                    }
                }


                if (PlayerList.Count > users.Length)
                {
                    DebugLogger.DebugOnlyDialogLog("More players in PlayersList than active users");
                    for (int i = PlayerMenuList.Count - 1; i >= 0; i--)
                    {
                        TPlayer player = null;
                        try
                        {
                            player = PlayerList.ElementAtOrDefault(i);
                        }
                        catch (Exception)
                        {
                            DebugLogger.DebugOnlyDialogLog("PlayerList.ElementAtOrDefault(i) was out of range, i:" + (i).ToString(), CameraPosition);
                        }

                        if (player == null)
                        {
                            continue;
                        }
                        TPlayerMenu menu = null;
                        try
                        {
                            menu = PlayerMenuList.Where(m => m.Player != null && m.Player.Name != null && m.Player.Name.Equals(player.Name)).FirstOrDefault();
                        }
                        catch (Exception e)
                        {
                            DebugLogger.DebugOnlyDialogLog("PlayerMenuList.Where(m => m.Player.Name.Equals(m.Player)).FirstOrDefault()" + (i).ToString(), CameraPosition);
                            DebugLogger.DebugOnlyDialogLog(e.Message + (i).ToString(), CameraPosition);
                            DebugLogger.DebugOnlyDialogLog(e.StackTrace + (i).ToString(), CameraPosition);
                        }


                        if (menu == null)
                        {
                            DebugLogger.DebugOnlyDialogLog("MENU FOR PLAYER " + player.Name + " WAS NULL. IF HE LEFT HIS PROGRESS WILL NOT BE SAVED!!");
                            continue;
                        }

                        if (!users.Any(u => u.Name != null && u.Name.Equals(player.User.Name)) && GameState != -3 && GameState != -4)
                        {
                            DebugLogger.DebugOnlyDialogLog("REMOVING MENU FOR: " + player.User.Name + ". LEVEL " + player.Level + ". USER HAS LEFT THE MATCH");
                            var playersInMemoryCountBefore = OtherData.Split(';').Length;
                            var leavingPlayerData          = menu.Save(saveOnlyIfActive: false);
                            OtherData += leavingPlayerData;
                            var playersInMemoryCountAfter = OtherData.Split(';').Length;
                            menu.Dispose();
                            PlayerList.Remove(player);
                            if (player.Body != null)
                            {
                                player.Body.Remove();
                                DebugLogger.DebugOnlyDialogLog("REMOVED BODY FOR PLAYER " + player.User.Name);
                            }
                            else
                            {
                                DebugLogger.DebugOnlyDialogLog("COULDN'T REMOVE BODY FOR PLAYER " + player.User.Name);
                            }
                            DebugLogger.DebugOnlyDialogLog("REMOVED MENU FOR: " + player.User.Name + "SUCCESFULLY. DATA ADDED TO MEMORY PLAYERS");
                            DebugLogger.DebugOnlyDialogLog(playersInMemoryCountBefore + " LOADED IN MEMORY BEFORE AND " + playersInMemoryCountAfter + " AFTER. " + PlayerList.Count + " IN MATCH");
                            DebugLogger.DebugOnlyDialogLog("SAVED DATA FOR LEAVING PLAYER " + leavingPlayerData);
                        }
                    }
                }

                // ONLY LOAD DATA ONCE PER GAME
                if (OtherData == string.Empty)
                {
                    LoadData();
                }
            }
            catch (Exception e)
            {
                DebugLogger.DebugOnlyDialogLog(e.StackTrace, CameraPosition);
                DebugLogger.DebugOnlyDialogLog(e.Source, CameraPosition);
            }
        }