diff --git a/logic/GameClass/GameObj/Bullet/Bullet.Ghost.cs b/logic/GameClass/GameObj/Bullet/Bullet.Ghost.cs index 52e29dc..4fc044e 100644 --- a/logic/GameClass/GameObj/Bullet/Bullet.Ghost.cs +++ b/logic/GameClass/GameObj/Bullet/Bullet.Ghost.cs @@ -71,10 +71,11 @@ namespace GameClass.GameObj public override int Speed => GameData.basicBulletMoveSpeed * 25 / 10; public override bool IsRemoteAttack => true; - public override int CastTime => GameData.basicCastTime * 4 / 5; + public const int castTime = GameData.basicCastTime * 6 / 5; + public override int CastTime => castTime; public override int Backswing => 0; public override int RecoveryFromHit => 0; - public const int cd = GameData.basicBackswing / 2; + public const int cd = castTime; public override int CD => cd; public const int maxBulletNum = 1; public override int MaxBulletNum => maxBulletNum; diff --git a/logic/GameClass/GameObj/Bullet/Bullet.cs b/logic/GameClass/GameObj/Bullet/Bullet.cs index 86fefab..2670f47 100644 --- a/logic/GameClass/GameObj/Bullet/Bullet.cs +++ b/logic/GameClass/GameObj/Bullet/Bullet.cs @@ -43,7 +43,7 @@ namespace GameClass.GameObj base(Position, radius, GameObjType.Bullet) { this.canMove = true; - this.moveSpeed = this.Speed; + this.MoveSpeed = this.Speed; this.hasSpear = player.TryUseSpear(); this.Parent = player; } diff --git a/logic/GameClass/GameObj/Character/Character.Skill.cs b/logic/GameClass/GameObj/Character/Character.Skill.cs index b9b152b..3218853 100644 --- a/logic/GameClass/GameObj/Character/Character.Skill.cs +++ b/logic/GameClass/GameObj/Character/Character.Skill.cs @@ -60,7 +60,7 @@ namespace GameClass.GameObj this.buffManager = new BuffManager(); this.occupation = OccupationFactory.FindIOccupation(characterType); this.MaxHp = this.hp = Occupation.MaxHp; - this.OrgMoveSpeed = this.moveSpeed = Occupation.MoveSpeed; + this.MoveSpeed = this.OrgMoveSpeed = Occupation.MoveSpeed; this.BulletOfPlayer = this.OriBulletOfPlayer = Occupation.InitBullet; this.concealment = Occupation.Concealment; this.alertnessRadius = Occupation.AlertnessRadius; diff --git a/logic/GameClass/GameObj/Prop.cs b/logic/GameClass/GameObj/Prop.cs index 3f085fa..363724f 100644 --- a/logic/GameClass/GameObj/Prop.cs +++ b/logic/GameClass/GameObj/Prop.cs @@ -23,7 +23,7 @@ namespace GameClass.GameObj base(initPos, radius, GameObjType.Prop) { this.canMove = false; - this.moveSpeed = GameData.PropMoveSpeed; + this.MoveSpeed = GameData.PropMoveSpeed; } } @@ -35,11 +35,28 @@ namespace GameClass.GameObj //{ // public DebuffMine(XYPosition initPos) : base(initPos) { } // } + + public sealed class CraftingBench : Prop + { + public override bool IsRigid => true; + public override bool IgnoreCollideExecutor(IGameObj targetObj) => false; + public CraftingBench(XY initPos) : + base(initPos) + { + } + public override PropType GetPropType() => PropType.CraftingBench; + } + + public abstract class BuffProp : Prop + { + public BuffProp(XY initPos) : base(initPos) { } + } + #region 所有增益道具 /// /// 增加速度 /// - public sealed class AddSpeed : Prop + public sealed class AddSpeed : BuffProp { public AddSpeed(XY initPos) : base(initPos) @@ -47,10 +64,11 @@ namespace GameClass.GameObj } public override PropType GetPropType() => PropType.AddSpeed; } + /// /// 复活甲 /// - public sealed class AddLifeOrClairaudience : Prop + public sealed class AddLifeOrClairaudience : BuffProp { public AddLifeOrClairaudience(XY initPos) : base(initPos) @@ -58,7 +76,7 @@ namespace GameClass.GameObj } public override PropType GetPropType() => PropType.AddLifeOrClairaudience; } - public sealed class AddHpOrAp : Prop + public sealed class AddHpOrAp : BuffProp { public AddHpOrAp(XY initPos) : base(initPos) @@ -66,7 +84,7 @@ namespace GameClass.GameObj } public override PropType GetPropType() => PropType.AddHpOrAp; } - public sealed class RecoveryFromDizziness : Prop + public sealed class RecoveryFromDizziness : BuffProp { public RecoveryFromDizziness(XY initPos) : base(initPos) @@ -77,28 +95,28 @@ namespace GameClass.GameObj /// /// 矛盾 /// - public sealed class ShieldOrSpear : Prop + public sealed class ShieldOrSpear : BuffProp { public ShieldOrSpear(XY initPos) : base(initPos) { } public override PropType GetPropType() => PropType.ShieldOrSpear; } - public sealed class Key3 : Prop + public sealed class Key3 : BuffProp { public Key3(XY initPos) : base(initPos) { } public override PropType GetPropType() => PropType.Key3; } - public sealed class Key5 : Prop + public sealed class Key5 : BuffProp { public Key5(XY initPos) : base(initPos) { } public override PropType GetPropType() => PropType.Key5; } - public sealed class Key6 : Prop + public sealed class Key6 : BuffProp { public Key6(XY initPos) : base(initPos) { @@ -145,6 +163,8 @@ namespace GameClass.GameObj { switch (propType) { + case PropType.CraftingBench: + return new CraftingBench(pos); case PropType.AddSpeed: return new AddSpeed(pos); case PropType.AddLifeOrClairaudience: diff --git a/logic/Gaming/ActionManager.cs b/logic/Gaming/ActionManager.cs index a8196bd..a80cdbf 100644 --- a/logic/Gaming/ActionManager.cs +++ b/logic/Gaming/ActionManager.cs @@ -191,6 +191,7 @@ namespace Gaming public bool Treat(Student player, Student? playerTreated = null) { + if (player.CharacterType == CharacterType.Robot) return false; if (playerTreated == null) { playerTreated = gameMap.StudentForInteract(player.Position); @@ -230,11 +231,14 @@ namespace Gaming } public bool Rescue(Student player, Student? playerRescued = null) { + if (player.CharacterType == CharacterType.Robot) return false; + if (playerRescued == null) { playerRescued = gameMap.StudentForInteract(player.Position); if (playerRescued == null) return false; } + if ((!player.Commandable()) || playerRescued.PlayerState != PlayerStateType.Addicted || !GameData.ApproachToInteract(playerRescued.Position, player.Position)) return false; player.SetPlayerState(PlayerStateType.Rescuing); @@ -363,9 +367,9 @@ namespace Gaming } player.MoveSpeed = player.SpeedOfClimbingThroughWindows; - moveEngine.MoveObj(player, GameData.numOfPosGridPerCell * 3 * 1000 / player.MoveSpeed / 2, (-1 * windowToPlayer).Angle(), stateNum); + moveEngine.MoveObj(player, (int)(GameData.numOfPosGridPerCell * 3 * 1000 / player.MoveSpeed / 2), (-1 * windowToPlayer).Angle(), stateNum); - Thread.Sleep(GameData.numOfPosGridPerCell * 3 * 1000 / player.MoveSpeed / 2); + Thread.Sleep((int)(GameData.numOfPosGridPerCell * 3 * 1000 / player.MoveSpeed / 2)); player.MoveSpeed = player.ReCalculateBuff(BuffType.AddSpeed, player.OrgMoveSpeed, GameData.MaxSpeed, GameData.MinSpeed); @@ -387,6 +391,7 @@ namespace Gaming } public bool LockOrOpenDoor(Character player) { + if (player.CharacterType == CharacterType.Robot) return false; if (!(player.Commandable()) || player.PlayerState == PlayerStateType.LockingOrOpeningTheDoor) return false; Door? doorToLock = (Door?)gameMap.OneForInteract(player.Position, GameObjType.Door); diff --git a/logic/Preparation/Interface/IMoveable.cs b/logic/Preparation/Interface/IMoveable.cs index ad87c31..725b750 100644 --- a/logic/Preparation/Interface/IMoveable.cs +++ b/logic/Preparation/Interface/IMoveable.cs @@ -7,7 +7,7 @@ namespace Preparation.Interface public interface IMoveable : IGameObj { object ActionLock { get; } - public int MoveSpeed { get; } + public long MoveSpeed { get; } public bool IsMoving { get; set; } public bool IsRemoved { get; } public bool IsAvailableForMove { get; } diff --git a/logic/Preparation/Interface/IOccupation.cs b/logic/Preparation/Interface/IOccupation.cs index 334ab06..68f2632 100644 --- a/logic/Preparation/Interface/IOccupation.cs +++ b/logic/Preparation/Interface/IOccupation.cs @@ -275,10 +275,10 @@ namespace Preparation.Interface } public class Robot : IStudentType { - private const int moveSpeed = (int)(GameData.basicStudentMoveSpeed); + private const int moveSpeed = (int)(GameData.basicStudentMoveSpeed * 9 / 10); public int MoveSpeed => moveSpeed; - private const int maxHp = (int)(GameData.basicHp / 2.5); + private const int maxHp = (int)(GameData.basicHp * 3 / 10); public int MaxHp => maxHp; private const int maxGamingAddiction = 0; @@ -286,25 +286,25 @@ namespace Preparation.Interface public BulletType InitBullet => BulletType.Null; - public List ListOfIActiveSkill => new(new ActiveSkillType[] { }); - public List ListOfIPassiveSkill => new(new PassiveSkillType[] { }); + public List ListOfIActiveSkill => new(System.Array.Empty()); + public List ListOfIPassiveSkill => new(System.Array.Empty()); - public const int fixSpeed = GameData.basicFixSpeed; + public const int fixSpeed = GameData.basicFixSpeed * 85 / 123; public int FixSpeed => fixSpeed; public const int treatSpeed = 0; public int TreatSpeed => treatSpeed; - public const double concealment = GameData.basicConcealment; + public const double concealment = GameData.basicConcealment * 0.8; public double Concealment => concealment; - public const int alertnessRadius = (int)(GameData.basicStudentAlertnessRadius); + public const int alertnessRadius = 0; public int AlertnessRadius => alertnessRadius; - public int viewRange = GameData.basicStudentViewRange; + public int viewRange = 0; public int ViewRange => viewRange; - public int speedOfOpeningOrLocking = GameData.basicSpeedOfOpeningOrLocking; + public int speedOfOpeningOrLocking = 0; public int SpeedOfOpeningOrLocking => speedOfOpeningOrLocking; public int speedOfClimbingThroughWindows = 1; diff --git a/logic/Preparation/Utility/EnumType.cs b/logic/Preparation/Utility/EnumType.cs index 5bd1032..8292b29 100644 --- a/logic/Preparation/Utility/EnumType.cs +++ b/logic/Preparation/Utility/EnumType.cs @@ -71,6 +71,7 @@ namespace Preparation.Utility AddHpOrAp = 6, ShieldOrSpear = 7, RecoveryFromDizziness = 8, + CraftingBench = 9, } public enum CharacterType // 职业 { diff --git a/logic/Server/CopyInfo.cs b/logic/Server/CopyInfo.cs index 9b4ff84..2cd8dae 100644 --- a/logic/Server/CopyInfo.cs +++ b/logic/Server/CopyInfo.cs @@ -58,7 +58,7 @@ namespace Server { X = player.Position.x, Y = player.Position.y, - Speed = player.MoveSpeed, + Speed = (int)player.MoveSpeed, Determination = player.HP, Addiction = player.GamingAddiction, Guid = player.ID, @@ -106,7 +106,7 @@ namespace Server { X = player.Position.x, Y = player.Position.y, - Speed = player.MoveSpeed, + Speed = (int)player.MoveSpeed, TrickerType = Transformation.ToTrickerType(player.CharacterType), Guid = player.ID,