Witamy na Programowanie - Forum programistyczne
Pokaż wyniki od 1 do 7 z 7
  1. #1
    Junior Member
    Dołączył
    Nov 2008
    Posty
    4

    Problem z funkcją w bocie

    Witam, jestem tu nowy.
    W Delphi nie jestem orłem, ale znam go najlepiej ze wszystkich znanych mi języków.

    Napisałem program, który ma mi posłużyć do kontrolowania gry Diablo.
    Program ma podnosić przedmioty i atakować, pod warunkiem że takowa opcja
    zostanie załączona.

    A więc mam na formie labelki sygnalizujące aktualny stan uruchomionych funkcji,
    timery i buttony aktywujące/deaktywujące.

    Kod przedstawia się tak:
    Kod:
    //timer1 ma funkcję podnoszenia przedmiotow/wysyla klawisz keyb_ementem
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Timer1.Enabled:=true;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Timer1.Enabled:=false;
    end;
    
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    keybd_event(VkKeyScan('z'), VkKeyScan('z'), 0, 0);
    keybd_event(VkKeyScan('z'), VkKeyScan('z'), KEYEVENTF_KEYUP, 0);
    
    end;
    
    ////////timer2 ma funkcje znalezienia handlera okna i wyslanie tylko do niego
    ////////nacisniecia tego samego klawisza co wyzej,chcialem wyprobowac
    ////////ktory sposob wysylania klawiszy mi zadziala
    
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    Timer2.Enabled:=true;
    
    end;
    
    procedure TForm1.Button4Click(Sender: TObject);
    begin
    Timer2.Enabled:=false;
    Label2.Caption:='Stan: zatrzymany!';
    end;
    
    procedure TForm1.Timer2Timer(Sender: TObject);
    var
      hdiablo: HWND;
    begin
      hdiablo := FindWindow(nil, 'diablo');
      if hdiablo <> 0 then
      begin
        SendMessage(hdiablo, VKKeyScan('z'), 0, 0);
       Label7.Caption:='handler znaleziony pomyślnie';
      end;
    end;
    
    //////timer3 ma funkcje wysylania nacisniecia klawisza odpowiadajacemu
    //////atakowi w grze
    
    procedure TForm1.Button5Click(Sender: TObject);
    begin
    timer3.Enabled:=true;
    end;
    
    procedure TForm1.Button6Click(Sender: TObject);
    begin
    timer3.Enabled:=false;
        Label3.Caption:='Stan: zatrzymany!';
    end;
    
    procedure TForm1.Timer3Timer(Sender: TObject);
    var
      hdiablo: HWND;
    begin
      hdiablo := FindWindow(nil, 'diablo');
      if hdiablo <> 0 then
      begin
        SendMessage(hdiablo, VK_SPACE, 0, 0);
        Label3.Caption:='Stan: dziala!';
       Label8.Caption:='handler znaleziony pomyślnie';
    
      end;
    end;

    Jak uruchomię programik, i grę, i aktywuję w programie wysyłanie nacisniec klawiszy,
    to jak otworze okno chatu w grze, to owszem, wszystkie klawisze są wpisywane.

    Moje pytanie, co mam zle napisane, ze gra nie rozpoznaje mi tego jako zwykle
    nacisniecie klawisza tylko jak wpisany znaczek?
    Tzn, w kazdym textboxie gry znaki są wpisywane, ale bez aktywnego textboxa
    gra nie reaguje na nacisniecia wysylane przez program.

    Bardzo prosze o pomoc.

  2. #2
    Senior Member
    Dołączył
    Mar 2006
    Przegląda
    Odległa galaktyka
    Posty
    331
    Pisałem kiedyś program podobny i też nie działało w grze... Ja sprawdzałem w Wolfenstainie i i też nie działało :P Być może spróbuj nie symulować naciskania klawiszy a wysyłania komunikatu do konkretnego okna. Trzeba podać uchwyt (handle) tej kontrolki i może w tedy zadziała... Uruchom diablo i jakiś program co pokazuje wszystkie okna i zobacz nazwę interesującego okna. Potem funkcja "FindWindow" i ona da ci handle okna po podaniu jego nazwy. I poczytaj sobie o wysyłaniu komunikatów

  3. #3
    Junior Member
    Dołączył
    Nov 2008
    Posty
    4
    A czytales kod?
    Wysylam zasymulowane nacisniecie klawisza i przez keyb_event
    i poprzez najpierw FindWindow z SendMessage'm.

    Chodzilo Ci o ten drugi sposob ze znalezieniem okna.
    No mam nawet w programie potwierdzenie czy poprawnie znalazlo okno.
    Jak nie znajdzie okna o takim captionie to nie zmieni sie tez caption labelki.
    A u mnie znajduje okno i wysyla symulowane nacisniecie klawisza.
    Tylko gra mi tego nie rozpoznaje jako fizyczne nacisniecie.

    Jakas szersza podpowiedz/wskazowka?

  4. #4
    Senior Member
    Dołączył
    Mar 2006
    Przegląda
    Odległa galaktyka
    Posty
    331
    Mhhh... A spróbuj wysyłać wszystkie klawisze od 0-255 i może system gry rejestruje je inaczej ? Nie wiem To pewnie zależy od gry

  5. #5
    Junior Member
    Dołączył
    Nov 2008
    Posty
    4
    Programik sprawdzalem na innych grach i programach.
    Działa jak wyżej, więc raczej wina żle napisanego programu/złych procedur użytych.

    W MSDN nie znalazłem pokrewnych funkcji do sendmessage, postmessage i keyb_event.
    Żadna z nich nie działa prawidłowo w grach.

    Może... jest jakiś sposób żeby wydobyć uchwyt z jakiegoś elementu gry?
    Np. leżącej kasy na ziemii?

    Jakieś pomysły?

  6. #6
    Senior Member
    Dołączył
    Mar 2006
    Przegląda
    Odległa galaktyka
    Posty
    331
    Jest coś takiego do gier jak "Trainery" , one chyba - bo do końca nie wiem - działają na zasadzie , że podmieniasz wartość zmiennej znajdującej się w pamięci. Czyli jakaś gra przechowuje np. ilość złota pod danym adresem gdzieś w pamięci a ty modyfikujesz tą wartość i złoto się zwiększa. Ale nie jestem tego pewien i nie zajmowałem się tym , ale może to coś pomoże

  7. #7
    Junior Member
    Dołączył
    Nov 2008
    Posty
    4
    To podchodzi lekko pod cracking gier komputerowych/reengineering.
    Do tego są używane programy typu CHEAT32 - bardzo stary, ale niezawodny,
    GAMEWIZ32 - nowszy, wiecej opcji.
    A do zrobienia trainera do gry to zazwyczaj uzywam tmk.
    Z tym ze w grach posiadajacych zabezpieczenia (jak np crisis czy cs1.6)
    zmiana wartosci adresu jest bezcelowa/nie zadziala tak jak w innych grach.

    Ale odchodze od problemu. Nie potrzebuje trainera, bo to nie sztuka.
    Bot bedzie robil cos pod moja nieobecnosc, czego trainer zrobic nie moze.

    Ponawiam pytanie w pierwszym poście.
    W jaki inny sposób wysłać do uchwytu okna symulację wciśnięcia klawisza?

    Aha, i dziękuję za dotychczasowe odpowiedzi.

 

 

Podobne wątki

  1. Prosze o pomoc z funkcją
    By znaja15 in forum C/C++
    Odpowiedzi: 2
    Ostatni post / autor: 26-09-08, 10:39
  2. problem z funkcją mysql_query
    By webdesigner in forum PHP i SQL
    Odpowiedzi: 9
    Ostatni post / autor: 20-03-08, 14:29
  3. Problem z funkcją transform.
    By Nebril in forum C/C++
    Odpowiedzi: 3
    Ostatni post / autor: 07-02-08, 21:44
  4. Problem z funkcją strcmpi
    By henkup in forum C/C++
    Odpowiedzi: 3
    Ostatni post / autor: 28-05-07, 09:21
  5. Odpowiedzi: 1
    Ostatni post / autor: 27-06-06, 23:09

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Back to top