Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
 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();
     }
 }
Ejemplo n.º 4
0
 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);
     }
 }