Browse Source

Merge pull request #243 from shangfengh/new

build: 🚧 add AttackType in 规则Logic.md
tags/0.1.0
Gao Siyan GitHub 2 years ago
parent
commit
70e595909f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 96 additions and 92 deletions
  1. +6
    -6
      logic/GameClass/GameObj/Bullet/Bullet.Ghost.cs
  2. +13
    -0
      logic/GameClass/GameObj/Map/Generator.cs
  3. +2
    -0
      logic/Gaming/ActionManager.cs
  4. +1
    -1
      logic/Gaming/CharacterManager .cs
  5. +9
    -9
      logic/Preparation/Utility/GameData.cs
  6. +4
    -4
      logic/Preparation/Utility/Transformation.cs
  7. +61
    -72
      logic/规则Logic.md

+ 6
- 6
logic/GameClass/GameObj/Bullet/Bullet.Ghost.cs View File

@@ -25,7 +25,7 @@ namespace GameClass.GameObj
public override int Speed => GameData.basicBulletMoveSpeed; public override int Speed => GameData.basicBulletMoveSpeed;
public override bool IsRemoteAttack => false; public override bool IsRemoteAttack => false;


public override int CastTime => (int)BulletAttackRange / Speed;
public override int CastTime => (int)BulletAttackRange * 1000 / Speed;
public override int Backswing => GameData.basicBackswing; public override int Backswing => GameData.basicBackswing;
public override int RecoveryFromHit => GameData.basicRecoveryFromHit; public override int RecoveryFromHit => GameData.basicRecoveryFromHit;
public const int cd = GameData.basicBackswing; public const int cd = GameData.basicBackswing;
@@ -49,8 +49,8 @@ namespace GameClass.GameObj
} }
} }
public override BulletType TypeOfBullet => BulletType.CommonAttackOfGhost; public override BulletType TypeOfBullet => BulletType.CommonAttackOfGhost;

} }

internal sealed class FlyingKnife : Bullet internal sealed class FlyingKnife : Bullet
{ {
public FlyingKnife(Character player, PlaceType placeType, XY pos, int radius = GameData.bulletRadius) : public FlyingKnife(Character player, PlaceType placeType, XY pos, int radius = GameData.bulletRadius) :
@@ -75,7 +75,7 @@ namespace GameClass.GameObj
public override int CastTime => GameData.basicCastTime; public override int CastTime => GameData.basicCastTime;
public override int Backswing => 0; public override int Backswing => 0;
public override int RecoveryFromHit => 0; public override int RecoveryFromHit => 0;
public const int cd = GameData.basicBackswing * 2 / 5 + 100;
public const int cd = GameData.basicBackswing / 2;
public override int CD => cd; public override int CD => cd;
public const int maxBulletNum = 1; public const int maxBulletNum = 1;
public override int MaxBulletNum => maxBulletNum; public override int MaxBulletNum => maxBulletNum;
@@ -117,10 +117,10 @@ namespace GameClass.GameObj
ap = value; ap = value;
} }
} }
public override int Speed => (int)(GameData.basicBulletMoveSpeed * 0.8);
public override int Speed => (int)(GameData.basicBulletMoveSpeed * 30 / 37);
public override bool IsRemoteAttack => false; public override bool IsRemoteAttack => false;


public override int CastTime => (int)BulletAttackRange / Speed;
public override int CastTime => (int)(BulletAttackRange * 1000 / Speed);
public override int Backswing => GameData.basicRecoveryFromHit; public override int Backswing => GameData.basicRecoveryFromHit;
public override int RecoveryFromHit => GameData.basicRecoveryFromHit; public override int RecoveryFromHit => GameData.basicRecoveryFromHit;
public const int cd = GameData.basicCD; public const int cd = GameData.basicCD;
@@ -164,7 +164,7 @@ namespace GameClass.GameObj
ap = value; ap = value;
} }
} }
public override int Speed => (int)(GameData.basicBulletMoveSpeed * 1.2);
public override int Speed => 4300;
public override bool IsRemoteAttack => false; public override bool IsRemoteAttack => false;


public override int CastTime => 0; public override int CastTime => 0;


+ 13
- 0
logic/GameClass/GameObj/Map/Generator.cs View File

@@ -16,6 +16,19 @@ namespace GameClass.GameObj
public override bool IsRigid => true; public override bool IsRigid => true;
public override ShapeType Shape => ShapeType.Square; public override ShapeType Shape => ShapeType.Square;


private int numOfFixing = 0;
public int NumOfFixing
{
get => numOfFixing;
set
{
lock (gameObjLock)
{
numOfFixing = value;
}
}
}

private int degreeOfRepair = 0; private int degreeOfRepair = 0;
public int DegreeOfRepair public int DegreeOfRepair
{ {


+ 2
- 0
logic/Gaming/ActionManager.cs View File

@@ -62,6 +62,7 @@ namespace Gaming
if (generatorForFix == null || generatorForFix.DegreeOfRepair == GameData.degreeOfFixedGenerator) if (generatorForFix == null || generatorForFix.DegreeOfRepair == GameData.degreeOfFixedGenerator)
return false; return false;


++generatorForFix.NumOfFixing;
player.PlayerState = PlayerStateType.Fixing; player.PlayerState = PlayerStateType.Fixing;
new Thread new Thread
( (
@@ -85,6 +86,7 @@ namespace Gaming


) )
{ IsBackground = true }.Start(); { IsBackground = true }.Start();
--generatorForFix.NumOfFixing;


return true; return true;
} }


+ 1
- 1
logic/Gaming/CharacterManager .cs View File

@@ -161,7 +161,7 @@ namespace Gaming
{ {
if (XY.Distance(newPlayer.Position, generator.Position) <= newPlayer.AlertnessRadius) if (XY.Distance(newPlayer.Position, generator.Position) <= newPlayer.AlertnessRadius)
{ {
if (generator.DegreeOfRepair < GameData.degreeOfFixedGenerator && (double)newPlayer.AlertnessRadius * generator.DegreeOfRepair / GameData.degreeOfFixedGenerator / XY.Distance(newPlayer.Position, generator.Position) > bgmVolume)
if (generator.NumOfFixing > 0 && (double)newPlayer.AlertnessRadius * generator.DegreeOfRepair / GameData.degreeOfFixedGenerator / XY.Distance(newPlayer.Position, generator.Position) > bgmVolume)
bgmVolume = (double)newPlayer.AlertnessRadius * generator.DegreeOfRepair / GameData.degreeOfFixedGenerator / XY.Distance(newPlayer.Position, generator.Position); bgmVolume = (double)newPlayer.AlertnessRadius * generator.DegreeOfRepair / GameData.degreeOfFixedGenerator / XY.Distance(newPlayer.Position, generator.Position);
} }
} }


+ 9
- 9
logic/Preparation/Utility/GameData.cs View File

@@ -83,11 +83,11 @@ namespace Preparation.Utility
public const int characterRadius = numOfPosGridPerCell * 4 / 10; // 人物半径 public const int characterRadius = numOfPosGridPerCell * 4 / 10; // 人物半径


public const int basicTreatSpeed = 100; public const int basicTreatSpeed = 100;
public const int basicFixSpeed = 100;
public const int basicSpeedOfOpeningOrLocking = 40;
public const int basicFixSpeed = 123;
public const int basicSpeedOfOpeningOrLocking = 4130;
public const int basicStudentSpeedOfClimbingThroughWindows = 611; public const int basicStudentSpeedOfClimbingThroughWindows = 611;
public const int basicGhostSpeedOfClimbingThroughWindows = 1270; public const int basicGhostSpeedOfClimbingThroughWindows = 1270;
public const int basicSpeedOfOpenChest = 100;
public const int basicSpeedOfOpenChest = 1000;


public const int basicHp = 3000000; // 初始血量 public const int basicHp = 3000000; // 初始血量
public const int basicMaxGamingAddiction = 60000;//基本完全沉迷时间 public const int basicMaxGamingAddiction = 60000;//基本完全沉迷时间
@@ -185,11 +185,11 @@ namespace Preparation.Utility


public const int basicCD = 3000; // 初始子弹冷却 public const int basicCD = 3000; // 初始子弹冷却
public const int basicCastTime = 500;//基本前摇时间 public const int basicCastTime = 500;//基本前摇时间
public const int basicBackswing = 818;//基本后摇时间
public const int basicBackswing = 800;//基本后摇时间
public const int basicRecoveryFromHit = 3700;//基本命中攻击恢复时长 public const int basicRecoveryFromHit = 3700;//基本命中攻击恢复时长
public const int basicStunnedTimeOfStudent = 4130;
public const int basicStunnedTimeOfStudent = 4300;


public const int basicBulletMoveSpeed = 1800; // 基本子弹移动速度,单位:s-1
public const int basicBulletMoveSpeed = 3700; // 基本子弹移动速度,单位:s-1
public const double basicRemoteAttackRange = 3000; // 基本远程攻击范围 public const double basicRemoteAttackRange = 3000; // 基本远程攻击范围
public const double basicAttackShortRange = 1100; // 基本近程攻击范围 public const double basicAttackShortRange = 1100; // 基本近程攻击范围
public const double basicBulletBombRange = 1000; // 基本子弹爆炸范围 public const double basicBulletBombRange = 1000; // 基本子弹爆炸范围
@@ -230,9 +230,9 @@ namespace Preparation.Utility
public const int numOfTeachingBuilding = 3; public const int numOfTeachingBuilding = 3;
#endregion #endregion
#region 物体相关 #region 物体相关
public const int degreeOfFixedGenerator = 8180000;
public const int degreeOfLockingOrOpeningTheDoor = 100000;
public const int degreeOfOpenedChest = 100000;
public const int degreeOfFixedGenerator = 10000000;
public const int degreeOfLockingOrOpeningTheDoor = 10000000;
public const int degreeOfOpenedChest = 10000000;
public const int degreeOfOpenedDoorway = 18000; public const int degreeOfOpenedDoorway = 18000;
public const int maxNumOfPropInChest = 2; public const int maxNumOfPropInChest = 2;
public const int numOfGeneratorRequiredForRepair = 7; public const int numOfGeneratorRequiredForRepair = 7;


+ 4
- 4
logic/Preparation/Utility/Transformation.cs View File

@@ -40,6 +40,7 @@ namespace Preparation.Utility
return Protobuf.PlaceType.NullPlaceType; return Protobuf.PlaceType.NullPlaceType;
} }
} }

public static Protobuf.PropType ToPropType(Preparation.Utility.PropType prop) public static Protobuf.PropType ToPropType(Preparation.Utility.PropType prop)
{ {
switch (prop) switch (prop)
@@ -64,7 +65,6 @@ namespace Preparation.Utility
return Protobuf.PropType.NullPropType; return Protobuf.PropType.NullPropType;
} }
} }

public static Preparation.Utility.PropType ToPropType(Protobuf.PropType prop) public static Preparation.Utility.PropType ToPropType(Protobuf.PropType prop)
{ {
switch (prop) switch (prop)
@@ -133,6 +133,7 @@ namespace Preparation.Utility
return PlayerState.NullStatus; return PlayerState.NullStatus;
} }
} }

public static Protobuf.StudentBuffType ToStudentBuffType(Preparation.Utility.BuffType buffType) public static Protobuf.StudentBuffType ToStudentBuffType(Preparation.Utility.BuffType buffType)
{ {
switch (buffType) switch (buffType)
@@ -167,6 +168,7 @@ namespace Preparation.Utility
return Protobuf.TrickerBuffType.NullTbuffType; return Protobuf.TrickerBuffType.NullTbuffType;
} }
} }

public static Protobuf.BulletType ToBulletType(Preparation.Utility.BulletType bulletType) public static Protobuf.BulletType ToBulletType(Preparation.Utility.BulletType bulletType)
{ {
switch (bulletType) switch (bulletType)
@@ -202,7 +204,6 @@ namespace Preparation.Utility
return Protobuf.StudentType.NullStudentType; return Protobuf.StudentType.NullStudentType;
} }
} }

public static Preparation.Utility.CharacterType ToStudentType(Protobuf.StudentType characterType) public static Preparation.Utility.CharacterType ToStudentType(Protobuf.StudentType characterType)
{ {
switch (characterType) switch (characterType)
@@ -221,6 +222,7 @@ namespace Preparation.Utility
return Preparation.Utility.CharacterType.Null; return Preparation.Utility.CharacterType.Null;
} }
} }

public static Protobuf.TrickerType ToTrickerType(Preparation.Utility.CharacterType characterType) public static Protobuf.TrickerType ToTrickerType(Preparation.Utility.CharacterType characterType)
{ {
switch (characterType) switch (characterType)
@@ -235,7 +237,6 @@ namespace Preparation.Utility
return Protobuf.TrickerType.NullTrickerType; return Protobuf.TrickerType.NullTrickerType;
} }
} }

public static Preparation.Utility.CharacterType ToTrickerType(Protobuf.TrickerType characterType) public static Preparation.Utility.CharacterType ToTrickerType(Protobuf.TrickerType characterType)
{ {
switch (characterType) switch (characterType)
@@ -250,6 +251,5 @@ namespace Preparation.Utility
return Preparation.Utility.CharacterType.Null; return Preparation.Utility.CharacterType.Null;
} }
} }

} }
} }

+ 61
- 72
logic/规则Logic.md View File

@@ -5,7 +5,7 @@
- []表示待决定 - []表示待决定


## 游戏简介 ## 游戏简介
- 1位监管者对抗4位求生者的非对称竞技模式
- 1位捣蛋鬼对抗4位学生的非对称竞技模式
- [本届THUAI电子系赛道为以4名同学和1名捣蛋鬼的求学与阻挠展开的非对称竞技模式,同学需要完成足够的家庭作业和考试,相互督促以避免沉迷娱乐生活,利用道具地形躲避捣蛋鬼的各种干扰诱惑,完成学业;捣蛋鬼则要极力阻止。] - [本届THUAI电子系赛道为以4名同学和1名捣蛋鬼的求学与阻挠展开的非对称竞技模式,同学需要完成足够的家庭作业和考试,相互督促以避免沉迷娱乐生活,利用道具地形躲避捣蛋鬼的各种干扰诱惑,完成学业;捣蛋鬼则要极力阻止。]
- [我们的设计是一个非对称游戏,类似第五人格,分为学生、捣蛋鬼两个阵营。在游戏中,学生修完若干课程之后通过考试即可顺利毕业,捣蛋鬼试图干扰学生使其沉迷游戏,以致于无法修完规定课程,直至挂科、退学。] - [我们的设计是一个非对称游戏,类似第五人格,分为学生、捣蛋鬼两个阵营。在游戏中,学生修完若干课程之后通过考试即可顺利毕业,捣蛋鬼试图干扰学生使其沉迷游戏,以致于无法修完规定课程,直至挂科、退学。]
[对于选手来说,需要提前制定好学生的学习方案以抵御对方捣蛋鬼的干扰,类似地,也需要制定好捣蛋鬼的行动策略以影响对方学生的学习,也即每队至少要写好两份代码以执行不同阵营的不同策略。] [对于选手来说,需要提前制定好学生的学习方案以抵御对方捣蛋鬼的干扰,类似地,也需要制定好捣蛋鬼的行动策略以影响对方学生的学习,也即每队至少要写好两份代码以执行不同阵营的不同策略。]
@@ -22,21 +22,21 @@
- 地图上的每个格子有自己的区域类型:陆地、墙、草地、电机、出口、紧急出口、门、窗、箱子 - 地图上的每个格子有自己的区域类型:陆地、墙、草地、电机、出口、紧急出口、门、窗、箱子


### 人物状态 ### 人物状态
游戏人物共有17种不可叠加的状态:(加*为学生独有)
游戏人物共有17种不可叠加的状态:(加^为学生独有)
1.普通状态 1.普通状态
2*.学习
3*.被治疗
4*.在治疗
2^.学习
3^.被治疗
4^.在治疗
5.开或锁门 5.开或锁门
6.翻箱 6.翻箱
7.使用技能 7.使用技能
8*.正在毕业
9*.唤醒他人中
8^.正在毕业
9^.唤醒他人中


10*.被唤醒中(从沉迷状态中)
11*.沉迷
12*.退学
13*.毕业
10^.被唤醒中(从沉迷状态中)
11^.沉迷
12^.退学
13^.毕业
14.被眩晕 14.被眩晕
15.前摇 15.前摇
16.后摇 16.后摇
@@ -50,16 +50,17 @@
- 翻窗时玩家应当在目标前后左右一个格子内 - 翻窗时玩家应当在目标前后左右一个格子内


#### 破译与逃脱 #### 破译与逃脱
- 每张地图都有10台电机,求生者需要破译其中的7台,并开启任意一个大门(总所需时间为18秒)后从任意一个开启的大门逃脱,亦或者在只剩1名求生者的情况下从紧急出口逃脱;
- 紧急出口会在电机破译完成3台的情况下在地图的3-5个固定紧急出口刷新点之一随机刷新。
- 当求生者只剩1名时,紧急出口将会自动打开,该求生者可从紧急出口逃脱。
- 每张地图都有10台电机,学生需要破译其中的**7台**,并开启任意大门(总所需时间为18秒)后从开启的大门逃脱,亦或在只剩1名学生的情况下从紧急出口逃脱;
- 紧急出口会在电机破译完成3台的情况下在地图的3-5个固定紧急出口刷新点之一随机刷新显示
- 当学生只剩1名时,紧急出口将会自动打开,该学生可从紧急出口逃脱。
- 大门开启的进度不清空 - 大门开启的进度不清空


#### 攻击 #### 攻击
- 无论近战远程均产生子弹以表示攻击所至距离
- 攻击时,从播放攻击动作到可以开始产生伤害的期间,称为前摇。前摇期间攻击被打断时,子弹消失。
- 无论近战远程均产生bullet以表示攻击所至距离
- 如果有前摇,前摇最大时间一般为攻击最远距离/bullet移动速度。前摇期间攻击被打断时,子弹消失。
- 无论搞蛋鬼或学生,攻击后,通常会出现一段无伤害判定的攻击动作后置时间,称为后摇。击中物体时后摇更长 - 无论搞蛋鬼或学生,攻击后,通常会出现一段无伤害判定的攻击动作后置时间,称为后摇。击中物体时后摇更长
- 捣蛋鬼攻击或一些特定技能击中以下状态的求生者,将使求生者眩晕4.13s
- 搞蛋鬼可以攻击未修完的作业,造成(攻击力*2/100000)%的
- 捣蛋鬼攻击或一些特定技能击中以下状态的学生,将使学生眩晕4.3s
1. 处于前摇或后摇 1. 处于前摇或后摇
2. 治疗或解救他人 2. 治疗或解救他人
3. 修理电机 3. 修理电机
@@ -73,11 +74,11 @@
- 治疗中断时,被治疗程度保留;被治疗者遭到攻击时被治疗程度清空 - 治疗中断时,被治疗程度保留;被治疗者遭到攻击时被治疗程度清空


#### 沉迷与唤醒 #### 沉迷与唤醒
- 当求生者血量归零时,求生者自动原地进入沉迷状态,每毫秒增加1沉迷度
- 该学生可由其他的求生者唤醒,唤醒后,血量恢复至1/2并可以重新行动。沉迷程度不清空。
- 当学生血量归零时,学生自动原地进入沉迷状态,每毫秒增加1沉迷度
- 该学生可由其他的学生唤醒,唤醒后,血量恢复至1/2并可以重新行动。沉迷程度不清空。
- 一般情况下,唤醒时间为1秒。 - 一般情况下,唤醒时间为1秒。
- 进入沉迷状态时。如果求生者原本沉迷程度在(0,其最大沉迷度/3)中,求生者沉迷程度直接变为其最大沉迷度/3;如果求生者原本沉迷程度在[其最大沉迷度/3,其最大沉迷度*2/3)中,求生者沉迷程度直接变为其最大沉迷度*2/3;如果求生者原本沉迷程度大于其最大沉迷度*2/3,从游戏中出局;
- 当求生者沉迷程度达到该玩家最大沉迷程度时,从游戏中出局
- 进入沉迷状态时。如果学生原本沉迷程度在(0,其最大沉迷度/3)中,学生沉迷程度直接变为其最大沉迷度/3;如果学生原本沉迷程度在[其最大沉迷度/3,其最大沉迷度x2/3)中,学生沉迷程度直接变为其最大沉迷度x2/3;如果学生原本沉迷程度大于其最大沉迷度x2/3,从游戏中出局;
- 当学生沉迷程度达到该玩家最大沉迷程度时,从游戏中出局


#### 门 #### 门
- 门分别属于三个教学区:三教,五教,六教 - 门分别属于三个教学区:三教,五教,六教
@@ -87,7 +88,7 @@
- 锁门时其他人可以进入门所在格子,锁门过程中断 - 锁门时其他人可以进入门所在格子,锁门过程中断


#### 窗 #### 窗
- 通常情况下监管者翻越窗户的速度高于求生者
- 通常情况下捣蛋鬼翻越窗户的速度高于学生
- 有人正在翻越窗户时,其他玩家均不可以翻越该窗户。 - 有人正在翻越窗户时,其他玩家均不可以翻越该窗户。


#### 箱子 #### 箱子
@@ -95,13 +96,17 @@
- 开启箱子的基础持续时间为10秒。 - 开启箱子的基础持续时间为10秒。
- 箱子道具不刷新 - 箱子道具不刷新


#### Bgm
1. 不详的感觉:捣蛋鬼进入(学生的警戒半径/捣蛋鬼的隐蔽度)时,学生收到;捣蛋鬼距离学生越近,Bgm音量越大。bgmVolume=(警戒半径/二者距离)
2. 期待搞事的感觉:学生进入(捣蛋鬼的警戒半径/学生的隐蔽度)时,捣蛋鬼收到;捣蛋鬼距离学生越近,Bgm音量越大。bgmVolume=(警戒半径/可被发觉的最近的学生距离)
3. 学习的声音: 捣蛋鬼警戒半径内有人学习时收到;bgmVolume=(警戒半径x学习进度百分比)/二者距离

### 得分 ### 得分


#### 屠夫 #### 屠夫


- [Tricker对Student造成伤害时,得伤害*100/基本伤害(1500000)分。] - [Tricker对Student造成伤害时,得伤害*100/基本伤害(1500000)分。]
- *[使用道具/技能得分]* - *[使用道具/技能得分]*
- 需要造成一定效果才能获取分数,仅使用不得分
- 不同道具/技能有不同得分 - 不同道具/技能有不同得分
- 使Student进入沉迷状态时,得50分。 - 使Student进入沉迷状态时,得50分。
- 使人类进入眩晕状态时,得25分。 - 使人类进入眩晕状态时,得25分。
@@ -141,16 +146,16 @@


| 捣蛋鬼职业 | 基本量 | Assassin | Klee | 喧哗者ANoisyPerson | | 捣蛋鬼职业 | 基本量 | Assassin | Klee | 喧哗者ANoisyPerson |
| :------------ | :--------------------- | :--------------------- | :--------------------- | :--------------------- | | :------------ | :--------------------- | :--------------------- | :--------------------- | :--------------------- |
| 移动速度 | 1,503 | 1.1 | 1 | 1.07 |
| 移动速度/s | 1,503 | 1.1 | 1 | 1.07 |
| 隐蔽度 | 1.0 | 1.5 | 1 | 0.8 | | 隐蔽度 | 1.0 | 1.5 | 1 | 0.8 |
| 警戒范围 | 17000 | 1.3 | 1 | 0.9 | | 警戒范围 | 17000 | 1.3 | 1 | 0.9 |
| 视野范围 | 15000 | 1.2 | 1 | 1 | | 视野范围 | 15000 | 1.2 | 1 | 1 |
| 开锁门时间(ms)| 2500 | 1/1 | 1 | 1 |
| 开锁门时间/s | 41.3% | 1 | 1 | 1 |
| 翻窗速度 | 1270 | 1 | 1 | 1.1 | | 翻窗速度 | 1270 | 1 | 1 | 1.1 |
| 翻箱时间(ms) | 10000 | 1/1 | 1/1.1 | 1 |
| 翻箱时间/s | 10% | 1 | 1.1 | 1 |


#### 刺客 #### 刺客
- 普通攻击为 CommonAttackOfGhost
- 普通攻击为 搞蛋鬼的一般攻击
- 主动技能 - 主动技能
- 隐身 - 隐身
- CD:30s 持续时间:6s - CD:30s 持续时间:6s
@@ -159,26 +164,26 @@
- 使用飞刀 - 使用飞刀
- CD:20s 持续时间:1s - CD:20s 持续时间:1s
- 在持续时间内,攻击类型变为飞刀 - 在持续时间内,攻击类型变为飞刀
- 不得分
- 不直接得分


#### Klee #### Klee
- 普通攻击为 CommonAttackOfGhost
- 普通攻击为 搞蛋鬼的一般攻击
- 主动技能 - 主动技能
- 蹦蹦炸弹 - 蹦蹦炸弹
- CD:15s 持续时间:3s - CD:15s 持续时间:3s
- 在持续时间内,攻击类型变为蹦蹦炸弹 - 在持续时间内,攻击类型变为蹦蹦炸弹
- 当蹦蹦炸弹因为碰撞而爆炸,向子弹方向上加上90°,270° 发出2个小炸弹 - 当蹦蹦炸弹因为碰撞而爆炸,向子弹方向上加上90°,270° 发出2个小炸弹
- 2个小炸弹运动停止前会因为碰撞爆炸,停止运动后学生碰撞会造成眩晕3.07s - 2个小炸弹运动停止前会因为碰撞爆炸,停止运动后学生碰撞会造成眩晕3.07s
- 不得分
- 不直接得分,通过眩晕等获得对应得分


#### 喧哗者 #### 喧哗者
- 普通攻击为 CommonAttackOfGhost
- 普通攻击为 搞蛋鬼的一般攻击
- 主动技能 - 主动技能
- 嚎叫 - 嚎叫
- CD:25s - CD:25s
- 使用瞬间,在视野半径范围内(不是可视区域)的学生被眩晕6110ms,自己进入3070ms的后摇 - 使用瞬间,在视野半径范围内(不是可视区域)的学生被眩晕6110ms,自己进入3070ms的后摇
- 通过眩晕获得对应得分 - 通过眩晕获得对应得分
- 被动技能
- 特性
- 在场所有学生Bgm系统被设为无用的值 - 在场所有学生Bgm系统被设为无用的值




@@ -189,14 +194,14 @@
| 移动速度 | 1,270 | 3 / 4 | 1.1 | 0.8 | 1 | | 移动速度 | 1,270 | 3 / 4 | 1.1 | 0.8 | 1 |
| 最大毅力值 | 3000000 | 10 | 1 | 1.1 | 32/30 | | 最大毅力值 | 3000000 | 10 | 1 | 1.1 | 32/30 |
| 最大沉迷度 | 60000 | 10 | 0.9 | 1.3 | 1.1 | | 最大沉迷度 | 60000 | 10 | 0.9 | 1.3 | 1.1 |
| 学习一科时间(ms) | 81800 | 1/0 | 10/6 | 10/11 | 1 |
| 学习一科速度/s | 1.23% | 0 | 0.6 | 1.1 | 1 |
| 治疗速度 | 100 | 0.7 | 0.8 | 0.8 | 2 | | 治疗速度 | 100 | 0.7 | 0.8 | 0.8 | 2 |
| 隐蔽度 | 1.0 | 0.5 | 0.9 | 0.9 | 1 | | 隐蔽度 | 1.0 | 0.5 | 0.9 | 0.9 | 1 |
| 警戒范围 | 15000 | 0.5 | 1 | 0.9 | 1 | | 警戒范围 | 15000 | 0.5 | 1 | 0.9 | 1 |
| 视野范围 | 10000 | 0.9 | 1.1 | 0.9 | 1 | | 视野范围 | 10000 | 0.9 | 1.1 | 0.9 | 1 |
| 开锁门时间(ms)| 2500 | 1/1 | 1 | 1 | 1 |
| 开锁门时间/s | 4.13% | 1 | 1 | 1 | 1 |
| 翻窗速度 | 1270 | 0.5 | 1.2 | 10/12 | 1 | | 翻窗速度 | 1270 | 0.5 | 1.2 | 10/12 | 1 |
| 翻箱时间(ms) | 10000 | 1/1 | 1 | 1 | 1 |
| 翻箱时间/s | 10% | 1 | 1 | 1 | 1 |


#### 运动员 #### 运动员
- 主动技能 - 主动技能
@@ -215,15 +220,15 @@
- 教师无法获得牵制得分 - 教师无法获得牵制得分


#### 学霸 #### 学霸
- 被动技能
- 特性
- 冥想 - 冥想
- 当玩家处于可接受指令状态且不在修机时,会积累学习进度,速度为(GameData.basicFixSpeed / 4)/ms
- 当玩家处于可接受指令状态且不在修机时,会积累学习进度,速度为0.3%/ms
- 受到攻击(并非伤害)或眩晕或翻窗(或攻击他人)学习进度清零 - 受到攻击(并非伤害)或眩晕或翻窗(或攻击他人)学习进度清零
- 主动技能
- 主动技能5
- 写答案 - 写答案
- CD:30s - CD:30s
- 使用瞬间,对于可互动范围内的一台电机增加这个学习进度 - 使用瞬间,对于可互动范围内的一台电机增加这个学习进度
- 得分
- 通过修机获得对应得分


#### 开心果 #### 开心果
- 主动技能 - 主动技能
@@ -233,13 +238,26 @@
- 通过唤醒获得对应得分 - 通过唤醒获得对应得分
- 勉励 - 勉励
- CD:60s - CD:60s
- 使用瞬间,治疗完成可视范围内一个毅力不足的人
- 使用瞬间,治疗完成可视范围内一个毅力不足的人
- 通过治疗获得对应得分 - 通过治疗获得对应得分
- 鼓舞 - 鼓舞
- CD:60s - CD:60s
- 使用瞬间,可视范围内学生(包括自己)获得持续6秒的1.6倍速Buff - 使用瞬间,可视范围内学生(包括自己)获得持续6秒的1.6倍速Buff
- 每鼓舞一个学生得分10 - 每鼓舞一个学生得分10


### 攻击类型
| 攻击类型 |搞蛋鬼的一般攻击CommonAttackOfGhost| 飞刀FlyingKnife | 蹦蹦炸弹BombBomb | JumpyDumpty |
| :------------ | :--------------------- | :--------------------- | :--------------------- | :--------------------- |
| 子弹爆炸范围 | 0 | 0 | 1000 | 500 |
| 子弹攻击距离 | 1100 | 39000 | 1100 | 2200 |
| 攻击力 | 1500000 | 1,200,000 | 1,800,000 | 900000 |
| 移动速度/s | 3700 | 7,400 | 3000 | 4300 |
| 有无前摇(ms) | 297 | 500 | 366 | 0 |
|未攻击至目标时的后摇(ms)| 800 | 0 | 3700 | 0 |
|攻击至目标时的后摇(ms)| 3700 | 0 | 3700 | 0 |
| CD(ms) | 800 | 400 | 3000 | - |
| 最大子弹容量 | 1 | 1 | 1 | - |

## 游戏数据 ## 游戏数据
请自行查看Logic/Preparation/Utility/GameData.cs 请自行查看Logic/Preparation/Utility/GameData.cs


@@ -247,6 +265,7 @@
## 细则 ## 细则


### 特殊说明 ### 特殊说明

- 不加说明,这里“学生”往往包括职业“教师” - 不加说明,这里“学生”往往包括职业“教师”


### 初始状态 ### 初始状态
@@ -261,7 +280,8 @@
- 一个大门同时最多可以由一人开启 - 一个大门同时最多可以由一人开启


### 攻击 ### 攻击
- 每次求生者受到攻击后会损失对应子弹的攻击力的血量
- 每次学生受到攻击后会损失对应子弹的攻击力的血量
- 此处,前摇指 从播放攻击动作开始 攻击者不能交互 的时间


### 沉迷与唤醒 ### 沉迷与唤醒
- 在被救时沉迷度不增加 - 在被救时沉迷度不增加
@@ -287,37 +307,6 @@
- 底层实现中的属性,不代表界面全部都需要展示,也可能需要额外展示信息 - 底层实现中的属性,不代表界面全部都需要展示,也可能需要额外展示信息
- 只展示外部需要的属性,部分属性被省略 - 只展示外部需要的属性,部分属性被省略


### BgmType
- 枚举类BgmType
1. 不详的感觉:监管者进入(求生者的警戒半径/监管者的隐蔽度)时,求生者收到;监管者距离求生者越近,Bgm音量越大。bgmVolume=(警戒半径/二者距离)
2. 期待搞事的感觉:求生者进入(监管者的警戒半径/求生者的隐蔽度)时,监管者收到;监管者距离求生者越近,Bgm音量越大。bgmVolume=(警戒半径/可被发觉的最近的求生者距离)
3. 修理电机的声音: 监管者警戒半径内有电机正在被修理时收到;bgmVolume=(警戒半径*电机修理程度/二者距离)/10300000
~~~csharp
public enum BgmType
{
Null = 0,
GhostIsComing = 1,
StudentIsApproaching = 2,
GeneratorIsBeingFixed = 3,
}
~~~

### 技能
~~~csharp
public enum ActiveSkillType // 主动技能
{
Null = 0,
BecomeInvisible = 1,
...
UseKnife = 5,
BeginToCharge = 6
}
public enum PassiveSkillType
{
Null = 0,
}
~~~

### 物体 ### 物体
- 位置 - 位置
- 位置地形 - 位置地形


Loading…
Cancel
Save