Browse Source

Merge pull request #576 from shangfengh/new

docs: 📝 edit 游戏机制与平衡性调整更新(基本不变版).md
tags/v0.1.0
shangfengh GitHub 3 years ago
parent
commit
397eccad04
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 45 additions and 11 deletions
  1. +5
    -6
      docs/游戏机制与平衡性调整更新(基本不变版).md
  2. +5
    -1
      docs/版本更新说明.md
  3. +31
    -2
      logic/Gaming/CharacterManager.cs
  4. +1
    -0
      logic/Gaming/Game.cs
  5. +3
    -2
      logic/Gaming/SkillManager/SkillManager.ActiveSkill.cs

docs/游戏机制与平衡性调整更新草案.md → docs/游戏机制与平衡性调整更新(基本不变版).md View File

@@ -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(可以穿墙),如果会碰撞则失败。

+ 5
- 1
docs/版本更新说明.md View File

@@ -50,4 +50,8 @@

# 5月20日1:30更新
- docs:更新了 游戏机制与平衡性调整更新草案.pdf
- feat:游戏机制与平衡性调整已完成
- feat:游戏机制与平衡性调整已完成

# 5月20日更新
- docs:更新了 游戏机制与平衡性调整更新(基本不变版).pdf
- fix:修复了Pubnish技能眩晕时长的错误

+ 31
- 2
logic/Gaming/CharacterManager.cs View File

@@ -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));


+ 1
- 0
logic/Gaming/Game.cs View File

@@ -28,6 +28,7 @@ namespace Gaming
public List<Team> TeamList => teamList;
private readonly Map gameMap;
public Map GameMap => gameMap;

// private readonly int numOfTeam;
public long AddPlayer(PlayerInitInfo playerInitInfo)
{


+ 3
- 2
logic/Gaming/SkillManager/SkillManager.ActiveSkill.cs View File

@@ -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;
}
}


Loading…
Cancel
Save