diff --git a/docs/游戏机制与平衡性调整更新草案.md b/docs/游戏机制与平衡性调整更新(基本不变版).md similarity index 93% rename from docs/游戏机制与平衡性调整更新草案.md rename to docs/游戏机制与平衡性调整更新(基本不变版).md index 2d53e33..52ee821 100644 --- a/docs/游戏机制与平衡性调整更新草案.md +++ b/docs/游戏机制与平衡性调整更新(基本不变版).md @@ -1,8 +1,6 @@ -# 游戏机制与平衡性调整更新草案 -v1.6 +# 游戏机制与平衡性调整更新(基本不变版) ## 说明 -- 该草案尚未完全确定,请大家不要过分依靠该文档进行修改自己的代码 - 有任何问题都可以在选手群中提出建议和讨论 ## 游戏接口 @@ -54,10 +52,11 @@ v1.6 - 警戒范围由7500改为10000 - 翻窗速度改为1000 - 特质: - - 扣血则得分100×受到伤害/基本伤害(1500000) + - 扣血则得分$\frac{100×受到伤害}{基本伤害(1500000)×2^{开局老师数量-1}}$ - 技能惩罚(Punish)改为 - - CD:45s - - “使用瞬间,在**视野距离/3范围内(不是可视范围)的**翻窗、开锁门、攻击前后摇、**使用技能期间**的捣蛋鬼会被眩晕(3070+**500***已受伤害/基本伤害(1500000))ms” + - CD:45s + - “使用瞬间,在**视野距离/3范围内(不是可视范围)的**翻窗、开锁门、攻击前后摇、**使用技能期间**的捣蛋鬼会被眩晕(3070+$\frac{500×已受伤害}{基本伤害(1500000)×2^{开局老师数量-1}}$)ms” + - 对于眩晕得分为正常眩晕得分/2^开局老师数量-1^ - 技能喝茶(HaveTea)(新增) - CD:90s - 使用瞬间,向额外参数/1000.0的角度瞬移3000(可以穿墙),如果会碰撞则失败。 diff --git a/docs/版本更新说明.md b/docs/版本更新说明.md index cc64c3c..ef292ea 100644 --- a/docs/版本更新说明.md +++ b/docs/版本更新说明.md @@ -50,4 +50,8 @@ # 5月20日1:30更新 - docs:更新了 游戏机制与平衡性调整更新草案.pdf -- feat:游戏机制与平衡性调整已完成 \ No newline at end of file +- feat:游戏机制与平衡性调整已完成 + +# 5月20日更新 +- docs:更新了 游戏机制与平衡性调整更新(基本不变版).pdf +- fix:修复了Pubnish技能眩晕时长的错误 \ No newline at end of file diff --git a/logic/Gaming/CharacterManager.cs b/logic/Gaming/CharacterManager.cs index 82e855e..140bd70 100644 --- a/logic/Gaming/CharacterManager.cs +++ b/logic/Gaming/CharacterManager.cs @@ -3,6 +3,7 @@ using GameClass.GameObj; using Preparation.Utility; using Preparation.Interface; using Timothy.FrameRateTask; +using static Gaming.Game; namespace Gaming { @@ -17,6 +18,24 @@ namespace Gaming this.gameMap = gameMap; } + private readonly object numTeacherLock = new(); + private int factorTeacher = 1; + public int FactorTeacher + { + get + { + lock (numTeacherLock) + { + return factorTeacher; + } + } + } + public void DoubleFactorTeacher() + { + lock (numTeacherLock) + factorTeacher *= 2; + } + public Character? AddPlayer(XY pos, long teamID, long playerID, CharacterType characterType, Character? parent = null) { Character newPlayer; @@ -25,7 +44,17 @@ namespace Gaming { newPlayer = new Golem(pos, GameData.characterRadius, parent); } - else newPlayer = (GameData.IsGhost(characterType)) ? new Ghost(pos, GameData.characterRadius, characterType) : new Student(pos, GameData.characterRadius, characterType); + else + { + if (GameData.IsGhost(characterType)) + newPlayer = new Ghost(pos, GameData.characterRadius, characterType); + else + { + newPlayer = new Student(pos, GameData.characterRadius, characterType); + if (characterType == CharacterType.Teacher) + DoubleFactorTeacher(); + } + } gameMap.Add(newPlayer); newPlayer.TeamID = teamID; @@ -327,7 +356,7 @@ namespace Gaming bullet.Parent.AddScore(GameData.TrickerScoreAttackStudent(subHp)); if (student.CharacterType == CharacterType.Teacher) { - student.AddScore(subHp * GameData.factorOfScoreWhenTeacherAttacked / GameData.basicApOfGhost); + student.AddScore(subHp * GameData.factorOfScoreWhenTeacherAttacked / GameData.basicApOfGhost / FactorTeacher); } bullet.Parent.HP = (int)(bullet.Parent.HP + (bullet.Parent.Vampire * subHp)); diff --git a/logic/Gaming/Game.cs b/logic/Gaming/Game.cs index a76ac2a..8f8288e 100644 --- a/logic/Gaming/Game.cs +++ b/logic/Gaming/Game.cs @@ -28,6 +28,7 @@ namespace Gaming public List TeamList => teamList; private readonly Map gameMap; public Map GameMap => gameMap; + // private readonly int numOfTeam; public long AddPlayer(PlayerInitInfo playerInitInfo) { diff --git a/logic/Gaming/SkillManager/SkillManager.ActiveSkill.cs b/logic/Gaming/SkillManager/SkillManager.ActiveSkill.cs index 55cd2fc..fd8abf6 100644 --- a/logic/Gaming/SkillManager/SkillManager.ActiveSkill.cs +++ b/logic/Gaming/SkillManager/SkillManager.ActiveSkill.cs @@ -354,8 +354,9 @@ namespace Gaming || character.PlayerState == PlayerStateType.ClimbingThroughWindows) && XY.DistanceFloor3(character.Position, player.Position) <= player.ViewRange / 3) { - if (CharacterManager.BeStunned(character, GameData.timeOfGhostStunnedWhenPunish + (int)((GameData.factorOfTimeStunnedWhenPunish * (player.MaxHp - player.HP) / GameData.basicApOfGhost))) > 0) - player.AddScore(GameData.StudentScoreTrickerBeStunned(GameData.timeOfGhostStunnedWhenPunish + (int)(GameData.factorOfTimeStunnedWhenPunish * (player.MaxHp - player.HP) / GameData.basicApOfGhost))); + int stunTime = (GameData.timeOfGhostStunnedWhenPunish + (int)((GameData.factorOfTimeStunnedWhenPunish * (player.MaxHp - player.HP) / GameData.basicApOfGhost))) / characterManager.FactorTeacher; + if (CharacterManager.BeStunned(character, stunTime) > 0) + player.AddScore(GameData.StudentScoreTrickerBeStunned(stunTime) / characterManager.FactorTeacher); break; } }