using CommonAI.ZoneClient; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using pomelo.connector; using XmdsBattleClientBot.Bot; using pomelo.area; using CommonLang; using XmdsCommon.ZoneClient; using CommonAI.Zone; using CommonLang.Property; namespace XmdsBotTest.Runner { public class ModuleDungeon : BotRunner.RunnerModule { private FubenListResponse LastFubenList; private FubenInfo LastSelectFuben; private EnterDungeonRequest LastEnterFuben; public ModuleDungeon(BotRunner r) : base(r) { } protected internal override void OnGateBindPlayer(BindPlayerResponse e) { base.OnGateBindPlayer(e); select_random_fuben(); } protected override void OnEnableChanged(bool enable) { base.OnEnableChanged(enable); if (Enable) { try_enter_selected_fuben(); } } protected internal override void OnBattleActorReady(CommonAI.ZoneClient.ZoneLayer layer, CommonAI.ZoneClient.ZoneActor actor) { layer.AddTimeDelayMS(Config.CheckIntervalMS, (t) => { if (Enable) { try_enter_selected_fuben(); get_fuben_list(); } }); layer.AddTimePeriodicMS(Config.CheckIntervalMS, (t) => { if (Enable) { on_do_1s(layer as HZZoneLayer); } }); layer.MessageReceived += Layer_MessageReceived; } private void Layer_MessageReceived(ZoneLayer layer, CommonLang.Protocol.IMessage msg) { if (msg is GameOverEvent) { on_game_over(); } } private void select_random_fuben() { client.GameSocket.fightLevelHandler.fubenListRequest( 0, (err, rsp) => { LastFubenList = rsp; LastSelectFuben = CUtils.GetRandomInArray<FubenInfo>(rsp.s2c_list, bot.Random); // LastSelectFuben = rsp.s2c_list[0]; runner.log_response("fubenListRequest done", err, rsp); }); } private void get_fuben_list() { client.GameSocket.fightLevelHandler.fubenListRequest( 0, (err, rsp) => {}); } private void try_enter_selected_fuben() { if (LastSelectFuben != null) { //当前场景不是要进的副本// if (LastEnterFuben == null || LastSelectFuben.mapId != LastEnterFuben.c2s_dungeonId) { client.GameSocket.fightLevelHandler.enterDungeonRequest(LastSelectFuben.mapId, (err, rsp) => { runner.log_response("enterDungeonRequest done", err, rsp); if (rsp != null) { LastEnterFuben = new EnterDungeonRequest(); LastEnterFuben.c2s_dungeonId = LastSelectFuben.mapId; } else { LastEnterFuben = null; } }); } else { LastEnterFuben = null; } } } private void on_game_over() { LastSelectFuben = null; LastEnterFuben = null; select_random_fuben(); client.GameSocket.fightLevelHandler.leaveDungeonRequest((err, rsp) => { runner.log_response("leaveDungeonRequest done", err, rsp); }); } private void on_do_1s(HZZoneLayer layer) { layer.Actor.SendUnitGuard(true); if (runner.CurrentMoveAgent == null || runner.CurrentMoveAgent.IsEnd) { runner.do_bs_actor_random_move_region(true, 0.01f); } //if(bot.CurrentSceneType == XmdsCommon.EditorData.XmdsConstConfig.SceneType.Dungeon) //{ // on_game_over(); //} } [Desc("副本配置")] [Expandable] public class Config { [Desc("副本检测间隔")] public static int CheckIntervalMS = 5000; [Desc("副本难度")] public static BotClient.DungeonType DType = BotClient.DungeonType.单人副本; [Desc("副本等级")] public static BotClient.DungeonLevel DLevel = BotClient.DungeonLevel.普通; public override string ToString() { return "副本配置"; } } } }