예제 #1
0
        protected override bool witnessSuccessHandler(EventWitness witness, DeckController deck, GenericAction callback = null)
        {
            int playerIndex    = witness.getVar <int>("playerIndex");
            int cardRID        = witness.getVar <int>("cardRID");
            int cardDID        = witness.getVar <int>("cardDID");
            int targetPosition = witness.getVar <int>("targetPosition");

            int[] targetCardRID = witness.getVar <int[]>("targetCardsRID");

            UseCardEventArgs args;

            if (targetPosition == -1)
            {
                if (targetCardRID.Length == 0)
                {
                    args = new UseCardEventArgs();
                }
                else
                {
                    args = new UseCardWithTargetArgs(targetCardRID);
                }
            }
            else
            {
                if (targetCardRID.Length == 0)
                {
                    args = new UseCardWithPositionArgs(targetPosition);
                }
                else
                {
                    args = new UseCardWithTargetPositionArgs(targetPosition, targetCardRID);
                }
            }
            args.CardRID  = cardRID;
            args.CardDID  = cardDID;
            args.PlayerID = playerIndex;

            deck.RecvEvent(args, callback);
            return(true);
        }
예제 #2
0
 private void onUse(UseCardEventArgs arg1, GenericAction arg2)
 {
     PlayAnimation("UseCard", arg1, arg2);
 }
 /// <summary>
 /// 使用这张卡
 /// </summary>
 public void Use(UseCardEventArgs arg)
 {
     UberDebug.LogDebugChannel("Frontend", $"使用卡{this}");
     DoAction(arg);
 }
예제 #4
0
 /// <summary>
 /// 定时处理战斗逻辑
 /// </summary>
 public void _solve_battle_logic(List <RoomRole> targetNoCurrentTimeRoomRoles)
 {
     if (!IsMyTime || this.battleTimeType == BattleTimeType.OVER)
     {
         return;
     }
     // 能到我的回合,说明我还没有死!
     //依次执行,回合操作,战斗结束,死亡判断
     if (roleType == RoleType.NPC)
     {
         Console.WriteLine("处理NPC:" + this.id + "角色的战斗逻辑...");
         List <BaseRoleAction> targets = new List <BaseRoleAction>();
         //TODO需要删选,不能aoe呀
         foreach (var item in targetNoCurrentTimeRoomRoles)
         {
             targets.Add(item.role);
         }
         //做一些定时任务,每次执行指令应该需要时间,或者说?立刻返回
         // NPC应该只能调用技能。
         //TODO 判断如果血量超过阶段,触发方法
         Console.WriteLine("" + this.id + "开始随机使用技能。。。");
         //TODO 从技能中随机挑选一个使用以及随机判定卡牌使用不使用
         if (this.cardList != null && this.cardList.Count > 0)
         {
             Random rd        = new Random();
             int    cardIndex = rd.Next() % this.cardList.Count;
             var    args      = new UseCardEventArgs();
             args.targets = targets;//TODO 设置使用对象!
             this.cardList[cardIndex].useCard(this.role, args);
         }
         if (this.skillList != null && this.skillList.Count > 0)
         {
             Random rd         = new Random();
             int    skillIndex = rd.Next() % this.skillList.Count;
             var    args       = new UseSkillEventArgs();
             args.targets = targets;//TODO 设置使用对象!
             this.skillList[skillIndex].useSkill(this.role, args);
         }
         //发送回合结束的信息
         //this.isMyTime = false;
         this.battleTimeType = BattleTimeType.OVER;
         Console.WriteLine("" + this.id + "随机使用技能结束。。。");
         //TODO 发送NPC回合结束的触发
     }
     else if (roleType == RoleType.PLAYER && this.isActive)
     {
         //等待玩家输入指令
         Console.WriteLine("等待" + this.id + "玩家的输入");
         // var str = Console.ReadLine();
         // 说明输入了使用技能或卡牌
         if (_wantToUseCardSkill != null)
         {
             timesNoAction = 0;
             lock (_wantToUseCardSkill)
             {
                 if (_wantToUseCardSkill is UseCardEventArgs)
                 {
                     var      args    = (UseCardEventArgs)_wantToUseCardSkill;
                     BaseCard useCard = null;
                     if (this.cardList != null && this.cardList.Count > 0)
                     {
                         foreach (var item in this.cardList)
                         {
                             if (item.Id == args.UseCardId)
                             {
                                 useCard = item;
                                 break;
                             }
                         }
                         if (useCard != null)
                         {
                             UseCardEventArgs newargs = new UseCardEventArgs();
                             newargs.targets   = args.targets;
                             newargs.UseCardId = args.UseCardId;
                             useCard.useCard(this.role, newargs);
                         }
                     }
                 }
                 else if (_wantToUseCardSkill is UseSkillEventArgs)
                 {
                     var       args      = (UseSkillEventArgs)_wantToUseCardSkill;
                     BaseSkill baseSkill = null;
                     if (this.skillList != null && this.skillList.Count > 0)
                     {
                         foreach (var item in this.skillList)
                         {
                             if (item.Id == args.UseSkillId)
                             {
                                 baseSkill = item;
                                 break;
                             }
                         }
                         if (baseSkill != null)
                         {
                             UseSkillEventArgs newargs = new UseSkillEventArgs();
                             newargs.targets    = args.targets;
                             newargs.UseSkillId = args.UseSkillId;
                             baseSkill.useSkill(this.role, newargs);
                         }
                     }
                 }
                 //找不到的话,丢弃
                 this._wantToUseCardSkill = null;
             }
         }
         else
         {
             if (timesNoAction <= 1000)
             {
                 timesNoAction++;
             }
         }
         if (timesNoAction >= 10)
         {
             this.isActive = false;
         }
         else
         {
             this.isActive = true;
         }
     }
 }
예제 #5
0
        protected void __solve_message_dto(RoomDTO result)
        {
            //收到信息的处理
            //设置room的_wantToUseCardSkill,作为消费
            switch (result.protocol)
            {
            case BattleRoomProtocol.USE_CARD_C:
                //玩家使用来技能,针对那个对象等
            {
                Console.WriteLine("玩家房间角色:" + result.roomRoleId + "使用了卡牌");
                try
                {
                    UseCardEventArgs args = new UseCardEventArgs();
                    args.UseCardId = (int)result.map[CommonFieldProtocol.useCardId];
                    var targetIds = (List <string>)result.map[CommonFieldProtocol.targetIds];
                    args.targets   = getRolesByIds(targetIds);
                    args.UseRoleId = result.roomRoleId;
                    var role = getRoomRoleById(result.roomRoleId);
                    role._wantToUseCardSkill = args;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
            break;

            case BattleRoomProtocol.USE_SKILL_C:
                //玩家使用来技能,针对某个对象
            {
                Console.WriteLine("玩家房间角色:" + result.roomRoleId + "使用了技能");
                try
                {
                    UseSkillEventArgs args = new UseSkillEventArgs();
                    args.UseSkillId = (int)result.map[CommonFieldProtocol.useSkillId];
                    var targetIds = (List <string>)result.map[CommonFieldProtocol.targetIds];
                    args.targets   = getRolesByIds(targetIds);
                    args.UseRoleId = result.roomRoleId;
                    var role = getRoomRoleById(result.roomRoleId);
                    role._wantToUseCardSkill = args;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
            break;

            case BattleRoomProtocol.OVER_TIME_C:
                ///TODO 结束战斗回合
            {
                if (result.map.ContainsKey(CommonFieldProtocol.id))
                {
                    var id   = result.map[CommonFieldProtocol.id].ToString();
                    var role = getRoomRoleById(id);
                    if (role != null)
                    {
                        Console.WriteLine("" + id + "的角色结束了自己的回合!");
                        role.IsMyTime = false;
                    }
                }
            }
            break;
            }
        }