コード例 #1
0
 /// <summary>
 /// Бот движется по указанному адресу, но не более 60 секунд.
 /// </summary>
 /// <param name="oph"></param>
 /// <param name="x"></param>
 /// <param name="y"></param>
 /// <param name="z"></param>
 public static void MoveTo(IntPtr oph, float x, float y, float z)
 {
     try
     {
         //узнаем состояние: 0 - земля, 1 - вода, 2 - воздух
         Int32 walk_mode = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsWalkMode);
         //юзаем инжект движения
         Injects.WalkTo(oph, x, y, z, walk_mode);
         //Расчитываем нынешние коорды персонажа
         float x_temp = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsX);
         float y_temp = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsY);
         float z_temp = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsZ);
         //в цикле проверяем, достиг ли персонаж цели и не застрял ли он
         Int32 iter = 0;
         while (!CalcMethods.GetCoord(oph, x, y, z))
         {
             Thread.Sleep(1000);
             //если персонаж встал на месте, то подтолкнем его еще раз
             if (CalcMethods.GetCoord(oph, x_temp, y_temp, z_temp))
             {
                 Injects.WalkTo(oph, x, y, z, walk_mode);
             }
             //если персонаж двигается, то перезаписываем его координаты
             else
             {
                 x_temp = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsX);
                 y_temp = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsY);
                 z_temp = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsZ);
             }
             iter++;
             //если бот бежит дольше минуты, то прекращаем бежать
             if (iter > 60)
             {
                 break;
             }
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }