Browse Source

Merge pull request #580 from shangfengh/new

fix: 🐛 fix the bug about learning
tags/v0.1.0
DragonAura GitHub 2 years ago
parent
commit
890ca679a4
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 57 additions and 53 deletions
  1. +22
    -18
      logic/GameClass/GameObj/Map/Generator.cs
  2. +30
    -33
      logic/GameClass/GameObj/Map/Map.cs
  3. +4
    -1
      logic/Gaming/ActionManager.cs
  4. +1
    -1
      logic/Gaming/SkillManager/SkillManager.ActiveSkill.cs

+ 22
- 18
logic/GameClass/GameObj/Map/Generator.cs View File

@@ -37,28 +37,32 @@ namespace GameClass.GameObj
lock (gameObjLock)
return degreeOfRepair;
}
private set
}

public bool Repair(int addDegree, Character character)
{
int orgDegreeOfRepair, value;
lock (gameObjLock)
{
lock (gameObjLock)
if (degreeOfRepair == GameData.degreeOfFixedGenerator) return false;
orgDegreeOfRepair = degreeOfRepair;

degreeOfRepair += addDegree;
if (degreeOfRepair < 0) degreeOfRepair = 0;
else
{
if (degreeOfRepair < GameData.degreeOfFixedGenerator)//不允许正常破坏已经修好的发电机
if (value < 0) degreeOfRepair = 0;
else degreeOfRepair = value > GameData.degreeOfFixedGenerator ? GameData.degreeOfFixedGenerator : value;
if (degreeOfRepair > GameData.degreeOfFixedGenerator) degreeOfRepair = GameData.degreeOfFixedGenerator;
}
value = degreeOfRepair;
}
}

public bool Repair(int addDegree, Character character)
{
if (DegreeOfRepair == GameData.degreeOfFixedGenerator) return false;
int orgDegreeOfRepair = degreeOfRepair;
DegreeOfRepair += addDegree;
if (DegreeOfRepair > orgDegreeOfRepair)
character.AddScore(GameData.StudentScoreFix(DegreeOfRepair) - GameData.StudentScoreFix(orgDegreeOfRepair));
else character.AddScore(GameData.TrickerScoreDamageGenerator(orgDegreeOfRepair) - GameData.TrickerScoreDamageGenerator(DegreeOfRepair));
if (DegreeOfRepair == GameData.degreeOfFixedGenerator)
return true;
else return false;
if (value > orgDegreeOfRepair)
{
character.AddScore(GameData.StudentScoreFix(value) - GameData.StudentScoreFix(orgDegreeOfRepair));
if (value == GameData.degreeOfFixedGenerator) return true;
}
else character.AddScore(GameData.TrickerScoreDamageGenerator(orgDegreeOfRepair) - GameData.TrickerScoreDamageGenerator(value));
return false;
}
}
}
}

+ 30
- 33
logic/GameClass/GameObj/Map/Map.cs View File

@@ -58,41 +58,38 @@ namespace GameClass.GameObj
private uint numOfRepairedGenerators = 0;
public uint NumOfRepairedGenerators
{
get => numOfRepairedGenerators;
set
get => Interlocked.CompareExchange(ref numOfDeceasedStudent, 0, 0);
}
public void AddNumOfRepairedGenerators()
{
uint value = Interlocked.Increment(ref numOfDeceasedStudent);
if (value == GameData.numOfGeneratorRequiredForEmergencyExit)
{
lock (lockForNum)
GameObjLockDict[GameObjType.EmergencyExit].EnterWriteLock();
try
{
numOfRepairedGenerators = value;
if (NumOfRepairedGenerators == GameData.numOfGeneratorRequiredForEmergencyExit)
{
GameObjLockDict[GameObjType.EmergencyExit].EnterWriteLock();
try
{
Random r = new Random(Environment.TickCount);
EmergencyExit emergencyExit = (EmergencyExit)(GameObjDict[GameObjType.EmergencyExit][r.Next(0, GameObjDict[GameObjType.EmergencyExit].Count)]);
emergencyExit.CanOpen = true;
Preparation.Utility.Debugger.Output(emergencyExit, emergencyExit.Position.ToString());
}
finally
{
GameObjLockDict[GameObjType.EmergencyExit].ExitWriteLock();
}
}
else
if (NumOfRepairedGenerators == GameData.numOfGeneratorRequiredForRepair)
{
GameObjLockDict[GameObjType.Doorway].EnterWriteLock();
try
{
foreach (Doorway doorway in GameObjDict[GameObjType.Doorway])
doorway.PowerSupply = true;
}
finally
{
GameObjLockDict[GameObjType.Doorway].ExitWriteLock();
}
}
Random r = new Random(Environment.TickCount);
EmergencyExit emergencyExit = (EmergencyExit)(GameObjDict[GameObjType.EmergencyExit][r.Next(0, GameObjDict[GameObjType.EmergencyExit].Count)]);
emergencyExit.CanOpen = true;
Preparation.Utility.Debugger.Output(emergencyExit, emergencyExit.Position.ToString());
}
finally
{
GameObjLockDict[GameObjType.EmergencyExit].ExitWriteLock();
}
}
else
if (value == GameData.numOfGeneratorRequiredForRepair)
{
GameObjLockDict[GameObjType.Doorway].EnterWriteLock();
try
{
foreach (Doorway doorway in GameObjDict[GameObjType.Doorway])
doorway.PowerSupply = true;
}
finally
{
GameObjLockDict[GameObjType.Doorway].ExitWriteLock();
}
}
}


+ 4
- 1
logic/Gaming/ActionManager.cs View File

@@ -84,7 +84,10 @@ namespace Gaming

player.ThreadNum.WaitOne();
if (generatorForFix.DegreeOfRepair == GameData.degreeOfFixedGenerator)
{
player.ThreadNum.Release();
return false;
}

generatorForFix.AddNumOfFixing();
new Thread
@@ -97,7 +100,7 @@ namespace Gaming
loopToDo: () =>
{
if (generatorForFix.Repair(player.FixSpeed * GameData.checkInterval, player))
gameMap.NumOfRepairedGenerators++;
gameMap.AddNumOfRepairedGenerators();
if (generatorForFix.DegreeOfRepair == GameData.degreeOfFixedGenerator)
{
lock (player.ActionLock)


+ 1
- 1
logic/Gaming/SkillManager/SkillManager.ActiveSkill.cs View File

@@ -230,7 +230,7 @@ namespace Gaming
if (generator != null)
{
if (generator.Repair(((WriteAnswers)activeSkill).DegreeOfMeditation, player))
gameMap.NumOfRepairedGenerators++;
gameMap.AddNumOfRepairedGenerators();
Debugger.Output(player, "uses WriteAnswers in" + generator.ToString() + "with " + (((WriteAnswers)activeSkill).DegreeOfMeditation).ToString());
((WriteAnswers)activeSkill).DegreeOfMeditation = 0;
}


Loading…
Cancel
Save