/// <summary> /// 运行奥秘 /// </summary> /// <param name="SecretCardSN"></param> /// <param name="ActionCode"></param> /// <param name="HitMySelf"></param> /// <returns></returns> public static List <String> RunSecretHit(String SecretCardSN, String ActionCode, Boolean HitMySelf, Card.Client.GameManager game) { List <String> ActionLst = new List <string>(); SecretCard card = (SecretCard)CardUtility.GetCardInfoBySN(SecretCardSN); var actiontype = Card.Server.ActionCode.GetActionType(ActionCode); var actionField = ActionCode.Split(Card.CardUtility.strSplitMark.ToCharArray()); ActionLst.Add(Card.Server.ActionCode.strHitSecret + CardUtility.strSplitMark + (HitMySelf ? CardUtility.strMe : CardUtility.strYou) + CardUtility.strSplitMark + SecretCardSN); //HitMySelf 在自己的回合运行自己的奥秘 switch (card.Condition) { case SecretCondition.对方召唤随从: //如果是召唤系的 if (HitMySelf) { //在自己的回合运行自己的奥秘 //SUMMON#YOU#M000001#POS //例如:亡语的时候可能召唤一个新的随从 PointEffect.RunPointEffect(game.YourInfo.BattleField.BattleMinions[int.Parse(actionField[3]) - 1], card.AdditionInfo); ActionLst.Add(Card.Server.ActionCode.strPoint + Card.CardUtility.strSplitMark + CardUtility.strYou + Card.CardUtility.strSplitMark + actionField[3] + Card.CardUtility.strSplitMark + card.AdditionInfo); } else { //在自己的回合运行别人的奥秘 if (actiontype == Server.ActionCode.ActionType.Summon) { //SUMMON#YOU#M000001#POS PointEffect.RunPointEffect(game.MyInfo.BattleField.BattleMinions[int.Parse(actionField[3]) - 1], card.AdditionInfo); ActionLst.Add(Card.Server.ActionCode.strPoint + Card.CardUtility.strSplitMark + CardUtility.strMe + Card.CardUtility.strSplitMark + actionField[3] + Card.CardUtility.strSplitMark + card.AdditionInfo); } else { //MINION#M000001#1 PointEffect.RunPointEffect(game.MyInfo.BattleField.BattleMinions[int.Parse(actionField[2]) - 1], card.AdditionInfo); ActionLst.Add(Card.Server.ActionCode.strPoint + Card.CardUtility.strSplitMark + CardUtility.strMe + Card.CardUtility.strSplitMark + actionField[2] + Card.CardUtility.strSplitMark + card.AdditionInfo); } } break; default: break; } return(ActionLst); }
/// <summary> /// 创建点特效 /// 特效只在一个位置上 /// </summary> /// <param name="effectKey"></param> /// <param name="parent"></param> /// <param name="position"></param> /// <param name="scale"></param> /// <param name="durTime"></param> /// <param name="speed"></param> /// <param name="completeCallback">完成回调</param> /// <param name="effectLayer">特效所在渲染层</param> /// <param name="rotate">x,y旋转量</param> /// <returns>特效对象</returns> public EffectBehaviorAbstract CreatePointEffect(string effectKey, Transform parent, Vector3 position, Vector3 scale, float durTime, float speed, Action completeCallback = null, int effectLayer = 0, Vector2 rotate = new Vector2()) { EffectBehaviorAbstract result = null; result = new PointEffect(effectKey, parent, position, scale, durTime, speed, completeCallback, effectLayer, rotate); return(result); }
/// <summary> /// 处理对方的动作 /// </summary> /// <param name="ActionCommand"></param> /// <param name="game"></param> public static void Process(string ActionCommand, ActionStatus game) { string[] actField = ActionCommand.Split(CardUtility.strSplitMark.ToCharArray()); switch (ActionCode.GetActionType(ActionCommand)) { case ActionCode.ActionType.Card: CardEffect.ReRunEffect(1, game, actField); break; case ActionCode.ActionType.UseMinion: int Pos = int.Parse(actField[2]); var minion = (MinionCard)CardUtility.GetCardInfoBySN(actField[1]); minion.初始化(); game.AllRole.YourPublicInfo.BattleField.PutToBattle(Pos, minion); Buff.ResetBuff(game); break; case ActionCode.ActionType.UseWeapon: game.AllRole.YourPublicInfo.Hero.Weapon = (WeaponCard)CardUtility.GetCardInfoBySN(actField[1]); break; case ActionCode.ActionType.UseSecret: game.AllRole.YourPublicInfo.Hero.SecretCount++;; break; case ActionCode.ActionType.UseAbility: break; case ActionCode.ActionType.Fight: //FIGHT#1#2 FightHandler.Fight(int.Parse(actField[2]), int.Parse(actField[1]), game, false); break; case ActionCode.ActionType.Point: IAtomicEffect point = new PointEffect(); point.ReRunEffect(game, actField); break; case ActionCode.ActionType.Health: IAtomicEffect health = new HealthEffect(); health.ReRunEffect(game, actField); break; case ActionCode.ActionType.Status: IAtomicEffect status = new StatusEffect(); status.ReRunEffect(game, actField); break; case ActionCode.ActionType.Transform: IAtomicEffect transform = new TransformEffect(); transform.ReRunEffect(game, actField); break; case ActionCode.ActionType.Attack: IAtomicEffect attack = new AttackEffect(); attack.ReRunEffect(game, actField); break; case ActionCode.ActionType.HitSecret: SecretCard.ReRunSecret(game, actField); break; case ActionCode.ActionType.Control: ControlEffect.ReRunEffect(game, actField); break; case ActionCode.ActionType.Summon: SummonEffect.ReRunEffect(game, actField); break; case ActionCode.ActionType.Crystal: CrystalEffect.ReRunEffect(game, actField); break; case ActionCode.ActionType.WeaponPoint: WeaponPointEffect.ReRunEffect(game, actField); break; case ActionCode.ActionType.Settle: ActionStatus.Settle(game); break; } }
/// <summary> /// 运行效果 /// </summary> /// <param name="game"></param> /// <param name="actField"></param> private static void RunNormalEffect(GameManager game, string[] actField) { //ATTACK#ME#POS#AP //Me代表对方 YOU代表自己,必须反过来 IEffectHandler handler = new AttackEffect(); EffectDefine SingleEffect = new EffectDefine(); switch (actField[0]) { case Card.Server.ActionCode.strAttack: handler = new AttackEffect(); SingleEffect.ActualEffectPoint = int.Parse(actField[3]); break; case Card.Server.ActionCode.strHealth: handler = new HealthEffect(); SingleEffect.ActualEffectPoint = int.Parse(actField[3]); if (actField.Length == 5) { SingleEffect.AdditionInfo = actField[4]; } break; case Card.Server.ActionCode.strStatus: handler = new StatusEffect(); SingleEffect.AdditionInfo = actField[3]; break; case Card.Server.ActionCode.strPoint: handler = new PointEffect(); SingleEffect.AdditionInfo = actField[3]; SingleEffect.StandardEffectPoint = int.Parse(actField[4]); break; case Card.Server.ActionCode.strTransform: handler = new TransformEffect(); SingleEffect.AdditionInfo = actField[3]; break; } if (actField[1] == CardUtility.strYou) { switch (int.Parse(actField[2])) { case BattleFieldInfo.HeroPos: handler.DealHero(game, SingleEffect, true); break; case BattleFieldInfo.AllPos: for (int i = 0; i < game.MyInfo.BattleField.MinionCount; i++) { handler.DealMinion(game, SingleEffect, true, i); } break; default: handler.DealMinion(game, SingleEffect, true, int.Parse(actField[2]) - 1); break; } } else { switch (int.Parse(actField[2])) { case BattleFieldInfo.HeroPos: handler.DealHero(game, SingleEffect, false); break; case BattleFieldInfo.AllPos: for (int i = 0; i < game.YourInfo.BattleField.MinionCount; i++) { handler.DealMinion(game, SingleEffect, false, i); } break; default: handler.DealMinion(game, SingleEffect, false, int.Parse(actField[2]) - 1); break; } } }