private void _nightmare_UseSkill(object sender, UseSkillEventArgs e) { var monster = (Monster)sender; switch (e.Spell) { case MonsterSpell.DogAttack: break; case MonsterSpell.Potlike: break; case MonsterSpell.Summon: break; case MonsterSpell.FireJeans: break; case MonsterSpell.Warp: monster.Warp(Maps.Kantru3, (byte)(monster.Position.X + Program.RandomProvider(6, -6)), (byte)(monster.Position.Y + Program.RandomProvider(6, -6)) ); break; } }
private void _hand_UseSkill(object sender, UseSkillEventArgs e) { var monster = sender as Monster; var msg1 = new SKanturuWideAttack { ObjClass = monster.Info.Monster, Type = 1, }; DamageType type; Spell spell; if (monster.Target != null) { var attack = monster.MonsterAttack(out type, out spell); monster.Target?.Character.GetAttacked(monster.Index, 1, 1, attack, type, spell, 0); } switch (e.Spell) { case MonsterSpell.Pressure: //monster.Spells.AttackSend(Spell.pres, monster.Target.ID, true); break; case MonsterSpell.PowerWave: monster.Spells.AttackSend(Spell.PowerWave, monster.Target.ID, true); break; case MonsterSpell.BrokenShower: _manager.SendAll(msg1); break; case MonsterSpell.IceStorm: break; } }
private void _maya_UseSkill(object sender, UseSkillEventArgs e) { var monster = sender as Monster; var msg0 = new SKanturuWideAttack { ObjClass = monster.Info.Monster, Type = 0, }; _manager.SendAll(msg0); }
/// <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; } }