public static bool DoAction() { // 跑到邮箱点(计算到中间节点的距离和到邮箱的距离,选择路径) logger.Add("跑到邮箱点"); if (LocMailbox.DistanceToSelf2D > LocMid.DistanceToSelf2D) { logger.Add("在靠近AHer这边,先跑到中间节点,然后去邮箱那边"); if (!MoveHelper.MoveToLoc(LocMid, 2)) { logger.Add("跑到中间节点"); return false; } } if (!MoveHelper.MoveToLoc(LocMailbox, 2)) { logger.Add("跑到邮箱点出错"); return false; } // 打开邮箱 logger.Add("打开邮箱"); if (!MailManager.TargetMailBox()) { logger.Add("打开邮箱出错"); return false; } //// 遍历物品,保证背包中有足够的拍卖品。这里要注意背包空间 //logger.Add("遍历 待拍卖物品列表 "); //foreach (DataRow dr in Items.Rows) //{ // logger.Add("检查背包剩余空间"); // if (Inventory.FreeBagSlots <= 1) // { // logger.Add("检查背包剩余空间为1,不能继续"); // return false; // } // string AHSellItem = dr["item_name"].ToString(); // logger.Add("通过lua获知物品在背包和邮箱中的数量"); // if (!SpyFrame.lua_SetDispCountItemName(AHSellItem)) // { // logger.Add("在执行SetDispCountItemName时出错,物品:" + AHSellItem); // return false; // } // Thread.Sleep(500); // Dictionary<string, int> MineCount = SpyFrame.GetDispCountItemCount(); // logger.Add(string.Format("物品{0}在背包中的数量为{1},在邮箱中的数量为:{2}", AHSellItem, MineCount["BAG"], MineCount["MAIL"])); // if (MineCount["BAG"] == 0 && MineCount["MAIL"] == 0) continue; // //int WantCount = (int)dr["item_count"] * (int)dr["item_stacksize"] > MineCount["BAG"] // // ? (int)dr["item_count"] * (int)dr["item_stacksize"] - MineCount["BAG"] // // : 0 // // ; // //if (WantCount == 0) continue; // //// 拿邮件(LUA) // //logger.Add(string.Format("从邮箱中拿{0}个{1}", WantCount, mine)); // // 全拿东西,不考虑包包大小 // if (MineCount["MAIL"] > 0) // { // if (!SpyFrame.lua_GetMAILAsItem(AHSellItem, 100000)) // { // logger.Add("从邮箱里面拿 " + AHSellItem + " 失败"); // return false; // } // } // Thread.Sleep(1000); //} // 邮箱东西全拿 Thread.Sleep(2000); SpyFrame.lua_GetAllMail(); Thread.Sleep(2000); // 跑到邮箱点 logger.Add("跑到中间节点"); if (!MoveHelper.MoveToLoc(LocMid, 2)) { logger.Add("跑到中间节点"); return false; } // 跑到拍卖师身边 logger.Add("跑到拍卖师身边"); if (!MoveHelper.MoveToLoc(LocAHer, 2)) { logger.Add("跑到拍卖师身边出错"); return false; } // 找到拍卖师,打开拍卖界面 logger.Add(string.Format("定位拍卖师:{0}", AHerName)); PUnit aher = new PUnit(0); bool found = false; foreach (PUnit unit in ObjectManager.GetUnits) { if (unit.Name.Equals(AHerName) && unit.Location.DistanceToSelf2D < 5) { //unit.Location.Face(); //unit.TargetFriend(); //unit.Interact(); aher = unit; found = true; break; } } if (!found) { logger.Add(string.Format("没找到名字是{0}的拍卖师", AHerName)); return false; } KeyHelper.SendLuaOverChat("/target " + AHerName); Thread.Sleep(500); if (!ObjectManager.MyPlayer.Target.Name.Equals(AHerName)) { logger.Add(string.Format("没有命中拍卖师的目标")); return false; } aher.Location.Face(); aher.InteractWithTarget(); Thread.Sleep(2000); // 上货。 遍历待拍卖物品,扫描物品最低价格,最低价格不低于起拍价格,就上架 Stopwatch swJump = new Stopwatch(); swJump.Restart(); logger.Add(string.Format("开始上货")); foreach (DataRow dr in Items.Rows) { string ahitem = dr["item_name"].ToString(); // 看看包里面有没有货 if (!SpyFrame.lua_SetDispCountItemName(ahitem)) { logger.Add("在执行SetDispCountItemName时出错,物品:" + ahitem); return false; } Thread.Sleep(500); Dictionary<string, int> ItemCount = SpyFrame.GetDispCountItemCount(); if (ItemCount["BAG"] == 0) { logger.Add("背包里面没有物品:" + ahitem); continue; } // 跳,防止AFK if (swJump.Elapsed.TotalMinutes > AFK_Minutes) { KeyLowHelper.PressKey(MicrosoftVirtualKeys.Space); KeyLowHelper.ReleaseKey(MicrosoftVirtualKeys.Space); Thread.Sleep(3000); swJump.Restart(); } // 扫描最低价格 logger.Add(string.Format("扫描物品[{0}]的最低价格", ahitem)); Dictionary<string, string> scanresult = SpyFrame.lua_AHSearchDoor(ahitem); if (scanresult == null) { logger.Add(string.Format("获取物品[{0}]的最低价格出现错误,返回值为NULL", ahitem)); return false; } logger.Add(string.Format("物品[{0}]的最低价格是[{1}],由[{2}]出价", ahitem, scanresult["PRIZE"], scanresult["SELLER"])); SpyDB.SaveAhInfo(scanresult["SELLER"].ToString(), ahitem, Convert.ToInt32(scanresult["PRIZE"])); // 计算最低价格,准备上货 if (scanresult["SELLER"].Equals(ObjectManager.MyPlayer.Name)) { logger.Add(string.Format("价格最低的就是我自己,所以不用上货")); continue; } int prize, minprize, maxprize; maxprize = Convert.ToInt32(dr["item_maxprice"]); minprize = Convert.ToInt32(dr["item_minprice"]); // 如果目前出价低于心里价位,不出货 if (Convert.ToInt32(scanresult["PRIZE"]) < minprize) { logger.Add(string.Format("[{0}]出价低过心里价位[{1}],暂时不出货", scanresult["PRIZE"], minprize)); continue; } if (scanresult["SELLER"].Equals("NOBODY")) { logger.Add(string.Format("拍卖场没有人卖[{0}],将按照数据库中记录的最高价格[{1}]上货", ahitem, maxprize)); prize = maxprize; } else { if (maxprize < Convert.ToInt32(scanresult["PRIZE"])) prize = maxprize; else prize = Convert.ToInt32(scanresult["PRIZE"]) - 1; logger.Add(string.Format("进过计算,物品[{0}]将按照单价[{1}]上架", ahitem, prize)); // 取消拍卖物品 logger.Add(string.Format("取消AH中单价低于[{0}]的[{1}]", prize, ahitem)); if (!SpyFrame.lua_CancelAll(ahitem, prize)) { logger.Add(string.Format("取消AH出错")); return false; } } // 上货 int StackSize = (int)(dr["item_stacksize"]); int StackCount = (int)(dr["item_count"]); logger.Add(string.Format("开始拍卖单价为[{0}]的“{1}”[{2}]堆,每堆[{3}]个", prize, ahitem, StackCount, StackSize)); if (!SpyFrame.lua_StartAuction(ahitem, prize, StackSize, StackCount)) { logger.Add(string.Format("拍卖失败")); return false; } // 标记工作状态 WORKING = true; } // return true; }
public override PullResult Pull(PUnit target) { //Logging.Debug("Pull started"); Buff(); PrePull(target); if (Behavior.UseAutoAttack) { target.InteractWithTarget(); } if (!MoveHelper.MoveToUnit(target, Behavior.PullDistance)) return PullResult.CouldNotPull; if (Behavior.SendPet) PetAttackKey.SendKey(); foreach (Rule rule in Behavior.PullController.GetRules.Where(rule => rule.IsOk)) { target.Face(); rule.ExecuteAction(Behavior.GlobalCooldown); } // Logging.Debug("Pull done"); if (PPullBlackList.IsBlacklisted(target)) { return PullResult.CouldNotPull; } return PullResult.Success; }
public override void Combat(PUnit target) { if (Behavior.UseAutoAttack) { target.InteractWithTarget(); } if (Behavior.SendPet) PetAttackKey.SendKey(); //Logging.Debug("Combat started"); while (true) { try { if (target.DistanceToSelf > Behavior.CombatDistance) MoveHelper.MoveToUnit(target, Behavior.CombatDistance); } catch { } if (!ObjectManager.MyPlayer.IsValid || ObjectManager.MyPlayer.Target != target) target.TargetHostile(); if (PveBehaviorSettings.AvoidAddsCombat) ConsiderAvoidAdds(target); foreach (Rule rule in Behavior.CombatController.GetRules.Where(rule => rule.IsOk)) { if (target.IsValid && target.IsAlive) { if (!target.Location.IsFacing()) { target.Face(); } rule.ExecuteAction(Behavior.GlobalCooldown); break; } } Thread.Sleep(10); Application.DoEvents(); } }
private static void Ress(PUnit vUnit) { MoveHelper.MoveToUnit(vUnit, 2, false); Thread.Sleep(1000); vUnit.InteractOrTarget(false); Thread.Sleep(1000); if (ObjectManager.MyPlayer.Target != vUnit) { vUnit.InteractOrTarget(false); } Thread.Sleep(1000); if (ObjectManager.MyPlayer.Target != vUnit) { vUnit.InteractOrTarget(false); } Thread.Sleep(1000); if (ObjectManager.MyPlayer.Target != vUnit) { MoveHelper.ReleaseKeys(); Thread.Sleep(100); KeyHelper.ChatboxSendText("/target " + vUnit.Name + " ;"); } Thread.Sleep(1000); vUnit.InteractWithTarget(); Thread.Sleep(1600); Frame frameByName = InterfaceHelper.GetFrameByName("StaticPopup1Button1"); frameByName.LeftClick(); var timeout = new Ticker(5000); while (ObjectManager.MyPlayer.IsGhost && !timeout.IsReady) { Thread.Sleep(10); frameByName = InterfaceHelper.GetFrameByName("StaticPopup1Button1"); frameByName.LeftClick(); Thread.Sleep(1000); } }