Represents the attack attribute
Inheritance: ConcreteAttribute
Example #1
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)));
            }
        }
        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)));
            }
        }
 public CharacterData(AttackAttribute attackAttribute, DefenseAttribute defenseAttribute, SpeedAttribute speedAttribute, HealthAttribute healthAttribute)
 {
     this.attackAttribute = attackAttribute;
     this.defenseAttribute = defenseAttribute;
     this.speedAttribute = speedAttribute;
     this.HealthAttribute = healthAttribute;
 }
 public override void OnScoreTeamKill(Player killer, Player target, AttackAttribute attackAttribute, LongPeerId Killer, LongPeerId Target)
 {
     Respawn(Room.Creator);
     Room.Broadcast(
         new ScoreTeamKillAckMessage(new Score2Dto(Killer, Target,
                                                   attackAttribute)));
 }
        public void OnScoreDefense(Player killer, Player assist, Player target, AttackAttribute attackAttribute)
        {
            if (IsInTouchdown)
            {
                return;
            }

            Respawn(target);
            GetRecord(killer).DefenseScore++;
            GetStats(killer).Defense++;
            if (assist != null)
            {
                GetRecord(assist).DefenseAssistScore++;
                GetStats(assist).DefenseAssist++;
            }

            if (assist != null)
            {
                Room.Broadcast(new ScoreDefenseAssistAckMessage(new ScoreAssistDto(killer.RoomInfo.PeerId,
                                                                                   assist.RoomInfo.PeerId, target.RoomInfo.PeerId, attackAttribute)));
            }
            else
            {
                Room.Broadcast(new ScoreDefenseAckMessage(new ScoreDto(killer.RoomInfo.PeerId, target.RoomInfo.PeerId,
                                                                       attackAttribute)));
            }
        }
Example #6
0
 public void SendScoreTeamKill(ScoreContext killer, ScoreContext target, AttackAttribute attackAttribute)
 {
     Room.Broadcast(new SScoreTeamKillAckMessage(
                        new Score2Dto(
                            killer.SentryId ?? killer.Player.PeerId,
                            target.SentryId ?? target.Player.PeerId, attackAttribute)));
 }
Example #7
0
        protected internal override void OnScoreKill(ScoreContext killer, ScoreContext assist, ScoreContext target,
                                                     AttackAttribute attackAttribute)
        {
            if (target.IsSentry)
            {
                SendScoreKill(killer, assist, target, attackAttribute);
                return;
            }

            killer.Score.Kills++;
            target.Score.Deaths++;

            if (assist != null)
            {
                assist.Score.KillAssists++;
            }

            SendScoreKill(killer, assist, target, attackAttribute);

            killer.Player.Team.Score++;
            if (killer.Player.Team.Score == Room.Options.ScoreLimit / 2)
            {
                StateMachine.StartHalfTime();
            }
            else if (killer.Player.Team.Score == Room.Options.ScoreLimit)
            {
                StateMachine.StartResult();
            }
        }
Example #8
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)));
        }
Example #9
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)));
            }
        }
Example #10
0
 /// <summary>
 /// 初始化英战斗属性
 /// </summary>
 /// <param name="baseHero"></param>
 /// <param name="inscriptionPage"></param>
 public void InitBatteryAttibute(BaseHero baseHero, InscriptionPage inscriptionPage)
 {
     baseAttibute    = CopyTool.DeepCopy <BaseAttribute>(baseHero.baseAttribute);
     attackAttibute  = CopyTool.DeepCopy <AttackAttribute>(baseHero.attackAttribute);
     defenseAttibute = CopyTool.DeepCopy <DefenseAttribute>(baseHero.defenseAttribute);
     InitInscriptionAttibute(inscriptionPage);
 }
Example #11
0
 public CharacterSpec(string name, AttackAttribute attackAttribute, CharacterStatus characterStatus, List <SkillType> skillTypes)
 {
     this.name            = name;
     this.attackAttribute = attackAttribute;
     this.status          = characterStatus;
     this.skillTypes      = skillTypes;
 }
 public CharacterData(AttackAttribute attackAttribute, DefenseAttribute defenseAttribute, SpeedAttribute speedAttribute, HealthAttribute healthAttribute)
 {
     this.attackAttribute  = attackAttribute;
     this.defenseAttribute = defenseAttribute;
     this.speedAttribute   = speedAttribute;
     this.HealthAttribute  = healthAttribute;
 }
Example #13
0
 public ScoreAssist2Dto(LongPeerId killer, LongPeerId assist, LongPeerId target, AttackAttribute weapon)
 {
     Killer = killer;
     Assist = assist;
     Target = target;
     Weapon = weapon;
 }
Example #14
0
        public static DamageResult GetDamage(
            BattleCharacter attacker,
            BattleCharacter target,
            AttackAttribute attackerSideAttackAttribute,
            float rate,
            bool calcurateCritical
            )
        {
            var result = new DamageResult();

            try
            {
                checked
                {
                    // 無効化された場合は0を返す
                    // TODO: 無効化した旨を返せるようにしたほうがいいかも
                    foreach (var s in target.Skills.OfType <BattleEvent.IGetDamageDisableFromAttackAttribute>())
                    {
                        if (s.IsDisable(attackerSideAttackAttribute))
                        {
                            result.damage = 0;
                            return(result);
                        }
                    }

                    var x = attacker.CurrentSpec.Status.attack.Value;
                    var a = target.CurrentSpec.Status.defense.Value;

                    var damage = x * (x - (a / 1.0f)) / 100.0f;
                    damage = damage < 0 ? 0 : damage;

                    // ダメージを受ける側が軽減率を所持している場合は適用する
                    foreach (var s in target.Skills.OfType <BattleEvent.IGetDamageReductionRateFromAttackAttribute>())
                    {
                        rate -= s.GetReductionRate(attackerSideAttackAttribute);
                    }

                    if (calcurateCritical)
                    {
                        var random   = Random.value;
                        var critical = attacker.CurrentSpec.Status.critical.Value / 100.0f;
                        if (critical > random)
                        {
                            damage           *= GetCriticalRate(attacker);
                            result.isCritical = true;
                        }
                    }

                    result.damage = Mathf.FloorToInt(damage * rate);

                    return(result);
                }
            }
            catch
            {
                result.damage = 99999;
                return(result);
            }
        }
Example #15
0
        public virtual void OnScoreTeamKill(Player killer, Player target, AttackAttribute attackAttribute)
        {
            target.RoomInfo.Stats.Deaths++;

            Room.Broadcast(
                new SScoreTeamKillAckMessage(new Score2Dto(killer.RoomInfo.PeerId, target.RoomInfo.PeerId,
                                                           attackAttribute)));
        }
Example #16
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);
        }
Example #17
0
        public virtual void OnScoreTeamKill(Player killer, Player target, AttackAttribute attackAttribute, LongPeerId Killer = null, LongPeerId Target = null)
        {
            target.RoomInfo.Stats.Deaths++;

            Respawn(target);
            Room.Broadcast(
                new ScoreTeamKillAckMessage(new Score2Dto(killer.RoomInfo.PeerId, target.RoomInfo.PeerId,
                                                          attackAttribute)));
        }
Example #18
0
        public override void OnScoreTeamKill(Player killer, Player target, AttackAttribute attackAttribute, LongPeerId ScoreTarget = null, LongPeerId ScoreKiller = null)
        {
            if (IsInTouchdown)
            {
                return;
            }

            base.OnScoreTeamKill(killer, target, attackAttribute);
        }
Example #19
0
        /// <summary>
        /// 攻撃属性によるダメージ軽減率を返す
        /// </summary>
        public static float GetAttackAttributeReductionRate(AttackAttribute attacker, AttackAttribute defense, int level)
        {
            if (attacker == defense)
            {
                return(Mathf.Clamp01(0.1f * level));
            }

            return(0.0f);
        }
        public override void OnScoreTeamKill(Player killer, Player target, AttackAttribute attackAttribute)
        {
            if (IsInTouchdown)
            {
                return;
            }

            base.OnScoreTeamKill(killer, target, attackAttribute);
        }
Example #21
0
        protected internal override void OnScoreTeamKill(ScoreContext killer, ScoreContext target,
                                                         AttackAttribute attackAttribute)
        {
            if (!target.IsSentry)
            {
                target.Score.Deaths++;
            }

            SendScoreTeamKill(killer, target, attackAttribute);
        }
Example #22
0
        /// <summary>
        /// 攻撃属性によるダメージ無効したか返す
        /// </summary>
        public static bool IsAttackAttributeDisable(AttackAttribute attacker, AttackAttribute defense, int level)
        {
            if (attacker == defense)
            {
                var random = Random.value;
                var value  = Mathf.Clamp01(0.1f * level);
                return(value > random);
            }

            return(false);
        }
Example #23
0
        protected internal override void OnScoreKill(ScoreContext killer, ScoreContext assist, ScoreContext target,
                                                     AttackAttribute attackAttribute)
        {
            killer.Score.Kills++;
            killer.Player.Team.Score++;
            SendScoreKill(killer, null, target, attackAttribute);

            if (killer.Score.Kills >= Room.Options.ScoreLimit)
            {
                StateMachine.StartResult();
            }
        }
Example #24
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);
            }
        }
Example #25
0
    public int GetDamage(AttackAttribute attackedAttribute)
    {
        int addAttack = GetAddAttack(attribute, attackedAttribute);

        if (addAttack == 1)
        {
            damage *= 2;
        }
        else if (addAttack == -1)
        {
            damage = Mathf.FloorToInt((float)damage * 0.5f);
        }

        return(damage);
    }
Example #26
0
        public override void OnScoreSuicide(Player target, LongPeerId scoreTarget, AttackAttribute icon)
        {
            base.OnScoreSuicide(target, scoreTarget, icon);

              if (!ScoreIsPlaying())
            return;

              if (scoreTarget.PeerId.Category == PlayerCategory.Player)
              {
            var targetTeam = target?.RoomInfo?.Team;
            if (targetTeam != null && PlayersCaptain.TryRemove(target, out _))
            {
              GetPlayerRecord(target).Suicides++;
            }
              }
        }
    private void CharacterTestDefault()
    {
        AttackAttribute attackAttribute = new AttackAttribute(1, 1.0f);
        DefenseAttribute defenseAttribute = new DefenseAttribute(1, 1.0f);
        HealthAttribute healthAttribute = new HealthAttribute(1,1.0f);
        SpeedAttribute speedAttribute = new SpeedAttribute(1,1.0f);

        this.character = new CharacterData(attackAttribute, defenseAttribute, speedAttribute, healthAttribute);

        Debug.Log ("-----Default Stats------");
        Debug.Log ("Health: " +this.character.GetHealthAttribute().GetModifiedValue() +
            " Attack: " +this.character.GetAttackAttribute().GetModifiedValue() +
            " Defense: " +this.character.GetDefenseAttribute().GetModifiedValue() +
            " Speed: " +this.character.GetSpeedAttribute().GetModifiedValue());
        Debug.Log ("----Default Stats End----");
    }
    private void CharacterTestDefault()
    {
        AttackAttribute  attackAttribute  = new AttackAttribute(1, 1.0f);
        DefenseAttribute defenseAttribute = new DefenseAttribute(1, 1.0f);
        HealthAttribute  healthAttribute  = new HealthAttribute(1, 1.0f);
        SpeedAttribute   speedAttribute   = new SpeedAttribute(1, 1.0f);

        this.character = new CharacterData(attackAttribute, defenseAttribute, speedAttribute, healthAttribute);

        Debug.Log("-----Default Stats------");
        Debug.Log("Health: " + this.character.GetHealthAttribute().GetModifiedValue() +
                  " Attack: " + this.character.GetAttackAttribute().GetModifiedValue() +
                  " Defense: " + this.character.GetDefenseAttribute().GetModifiedValue() +
                  " Speed: " + this.character.GetSpeedAttribute().GetModifiedValue());
        Debug.Log("----Default Stats End----");
    }
Example #29
0
        public virtual void OnScoreKill(Player killer, Player assist, Player target, AttackAttribute attackAttribute)
        {
            killer.RoomInfo.Stats.Kills++;
            target.RoomInfo.Stats.Deaths++;

            target.RoomInfo.CharacterDeaths[target.CharacterManager.CurrentSlot]++;

            if (killer.RoomInfo.Stats.PENLC > DateTimeOffset.Now.ToUnixTimeSeconds())
            {
                var gain = (uint)_seed.Next(10, 30);
                killer.PEN += gain;
                killer.Session.SendAsync(new SLuckyShotAckMessage
                {
                    Unk1 = 1,
                    Unk2 = 30,
                    Unk3 = 3
                });
            }

            if (killer.RoomInfo.Stats.EXPLC > DateTimeOffset.Now.ToUnixTimeSeconds())
            {
                var gain = (uint)_seed.Next(10, 30);
                killer.TotalExperience += gain;
                killer.Session.SendAsync(new SLuckyShotAckMessage
                {
                    Unk1 = 2,
                    Unk2 = 30,
                    Unk3 = 3
                });
            }

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

                Room.Broadcast(
                    new SScoreKillAssistAckMessage(new ScoreAssistDto(killer.RoomInfo.PeerId, assist.RoomInfo.PeerId,
                                                                      target.RoomInfo.PeerId, attackAttribute)));
            }
            else
            {
                Room.Broadcast(
                    new SScoreKillAckMessage(new ScoreDto(killer.RoomInfo.PeerId, target.RoomInfo.PeerId,
                                                          attackAttribute)));
            }
        }
        public override void OnScoreTeamKill(Player killer, Player target, AttackAttribute attackAttribute,
                                             LongPeerId scoreKiller, 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 ScoreTeamKillAckMessage(new Score2Dto(scoreKiller, scoreTarget,
                                                          attackAttribute)));
        }
Example #31
0
    public virtual void OnScoreSuicide(Player plr, LongPeerId scorePlr, AttackAttribute icon)
    {
      var realplayer = (plr?.RoomInfo.PeerId.EqualSlot(scorePlr) ?? false) && plr.RoomInfo.PeerId.IsPlayer();

      if (realplayer)
        Respawn(plr);

      if (!ScoreIsPlaying())
        return;

      if (realplayer)
      {
        plr.RoomInfo.Stats.Deaths++;
        plr.stats.Deaths++;
      }

      Room.Broadcast(new ScoreSuicideAckMessage(scorePlr, icon));
    }
Example #32
0
        public override void OnScoreSuicide(Player plr, LongPeerId scoreTarget, AttackAttribute icon)
        {
            if (!_waitingNextChaser)
            {
                if (scoreTarget.PeerId.Category == PlayerCategory.Player)
                {
                    base.OnScoreSuicide(plr, scoreTarget, icon);

                    if (!ScoreIsPlaying())
                    {
                        return;
                    }

                    PlayersAlive.TryRemove(plr, out _);

                    if (Chaser == plr)
                    {
                        ChaserLose();
                    }
                    else
                    {
                        var stats = GetRecord(Chaser);
                        stats.Kills++;

                        if (plr == ChaserTarget)
                        {
                            stats.BonusKills++;
                        }
                    }

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

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

                    NextTarget();
                }
            }
        }