Skocz do zawartości

Jak mogę wykryć, że dany float zwiększa / zmniejsza swoją wartość? Python


Rekomendowane odpowiedzi

pracuję nad Bunnyhopem z autostrafem, mój pomysł na autostrafa jest taki że biorę wartość viewAnglesY z dwCilentState_ViewAngles i sprawdzam czy się zmniejsza czy zwiększa swoją wartość. Jeżeli zmniejsza swoją wartość to zmienia wartość dwForceLeft na 1 i zmienia wartość dwForceRight na 0, jeżeli zwiększa swoją wartość to zmienia wartość dwForceLeft na 0 i dwForceRight na 1. Problem jest w tym, że nie wiem jak mój program może wykryć że viewAnglesY zmnienia swoją wartość. Jak mogę to zrobić?

Kod:

import pymem
import pymem.process
import keyboard
from offsets import *

pm = pymem.Pymem("csgo.exe")
client = pymem.process.module_from_name(pm.process_handle, "client.dll").lpBaseOfDll
engine = pymem.process.module_from_name(pm.process_handle, "engine.dll").lpBaseOfDll


def bhop_start():
    while True:
        
        if keyboard.is_pressed("space"):
            forceJump = client + dwForceJump
            localPlayer = pm.read_int(client + dwLocalPlayer)
            isOnAir = pm.read_int(localPlayer + m_fFlags)
            enginePointer = pm.read_uint(engine + dwClientState)
            viewAnglesY = pm.read_float(enginePointer + dwClientState_ViewAngles + 0x4)
            print(viewAnglesY)
            #tutaj chciałbym sprawdzać czy viewAnglesY zmienia czy zwiększa swoją wartość
            
            if isOnAir == 257:
                pm.write_int(forceJump, 6)
            elif isOnAir == 263:
                pm.write_int(forceJump, 6) 

bhop_start()

 

Plusik poproszę za pomoc

Odnośnik do komentarza

Wytłumaczę w C++, bo nie mam do czynienia z Pythonem. Ale to tylko kilka nieskomplikowanych linijek, więc na pewno sobie przełożysz

static float previous;

float current = < read viewangles.y >; // czytasz aktualny viewangles.y

i tutaj sobie robisz co chcesz np. sprawdzasz sobie to czy aktualny viewangles.y się zwiększył
if ( current > previous )
	bla bla bla;

previous = current; // po sprawdzeniu nadpisuje poprzedni viewangles.y
Odnośnik do komentarza

@Czarny przełożyłem ale teraz mam problem z dwForceLeft i Right. niby wpisuje 1 do adresu i działa ale nic nie robi. tak samo jak z current i previous, działają dobrze i wchodzą w ify które napisałem ale może zmiana zmiennej ForceLeft i right jest na bardzo krótki czas tylko i wyłącznie. Offsety są zgodne sprawdzałem z Cheat Engine

Kod który teraz napisałem (wszystko jest dalej w pętli while True (pętla nieskończona) )

previous = 0
if int(current) > int(previous):
  print(current)
  print(previous)
  pm.write_int(dwForceRight, 0)
  pm.write_int(dwForceLeft, 1)
elif int(current) < int(previous):
  print(current)
  print(previous)
  pm.write_int(dwForceLeft, 0)
  pm.write_int(dwForceRight, 1)

    previous = current

 


Edytowane przez IShineee

Plusik poproszę za pomoc

Odnośnik do komentarza

Ponieważ nadpisujesz błędne wartości. Wartości ForceAttack/Jump/Right/Left itp:

  • 4 = -attack ( odpuszczanie )
  • 5 = +attack ( wciśnięcie )
  • 6 = +attack i -attack ( jednocześnie )

I ogólnie taka dygresja do tego kodu, wektory X / Y / Z są wyrażane w float, nie w int

Odnośnik do komentarza

@Czarny napisałem int(zmienna) dlatego że na początku inaczej to zrobiłem i musiałem to tak napisać żeby python załapał o co mi chodzi

 

8 minut temu, Czarny napisał:
  • 4 = -attack ( odpuszczanie )
  • 5 = +attack ( wciśnięcie )
  • 6 = +attack i -attack ( jednocześnie )

to wiem, ale jak sprawdzalem zmienną ForceRight to pokazywało mi się że kiedy wciskam i przytrzymuje, to zmienna ma wartość 1. kiedy sam zmieniłem zmienną na 1 to też trzymało mi samo. spróbuję jak ty mi radzisz i zamiast 1 napiszę 5


Edytowane przez IShineee

Plusik poproszę za pomoc

Odnośnik do komentarza

Najłatwiej i wygodniej to wartością 6 nadpisywać

if int(current) > int(previous):
  print(current)
  print(previous)
  pm.write_int(dwForceLeft, 6)
elif int(current) < int(previous):
  print(current)
  print(previous)
  pm.write_int(dwForceRight, 6)

Edytowane przez Czarny
Odnośnik do komentarza

@Czarny Hm. dalej nie działa. Modyfikuję offsety dwForceRight = 0x320DE00 i dwForceLeft = 0x320DDF4, jak je sprawdzam w cheat engine to działa dobrze kiedy zmieniam zmienną tak samo dobrze reaguje. kiedy piszę kod to już nie. 


Edytowane przez IShineee

Plusik poproszę za pomoc

Odnośnik do komentarza
  • Tytuł został zmieniony na Jak mogę wykryć, że dany float zwiększa / zmniejsza swoją wartość? Python
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Regulamin. Polityka prywatności