Ejemplo n.º 1
0
        private void HandleServerEventKillDeathCountChangeEvent(KillDeathCountChange message)
        {
            if (message.VictimPeer == null)
            {
                return;
            }
            MissionPeer         component    = message.VictimPeer.GetComponent <MissionPeer>();
            NetworkCommunicator attackerPeer = message.AttackerPeer;
            MissionPeer         killedPeer   = attackerPeer != null?attackerPeer.GetComponent <MissionPeer>() : (MissionPeer)null;

            if (component != null)
            {
                component.KillCount   = message.KillCount;
                component.AssistCount = message.AssistCount;
                component.DeathCount  = message.DeathCount;
                component.Score       = message.Score;
                component.OnKillAnotherPeer(killedPeer);
                if (message.KillCount == 0 && message.AssistCount == 0 && (message.DeathCount == 0 && message.Score == 0))
                {
                    component.ResetKillRegistry();
                }
            }
            if (this._missionScoreboardComponent == null)
            {
                return;
            }
            this._missionScoreboardComponent.PlayerPropertiesChanged(message.VictimPeer);
        }
        protected BodyProperties GetBodyProperties(
            MissionPeer missionPeer,
            BasicCultureObject cultureLimit)
        {
            NetworkCommunicator networkPeer = missionPeer.GetNetworkPeer();

            if (networkPeer != null)
            {
                return(networkPeer.PlayerConnectionInfo.GetParameter <PlayerData>("PlayerData").BodyProperties);
            }
            Team team = missionPeer.Team;
            BasicCharacterObject troopCharacter = MultiplayerClassDivisions.GetMPHeroClasses(cultureLimit).ToList <MultiplayerClassDivisions.MPHeroClass>().GetRandomElement <MultiplayerClassDivisions.MPHeroClass>().TroopCharacter;
            MatrixFrame          spawnFrame     = this.SpawnComponent.GetSpawnFrame(team, troopCharacter.HasMount(), true);
            AgentBuildData       agentBuildData = new AgentBuildData(troopCharacter);

            agentBuildData.Team(team);
            agentBuildData.InitialFrame(spawnFrame);
            agentBuildData.TroopOrigin((IAgentOriginBase) new BasicBattleAgentOrigin(troopCharacter));
            agentBuildData.EquipmentSeed(this.MissionLobbyComponent.GetRandomFaceSeedForCharacter(troopCharacter));
            agentBuildData.ClothingColor1(team.Side == BattleSideEnum.Attacker ? cultureLimit.Color : cultureLimit.ClothAlternativeColor);
            agentBuildData.ClothingColor2(team.Side == BattleSideEnum.Attacker ? cultureLimit.Color2 : cultureLimit.ClothAlternativeColor2);
            agentBuildData.IsFemale(troopCharacter.IsFemale);
            agentBuildData.Equipment(Equipment.GetRandomEquipmentElements(troopCharacter, !(Game.Current.GameType is MultiplayerGame), seed: agentBuildData.AgentEquipmentSeed));
            agentBuildData.BodyProperties(BodyProperties.GetRandomBodyProperties(agentBuildData.AgentIsFemale, troopCharacter.GetBodyPropertiesMin(), troopCharacter.GetBodyPropertiesMax(), (int)agentBuildData.AgentOverridenSpawnEquipment.HairCoverType, agentBuildData.AgentEquipmentSeed, troopCharacter.HairTags, troopCharacter.BeardTags, troopCharacter.TattooTags));
            return(agentBuildData.AgentBodyProperties);
        }
        private bool HandleClientEventLobbyEquipmentUpdated(
            NetworkCommunicator peer,
            RequestTroopIndexChange message)
        {
            MissionPeer component = peer.GetComponent <MissionPeer>();

            if (component == null)
            {
                return(false);
            }
            SpawnComponent missionBehaviour = this.Mission.GetMissionBehaviour <SpawnComponent>();

            if (missionBehaviour == null)
            {
                return(false);
            }
            if (missionBehaviour.AreAgentsSpawning() && component.SelectedTroopIndex != message.SelectedTroopIndex)
            {
                component.SelectedTroopIndex = message.SelectedTroopIndex;
                GameNetwork.BeginBroadcastModuleEvent();
                GameNetwork.WriteMessage((GameNetworkMessage) new UpdateSelectedTroopIndex(peer, message.SelectedTroopIndex));
                GameNetwork.EndBroadcastModuleEvent(GameNetwork.EventBroadcastFlags.ExcludeOtherTeamPlayers, peer);
                if (this.OnEquipmentRefreshed != null)
                {
                    this.OnEquipmentRefreshed(component);
                }
            }
            return(true);
        }
 public void EquipmentUpdated()
 {
     if (GameNetwork.IsServer)
     {
         MissionPeer component = GameNetwork.MyPeer.GetComponent <MissionPeer>();
         if (component.SelectedTroopIndex == component.NextSelectedTroopIndex)
         {
             return;
         }
         component.SelectedTroopIndex = component.NextSelectedTroopIndex;
         GameNetwork.BeginBroadcastModuleEvent();
         GameNetwork.WriteMessage((GameNetworkMessage) new UpdateSelectedTroopIndex(GameNetwork.MyPeer, component.SelectedTroopIndex));
         GameNetwork.EndBroadcastModuleEvent(GameNetwork.EventBroadcastFlags.ExcludeOtherTeamPlayers, GameNetwork.MyPeer);
         if (this.OnEquipmentRefreshed == null)
         {
             return;
         }
         this.OnEquipmentRefreshed(component);
     }
     else
     {
         MissionPeer component = GameNetwork.MyPeer.GetComponent <MissionPeer>();
         GameNetwork.BeginModuleEventAsClient();
         GameNetwork.WriteMessage((GameNetworkMessage) new RequestTroopIndexChange(component.NextSelectedTroopIndex));
         GameNetwork.EndModuleEventAsClient();
     }
 }
        public void OnCaptureResult(CaptureTheFlagCaptureResultEnum result)
        {
            if (GameNetwork.IsDedicatedServer || !GameNetwork.MyPeer.IsSynchronized)
            {
                return;
            }
            MissionPeer component = GameNetwork.MyPeer.GetComponent <MissionPeer>();

            switch (result)
            {
            case CaptureTheFlagCaptureResultEnum.AttackersWin:
                if (component == null)
                {
                    break;
                }
                SoundEvent.PlaySound2D(component.Team.Side == BattleSideEnum.Attacker ? "event:/ui/mission/multiplayer/mp_victory" : "event:/ui/mission/multiplayer/mp_defeat");
                break;

            case CaptureTheFlagCaptureResultEnum.DefendersWin:
                if (component == null)
                {
                    break;
                }
                SoundEvent.PlaySound2D(component.Team.Side == BattleSideEnum.Defender ? "event:/ui/mission/multiplayer/mp_victory" : "event:/ui/mission/multiplayer/mp_defeat");
                break;
            }
        }
Ejemplo n.º 6
0
 private MissionPeer RemoveHittersAndGetAssistorPeer(
     MissionPeer killerPeer,
     Agent killedAgent)
 {
     Agent.Hitter assistingHitter = killedAgent.GetAssistingHitter(killerPeer);
     foreach (Agent.Hitter hitter in killedAgent.HitterList.ToList <Agent.Hitter>())
     {
         if (hitter.HitterPeer != killerPeer && hitter != assistingHitter)
         {
             killedAgent.RemoveHitter(hitter.HitterPeer, hitter.IsFriendlyHit);
         }
     }
     if (assistingHitter?.HitterPeer != null)
     {
         int scoreForAssist = this._gameMode.GetScoreForAssist(killedAgent);
         if (!assistingHitter.IsFriendlyHit)
         {
             ++assistingHitter.HitterPeer.AssistCount;
             assistingHitter.HitterPeer.Score += scoreForAssist;
         }
         else
         {
             --assistingHitter.HitterPeer.AssistCount;
             assistingHitter.HitterPeer.Score -= scoreForAssist;
         }
     }
     return(assistingHitter?.HitterPeer);
 }
        private void OnAllAgentsFromPeerSpawnedFromVisuals(MissionPeer peer)
        {
            bool flag         = peer.Team == this.Mission.AttackerTeam;
            Team defenderTeam = this.Mission.DefenderTeam;

            MultiplayerClassDivisions.MPHeroClass mpHeroClass = MultiplayerClassDivisions.GetMPHeroClasses(MBObjectManager.Instance.GetObject <BasicCultureObject>(flag ? MultiplayerOptions.OptionType.CultureTeam1.GetStrValue() : MultiplayerOptions.OptionType.CultureTeam2.GetStrValue())).ElementAt <MultiplayerClassDivisions.MPHeroClass>(peer.SelectedTroopIndex);
            this.GameMode.ChangeCurrentGoldForPeer(peer, this.GameMode.GetCurrentGoldForPeer(peer) - mpHeroClass.TroopCost);
        }
 public void SetEarlyAgentVisualsDespawning(MissionPeer missionPeer, bool canDespawnEarly = true)
 {
     if (missionPeer == null || !this.AllowEarlyAgentVisualsDespawning(missionPeer))
     {
         return;
     }
     missionPeer.EquipmentUpdatingExpired = canDespawnEarly;
 }
        private void UnequipItem(EquipmentIndex itemIndex, MissionPeer peer)
        {
            Equipment playerEquipment = this._playerEquipments[peer];

            if (playerEquipment[itemIndex].Item == null)
            {
                return;
            }
            this.UnequipItem(itemIndex, playerEquipment);
        }
 protected void SpawnEquipmentUpdated(MissionPeer lobbyPeer, Equipment equipment)
 {
     if (!GameNetwork.IsServer || lobbyPeer == null || (!this.SpawningBehaviour.CanUpdateSpawnEquipment(lobbyPeer) || !lobbyPeer.HasSpawnedAgentVisuals))
     {
         return;
     }
     GameNetwork.BeginBroadcastModuleEvent();
     GameNetwork.WriteMessage((GameNetworkMessage) new EquipEquipmentToPeer(lobbyPeer.GetNetworkPeer(), equipment));
     GameNetwork.EndBroadcastModuleEvent(GameNetwork.EventBroadcastFlags.None);
 }
Ejemplo n.º 11
0
        private void HandleServerEventCreateBannerForPeer(NetworkMessages.FromServer.CreateBanner message)
        {
            MissionPeer component = message.Peer.GetComponent <MissionPeer>();

            if (component == null)
            {
                return;
            }
            component.Peer.BannerCode = message.BannerCode;
        }
 protected void ResetSpawnCounts()
 {
     foreach (NetworkCommunicator networkPeer in GameNetwork.NetworkPeers)
     {
         MissionPeer component = networkPeer.GetComponent <MissionPeer>();
         if (component != null)
         {
             component.SpawnCountThisRound = 0;
         }
     }
 }
Ejemplo n.º 13
0
        public void ForfeitSpawning(NetworkCommunicator peer)
        {
            MissionPeer component = peer.GetComponent <MissionPeer>();

            if (component == null || !component.HasSpawnedAgentVisuals || (!this.UseGold() || !this.RoundController.IsRoundInProgress))
            {
                return;
            }
            Mission.Current.GetMissionBehaviour <MultiplayerMissionAgentVisualSpawnComponent>().RemoveAgentVisuals(component, true);
            this.ChangeCurrentGoldForPeer(component, -1);
        }
Ejemplo n.º 14
0
 public bool Check(MissionPeer peer)
 {
     foreach (MPPerkCondition condition in (IEnumerable <MPPerkCondition>) this.Conditions)
     {
         if (!condition.Check(peer))
         {
             return(false);
         }
     }
     return(true);
 }
Ejemplo n.º 15
0
        protected override void HandleNewClientAfterSynchronized(NetworkCommunicator networkPeer)
        {
            MissionPeer component = networkPeer.GetComponent <MissionPeer>();

            component.Team = this.Mission.AttackerTeam;
            if (networkPeer.IsServerPeer)
            {
                return;
            }
            this._missionNetworkComponent?.OnPeerSelectedTeam(component);
        }
            public int GetScore(MissionPeer peer)
            {
                if (this._properties == null)
                {
                    return(0);
                }
                string s      = peer != null ? ((IEnumerable <MissionScoreboardComponent.ScoreboardHeader>) this._properties).Single <MissionScoreboardComponent.ScoreboardHeader>((Func <MissionScoreboardComponent.ScoreboardHeader, bool>)(x => x.Id == "score")).GetValueOf(peer) : ((IEnumerable <MissionScoreboardComponent.ScoreboardHeader>) this._properties).Single <MissionScoreboardComponent.ScoreboardHeader>((Func <MissionScoreboardComponent.ScoreboardHeader, bool>)(x => x.Id == "score")).GetValueOf(this.BotScores);
                int    result = 0;

                int.TryParse(s, out result);
                return(result);
            }
Ejemplo n.º 17
0
 private bool ServerPrepareAndSendMessage(
     NetworkCommunicator fromPeer,
     bool toTeamOnly,
     string message)
 {
     if (fromPeer.IsMuted)
     {
         GameNetwork.BeginModuleEventAsServer(fromPeer);
         GameNetwork.WriteMessage((GameNetworkMessage) new NetworkMessages.FromServer.ServerMessage("str_multiplayer_muted_message", true));
         GameNetwork.EndModuleEventAsServer();
         return(true);
     }
     if (!GameNetwork.IsDedicatedServer && fromPeer != GameNetwork.MyPeer && !this._mutedPlayers.Contains(fromPeer.VirtualPlayer.Id))
     {
         MissionPeer component1 = GameNetwork.MyPeer.GetComponent <MissionPeer>();
         if (component1 == null)
         {
             return(false);
         }
         bool flag;
         if (toTeamOnly)
         {
             if (component1 == null)
             {
                 return(false);
             }
             MissionPeer component2 = fromPeer.GetComponent <MissionPeer>();
             if (component2 == null)
             {
                 return(false);
             }
             flag = component1.Team == component2.Team;
         }
         else
         {
             flag = true;
         }
         if (flag)
         {
             this.OnPlayerMessageReceived(fromPeer, message, toTeamOnly);
         }
     }
     if (toTeamOnly)
     {
         ChatBox.ServerSendMessageToTeam(fromPeer, message);
     }
     else
     {
         ChatBox.ServerSendMessageToEveryone(fromPeer, message);
     }
     return(true);
 }
 public void PlayerPropertiesChanged(MissionPeer player)
 {
     if (GameNetwork.IsDedicatedServer)
     {
         return;
     }
     this.CalculateTotalNumbers();
     if (this.OnPlayerPropertiesChanged == null || player.Team == null || player.Team == Mission.Current.SpectatorTeam)
     {
         return;
     }
     this.OnPlayerPropertiesChanged(player.Team.Side, player);
 }
Ejemplo n.º 19
0
 public override bool CheckForWarmupEnd()
 {
     int[] numArray = new int[2];
     foreach (NetworkCommunicator networkPeer in GameNetwork.NetworkPeers)
     {
         MissionPeer component = networkPeer.GetComponent <MissionPeer>();
         if (networkPeer.IsSynchronized && (component?.Team != null && component.Team.Side != BattleSideEnum.None))
         {
             ++numArray[(int)component.Team.Side];
         }
     }
     return(((IEnumerable <int>)numArray).Sum() >= MultiplayerOptions.OptionType.MaxNumberOfPlayers.GetIntValue());
 }
Ejemplo n.º 20
0
 public override void OnClearScene()
 {
     foreach (NetworkCommunicator networkPeer in GameNetwork.NetworkPeers)
     {
         MissionPeer component = networkPeer.GetComponent <MissionPeer>();
         if (component != null)
         {
             component.BotsUnderControlAlive = 0;
             component.BotsUnderControlTotal = 0;
             component.ControlledFormation   = (Formation)null;
         }
     }
 }
        public void PlayerPropertiesChanged(NetworkCommunicator player)
        {
            if (GameNetwork.IsDedicatedServer)
            {
                return;
            }
            MissionPeer component = player.GetComponent <MissionPeer>();

            if (component == null)
            {
                return;
            }
            this.PlayerPropertiesChanged(component);
        }
Ejemplo n.º 22
0
        private void MakePlayerFormationCharge(NetworkCommunicator peer)
        {
            if (!peer.IsSynchronized)
            {
                return;
            }
            MissionPeer component = peer.GetComponent <MissionPeer>();

            if (component.ControlledFormation == null || component.ControlledAgent == null)
            {
                return;
            }
            component.Team.GetOrderControllerOf(component.ControlledAgent).SetOrder(OrderType.Charge);
        }
Ejemplo n.º 23
0
        public override void OnAgentRemoved(
            Agent affectedAgent,
            Agent affectorAgent,
            AgentState agentState,
            KillingBlow killingBlow)
        {
            base.OnAgentRemoved(affectedAgent, affectorAgent, agentState, killingBlow);
            if (!GameNetwork.IsServer || this.CurrentMultiplayerState == MissionLobbyComponent.MultiplayerGameState.Ending || agentState != AgentState.Killed && agentState != AgentState.Unconscious && agentState != AgentState.Routed || (affectedAgent == null || !affectedAgent.IsHuman))
            {
                return;
            }
            MissionPeer assistorPeer = affectorAgent?.MissionPeer != null?this.RemoveHittersAndGetAssistorPeer(affectorAgent.MissionPeer, affectedAgent) : (MissionPeer)null;

            if (affectedAgent.MissionPeer != null)
            {
                this.OnPlayerDies(affectedAgent.MissionPeer, assistorPeer);
            }
            else
            {
                this.OnBotDies(affectedAgent, assistorPeer);
            }
            if (affectorAgent == null || !affectorAgent.IsHuman)
            {
                return;
            }
            if (affectorAgent != affectedAgent)
            {
                if (affectorAgent.MissionPeer != null)
                {
                    this.OnPlayerKills(affectorAgent.MissionPeer, affectedAgent, assistorPeer);
                }
                else
                {
                    this.OnBotKills(affectorAgent, affectedAgent);
                }
            }
            else
            {
                if (affectorAgent.MissionPeer == null)
                {
                    return;
                }
                affectorAgent.MissionPeer.Score -= this._gameMode.GetScoreForKill(affectedAgent);
                this._missionScoreboardComponent.PlayerPropertiesChanged(affectorAgent.MissionPeer.GetNetworkPeer());
                GameNetwork.BeginBroadcastModuleEvent();
                GameNetwork.WriteMessage((GameNetworkMessage) new KillDeathCountChange(affectorAgent.MissionPeer.GetNetworkPeer(), affectedAgent.MissionPeer.GetNetworkPeer(), affectorAgent.MissionPeer.KillCount, affectorAgent.MissionPeer.AssistCount, affectorAgent.MissionPeer.DeathCount, affectorAgent.MissionPeer.Score));
                GameNetwork.EndBroadcastModuleEvent(GameNetwork.EventBroadcastFlags.None);
            }
        }
Ejemplo n.º 24
0
 protected override void OnEndMission()
 {
     if (!this.UseGold())
     {
         return;
     }
     foreach (NetworkCommunicator networkPeer in GameNetwork.NetworkPeers)
     {
         MissionPeer component = networkPeer.GetComponent <MissionPeer>();
         if (component != null)
         {
             this.ChangeCurrentGoldForPeer(component, -1);
         }
     }
 }
        public override void OnMissionTick(float dt)
        {
            base.OnMissionTick(dt);
            if (this._myEquipmentInitialized || GameNetwork.IsServer || !GameNetwork.IsMyPeerReady)
            {
                return;
            }
            MissionPeer component = GameNetwork.MyPeer.GetComponent <MissionPeer>();

            if (component == null)
            {
                return;
            }
            this.AddPeerEquipment(component);
        }
Ejemplo n.º 26
0
        public void OnBotsControlledChanged(
            MissionPeer missionPeer,
            int botAliveCount,
            int botTotalCount)
        {
            missionPeer.BotsUnderControlAlive = botAliveCount;
            missionPeer.BotsUnderControlTotal = botTotalCount;
            Action <NetworkCommunicator> controlledChangedEvent = this.OnBotsControlledChangedEvent;

            if (controlledChangedEvent == null)
            {
                return;
            }
            controlledChangedEvent(missionPeer.GetNetworkPeer());
        }
 private void OnPeerEquipmentUpdated(MissionPeer peer)
 {
     if (!this.IsSpawningEnabled || !this.CanUpdateSpawnEquipment(peer))
     {
         return;
     }
     peer.HasSpawnedAgentVisuals = false;
     Debug.Print("HasSpawnedAgentVisuals = false for peer: " + peer.Name + " because he just updated his equipment");
     if (peer.ControlledFormation == null)
     {
         return;
     }
     peer.ControlledFormation.HasBeenPositioned = false;
     peer.ControlledFormation.GroupSpawnIndex   = 0;
 }
Ejemplo n.º 28
0
        private static void ServerSendMessageToTeam(NetworkCommunicator networkPeer, string message)
        {
            MissionPeer missionPeer = networkPeer.GetComponent <MissionPeer>();

            if (missionPeer.Team == null)
            {
                return;
            }
            foreach (NetworkCommunicator communicator in GameNetwork.NetworkPeers.Where <NetworkCommunicator>((Func <NetworkCommunicator, bool>)(x => !x.IsServerPeer && x.IsSynchronized && x != networkPeer && x.GetComponent <MissionPeer>().Team == missionPeer.Team)))
            {
                GameNetwork.BeginModuleEventAsServer(communicator);
                GameNetwork.WriteMessage((GameNetworkMessage) new NetworkMessages.FromServer.PlayerMessageTeam(networkPeer, message));
                GameNetwork.EndModuleEventAsServer();
            }
        }
Ejemplo n.º 29
0
        public static List <List <IReadOnlyPerkObject> > GetAvailablePerksForPeer(
            MissionPeer missionPeer)
        {
            List <List <IReadOnlyPerkObject> > readOnlyPerkObjectListList = new List <List <IReadOnlyPerkObject> >();

            if (missionPeer?.Team == null)
            {
                return(readOnlyPerkObjectListList);
            }
            MultiplayerClassDivisions.MPHeroClass heroClassForPeer = MultiplayerClassDivisions.GetMPHeroClassForPeer(missionPeer);
            for (int index = 0; index < 3; ++index)
            {
                readOnlyPerkObjectListList.Add(heroClassForPeer.GetAllAvailablePerksForListIndex(index).ToList <IReadOnlyPerkObject>());
            }
            return(readOnlyPerkObjectListList);
        }
        public bool ShouldSpawnVisualsForServer(NetworkCommunicator spawningNetworkPeer)
        {
            if (GameNetwork.IsDedicatedServer)
            {
                return(false);
            }
            NetworkCommunicator myPeer      = GameNetwork.MyPeer;
            MissionPeer         missionPeer = myPeer != null?myPeer.GetComponent <MissionPeer>() : (MissionPeer)null;

            if (missionPeer == null)
            {
                return(false);
            }
            MissionPeer component = spawningNetworkPeer.GetComponent <MissionPeer>();

            return(!this.IsGameModeHidingAllAgentVisuals && component.Team == missionPeer.Team || spawningNetworkPeer.IsServerPeer);
        }