private void OnPeerComponentAdded(PeerComponent component) { if (!component.IsMine || !(component is MissionRepresentativeBase)) { return; } this._myRepresentative = component as TeamDeathmatchMissionRepresentative; }
protected override void OnEndMission() { base.OnEndMission(); if (!GameNetwork.IsServer) { return; } foreach (NetworkCommunicator networkPeer in GameNetwork.NetworkPeers) { VirtualPlayer virtualPlayer = networkPeer.VirtualPlayer; TeamDeathmatchMissionRepresentative component = virtualPlayer.GetComponent <TeamDeathmatchMissionRepresentative>(); if (component != null) { virtualPlayer.RemoveComponent((PeerComponent)component); } } }
public override void OnAgentRemoved( Agent affectedAgent, Agent affectorAgent, AgentState agentState, KillingBlow blow) { if (blow.DamageType == DamageTypes.Invalid || agentState != AgentState.Unconscious && agentState != AgentState.Killed || !affectedAgent.IsHuman) { return; } if (affectorAgent != null && affectorAgent.IsEnemyOf(affectedAgent)) { this._missionScoreboardComponent.ChangeTeamScore(affectorAgent.Team, this.GetScoreForKill(affectedAgent)); } else { this._missionScoreboardComponent.ChangeTeamScore(affectedAgent.Team, -this.GetScoreForKill(affectedAgent)); } MissionPeer missionPeer = affectedAgent.MissionPeer; if (missionPeer != null) { int num1 = 100; if (affectorAgent != affectedAgent) { List <MissionPeer>[] missionPeerListArray = new List <MissionPeer> [2]; for (int index = 0; index < missionPeerListArray.Length; ++index) { missionPeerListArray[index] = new List <MissionPeer>(); } foreach (NetworkCommunicator networkPeer in GameNetwork.NetworkPeers) { MissionPeer component = networkPeer.GetComponent <MissionPeer>(); if (component != null && component.Team != null && component.Team.Side != BattleSideEnum.None) { missionPeerListArray[(int)component.Team.Side].Add(component); } } int num2 = missionPeerListArray[1].Count - missionPeerListArray[0].Count; BattleSideEnum battleSideEnum = num2 == 0 ? BattleSideEnum.None : (num2 < 0 ? BattleSideEnum.Attacker : BattleSideEnum.Defender); if (battleSideEnum != BattleSideEnum.None && battleSideEnum == missionPeer.Team.Side) { int num3 = Math.Abs(num2); int count = missionPeerListArray[(int)battleSideEnum].Count; if (count > 0) { int num4 = num1 * num3 / 10 / count * 10; num1 += num4; } } } this.ChangeCurrentGoldForPeer(missionPeer, missionPeer.Representative.Gold + num1); } MultiplayerClassDivisions.MPHeroClass classForCharacter = MultiplayerClassDivisions.GetMPHeroClassForCharacter(affectedAgent.Character); Agent.Hitter assistingHitter = affectedAgent.GetAssistingHitter(affectorAgent?.MissionPeer); if (affectorAgent?.MissionPeer != null && affectorAgent != affectedAgent && !affectorAgent.IsFriendOf(affectedAgent)) { TeamDeathmatchMissionRepresentative representative = affectorAgent.MissionPeer.Representative as TeamDeathmatchMissionRepresentative; int dataAndUpdateFlags = representative.GetGoldGainsFromKillDataAndUpdateFlags(MPPerkObject.GetPerkHandler(affectorAgent.MissionPeer), MPPerkObject.GetPerkHandler(assistingHitter?.HitterPeer), classForCharacter, false, blow.IsMissile); this.ChangeCurrentGoldForPeer(affectorAgent.MissionPeer, representative.Gold + dataAndUpdateFlags); } if (assistingHitter?.HitterPeer != null && !assistingHitter.IsFriendlyHit) { TeamDeathmatchMissionRepresentative representative = assistingHitter.HitterPeer.Representative as TeamDeathmatchMissionRepresentative; int dataAndUpdateFlags = representative.GetGoldGainsFromKillDataAndUpdateFlags(MPPerkObject.GetPerkHandler(affectorAgent?.MissionPeer), MPPerkObject.GetPerkHandler(assistingHitter.HitterPeer), classForCharacter, true, blow.IsMissile); this.ChangeCurrentGoldForPeer(assistingHitter.HitterPeer, representative.Gold + dataAndUpdateFlags); } if (missionPeer?.Team == null) { return; } IEnumerable <(MissionPeer, int)> goldRewardsOnDeath = MPPerkObject.GetPerkHandler(missionPeer)?.GetTeamGoldRewardsOnDeath(); if (goldRewardsOnDeath == null) { return; } foreach ((MissionPeer peer, int baseAmount) in goldRewardsOnDeath) { if (peer?.Representative is TeamDeathmatchMissionRepresentative representative1) { int local_21 = representative1.GetGoldGainsFromAllyDeathReward(baseAmount); if (local_21 > 0) { this.ChangeCurrentGoldForPeer(peer, representative1.Gold + local_21); } } } }