コード例 #1
0
    public override void OnPhotonPlayerConnected(PhotonPlayer newPlayer)
    {
        List <PlayerEntry> inactive = playerEntries.Where(p => !p.gameObject.activeInHierarchy).ToList();

        foreach (var e in inactive)
        {
            if (e.Info != null && e.Info.Name == newPlayer.NickName)
            {
                PlayerInfo pInfo = GetPlayerInfoById(e.Info.Id);
                if (pInfo != null)
                {
                    pInfo.SetPlayer(newPlayer);
                }

                e.Info.SetPlayer(newPlayer);
                e.Show(true);

                Debug.Log("Player rejoined: " + newPlayer.NickName + " with id: " + newPlayer.ID);
                gameManager.Resume(newPlayer.ID);
                return;
            }
        }

        PlayerEntry entry = inactive[Random.Range(0, inactive.Count)];
        var         info  = new PlayerInfo(newPlayer);

        info.sprite = entry.icon;
        entry.SetInfo(info);
        playerList.Add(info);
        entry.Show(true);

        Debug.Log("New player joined: " + newPlayer.NickName);
        AudioManager.Instance.Play("Yay");
    }
コード例 #2
0
ファイル: PlayerControl.cs プロジェクト: ralph00/LoLNotes
        public void SetPlayer(PlayerEntry plr)
        {
            if (InvokeRequired)
            {
                Invoke(new Action <PlayerEntry>(SetPlayer), plr);
                return;
            }
            Player = plr;
            SetTitle(plr);

            RemoveAll(p => (p.Tag as string) == "Note");

            if (!string.IsNullOrWhiteSpace(plr.Note))
            {
                SuspendLayout();

                var tab = new TabPage("Note")
                {
                    Tag       = "Note",
                    BackColor = this.BackColor
                };
                var lbl = new Label
                {
                    Font = new Font(Font.FontFamily, Font.SizeInPoints, FontStyle.Bold),
                    Text = plr.Note
                };
                tab.Controls.Add(lbl);
                AddTab(tab);

                ResumeLayout();
            }

            Invalidate();             //Forces the color change
        }
コード例 #3
0
    /// <summary>
    ///     Loader les PlayerEntry à partie d'un fichier texte. S'il n'y a pas de fichier de texte, rien n'est loader.
    /// </summary>
    public void loadPlayerEntries()
    {
        if (File.Exists(SCORE_FILE_PATH))
        {
            try
            {
                StreamReader scoreFile = new StreamReader(SCORE_FILE_PATH);

                //Lire le fichier
                string line = scoreFile.ReadLine();
                while (line != null)
                {
                    //Créer une entrée
                    string[] texts = line.Split(PlayerEntry.SEPARATEUR.ToCharArray());
                    try
                    {
                        PlayerEntry entry = new PlayerEntry(texts[0], int.Parse(texts[1].Trim()));
                        entries.Add(entry);
                    }
                    catch (System.Exception e)
                    {
                        Debug.LogError(e);
                    }

                    line = scoreFile.ReadLine();
                }

                scoreFile.Close();
            }
            catch (System.Exception e)
            {
                Debug.LogError(e);
            }
        }
    }
コード例 #4
0
        public override void VRChat_OnUiManagerInit()
        {
            ClassInjector.RegisterTypeInIl2Cpp <EnableDisableListener>();
            Config.RegisterSettings();

            // Initialize Constants util
            Constants.UIInit();

            LoadAssetBundle();

            // Initialize UIManager
            UIManager.Init();

            // Initialize submenu for the list
            MenuManager.CreateMainSubMenu();

            // TODO: Add opacity options, maybe color too, (maybe even for each stage of ping and fps??)

            MenuManager.AddMenuListeners();
            MenuManager.CreateSubMenus();
            PlayerEntry.Patch(Harmony);
            EntryManager.AddGeneralInfoEntries();
            MenuManager.CreateGeneralInfoSubMenus();
            MenuManager.AdjustSubMenus();

            // Initialize on leave and join events
            NetworkHooks.NetworkInit();
            NetworkHooks.OnPlayerJoin  += new Action <Player>((player) => OnPlayerJoin(player));
            NetworkHooks.OnPlayerLeave += new Action <Player>((player) => OnPlayerLeave(player));

            MelonLogger.Msg("Initialized!");
        }
コード例 #5
0
    // Calculate the player's rounded health and display it on the UI.
    public void SetHealth()
    {
        List <VehicleHealthManager> vehicles = new List <VehicleHealthManager>(FindObjectsOfType <VehicleHealthManager>());

        PlayerEntry entry  = gamestateTracker.players.Get((short)PhotonNetwork.LocalPlayer.ActorNumber);
        int         teamId = entry.teamId;

        entry.Release();

        foreach (VehicleHealthManager vehicle in vehicles)
        {
            if (vehicle.teamId == teamId)
            {
                if (Mathf.CeilToInt(vehicle.health) != previousRoundedHealth)
                {
                    damageTaken = Mathf.CeilToInt(vehicle.health) - previousRoundedHealth;
                    Instantiate(damageIndicator, damageIndicatorInstantiateTransform);
                    if (vehicle.health < 0f)
                    {
                        vehicle.health = 0f;
                    }
                    healthLabel.text      = Mathf.CeilToInt(vehicle.health).ToString();
                    previousRoundedHealth = Mathf.CeilToInt(vehicle.health);
                    healthBar.SetProgressBar(vehicle.scaledHealth);
                    healthBar.SetNumber(Mathf.CeilToInt(vehicle.health).ToString());
                }
                break;
            }
        }
    }
コード例 #6
0
        private static ProposedBattle TryToMakeBattle(PlayerEntry player, IList <PlayerEntry> otherPlayers, bool ignoreSizeLimit)
        {
            var allPlayers = new List <PlayerEntry>();

            allPlayers.AddRange(otherPlayers);
            allPlayers.Add(player);

            var playersByElo =
                otherPlayers.Where(x => x != player)
                .OrderBy(x => Math.Abs(x.LobbyUser.EffectiveMmElo - player.LobbyUser.EffectiveMmElo))
                .ThenBy(x => x.JoinedTime)
                .ToList();

            var testedBattles = player.GenerateWantedBattles(allPlayers, ignoreSizeLimit);

            foreach (var other in playersByElo)
            {
                foreach (var bat in testedBattles)
                {
                    if (bat.CanBeAdded(other, allPlayers, ignoreSizeLimit))
                    {
                        bat.AddPlayer(other, allPlayers);
                    }
                    if (bat.Players.Count == bat.Size && bat.VerifyBalance(DynamicConfig.Instance.MmTeamsMinimumWinChance))
                    {
                        return(bat);
                    }
                }
            }
            return(null);
        }
コード例 #7
0
    public void GamestateApplyMultiplePlayerPacketsTest()
    {
        short actorNumber = 1;
        GamestateCommitTestHelper <PlayerEntry> testHelper = new GamestateCommitTestHelper <PlayerEntry>(actorNumber);
        GamestateTable <PlayerEntry>            players    = testHelper.TestTable(GamestateTracker.Table.Players);
        GamestateRandomTestingUnit generator = new GamestateRandomTestingUnit(8);

        for (short i = 0; i < 100; i++)
        {
            PlayerEntry playerEntry = players.Create(i);
            generator.RandomisePlayerEntry(playerEntry);
            playerEntry.Commit();

            GamestatePacket packet = testHelper.commitedPackets[0];
            testHelper.Apply(packet);

            playerEntry = players.Get(i);
            GamestateAssertionUnit.AssertPacketApplied(playerEntry, packet);

            generator.RandomisePlayerEntry(playerEntry);
            playerEntry.Commit();

            packet = testHelper.commitedPackets[1];
            testHelper.Apply(packet);

            playerEntry = players.Get(i);
            GamestateAssertionUnit.AssertPacketApplied(playerEntry, packet);
            playerEntry.Release();

            testHelper.commitedPackets.Clear();
        }
    }
コード例 #8
0
        public static bool CheckScore(PlayerEntry entry)
        {
            if (Top10 == null)
            {
                Top10 = new List <PlayerEntry>();
            }

            Top10.Sort();

            if (Top10.Count < 10)
            {
                Top10.Add(entry);
                return(true);
            }
            else
            {
                List <PlayerEntry> copy = new List <PlayerEntry>(Top10);
                foreach (PlayerEntry e in copy)
                {
                    if (entry.Score > e.Score)
                    {
                        Top10.Remove(Top10[Top10.Count - 1]);
                        Top10.Add(entry);
                        return(true);
                    }
                }
            }

            return(false);
        }
コード例 #9
0
    void SetReady(bool state)
    {
        isReady = state;
        PlayerEntry playerEntry = gamestateTracker.players.Get((short)PhotonNetwork.LocalPlayer.ActorNumber);

        if (playerEntry.role == (short)PlayerEntry.Role.None)
        {
            isReady = false;
        }

        lobbySlotMaster.GetComponent <PhotonView>().RPC(nameof(LobbySlotMaster.UpdateCountAndReady), RpcTarget.All);
        playerEntry.ready = isReady;
        playerEntry.Commit();

        if (!isReady)
        {
            buttonFill.color = new Color32(0xFF, 0x61, 0x61, 0xFF);
            buttonText.text  = "Ready Up";
        }
        else
        {
            buttonFill.color = new Color32(0x65, 0xC5, 0x6B, 0xFF);
            buttonText.text  = "Unready";
        }
    }
コード例 #10
0
 public static void AddPlayerEntry(PlayerEntry entry)
 {
     AddEntry(entry);
     playerEntries.Add(entry.player.field_Private_APIUser_0.id, entry);
     entry.gameObject.SetActive(true);
     entry.Refresh();
 }
コード例 #11
0
    // Start is called before the first frame update
    void Start()
    {
        maxPlayers     = PhotonNetwork.CurrentRoom.MaxPlayers;
        playersInLobby = PhotonNetwork.CurrentRoom.PlayerCount;

        // add ourselves

        if (PhotonNetwork.IsMasterClient)
        {
            PlayerEntry playerEntry = gamestateTracker.players.Create((short)PhotonNetwork.LocalPlayer.ActorNumber);
            playerEntry.name = PhotonNetwork.LocalPlayer.NickName;
            playerEntry.Commit();
            selectMapText.text = "Select a map:";
        }


        foreach (LobbyButtonScript lobbyButton in lobbyButtons)
        {
            if (lobbyButton.gameObject.activeInHierarchy)
            {
                //gamestateTracker.schema.teamsList.Add(new GamestateTracker.TeamDetails(lobbyButton.teamId));
                if (PhotonNetwork.IsMasterClient)
                {
                    lobbyButton.CreateTeamEntry();
                }
                //TeamEntry team = gamestateTracker.teams.Create((short)lobbyButton.teamId);
                //team.Commit();
            }
        }
    }
コード例 #12
0
 public void DeleteEntry(PlayerEntry player)
 {
     RemoveActivePlayer(player);
     playerEntryList.Remove(player);
     SortPlayerList();
     player.Destroy();
 }
コード例 #13
0
        public PlayerEntry[,] CreateEntryMatrix(RaidSlot[] Slots, Player[] Players, PlayerEntry[] PlayersEntries)
        {
            PlayerEntry[,] PreferenceMatrix = new PlayerEntry[Players.Length, Slots.Length];
            for (int i = 0; i < Players.Length; i++)
            {
                PlayerEntry[] PlayerEntries = (from entries in PlayersEntries
                                               where entries.PlayerId == Players[i].PID
                                               select entries).ToArray();
                for (int j = 0; j < Slots.Length; j++)
                {
                    var HighestPreferenceId = FindHighestPreferenceId(Slots[j], PlayerEntries);
                    PreferenceMatrix[i, j] = HighestPreferenceId >= 0
                        ? PlayersEntries[HighestPreferenceId]
                        : new PlayerEntry()
                    {
                    };

                    if (PreferenceMatrix[i, j].Preference <= 0)
                    {
                        PreferenceMatrix[i, j].Preference = 110;
                    }
                }
            }
            return(PreferenceMatrix);
        }
コード例 #14
0
    public List <short> GetSelectedHumanTeamsIds()
    {
        List <short> idList = new List <short>();

        for (int i = 0; i < gamestateTracker.teams.count; i++)
        {
            bool        hasHuman    = false;
            TeamEntry   teamEntry   = gamestateTracker.teams.ReadAtIndex((short)i);
            PlayerEntry driverEntry = gamestateTracker.players.Read(teamEntry.driverId);
            PlayerEntry gunnerEntry = gamestateTracker.players.Read(teamEntry.gunnerId);

            if (!driverEntry.isBot)
            {
                hasHuman = true;
            }
            if (!gunnerEntry.isBot)
            {
                hasHuman = true;
            }

            if (hasHuman && teamEntry.hasSelectedVehicle)
            {
                idList.Add(teamEntry.id);
            }
        }

        return(idList);
    }
コード例 #15
0
ファイル: EntryManager.cs プロジェクト: loukylor/VRC-Mods
        public static void OnPlayerJoined(Player player)
        {
            if (player.name.Contains("Local") && player.prop_APIUser_0 == null)
            {
                player.prop_APIUser_0 = APIUser.CurrentUser;
            }

            if (idToEntryTable.ContainsKey(player.prop_APIUser_0.id))
            {
                return; // If already in list
            }
            if (player.name.Contains("Local"))
            {
                if (localPlayerEntry != null)
                {
                    return;
                }

                GameObject template = Object.Instantiate(Constants.playerListLayout.transform.Find("Template").gameObject, Constants.playerListLayout.transform);
                template.SetActive(true);

                LeftSidePlayerEntry leftSidePlayerEntry = EntryBase.CreateInstance <LeftSidePlayerEntry>(template.transform.Find("LeftPart").gameObject);
                EntryBase.CreateInstance <LocalPlayerEntry>(template.transform.Find("RightPart").gameObject);
                AddPlayerLeftPairEntry(EntryBase.CreateInstance <PlayerLeftPairEntry>(template, new object[] { leftSidePlayerEntry, localPlayerEntry }));
            }
            else
            {
                GameObject template = Object.Instantiate(Constants.playerListLayout.transform.Find("Template").gameObject, Constants.playerListLayout.transform);
                template.SetActive(true);

                LeftSidePlayerEntry leftSidePlayerEntry = EntryBase.CreateInstance <LeftSidePlayerEntry>(template.transform.Find("LeftPart").gameObject);
                PlayerEntry         playerEntry         = EntryBase.CreateInstance <PlayerEntry>(template.transform.Find("RightPart").gameObject, new object[] { player });
                AddPlayerLeftPairEntry(EntryBase.CreateInstance <PlayerLeftPairEntry>(template, new object[] { leftSidePlayerEntry, playerEntry }));
            }
        }
コード例 #16
0
    private void CopyPlayer(int from, int to)
    {
        Debug.Log("moved player at " + from + " to " + to);
        PlayerEntry p = state.PlayerList[from];

        SetPlayer(to, p.UserName, p.Team, p.Connected);
    }
コード例 #17
0
        private static ProposedBattle TryToMakeBattle(PlayerEntry player, IList <PlayerEntry> otherPlayers)
        {
            var allPlayers = new List <PlayerEntry>();

            allPlayers.AddRange(otherPlayers);
            allPlayers.Add(player);

            var playersByElo =
                otherPlayers.Where(x => x != player)
                .OrderBy(x => Math.Abs(x.LobbyUser.EffectiveMmElo - player.LobbyUser.EffectiveMmElo))
                .ThenBy(x => x.JoinedTime)
                .ToList();

            var testedBattles = player.GenerateWantedBattles(allPlayers);

            foreach (var other in playersByElo)
            {
                foreach (var bat in testedBattles)
                {
                    if (bat.CanBeAdded(other, allPlayers))
                    {
                        bat.AddPlayer(other, allPlayers);
                    }
                    if (bat.Players.Count == bat.Size)
                    {
                        return(bat);
                    }
                }
            }
            return(null);
        }
コード例 #18
0
            public void AddPlayer(PlayerEntry player, List <PlayerEntry> allPlayers)
            {
                //Trace.TraceError("MM: proposed battle {0} adding {1}", string.Join(", ", Players.Select(x=>x.Name)), player.Name);
                //var minEloOrg = MinElo;
                //var maxEloOrg = MaxElo;
                if (player.Party != null)
                {
                    foreach (var p in allPlayers.Where(x => x.Party == player.Party))
                    {
                        if (!Players.Contains(p))
                        {
                            Players.Add(p);
                        }
                    }
                    MinElo = Math.Min(MinElo, GetPartyMaxElo(player.Party, allPlayers));
                    MaxElo = Math.Max(MaxElo, GetPartyMinElo(player.Party, allPlayers));

                    hasParty = true;
                    //Trace.TraceError("MM: added party {6} MinElo: {0}->{1} ({4}),  MaxElo: {2}->{3} ({5})", minEloOrg, MinElo, maxEloOrg, MaxElo, GetPartyMaxElo(player.Party, allPlayers), GetPartyMinElo(player.Party, allPlayers), player.Name);
                }
                else
                {
                    if (!Players.Contains(player))
                    {
                        Players.Add(player);
                        MinElo = Math.Min(MinElo, GetPlayerMaxElo(player));
                        MaxElo = Math.Max(MaxElo, GetPlayerMinElo(player));

                        //Trace.TraceError("MM: added player {6} MinElo: {0}->{1} ({4}),  MaxElo: {2}->{3} ({5})", minEloOrg, MinElo, maxEloOrg, MaxElo, GetPlayerMaxElo(player), GetPlayerMinElo(player), player.Name);
                    }
                }
            }
コード例 #19
0
    public void GamestateApplyPlayerPacketErrorCallbackTest()
    {
        short actorNumber = 1;
        GamestateCommitTestHelper <PlayerEntry> testHelper = new GamestateCommitTestHelper <PlayerEntry>(actorNumber);
        GamestateTable <PlayerEntry>            players    = testHelper.TestTable(GamestateTracker.Table.Players);
        GamestateRandomTestingUnit generator = new GamestateRandomTestingUnit(9);

        for (short i = 0; i < 100; i++)
        {
            PlayerEntry playerEntry = players.Create(i);
            generator.RandomisePlayerEntry(playerEntry);

            GamestatePacket packet = GamestatePacketManager.GetPacket();

            bool errorCallbackCalled = false;

            playerEntry.Commit((PlayerEntry entry, bool succeeded) => {
                Assert.That(succeeded, Is.EqualTo(true));
                GamestateAssertionUnit.AssertPacketApplied(entry, packet);
                entry.Release();
                errorCallbackCalled = true;
            });

            packet = testHelper.commitedPackets[0];
            testHelper.Apply(packet);

            Assert.That(errorCallbackCalled, Is.EqualTo(true));

            testHelper.commitedPackets.Clear();
        }
    }
コード例 #20
0
    /****************************************
     *                                      *
     *           LOAD PLAYER INFO           *
     *                                      *
     ***************************************/

    public void LoadMyInfo()
    {
        //Create my new info
        Debug.Log("Loading Player info...");
        //Load my info
        //PlayerPrefs.DeleteKey("playerInfoTable"); //DELETE SCORE DATABASE
        string playerInfo = PlayerPrefs.GetString("playerInfoTable");

        myInfo = JsonUtility.FromJson <PlayerEntry>(playerInfo);
        if (myInfo == null)
        {
            PlayerEntry myNewInfo = new PlayerEntry {
                id = this.id, game = this.game, player = this.playName, score = this.score
            };
            Debug.Log("No data founded...");
            Debug.Log("Creating new Player info...");
            // There's no stored table, initialize
            myInfo = myNewInfo;//new PlayerEntry { id = this.id, game = "XorD", player = "NewPlayer", score = this.score };
            Debug.Log("Info created...");
            Debug.Log("[ My Id: " + myInfo.id + "\n My score: " + myInfo.score + " ]");
            Debug.Log("My Info loaded...");
            string json = JsonUtility.ToJson(myInfo);
            PlayerPrefs.SetString("playerInfoTable", json);
            PlayerPrefs.Save();
        }
        else
        {
            this.id       = myInfo.id;
            this.playName = myInfo.player;
            this.score    = myInfo.score;
            Debug.Log("[ My Id: " + myInfo.id + "\n My score: " + myInfo.score + " ]");
            Debug.Log("My Info loaded...");
        }
    }
コード例 #21
0
 public void LoadPlayer() {
     if (System.IO.File.Exists(Application.dataPath + "/StreamingAssets/" + currentSave + "/playerData.xml")) {
         XmlSerializer serializer = new XmlSerializer(typeof(PlayerEntry));
         FileStream stream = new FileStream(Application.dataPath + "/StreamingAssets/" + currentSave + "/playerData.xml", FileMode.Open);
         playerData = serializer.Deserialize(stream) as PlayerEntry;
         stream.Close();
     }
 }
コード例 #22
0
 public CrouchState(Enum stateID, PlayerEntry playerEntry) : base(stateID, playerEntry.StateMachine)
 {
     _animator            = playerEntry.GetComponent <Animator>();
     _optionBoxCollider2D = playerEntry.GetComponent <BoxCollider2D>();
     _rigidbody2D         = playerEntry.GetComponent <Rigidbody2D>();
     _headPoint           = playerEntry.headPoint;
     _layerMask           = playerEntry.layerMask;
 }
コード例 #23
0
    private void SetPlayer(int index, string username, int team, bool connected = true)
    {
        PlayerEntry p = state.PlayerList[index];

        p.UserName  = username;
        p.Team      = team;
        p.Connected = connected;
    }
コード例 #24
0
    public void OnClickAdd()
    {
        Debug.Log("OnClickAdd");
        PlayerEntry PlayerEntryClone = Instantiate(playerEntry, playerList.transform);

        PlayerEntryClone.EntryInit(this);
        playerEntryList.Add(PlayerEntryClone);
        PlayerEntryClone.OpenAddPopup();
    }
コード例 #25
0
        protected void Entry_UnFocussed(object sender, EventArgs e)
        {
            // Cast
            PlayerEntry         entry = (PlayerEntry)sender;
            PlayerNameViewModel model = (PlayerNameViewModel)BindingContext;

            // Set in model
            model.SetPlayerName(entry.BoardType, entry.Text);
        }
コード例 #26
0
    public void GamestateApplyPlayerPacketListenerDeletionTest()
    {
        short actorNumber = 1;
        GamestateCommitTestHelper <PlayerEntry> testHelper = new GamestateCommitTestHelper <PlayerEntry>(actorNumber);
        GamestateTable <PlayerEntry>            players    = testHelper.TestTable(GamestateTracker.Table.Players);
        GamestateRandomTestingUnit generator = new GamestateRandomTestingUnit(12);

        for (short i = 0; i < 100; i++)
        {
            PlayerEntry playerEntry = players.Create(i);
            generator.RandomisePlayerEntry(playerEntry);

            GamestatePacket packet = GamestatePacketManager.GetPacket();

            bool listenerACalled = false;
            bool listenerBCalled = false;
            bool listenerCCalled = false;
            bool listenerDCalled = false;

            int a = playerEntry.AddListener((PlayerEntry entry) => {
                entry.Release();
                listenerACalled = true;
            });

            int b = playerEntry.AddListener((PlayerEntry entry) => {
                entry.Release();
                listenerBCalled = true;
            });

            int c = playerEntry.AddListener((PlayerEntry entry) => {
                entry.Release();
                listenerCCalled = true;
            });

            playerEntry.RemoveListener(b);

            int d = playerEntry.AddListener((PlayerEntry entry) => {
                entry.Release();
                listenerDCalled = true;
            });

            playerEntry.RemoveListener(c);


            playerEntry.Commit();

            packet = testHelper.commitedPackets[0];
            testHelper.Apply(packet);

            Assert.That(listenerACalled, Is.EqualTo(true));
            Assert.That(listenerBCalled, Is.EqualTo(false));
            Assert.That(listenerCCalled, Is.EqualTo(false));
            Assert.That(listenerDCalled, Is.EqualTo(true));

            testHelper.commitedPackets.Clear();
        }
    }
コード例 #27
0
    // called whenever the team stuff changes
    // update the graphics of the button
    void TeamListenerCallback(TeamEntry teamEntry)
    {
        // display the player details of the driver and gunner in the buttons

        // driver stuff
        short driverId = teamEntry.driverId;

        if (driverId != 0)
        {
            PlayerEntry driverEntry = gamestateTracker.players.Get((short)driverId);
            driverPlayerText.text = driverEntry.name;
            driverEntry.Release();
            if (driverId == PhotonNetwork.LocalPlayer.ActorNumber)
            {
                driverFillImage.color = new Color32(0x65, 0xC5, 0x6B, 0xFF);
            }
            else
            {
                driverFillImage.color = new Color32(0x44, 0x91, 0xCA, 0xFF);
            }
            driverButton.interactable = false;
        }
        else
        {
            driverPlayerText.text     = "Empty";
            driverFillImage.color     = new Color32(0xB0, 0xB0, 0xB0, 0xFF);
            driverButton.interactable = true;
        }

        // gunner stuff
        short gunnerId = teamEntry.gunnerId;

        if (gunnerId != 0)
        {
            PlayerEntry gunnerEntry = gamestateTracker.players.Get((short)gunnerId);
            gunnerPlayerText.text = gunnerEntry.name;
            gunnerEntry.Release();
            if (gunnerId == PhotonNetwork.LocalPlayer.ActorNumber)
            {
                gunnerFillImage.color = new Color32(0x65, 0xC5, 0x6B, 0xFF);
            }
            else
            {
                gunnerFillImage.color = new Color32(0x44, 0x91, 0xCA, 0xFF);
            }
            gunnerButton.interactable = false;
        }
        else
        {
            gunnerPlayerText.text     = "Empty";
            gunnerFillImage.color     = new Color32(0xB0, 0xB0, 0xB0, 0xFF);
            gunnerButton.interactable = true;
        }

        teamEntry.Release();
    }
コード例 #28
0
ファイル: IdleState.cs プロジェクト: nekolr/UnityTraining
 public IdleState(Enum stateID, PlayerEntry playerEntry) : base(stateID, playerEntry.StateMachine)
 {
     _animator  = playerEntry.GetComponent <Animator>();
     _transform = playerEntry.transform;
     // 玩家精灵边框的大小
     _playerSize = playerEntry.GetComponent <SpriteRenderer>().bounds.size;
     // 碰撞检测盒子的大小,使用玩家的大小 40%,同时高度设置为 0.5
     _boxSize   = new Vector2(_playerSize.x * 0.4f, PlayerVariables.BoxHeight);
     _layerMask = playerEntry.layerMask;
 }
コード例 #29
0
ファイル: EditPlayerForm.cs プロジェクト: ahageali/lolnotes
 public EditPlayerForm(PlayerEntry entry)
     : this()
 {
     if (entry == null)
     {
         return;
     }
     NoteText.Text          = entry.Note ?? "";
     ColorBox.SelectedIndex = ColorBox.Items.IndexOf(entry.NoteColor.ToKnownColor().ToString());
 }
コード例 #30
0
    private void AddPlayerEntry(LobbyPlayer playerData)
    {
        GameObject obj = Instantiate(playerEntryPrefab);

        obj.transform.parent = playerList.transform;

        PlayerEntry playerEntry = obj.GetComponent <PlayerEntry>();

        playerEntry.playerName.text = playerData.playerName;
    }
コード例 #31
0
ファイル: Halo4Film.cs プロジェクト: 0xdeafcafe/vintage
 private void LoadPlayerTable(IReader reader)
 {
     var chainedNullEntries = 0;
     var index = 0;
     _players = new List<PlayerEntry>();
     while (chainedNullEntries < 2)
     {
         reader.SeekTo(0x2BBF0 + (0x1E0 * index));
         var entry = new PlayerEntry(reader);
         if (entry.GamerTag_1 == "" || entry.ServiceTag == "" || entry.GamerTag_2 == "")
             chainedNullEntries++;
         else
         {
             _players.Add(entry);
             chainedNullEntries = 0;
         }
         index++;
     }
 }
コード例 #32
0
        /// <summary>
        /// Consume players and list matches per player.
        /// </summary>
        private async Task<IEnumerable<MatchSummary>> ConsumePlayerAsync(PlayerEntry player)
        {
            // <TEST> download limiting
            long count = Interlocked.Read(ref testSynchronizer.Count);
            if (count >= testSynchronizer.Limit)
                return Enumerable.Empty<MatchSummary>();
            // </TEST>

            // Get player id
            long playerId = long.Parse(player.Player.PlayerOrTeamId);

            // Get player data
            PlayerData playerData = PlayerDirectory.GetPlayerData(player.Player);

            // Retry a number of times to handle server-side rate limit errors
            int retriesLeft = 3;

            // Get player match list, looping through pages until reaching a match we've seen for this player, or a match from an old patch
            // TODO: use the new match history api
            int startId = 0;
            int endId = MaxMatchesPerQuery - 1;

            List<MatchSummary> matches = new List<MatchSummary>();
            bool oldMatches = false;
            while (!oldMatches)
            {
                try
                {
                    var newmatches = await api.GetMatchHistoryAsync(player.Region, playerId,
                        rankedQueues: queryQueues,
                        beginIndex: startId,
                        endIndex: endId);

                    // Prepare for next query
                    startId += MaxMatchesPerQuery;
                    endId += MaxMatchesPerQuery;

                    // Filter out matches that aren't on the current patch
                    newmatches = newmatches.Where(m => StaticDataStore.Version.IsSamePatch(new RiotVersion(m.MatchVersion))).ToList();

                    // Check if we've seen any of these matches yet (if so, that's our marker to stop querying)
                    int foundMatchId = newmatches.FindIndex(m => m.MatchId == playerData.LatestMatchId);
                    if (foundMatchId != -1)
                    {
                        newmatches = newmatches.GetRange(0, foundMatchId).ToList();
                        oldMatches = true;
                    }

                    matches.AddRange(newmatches);

                    // If we filtered any matches out, we're past matches on the current patch
                    if (newmatches.Count < MaxMatchesPerQuery)
                        oldMatches = true;
                }
                catch (RiotSharpException ex)
                {
                    if (ex.IsRetryable() && retriesLeft > 0)
                    {
                        // NOTE: This server-side rate handler is a bit rough, but I don't want to change RiotSharp too much unless I get more time.
                        //       Ideally, the original error code would be attached to the RiotSharp exception so the handler could decide how to deal
                        //       with it based on the status code. Unfortunately, it's not at this time - I'll clean it up in RiotSharp if I have time.
                        //
                        //       The error seems to be server-side, as there's no retry-after headers of any sort attached to the response. It should
                        //       be safe to just retry after waiting a bit. I'm also retrying 500-series errors, since they seem to be recoverable.
                        --retriesLeft;

                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine("Server error getting matches for player {0} ({1} retries left)", player.Player.PlayerOrTeamName, retriesLeft);
                        Console.ResetColor();

                        // Wait half a second
                        Thread.Sleep(500);
                    }
                    else
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Error getting matches for player {0}: {1}", player.Player.PlayerOrTeamName, ex.Message);
                        Console.ResetColor();
                        oldMatches = true;
                    }
                }
            }

            // Store last seen match for this player
            if (matches.Count > 0)
            {
                playerData.LatestMatchId = matches[0].MatchId;
                PlayerDirectory.SetPlayerData(player.Player, playerData);
            }

            return matches;
        }
コード例 #33
0
 private int GetElo(PlayerEntry entry) => entry.LobbyUser.EffectiveMmElo;
コード例 #34
0
 private int GetPlayerMaxElo(PlayerEntry entry)
 {
     return (int)Math.Round(CutOffFunc(entry.MaxConsideredElo));
 }
コード例 #35
0
            public bool CanBeAdded(PlayerEntry other)
            {
                if (!other.GenerateWantedBattles().Any(y => y.Size == Size && y.QueueType == QueueType)) return false;
                var width = owner.EloWidth * widthMultiplier;

                if ((GetPlayerMinElo(other) - MinElo > width) || (MaxElo - GetPlayerMaxElo(other) > width)) return false;

                return true;
            }
コード例 #36
0
 public void AddPlayer(PlayerEntry player)
 {
     Players.Add(player);
     MinElo = Math.Min(MinElo, GetPlayerMaxElo(player));
     MaxElo = Math.Max(MaxElo, GetPlayerMinElo(player));
 }
コード例 #37
0
 public ProposedBattle(int size, PlayerEntry initialPlayer, MatchMakerSetup.Queue queue, double eloCutOffExponent)
 {
     Size = size;
     owner = initialPlayer;
     QueueType = queue;
     this.eloCutOffExponent = eloCutOffExponent;
     widthMultiplier = Math.Max(1.0, 1.0 + (Size - 4) * 0.1);
     AddPlayer(initialPlayer);
 }
コード例 #38
0
        private async Task UpdatePlayerStatus(string name)
        {
            ConnectedUser conus;
            if (server.ConnectedUsers.TryGetValue(name, out conus))
            {
                PlayerEntry entry;
                players.TryGetValue(name, out entry);
                var ret = new MatchMakerStatus()
                {
                    QueueCounts = queuesCounts,
                    IngameCounts = ingameCounts,
                    JoinedQueues = entry?.QueueTypes.Select(x => x.Name).ToList(),
                    CurrentEloWidth = entry?.EloWidth,
                    JoinedTime = entry?.JoinedTime,
                    BannedSeconds = BannedSeconds(name),
                    UserCount = server.ConnectedUsers.Count
                };


                // check for instant battle start
                if (invitationBattles?.Any() != true && players.Count > 0) // nobody invited atm and some in queue
                {
                    var testPlayers = players.Values.Where(x => x != null && x.Name != name).ToList(); // get all currently queued players except for self
                    var testSelf = new PlayerEntry(conus.User, possibleQueues.ToList()); // readd self but with all queues
                    testPlayers.Add(testSelf);
                    var testBattles = ProposeBattles(testPlayers); 
                    ret.InstantStartQueues = testBattles.Where(x => x.Players.Contains(testSelf)).Select(x => x.QueueType.Name).Distinct().ToList();
                }

                await conus.SendCommand(ret);
            }
        }
コード例 #39
0
            public bool CanBeAdded(PlayerEntry other)
            {
                if (!other.GenerateWantedBattles().Any(y => (y.Size == Size) && (y.Mode == Mode))) return false;
                var widthMultiplier = Math.Max(1.0, 1.0 + (Size - 4) * 0.1);
                var width = owner.EloWidth * widthMultiplier;

                var elo = GetElo(other);
                if ((elo - MinElo > width) || (MaxElo - elo > width)) return false;

                return true;
            }
コード例 #40
0
 private MatchMakerStatus ToMatchMakerStatus(PlayerEntry entry)
 {
     var ret = new MatchMakerStatus()
     {
         QueueCounts = queuesCounts,
         IngameCounts = ingameCounts,
     };
     if (entry != null)
     {
         ret.JoinedQueues = entry.QueueTypes.Select(x => x.Name).ToList();
         ret.CurrentEloWidth = entry.EloWidth;
         ret.JoinedTime = entry.JoinedTime;
         ret.BannedSeconds = BannedSeconds(entry.Name);
     }
     return ret;
 }
コード例 #41
0
 public void AddPlayer(PlayerEntry player)
 {
     Players.Add(player);
     var elo = GetElo(player);
     MinElo = Math.Min(MinElo, elo);
     MaxElo = Math.Max(MaxElo, elo);
 }
コード例 #42
0
ファイル: ExileBoxer.cs プロジェクト: randomstraw/ExileBoxer
        public static bool isInMyInstance(PlayerEntry pe)
        {
            using (LokiPoe.AcquireFrame())
            {
                LokiPoe.ObjectManager.ClearCache();

                bool result = false;

                try
                {
                    if (LokiPoe.ObjectManager.Objects.OfType<Player>().First(x => x.Name == pe.Name).Distance > 0)
                        result = true;
                }
                catch (Exception e)
                {
                    result = false;
                    //TheFunctions.Debug(e.ToString()); //working now, no need to debugspam
                }

                return result;
            }
        }
コード例 #43
0
ファイル: ExileBoxer.cs プロジェクト: randomstraw/ExileBoxer
        public static Vector2i getPosition(PlayerEntry pe)
        {
            using (LokiPoe.AcquireFrame())
            {
                LokiPoe.ObjectManager.ClearCache();

                if (pe.AreaId != LokiPoe.LocalData.WorldAreaId)
                    return new Vector2i(-1, -1);

                if (!isInMyInstance(pe))
                    return new Vector2i(-2, -2);

                return LokiPoe.ObjectManager.Objects.OfType<Player>().First(p => p.Name == pe.Name).Position;
            }
        }
コード例 #44
0
ファイル: ExileBoxer.cs プロジェクト: randomstraw/ExileBoxer
        public static int getDistance(PlayerEntry pe)
        {
            using (LokiPoe.AcquireFrame())
            {
                LokiPoe.ObjectManager.ClearCache();

                if (pe.AreaId != LokiPoe.LocalData.WorldAreaId)
                    return -1;

                if (!isInMyInstance(pe))
                    return -2;

                return (int)LokiPoe.ObjectManager.Objects.OfType<Player>().First(p => p.Name == pe.Name).Distance;
            }
        }
コード例 #45
0
 public ProposedBattle(int size, PlayerEntry initialPlayer, AutohostMode mode)
 {
     Size = size;
     Mode = mode;
     owner = initialPlayer;
     AddPlayer(initialPlayer);
 }
コード例 #46
0
        private static ProposedBattle TryToMakeBattle(PlayerEntry player, IList<PlayerEntry> otherPlayers)
        {
            var playersByElo =
                otherPlayers.Where(x => x != player)
                    .OrderBy(x => Math.Abs(x.LobbyUser.EffectiveMmElo - player.LobbyUser.EffectiveMmElo))
                    .ThenBy(x => x.JoinedTime)
                    .ToList();

            var testedBattles = player.GenerateWantedBattles();

            foreach (var other in playersByElo)
                foreach (var bat in testedBattles)
                    if (bat.CanBeAdded(other))
                    {
                        bat.AddPlayer(other);
                        if (bat.Players.Count == bat.Size) return bat;
                    }

            return null;
        }