  | 
	
		
	
	
		Runes of Magic hp и mp - Школа Читера - Основы основ - начинаем писать статьи для начинающих с целью создания полноценного раздела | 
	 
	 
	
		 
	 
 
	
	
		
	
	
    
        
            
             
            25.03.2011, 06:25
            
            
         | 
        
             
            #1
            
         | 
    
 
    
    
  
    | 
    
     | 
     
  
    | 
    
     | 
    
    
     | 
   
  
    
        Разведчик  
     | 
     
 
    
      
  
            
    
      
    
            
                 Регистрация: 09.02.2011  
                
                
                
                 Сообщений: 1
                   
 Популярность: 10  
                  
	 Сказал(а) спасибо: 0  
	
		
			
				Поблагодарили 0 раз(а) в 0 сообщениях
			
		
	 
     
 
             
                
               
                
       
                  
     | 
    
    
    
        
        
            
            
                 
                Runes of Magic hp и mp
             
             
            
        
        
        
            
               
    Здравствуйте, нашел baseadress и offset hp и mp 
Взял для базы код от Бота для PW который тут лежит.
 http://www.zhyk.ru/forum/showthread.php?t=106690
Хочу что бы он мне отобразил мои hp и mp. Подправил код чуть чуть. А он всегда выдает 0\0 и 0\0. 
В чем может быть беда? 
У меня еще есть 1 offset который я не где не указываю 0x598, может дело в этом? 
Спасибо 
Вот код.
 
	Код: 
	        // Объявление события
        public event EventHandler InfoUpdated;
        // Метод, который вызывает событие
        private void OnInfoUpdated(object sender, EventArgs e)
        {
            if (InfoUpdated != null) InfoUpdated(sender, e);
        }
        // Импортируем функцию для чтения памяти чужого процесса 
        // из kernel32
        [DllImport("kernel32.dll")]
        public static extern Int32 ReadProcessMemory(
            IntPtr hProcess,
            IntPtr lpBaseAddress,
            [In, Out] byte[] buffer,
            UInt32 size,
            out IntPtr lpNumberOfBytesRead
            );
        // Определение базового адреса и оффсетов
        // для текущей версии клиента руоффа (130)
        private int baseAddress = 0x5BC394,
                    offsetHP = 0x2C8,
                    offsetMP = 0x2D4,
                    offsetMaxHP = 0x2D0,
                    offsetMaxMP = 0x2D8;
        // Служебная переменная для хранения PID процесса
        private Int32 PID = 0;
        private Timer updateTimer;
        // Свойство, для хранения текущего HP
        public Int32 HP { get; set; }
        // Свойство, для хранения текущего MP
        public Int32 MP { get; set; }
        // по аналогии
        public Int32 MaxHP { get; set; }
        // по аналогии
        public Int32 MaxMP { get; set; }
        public Monitor(int pid)
        {
            this.PID = pid;
            updateTimer = new Timer();
            updateTimer.Enabled = true;
            updateTimer.Interval = 500;
            updateTimer.Tick += new EventHandler(updateTimer_Tick);
        }
        /// <summary>
        /// Данный метод вызывается каждый тик таймера
        /// Здесь происходит чтение из памяти клиента значений
        /// жизни и маны
        /// </summary>
        private void updateTimer_Tick(object sender, EventArgs e)
        {
            try
            {
                if (PID != 0)
                {
                    IntPtr handle = Process.GetProcessById(PID).Handle;
                    HP = HighLevelReadIntFromMemory(handle, offsetHP);
                    MP = HighLevelReadIntFromMemory(handle, offsetMP);
                    MaxHP = HighLevelReadIntFromMemory(handle, offsetMaxHP);
                    MaxMP = HighLevelReadIntFromMemory(handle, offsetMaxMP);
                    OnInfoUpdated(this, new EventArgs());
                }
            }
            catch (Exception ex)
            {
                updateTimer.Enabled = false;
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// Читаем Int'овое значение из памяти приложения 
        /// с указанным оффсетом
        /// </summary>
        private Int32 HighLevelReadIntFromMemory(IntPtr handle, int offset)
        {
            byte[] buffer = new byte[0];
            IntPtr read = IntPtr.Zero;
            int temp = 0;
            temp = LowLevelReadIntFromMemory(handle, baseAddress);
            temp = LowLevelReadIntFromMemory(handle, temp + 0x20);
            temp = LowLevelReadIntFromMemory(handle, temp + offset);
            return temp;
        }
        /// <summary>
        /// Читаем из памяти приложения массив байт по указанному адресу
        /// и возвращаем целочисленное его представление
        /// </summary>
        private Int32 LowLevelReadIntFromMemory(IntPtr handle, int address)
        {
            byte[] buffer = new byte[4];
            IntPtr read = IntPtr.Zero;
            ReadProcessMemory(handle, (IntPtr)address, buffer, 4, out read);
            return (int)BitConverter.ToUInt32(buffer, 0);
        }
 
     
         
        
        
        
        
        
        
        
        
            
                 
                
                    
                        Последний раз редактировалось eXziiii; 25.03.2011 в 21:06.
                    
                    
                
             
        
        
      | 
 
    | 
        
        
        
        
         
     | 
    
    
    
        
        
        
        
             
        
        
        
        
        
        
        
            
        
        
        
     | 
 
 
 
  
	 
	
		 
	 
 
 
	
		
	
	
	
	
	
		
	
		 
		Ваши права в разделе
	 | 
 
	
		
		Вы не можете создавать новые темы 
		Вы не можете отвечать в темах 
		Вы не можете прикреплять вложения 
		Вы не можете редактировать свои сообщения 
		 
		
		
		
		
		HTML код Выкл. 
		 
		
	  | 
 
 
	 | 
	
		
	 | 
 
 
 
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 08:43. 
		 
	 
 
 | 
  |