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,