コード例 #1
0
        public override void OnScoreKill(Player killer, Player assist, Player target, AttackAttribute attackAttribute,
                                         LongPeerId scoreTarget, LongPeerId scoreKiller, LongPeerId scoreAssist)
        {
            base.OnScoreKill(killer, assist, target, attackAttribute, scoreTarget, scoreKiller, scoreAssist);

            if (Room.TeamManager.Values.Any(team => team.Score >= Room.Options.ScoreLimit))
            {
                return;
            }

            if (!ScoreIsPlaying())
            {
                return;
            }

            if (!StateMachine.IsInState(GameRuleState.FirstHalf) &&
                !StateMachine.IsInState(GameRuleState.SecondHalf))
            {
                return;
            }

            if (scoreTarget.PeerId.Category == PlayerCategory.Player)
            {
                killer.RoomInfo.Team.Score++;
            }
        }
コード例 #2
0
        public void OnScoreDefense(Player killer, Player assist, Player target, AttackAttribute attackAttribute,
                                   LongPeerId scoreTarget, LongPeerId scoreKiller, LongPeerId scoreAssist)
        {
            var realplayerKiller = (killer?.RoomInfo.PeerId.EqualSlot(scoreKiller) ?? false) &&
                                   killer.RoomInfo.PeerId.IsPlayer();
            var realplayerTarget = (target?.RoomInfo.PeerId.EqualSlot(scoreTarget) ?? false) &&
                                   target.RoomInfo.PeerId.IsPlayer();
            var realplayerAssist = (assist?.RoomInfo.PeerId.EqualSlot(scoreAssist) ?? false) &&
                                   assist.RoomInfo.PeerId.IsPlayer();

            if (realplayerTarget)
            {
                Respawn(target);
            }

            if (!ScoreIsPlaying())
            {
                return;
            }

            if (assist != null)
            {
                Room.Broadcast(new ScoreDefenseAssistAckMessage(new ScoreAssistDto(scoreKiller, scoreAssist,
                                                                                   scoreTarget, attackAttribute)));
            }
            else
            {
                Room.Broadcast(new ScoreDefenseAckMessage(new ScoreDto(scoreKiller, scoreTarget, attackAttribute)));
            }
        }
コード例 #3
0
        public override void OnScoreKill(Player killer, Player assist, Player target, AttackAttribute attackAttribute,
                                         LongPeerId scoreTarget, LongPeerId scoreKiller, LongPeerId scoreAssist)
        {
            var realplayer = Room.TeamManager.Players.Where(p => p.RoomInfo.Slot == scoreTarget.PeerId.Slot &&
                                                            p.RoomInfo.PeerId == scoreTarget.PeerId &&
                                                            p.RoomInfo.PeerId.PeerId.Id == scoreTarget.PeerId.Id &&
                                                            p.RoomInfo.PeerId.AccountId == scoreTarget.AccountId &&
                                                            p.RoomInfo.PeerId.PeerId.Category ==
                                                            scoreTarget.PeerId.Category);

            if (realplayer.Any())
            {
                Respawn(realplayer.First());
            }

            if (scoreAssist != null)
            {
                Room.Broadcast(
                    new ScoreKillAssistAckMessage(new ScoreAssistDto(scoreKiller, scoreAssist,
                                                                     scoreTarget, attackAttribute)));
            }
            else
            {
                Room.Broadcast(
                    new ScoreKillAckMessage(new ScoreDto(scoreKiller, scoreTarget,
                                                         attackAttribute)));
            }
        }
コード例 #4
0
        public virtual void OnScoreKill(Player killer, Player assist, Player target, AttackAttribute attackAttribute,
                                        LongPeerId scoreTarget = null, LongPeerId scoreKiller = null, LongPeerId scoreAssist = null)
        {
            killer.RoomInfo.Stats.Kills++;
            target.RoomInfo.Stats.Deaths++;

            // Player statistical record
            killer.stats.Kills++;
            target.stats.Deaths++;

            Respawn(target);
            if (assist != null)
            {
                assist.RoomInfo.Stats.KillAssists++;
                assist.stats.KillAssists++;

                Room.Broadcast(
                    new ScoreKillAssistAckMessage(new ScoreAssistDto(killer.RoomInfo.PeerId, assist.RoomInfo.PeerId,
                                                                     target.RoomInfo.PeerId, attackAttribute)));
            }
            else
            {
                Room.Broadcast(
                    new ScoreKillAckMessage(new ScoreDto(killer.RoomInfo.PeerId, target.RoomInfo.PeerId,
                                                         attackAttribute)));
            }
        }
        public void OnScoreGoal(Player plr, LongPeerId Target)
        {
            IsInTouchdownTraining = true;

            Player assist = null;

            //if (_TouchdownTrainingAssistHelper.IsAssist(plr))
            //{
            //    assist = _TouchdownTrainingAssistHelper.LastPlayer;
            //    GetRecord(assist).TDAssistScore++;
            //}

            plr.RoomInfo.Team.Score++;
            GetRecord(plr).TDScore++;

            if (assist != null)
            {
                Room.Broadcast(new ScoreGoalAssistAckMessage(Target, assist.RoomInfo.PeerId));
            }
            else
            {
                Room.Broadcast(new ScoreGoalAckMessage(Target));
            }

            var halfTime = TimeSpan.FromSeconds(Room.Options.TimeLimit.TotalSeconds / 2);
            var diff     = halfTime - RoundTime;

            if (diff <= TimeSpan.FromSeconds(10)) // ToDo use const
            {
                return;
            }

            Room.Broadcast(new GameEventMessageAckMessage(GameEventMessage.NextRoundIn, (ulong)TouchdownTrainingWaitTime.TotalMilliseconds, 0, 0, ""));
            _TouchdownTrainingTime = TimeSpan.Zero;
        }
コード例 #6
0
        public virtual void OnScoreTeamKill(Player killer, Player target, AttackAttribute attackAttribute,
                                            LongPeerId scoreKiller, LongPeerId scoreTarget)
        {
            var realplayerTarget = (target?.RoomInfo.PeerId.EqualSlot(scoreTarget) ?? false) &&
                                   target.RoomInfo.PeerId.IsPlayer();

            if (realplayerTarget)
            {
                Respawn(target);
            }

            if (!ScoreIsPlaying())
            {
                return;
            }

            if (realplayerTarget)
            {
                Respawn(target);
                target.RoomInfo.Stats.Deaths++;
                target.stats.Deaths++;
            }

            Room.Broadcast(new ScoreTeamKillAckMessage(new Score2Dto(scoreKiller, scoreTarget, attackAttribute)));
        }
コード例 #7
0
        //public override void OnScoreTeamKill(Player killer, Player target, AttackAttribute attackAttribute)
        //{
        //    if (_captainHelper.Dead(target) && _captainHelper.Any())
        //        SubRoundEnd();
        //
        //    GetRecord(target).Deaths++;
        //
        //    base.OnScoreTeamKill(killer, target, attackAttribute);
        //}

        public override void OnScoreKill(Player killer, Player assist, Player target, AttackAttribute attackAttribute,
                                         LongPeerId scoreTarget = null, LongPeerId scoreKiller = null, LongPeerId scoreAssist = null)
        {
            if (_captainHelper.Dead(target))
            {
                if (_captainHelper.Any())
                {
                    SubRoundEnd();
                }

                GetRecord(killer).KillCaptains++;
                if (assist != null)
                {
                    GetRecord(assist).KillAssistCaptains++;
                }
            }
            else
            {
                GetRecord(killer).Kills++;
                if (assist != null)
                {
                    GetRecord(assist).KillAssists++;
                }
            }

            GetRecord(target).Deaths++;

            base.OnScoreKill(killer, null, target, attackAttribute);
        }
コード例 #8
0
        public override void OnScoreKill(Player killer, Player assist, Player target, AttackAttribute attackAttribute,
                                         LongPeerId scoreTarget, LongPeerId scoreKiller, LongPeerId scoreAssist)
        {
            base.OnScoreKill(killer, assist, target, attackAttribute, scoreTarget, scoreKiller, scoreAssist);

            if (!ScoreIsPlaying())
            {
                return;
            }

            var realPlayer = (killer?.RoomInfo.PeerId.EqualSlot(scoreTarget) ?? false) &&
                             killer.RoomInfo.PeerId.IsPlayer();

            if (realPlayer)
            {
                killer.RoomInfo.Team.Score++;
            }
            else
            {
                var enemyTeam = Room.TeamManager.FirstOrDefault(x => x.Key != Room.Master.RoomInfo.Team.Team);
                if (enemyTeam.Value != null)
                {
                    enemyTeam.Value.Score++;
                }
            }
        }
コード例 #9
0
        public override void OnScoreSuicide(Player plr, LongPeerId scoreTarget = null)
        {
            if (_disallowactions)
            {
                return;
            }
            if (!_waitingNextChaser)
            {
                base.OnScoreSuicide(plr, scoreTarget);
                if (Chaser == plr)
                {
                    ChaserLose();
                }

                if (!ArePlayersAlive())
                {
                    ChaserWin();
                }

                if (plr != Chaser)
                {
                    plr.RoomInfo.State = PlayerState.Dead;
                }

                NextTarget();
            }
        }
コード例 #10
0
        public void OnScoreGoal(Player plr, LongPeerId scoreTarget)
        {
            if (Room.TeamManager.Values.Any(team => team.Score >= Room.Options.ScoreLimit))
            {
                return;
            }

            if (!ScoreIsPlaying())
            {
                return;
            }

            IsInTouchdown = true;

            var realPlayer       = (plr?.RoomInfo.PeerId.EqualSlot(scoreTarget) ?? false) && plr.RoomInfo.PeerId.IsPlayer();
            var realPlayerAssist = (_lastPlayer?.RoomInfo.PeerId.EqualSlot(_lastOwner) ?? false) &&
                                   _lastPlayer.RoomInfo.PeerId.IsPlayer();

            if (realPlayer)
            {
                plr.RoomInfo.Team.Score++;
                GetRecord(plr).TDScore++;
                GetStats(plr).TD++;
            }

            var validTeam = false;

            if (realPlayerAssist && _lastPlayer.RoomInfo.Team != plr?.RoomInfo.Team)
            {
                var assist = _lastPlayer;
                GetRecord(assist).TDAssistScore++;
                GetStats(assist).TDAssist++;
                validTeam = true;
            }

            if (IsAssistValid && validTeam)
            {
                Room.Broadcast(new ScoreGoalAssistAckMessage(_ballOwner, _lastOwner));
            }
            else
            {
                Room.Broadcast(new ScoreGoalAckMessage(_ballOwner));
            }

            _ballOwner  = 0;
            _lastOwner  = 0;
            _lastPlayer = null;

            var halfTime = TimeSpan.FromSeconds(Room.Options.TimeLimit.TotalSeconds / 2);
            var diff     = halfTime - RoundTime;

            if (diff <= TimeSpan.FromSeconds(10)) // ToDo use const
            {
                return;
            }

            Room.Broadcast(new GameEventMessageAckMessage(GameEventMessage.NextRoundIn,
                                                          (ulong)TouchdownWaitTime.TotalMilliseconds, 0, 0, ""));
            _touchdownTime = TimeSpan.Zero;
        }
コード例 #11
0
        public void OnScoreDefense(Player killer, Player assist, Player target, AttackAttribute attackAttribute,
                                   LongPeerId Target, LongPeerId Killer, LongPeerId Assist)
        {
            if (IsInTouchdownTraining)
            {
                return;
            }

            var realplayer = Room.Players.Values.Where(p => p.RoomInfo.Slot == Target.PeerId.Slot &&
                                                       p.RoomInfo.PeerId == Target.PeerId &&
                                                       p.RoomInfo.PeerId.PeerId.Id == Target.PeerId.Id &&
                                                       p.RoomInfo.PeerId.AccountId == Target.AccountId &&
                                                       p.RoomInfo.PeerId.PeerId.Category ==
                                                       Target.PeerId.Category);

            if (realplayer.Any())
            {
                Respawn(realplayer.First());
            }
            //GetRecord(killer).DefenseScore++;
            //if (assist != null)
            //    GetRecord(assist).DefenseAssistScore++;

            if (assist != null)
            {
                Room.Broadcast(
                    new ScoreDefenseAssistAckMessage(new ScoreAssistDto(Killer, Assist, Target, attackAttribute)));
            }
            else
            {
                Room.Broadcast(new ScoreDefenseAckMessage(new ScoreDto(Killer, Target, attackAttribute)));
            }
        }
コード例 #12
0
        public void OnScoreRebound(Player newPlr, Player oldPlr, LongPeerId newid, LongPeerId oldId)
        {
            if (Room.TeamManager.Values.Any(team => team.Score >= Room.Options.ScoreLimit))
            {
                return;
            }

            if (!ScoreIsPlaying())
            {
                return;
            }

            if (oldPlr != null)
            {
                _lastPlayer = oldPlr;
            }

            if (newPlr != null)
            {
                GetRecord(newPlr).OffenseReboundScore++;
                GetStats(newPlr).OffenseRebound++;
            }

            _lastOwner = _ballOwner;
            _ballOwner = newid;
            LastTime   = DateTime.Now;

            Room.Broadcast(new ScoreReboundAckMessage(newid, oldId));
        }
コード例 #13
0
        public virtual void OnScoreHeal(Player plr, LongPeerId scoreTarget = null)
        {
            Room.Broadcast(new ScoreHealAssistAckMessage(plr.RoomInfo.PeerId));

            // Statistical record
            plr.stats.Heal++;
        }
コード例 #14
0
        public override void OnScoreKill(Player killer, Player assist, Player target, AttackAttribute attackAttribute,
            LongPeerId scoreTarget, LongPeerId scoreKiller, LongPeerId scoreAssist)
        {
            base.OnScoreKill(killer, assist, target, attackAttribute, scoreTarget, scoreKiller, scoreAssist);

              if (!ScoreIsPlaying())
            return;

              if (scoreTarget.PeerId.Category == PlayerCategory.Player)
              {
            var targetTeam = target?.RoomInfo?.Team;
            if (targetTeam != null && PlayersCaptain.TryRemove(target, out _))
            {
              var killerTeam = killer?.RoomInfo?.Team;
              if (killerTeam != null)
              {
            GetRecord(killer).KillCaptains++;
            if (assist != null)
              GetRecord(assist).KillAssistCaptains++;
              }

              GetRecord(target).Deaths++;
            }
            else if (targetTeam != null)
            {
              GetRecord(killer).Kills++;
              if (assist != null)
            GetRecord(assist).KillAssists++;
            }
              }
        }
コード例 #15
0
 public ScoreAssist2Dto(LongPeerId killer, LongPeerId assist, LongPeerId target, AttackAttribute weapon)
 {
     Killer = killer;
     Assist = assist;
     Target = target;
     Weapon = weapon;
 }
コード例 #16
0
 public override void OnScoreSuicide(Player plr, LongPeerId Target = null)
 {
     if (Chaser == plr)
     {
         ChaserLose();
     }
     base.OnScoreSuicide(plr);
 }
コード例 #17
0
 public override void OnScoreTeamKill(Player killer, Player target, AttackAttribute attackAttribute,
                                      LongPeerId scoreKiller, LongPeerId scoreTarget)
 {
     Respawn(Room.Creator);
     Room.Broadcast(
         new ScoreTeamKillAckMessage(new Score2Dto(scoreKiller, scoreTarget,
                                                   attackAttribute)));
 }
コード例 #18
0
        public virtual void OnScoreSuicide(Player plr, LongPeerId scoreTarget = null)
        {
            Respawn(plr);
            plr.RoomInfo.Stats.Deaths++;

            // Statistical record
            plr.stats.Deaths++;
            Room.Broadcast(new ScoreSuicideAckMessage(plr.RoomInfo.PeerId, AttackAttribute.KillOneSelf));
        }
コード例 #19
0
        public override void OnScoreSuicide(Player plr, LongPeerId Target = null)
        {
            if (IsInTouchdown)
            {
                return;
            }

            base.OnScoreSuicide(plr);
        }
コード例 #20
0
        public override void OnScoreHeal(Player plr, LongPeerId Target = null)
        {
            if (IsInTouchdown)
            {
                return;
            }

            GetRecord(plr).HealScore++;
            base.OnScoreHeal(plr);
        }
        public override void OnScoreHeal(Player plr, LongPeerId Target)
        {
            if (IsInTouchdownTraining)
            {
                return;
            }

            Room.Broadcast(new ScoreHealAssistAckMessage(Target));
            //base.OnScoreHeal(plr);
        }
コード例 #22
0
        public virtual void OnScoreTeamKill(Player killer, Player target, AttackAttribute attackAttribute,
                                            LongPeerId scoreKiller = null, LongPeerId scoreTarget = null)
        {
            target.RoomInfo.Stats.Deaths++;

            Respawn(target);
            Room.Broadcast(
                new ScoreTeamKillAckMessage(new Score2Dto(killer.RoomInfo.PeerId, target.RoomInfo.PeerId,
                                                          attackAttribute)));
        }
コード例 #23
0
        public override void OnScoreTeamKill(Player killer, Player target, AttackAttribute attackAttribute,
                                             LongPeerId scoreKiller = null, LongPeerId scoreTarget = null)
        {
            if (IsInTouchdown)
            {
                return;
            }

            base.OnScoreTeamKill(killer, target, attackAttribute, scoreKiller, scoreTarget);
        }
        public override void OnScoreSuicide(Player plr, LongPeerId Target)
        {
            if (IsInTouchdownTraining)
            {
                return;
            }

            Respawn(plr);
            Room.Broadcast(new ScoreSuicideAckMessage(Target, AttackAttribute.KillOneSelf));
            //base.OnScoreSuicide(plr);
        }
コード例 #25
0
        public override void OnScoreSuicide(Player plr, LongPeerId scoreTarget)
        {
            if (_captainHelper.Dead(plr) && _captainHelper.Any())
            {
                SubRoundEnd();
            }

            GetPlayerRecord(plr).Suicides++;

            base.OnScoreSuicide(plr);
        }
コード例 #26
0
 public override void OnScoreKill(Player killer, Player assist, Player target, AttackAttribute attackAttribute,
                                  LongPeerId scoreTarget = null, LongPeerId scoreKiller = null, LongPeerId scoreAssist = null)
 {
     base.OnScoreKill(killer, assist, target, attackAttribute);
     if (scoreTarget.PeerId.Category != PlayerCategory.Player)
     {
     }
     else
     {
         killer.RoomInfo.Team.Score += 1;
     }
 }
コード例 #27
0
        public virtual void OnScoreKill(Player killer, Player assist, Player target, AttackAttribute attackAttribute,
                                        LongPeerId scoreTarget, LongPeerId scoreKiller, LongPeerId scoreAssist)
        {
            var realplayerKiller = (killer?.RoomInfo.PeerId.EqualSlot(scoreKiller) ?? false) &&
                                   killer.RoomInfo.PeerId.IsPlayer();
            var realplayerTarget = (target?.RoomInfo.PeerId.EqualSlot(scoreTarget) ?? false) &&
                                   target.RoomInfo.PeerId.IsPlayer();
            var realplayerAssist = (assist?.RoomInfo.PeerId.EqualSlot(scoreAssist) ?? false) &&
                                   assist.RoomInfo.PeerId.IsPlayer();

            if (realplayerTarget)
            {
                Respawn(target);
            }

            if (!ScoreIsPlaying())
            {
                return;
            }

            if (realplayerKiller)
            {
                killer.RoomInfo.Stats.Kills++;
                killer.stats.Kills++;
            }

            if (realplayerTarget)
            {
                target.RoomInfo.Stats.Deaths++;
                target.stats.Deaths++;
            }

            if (realplayerAssist)
            {
                assist.RoomInfo.Stats.KillAssists++;
                assist.stats.KillAssists++;
                Room.Broadcast(new ScoreKillAssistAckMessage(new ScoreAssistDto(scoreKiller, scoreAssist, scoreTarget,
                                                                                attackAttribute)));
            }
            else
            {
                Room.Broadcast(new ScoreKillAckMessage(new ScoreDto(scoreKiller, scoreTarget, attackAttribute)));
            }
            if (killer.PlayerCoinBuff.FindBuff(BuffType.PEN).IsEnabled)
            {
                killer.LuckyShot.TryShot(LuckyShotType.PEN);
            }

            if (killer.PlayerCoinBuff.FindBuff(BuffType.EXP).IsEnabled)
            {
                killer.LuckyShot.TryShot(LuckyShotType.EXP);
            }
        }
コード例 #28
0
        public void OnScoreGoal(Player plr, LongPeerId scoreTarget)
        {
            if (!ScoreIsPlaying())
            {
                return;
            }

            IsInTouchdown = true;

            var realPlayer       = (plr?.RoomInfo.PeerId.EqualSlot(scoreTarget) ?? false) && plr.RoomInfo.PeerId.IsPlayer();
            var realPlayerAssist = (_lastPlayer?.RoomInfo.PeerId.EqualSlot(_lastOwner) ?? false) &&
                                   _lastPlayer.RoomInfo.PeerId.IsPlayer();

            if (realPlayer)
            {
                plr.RoomInfo.Team.Score++;
            }
            else
            {
                var enemyTeam = Room.TeamManager.FirstOrDefault(x => x.Key != Room.Master.RoomInfo.Team.Team);
                if (enemyTeam.Value != null)
                {
                    enemyTeam.Value.Score++;
                }
            }

            if (IsAssistValid)
            {
                Room.Broadcast(new ScoreGoalAssistAckMessage(_ballOwner, _lastOwner));
            }
            else
            {
                Room.Broadcast(new ScoreGoalAckMessage(_ballOwner));
            }

            _ballOwner  = 0;
            _lastOwner  = 0;
            _lastPlayer = null;

            var halfTime = TimeSpan.FromSeconds(Room.Options.TimeLimit.TotalSeconds / 2);
            var diff     = halfTime - RoundTime;

            if (diff <= TimeSpan.FromSeconds(10)) // ToDo use const
            {
                return;
            }

            Room.Broadcast(new GameEventMessageAckMessage(GameEventMessage.NextRoundIn,
                                                          (ulong)TouchdownWaitTime.TotalMilliseconds, 0, 0, ""));
            _touchdownTime = TimeSpan.Zero;
        }
コード例 #29
0
    public virtual void OnScoreHeal(Player plr, LongPeerId scorePlr)
    {
      if (!ScoreIsPlaying())
        return;

      var realplayer = (plr?.RoomInfo.PeerId.EqualSlot(scorePlr) ?? false) && plr.RoomInfo.PeerId.IsPlayer();

      if (realplayer)
      {
        plr.stats.Heal++;
      }

      Room.Broadcast(new ScoreHealAssistAckMessage(scorePlr));
    }
コード例 #30
0
        public override void OnScoreSuicide(Player plr, LongPeerId scoreTarget)
        {
            var realplayer = Room.Players.Values.Where(p => p.RoomInfo.Slot == scoreTarget.PeerId.Slot &&
                                                       p.RoomInfo.PeerId == scoreTarget.PeerId &&
                                                       p.RoomInfo.PeerId.PeerId.Id == scoreTarget.PeerId.Id &&
                                                       p.RoomInfo.PeerId.AccountId == scoreTarget.AccountId &&
                                                       p.RoomInfo.PeerId.PeerId.Category == scoreTarget.PeerId.Category);

            if (realplayer.Any())
            {
                Respawn(realplayer.First());
            }
            Room.Broadcast(new ScoreSuicideAckMessage(scoreTarget, AttackAttribute.KillOneSelf));
            //base.OnScoreSuicide(plr);
        }