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))); } }
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))); }
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(); } }
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))); }
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))); } }
/// <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); }
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; }
public ScoreAssist2Dto(LongPeerId killer, LongPeerId assist, LongPeerId target, AttackAttribute weapon) { Killer = killer; Assist = assist; Target = target; Weapon = weapon; }
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); } }
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))); }
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 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))); }
public override void OnScoreTeamKill(Player killer, Player target, AttackAttribute attackAttribute, LongPeerId ScoreTarget = null, LongPeerId ScoreKiller = null) { if (IsInTouchdown) { return; } base.OnScoreTeamKill(killer, target, attackAttribute); }
/// <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); }
protected internal override void OnScoreTeamKill(ScoreContext killer, ScoreContext target, AttackAttribute attackAttribute) { if (!target.IsSentry) { target.Score.Deaths++; } SendScoreTeamKill(killer, target, attackAttribute); }
/// <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); }
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(); } }
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); } }
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); }
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----"); }
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))); }
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)); }
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(); } } }