| @@ -460,6 +460,19 @@ namespace GameClass.GameObj | |||||
| } | } | ||||
| } | } | ||||
| public Prop UseProp(PropType propType) | |||||
| { | |||||
| lock (gameObjLock) | |||||
| { | |||||
| foreach (Prop prop in propInventory) | |||||
| { | |||||
| if (prop.GetPropType() == propType) | |||||
| return prop; | |||||
| } | |||||
| return new NullProp(); | |||||
| } | |||||
| } | |||||
| /// <summary> | /// <summary> | ||||
| /// 如果indexing==GameData.maxNumOfPropInPropInventory表明道具栏为满 | /// 如果indexing==GameData.maxNumOfPropInPropInventory表明道具栏为满 | ||||
| /// </summary> | /// </summary> | ||||
| @@ -95,7 +95,8 @@ namespace GameClass.GameObj | |||||
| return ActiveSkillType.UseKnife; | return ActiveSkillType.UseKnife; | ||||
| case CanBeginToCharge: | case CanBeginToCharge: | ||||
| return ActiveSkillType.CanBeginToCharge; | return ActiveSkillType.CanBeginToCharge; | ||||
| case Teacher: | |||||
| case Punish: | |||||
| return ActiveSkillType.Publish; | |||||
| default: | default: | ||||
| return ActiveSkillType.Null; | return ActiveSkillType.Null; | ||||
| } | } | ||||
| @@ -341,24 +341,24 @@ namespace Gaming | |||||
| _ = attackManager.Attack(player, angle); | _ = attackManager.Attack(player, angle); | ||||
| } | } | ||||
| } | } | ||||
| public void UseProp(long playerID, int indexing) | |||||
| public void UseProp(long playerID, PropType propType) | |||||
| { | { | ||||
| if (!gameMap.Timer.IsGaming) | if (!gameMap.Timer.IsGaming) | ||||
| return; | return; | ||||
| Character? player = gameMap.FindPlayer(playerID); | Character? player = gameMap.FindPlayer(playerID); | ||||
| if (player != null) | if (player != null) | ||||
| { | { | ||||
| propManager.UseProp(player, indexing); | |||||
| propManager.UseProp(player, propType); | |||||
| } | } | ||||
| } | } | ||||
| public void ThrowProp(long playerID, int indexing) | |||||
| public void ThrowProp(long playerID, PropType propType) | |||||
| { | { | ||||
| if (!gameMap.Timer.IsGaming) | if (!gameMap.Timer.IsGaming) | ||||
| return; | return; | ||||
| Character? player = gameMap.FindPlayer(playerID); | Character? player = gameMap.FindPlayer(playerID); | ||||
| if (player != null) | if (player != null) | ||||
| { | { | ||||
| propManager.ThrowProp(player, indexing); | |||||
| propManager.ThrowProp(player, propType); | |||||
| } | } | ||||
| } | } | ||||
| public bool PickProp(long playerID, PropType propType = PropType.Null) | public bool PickProp(long playerID, PropType propType = PropType.Null) | ||||
| @@ -373,14 +373,14 @@ namespace Gaming | |||||
| return false; | return false; | ||||
| } | } | ||||
| public bool UseActiveSkill(long playerID, ActiveSkillType activeSkillType) | |||||
| public bool UseActiveSkill(long playerID, int skillNum) | |||||
| { | { | ||||
| if (!gameMap.Timer.IsGaming) | if (!gameMap.Timer.IsGaming) | ||||
| return false; | return false; | ||||
| Character? player = gameMap.FindPlayer(playerID); | Character? player = gameMap.FindPlayer(playerID); | ||||
| if (player != null) | if (player != null) | ||||
| { | { | ||||
| return skillManager.UseActiveSkill(player, activeSkillType); | |||||
| return skillManager.UseActiveSkill(player, player.Occupation.ListOfIActiveSkill[skillNum]); | |||||
| } | } | ||||
| else | else | ||||
| return false; | return false; | ||||
| @@ -21,11 +21,11 @@ namespace Gaming | |||||
| private readonly List<XY> availableCellForGenerateProp; | private readonly List<XY> availableCellForGenerateProp; | ||||
| public void UseProp(Character player, int indexing) | |||||
| public void UseProp(Character player, PropType propType) | |||||
| { | { | ||||
| if (player.IsResetting) | if (player.IsResetting) | ||||
| return; | return; | ||||
| Prop prop = player.UseProp(indexing); | |||||
| Prop prop = player.UseProp(propType); | |||||
| switch (prop.GetPropType()) | switch (prop.GetPropType()) | ||||
| { | { | ||||
| case PropType.ShieldOrSpear: | case PropType.ShieldOrSpear: | ||||
| @@ -106,11 +106,11 @@ namespace Gaming | |||||
| return false; | return false; | ||||
| } | } | ||||
| public void ThrowProp(Character player, int indexing) | |||||
| public void ThrowProp(Character player, PropType propType) | |||||
| { | { | ||||
| if (!gameMap.Timer.IsGaming || player.IsResetting) | if (!gameMap.Timer.IsGaming || player.IsResetting) | ||||
| return; | return; | ||||
| Prop prop = player.UseProp(indexing); | |||||
| Prop prop = player.UseProp(propType); | |||||
| if (prop.GetPropType() == PropType.Null) | if (prop.GetPropType() == PropType.Null) | ||||
| return; | return; | ||||
| @@ -76,7 +76,7 @@ namespace Preparation.Interface | |||||
| public BulletType InitBullet => BulletType.Null; | public BulletType InitBullet => BulletType.Null; | ||||
| public List<ActiveSkillType> ListOfIActiveSkill => new(new ActiveSkillType[] { }); | |||||
| public List<ActiveSkillType> ListOfIActiveSkill => new(new ActiveSkillType[] { ActiveSkillType.Publish }); | |||||
| public List<PassiveSkillType> ListOfIPassiveSkill => new(new PassiveSkillType[] { }); | public List<PassiveSkillType> ListOfIPassiveSkill => new(new PassiveSkillType[] { }); | ||||
| public const int fixSpeed = 0; | public const int fixSpeed = 0; | ||||
| @@ -116,7 +116,7 @@ namespace Preparation.Interface | |||||
| public BulletType InitBullet => BulletType.Null; | public BulletType InitBullet => BulletType.Null; | ||||
| public List<ActiveSkillType> ListOfIActiveSkill => new(new ActiveSkillType[] { }); | |||||
| public List<ActiveSkillType> ListOfIActiveSkill => new(new ActiveSkillType[] { ActiveSkillType.CanBeginToCharge }); | |||||
| public List<PassiveSkillType> ListOfIPassiveSkill => new(new PassiveSkillType[] { }); | public List<PassiveSkillType> ListOfIPassiveSkill => new(new PassiveSkillType[] { }); | ||||
| public const int fixSpeed = GameData.basicFixSpeed * 6 / 10; | public const int fixSpeed = GameData.basicFixSpeed * 6 / 10; | ||||
| @@ -90,7 +90,8 @@ namespace Preparation.Utility | |||||
| NuclearWeapon = 3, | NuclearWeapon = 3, | ||||
| SuperFast = 4, | SuperFast = 4, | ||||
| UseKnife = 5, | UseKnife = 5, | ||||
| CanBeginToCharge = 6 | |||||
| CanBeginToCharge = 6, | |||||
| Publish = 7, | |||||
| } | } | ||||
| public enum PassiveSkillType | public enum PassiveSkillType | ||||
| { | { | ||||
| @@ -259,11 +259,11 @@ namespace Server | |||||
| foreach (var keyValue in player.TimeUntilActiveSkillAvailable) | foreach (var keyValue in player.TimeUntilActiveSkillAvailable) | ||||
| msg.TrickerMessage.TimeUntilSkillAvailable.Add(keyValue.Value); | msg.TrickerMessage.TimeUntilSkillAvailable.Add(keyValue.Value); | ||||
| for (int i = 0; i < GameData.maxNumOfSkill - player.TimeUntilActiveSkillAvailable.Count(); ++i) | for (int i = 0; i < GameData.maxNumOfSkill - player.TimeUntilActiveSkillAvailable.Count(); ++i) | ||||
| msg.StudentMessage.TimeUntilSkillAvailable.Add(-1); | |||||
| msg.TrickerMessage.TimeUntilSkillAvailable.Add(-1); | |||||
| msg.TrickerMessage.Place = ToPlaceType(player.Place); | msg.TrickerMessage.Place = ToPlaceType(player.Place); | ||||
| foreach (var value in player.PropInventory) | foreach (var value in player.PropInventory) | ||||
| msg.StudentMessage.Prop.Add(ToPropType(value.GetPropType())); | |||||
| msg.TrickerMessage.Prop.Add(ToPropType(value.GetPropType())); | |||||
| msg.TrickerMessage.TrickerType = ToTrickerType(player.CharacterType); | msg.TrickerMessage.TrickerType = ToTrickerType(player.CharacterType); | ||||
| msg.TrickerMessage.Guid = player.ID; | msg.TrickerMessage.Guid = player.ID; | ||||