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); }
private void onUse(UseCardEventArgs arg1, GenericAction arg2) { PlayAnimation("UseCard", arg1, arg2); }
/// <summary> /// 使用这张卡 /// </summary> public void Use(UseCardEventArgs arg) { UberDebug.LogDebugChannel("Frontend", $"使用卡{this}"); DoAction(arg); }
/// <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; } } }
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; } }