diff --git a/logic/Preparation/Utility/GameData.cs b/logic/Preparation/Utility/GameData.cs index 123c81a..c37c7f5 100644 --- a/logic/Preparation/Utility/GameData.cs +++ b/logic/Preparation/Utility/GameData.cs @@ -90,7 +90,7 @@ namespace Preparation.Utility public const int basicTreatSpeed = 100; public const int basicFixSpeed = 123; - public const int basicSpeedOfOpeningOrLocking = 4130; + public const int basicSpeedOfOpeningOrLocking = 4000; public const int basicStudentSpeedOfClimbingThroughWindows = 611; public const int basicGhostSpeedOfClimbingThroughWindows = 1270; public const int basicSpeedOfOpenChest = 1000; diff --git a/logic/规则Logic.md b/logic/规则Logic.md index 61fbdee..edf39c2 100644 --- a/logic/规则Logic.md +++ b/logic/规则Logic.md @@ -18,21 +18,21 @@ ### 人物 - 人物半径为800 -- 人物共有17种不可叠加的状态:(加^为学生独有) +- 人物共有17种不可叠加的状态: 1. (可)移动状态 -2. 学习^ -3. 被勉励^ -4. 在勉励^ +2. 学习 +3. 被勉励 +4. 在勉励 5. 开或锁门 6. 翻箱 7. 使用技能 -8. 开启校门^ -9. 唤醒他人中^ +8. 开启校门 +9. 唤醒他人中 -10. 被唤醒中(从沉迷状态中^ -11. 沉迷^ -12. 退学^ -13. 毕业^ +10. 被唤醒中 +11. 沉迷 +12. 退学 +13. 毕业 14. 被眩晕 15. 前摇 16. 后摇 @@ -72,13 +72,13 @@ #### 勉励(Treat) - `std::future StartTreatMate(int64_t mateID)`:勉励对应玩家ID的学生,当达到被勉励程度达到1500000或者最大血量与当前血量的差值时,勉励结束。 -- 勉励中断时,被勉励程度保留;被勉励者遭到攻击时被勉励程度清空 +- 勉励中断时,被勉励程度保留;遭到攻击时被勉励程度清空 #### 沉迷与唤醒 - 当学生血量归零时,学生原地进入沉迷状态,每毫秒增加1沉迷度 - `std::future StartRescueMate(int64_t mateID)`:唤醒对应玩家ID的沉迷的学生,需要时间1秒,之后血量恢复至1/2。沉迷程度不清空。 -- 进入沉迷状态时。如果学生原沉迷程度在(0,其最大沉迷度/3)中,沉迷程度直接变为其最大沉迷度/3;原沉迷程度在[其最大沉迷度/3,其最大沉迷度x2/3)中,沉迷程度直接变为其最大沉迷度x2/3;原沉迷程度大于其最大沉迷度x2/3,从游戏中出局; - - 当学生沉迷程度达到该玩家最大沉迷程度时,从游戏中出局 +- 进入沉迷状态时。如果学生原沉迷程度在(0,该玩家最大沉迷度/3)中,沉迷程度直接变为其最大沉迷度/3;原沉迷程度在[其最大沉迷度/3,其最大沉迷度x2/3)中,沉迷程度直接变为其最大沉迷度x2/3;原沉迷程度大于其最大沉迷度x2/3,从游戏中出局; + - 当学生沉迷程度达到其最大沉迷程度时,从游戏中出局 #### 门 - 门分别属于三个教学区:三教,五教,六教 @@ -100,10 +100,10 @@ ### 队内信息 - `std::future SendMessage(int64_t, std::string)`:给同队的队友发送消息。`toPlayerID`指定发送的对象,`message`指定发送的内容。`message`的长度不能超过 64,否则将发送失败! -- `bool HaveMessage()`:有队友发来的尚未接收的信息,则返回 true 。 +- `bool HaveMessage()`:是否有队友发来的尚未接收的信息。 ### 信息受限 -- 以上主动行为每 50ms 最多总共可以调用 50 次;主动返回 bool 值代表本次操作是否成功。 +- 主动行为每 50ms 最多总共可以调用 50 次; - `bool Wait()`:asynchronous 为 true 的情况下,选手可以调用此函数,阻塞当前线程,直到下一次消息更新时继续运行。 ### 信息获取 @@ -111,7 +111,8 @@ `std::vector> GetTrickers() const` :返回所有可视捣蛋鬼的信息。 `std::vector> GetProps() const` :返回所有可视道具的信息。 `std::vector> GetFullMap() const`:返回整张地图的地形信息。 -注意下面的 CellX 和 CellY 指的是地图格数,而非绝对坐标。 + +- 下面的 CellX 和 CellY 指的是地图格数,而非绝对坐标。 `THUAI6::PlaceType GetPlaceType(int32_t cellX, int32_t cellY)` :返回某一位置场地种类信息。场地种类详见 structure.h 。 `bool IsDoorOpen(int32_t cellX, int32_t cellY) const`:查询特定位置门是否开启 `int32_t GetChestProgress(int32_t cellX, int32_t cellY) const`:查询特定位置箱子开启进度 @@ -119,14 +120,32 @@ `int32_t GetClassroomProgress(int32_t cellX, int32_t cellY) const`:查询特定位置教室作业完成进度 `THUAI6::HiddenGateState GetHiddenGateState(int32_t cellX, int32_t cellY) const`::查询特定位置隐藏校门状态 `int32_t GetDoorProgress(int32_t cellX, int32_t cellY) const`:查询特定位置门开启状态 + `std::shared_ptr GetGameInfo() const`:查询当前游戏状态 `std::vector GetPlayerGUIDs() const`:获取所有玩家的GUID `int GetFrameCount() const`:获取目前所进行的帧数 `std::shared_ptr GetSelfInfo() const`或`std::shared_ptr GetSelfInfo() const`:获取自己的信息 -### 得分 +### 道具 +- 玩家最多同时拥有三个道具 +- `bool PickProp(THUAI6::PropType prop)`捡起与自己处于同一个格子(cell)的道具。 +- `bool UseProp(THUAI6::PropType prop)`使用对应类型的道具 +- `bool ThrowProp(THUAI6::PropType prop)`将对应类型的道具扔在原地 + +| 道具 | 对学生增益 | [学生得分条件] | 对搞蛋鬼增益 | [搞蛋鬼得分条件] | +| :-------- | :-------------------------------------- | :-----------------| :-------------------------------------- |:-----------------| +| Key3 | 能开启3教的门 |不得分| 能开启3教的门 |不得分| +| Key5 | 能开启5教的门 |不得分| 能开启5教的门 |不得分| +| Key6 | 能开启6教的门 |不得分| 能开启6教的门 |不得分| +| AddSpeed | 提高移动速度,持续10s |得分?| 提高移动速度,持续10s |得分?| +| AddLifeOrClairaudience |若在10s内Hp归零,该增益消失以使Hp保留100|在10s内Hp归零,得分? |10秒内下一次攻击增伤1800000|10秒内有一次攻击,得分? | +| AddHpOrAp |回血1500000 | 回血成功 | 10秒内下一次攻击增伤1800000|10秒内有一次攻击,得分? | +| ShieldOrSpear | 10秒内能抵挡一次伤害 | 10秒内成功抵挡一次伤害 |10秒内下一次攻击能破盾,如果对方无盾,则增伤900000| 10秒内攻击中学生| +| RecoveryFromDizziness | 使用瞬间从眩晕状态中恢复 | 成功从眩晕状态中恢复,得分?|使用瞬间从眩晕状态中恢复 | 成功从眩晕状态中恢复,得分?| + +## 得分 -#### 屠夫 +### 屠夫 - [Tricker对Student造成伤害时,得伤害*100/基本伤害(1500000)分。] - *[使用道具/技能得分]* @@ -137,7 +156,7 @@ - 主动解除眩晕,得15分 - 开锁门 -#### 人类 +### 人类 - 修机得分 - 人类每修n%的电机,得n分 - 修完一台电机,额外得?分 @@ -151,23 +170,6 @@ - 解除眩晕 - 开锁门 -### 道具 -- 玩家最多同时拥有三个道具 -- 道具对于捣蛋鬼与学生可能有不同效果 -- `bool PickProp(THUAI6::PropType prop)`捡起与自己处于同一个格子(cell)的道具。 -- `bool UseProp(THUAI6::PropType prop)`使用对应类型的道具 -- `bool ThrowProp(THUAI6::PropType prop)`将对应类型的道具扔在原地 -| 道具 | 对学生增益 | [学生得分条件] | 对搞蛋鬼增益 | [搞蛋鬼得分条件] | -| :-------- | :-------------------------------------- | :-----------------| :-------------------------------------- |:-----------------| -| Key3 | 能开启3教的门 |不得分| 能开启3教的门 |不得分| -| Key5 | 能开启5教的门 |不得分| 能开启5教的门 |不得分| -| Key6 | 能开启6教的门 |不得分| 能开启6教的门 |不得分| -| AddSpeed | 提高移动速度,持续10s |得分?| 提高移动速度,持续10s |得分?| -| AddLifeOrClairaudience |若在10s内Hp归零,该增益消失以使Hp保留100|在10s内Hp归零,得分? |10秒内下一次攻击增伤1800000|10秒内有一次攻击,得分? | -| AddHpOrAp |回血1500000 | 回血成功 | 10秒内下一次攻击增伤1800000|10秒内有一次攻击,得分? | -| ShieldOrSpear | 10秒内能抵挡一次伤害 | 10秒内成功抵挡一次伤害 |10秒内下一次攻击能破盾,如果对方无盾,则增伤900000| 10秒内攻击中学生| -| RecoveryFromDizziness | 使用瞬间从眩晕状态中恢复 | 成功从眩晕状态中恢复,得分?|使用瞬间从眩晕状态中恢复 | 成功从眩晕状态中恢复,得分?| - ## 职业与技能 ### 捣蛋鬼 @@ -178,9 +180,9 @@ | 隐蔽度 | 1.0 | 1.5 | 1 | 0.8 | | 警戒范围 | 17000 | 1.3 | 1 | 0.9 | | 视野范围 | 15000 | 1.2 | 1 | 1 | -| 开锁门时间/s | 41.3% | 1 | 1 | 1 | +| 开锁门速度 | 4000 | 1 | 1 | 1 | | 翻窗速度 | 1270 | 1 | 1 | 1.1 | -| 翻箱时间/s | 10% | 1 | 1.1 | 1 | +| 翻箱速度 | 1000 | 1 | 1.1 | 1 | #### 刺客 - 普通攻击为 搞蛋鬼的一般攻击 @@ -227,9 +229,9 @@ | 隐蔽度 | 1.0 | 0.5 | 0.9 | 0.9 | 1 | | 警戒范围 | 15000 | 0.5 | 1 | 0.9 | 1 | | 视野范围 | 10000 | 0.9 | 1.1 | 0.9 | 1 | -| 开锁门时间/s | 4.13% | 1 | 1 | 1 | 1 | +| 开锁门速度 | 4000 | 1 | 1 | 1 | 1 | | 翻窗速度 | 1270 | 0.5 | 1.2 | 10/12 | 1 | -| 翻箱时间/s | 10% | 1 | 1 | 1 | 1 | +| 翻箱速度 | 1000 | 1 | 1 | 1 | 1 | #### 运动员 - 主动技能 @@ -277,7 +279,7 @@ `static inline int CellToGrid(int cell) noexcept`:将地图格数 cell 转换为绝对坐标grid。 `static inline int GridToCell(int grid) noexcept`:将绝对坐标 grid 转换为地图格数cell。 下面为用于DEBUG的输出函数,选手仅在开启Debug模式的情况下可以使用 -~~~csharp +~~~c void Print(std::string str) const; void PrintStudent() const; void PrintTricker() const;