From c5652925e252896d044b3e1a62d69d5265be44d8 Mon Sep 17 00:00:00 2001 From: shangfengh <3495281661@qq.com> Date: Sun, 16 Apr 2023 01:23:04 +0800 Subject: [PATCH] feat: :sparkles: change the skill of Idol --- CAPI/cpp/API/include/constants.h | 2 +- CAPI/python/PyAPI/constants.py | 2 +- .../GameClass/GameObj/Character/Character.cs | 2 +- logic/GameRules.md | 2 +- logic/Gaming/ActionManager.cs | 12 +++++++-- logic/Gaming/CharacterManager .cs | 4 +-- .../SkillManager/SkillManager.ActiveSkill.cs | 25 ++++++++++++++++--- logic/Preparation/Interface/ISkill.cs | 2 +- 8 files changed, 38 insertions(+), 13 deletions(-) diff --git a/CAPI/cpp/API/include/constants.h b/CAPI/cpp/API/include/constants.h index 34867b2..7561eeb 100644 --- a/CAPI/cpp/API/include/constants.h +++ b/CAPI/cpp/API/include/constants.h @@ -269,7 +269,7 @@ namespace Constants struct ShowTime { - SCCI int skillCD = commonSkillCD * 3; + SCCI int skillCD = commonSkillCD * 8 / 3; SCCI int durationTime = commonSkillTime * 1; }; diff --git a/CAPI/python/PyAPI/constants.py b/CAPI/python/PyAPI/constants.py index dea67a2..0540469 100644 --- a/CAPI/python/PyAPI/constants.py +++ b/CAPI/python/PyAPI/constants.py @@ -270,7 +270,7 @@ class Howl: class ShowTime: - skillCD = (int)(3.0 * Constants.commonSkillCD) + skillCD = (int)(8 * Constants.commonSkillCD/3) durationTime = (int)(1.0 * Constants.commonSkillTime) diff --git a/logic/GameClass/GameObj/Character/Character.cs b/logic/GameClass/GameObj/Character/Character.cs index dae9be8..502facf 100644 --- a/logic/GameClass/GameObj/Character/Character.cs +++ b/logic/GameClass/GameObj/Character/Character.cs @@ -584,7 +584,7 @@ namespace GameClass.GameObj this.Vampire = this.OriVampire; } }*/ - public void Die(PlayerStateType playerStateType) + public void RemoveFromGame(PlayerStateType playerStateType) { lock (gameObjLock) { diff --git a/logic/GameRules.md b/logic/GameRules.md index 2e9659e..0ce8651 100644 --- a/logic/GameRules.md +++ b/logic/GameRules.md @@ -1,5 +1,5 @@ # 规则 -V4.4 +V4.5 - [规则](#规则) - [简则](#简则) - [地图](#地图) diff --git a/logic/Gaming/ActionManager.cs b/logic/Gaming/ActionManager.cs index cb8486d..af80ffc 100644 --- a/logic/Gaming/ActionManager.cs +++ b/logic/Gaming/ActionManager.cs @@ -43,6 +43,14 @@ namespace Gaming return true; } + public bool MovePlayerWhenStunned(Character playerToMove, int moveTimeInMilliseconds, double moveDirection) + { + if (!playerToMove.Commandable() && playerToMove.PlayerState != PlayerStateType.Stunned) return false; + characterManager.SetPlayerState(playerToMove, PlayerStateType.Stunned); + moveEngine.MoveObj(playerToMove, moveTimeInMilliseconds, moveDirection); + return true; + } + public bool Stop(Character player) { if (player.Commandable() || !TryToStop()) @@ -129,7 +137,7 @@ namespace Gaming { player.AddScore(GameData.StudentScoreEscape); ++gameMap.NumOfEscapedStudent; - player.Die(PlayerStateType.Escaped); + player.RemoveFromGame(PlayerStateType.Escaped); return true; } else @@ -139,7 +147,7 @@ namespace Gaming { player.AddScore(GameData.StudentScoreEscape); ++gameMap.NumOfEscapedStudent; - player.Die(PlayerStateType.Escaped); + player.RemoveFromGame(PlayerStateType.Escaped); return true; } return false; diff --git a/logic/Gaming/CharacterManager .cs b/logic/Gaming/CharacterManager .cs index c5bc77c..5ca5692 100644 --- a/logic/Gaming/CharacterManager .cs +++ b/logic/Gaming/CharacterManager .cs @@ -378,12 +378,12 @@ namespace Gaming return true; } - private void Die(Character player) + public void Die(Student player) { #if DEBUG Debugger.Output(player, "die."); #endif - player.Die(PlayerStateType.Deceased); + player.RemoveFromGame(PlayerStateType.Deceased); for (int i = 0; i < GameData.maxNumOfPropInPropInventory; i++) { diff --git a/logic/Gaming/SkillManager/SkillManager.ActiveSkill.cs b/logic/Gaming/SkillManager/SkillManager.ActiveSkill.cs index 9216c4b..6d03565 100644 --- a/logic/Gaming/SkillManager/SkillManager.ActiveSkill.cs +++ b/logic/Gaming/SkillManager/SkillManager.ActiveSkill.cs @@ -49,8 +49,25 @@ namespace Gaming { foreach (Character person in gameMap.GameObjDict[GameObjType.Character]) { - if (!person.IsGhost()) - actionManager.MovePlayer(person, GameData.frameDuration, (player.Position - person.Position).Angle()); + if (!person.IsGhost() && player.CharacterType != CharacterType.Robot && !person.NoHp()) + { + double dis = XY.Distance(person.Position, player.Position); + if (dis >= player.AlertnessRadius) + { + person.AddMoveSpeed(GameData.checkIntervalWhenShowTime, dis / player.AlertnessRadius); + actionManager.MovePlayerWhenStunned(person, GameData.checkIntervalWhenShowTime, (player.Position - person.Position).Angle()); + } + else if (dis >= player.ViewRange) + { + Student student = (Student)person; + student.GamingAddiction += GameData.checkIntervalWhenShowTime; + if (student.GamingAddiction == student.MaxGamingAddiction) + { + player.AddScore(GameData.TrickerScoreStudentDie); + characterManager.Die(student); + } + } + } } } finally @@ -58,7 +75,7 @@ namespace Gaming gameMap.GameObjLockDict[GameObjType.Character].ExitReadLock(); } }, - timeInterval: GameData.frameDuration, + timeInterval: GameData.checkIntervalWhenShowTime, finallyReturn: () => 0 ) @@ -167,7 +184,7 @@ namespace Gaming { foreach (Character character in gameMap.GameObjDict[GameObjType.Character]) { - if (!character.IsGhost() && XY.Distance(character.Position, player.Position) <= player.ViewRange) + if (!character.IsGhost() && !character.NoHp() && XY.Distance(character.Position, player.Position) <= player.ViewRange) { if (characterManager.BeStunned(character, GameData.timeOfStudentStunnedWhenHowl)) player.AddScore(GameData.TrickerScoreStudentBeStunned(GameData.timeOfStudentStunnedWhenHowl)); diff --git a/logic/Preparation/Interface/ISkill.cs b/logic/Preparation/Interface/ISkill.cs index 01ad1b3..0cd6fdb 100644 --- a/logic/Preparation/Interface/ISkill.cs +++ b/logic/Preparation/Interface/ISkill.cs @@ -123,7 +123,7 @@ namespace Preparation.Interface public class ShowTime : IActiveSkill { - public int SkillCD => GameData.commonSkillCD * 3; + public int SkillCD => GameData.commonSkillCD * 8 / 3; public int DurationTime => GameData.commonSkillTime; private readonly object commonSkillLock = new();