int BattleMapPolicy() { if (CurMapID == CurMissionMap.MapID) { if (CurMapID != LoadBattleMapID) { Program.client.Update(); Thread.Sleep(1000); UpdateMap(bGroupExploreModel); LoadBattleMapID = CurMapID; FilterMonsterList.Clear(); PassedDoor.Clear(); areaCrossList.Clear(); AddedCrossPoint.Clear(); ClickedBoxList.Clear(); LootFilter.Clear(); curGroup = -1; Program.client.ClearTrophyFilter(); // bGroupExploreModel = false;//判断 bNeedCross = false; //判断探索还是穿越 bCrossing = false; //判断穿越中还是移动到穿越点 bNeedCastBattleOnceSkill = true; } } if (CurMapID == pollutantMapID) { if (CurMapID != LoadPollutantMapID) { Program.client.Update(); Thread.Sleep(1000); UpdatePollutantMap(); LoadPollutantMapID = CurMapID; FilterMonsterList.Clear(); ClickedBoxList.Clear(); LootFilter.Clear(); Program.client.ClearTrophyFilter(); } } return(1); }
TrophyInfo TargetTrophy = null;//防止乱跑 TrophyInfo SearchLoot() { double NearestDis = 10000.0; GPoint tpos = new GPoint(); TrophyInfo NearestTrophy = null; //搜索最近的战利品 foreach (var item in trophyList) { if (LootFilter.Contains(item.ObjPtr)) { continue; } tpos.x = (ushort)item.X; tpos.y = (ushort)item.Y; double dis = CalcDis(player.Pos, tpos); if (TargetTrophy != null) { if (TargetTrophy.ID == item.ID) { NearestTrophy = item; TargetTrophy = item; break; } } if (dis < NearestDis) { NearestTrophy = item; NearestDis = dis; } } if (TargetTrophy != null && NearestTrophy != null) { if (TargetTrophy.ID != NearestTrophy.ID) { TargetTrophy = NearestTrophy; } } //返回战利品 return(NearestTrophy); }
/// /////////////////////////////////////////////// /// bool ChangeToNextMissionMap() { FilterMonsterList.Clear(); PassedDoor.Clear(); areaCrossList.Clear(); AddedCrossPoint.Clear(); ClickedBoxList.Clear(); LootFilter.Clear(); Program.client.ClearTrophyFilter(); bGroupExploreModel = false; //判断 bNeedCross = false; //判断探索还是穿越 bCrossing = false; //判断穿越中还是移动到穿越点 Program.runtime.curMissionMapIndex++; if (Program.config.MissionMapList.Count == Program.runtime.curMissionMapIndex) { Program.runtime.curMissionMapIndex = 0; } string strKey = Program.config.MissionMapList[Program.runtime.curMissionMapIndex]; if (Program.gdata.AllBattleMap.TryGetValue(strKey, out CurMissionMap) == false) { CurMissionMap = null; System.Windows.Forms.MessageBox.Show("Test"); return(false); } if (CurMissionMap.MapID == 9837 || CurMissionMap.MapID == 63025 || CurMissionMap.MapID == 21866) { bGroupExploreModel = true; } else { bGroupExploreModel = false; } return(true); }
int HandMissionAnalysis() { //如果不在任务地点,去任务地点 //如果在城里,如果需要去传送门,则去传送门,否则去传送点 if (InTown()) { MessageBox.Show("輔助模式,請在目標探索地圖開啟輔助程式"); return(0); } if (CurMapID != LoadBattleMapID) { Program.client.Update(); Thread.Sleep(1000); UpdateMap(bGroupExploreModel); LoadBattleMapID = CurMapID; FilterMonsterList.Clear(); PassedDoor.Clear(); areaCrossList.Clear(); AddedCrossPoint.Clear(); ClickedBoxList.Clear(); LootFilter.Clear(); curGroup = -1; Program.client.ClearTrophyFilter(); // bGroupExploreModel = false;//判断 bNeedCross = false; //判断探索还是穿越 bCrossing = false; //判断穿越中还是移动到穿越点 bNeedCastBattleOnceSkill = true; // Thread.Sleep(1000); } int curTickCount = System.Environment.TickCount; //贫血小退 if (Program.config.LogoutType == 0) { int data = player.HP; if (data < Program.config.LogOutData) { ReturnRolePolicy(); if ((curTickCount - lastReturnTime) < 1000 * 60) { LogoutCount++; } else { LogoutCount = 0; } lastReturnTime = curTickCount; if (LogoutCount > 5) { LogoutCount = 0; curStatus = Status.GotoBack; SetNeedGoBack(); bNeedResetBattleMapInfo = true; ChangeToNextMissionMap(); //bNeedResetBattleMapID = true; //pollutantMapID = 0;//污染地穴地图ID //LoadPollutantMapID = 0; //pollutantGatePos = null;//门位置 //pollutantComplete = false;//已经刷完 //bEnterPollutanting = false;//正在进入污染地穴 } Thread.Sleep(1000); return(0); } } else if (Program.config.LogoutType == 1) { int data = player.Shield; if (data < Program.config.LogOutData) { ReturnRolePolicy(); if ((curTickCount - lastReturnTime) < 1000 * 60) { LogoutCount++; } else { LogoutCount = 0; } lastReturnTime = curTickCount; if (LogoutCount > 5) { LogoutCount = 0; curStatus = Status.GotoBack; SetNeedGoBack(); bNeedResetBattleMapInfo = true; ChangeToNextMissionMap(); //bNeedResetBattleMapID = true; //ChangeToNextMissionMap(); //pollutantMapID = 0;//污染地穴地图ID //LoadPollutantMapID = 0; //pollutantGatePos = null;//门位置 //pollutantComplete = false;//已经刷完 //bEnterPollutanting = false;//正在进入污染地穴 } Thread.Sleep(1000); return(0); } } //如果需要施放光环 if ((curTickCount - LastCheckHaloTime) > (5 * 1000)) { if (Program.config.bAutoUpSkill) { Program.client.UpSkill(); } if (Program.config.haloSkill.Count > 0) { foreach (var item in Program.config.haloSkill) { if (Program.client.IsBuffExists(item) == false) { Program.client.CastUntargetSkill((short)player.Pos.x, (short)player.Pos.y, (short)item, 8); Thread.Sleep(1000); } } } LastCheckHaloTime = curTickCount; } if (bNeedCastBattleOnceSkill) { if (Program.config.battleOnceSkill.Count > 0) { foreach (var item in Program.config.battleOnceSkill) { Program.client.CastUntargetSkill((short)player.Pos.x, (short)player.Pos.y, (short)item, 8); Thread.Sleep(1000); } } bNeedCastBattleOnceSkill = false; } //区域传送点 if (bGroupExploreModel) { // if (curGroup != -1) { foreach (var item in areaCrossList) { //如果没被处理过 if (AddedCrossPoint.Contains(item.Pos)) { continue; } CrossPoint crossPoint = new CrossPoint(); crossPoint.firstGroup = GetCurGroup(player.Pos.x, player.Pos.y); crossPoint.firstPos.x = item.Pos.x; crossPoint.firstPos.y = item.Pos.y; allCrossPoint.Add(crossPoint); AddedCrossPoint.Add(item.Pos); SetPassAbleArea(item.Pos.x, item.Pos.y); } } } ////////////////////////////////药剂 ActDrinkFlask(curTickCount); //////////////////////////////////// // //如果有门在身边,则点 SDoor Door = SearchDoor(); if (Door != null) { // Program.client.ActiveTarget(DoorObjPtr); ActOpenDoor(Door); return(0); } ///////////////////////////////////// int nMonsterCount = 0; List <SMonsterInfo> NearbyMonster = null; SMonsterInfo targetMonster = SearchMonsterAndLootNew(out nMonsterCount, out NearbyMonster); if (targetMonster != null) { KillMonsterNew(targetMonster, nMonsterCount, NearbyMonster, curTickCount); return(0); } TrophyInfo trophy = SearchLoot(); if (trophy != null) { ActHandLootTrophy(trophy); return(0); } SBox Box = null; if (TargetBox.ID != 0) { Box = TargetBox; } else { Box = SearchBox(); if (Box != null) { TargetBox.ID = Box.ID; TargetBox.ObjPtr = Box.ObjPtr; TargetBox.Pos.x = Box.Pos.x; TargetBox.Pos.y = Box.Pos.y; } } //如果有宝箱 if (Box != null) { //检测阻塞 if (player.Pos == lastPlayerPos && Box.Pos == lastTargetPoint) { blockCount++; nSleepTime = 50; } else { blockCount = 0; } lastPlayerPos.x = player.Pos.x; lastPlayerPos.y = player.Pos.y; lastTargetPoint.x = Box.Pos.x; lastTargetPoint.y = Box.Pos.y; if (blockCount > 3) { ClickedBoxList.Add(Box.ID); TargetBox.ID = 0; nSleepTime = 50; return(0); } //获取A*距离,过大的走过去 double dis = CalcDis(Box.Pos, player.Pos); if (dis > 15) { ActSafeMove(Box.Pos); } else { if (Box.Color > 0) { //釋放圖騰 CastTTSkillNow(curTickCount); //釋放陷阱 CastTrapSkillNow(curTickCount, player.Pos); //施放护盾技能 CastShieldSkillNow(curTickCount); } // 否则点击 Program.client.ActiveTarget(Box.ObjPtr); // ClickedBoxList.Add(Box.ID); TargetBox.ID = 0; } nSleepTime = 50; return(0); } ////卡位检测 //////////////////////////////////////////打怪探索 ActDrinkSpeedFlask(curTickCount); //if (bGroupExploreModel) //{ // return GroupExplore(); //} return(ActHandNormalExplore()); }
int SearchLootAndMonster(out SMonsterInfo monster, out TrophyInfo trophy, out int MonsterRoundCount) { //过滤列表中的不要 //优先搜索怪物,如果小于10,则直接攻击. double NearestDis = 50.0;//攻击距离,不太合适,以后修改 MonsterRoundCount = 0; bool bNearByMonster = false; // GPoint attPos = null; monster = null; trophy = null; double SearchNearByDis = NEARBY_DIS; GPoint searchCenter = new GPoint(); searchCenter.x = player.Pos.x; searchCenter.y = player.Pos.y; //搜索近距离怪物 foreach (var item in monsterList) { if (item.MaxHP == 0 || item.HP == 0) { continue; } if (FilterMonsterList.Contains(item.Pos)) { continue; } double dis = CalcDis(searchCenter, item.Pos); if (dis > SearchNearByDis) { continue; } MonsterRoundCount++; if (MonsterRoundCount > Program.config.MultiCount) { break; } if (bNearByMonster) { continue; } searchCenter.x = item.Pos.x; searchCenter.y = item.Pos.y; SearchNearByDis = 20.0; bNearByMonster = true; monster = item; } if (bNearByMonster) { return(MONSTER_TYPE); } //如果距离大于10,搜索拾取,拾取小于10的,直接返回 double NearestTrophyDis = 50.0; foreach (var item in trophyList) { if (LootFilter.Contains(item.ObjPtr)) { continue; } double dis = CalcDis(player.Pos, item.X, item.Y); if (dis < NEARBY_DIS) { trophy = item; return(TROPHY_TYPE); } if (dis < NearestTrophyDis) { // double Astardis = GetAstarDis(player.Pos.x, player.Pos.y, (ushort)item.X, (ushort)item.Y); double Astardis = GGetAstarDis(player.Pos.x, player.Pos.y, (ushort)item.X, (ushort)item.Y); double bi = Astardis / dis; if (bi < 2.0) { trophy = item; NearestTrophyDis = dis; } } } if (trophy != null) { return(TROPHY_TYPE); } //如果战力品为空,返回怪物,否则优先战利品 //搜索远处怪物数量 //再遍历一次怪物 foreach (var item in monsterList) { if (item.MaxHP == 0 || item.HP == 0) { continue; } if (FilterMonsterList.Contains(item.Pos)) { continue; } double dis = CalcDis(player.Pos, item.Pos); if (dis > 50.0)//SearchAttDis { continue; } if (dis < NearestDis) { double Astardis = GGetAstarDis(player.Pos.x, player.Pos.y, item.Pos.x, item.Pos.y); double bi = Astardis / dis; if (bi < 1.0) { monster = item; NearestDis = dis; } } } if (monster == null) { return(0); } //搜索目标旁边的怪物 foreach (var item in monsterList) { if (item.MaxHP == 0 || item.HP == 0) { continue; } if (FilterMonsterList.Contains(item.Pos)) { continue; } if (monster == item) { continue; } double dis = CalcDis(monster.Pos, item.Pos); if (dis < 20.0) { MonsterRoundCount++; } if (MonsterRoundCount > Program.config.MultiCount) { break; } } return(MONSTER_TYPE); }
SMonsterInfo SearchMonsterAndLootNew(out int MonsterRoundCount, out List <SMonsterInfo> NearbyMonster) { NearbyMonster = new List <SMonsterInfo>(); //搜索周围战利品,加入到记忆列表 // double NearestTrophyDis = 50.0; foreach (var item in trophyList) { if (LootFilter.Contains(item.ObjPtr)) { continue; } GPoint tpos = new GPoint(); tpos.x = (ushort)item.X; tpos.y = (ushort)item.Y; if (LootMemory.Contains(tpos) == false) { LootMemory.Add(tpos); } } //优先攻击怪,近身怪,目标怪身边数量 //金色和优先攻击怪物的放弃时间加长 // double SearchNearByDis = NEARBY_DIS; MonsterRoundCount = 0; GPoint searchCenter = new GPoint(); searchCenter.x = player.Pos.x; searchCenter.y = player.Pos.y; double NearestMonsterDis = 1000.0; SMonsterInfo targetMonster = null; //搜索怪物,找最近的,再找最近的身边的 foreach (var item in monsterList) { if (item.MaxHP == 0 || item.HP == 0) { continue; } if (FilterMonsterList.Contains(item.Pos)) { continue; } if (LastTargetMonster != null) { if (LastTargetMonster.ID == item.ID) { targetMonster = item; break; } } double dis = CalcDis(player.Pos, item.Pos); if (item.Priority == 0) { if (dis > 60.0) { continue; } } else if (item.Priority > 0) { if (dis > 90.0) { continue; } } if (dis < 17.0) { NearbyMonster.Add(item); } //if (dis > NearestMonsterDis) // continue; double Astardis = GGetAstarDis(player.Pos.x, player.Pos.y, (ushort)item.Pos.x, (ushort)item.Pos.y); double bi = Astardis / dis; if (bi < 1.3) { //已经有目标 if (targetMonster != null) { if (targetMonster.Priority < item.Priority) { targetMonster = item; NearestMonsterDis = dis; } else if (targetMonster.Priority == item.Priority) { if (dis < NearestMonsterDis) { targetMonster = item; NearestMonsterDis = dis; } } } else//没有目标的话 { targetMonster = item; NearestMonsterDis = dis; } } } if (targetMonster == null) { LastTargetMonster = null; return(null); } foreach (var item in monsterList) { if (item.MaxHP == 0 || item.HP == 0) { continue; } if (FilterMonsterList.Contains(item.Pos)) { continue; } if (targetMonster.ID == item.ID) { continue; } double dis = CalcDis(targetMonster.Pos, item.Pos); if (dis < 25.0) { MonsterRoundCount++; } } LastTargetMonster = targetMonster; return(targetMonster); }
SMonsterInfo SearchMonsterAndLoot(out int MonsterRoundCount) { //搜索周围战利品,加入到记忆列表 // double NearestTrophyDis = 50.0; foreach (var item in trophyList) { if (LootFilter.Contains(item.ObjPtr)) { continue; } GPoint tpos = new GPoint(); tpos.x = (ushort)item.X; tpos.y = (ushort)item.Y; if (LootMemory.Contains(tpos) == false) { LootMemory.Add(tpos); } } // double SearchNearByDis = NEARBY_DIS; MonsterRoundCount = 0; GPoint searchCenter = new GPoint(); searchCenter.x = player.Pos.x; searchCenter.y = player.Pos.y; double NearestMonsterDis = 1000.0; SMonsterInfo targetMonster = null; //搜索怪物,找最近的,再找最近的身边的 foreach (var item in monsterList) { if (item.MaxHP == 0 || item.HP == 0) { continue; } if (FilterMonsterList.Contains(item.Pos)) { continue; } double dis = CalcDis(player.Pos, item.Pos); if (dis > 50.0) { continue; } if (dis < 17.0) { targetMonster = item; break; } if (dis > NearestMonsterDis) { continue; } double Astardis = GGetAstarDis(player.Pos.x, player.Pos.y, (ushort)item.Pos.x, (ushort)item.Pos.y); double bi = Astardis / dis; if (bi < 1.3) { targetMonster = item; NearestMonsterDis = dis; } } if (targetMonster == null) { return(null); } foreach (var item in monsterList) { if (item.MaxHP == 0 || item.HP == 0) { continue; } if (FilterMonsterList.Contains(item.Pos)) { continue; } if (targetMonster.ID == item.ID) { continue; } double dis = CalcDis(targetMonster.Pos, item.Pos); if (dis < 17.0) { MonsterRoundCount++; } } return(targetMonster); }