Browse Source

Merge pull request #598 from shangfengh/new

fix: 🚑 fix the wrong PlayerState setting about addicted
tags/v0.1.0
shangfengh GitHub 2 years ago
parent
commit
0572c63a90
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 16 additions and 22 deletions
  1. +1
    -0
      docs/CAPI接口(cpp).md
  2. +4
    -4
      logic/GameClass/GameObj/Character/Character.cs
  3. +9
    -16
      logic/Gaming/ActionManager.cs
  4. +1
    -1
      logic/Preparation/Interface/ICharacter.cs
  5. +1
    -1
      logic/Preparation/Utility/GameData.cs

+ 1
- 0
docs/CAPI接口(cpp).md View File

@@ -9,6 +9,7 @@

#### 移动
- `std::future<bool> Move(int64_t timeInMilliseconds, double angleInRadian)`:移动,`timeInMilliseconds` 为移动时间,单位毫秒;`angleInRadian` 表示移动方向,单位弧度,使用极坐标,**竖直向下方向为 x 轴,水平向右方向为 y 轴**。因为移动过程中你会受到多种干扰使得移动结果不符合你的预期;因此建议小步移动,边移动边考虑之后的行为。
- 5ms 以内的移动指令会被禁止,你不应当使用过小的移动指令
- `std::future<bool> MoveRight(uint32_t timeInMilliseconds)`即向右移动,`MoveLeft`、`MoveDown`、`MoveUp` 同理

#### 使用技能


+ 4
- 4
logic/GameClass/GameObj/Character/Character.cs View File

@@ -594,14 +594,14 @@ namespace GameClass.GameObj
}
}

public bool ResetPlayerState(long state)
public bool ResetPlayerState(long state, RunningStateType running = RunningStateType.Null, PlayerStateType value = PlayerStateType.Null, IGameObj? obj = null)
{
lock (actionLock)
{
if (state != stateNum) return false;
runningState = RunningStateType.Null;
whatInteractingWith = null;
playerState = PlayerStateType.Null;
this.runningState = running;
whatInteractingWith = (GameObj?)obj;
playerState = value;
++stateNum;
return true;
}


+ 9
- 16
logic/Gaming/ActionManager.cs View File

@@ -305,11 +305,7 @@ namespace Gaming
long stateNum = player.SetPlayerState(RunningStateType.Waiting, PlayerStateType.Rescuing);
if (stateNum == -1)
{
lock (playerRescued.ActionLock)
{
if (playerRescued.StateNum == stateNumRescued)
player.SetPlayerStateNaturally();
}
playerRescued.ResetPlayerState(stateNumRescued, RunningStateType.RunningForcibly, PlayerStateType.Addicted);
return false;
}

@@ -321,14 +317,14 @@ namespace Gaming
if (!player.StartThread(stateNum, RunningStateType.RunningSleepily))
{
player.ThreadNum.Release();
playerRescued.ResetPlayerState(stateNum);
playerRescued.ResetPlayerState(stateNumRescued, RunningStateType.RunningForcibly, PlayerStateType.Addicted);
return;
}

playerRescued.ThreadNum.WaitOne();
if (!GameData.ApproachToInteract(playerRescued.Position, player.Position)) return;

if (!playerRescued.StartThread(stateNum, RunningStateType.RunningSleepily))
if (!playerRescued.StartThread(stateNumRescued, RunningStateType.RunningSleepily))
{
playerRescued.ThreadNum.Release();
if (!player.ResetPlayerState(stateNum))
@@ -344,7 +340,7 @@ namespace Gaming
{
if (playerRescued.StateNum == stateNumRescued)
{
if (playerRescued.AddTimeOfRescue(GameData.checkInterval * player.TreatSpeed))
if (playerRescued.AddTimeOfRescue(GameData.checkInterval))
{
playerRescued.SetPlayerStateNaturally();
playerRescued.HP = playerRescued.MaxHp / 2;
@@ -362,16 +358,11 @@ namespace Gaming
.Start();
playerRescued.SetTimeOfRescue(0);

player.ThreadNum.Release();
playerRescued.ThreadNum.Release();
if (player.ResetPlayerState(stateNum)) return;

lock (playerRescued.ActionLock)
{
if (playerRescued.StateNum == stateNumRescued)
{
playerRescued.SetPlayerState(RunningStateType.RunningForcibly, PlayerStateType.Addicted);
return;
}
}
playerRescued.ResetPlayerState(stateNumRescued, RunningStateType.RunningForcibly, PlayerStateType.Addicted);
}
)
{ IsBackground = true }.Start();
@@ -428,6 +419,7 @@ namespace Gaming

return true;
}

public bool ClimbingThroughWindow(Character player)
{
Window? windowForClimb = (Window?)gameMap.OneForInteractInACross(player.Position, GameObjType.Window);
@@ -501,6 +493,7 @@ namespace Gaming

return true;
}

public bool LockDoor(Character player)
{
if (player.CharacterType == CharacterType.Robot) return false;


+ 1
- 1
logic/Preparation/Interface/ICharacter.cs View File

@@ -16,7 +16,7 @@ namespace Preparation.Interface
public ActiveSkill FindActiveSkill(ActiveSkillType activeSkillType);
public int UpdateBulletNum(int time);
public long SetPlayerState(RunningStateType running, PlayerStateType value = PlayerStateType.Null, IGameObj? obj = null);
public bool ResetPlayerState(long state);
public bool ResetPlayerState(long state, RunningStateType running = RunningStateType.Null, PlayerStateType value = PlayerStateType.Null, IGameObj? obj = null);

public bool IsGhost();
}


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

@@ -105,7 +105,7 @@ namespace Preparation.Utility
public const int basicTimeOfRescue = 1000;

#if DEBUG
public const int basicStudentMoveSpeed = 3000;// 基本移动速度,单位:s-1
public const int basicStudentMoveSpeed = 9000;// 基本移动速度,单位:s-1
#else
public const int basicStudentMoveSpeed = 3000;
#endif


Loading…
Cancel
Save