R7flex
Banned
- Katılım
- 7 Haz 2020
- Mesajlar
- 3,314
- Beğeniler
- 1,740
Bu kullanıcıyla herhangi bir iş veya ticaret yapmak istiyorsanız, forumdan uzaklaştırıldığını sakın unutmayın.
Bitfield nedir?
Bir bit alanı, yapı içindeki herhangi bir tek bitin veya bit grubunun ayarlanabilmesi veya denetlenebilmesi için belirli amaçlar için tahsis edilmiş bir veya daha fazla bitişik bitten oluşan bir veri yapısıdır.
C++ bitfield'lar, yapılar (struct) veya birleşimler (union) içinde tanımlanabilir. Yapı veya birleşim içindeki bitfield'ların boyutu, kullanılacak bit sayısına göre belirlenir. Bitfield'lar, int, unsigned int, char, unsigned char veya bool gibi tamsayı türlerine atanabilir.
Örneğin, aşağıdaki kod parçasında bir Araba yapısı (struct) ve bu yapının bir bitfield kullanarak nasıl tanımlanabileceği gösterilmektedir:
Bu yapıyı VALORANT üzerinde nasıl lehimize kullanıcaz?
İlk öncelikle VALORANT üzerinde kullanıcağımız structa göz atalım:
Burda 0x71f'in başladığıda yere dikkat edin ve aynı offsetle 7 tane 1 bit var işte bitfield dediğimiz şey budur.
Biz oyun içi visible check (görünürlülük kontrolü) yapmak için kullanıcaz
ilk bitimiz bHideSkin -> 0'dan başlarsak bRecentlyRendered 6. yerimiz oluyor.
Örnek Video:
UYARI: Duvar arkasına geçince ufak bir tolerans var UnrealEngine ile alakalıdır.
Yanlışım varsa düzeltin.
Bir bit alanı, yapı içindeki herhangi bir tek bitin veya bit grubunun ayarlanabilmesi veya denetlenebilmesi için belirli amaçlar için tahsis edilmiş bir veya daha fazla bitişik bitten oluşan bir veri yapısıdır.
C++ bitfield'lar, yapılar (struct) veya birleşimler (union) içinde tanımlanabilir. Yapı veya birleşim içindeki bitfield'ların boyutu, kullanılacak bit sayısına göre belirlenir. Bitfield'lar, int, unsigned int, char, unsigned char veya bool gibi tamsayı türlerine atanabilir.
Örneğin, aşağıdaki kod parçasında bir Araba yapısı (struct) ve bu yapının bir bitfield kullanarak nasıl tanımlanabileceği gösterilmektedir:
C++:
#include <iostream>
struct Araba {
unsigned int hiz : 4; // 4 bitlik bir alan
unsigned int yakit : 3; // 3 bitlik bir alan
bool otomatikVites : 1; // 1 bitlik bir alan
};
int main() {
Araba araba;
araba.hiz = 7;
araba.yakit = 2;
araba.otomatikVites = true;
std::cout << "Hız: " << araba.hiz << std::endl;
std::cout << "Yakıt: " << araba.yakit << std::endl;
std::cout << "Otomatik Vites: " << araba.otomatikVites << std::endl;
return 0;
}
Bu yapıyı VALORANT üzerinde nasıl lehimize kullanıcaz?
İlk öncelikle VALORANT üzerinde kullanıcağımız structa göz atalım:
C++:
struct USkinnedMeshComponent : UMeshComponent {
char pad_590[0x8]; // 0x590(0x08)
struct USkeletalMesh* SkeletalMesh; // 0x598(0x08)
struct TWeakObjectPtr<struct USkinnedMeshComponent> MasterPoseComponent; // 0x5a0(0x08)
struct TArray<enum class ESkinCacheUsage> SkinCacheUsage; // 0x5a8(0x10)
struct TArray<struct FVertexOffsetUsage> VertexOffsetUsage; // 0x5b8(0x10)
char pad_5C8[0xf8]; // 0x5c8(0xf8)
struct UPhysicsAsset* PhysicsAssetOverride; // 0x6c0(0x08)
int32_t ForcedLodModel; // 0x6c8(0x04)
int32_t MinLodModel; // 0x6cc(0x04)
char pad_6D0[0xc]; // 0x6d0(0x0c)
float StreamingDistanceMultiplier; // 0x6dc(0x04)
char pad_6E0[0x8]; // 0x6e0(0x08)
struct TArray<struct FSkelMeshComponentLODInfo> LODInfo; // 0x6e8(0x10)
char pad_6F8[0x24]; // 0x6f8(0x24)
enum class EVisibilityBasedAnimTickOption VisibilityBasedAnimTickOption; // 0x71c(0x01)
char pad_71D[0x1]; // 0x71d(0x01)
char pad_71E_0 : 3; // 0x71e(0x01)
char bOverrideMinLod : 1; // 0x71e(0x01)
char bUseBoundsFromMasterPoseComponent : 1; // 0x71e(0x01)
char bForceWireframe : 1; // 0x71e(0x01)
char bDisplayBones : 1; // 0x71e(0x01)
char bDisableMorphTarget : 1; // 0x71e(0x01)
char bHideSkin : 1; // 0x71f(0x01) --- 0x71f alanın başladığı yer -> 0
char bPerBoneMotionBlur : 1; // 0x71f(0x01) -> 1
char bComponentUseFixedSkelBounds : 1; // 0x71f(0x01) -> 2
char bConsiderAllBodiesForBounds : 1; // 0x71f(0x01) -> 3
char bSyncAttachParentLOD : 1; // 0x71f(0x01) -> 4
char bCanHighlightSelectedSections : 1; // 0x71f(0x01) -> 5
char bRecentlyRendered : 1; // 0x71f(0x01) -> 6 (kullanıcağımız yer)
char bForceNonRenderedAnimUpdateRate : 1; // 0x71f(0x01)
char bCastCapsuleDirectShadow : 1; // 0x720(0x01)
...... //devam ediyor...
Biz oyun içi visible check (görünürlülük kontrolü) yapmak için kullanıcaz
ilk bitimiz bHideSkin -> 0'dan başlarsak bRecentlyRendered 6. yerimiz oluyor.
C++:
BYTE bRecentlyRendered = read<BYTE>(mesh + 0x71f); // bitfieldı okuduk
std::int32_t extract_bit = bRecentlyRendered & (1 << 6) // burda sırası 6 olduğu için AND işlemi uyguladık
bool visible = extract_bit != 0; // sıfıra eşit değilse true döndürüyor başka bir sayı ise false döndürüyor
Örnek Video:
UYARI: Duvar arkasına geçince ufak bir tolerans var UnrealEngine ile alakalıdır.
Yanlışım varsa düzeltin.