first submle

This commit is contained in:
gcdsfh145
2026-05-03 12:38:09 +08:00
parent cdadfd425e
commit 0b6dbde6f5
3244 changed files with 694310 additions and 2 deletions
Executable
+39
View File
@@ -0,0 +1,39 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libdobby
LOCAL_SRC_FILES := Dobby/libdobby.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := HOOK
LOCAL_SRC_FILES := \
主程序.cpp \
imgui/imgui.cpp \
imgui/imgui_draw.cpp \
imgui/imgui_tables.cpp \
imgui/imgui_widgets.cpp \
imgui/imgui_impl_android.cpp \
imgui/imgui_impl_opengl3.cpp \
android_native_app_glue.c \
结构体/数据/SDK/PUBGM_Basic.cpp \
结构体/数据/SDK/PUBGM_Basic_functions.cpp \
结构体/数据/SDK/PUBGM_CoreUObject_functions.cpp \
结构体/数据/SDK/PUBGM_Engine_functions.cpp \
结构体/数据/SDK/PUBGM_ShadowTrackerExtra_functions.cpp \
结构体/数据/SDK/PUBGM_UnrealArchExt_functions.cpp \
结构体/数据/SDK/PUBGM_Gameplay_functions.cpp \
结构体/数据/SDK/PUBGM_Client_functions.cpp \
LOCAL_CFLAGS := -w -s -Wno-error=format-security -fvisibility=hidden -fpermissive -fexceptions
LOCAL_CPPFLAGS := -w -s -Wno-error=format-security -fvisibility=hidden -std=c++17
LOCAL_CPPFLAGS += -Wno-error=c++11-narrowing -fpermissive -Wall -fexceptions
LOCAL_C_INCLUDES += $(LOCAL_PATH)/imgui
LOCAL_C_INCLUDES += $(LOCAL_PATH)/App
LOCAL_C_INCLUDES += $(LOCAL_PATH)/SDK
LOCAL_LDFLAGS := -Wl,--gc-sections,--strip-all
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM -lGLESv2 -lGLESv3 -lm -ldl -lz
LOCAL_STATIC_LIBRARIES := libdobby
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)
Executable
+6
View File
@@ -0,0 +1,6 @@
APP_ABI := armeabi-v7a
APP_PLATFORM := android-21
APP_STL := c++_static
# 设置优化模式为 release 或 debug
APP_OPTIM := release # 可选值:release 或 debug
BIN
View File
Binary file not shown.
Executable
+871
View File
@@ -0,0 +1,871 @@
#define W2S(w, s) UGameplayStatics::ProjectWorldToScreen(localController, w, true, s)
// 辅助函数:检查是否应该跳过该玩家
bool ShouldSkipPlayer(ASTExtraPlayerCharacter* Player, ASTExtraPlayerController* localController, ASTExtraPlayerCharacter* localPlayer) {
float Distance = localPlayer->GetDistanceTo(Player) / 100.0f;
// 跳过条件
if (Distance > 600.0f) return true;
if (Player->PlayerKey == localController->PlayerKey) return true;
if (Player->bDead) return true;
if (Config.PlayerESP.NoBot && Player->bIsAI) return true;
return false;
}
// 辅助函数:绘制iOS风格预警指示器
void DrawAlertIndicator(ImDrawList* draw, ASTExtraPlayerCharacter* Player,
ASTExtraPlayerCharacter* localPlayer,
ASTExtraPlayerController* localController,
ImColor borderColor, ImColor fillColor,
int screenWidth, int screenHeight) {
FVector MyPosition, EnemyPosition;
// 获取位置
ASTExtraVehicleBase* CurrentVehiclea = Player->CurrentVehicle;
if (CurrentVehiclea) {
MyPosition = CurrentVehiclea->RootComponent->RelativeLocation;
} else {
MyPosition = Player->RootComponent->RelativeLocation;
}
ASTExtraVehicleBase* CurrentVehicle = localPlayer->CurrentVehicle;
if (CurrentVehicle) {
EnemyPosition = CurrentVehicle->RootComponent->RelativeLocation;
} else {
EnemyPosition = localPlayer->RootComponent->RelativeLocation;
}
// 计算雷达位置
bool shit = false;
FVector EntityPos = WorldToRadar(localController->PlayerCameraManager->CameraCache.POV.Rotation.Yaw,
MyPosition, EnemyPosition, NULL, NULL,
Vector3(screenWidth, screenHeight, 0), shit);
// 计算角度
FVector angle = FVector();
Vector3 forward = Vector3((float)(screenWidth / 2) - EntityPos.X,
(float)(screenHeight / 2) - EntityPos.Y, 0.0f);
VectorAnglesRadar(forward, angle);
// 绘制iOS风格三角形指示器
const auto angle_yaw_rad = DEG2RAD(angle.Y + 180.f);
const auto new_point_x = (screenWidth / 2) + 55 * 4 * cosf(angle_yaw_rad);
const auto new_point_y = (screenHeight / 2) + 55 * 4 * sinf(angle_yaw_rad);
std::array<Vector3, 3> points {
Vector3(new_point_x - 12, new_point_y - 12, 0.f),
Vector3(new_point_x + 12, new_point_y, 0.f),
Vector3(new_point_x - 12, new_point_y + 12, 0.f)
};
RotateTriangle(points, angle.Y + 180.f);
// iOS风格渐变填充
draw->AddTriangleFilled(ImVec2(points.at(0).X, points.at(0).Y),
ImVec2(points.at(1).X, points.at(1).Y),
ImVec2(points.at(2).X, points.at(2).Y),
fillColor);
// 细边框
draw->AddTriangle(ImVec2(points.at(0).X, points.at(0).Y),
ImVec2(points.at(1).X, points.at(1).Y),
ImVec2(points.at(2).X, points.at(2).Y),
borderColor, 1.0f);
}
// 辅助函数:绘制iOS风格玩家方框
void DrawPlayerBox(ImDrawList* draw, ImVec2 headPos, ImVec2 rootPos, ImColor color, bool isMonster = false) {
if (isMonster) {
// 怪物方框:更大,填满怪物
float boxHeight = abs(headPos.y - rootPos.y) * 1.5f; // 怪物更高
float boxWidth = boxHeight * 0.8f; // 怪物更宽
// 调整怪物方框位置,确保居中
float centerY = headPos.y - (headPos.y - rootPos.y) / 2.0f;
ImVec2 boxTop = ImVec2(headPos.x - (boxWidth / 2), centerY - boxHeight / 2);
ImVec2 boxBottom = ImVec2(headPos.x + (boxWidth / 2), centerY + boxHeight / 2);
// 怪物使用更醒目的方框
draw->AddRectFilled(boxTop, boxBottom,
IM_COL32((int)(color.Value.x * 255), (int)(color.Value.y * 255),
(int)(color.Value.z * 255), 30),
4.0f);
draw->AddRect(boxTop, boxBottom, color, 4.0f, ImDrawFlags_RoundCornersAll, 2.5f);
} else {
// 玩家方框:iOS风格
float boxHeight = abs(headPos.y - rootPos.y);
float boxWidth = boxHeight * 0.6f;
ImVec2 boxTop = ImVec2(headPos.x - (boxWidth / 2), headPos.y);
ImVec2 boxBottom = ImVec2(headPos.x + (boxWidth / 2), rootPos.y);
// iOS风格半透明填充
draw->AddRectFilled(boxTop, boxBottom,
IM_COL32((int)(color.Value.x * 255), (int)(color.Value.y * 255),
(int)(color.Value.z * 255), 20),
4.0f);
// iOS风格细边框
draw->AddRect(boxTop, boxBottom, color, 4.0f, ImDrawFlags_RoundCornersAll, 1.5f);
}
}
// 辅助函数:绘制iOS风格血量条
void DrawHealthBar(ImDrawList* draw, ASTExtraPlayerCharacter* Player,
ImVec2 headPosSC, ASTExtraPlayerController* localController,
FVector HeadPos, bool isMonster = false) {
float PercentHP = (Player->Health / Player->HealthMax) * 100;
// 调整血条大小
float barWidth, barHeight, barX, barY;
if (isMonster) {
// 怪物血条:更大
barWidth = 80.0f;
barHeight = 8.0f;
} else {
// 玩家血条
barWidth = 60.0f;
barHeight = 6.0f;
}
barX = headPosSC.x - barWidth / 2;
barY = headPosSC.y - 25.0f; // 调整位置,为玩家信息留出空间
// iOS风格毛玻璃背景
draw->AddRectFilled(ImVec2(barX, barY),
ImVec2(barX + barWidth, barY + barHeight),
ImColor(40, 40, 40, 200), barHeight / 2);
// 计算血量颜色
ImColor healthColor;
if (!localController->LineOfSightTo(localController->PlayerCameraManager, HeadPos, true)) {
healthColor = ImColor(0, 122, 255, 220); // iOS蓝色
} else {
// 根据血量渐变
if (PercentHP > 70) healthColor = ImColor(52, 199, 89, 220); // iOS绿色
else if (PercentHP > 30) healthColor = ImColor(255, 149, 0, 220); // iOS橙色
else healthColor = ImColor(255, 59, 48, 220); // iOS红色
}
// 血量填充
float fillWidth = (barWidth * PercentHP) / 100.0f;
if (fillWidth > 0) {
draw->AddRectFilled(ImVec2(barX, barY),
ImVec2(barX + fillWidth, barY + barHeight),
healthColor, barHeight / 2);
}
// 细边框
draw->AddRect(ImVec2(barX, barY),
ImVec2(barX + barWidth, barY + barHeight),
ImColor(255, 255, 255, 80), barHeight / 2, 0, 0.8f);
}
// 辅助函数:绘制iOS风格玩家信息
void DrawPlayerInfo(ImDrawList* draw, ASTExtraPlayerCharacter* Player,
ImVec2 headPosSC, ImVec2 rootPosSC, float Distance, bool isMonster = false) {
// iOS风格字体和颜色
ImColor textColor = ImColor(255, 255, 255, 240);
ImColor shadowColor = ImColor(0, 0, 0, 180);
float fontSize = isMonster ? 18.0f : 16.0f;
// 1. 显示玩家指针(调试用)
if () {
auto MySelf = getPointer(getPointer(UE4 + 0x4634ef0) + 0x0) + 0x20;
char extra[50];
sprintf(extra, "%p", MySelf);
(22, headPosSC.x, headPosSC.y + 10, textColor, shadowColor, extra);
}
// 2. 显示玩家名称和类型(带背景)
if (Config.PlayerESP.) {
std::string info;
if (isMonster) {
info = "年兽";
} else if (Player->bIsAI) {
info = "AI";
} else {
info = "玩家";
}
// 添加队伍ID
info = std::to_string((int)Player->TeamID) + " · " + info;
auto textSize = ImGui::CalcTextSize(info.c_str());
// iOS风格文本背景
float padding = 6.0f;
ImVec2 textPos = ImVec2(headPosSC.x - (textSize.x / 2.0f), headPosSC.y - 35.0f);
ImVec2 bgMin = ImVec2(textPos.x - padding, textPos.y - padding/2);
ImVec2 bgMax = ImVec2(textPos.x + textSize.x + padding, textPos.y + textSize.y + padding/2);
draw->AddRectFilled(bgMin, bgMax, ImColor(0, 0, 0, 160), 6.0f);
// 绘制文本
(fontSize, textPos.x, textPos.y, textColor, shadowColor, info.c_str());
}
// 3. 显示距离(带背景)
if (Config.PlayerESP.) {
std::string distanceStr = std::to_string((int)Distance) + "M";
auto textSize = ImGui::CalcTextSize(distanceStr.c_str());
// iOS风格文本背景
float padding = 4.0f;
ImVec2 textPos = ImVec2(rootPosSC.x - (textSize.x / 2.0f), rootPosSC.y + 5.0f);
ImVec2 bgMin = ImVec2(textPos.x - padding, textPos.y - padding/2);
ImVec2 bgMax = ImVec2(textPos.x + textSize.x + padding, textPos.y + textSize.y + padding/2);
draw->AddRectFilled(bgMin, bgMax, ImColor(0, 0, 0, 160), 4.0f);
// 绘制文本
ImColor distanceColor = isMonster ? ImColor(255, 149, 0, 240) : ImColor(0, 122, 255, 240);
(fontSize-2, textPos.x, textPos.y, distanceColor, shadowColor, distanceStr.c_str());
}
}
// 辅助函数:绘制玩家ESP(修复怪物绘制问题)
void DrawPlayerESP(ImDrawList* draw, ASTExtraPlayerCharacter* Player,
ASTExtraPlayerCharacter* localPlayer,
ASTExtraPlayerController* localController,
int screenWidth, int screenHeight) {
float Distance = localPlayer->GetDistanceTo(Player) / 100.0f;
// 特殊处理怪物(年兽)
bool isMonster = (Player->bIsAI &&
(Player->GetName().find("Monster") != std::string::npos ||
Player->GetName().find("Beast") != std::string::npos ||
Player->GetName().find("年兽") != std::string::npos));
// 1. 获取位置
FVector HeadPos, RootPos;
if (isMonster) {
// 对于怪物,使用更准确的位置计算
HeadPos = Player->K2_GetActorLocation();
HeadPos.Z += 180.0f; // 怪物高度调整
RootPos = Player->K2_GetActorLocation();
RootPos.Z -= 60.0f; // 怪物底部调整
} else {
// 正常玩家/人机
HeadPos = Player->GetBonePos("Head");
RootPos = Player->GetBonePos("Root");
}
ImVec2 headPosSC, RootPosSC;
// 检查位置是否可见
bool positionsVisible = W2S(HeadPos, (FVector2D*)&headPosSC) &&
W2S(RootPos, (FVector2D*)&RootPosSC);
if (!positionsVisible) {
// 如果不可见,尝试使用更简单的方法
FVector actorPos = Player->K2_GetActorLocation();
if (!W2S(actorPos, (FVector2D*)&headPosSC)) {
return;
}
if (isMonster) {
// 怪物:创建合适的方框高度
RootPosSC = ImVec2(headPosSC.x, headPosSC.y + 100.0f);
} else {
RootPosSC = ImVec2(headPosSC.x, headPosSC.y + 50.0f);
}
}
// 调整怪物位置:确保方框正确居中
if (isMonster) {
// 调整头部位置,使方框更准确
float boxHeight = abs(headPosSC.y - RootPosSC.y);
headPosSC.y = headPosSC.y - boxHeight * 0.2f; // 向上调整
}
// 2. 确定颜色
bool IsVisible = localController->LineOfSightTo(Player, {0, 0, 0}, true);
ImColor PlayerBoxClrCf, PlayerBoxClrCf2, SkeletonColor;
if (isMonster) {
// 怪物使用特殊颜色
PlayerBoxClrCf = ImColor(255, 149, 0, 255); // iOS橙色
PlayerBoxClrCf2 = ImColor(255, 149, 0, 80);
SkeletonColor = ImColor(255, 149, 0, 200);
} else if (IsVisible) {
if (Player->bIsAI) {
PlayerBoxClrCf = ImColor(52, 199, 89, 255); // iOS绿色
SkeletonColor = ImColor(52, 199, 89, 200);
} else {
PlayerBoxClrCf = ImColor(255, 59, 48, 255); // iOS红色
SkeletonColor = ImColor(255, 59, 48, 200);
}
PlayerBoxClrCf2 = ImColor(IM_COL32((int)(PlayerBoxClrCf.Value.x * 255), (int)(PlayerBoxClrCf.Value.y * 255), (int)(PlayerBoxClrCf.Value.z * 255), 80));
} else {
PlayerBoxClrCf = ImColor(142, 142, 147, 255); // iOS灰色
PlayerBoxClrCf2 = ImColor(142, 142, 147, 80);
SkeletonColor = ImColor(142, 142, 147, 200);
}
// 3. 绘制各种ESP元素
// 3.1 预警指示器
if (Config.PlayerESP.Alert) {
DrawAlertIndicator(draw, Player, localPlayer, localController, PlayerBoxClrCf, PlayerBoxClrCf2, screenWidth, screenHeight);
}
// 3.2 连线
if (Config.PlayerESP.Line) {
draw->AddLine(ImVec2((float)screenWidth / 2, (float)screenHeight / 8),
ImVec2(headPosSC.x, headPosSC.y - 15.0f),
PlayerBoxClrCf, 1.5f);
}
// 3.3 方框
if (Config.PlayerESP.Box) {
DrawPlayerBox(draw, headPosSC, RootPosSC, PlayerBoxClrCf, isMonster);
}
// 3.4 骨骼(仅对非怪物绘制)
if (Config.PlayerESP.Skeleton && !isMonster) {
// 获取其他骨骼位置
ImVec2 upper_rPoSC, lowerarm_rPoSC, hand_rPoSC;
ImVec2 upper_lPoSC, lowerarm_lSC, hand_lPoSC;
ImVec2 thigh_lPoSC, calf_lPoSC, foot_lPoSC;
ImVec2 thigh_rPoSC, calf_rPoSC, foot_rPoSC;
ImVec2 neck_01PoSC, pelvisPoSC;
// 检查骨骼是否可见
FVector bonePositions[] = {
Player->GetBonePos("upperarm_r"), Player->GetBonePos("lowerarm_r"),
Player->GetBonePos("hand_r"), Player->GetBonePos("upperarm_l"),
Player->GetBonePos("lowerarm_l"), Player->GetBonePos("hand_l"),
Player->GetBonePos("thigh_l"), Player->GetBonePos("calf_l"),
Player->GetBonePos("foot_l"), Player->GetBonePos("thigh_r"),
Player->GetBonePos("calf_r"), Player->GetBonePos("foot_r"),
Player->GetBonePos("neck_01"), Player->GetBonePos("pelvis")
};
if (W2S(bonePositions[0], (FVector2D*)&upper_rPoSC) &&
W2S(bonePositions[1], (FVector2D*)&lowerarm_rPoSC) &&
W2S(bonePositions[2], (FVector2D*)&hand_rPoSC) &&
W2S(bonePositions[3], (FVector2D*)&upper_lPoSC) &&
W2S(bonePositions[4], (FVector2D*)&lowerarm_lSC) &&
W2S(bonePositions[5], (FVector2D*)&hand_lPoSC) &&
W2S(bonePositions[6], (FVector2D*)&thigh_lPoSC) &&
W2S(bonePositions[7], (FVector2D*)&calf_lPoSC) &&
W2S(bonePositions[8], (FVector2D*)&foot_lPoSC) &&
W2S(bonePositions[9], (FVector2D*)&thigh_rPoSC) &&
W2S(bonePositions[10], (FVector2D*)&calf_rPoSC) &&
W2S(bonePositions[11], (FVector2D*)&foot_rPoSC) &&
W2S(bonePositions[12], (FVector2D*)&neck_01PoSC) &&
W2S(bonePositions[13], (FVector2D*)&pelvisPoSC)) {
// 绘制骨骼连线
draw->AddLine(upper_rPoSC, neck_01PoSC, SkeletonColor, 1.8f);
draw->AddLine(upper_lPoSC, neck_01PoSC, SkeletonColor, 1.8f);
draw->AddLine(upper_rPoSC, lowerarm_rPoSC, SkeletonColor, 1.8f);
draw->AddLine(lowerarm_rPoSC, hand_rPoSC, SkeletonColor, 1.8f);
draw->AddLine(upper_lPoSC, lowerarm_lSC, SkeletonColor, 1.8f);
draw->AddLine(lowerarm_lSC, hand_lPoSC, SkeletonColor, 1.8f);
draw->AddLine(thigh_rPoSC, thigh_lPoSC, SkeletonColor, 1.8f);
draw->AddLine(thigh_lPoSC, calf_lPoSC, SkeletonColor, 1.8f);
draw->AddLine(calf_lPoSC, foot_lPoSC, SkeletonColor, 1.8f);
draw->AddLine(thigh_rPoSC, calf_rPoSC, SkeletonColor, 1.8f);
draw->AddLine(calf_rPoSC, foot_rPoSC, SkeletonColor, 1.8f);
draw->AddLine(neck_01PoSC, pelvisPoSC, SkeletonColor, 1.8f);
draw->AddLine(neck_01PoSC, headPosSC, SkeletonColor, 1.8f);
}
}
// 3.5 血量条
if (Config.PlayerESP.) {
DrawHealthBar(draw, Player, headPosSC, localController, HeadPos, isMonster);
}
// 3.6 玩家信息
DrawPlayerInfo(draw, Player, headPosSC, RootPosSC, Distance, isMonster);
}
// 武器相关辅助函数
void ApplyWeaponDamageMultiplier(ASTExtraPlayerCharacter* localPlayer) {
auto WeaponManagerComponent = localPlayer->WeaponManagerComponent;
if (!WeaponManagerComponent) return;
auto propSlot = WeaponManagerComponent->GetCurrentUsingPropSlot();
if ((int)propSlot.GetValue() < 1 || (int)propSlot.GetValue() > 3) return;
auto CurrentWeaponReplicated = (ASTExtraShootWeapon*)WeaponManagerComponent->CurrentWeaponReplicated;
if (!CurrentWeaponReplicated) return;
auto ShootWeaponComponent = CurrentWeaponReplicated->ShootWeaponComponent;
if (!ShootWeaponComponent) return;
UShootWeaponEntity* ShootWeaponEntityComponent = ShootWeaponComponent->ShootWeaponEntityComponent;
if (!ShootWeaponEntityComponent) return;
ShootWeaponEntityComponent->BulletNumSingleShot = 50;
}
void ApplyWeaponRecoilControl(ASTExtraPlayerCharacter* localPlayer) {
auto WeaponManagerComponent = localPlayer->WeaponManagerComponent;
if (!WeaponManagerComponent) return;
auto Slot = WeaponManagerComponent->GetCurrentUsingPropSlot();
if ((int)Slot.GetValue() < 1 || (int)Slot.GetValue() > 3) return;
auto CurrentWeaponReplicated = (ASTExtraShootWeapon*)WeaponManagerComponent->CurrentWeaponReplicated;
if (!CurrentWeaponReplicated) return;
auto ShootWeaponEntityComp = CurrentWeaponReplicated->ShootWeaponEntityComp;
auto ShootWeaponEffectComp = CurrentWeaponReplicated->ShootWeaponEffectComp;
if (!ShootWeaponEntityComp || !ShootWeaponEffectComp) return;
// 重置后坐力
memset(&ShootWeaponEntityComp->RecoilInfo, 0, sizeof(FSRecoilInfo));
ShootWeaponEntityComp->AccessoriesVRecoilFactor = 0.0f;
ShootWeaponEntityComp->AccessoriesHRecoilFactor = 0.0f;
ShootWeaponEntityComp->AccessoriesRecoveryFactor = 0.0f;
// 重置偏差
memset(&ShootWeaponEntityComp->DeviationInfo, 0, sizeof(FSDeviation));
ShootWeaponEntityComp->ShotGunVerticalSpread = 0.0f;
ShootWeaponEntityComp->ShotGunHorizontalSpread = 0.0f;
ShootWeaponEntityComp->GameDeviationFactor = 0.0f;
ShootWeaponEntityComp->GameDeviationAccuracy = 0.0f;
// 重置准星
ShootWeaponEntityComp->CrossHairInitialSize = 0.0f;
ShootWeaponEntityComp->CrossHairBurstSpeed = 0.0f;
ShootWeaponEntityComp->CrossHairBurstIncreaseSpeed = 0.0f;
ShootWeaponEntityComp->RecoilKickADS = 0.0f;
// 重置相机抖动
ShootWeaponEffectComp->CameraShakeInnerRadius = 0.0f;
ShootWeaponEffectComp->CameraShakeOuterRadius = 0.0f;
ShootWeaponEffectComp->CameraShakFalloff = 0.0f;
}
void ApplyWeaponScale(ASTExtraPlayerCharacter* localPlayer) {
auto WeaponManagerComponent = localPlayer->WeaponManagerComponent;
if (!WeaponManagerComponent) return;
auto Slot = WeaponManagerComponent->GetCurrentUsingPropSlot();
if ((int)Slot.GetValue() < 1 || (int)Slot.GetValue() > 3) return;
auto CurrentWeaponReplicated = (ASTExtraShootWeapon*)WeaponManagerComponent->CurrentWeaponReplicated;
if (!CurrentWeaponReplicated) return;
CurrentWeaponReplicated->RootComponent->RelativeScale3D.Y = Gun_Size;
CurrentWeaponReplicated->RootComponent->RelativeScale3D.Z = Gun_Size;
CurrentWeaponReplicated->RootComponent->RelativeScale3D.X = Gun_Size;
}
void ApplyWeaponDamage(ASTExtraPlayerCharacter* localPlayer) {
auto WeaponManagerComponent = localPlayer->WeaponManagerComponent;
if (!WeaponManagerComponent) return;
auto Slot = WeaponManagerComponent->GetCurrentUsingPropSlot();
if ((int)Slot.GetValue() < 1 || (int)Slot.GetValue() > 3) return;
auto CurrentWeaponReplicated = (ASTExtraShootWeapon*)WeaponManagerComponent->CurrentWeaponReplicated;
if (!CurrentWeaponReplicated) return;
auto ShootWeaponEntityComp = CurrentWeaponReplicated->ShootWeaponEntityComp;
if (!ShootWeaponEntityComp) return;
ShootWeaponEntityComp->BaseImpactDamage = * ;
}
// 辅助函数:应用玩家功能
void ApplyPlayerFeatures(ASTExtraPlayerCharacter* localPlayer,
ASTExtraPlayerController* localController,
int screenWidth, int screenHeight) {
// 1. 高跳功能
if () {
UCharacterMovementComponent* CharacterMovement = localPlayer->CharacterMovement;
if (CharacterMovement) {
CharacterMovement->JumpZVelocity = ;
CharacterMovement->GravityScale = 2.0f;
CharacterMovement->MaxStepHeight = 999.9f;
}
}
// 2. 人物旋转功能
if (chongchongche) {
USceneComponent* MeshContainer = g_LocalPlayer->MeshContainer;
MeshContainer->RelativeRotation = {0, chongchongche1, 0};
chongchongche1 += chongchongche2;
if (chongchongche1 >= tocdoquay) chongchongche1 = 0.0f;
chongchongche1 += 50;
}
// 3. 人物缩放功能
if () {
USceneComponent* MeshContainer = g_LocalPlayer->MeshContainer;
MeshContainer->SetWorldScale3D({, , });
}
// 4. 飞天功能
if () {
localPlayer->CharacterMovement->MaxAcceleration = 9999999.0f;
localPlayer->CustomTimeDilation = 0.7f;
localPlayer->EnergySpeedScale = 6.0f;
localPlayer->CharacterMovement->JumpZVelocity = 2200.0f;
localPlayer->CharacterMovement->bMaintainHorizontalGroundVelocity = true;
}
if () {
localPlayer->CharacterMovement->MaxAcceleration = 10000.828f;
localPlayer->CustomTimeDilation = 1.0f;
localPlayer->EnergySpeedScale = 1.0f;
localPlayer->CharacterMovement->bMaintainHorizontalGroundVelocity = false;
localPlayer->CharacterMovement->JumpZVelocity = 500.0f;
}
// 5. 能量加速功能
if () {
auto GWorld = GetWorld();
if (localPlayer->Energy.EnergyCurrent >= 65) {
GWorld->PersistentLevel->WorldSettings->MinUndilatedFrameTime = 0.210f;
}
}
if () {
auto GWorld = GetWorld();
if (localPlayer->Energy.EnergyCurrent >= 65) {
GWorld->PersistentLevel->WorldSettings->MinUndilatedFrameTime = 0.000f;
}
}
// 6. 武器功能
if (2) {
ApplyWeaponDamageMultiplier(localPlayer);
}
if () {
ApplyWeaponRecoilControl(localPlayer);
}
if () {
ApplyWeaponScale(localPlayer);
}
if (广) {
localPlayer->ThirdPersonCameraComponent->SetFieldOfView();
}
if () {
ApplyWeaponDamage(localPlayer);
}
// 7. 飞行功能
if (2) {
UCharacterMovementComponent* CharacterMovement = localPlayer->CharacterMovement;
if (CharacterMovement) {
CharacterMovement->SetMovementMode(EMovementMode::MOVE_Flying, 1);
FVector NewLocation = localPlayer->K2_GetActorLocation();
NewLocation.Z += 10.0f;
CharacterMovement->GravityScale = 0.0f;
localPlayer->K2_SetActorLocation(NewLocation, 0, false, nullptr);
}
}
if (1) {
UCharacterMovementComponent* CharacterMovement = localPlayer->CharacterMovement;
if (CharacterMovement) {
CharacterMovement->GravityScale = 0.f;
}
}
if () {
UCharacterMovementComponent* CharacterMovement = g_LocalPlayer->CharacterMovement;
CharacterMovement->SetMovementMode(EMovementMode::MOVE_Walking, 1);
CharacterMovement->GravityScale = 1.0f;
}
// 8. 修复功能
if () {
g_LocalPlayer->STPlayerController->bCanOpenParachute = true;
g_LocalPlayer->STPlayerController->bCanCloseParachute = true;
g_LocalPlayer->STPlayerController->bLandAfterJumpPlane = true;
}
}
// 辅助函数:应用载具功能
void ApplyVehicleFeatures(ASTExtraPlayerCharacter* localPlayer,
ASTExtraPlayerController* localController) {
if (! || !localPlayer) return;
auto CurrentVehicle2 = localPlayer->CurrentVehicle;
if (!CurrentVehicle2) return;
auto RootComponent = static_cast<UPrimitiveComponent*>(CurrentVehicle2->K2_GetRootComponent());
if (!RootComponent) return;
// 1. 旋转控制
if () {
auto RootComponent2 = static_cast<UPrimitiveComponent*>(CurrentVehicle2->K2_GetRootComponent());
RootComponent2->SetAllPhysicsAngularVelocity({0.f, 0.f, 26.5f}, true);
}
if (2) {
auto RootComponent2 = static_cast<UPrimitiveComponent*>(CurrentVehicle2->K2_GetRootComponent());
RootComponent2->SetAllPhysicsAngularVelocity({0.f, 0.f, -26.5f}, true);
}
// 2. 碰撞控制
if () {
CurrentVehicle2->SetActorEnableCollision(false);
} else {
CurrentVehicle2->SetActorEnableCollision(true);
}
// 3. 重力控制
if () {
auto RootComponent3 = static_cast<UPrimitiveComponent*>(CurrentVehicle2->K2_GetRootComponent());
RootComponent3->SetEnableGravity(false);
} else {
auto RootComponent3 = static_cast<UPrimitiveComponent*>(CurrentVehicle2->K2_GetRootComponent());
RootComponent3->SetEnableGravity(true);
}
// 4. 载具速度控制
float coeff = (60.0f * 60.0f) * 10.f * 0.01 * ;
float coefff = (60.0f * 60.0f) * 10.f * 0.01 * ;
FVector vel = {0, 0, 0};
auto yaw = localController->PlayerCameraManager->CameraCache.POV.Rotation.Yaw;
bool isMoving = false;
// 5. 不同模式的移动控制
auto CurrentVehicle = localPlayer->GetCurrentVehicle();
// 老爷模式(喇叭控制)
if ( && CurrentVehicle->bIsUsingHorn) {
isMoving = true;
float theta = 2.f * M_PI * (yaw / 360.f);
vel.X = (coeff * cosf(theta));
vel.Y = (coeff * sinf(theta));
auto RootComponent5 = static_cast<UPrimitiveComponent*>(CurrentVehicle2->K2_GetRootComponent());
RootComponent5->SetAllPhysicsLinearVelocity(vel, false);
}
// 飞船模式(加速控制)
if ( && CurrentVehicle->bIsBoosting) {
isMoving = true;
float theta = 2.f * M_PI * (yaw / 360.f);
vel.X = (coeff * cosf(theta));
vel.Y = (coeff * sinf(theta));
if () {
vel.Z = (coefff * sinf(theta));
}
auto RootComponent6 = static_cast<UPrimitiveComponent*>(CurrentVehicle2->K2_GetRootComponent());
RootComponent6->SetAllPhysicsLinearVelocity(vel, false);
}
// 喇叭飞天模式
if ( && CurrentVehicle->bIsUsingHorn) {
isMoving = true;
vel.Z = (coefff / 4);
auto RootComponent7 = static_cast<UPrimitiveComponent*>(CurrentVehicle2->K2_GetRootComponent());
RootComponent7->SetAllPhysicsLinearVelocity(vel, false);
}
// 载具加速模式
if ( && CurrentVehicle->bIsBoosting) {
isMoving = true;
float theta = 2.f * M_PI * (yaw / 360.f);
vel.X = (coeff * cosf(theta));
vel.Y = (coeff * sinf(theta));
auto RootComponent8 = static_cast<UPrimitiveComponent*>(CurrentVehicle2->K2_GetRootComponent());
RootComponent8->SetAllPhysicsLinearVelocity(vel, false);
}
// 6. 停止移动
if (!isMoving) {
vel = {0, 0, 0};
RootComponent->SetAllPhysicsLinearVelocity(vel, true);
}
}
void DrawESP(ImDrawList* draw, int screenWidth, int screenHeight) {
if (Config.OTHER.HIDEESP) {
HIDEESP = false;
} else {
HIDEESP = true;
}
if (!HIDEESP) {
return;
}
auto Actors = getActors();
int totalEnemies = 0, totalBots = 0, totalMonsters = 0;
ASTExtraPlayerCharacter* localPlayer = nullptr;
ASTExtraPlayerController* localController = nullptr;
// 1. 查找本地控制器
for (int i = 0; i < Actors.size(); i++) {
auto Actor = Actors[i];
if (isObjectInvalid(Actor)) continue;
if (Actor->IsA(ASTExtraPlayerController::StaticClass())) {
localController = (ASTExtraPlayerController*)Actor;
break;
}
}
if (!localController) return;
// 2. 查找本地玩家
for (int i = 0; i < Actors.size(); i++) {
auto Actor = Actors[i];
if (isObjectInvalid(Actor)) continue;
if (Actor->IsA(ASTExtraPlayerCharacter::StaticClass())) {
if (((ASTExtraPlayerCharacter*)Actor)->PlayerKey == localController->PlayerKey) {
localPlayer = (ASTExtraPlayerCharacter*)Actor;
break;
}
}
}
if (!localPlayer) return;
// 3. 处理所有Actor
for (int i = 0; i < Actors.size(); i++) {
auto Actor = Actors[i];
if (isObjectInvalid(Actor)) continue;
// 3.1 处理玩家
if (Actor->IsA(ASTExtraPlayerCharacter::StaticClass())) {
auto Player = (ASTExtraPlayerCharacter*)Actor;
// 跳过条件检查
if (ShouldSkipPlayer(Player, localController, localPlayer)) {
continue;
}
// 检查是否为怪物
bool isMonster = (Player->bIsAI &&
(Player->GetName().find("Monster") != std::string::npos ||
Player->GetName().find("Beast") != std::string::npos ||
Player->GetName().find("年兽") != std::string::npos));
// 更新计数
if (isMonster) {
totalMonsters++;
} else if (Player->bIsAI) {
totalBots++;
} else {
totalEnemies++;
}
// 绘制玩家ESP
DrawPlayerESP(draw, Player, localPlayer, localController, screenWidth, screenHeight);
}
// 3.2 处理战利品箱
if (Config.PlayerESP.LootBox && Actor->IsA(APickUpListWrapperActor::StaticClass())) {
auto LootBox = (APickUpListWrapperActor*)Actor;
auto RootComponent = Actor->RootComponent;
if (!RootComponent) continue;
float Distance = LootBox->GetDistanceTo(localPlayer) / 100.f;
FVector2D lootboxPos;
if (W2S(LootBox->K2_GetActorLocation(), &lootboxPos)) {
std::string s = "物资箱 ";
s += std::to_string((int)Distance);
s += "m";
// 计算文本大小并绘制背景
auto textSize = ImGui::CalcTextSize(s.c_str());
float padding = 4.0f;
ImVec2 bgMin = ImVec2(lootboxPos.X - padding, lootboxPos.Y - padding/2);
ImVec2 bgMax = ImVec2(lootboxPos.X + textSize.x + padding, lootboxPos.Y + textSize.y + padding/2);
draw->AddRectFilled(bgMin, bgMax, ImColor(0, 0, 0, 160), 4.0f);
draw->AddText(NULL, 16.0f,
ImVec2(lootboxPos.X, lootboxPos.Y),
ImColor(255, 204, 0, 240), s.c_str());
}
}
// 3.3 处理游戏状态(剩余人数)
if (Config.PlayerESP. && Actor->IsA(ASTExtraGameStateBase::StaticClass())) {
auto InGame = (ASTExtraGameStateBase*)Actor;
std::string s = "剩余: " + std::to_string((int)InGame->AlivePlayerNum);
// 计算文本大小
auto textSize = ImGui::CalcTextSize(s.c_str());
float padding = 8.0f;
// iOS风格背景
ImVec2 bgMin = ImVec2(screenWidth / 2.1f - textSize.x/2 - padding, 245);
ImVec2 bgMax = ImVec2(screenWidth / 2.1f + textSize.x/2 + padding, 245 + textSize.y + padding);
draw->AddRectFilled(bgMin, bgMax, ImColor(0, 0, 0, 180), 8.0f);
draw->AddRect(bgMin, bgMax, ImColor(255, 255, 255, 80), 8.0f, 0, 1.0f);
draw->AddText(nullptr, 20.0f,
ImVec2(screenWidth / 2.1f - textSize.x/2, 250),
ImColor(255, 255, 255, 240), s.c_str());
}
}
// 4. 全局状态显示
g_LocalController = localController;
g_LocalPlayer = localPlayer;
// 4.1 显示玩家/人机/怪物数量(iOS风格)
if () {
// 背景
ImVec2 bgMin = ImVec2(screenWidth / 1.73f - 220, 35);
ImVec2 bgMax = ImVec2(screenWidth / 1.73f, 85);
draw->AddRectFilled(bgMin, bgMax, ImColor(0, 0, 0, 200), 10.0f);
draw->AddRect(bgMin, bgMax, ImColor(255, 255, 255, 100), 10.0f, 0, 1.0f);
// 文本
char infoText[256];
sprintf(infoText, "玩家: %d\n人机: %d\n怪物: %d",
totalEnemies, totalBots, totalMonsters);
draw->AddText(ImVec2(screenWidth / 1.73f - 210, 40),
ImColor(255, 255, 255, 240), infoText);
}
// 4.2 应用玩家功能
ApplyPlayerFeatures(localPlayer, localController, screenWidth, screenHeight);
// 4.3 应用载具功能
ApplyVehicleFeatures(localPlayer, localController);
// 5. 绘制水印(保持原位置和内容)
if () {
// 使用原水印内容和位置
std::string watermarkText = T("by.脑干\n当前内部测试版-不代表最终品质", "by.SuRanCi\nCurrent internal beta-does not represent final quality");
// 原位置:{screenWidth + 200, 650},但需要调整到可见位置
// 调整为右下角位置
ImVec2 watermarkPos = ImVec2(screenWidth - 350, screenHeight - 65);
// 计算文本大小并绘制背景
auto textSize = ImGui::CalcTextSize(watermarkText.c_str());
float padding = 6.0f;
ImVec2 bgMin = ImVec2(watermarkPos.x - padding, watermarkPos.y - padding);
ImVec2 bgMax = ImVec2(watermarkPos.x + textSize.x + padding, watermarkPos.y + textSize.y + padding);
// iOS风格背景
draw->AddRectFilled(bgMin, bgMax, ImColor(0, 0, 0, 180), 6.0f);
draw->AddRect(bgMin, bgMax, ImColor(255, 255, 255, 80), 6.0f, 0, 1.0f);
// 绘制文本
draw->AddText(watermarkPos,
ImColor(255, 59, 48, 240), // iOS红色
watermarkText.c_str());
}
}
+52 -2
View File
@@ -1,3 +1,53 @@
# PMDT
# PUBG Mobile Debugging Tool (qingthr)
主要用于《刺激战场》(PUBG Mobile)的调试与功能扩展
这是一个基于 NDK 开发的 Android 原生插件(HOOK 库),主要用于《刺激战场》(PUBG Mobile)的调试与功能扩展。项目集成了 ImGui 菜单界面,支持 ESP(透视)、物资生成、建筑探测及多种游戏数值调试功能。
## 主要功能
- **ESP 绘制**:支持射线、骨骼、血量、名称及距离显示。
- **物资调试**:支持一键刷物资、自定义物资生成等。
- **建筑功能**:支持探测附近建筑、保存建筑列表、在玩家位置生成建筑及建筑跟随模式。
- **游戏增强**:包括高跳、加速、视角调整(广角)、无限子弹、除雾等调试功能。
- **多语言支持**:支持中文与英文界面切换。
## 项目结构
- `jni/`:核心源代码目录。
- `主程序.cpp`JNI 入口与 EGL 钩子处理。
- `菜单.h`:基于 ImGui 的 UI 界面逻辑。
- `变量.h`:全局变量、结构体定义及核心功能逻辑。
- `DrawESP.h`ESP 绘制逻辑。
- `SDK/`:包含游戏相关的类与结构体定义。
- `imgui/`ImGui 框架及其 Android/OpenGL3 渲染实现。
## 修复内容 (Latest Update)
针对近期无法编译的问题,进行了以下核心修复:
1. **语法错误修正**
- 修正了 `jni/变量.h``探测并添加附近建筑(floatRadius)` 缺少空格导致的类型解析错误。
2. **结构体与变量补全**
- 补全了缺失的 `探测到的建筑` 结构体定义。
- 补全了 `建筑生成线程``建筑线程运行``缓存的建筑类` 等核心逻辑变量。
3. **逻辑闭合修复**
- 针对 `jni/菜单.h` 中极其复杂的嵌套逻辑,修复了大量未闭合或多余的大括号 `{}`,确保 `void 菜单()` 函数及其内部窗口逻辑能够正确闭合,解决了“function definition is not allowed here”等编译难题。
4. **链接错误修复**
-`extern` 声明的全局变量(如 `建筑跟随模式``建筑探测半径` 等)修改为 `inline` 定义,解决了 ndk-build 链接阶段的 `undefined symbol` 错误。
5. **代码清理**
- 暂时注释掉了未定义的 `执行控制台命令()` 函数,确保构建流程畅通。
## 编译指南
在 Termux 或 Android NDK 环境下,进入项目根目录运行:
```bash
ndk-build
```
编译成功后,生成的库文件位于 `libs/armeabi-v7a/libHOOK.so`
## 开源协议
本项目采用 **MIT License**
*注:本项目仅供学习交流使用,请勿用于非法用途。*
+389
View File
@@ -0,0 +1,389 @@
#include <jni.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <sys/resource.h>
#include "android_native_app_glue.h"
#include <android/log.h>
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "threaded_app", __VA_ARGS__))
#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, "threaded_app", __VA_ARGS__))
/* For debug builds, always enable the debug traces in this library */
#ifndef NDEBUG
# define LOGV(...) ((void)__android_log_print(ANDROID_LOG_VERBOSE, "threaded_app", __VA_ARGS__))
#else
# define LOGV(...) ((void)0)
#endif
static void free_saved_state(struct android_app* android_app) {
pthread_mutex_lock(&android_app->mutex);
if (android_app->savedState != NULL) {
android_app->savedState = NULL;
android_app->savedStateSize = 0;
}
pthread_mutex_unlock(&android_app->mutex);
}
int8_t android_app_read_cmd(struct android_app* android_app) {
int8_t cmd;
if (read(android_app->msgread, &cmd, sizeof(cmd)) == sizeof(cmd)) {
switch (cmd) {
case APP_CMD_SAVE_STATE:
free_saved_state(android_app);
break;
}
return cmd;
} else {
LOGE("No data on command pipe!");
}
return -1;
}
static void print_cur_config(struct android_app* android_app) {
char lang[2], country[2];
AConfiguration_getLanguage(android_app->config, lang);
AConfiguration_getCountry(android_app->config, country);
LOGV("Config: mcc=%d mnc=%d lang=%c%c cnt=%c%c orien=%d touch=%d dens=%d "
"keys=%d nav=%d keysHid=%d navHid=%d sdk=%d size=%d long=%d "
"modetype=%d modenight=%d",
AConfiguration_getMcc(android_app->config),
AConfiguration_getMnc(android_app->config),
lang[0], lang[1], country[0], country[1],
AConfiguration_getOrientation(android_app->config),
AConfiguration_getTouchscreen(android_app->config),
AConfiguration_getDensity(android_app->config),
AConfiguration_getKeyboard(android_app->config),
AConfiguration_getNavigation(android_app->config),
AConfiguration_getKeysHidden(android_app->config),
AConfiguration_getNavHidden(android_app->config),
AConfiguration_getSdkVersion(android_app->config),
AConfiguration_getScreenSize(android_app->config),
AConfiguration_getScreenLong(android_app->config),
AConfiguration_getUiModeType(android_app->config),
AConfiguration_getUiModeNight(android_app->config));
}
void android_app_pre_exec_cmd(struct android_app* android_app, int8_t cmd) {
switch (cmd) {
case APP_CMD_INPUT_CHANGED:
LOGV("APP_CMD_INPUT_CHANGED\n");
pthread_mutex_lock(&android_app->mutex);
if (android_app->inputQueue != NULL) {
AInputQueue_detachLooper(android_app->inputQueue);
}
android_app->inputQueue = android_app->pendingInputQueue;
if (android_app->inputQueue != NULL) {
LOGV("Attaching input queue to looper");
AInputQueue_attachLooper(android_app->inputQueue,
android_app->looper, LOOPER_ID_INPUT, NULL,
&android_app->inputPollSource);
}
pthread_cond_broadcast(&android_app->cond);
pthread_mutex_unlock(&android_app->mutex);
break;
case APP_CMD_INIT_WINDOW:
LOGV("APP_CMD_INIT_WINDOW\n");
pthread_mutex_lock(&android_app->mutex);
android_app->window = android_app->pendingWindow;
pthread_cond_broadcast(&android_app->cond);
pthread_mutex_unlock(&android_app->mutex);
break;
case APP_CMD_TERM_WINDOW:
LOGV("APP_CMD_TERM_WINDOW\n");
pthread_cond_broadcast(&android_app->cond);
break;
case APP_CMD_RESUME:
case APP_CMD_START:
case APP_CMD_PAUSE:
case APP_CMD_STOP:
LOGV("activityState=%d\n", cmd);
pthread_mutex_lock(&android_app->mutex);
android_app->activityState = cmd;
pthread_cond_broadcast(&android_app->cond);
pthread_mutex_unlock(&android_app->mutex);
break;
case APP_CMD_CONFIG_CHANGED:
LOGV("APP_CMD_CONFIG_CHANGED\n");
AConfiguration_fromAssetManager(android_app->config,
android_app->activity->assetManager);
print_cur_config(android_app);
break;
case APP_CMD_DESTROY:
LOGV("APP_CMD_DESTROY\n");
android_app->destroyRequested = 1;
break;
}
}
void android_app_post_exec_cmd(struct android_app* android_app, int8_t cmd) {
switch (cmd) {
case APP_CMD_TERM_WINDOW:
LOGV("APP_CMD_TERM_WINDOW\n");
pthread_mutex_lock(&android_app->mutex);
android_app->window = NULL;
pthread_cond_broadcast(&android_app->cond);
pthread_mutex_unlock(&android_app->mutex);
break;
case APP_CMD_SAVE_STATE:
LOGV("APP_CMD_SAVE_STATE\n");
pthread_mutex_lock(&android_app->mutex);
android_app->stateSaved = 1;
pthread_cond_broadcast(&android_app->cond);
pthread_mutex_unlock(&android_app->mutex);
break;
case APP_CMD_RESUME:
free_saved_state(android_app);
break;
}
}
void app_dummy() {
}
static void android_app_destroy(struct android_app* android_app) {
LOGV("android_app_destroy!");
free_saved_state(android_app);
pthread_mutex_lock(&android_app->mutex);
if (android_app->inputQueue != NULL) {
AInputQueue_detachLooper(android_app->inputQueue);
}
AConfiguration_delete(android_app->config);
android_app->destroyed = 1;
pthread_cond_broadcast(&android_app->cond);
pthread_mutex_unlock(&android_app->mutex);
// Can't touch android_app object after this.
}
static void process_input(struct android_app* app, struct android_poll_source* source) {
AInputEvent* event = NULL;
if (AInputQueue_getEvent(app->inputQueue, &event) >= 0) {
LOGV("New input event: type=%d\n", AInputEvent_getType(event));
if (AInputQueue_preDispatchEvent(app->inputQueue, event)) {
return;
}
int32_t handled = 0;
if (app->onInputEvent != NULL) handled = app->onInputEvent(app, event);
AInputQueue_finishEvent(app->inputQueue, event, handled);
} else {
LOGE("Failure reading next input event: %s\n", strerror(errno));
}
}
static void process_cmd(struct android_app* app, struct android_poll_source* source) {
int8_t cmd = android_app_read_cmd(app);
android_app_pre_exec_cmd(app, cmd);
if (app->onAppCmd != NULL) app->onAppCmd(app, cmd);
android_app_post_exec_cmd(app, cmd);
}
static void* android_app_entry(void* param) {
struct android_app* android_app = (struct android_app*)param;
android_app->config = AConfiguration_new();
AConfiguration_fromAssetManager(android_app->config, android_app->activity->assetManager);
print_cur_config(android_app);
android_app->cmdPollSource.id = LOOPER_ID_MAIN;
android_app->cmdPollSource.app = android_app;
android_app->cmdPollSource.process = process_cmd;
android_app->inputPollSource.id = LOOPER_ID_INPUT;
android_app->inputPollSource.app = android_app;
android_app->inputPollSource.process = process_input;
ALooper* looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS);
ALooper_addFd(looper, android_app->msgread, LOOPER_ID_MAIN, ALOOPER_EVENT_INPUT, NULL,
&android_app->cmdPollSource);
android_app->looper = looper;
pthread_mutex_lock(&android_app->mutex);
android_app->running = 1;
pthread_cond_broadcast(&android_app->cond);
pthread_mutex_unlock(&android_app->mutex);
android_main(android_app);
android_app_destroy(android_app);
return NULL;
}
// --------------------------------------------------------------------
// Native activity interaction (called from main thread)
// --------------------------------------------------------------------
static void android_app_write_cmd(struct android_app* android_app, int8_t cmd) {
if (write(android_app->msgwrite, &cmd, sizeof(cmd)) != sizeof(cmd)) {
LOGE("Failure writing android_app cmd: %s\n", strerror(errno));
}
}
static void android_app_set_input(struct android_app* android_app, AInputQueue* inputQueue) {
pthread_mutex_lock(&android_app->mutex);
android_app->pendingInputQueue = inputQueue;
android_app_write_cmd(android_app, APP_CMD_INPUT_CHANGED);
while (android_app->inputQueue != android_app->pendingInputQueue) {
pthread_cond_wait(&android_app->cond, &android_app->mutex);
}
pthread_mutex_unlock(&android_app->mutex);
}
static void android_app_set_window(struct android_app* android_app, ANativeWindow* window) {
pthread_mutex_lock(&android_app->mutex);
if (android_app->pendingWindow != NULL) {
android_app_write_cmd(android_app, APP_CMD_TERM_WINDOW);
}
android_app->pendingWindow = window;
if (window != NULL) {
android_app_write_cmd(android_app, APP_CMD_INIT_WINDOW);
}
while (android_app->window != android_app->pendingWindow) {
pthread_cond_wait(&android_app->cond, &android_app->mutex);
}
pthread_mutex_unlock(&android_app->mutex);
}
static void android_app_set_activity_state(struct android_app* android_app, int8_t cmd) {
pthread_mutex_lock(&android_app->mutex);
android_app_write_cmd(android_app, cmd);
while (android_app->activityState != cmd) {
pthread_cond_wait(&android_app->cond, &android_app->mutex);
}
pthread_mutex_unlock(&android_app->mutex);
}
static void android_app_free(struct android_app* android_app) {
pthread_mutex_lock(&android_app->mutex);
android_app_write_cmd(android_app, APP_CMD_DESTROY);
while (!android_app->destroyed) {
pthread_cond_wait(&android_app->cond, &android_app->mutex);
}
pthread_mutex_unlock(&android_app->mutex);
close(android_app->msgread);
close(android_app->msgwrite);
pthread_cond_destroy(&android_app->cond);
pthread_mutex_destroy(&android_app->mutex);
}
static void onDestroy(ANativeActivity* activity) {
LOGV("Destroy: %p\n", activity);
android_app_free((struct android_app*)activity->instance);
}
static void onStart(ANativeActivity* activity) {
LOGV("Start: %p\n", activity);
android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_START);
}
static void onResume(ANativeActivity* activity) {
LOGV("Resume: %p\n", activity);
android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_RESUME);
}
static void* onSaveInstanceState(ANativeActivity* activity, size_t* outLen) {
struct android_app* android_app = (struct android_app*)activity->instance;
void* savedState = NULL;
LOGV("SaveInstanceState: %p\n", activity);
pthread_mutex_lock(&android_app->mutex);
android_app->stateSaved = 0;
android_app_write_cmd(android_app, APP_CMD_SAVE_STATE);
while (!android_app->stateSaved) {
pthread_cond_wait(&android_app->cond, &android_app->mutex);
}
if (android_app->savedState != NULL) {
savedState = android_app->savedState;
*outLen = android_app->savedStateSize;
android_app->savedState = NULL;
android_app->savedStateSize = 0;
}
pthread_mutex_unlock(&android_app->mutex);
return savedState;
}
static void onPause(ANativeActivity* activity) {
LOGV("Pause: %p\n", activity);
android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_PAUSE);
}
static void onStop(ANativeActivity* activity) {
LOGV("Stop: %p\n", activity);
android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_STOP);
}
static void onConfigurationChanged(ANativeActivity* activity) {
struct android_app* android_app = (struct android_app*)activity->instance;
LOGV("ConfigurationChanged: %p\n", activity);
android_app_write_cmd(android_app, APP_CMD_CONFIG_CHANGED);
}
static void onLowMemory(ANativeActivity* activity) {
struct android_app* android_app = (struct android_app*)activity->instance;
LOGV("LowMemory: %p\n", activity);
android_app_write_cmd(android_app, APP_CMD_LOW_MEMORY);
}
static void onWindowFocusChanged(ANativeActivity* activity, int focused) {
LOGV("WindowFocusChanged: %p -- %d\n", activity, focused);
android_app_write_cmd((struct android_app*)activity->instance,
focused ? APP_CMD_GAINED_FOCUS : APP_CMD_LOST_FOCUS);
}
static void onNativeWindowCreated(ANativeActivity* activity, ANativeWindow* window) {
LOGV("NativeWindowCreated: %p -- %p\n", activity, window);
android_app_set_window((struct android_app*)activity->instance, window);
}
static void onNativeWindowDestroyed(ANativeActivity* activity, ANativeWindow* window) {
LOGV("NativeWindowDestroyed: %p -- %p\n", activity, window);
android_app_set_window((struct android_app*)activity->instance, NULL);
}
static void onInputQueueCreated(ANativeActivity* activity, AInputQueue* queue) {
LOGV("InputQueueCreated: %p -- %p\n", activity, queue);
android_app_set_input((struct android_app*)activity->instance, queue);
}
static void onInputQueueDestroyed(ANativeActivity* activity, AInputQueue* queue) {
LOGV("InputQueueDestroyed: %p -- %p\n", activity, queue);
android_app_set_input((struct android_app*)activity->instance, NULL);
}
void ANativeActivity_onCreate(ANativeActivity* activity,
void* savedState, size_t savedStateSize) {
LOGV("Creating: %p\n", activity);
activity->callbacks->onDestroy = onDestroy;
activity->callbacks->onStart = onStart;
activity->callbacks->onResume = onResume;
activity->callbacks->onSaveInstanceState = onSaveInstanceState;
activity->callbacks->onPause = onPause;
activity->callbacks->onStop = onStop;
activity->callbacks->onConfigurationChanged = onConfigurationChanged;
activity->callbacks->onLowMemory = onLowMemory;
activity->callbacks->onWindowFocusChanged = onWindowFocusChanged;
activity->callbacks->onNativeWindowCreated = onNativeWindowCreated;
activity->callbacks->onNativeWindowDestroyed = onNativeWindowDestroyed;
activity->callbacks->onInputQueueCreated = onInputQueueCreated;
activity->callbacks->onInputQueueDestroyed = onInputQueueDestroyed;
}
+332
View File
@@ -0,0 +1,332 @@
#ifndef _ANDROID_NATIVE_APP_GLUE_H
#define _ANDROID_NATIVE_APP_GLUE_H
#include <poll.h>
#include <pthread.h>
#include <sched.h>
#include <android/configuration.h>
#include <android/looper.h>
#include <android/native_activity.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* The native activity interface provided by <android/native_activity.h>
* is based on a set of application-provided callbacks that will be called
* by the Activity's main thread when certain events occur.
*
* This means that each one of this callbacks _should_ _not_ block, or they
* risk having the system force-close the application. This programming
* model is direct, lightweight, but constraining.
*
* The 'threaded_native_app' static library is used to provide a different
* execution model where the application can implement its own main event
* loop in a different thread instead. Here's how it works:
*
* 1/ The application must provide a function named "android_main()" that
* will be called when the activity is created, in a new thread that is
* distinct from the activity's main thread.
*
* 2/ android_main() receives a pointer to a valid "android_app" structure
* that contains references to other important objects, e.g. the
* ANativeActivity obejct instance the application is running in.
*
* 3/ the "android_app" object holds an ALooper instance that already
* listens to two important things:
*
* - activity lifecycle events (e.g. "pause", "resume"). See APP_CMD_XXX
* declarations below.
*
* - input events coming from the AInputQueue attached to the activity.
*
* Each of these correspond to an ALooper identifier returned by
* ALooper_pollOnce with values of LOOPER_ID_MAIN and LOOPER_ID_INPUT,
* respectively.
*
* Your application can use the same ALooper to listen to additional
* file-descriptors. They can either be callback based, or with return
* identifiers starting with LOOPER_ID_USER.
*
* 4/ Whenever you receive a LOOPER_ID_MAIN or LOOPER_ID_INPUT event,
* the returned data will point to an android_poll_source structure. You
* can call the process() function on it, and fill in android_app->onAppCmd
* and android_app->onInputEvent to be called for your own processing
* of the event.
*
* Alternatively, you can call the low-level functions to read and process
* the data directly... look at the process_cmd() and process_input()
* implementations in the glue to see how to do this.
*
* See the sample named "native-activity" that comes with the NDK with a
* full usage example. Also look at the JavaDoc of NativeActivity.
*/
struct android_app;
/**
* Data associated with an ALooper fd that will be returned as the "outData"
* when that source has data ready.
*/
struct android_poll_source {
// The identifier of this source. May be LOOPER_ID_MAIN or
// LOOPER_ID_INPUT.
int32_t id;
// The android_app this ident is associated with.
struct android_app* app;
// Function to call to perform the standard processing of data from
// this source.
void (*process)(struct android_app* app, struct android_poll_source* source);
};
/**
* This is the interface for the standard glue code of a threaded
* application. In this model, the application's code is running
* in its own thread separate from the main thread of the process.
* It is not required that this thread be associated with the Java
* VM, although it will need to be in order to make JNI calls any
* Java objects.
*/
struct android_app {
// The application can place a pointer to its own state object
// here if it likes.
void* userData;
// Fill this in with the function to process main app commands (APP_CMD_*)
void (*onAppCmd)(struct android_app* app, int32_t cmd);
// Fill this in with the function to process input events. At this point
// the event has already been pre-dispatched, and it will be finished upon
// return. Return 1 if you have handled the event, 0 for any default
// dispatching.
int32_t (*onInputEvent)(struct android_app* app, AInputEvent* event);
// The ANativeActivity object instance that this app is running in.
ANativeActivity* activity;
// The current configuration the app is running in.
AConfiguration* config;
// This is the last instance's saved state, as provided at creation time.
// It is NULL if there was no state. You can use this as you need; the
// memory will remain around until you call android_app_exec_cmd() for
// APP_CMD_RESUME, at which point it will be freed and savedState set to NULL.
// These variables should only be changed when processing a APP_CMD_SAVE_STATE,
// at which point they will be initialized to NULL and you can malloc your
// state and place the information here. In that case the memory will be
// freed for you later.
void* savedState;
size_t savedStateSize;
// The ALooper associated with the app's thread.
ALooper* looper;
// When non-NULL, this is the input queue from which the app will
// receive user input events.
AInputQueue* inputQueue;
// When non-NULL, this is the window surface that the app can draw in.
ANativeWindow* window;
// Current content rectangle of the window; this is the area where the
// window's content should be placed to be seen by the user.
ARect contentRect;
// Current state of the app's activity. May be either APP_CMD_START,
// APP_CMD_RESUME, APP_CMD_PAUSE, or APP_CMD_STOP; see below.
int activityState;
// This is non-zero when the application's NativeActivity is being
// destroyed and waiting for the app thread to complete.
int destroyRequested;
// -------------------------------------------------
// Below are "private" implementation of the glue code.
pthread_mutex_t mutex;
pthread_cond_t cond;
int msgread;
int msgwrite;
pthread_t thread;
struct android_poll_source cmdPollSource;
struct android_poll_source inputPollSource;
int running;
int stateSaved;
int destroyed;
int redrawNeeded;
AInputQueue* pendingInputQueue;
ANativeWindow* pendingWindow;
ARect pendingContentRect;
};
enum {
/**
* Looper data ID of commands coming from the app's main thread, which
* is returned as an identifier from ALooper_pollOnce(). The data for this
* identifier is a pointer to an android_poll_source structure.
* These can be retrieved and processed with android_app_read_cmd()
* and android_app_exec_cmd().
*/
LOOPER_ID_MAIN = 1,
/**
* Looper data ID of events coming from the AInputQueue of the
* application's window, which is returned as an identifier from
* ALooper_pollOnce(). The data for this identifier is a pointer to an
* android_poll_source structure. These can be read via the inputQueue
* object of android_app.
*/
LOOPER_ID_INPUT = 2,
/**
* Start of user-defined ALooper identifiers.
*/
LOOPER_ID_USER = 3,
};
enum {
/**
* Command from main thread: the AInputQueue has changed. Upon processing
* this command, android_app->inputQueue will be updated to the new queue
* (or NULL).
*/
APP_CMD_INPUT_CHANGED,
/**
* Command from main thread: a new ANativeWindow is ready for use. Upon
* receiving this command, android_app->window will contain the new window
* surface.
*/
APP_CMD_INIT_WINDOW,
/**
* Command from main thread: the existing ANativeWindow needs to be
* terminated. Upon receiving this command, android_app->window still
* contains the existing window; after calling android_app_exec_cmd
* it will be set to NULL.
*/
APP_CMD_TERM_WINDOW,
/**
* Command from main thread: the current ANativeWindow has been resized.
* Please redraw with its new size.
*/
APP_CMD_WINDOW_RESIZED,
/**
* Command from main thread: the system needs that the current ANativeWindow
* be redrawn. You should redraw the window before handing this to
* android_app_exec_cmd() in order to avoid transient drawing glitches.
*/
APP_CMD_WINDOW_REDRAW_NEEDED,
/**
* Command from main thread: the content area of the window has changed,
* such as from the soft input window being shown or hidden. You can
* find the new content rect in android_app::contentRect.
*/
APP_CMD_CONTENT_RECT_CHANGED,
/**
* Command from main thread: the app's activity window has gained
* input focus.
*/
APP_CMD_GAINED_FOCUS,
/**
* Command from main thread: the app's activity window has lost
* input focus.
*/
APP_CMD_LOST_FOCUS,
/**
* Command from main thread: the current device configuration has changed.
*/
APP_CMD_CONFIG_CHANGED,
/**
* Command from main thread: the system is running low on memory.
* Try to reduce your memory use.
*/
APP_CMD_LOW_MEMORY,
/**
* Command from main thread: the app's activity has been started.
*/
APP_CMD_START,
/**
* Command from main thread: the app's activity has been resumed.
*/
APP_CMD_RESUME,
/**
* Command from main thread: the app should generate a new saved state
* for itself, to restore from later if needed. If you have saved state,
* allocate it with malloc and place it in android_app.savedState with
* the size in android_app.savedStateSize. The will be freed for you
* later.
*/
APP_CMD_SAVE_STATE,
/**
* Command from main thread: the app's activity has been paused.
*/
APP_CMD_PAUSE,
/**
* Command from main thread: the app's activity has been stopped.
*/
APP_CMD_STOP,
/**
* Command from main thread: the app's activity is being destroyed,
* and waiting for the app thread to clean up and exit before proceeding.
*/
APP_CMD_DESTROY,
};
/**
* Call when ALooper_pollAll() returns LOOPER_ID_MAIN, reading the next
* app command message.
*/
int8_t android_app_read_cmd(struct android_app* android_app);
/**
* Call with the command returned by android_app_read_cmd() to do the
* initial pre-processing of the given command. You can perform your own
* actions for the command after calling this function.
*/
void android_app_pre_exec_cmd(struct android_app* android_app, int8_t cmd);
/**
* Call with the command returned by android_app_read_cmd() to do the
* final post-processing of the given command. You must have done your own
* actions for the command before calling this function.
*/
void android_app_post_exec_cmd(struct android_app* android_app, int8_t cmd);
/**
* Dummy function you can call to ensure glue code isn't stripped.
*/
void app_dummy();
/**
* This is the function that application code must implement, representing
* the main entry to the app.
*/
extern void android_main(struct android_app* app);
#ifdef __cplusplus
}
#endif
#endif /* _ANDROID_NATIVE_APP_GLUE_H */
Executable
+189
View File
@@ -0,0 +1,189 @@
#ifndef dobby_h
#define dobby_h
// obfuscated interface
#if 0
#define DobbyBuildVersion c343f74888dffad84d9ad08d9c433456
#define DobbyHook c8dc3ffa44f22dbd10ccae213dd8b1f8
#define DobbyInstrument b71e27bca2c362de90c1034f19d839f9
#endif
#ifdef __cplusplus
extern "C" {
#endif
#include <stdbool.h>
#include <stdint.h>
void log_set_level(int level);
void log_switch_to_syslog();
void log_switch_to_file(const char *path);
typedef enum {
kMemoryOperationSuccess,
kMemoryOperationError,
kNotSupportAllocateExecutableMemory,
kNotEnough,
kNone
} MemoryOperationError;
#define PLATFORM_INTERFACE_CODE_PATCH_TOOL_H
MemoryOperationError CodePatch(void *address, uint8_t *buffer, uint32_t buffer_size);
typedef uintptr_t addr_t;
typedef uint32_t addr32_t;
typedef uint64_t addr64_t;
#if defined(__arm64__) || defined(__aarch64__)
#define ARM64_TMP_REG_NDX_0 17
// float register
typedef union _FPReg {
__int128_t q;
struct {
double d1;
double d2;
} d;
struct {
float f1;
float f2;
float f3;
float f4;
} f;
} FPReg;
// register context
typedef struct _RegisterContext {
uint64_t dmmpy_0; // dummy placeholder
uint64_t sp;
uint64_t dmmpy_1; // dummy placeholder
union {
uint64_t x[29];
struct {
uint64_t x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22,
x23, x24, x25, x26, x27, x28;
} regs;
} general;
uint64_t fp;
uint64_t lr;
union {
FPReg q[32];
struct {
FPReg q0, q1, q2, q3, q4, q5, q6, q7;
// [!!! READ ME !!!]
// for Arm64, can't access q8 - q31, unless you enable full floating-point register pack
FPReg q8, q9, q10, q11, q12, q13, q14, q15, q16, q17, q18, q19, q20, q21, q22, q23, q24, q25, q26, q27, q28, q29,
q30, q31;
} regs;
} floating;
} RegisterContext;
#elif defined(__arm__)
typedef struct _RegisterContext {
uint32_t dummy_0;
uint32_t dummy_1;
uint32_t dummy_2;
uint32_t sp;
union {
uint32_t r[13];
struct {
uint32_t r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
} regs;
} general;
uint32_t lr;
} RegisterContext;
#elif defined(_M_IX86) || defined(__i386__)
typedef struct _RegisterContext {
uint32_t dummy_0;
uint32_t esp;
uint32_t dummy_1;
uint32_t flags;
union {
struct {
uint32_t eax, ebx, ecx, edx, ebp, esp, edi, esi;
} regs;
} general;
} RegisterContext;
#elif defined(_M_X64) || defined(__x86_64__)
typedef struct _RegisterContext {
uint64_t dummy_0;
uint64_t rsp;
union {
struct {
uint64_t rax, rbx, rcx, rdx, rbp, rsp, rdi, rsi, r8, r9, r10, r11, r12, r13, r14, r15;
} regs;
} general;
uint64_t dummy_1;
uint64_t flags;
} RegisterContext;
#endif
#define RT_FAILED -1
#define RT_SUCCESS 0
typedef enum _RetStatus { RS_FAILED = -1, RS_SUCCESS = 0 } RetStatus;
typedef struct _HookEntryInfo {
int hook_id;
union {
void *target_address;
void *function_address;
void *instruction_address;
};
} HookEntryInfo;
// DobbyWrap <==> DobbyInstrument, so use DobbyInstrument instead of DobbyWrap
#if 0
// wrap function with pre_call and post_call
typedef void (*PreCallTy)(RegisterContext *ctx, const HookEntryInfo *info);
typedef void (*PostCallTy)(RegisterContext *ctx, const HookEntryInfo *info);
int DobbyWrap(void *function_address, PreCallTy pre_call, PostCallTy post_call);
#endif
// return dobby build date
const char *DobbyBuildVersion();
// replace function
int DobbyHook(void *address, void *replace_call, void **origin_call);
// dynamic binary instrument for instruction
// [!!! READ ME !!!]
// for Arm64, can't access q8 - q31, unless you enable full floating-point register pack
typedef void (*DBICallTy)(RegisterContext *ctx, const HookEntryInfo *info);
int DobbyInstrument(void *address, DBICallTy dbi_call);
// destory and restore hook
int DobbyDestroy(void *address);
// iterate symbol table and find symbol
void *DobbySymbolResolver(const char *image_name, const char *symbol_name);
// global offset table
int DobbyGlobalOffsetTableReplace(char *image_name, char *symbol_name, void *fake_func, void **orig_func);
// [!!! READ ME !!!]
// for arm, Arm64, dobby will use b xxx instead of ldr absolute indirect branch
// for x64, dobby always use absolute indirect jump
#if defined(__arm__) || defined(__arm64__) || defined(__aarch64__) || defined(_M_X64) || defined(__x86_64__)
void dobby_enable_near_branch_trampoline();
void dobby_disable_near_branch_trampoline();
#endif
// register linker load image callback
typedef void (*linker_load_callback_t)(const char *image_name, void *handle);
void dobby_register_image_load_callback(linker_load_callback_t func);
#ifdef __cplusplus
}
#endif
#endif
Executable
+46252
View File
File diff suppressed because it is too large Load Diff
+123
View File
@@ -0,0 +1,123 @@
//-----------------------------------------------------------------------------
// COMPILE-TIME OPTIONS FOR DEAR IMGUI
// Runtime options (clipboard callbacks, enabling various features, etc.) can generally be set via the ImGuiIO structure.
// You can use ImGui::SetAllocatorFunctions() before calling ImGui::CreateContext() to rewire memory allocation functions.
//-----------------------------------------------------------------------------
// A) You may edit imconfig.h (and not overwrite it when updating Dear ImGui, or maintain a patch/rebased branch with your modifications to it)
// B) or '#define IMGUI_USER_CONFIG "my_imgui_config.h"' in your project and then add directives in your own file without touching this template.
//-----------------------------------------------------------------------------
// You need to make sure that configuration settings are defined consistently _everywhere_ Dear ImGui is used, which include the imgui*.cpp
// files but also _any_ of your code that uses Dear ImGui. This is because some compile-time options have an affect on data structures.
// Defining those options in imconfig.h will ensure every compilation unit gets to see the same data structure layouts.
// Call IMGUI_CHECKVERSION() from your .cpp files to verify that the data structures your files are using are matching the ones imgui.cpp is using.
//-----------------------------------------------------------------------------
#pragma once
//---- Define assertion handler. Defaults to calling assert().
// If your macro uses multiple statements, make sure is enclosed in a 'do { .. } while (0)' block so it can be used as a single statement.
//#define IM_ASSERT(_EXPR) MyAssert(_EXPR)
//#define IM_ASSERT(_EXPR) ((void)(_EXPR)) // Disable asserts
//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows
// Using Dear ImGui via a shared library is not recommended, because of function call overhead and because we don't guarantee backward nor forward ABI compatibility.
// DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions()
// for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for more details.
//#define IMGUI_API __declspec( dllexport )
//#define IMGUI_API __declspec( dllimport )
//---- Don't define obsolete functions/enums/behaviors. Consider enabling from time to time after updating to avoid using soon-to-be obsolete function/names.
//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
//---- Disable all of Dear ImGui or don't implement standard windows.
// It is very strongly recommended to NOT disable the demo windows during development. Please read comments in imgui_demo.cpp.
//#define IMGUI_DISABLE // Disable everything: all headers and source files will be empty.
//#define IMGUI_DISABLE_DEMO_WINDOWS // Disable demo windows: ShowDemoWindow()/ShowStyleEditor() will be empty. Not recommended.
//#define IMGUI_DISABLE_METRICS_WINDOW // Disable metrics/debugger window: ShowMetricsWindow() will be empty.
//---- Don't implement some functions to reduce linkage requirements.
//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. (user32.lib/.a, kernel32.lib/.a)
//#define IMGUI_ENABLE_WIN32_DEFAULT_IME_FUNCTIONS // [Win32] [Default with Visual Studio] Implement default IME handler (require imm32.lib/.a, auto-link for Visual Studio, -limm32 on command-line for MinGW)
//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS // [Win32] [Default with non-Visual Studio compilers] Don't implement default IME handler (won't require imm32.lib/.a)
//#define IMGUI_DISABLE_WIN32_FUNCTIONS // [Win32] Won't use and link with any Win32 function (clipboard, ime).
//#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS // [OSX] Implement default OSX clipboard handler (need to link with '-framework ApplicationServices', this is why this is not the default).
//#define IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself (e.g. if you don't want to link with vsnprintf)
//#define IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 so you can implement them yourself.
//#define IMGUI_DISABLE_FILE_FUNCTIONS // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite and ImFileHandle at all (replace them with dummies)
//#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite and ImFileHandle so you can implement them yourself if you don't want to link with fopen/fclose/fread/fwrite. This will also disable the LogToTTY() function.
//#define IMGUI_DISABLE_DEFAULT_ALLOCATORS // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions().
//#define IMGUI_DISABLE_SSE // Disable use of SSE intrinsics even if available
//---- Include imgui_user.h at the end of imgui.h as a convenience
//#define IMGUI_INCLUDE_IMGUI_USER_H
//---- Pack colors to BGRA8 instead of RGBA8 (to avoid converting from one to another)
//#define IMGUI_USE_BGRA_PACKED_COLOR
//---- Use 32-bit for ImWchar (default is 16-bit) to support unicode planes 1-16. (e.g. point beyond 0xFFFF like emoticons, dingbats, symbols, shapes, ancient languages, etc...)
//#define IMGUI_USE_WCHAR32
//---- Avoid multiple STB libraries implementations, or redefine path/filenames to prioritize another version
// By default the embedded implementations are declared static and not available outside of Dear ImGui sources files.
//#define IMGUI_STB_TRUETYPE_FILENAME "my_folder/stb_truetype.h"
//#define IMGUI_STB_RECT_PACK_FILENAME "my_folder/stb_rect_pack.h"
//#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION
//#define IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION
//---- Use stb_printf's faster implementation of vsnprintf instead of the one from libc (unless IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS is defined)
// Requires 'stb_sprintf.h' to be available in the include path. Compatibility checks of arguments and formats done by clang and GCC will be disabled in order to support the extra formats provided by STB sprintf.
// #define IMGUI_USE_STB_SPRINTF
//---- Use FreeType to build and rasterize the font atlas (instead of stb_truetype which is embedded by default in Dear ImGui)
// Requires FreeType headers to be available in the include path. Requires program to be compiled with 'misc/freetype/imgui_freetype.cpp' (in this repository) + the FreeType library (not provided).
// On Windows you may use vcpkg with 'vcpkg install freetype --triplet=x64-windows' + 'vcpkg integrate install'.
//#define IMGUI_ENABLE_FREETYPE
//---- Use stb_truetype to build and rasterize the font atlas (default)
// The only purpose of this define is if you want force compilation of the stb_truetype backend ALONG with the FreeType backend.
//#define IMGUI_ENABLE_STB_TRUETYPE
//---- Define constructor and implicit cast operators to convert back<>forth between your math types and ImVec2/ImVec4.
// This will be inlined as part of ImVec2 and ImVec4 class declarations.
/*
#define IM_VEC2_CLASS_EXTRA \
ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \
operator MyVec2() const { return MyVec2(x,y); }
#define IM_VEC4_CLASS_EXTRA \
ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \
operator MyVec4() const { return MyVec4(x,y,z,w); }
*/
//---- Use 32-bit vertex indices (default is 16-bit) is one way to allow large meshes with more than 64K vertices.
// Your renderer backend will need to support it (most example renderer backends support both 16/32-bit indices).
// Another way to allow large meshes while keeping 16-bit indices is to handle ImDrawCmd::VtxOffset in your renderer.
// Read about ImGuiBackendFlags_RendererHasVtxOffset for details.
//#define ImDrawIdx unsigned int
//---- Override ImDrawCallback signature (will need to modify renderer backends accordingly)
//struct ImDrawList;
//struct ImDrawCmd;
//typedef void (*MyImDrawCallback)(const ImDrawList* draw_list, const ImDrawCmd* cmd, void* my_renderer_user_data);
//#define ImDrawCallback MyImDrawCallback
//---- Debug Tools: Macro to break in Debugger
// (use 'Metrics->Tools->Item Picker' to pick widgets with the mouse and break into them for easy debugging.)
//#define IM_DEBUG_BREAK IM_ASSERT(0)
//#define IM_DEBUG_BREAK __debugbreak()
//---- Debug Tools: Have the Item Picker break in the ItemAdd() function instead of ItemHoverable(),
// (which comes earlier in the code, will catch a few extra items, allow picking items other than Hovered one.)
// This adds a small runtime cost which is why it is not enabled by default.
//#define IMGUI_DEBUG_TOOL_ITEM_PICKER_EX
//---- Debug Tools: Enable slower asserts
//#define IMGUI_DEBUG_PARANOID
//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files.
/*
namespace ImGui
{
void MyFunction(const char* name, const MyMatrix44& v);
}
*/
+13243
View File
File diff suppressed because it is too large Load Diff
Executable
+3062
View File
File diff suppressed because it is too large Load Diff
+7928
View File
File diff suppressed because it is too large Load Diff
+4201
View File
File diff suppressed because it is too large Load Diff
+357
View File
@@ -0,0 +1,357 @@
// dear imgui: Platform Binding for Android native app
// This needs to be used along with the OpenGL 3 Renderer (imgui_impl_opengl3)
// Implemented features:
// [X] Platform: Keyboard support. Since 1.87 we are using the io.AddKeyEvent() function. Pass ImGuiKey values to all key functions e.g. ImGui::IsKeyPressed(ImGuiKey_Space). [Legacy AKEYCODE_* values will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set]
// Missing features:
// [ ] Platform: Clipboard support.
// [ ] Platform: Gamepad support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'.
// [ ] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. FIXME: Check if this is even possible with Android.
// Important:
// - Consider using SDL or GLFW backend on Android, which will be more full-featured than this.
// - FIXME: On-screen keyboard currently needs to be enabled by the application (see examples/ and issue #3446)
// - FIXME: Unicode character inputs needs to be passed by Dear ImGui by the application (see examples/ and issue #3446)
// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.
// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need.
// If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp.
// Read online: https://github.com/ocornut/imgui/tree/master/docs
// CHANGELOG
// (minor and older changes stripped away, please see git history for details)
// 2022-01-26: Inputs: replaced short-lived io.AddKeyModsEvent() (added two weeks ago)with io.AddKeyEvent() using ImGuiKey_ModXXX flags. Sorry for the confusion.
// 2022-01-17: Inputs: calling new io.AddMousePosEvent(), io.AddMouseButtonEvent(), io.AddMouseWheelEvent() API (1.87+).
// 2022-01-10: Inputs: calling new io.AddKeyEvent(), io.AddKeyModsEvent() + io.SetKeyEventNativeData() API (1.87+). Support for full ImGuiKey range.
// 2021-03-04: Initial version.
#include <ctime>
#include <map>
#include <queue>
#include <imgui.h>
#include "imgui_impl_android.h"
#include <time.h>
#include <android/native_window.h>
#include <android/input.h>
#include <android/keycodes.h>
#include <android/log.h>
// Android data
static double g_Time = 0.0;
static ANativeWindow* g_Window;
static char g_LogTag[] = "ImGuiExample";
static ImGuiKey ImGui_ImplAndroid_KeyCodeToImGuiKey(int32_t key_code)
{
switch (key_code)
{
case AKEYCODE_TAB: return ImGuiKey_Tab;
case AKEYCODE_DPAD_LEFT: return ImGuiKey_LeftArrow;
case AKEYCODE_DPAD_RIGHT: return ImGuiKey_RightArrow;
case AKEYCODE_DPAD_UP: return ImGuiKey_UpArrow;
case AKEYCODE_DPAD_DOWN: return ImGuiKey_DownArrow;
case AKEYCODE_PAGE_UP: return ImGuiKey_PageUp;
case AKEYCODE_PAGE_DOWN: return ImGuiKey_PageDown;
case AKEYCODE_MOVE_HOME: return ImGuiKey_Home;
case AKEYCODE_MOVE_END: return ImGuiKey_End;
case AKEYCODE_INSERT: return ImGuiKey_Insert;
case AKEYCODE_FORWARD_DEL: return ImGuiKey_Delete;
case AKEYCODE_DEL: return ImGuiKey_Backspace;
case AKEYCODE_SPACE: return ImGuiKey_Space;
case AKEYCODE_ENTER: return ImGuiKey_Enter;
case AKEYCODE_ESCAPE: return ImGuiKey_Escape;
case AKEYCODE_APOSTROPHE: return ImGuiKey_Apostrophe;
case AKEYCODE_COMMA: return ImGuiKey_Comma;
case AKEYCODE_MINUS: return ImGuiKey_Minus;
case AKEYCODE_PERIOD: return ImGuiKey_Period;
case AKEYCODE_SLASH: return ImGuiKey_Slash;
case AKEYCODE_SEMICOLON: return ImGuiKey_Semicolon;
case AKEYCODE_EQUALS: return ImGuiKey_Equal;
case AKEYCODE_LEFT_BRACKET: return ImGuiKey_LeftBracket;
case AKEYCODE_BACKSLASH: return ImGuiKey_Backslash;
case AKEYCODE_RIGHT_BRACKET: return ImGuiKey_RightBracket;
case AKEYCODE_GRAVE: return ImGuiKey_GraveAccent;
case AKEYCODE_CAPS_LOCK: return ImGuiKey_CapsLock;
case AKEYCODE_SCROLL_LOCK: return ImGuiKey_ScrollLock;
case AKEYCODE_NUM_LOCK: return ImGuiKey_NumLock;
case AKEYCODE_SYSRQ: return ImGuiKey_PrintScreen;
case AKEYCODE_BREAK: return ImGuiKey_Pause;
case AKEYCODE_NUMPAD_0: return ImGuiKey_Keypad0;
case AKEYCODE_NUMPAD_1: return ImGuiKey_Keypad1;
case AKEYCODE_NUMPAD_2: return ImGuiKey_Keypad2;
case AKEYCODE_NUMPAD_3: return ImGuiKey_Keypad3;
case AKEYCODE_NUMPAD_4: return ImGuiKey_Keypad4;
case AKEYCODE_NUMPAD_5: return ImGuiKey_Keypad5;
case AKEYCODE_NUMPAD_6: return ImGuiKey_Keypad6;
case AKEYCODE_NUMPAD_7: return ImGuiKey_Keypad7;
case AKEYCODE_NUMPAD_8: return ImGuiKey_Keypad8;
case AKEYCODE_NUMPAD_9: return ImGuiKey_Keypad9;
case AKEYCODE_NUMPAD_DOT: return ImGuiKey_KeypadDecimal;
case AKEYCODE_NUMPAD_DIVIDE: return ImGuiKey_KeypadDivide;
case AKEYCODE_NUMPAD_MULTIPLY: return ImGuiKey_KeypadMultiply;
case AKEYCODE_NUMPAD_SUBTRACT: return ImGuiKey_KeypadSubtract;
case AKEYCODE_NUMPAD_ADD: return ImGuiKey_KeypadAdd;
case AKEYCODE_NUMPAD_ENTER: return ImGuiKey_KeypadEnter;
case AKEYCODE_NUMPAD_EQUALS: return ImGuiKey_KeypadEqual;
case AKEYCODE_CTRL_LEFT: return ImGuiKey_LeftCtrl;
case AKEYCODE_SHIFT_LEFT: return ImGuiKey_LeftShift;
case AKEYCODE_ALT_LEFT: return ImGuiKey_LeftAlt;
case AKEYCODE_META_LEFT: return ImGuiKey_LeftSuper;
case AKEYCODE_CTRL_RIGHT: return ImGuiKey_RightCtrl;
case AKEYCODE_SHIFT_RIGHT: return ImGuiKey_RightShift;
case AKEYCODE_ALT_RIGHT: return ImGuiKey_RightAlt;
case AKEYCODE_META_RIGHT: return ImGuiKey_RightSuper;
case AKEYCODE_MENU: return ImGuiKey_Menu;
case AKEYCODE_0: return ImGuiKey_0;
case AKEYCODE_1: return ImGuiKey_1;
case AKEYCODE_2: return ImGuiKey_2;
case AKEYCODE_3: return ImGuiKey_3;
case AKEYCODE_4: return ImGuiKey_4;
case AKEYCODE_5: return ImGuiKey_5;
case AKEYCODE_6: return ImGuiKey_6;
case AKEYCODE_7: return ImGuiKey_7;
case AKEYCODE_8: return ImGuiKey_8;
case AKEYCODE_9: return ImGuiKey_9;
case AKEYCODE_A: return ImGuiKey_A;
case AKEYCODE_B: return ImGuiKey_B;
case AKEYCODE_C: return ImGuiKey_C;
case AKEYCODE_D: return ImGuiKey_D;
case AKEYCODE_E: return ImGuiKey_E;
case AKEYCODE_F: return ImGuiKey_F;
case AKEYCODE_G: return ImGuiKey_G;
case AKEYCODE_H: return ImGuiKey_H;
case AKEYCODE_I: return ImGuiKey_I;
case AKEYCODE_J: return ImGuiKey_J;
case AKEYCODE_K: return ImGuiKey_K;
case AKEYCODE_L: return ImGuiKey_L;
case AKEYCODE_M: return ImGuiKey_M;
case AKEYCODE_N: return ImGuiKey_N;
case AKEYCODE_O: return ImGuiKey_O;
case AKEYCODE_P: return ImGuiKey_P;
case AKEYCODE_Q: return ImGuiKey_Q;
case AKEYCODE_R: return ImGuiKey_R;
case AKEYCODE_S: return ImGuiKey_S;
case AKEYCODE_T: return ImGuiKey_T;
case AKEYCODE_U: return ImGuiKey_U;
case AKEYCODE_V: return ImGuiKey_V;
case AKEYCODE_W: return ImGuiKey_W;
case AKEYCODE_X: return ImGuiKey_X;
case AKEYCODE_Y: return ImGuiKey_Y;
case AKEYCODE_Z: return ImGuiKey_Z;
case AKEYCODE_F1: return ImGuiKey_F1;
case AKEYCODE_F2: return ImGuiKey_F2;
case AKEYCODE_F3: return ImGuiKey_F3;
case AKEYCODE_F4: return ImGuiKey_F4;
case AKEYCODE_F5: return ImGuiKey_F5;
case AKEYCODE_F6: return ImGuiKey_F6;
case AKEYCODE_F7: return ImGuiKey_F7;
case AKEYCODE_F8: return ImGuiKey_F8;
case AKEYCODE_F9: return ImGuiKey_F9;
case AKEYCODE_F10: return ImGuiKey_F10;
case AKEYCODE_F11: return ImGuiKey_F11;
case AKEYCODE_F12: return ImGuiKey_F12;
default: return ImGuiKey_None;
}
}
static std::map<int32_t, std::queue<int32_t>> g_KeyEventQueues; // FIXME: Remove dependency on map and queue once we use upcoming input queue.
int32_t ImGui_ImplAndroid_HandleInputEvent(AInputEvent *input_event, ImVec2 screen_scale) {
ImGuiIO &io = ImGui::GetIO();
int32_t event_type = AInputEvent_getType(input_event);
switch (event_type) {
case AINPUT_EVENT_TYPE_KEY: {
int32_t event_key_code = AKeyEvent_getKeyCode(input_event);
int32_t event_action = AKeyEvent_getAction(input_event);
int32_t event_meta_state = AKeyEvent_getMetaState(input_event);
io.KeyCtrl = ((event_meta_state & AMETA_CTRL_ON) != 0);
io.KeyShift = ((event_meta_state & AMETA_SHIFT_ON) != 0);
io.KeyAlt = ((event_meta_state & AMETA_ALT_ON) != 0);
switch (event_action) {
// FIXME: AKEY_EVENT_ACTION_DOWN and AKEY_EVENT_ACTION_UP occur at once as soon as a touch pointer
// goes up from a key. We use a simple key event queue/ and process one event per key per frame in
// ImGui_ImplAndroid_NewFrame()...or consider using IO queue, if suitable: https://github.com/ocornut/imgui/issues/2787
case AKEY_EVENT_ACTION_DOWN:
case AKEY_EVENT_ACTION_UP:
g_KeyEventQueues[event_key_code].push(event_action);
break;
default:
break;
}
break;
}
case AINPUT_EVENT_TYPE_MOTION: {
int32_t event_action = AMotionEvent_getAction(input_event);
int32_t event_pointer_index = (event_action & AMOTION_EVENT_ACTION_POINTER_INDEX_MASK) >> AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT;
event_action &= AMOTION_EVENT_ACTION_MASK;
switch (event_action) {
case AMOTION_EVENT_ACTION_DOWN:
case AMOTION_EVENT_ACTION_UP:
// Physical mouse buttons (and probably other physical devices) also invoke the actions AMOTION_EVENT_ACTION_DOWN/_UP,
// but we have to process them separately to identify the actual button pressed. This is done below via
// AMOTION_EVENT_ACTION_BUTTON_PRESS/_RELEASE. Here, we only process "FINGER" input (and "UNKNOWN", as a fallback).
if ((AMotionEvent_getToolType(input_event, event_pointer_index) == AMOTION_EVENT_TOOL_TYPE_FINGER) || (AMotionEvent_getToolType(input_event, event_pointer_index) == AMOTION_EVENT_TOOL_TYPE_UNKNOWN)) {
io.MouseDown[0] = (event_action == AMOTION_EVENT_ACTION_DOWN);
ImVec2 pos(AMotionEvent_getRawX(input_event, event_pointer_index), AMotionEvent_getRawY(input_event, event_pointer_index));
io.MousePos = ImVec2(screen_scale.x > 0 ? pos.x / screen_scale.x : pos.x, screen_scale.y > 0 ? pos.y / screen_scale.y : pos.y);
}
break;
case AMOTION_EVENT_ACTION_BUTTON_PRESS:
case AMOTION_EVENT_ACTION_BUTTON_RELEASE: {
int32_t button_state = AMotionEvent_getButtonState(input_event);
io.MouseDown[0] = ((button_state & AMOTION_EVENT_BUTTON_PRIMARY) != 0);
io.MouseDown[1] = ((button_state & AMOTION_EVENT_BUTTON_SECONDARY) != 0);
io.MouseDown[2] = ((button_state & AMOTION_EVENT_BUTTON_TERTIARY) != 0);
}
break;
case AMOTION_EVENT_ACTION_HOVER_MOVE: // Hovering: Tool moves while NOT pressed (such as a physical mouse)
case AMOTION_EVENT_ACTION_MOVE: { // Touch pointer moves while DOWN
ImVec2 pos(AMotionEvent_getRawX(input_event, event_pointer_index), AMotionEvent_getRawY(input_event, event_pointer_index));
io.MousePos = ImVec2(screen_scale.x > 0 ? pos.x / screen_scale.x : pos.x, screen_scale.y > 0 ? pos.y / screen_scale.y : pos.y);
break;
}
case AMOTION_EVENT_ACTION_SCROLL:
io.MouseWheel = AMotionEvent_getAxisValue(input_event,AMOTION_EVENT_AXIS_VSCROLL,event_pointer_index);
io.MouseWheelH = AMotionEvent_getAxisValue(input_event,AMOTION_EVENT_AXIS_HSCROLL,event_pointer_index);
break;
default:
break;
}
}
return 1;
default:
break;
}
return 0;
}
int32_t ImGui_ImplAndroid_HandleInputEvent(AInputEvent* input_event)
{
ImGuiIO& io = ImGui::GetIO();
int32_t event_type = AInputEvent_getType(input_event);
switch (event_type)
{
case AINPUT_EVENT_TYPE_KEY:
{
int32_t event_key_code = AKeyEvent_getKeyCode(input_event);
int32_t event_scan_code = AKeyEvent_getScanCode(input_event);
int32_t event_action = AKeyEvent_getAction(input_event);
int32_t event_meta_state = AKeyEvent_getMetaState(input_event);
io.AddKeyEvent(ImGuiKey_ModCtrl, (event_meta_state & AMETA_CTRL_ON) != 0);
io.AddKeyEvent(ImGuiKey_ModShift, (event_meta_state & AMETA_SHIFT_ON) != 0);
io.AddKeyEvent(ImGuiKey_ModAlt, (event_meta_state & AMETA_ALT_ON) != 0);
io.AddKeyEvent(ImGuiKey_ModSuper, (event_meta_state & AMETA_META_ON) != 0);
switch (event_action)
{
// FIXME: AKEY_EVENT_ACTION_DOWN and AKEY_EVENT_ACTION_UP occur at once as soon as a touch pointer
// goes up from a key. We use a simple key event queue/ and process one event per key per frame in
// ImGui_ImplAndroid_NewFrame()...or consider using IO queue, if suitable: https://github.com/ocornut/imgui/issues/2787
case AKEY_EVENT_ACTION_DOWN:
case AKEY_EVENT_ACTION_UP:
{
ImGuiKey key = ImGui_ImplAndroid_KeyCodeToImGuiKey(event_key_code);
if (key != ImGuiKey_None && (event_action == AKEY_EVENT_ACTION_DOWN || event_action == AKEY_EVENT_ACTION_UP))
{
io.AddKeyEvent(key, event_action == AKEY_EVENT_ACTION_DOWN);
io.SetKeyEventNativeData(key, event_key_code, event_scan_code);
}
break;
}
default:
break;
}
break;
}
case AINPUT_EVENT_TYPE_MOTION:
{
int32_t event_action = AMotionEvent_getAction(input_event);
int32_t event_pointer_index = (event_action & AMOTION_EVENT_ACTION_POINTER_INDEX_MASK) >> AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT;
event_action &= AMOTION_EVENT_ACTION_MASK;
switch (event_action)
{
case AMOTION_EVENT_ACTION_DOWN:
case AMOTION_EVENT_ACTION_UP:
// Physical mouse buttons (and probably other physical devices) also invoke the actions AMOTION_EVENT_ACTION_DOWN/_UP,
// but we have to process them separately to identify the actual button pressed. This is done below via
// AMOTION_EVENT_ACTION_BUTTON_PRESS/_RELEASE. Here, we only process "FINGER" input (and "UNKNOWN", as a fallback).
if((AMotionEvent_getToolType(input_event, event_pointer_index) == AMOTION_EVENT_TOOL_TYPE_FINGER)
|| (AMotionEvent_getToolType(input_event, event_pointer_index) == AMOTION_EVENT_TOOL_TYPE_UNKNOWN))
{
io.AddMousePosEvent(AMotionEvent_getX(input_event, event_pointer_index), AMotionEvent_getY(input_event, event_pointer_index));
io.AddMouseButtonEvent(0, event_action == AMOTION_EVENT_ACTION_DOWN);
}
break;
case AMOTION_EVENT_ACTION_BUTTON_PRESS:
case AMOTION_EVENT_ACTION_BUTTON_RELEASE:
{
int32_t button_state = AMotionEvent_getButtonState(input_event);
io.AddMouseButtonEvent(0, (button_state & AMOTION_EVENT_BUTTON_PRIMARY) != 0);
io.AddMouseButtonEvent(1, (button_state & AMOTION_EVENT_BUTTON_SECONDARY) != 0);
io.AddMouseButtonEvent(2, (button_state & AMOTION_EVENT_BUTTON_TERTIARY) != 0);
}
break;
case AMOTION_EVENT_ACTION_HOVER_MOVE: // Hovering: Tool moves while NOT pressed (such as a physical mouse)
case AMOTION_EVENT_ACTION_MOVE: // Touch pointer moves while DOWN
io.AddMousePosEvent(AMotionEvent_getX(input_event, event_pointer_index), AMotionEvent_getY(input_event, event_pointer_index));
break;
case AMOTION_EVENT_ACTION_SCROLL:
io.AddMouseWheelEvent(AMotionEvent_getAxisValue(input_event, AMOTION_EVENT_AXIS_HSCROLL, event_pointer_index), AMotionEvent_getAxisValue(input_event, AMOTION_EVENT_AXIS_VSCROLL, event_pointer_index));
break;
default:
break;
}
}
return 1;
default:
break;
}
return 0;
}
bool ImGui_ImplAndroid_Init(ANativeWindow* window)
{
g_Window = window;
g_Time = 0.0;
// Setup backend capabilities flags
ImGuiIO& io = ImGui::GetIO();
io.BackendPlatformName = "imgui_impl_android";
return true;
}
void ImGui_ImplAndroid_Shutdown()
{
}
void ImGui_ImplAndroid_NewFrame(int32_t window_width,int32_t window_height)
{
ImGuiIO& io = ImGui::GetIO();
// Setup display size (every frame to accommodate for window resizing)
//int32_t window_width = ANativeWindow_getWidth(g_Window);
//int32_t window_height = ANativeWindow_getHeight(g_Window);
int display_width = window_width;
int display_height = window_height;
io.DisplaySize = ImVec2((float)window_width, (float)window_height);
if (window_width > 0 && window_height > 0)
io.DisplayFramebufferScale = ImVec2((float)display_width / window_width, (float)display_height / window_height);
// Setup time step
struct timespec current_timespec;
clock_gettime(CLOCK_MONOTONIC, &current_timespec);
double current_time = (double)(current_timespec.tv_sec) + (current_timespec.tv_nsec / 1000000000.0);
io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f / 60.0f);
g_Time = current_time;
}
+29
View File
@@ -0,0 +1,29 @@
// dear imgui: Platform Binding for Android native app
// This needs to be used along with the OpenGL 3 Renderer (imgui_impl_opengl3)
// Implemented features:
// [X] Platform: Keyboard support. Since 1.87 we are using the io.AddKeyEvent() function. Pass ImGuiKey values to all key functions e.g. ImGui::IsKeyPressed(ImGuiKey_Space). [Legacy AKEYCODE_* values will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set]
// Missing features:
// [ ] Platform: Clipboard support.
// [ ] Platform: Gamepad support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'.
// [ ] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. FIXME: Check if this is even possible with Android.
// Important:
// - Consider using SDL or GLFW backend on Android, which will be more full-featured than this.
// - FIXME: On-screen keyboard currently needs to be enabled by the application (see examples/ and issue #3446)
// - FIXME: Unicode character inputs needs to be passed by Dear ImGui by the application (see examples/ and issue #3446)
// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.
// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need.
// If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp.
// Read online: https://github.com/ocornut/imgui/tree/master/docs
#pragma once
struct ANativeWindow;
struct AInputEvent;
IMGUI_IMPL_API bool ImGui_ImplAndroid_Init(ANativeWindow* window = NULL);
IMGUI_IMPL_API int32_t ImGui_ImplAndroid_HandleInputEvent(AInputEvent* input_event);
IMGUI_IMPL_API int32_t ImGui_ImplAndroid_HandleInputEvent(AInputEvent *input_event, ImVec2 screen_scale);
IMGUI_IMPL_API void ImGui_ImplAndroid_Shutdown();
IMGUI_IMPL_API void ImGui_ImplAndroid_NewFrame(int32_t window_width,int32_t window_height);
+811
View File
@@ -0,0 +1,811 @@
// dear imgui: Renderer Backend for modern OpenGL with shaders / programmatic pipeline
// - Desktop GL: 2.x 3.x 4.x
// - Embedded GL: ES 2.0 (WebGL 1.0), ES 3.0 (WebGL 2.0)
// This needs to be used along with a Platform Backend (e.g. GLFW, SDL, Win32, custom..)
// Implemented features:
// [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID!
// [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices.
// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.
// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need.
// If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp.
// Read online: https://github.com/ocornut/imgui/tree/master/docs
// CHANGELOG
// (minor and older changes stripped away, please see git history for details)
// 2021-12-15: OpenGL: Using buffer orphaning + glBufferSubData(), seems to fix leaks with multi-viewports with some Intel HD drivers.
// 2021-08-23: OpenGL: Fixed ES 3.0 shader ("#version 300 es") use normal precision floats to avoid wobbly rendering at HD resolutions.
// 2021-08-19: OpenGL: Embed and use our own minimal GL loader (imgui_impl_opengl3_loader.h), removing requirement and support for third-party loader.
// 2021-06-29: Reorganized backend to pull data from a single structure to facilitate usage with multiple-contexts (all g_XXXX access changed to bd->XXXX).
// 2021-06-25: OpenGL: Use OES_vertex_array extension on Emscripten + backup/restore current state.
// 2021-06-21: OpenGL: Destroy individual vertex/fragment shader objects right after they are linked into the main shader.
// 2021-05-24: OpenGL: Access GL_CLIP_ORIGIN when "GL_ARB_clip_control" extension is detected, inside of just OpenGL 4.5 version.
// 2021-05-19: OpenGL: Replaced direct access to ImDrawCmd::TextureId with a call to ImDrawCmd::GetTexID(). (will become a requirement)
// 2021-04-06: OpenGL: Don't try to read GL_CLIP_ORIGIN unless we're OpenGL 4.5 or greater.
// 2021-02-18: OpenGL: Change blending equation to preserve alpha in output buffer.
// 2021-01-03: OpenGL: Backup, setup and restore GL_STENCIL_TEST state.
// 2020-10-23: OpenGL: Backup, setup and restore GL_PRIMITIVE_RESTART state.
// 2020-10-15: OpenGL: Use glGetString(GL_VERSION) instead of glGetIntegerv(GL_MAJOR_VERSION, ...) when the later returns zero (e.g. Desktop GL 2.x)
// 2020-09-17: OpenGL: Fix to avoid compiling/calling glBindSampler() on ES or pre 3.3 context which have the defines set by a loader.
// 2020-07-10: OpenGL: Added support for glad2 OpenGL loader.
// 2020-05-08: OpenGL: Made default GLSL version 150 (instead of 130) on OSX.
// 2020-04-21: OpenGL: Fixed handling of glClipControl(GL_UPPER_LEFT) by inverting projection matrix.
// 2020-04-12: OpenGL: Fixed context version check mistakenly testing for 4.0+ instead of 3.2+ to enable ImGuiBackendFlags_RendererHasVtxOffset.
// 2020-03-24: OpenGL: Added support for glbinding 2.x OpenGL loader.
// 2020-01-07: OpenGL: Added support for glbinding 3.x OpenGL loader.
// 2019-10-25: OpenGL: Using a combination of GL define and runtime GL version to decide whether to use glDrawElementsBaseVertex(). Fix building with pre-3.2 GL loaders.
// 2019-09-22: OpenGL: Detect default GL loader using __has_include compiler facility.
// 2019-09-16: OpenGL: Tweak initialization code to allow application calling ImGui_ImplOpenGL3_CreateFontsTexture() before the first NewFrame() call.
// 2019-05-29: OpenGL: Desktop GL only: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag.
// 2019-04-30: OpenGL: Added support for special ImDrawCallback_ResetRenderState callback to reset render state.
// 2019-03-29: OpenGL: Not calling glBindBuffer more than necessary in the render loop.
// 2019-03-15: OpenGL: Added a GL call + comments in ImGui_ImplOpenGL3_Init() to detect uninitialized GL function loaders early.
// 2019-03-03: OpenGL: Fix support for ES 2.0 (WebGL 1.0).
// 2019-02-20: OpenGL: Fix for OSX not supporting OpenGL 4.5, we don't try to read GL_CLIP_ORIGIN even if defined by the headers/loader.
// 2019-02-11: OpenGL: Projecting clipping rectangles correctly using draw_data->FramebufferScale to allow multi-viewports for retina display.
// 2019-02-01: OpenGL: Using GLSL 410 shaders for any version over 410 (e.g. 430, 450).
// 2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window.
// 2018-11-13: OpenGL: Support for GL 4.5's glClipControl(GL_UPPER_LEFT) / GL_CLIP_ORIGIN.
// 2018-08-29: OpenGL: Added support for more OpenGL loaders: glew and glad, with comments indicative that any loader can be used.
// 2018-08-09: OpenGL: Default to OpenGL ES 3 on iOS and Android. GLSL version default to "#version 300 ES".
// 2018-07-30: OpenGL: Support for GLSL 300 ES and 410 core. Fixes for Emscripten compilation.
// 2018-07-10: OpenGL: Support for more GLSL versions (based on the GLSL version string). Added error output when shaders fail to compile/link.
// 2018-06-08: Misc: Extracted imgui_impl_opengl3.cpp/.h away from the old combined GLFW/SDL+OpenGL3 examples.
// 2018-06-08: OpenGL: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle.
// 2018-05-25: OpenGL: Removed unnecessary backup/restore of GL_ELEMENT_ARRAY_BUFFER_BINDING since this is part of the VAO state.
// 2018-05-14: OpenGL: Making the call to glBindSampler() optional so 3.2 context won't fail if the function is a NULL pointer.
// 2018-03-06: OpenGL: Added const char* glsl_version parameter to ImGui_ImplOpenGL3_Init() so user can override the GLSL version e.g. "#version 150".
// 2018-02-23: OpenGL: Create the VAO in the render function so the setup can more easily be used with multiple shared GL context.
// 2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplSdlGL3_RenderDrawData() in the .h file so you can call it yourself.
// 2018-01-07: OpenGL: Changed GLSL shader version from 330 to 150.
// 2017-09-01: OpenGL: Save and restore current bound sampler. Save and restore current polygon mode.
// 2017-05-01: OpenGL: Fixed save and restore of current blend func state.
// 2017-05-01: OpenGL: Fixed save and restore of current GL_ACTIVE_TEXTURE.
// 2016-09-05: OpenGL: Fixed save and restore of current scissor rectangle.
// 2016-07-29: OpenGL: Explicitly setting GL_UNPACK_ROW_LENGTH to reduce issues because SDL changes it. (#752)
//----------------------------------------
// OpenGL GLSL GLSL
// version version string
//----------------------------------------
// 2.0 110 "#version 110"
// 2.1 120 "#version 120"
// 3.0 130 "#version 130"
// 3.1 140 "#version 140"
// 3.2 150 "#version 150"
// 3.3 330 "#version 330 core"
// 4.0 400 "#version 400 core"
// 4.1 410 "#version 410 core"
// 4.2 420 "#version 410 core"
// 4.3 430 "#version 430 core"
// ES 2.0 100 "#version 100" = WebGL 1.0
// ES 3.0 300 "#version 300 es" = WebGL 2.0
//----------------------------------------
#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
#define _CRT_SECURE_NO_WARNINGS
#endif
#include "imgui.h"
#include "imgui_impl_opengl3.h"
#include <stdio.h>
#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
#include <stddef.h> // intptr_t
#else
#include <stdint.h> // intptr_t
#endif
// Clang warnings with -Weverything
#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wold-style-cast" // warning: use of old-style cast
#pragma clang diagnostic ignored "-Wsign-conversion" // warning: implicit conversion changes signedness
#if __has_warning("-Wzero-as-null-pointer-constant")
#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
#endif
#endif
// GL includes
#if defined(IMGUI_IMPL_OPENGL_ES2)
#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV))
#include <OpenGLES/ES2/gl.h> // Use GL ES 2
#else
#include <GLES2/gl2.h> // Use GL ES 2
#endif
#if defined(__EMSCRIPTEN__)
#ifndef GL_GLEXT_PROTOTYPES
#define GL_GLEXT_PROTOTYPES
#endif
#include <GLES2/gl2ext.h>
#endif
#elif defined(IMGUI_IMPL_OPENGL_ES3)
#if defined(__APPLE__)
#include <TargetConditionals.h>
#endif
#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV))
#include <OpenGLES/ES3/gl.h> // Use GL ES 3
#else
#include <GLES3/gl3.h> // Use GL ES 3
#endif
#elif !defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM)
// Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers.
// Helper libraries are often used for this purpose! Here we are using our own minimal custom loader based on gl3w.
// In the rest of your app/engine, you can use another loader of your choice (gl3w, glew, glad, glbinding, glext, glLoadGen, etc.).
// If you happen to be developing a new feature for this backend (imgui_impl_opengl3.cpp):
// - You may need to regenerate imgui_impl_opengl3_loader.h to add new symbols. See https://github.com/dearimgui/gl3w_stripped
// - You can temporarily use an unstripped version. See https://github.com/dearimgui/gl3w_stripped/releases
// Changes to this backend using new APIs should be accompanied by a regenerated stripped loader version.
#define IMGL3W_IMPL
#include "imgui_impl_opengl3_loader.h"
#endif
// Vertex arrays are not supported on ES2/WebGL1 unless Emscripten which uses an extension
#ifndef IMGUI_IMPL_OPENGL_ES2
#define IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY
#elif defined(__EMSCRIPTEN__)
#define IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY
#define glBindVertexArray glBindVertexArrayOES
#define glGenVertexArrays glGenVertexArraysOES
#define glDeleteVertexArrays glDeleteVertexArraysOES
#define GL_VERTEX_ARRAY_BINDING GL_VERTEX_ARRAY_BINDING_OES
#endif
// Desktop GL 2.0+ has glPolygonMode() which GL ES and WebGL don't have.
#ifdef GL_POLYGON_MODE
#define IMGUI_IMPL_HAS_POLYGON_MODE
#endif
// Desktop GL 3.2+ has glDrawElementsBaseVertex() which GL ES and WebGL don't have.
#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) && defined(GL_VERSION_3_2)
#define IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET
#endif
// Desktop GL 3.3+ has glBindSampler()
#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) && defined(GL_VERSION_3_3)
#define IMGUI_IMPL_OPENGL_MAY_HAVE_BIND_SAMPLER
#endif
// Desktop GL 3.1+ has GL_PRIMITIVE_RESTART state
#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) && defined(GL_VERSION_3_1)
#define IMGUI_IMPL_OPENGL_MAY_HAVE_PRIMITIVE_RESTART
#endif
// Desktop GL use extension detection
#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3)
#define IMGUI_IMPL_OPENGL_MAY_HAVE_EXTENSIONS
#endif
// OpenGL Data
struct ImGui_ImplOpenGL3_Data
{
GLuint GlVersion; // Extracted at runtime using GL_MAJOR_VERSION, GL_MINOR_VERSION queries (e.g. 320 for GL 3.2)
char GlslVersionString[32]; // Specified by user or detected based on compile time GL settings.
GLuint FontTexture;
GLuint ShaderHandle;
GLint AttribLocationTex; // Uniforms location
GLint AttribLocationProjMtx;
GLuint AttribLocationVtxPos; // Vertex attributes location
GLuint AttribLocationVtxUV;
GLuint AttribLocationVtxColor;
unsigned int VboHandle, ElementsHandle;
GLsizeiptr VertexBufferSize;
GLsizeiptr IndexBufferSize;
bool HasClipOrigin;
ImGui_ImplOpenGL3_Data() { memset(this, 0, sizeof(*this)); }
};
// Backend data stored in io.BackendRendererUserData to allow support for multiple Dear ImGui contexts
// It is STRONGLY preferred that you use docking branch with multi-viewports (== single Dear ImGui context + multiple windows) instead of multiple Dear ImGui contexts.
static ImGui_ImplOpenGL3_Data* ImGui_ImplOpenGL3_GetBackendData()
{
return ImGui::GetCurrentContext() ? (ImGui_ImplOpenGL3_Data*)ImGui::GetIO().BackendRendererUserData : NULL;
}
// Functions
bool ImGui_ImplOpenGL3_Init(const char* glsl_version)
{
ImGuiIO& io = ImGui::GetIO();
IM_ASSERT(io.BackendRendererUserData == NULL && "Already initialized a renderer backend!");
// Initialize our loader
#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) && !defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM)
if (imgl3wInit() != 0)
{
fprintf(stderr, "Failed to initialize OpenGL loader!\n");
return false;
}
#endif
// Setup backend capabilities flags
ImGui_ImplOpenGL3_Data* bd = IM_NEW(ImGui_ImplOpenGL3_Data)();
io.BackendRendererUserData = (void*)bd;
io.BackendRendererName = "imgui_impl_opengl3";
// Query for GL version (e.g. 320 for GL 3.2)
#if !defined(IMGUI_IMPL_OPENGL_ES2)
GLint major = 0;
GLint minor = 0;
glGetIntegerv(GL_MAJOR_VERSION, &major);
glGetIntegerv(GL_MINOR_VERSION, &minor);
if (major == 0 && minor == 0)
{
// Query GL_VERSION in desktop GL 2.x, the string will start with "<major>.<minor>"
const char* gl_version = (const char*)glGetString(GL_VERSION);
sscanf(gl_version, "%d.%d", &major, &minor);
}
bd->GlVersion = (GLuint)(major * 100 + minor * 10);
#else
bd->GlVersion = 200; // GLES 2
#endif
#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET
if (bd->GlVersion >= 320)
io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes.
#endif
// Store GLSL version string so we can refer to it later in case we recreate shaders.
// Note: GLSL version is NOT the same as GL version. Leave this to NULL if unsure.
if (glsl_version == NULL)
{
#if defined(IMGUI_IMPL_OPENGL_ES2)
glsl_version = "#version 100";
#elif defined(IMGUI_IMPL_OPENGL_ES3)
glsl_version = "#version 300 es";
#elif defined(__APPLE__)
glsl_version = "#version 150";
#else
glsl_version = "#version 130";
#endif
}
IM_ASSERT((int)strlen(glsl_version) + 2 < IM_ARRAYSIZE(bd->GlslVersionString));
strcpy(bd->GlslVersionString, glsl_version);
strcat(bd->GlslVersionString, "\n");
// Make an arbitrary GL call (we don't actually need the result)
// IF YOU GET A CRASH HERE: it probably means the OpenGL function loader didn't do its job. Let us know!
GLint current_texture;
glGetIntegerv(GL_TEXTURE_BINDING_2D, &current_texture);
// Detect extensions we support
bd->HasClipOrigin = (bd->GlVersion >= 450);
#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_EXTENSIONS
GLint num_extensions = 0;
glGetIntegerv(GL_NUM_EXTENSIONS, &num_extensions);
for (GLint i = 0; i < num_extensions; i++)
{
const char* extension = (const char*)glGetStringi(GL_EXTENSIONS, i);
if (extension != NULL && strcmp(extension, "GL_ARB_clip_control") == 0)
bd->HasClipOrigin = true;
}
#endif
return true;
}
void ImGui_ImplOpenGL3_Shutdown()
{
ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData();
IM_ASSERT(bd != NULL && "No renderer backend to shutdown, or already shutdown?");
ImGuiIO& io = ImGui::GetIO();
ImGui_ImplOpenGL3_DestroyDeviceObjects();
io.BackendRendererName = NULL;
io.BackendRendererUserData = NULL;
IM_DELETE(bd);
}
void ImGui_ImplOpenGL3_NewFrame()
{
ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData();
IM_ASSERT(bd != NULL && "Did you call ImGui_ImplOpenGL3_Init()?");
if (!bd->ShaderHandle)
ImGui_ImplOpenGL3_CreateDeviceObjects();
}
static void ImGui_ImplOpenGL3_SetupRenderState(ImDrawData* draw_data, int fb_width, int fb_height, GLuint vertex_array_object)
{
ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData();
// Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill
glEnable(GL_BLEND);
glBlendEquation(GL_FUNC_ADD);
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
glDisable(GL_STENCIL_TEST);
glEnable(GL_SCISSOR_TEST);
#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_PRIMITIVE_RESTART
if (bd->GlVersion >= 310)
glDisable(GL_PRIMITIVE_RESTART);
#endif
#ifdef IMGUI_IMPL_HAS_POLYGON_MODE
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
#endif
// Support for GL 4.5 rarely used glClipControl(GL_UPPER_LEFT)
#if defined(GL_CLIP_ORIGIN)
bool clip_origin_lower_left = true;
if (bd->HasClipOrigin)
{
GLenum current_clip_origin = 0; glGetIntegerv(GL_CLIP_ORIGIN, (GLint*)&current_clip_origin);
if (current_clip_origin == GL_UPPER_LEFT)
clip_origin_lower_left = false;
}
#endif
// Setup viewport, orthographic projection matrix
// Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayPos is (0,0) for single viewport apps.
glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height);
float L = draw_data->DisplayPos.x;
float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x;
float T = draw_data->DisplayPos.y;
float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y;
#if defined(GL_CLIP_ORIGIN)
if (!clip_origin_lower_left) { float tmp = T; T = B; B = tmp; } // Swap top and bottom if origin is upper left
#endif
const float ortho_projection[4][4] =
{
{ 2.0f/(R-L), 0.0f, 0.0f, 0.0f },
{ 0.0f, 2.0f/(T-B), 0.0f, 0.0f },
{ 0.0f, 0.0f, -1.0f, 0.0f },
{ (R+L)/(L-R), (T+B)/(B-T), 0.0f, 1.0f },
};
glUseProgram(bd->ShaderHandle);
glUniform1i(bd->AttribLocationTex, 0);
glUniformMatrix4fv(bd->AttribLocationProjMtx, 1, GL_FALSE, &ortho_projection[0][0]);
#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_BIND_SAMPLER
if (bd->GlVersion >= 330)
glBindSampler(0, 0); // We use combined texture/sampler state. Applications using GL 3.3 may set that otherwise.
#endif
(void)vertex_array_object;
#ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY
glBindVertexArray(vertex_array_object);
#endif
// Bind vertex/index buffers and setup attributes for ImDrawVert
glBindBuffer(GL_ARRAY_BUFFER, bd->VboHandle);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bd->ElementsHandle);
glEnableVertexAttribArray(bd->AttribLocationVtxPos);
glEnableVertexAttribArray(bd->AttribLocationVtxUV);
glEnableVertexAttribArray(bd->AttribLocationVtxColor);
glVertexAttribPointer(bd->AttribLocationVtxPos, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, pos));
glVertexAttribPointer(bd->AttribLocationVtxUV, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, uv));
glVertexAttribPointer(bd->AttribLocationVtxColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, col));
}
// OpenGL3 Render function.
// Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly.
// This is in order to be able to run within an OpenGL engine that doesn't do so.
void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data)
{
// Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates)
int fb_width = (int)(draw_data->DisplaySize.x * draw_data->FramebufferScale.x);
int fb_height = (int)(draw_data->DisplaySize.y * draw_data->FramebufferScale.y);
if (fb_width <= 0 || fb_height <= 0)
return;
ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData();
// Backup GL state
GLenum last_active_texture; glGetIntegerv(GL_ACTIVE_TEXTURE, (GLint*)&last_active_texture);
glActiveTexture(GL_TEXTURE0);
GLuint last_program; glGetIntegerv(GL_CURRENT_PROGRAM, (GLint*)&last_program);
GLuint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, (GLint*)&last_texture);
#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_BIND_SAMPLER
GLuint last_sampler; if (bd->GlVersion >= 330) { glGetIntegerv(GL_SAMPLER_BINDING, (GLint*)&last_sampler); } else { last_sampler = 0; }
#endif
GLuint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, (GLint*)&last_array_buffer);
#ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY
GLuint last_vertex_array_object; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, (GLint*)&last_vertex_array_object);
#endif
#ifdef IMGUI_IMPL_HAS_POLYGON_MODE
GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode);
#endif
GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport);
GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box);
GLenum last_blend_src_rgb; glGetIntegerv(GL_BLEND_SRC_RGB, (GLint*)&last_blend_src_rgb);
GLenum last_blend_dst_rgb; glGetIntegerv(GL_BLEND_DST_RGB, (GLint*)&last_blend_dst_rgb);
GLenum last_blend_src_alpha; glGetIntegerv(GL_BLEND_SRC_ALPHA, (GLint*)&last_blend_src_alpha);
GLenum last_blend_dst_alpha; glGetIntegerv(GL_BLEND_DST_ALPHA, (GLint*)&last_blend_dst_alpha);
GLenum last_blend_equation_rgb; glGetIntegerv(GL_BLEND_EQUATION_RGB, (GLint*)&last_blend_equation_rgb);
GLenum last_blend_equation_alpha; glGetIntegerv(GL_BLEND_EQUATION_ALPHA, (GLint*)&last_blend_equation_alpha);
GLboolean last_enable_blend = glIsEnabled(GL_BLEND);
GLboolean last_enable_cull_face = glIsEnabled(GL_CULL_FACE);
GLboolean last_enable_depth_test = glIsEnabled(GL_DEPTH_TEST);
GLboolean last_enable_stencil_test = glIsEnabled(GL_STENCIL_TEST);
GLboolean last_enable_scissor_test = glIsEnabled(GL_SCISSOR_TEST);
#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_PRIMITIVE_RESTART
GLboolean last_enable_primitive_restart = (bd->GlVersion >= 310) ? glIsEnabled(GL_PRIMITIVE_RESTART) : GL_FALSE;
#endif
// Setup desired GL state
// Recreate the VAO every time (this is to easily allow multiple GL contexts to be rendered to. VAO are not shared among GL contexts)
// The renderer would actually work without any VAO bound, but then our VertexAttrib calls would overwrite the default one currently bound.
GLuint vertex_array_object = 0;
#ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY
glGenVertexArrays(1, &vertex_array_object);
#endif
ImGui_ImplOpenGL3_SetupRenderState(draw_data, fb_width, fb_height, vertex_array_object);
// Will project scissor/clipping rectangles into framebuffer space
ImVec2 clip_off = draw_data->DisplayPos; // (0,0) unless using multi-viewports
ImVec2 clip_scale = draw_data->FramebufferScale; // (1,1) unless using retina display which are often (2,2)
// Render command lists
for (int n = 0; n < draw_data->CmdListsCount; n++)
{
const ImDrawList* cmd_list = draw_data->CmdLists[n];
// Upload vertex/index buffers
GLsizeiptr vtx_buffer_size = (GLsizeiptr)cmd_list->VtxBuffer.Size * (int)sizeof(ImDrawVert);
GLsizeiptr idx_buffer_size = (GLsizeiptr)cmd_list->IdxBuffer.Size * (int)sizeof(ImDrawIdx);
if (bd->VertexBufferSize < vtx_buffer_size)
{
bd->VertexBufferSize = vtx_buffer_size;
glBufferData(GL_ARRAY_BUFFER, bd->VertexBufferSize, NULL, GL_STREAM_DRAW);
}
if (bd->IndexBufferSize < idx_buffer_size)
{
bd->IndexBufferSize = idx_buffer_size;
glBufferData(GL_ELEMENT_ARRAY_BUFFER, bd->IndexBufferSize, NULL, GL_STREAM_DRAW);
}
glBufferSubData(GL_ARRAY_BUFFER, 0, vtx_buffer_size, (const GLvoid*)cmd_list->VtxBuffer.Data);
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, idx_buffer_size, (const GLvoid*)cmd_list->IdxBuffer.Data);
for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
{
const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
if (pcmd->UserCallback != NULL)
{
// User callback, registered via ImDrawList::AddCallback()
// (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.)
if (pcmd->UserCallback == ImDrawCallback_ResetRenderState)
ImGui_ImplOpenGL3_SetupRenderState(draw_data, fb_width, fb_height, vertex_array_object);
else
pcmd->UserCallback(cmd_list, pcmd);
}
else
{
// Project scissor/clipping rectangles into framebuffer space
ImVec2 clip_min((pcmd->ClipRect.x - clip_off.x) * clip_scale.x, (pcmd->ClipRect.y - clip_off.y) * clip_scale.y);
ImVec2 clip_max((pcmd->ClipRect.z - clip_off.x) * clip_scale.x, (pcmd->ClipRect.w - clip_off.y) * clip_scale.y);
if (clip_max.x <= clip_min.x || clip_max.y <= clip_min.y)
continue;
// Apply scissor/clipping rectangle (Y is inverted in OpenGL)
glScissor((int)clip_min.x, (int)((float)fb_height - clip_max.y), (int)(clip_max.x - clip_min.x), (int)(clip_max.y - clip_min.y));
// Bind texture, Draw
glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->GetTexID());
#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET
if (bd->GlVersion >= 320)
glDrawElementsBaseVertex(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)(intptr_t)(pcmd->IdxOffset * sizeof(ImDrawIdx)), (GLint)pcmd->VtxOffset);
else
#endif
glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)(intptr_t)(pcmd->IdxOffset * sizeof(ImDrawIdx)));
}
}
}
// Destroy the temporary VAO
#ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY
glDeleteVertexArrays(1, &vertex_array_object);
#endif
// Restore modified GL state
glUseProgram(last_program);
glBindTexture(GL_TEXTURE_2D, last_texture);
#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_BIND_SAMPLER
if (bd->GlVersion >= 330)
glBindSampler(0, last_sampler);
#endif
glActiveTexture(last_active_texture);
#ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY
glBindVertexArray(last_vertex_array_object);
#endif
glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer);
glBlendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha);
glBlendFuncSeparate(last_blend_src_rgb, last_blend_dst_rgb, last_blend_src_alpha, last_blend_dst_alpha);
if (last_enable_blend) glEnable(GL_BLEND); else glDisable(GL_BLEND);
if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE);
if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST);
if (last_enable_stencil_test) glEnable(GL_STENCIL_TEST); else glDisable(GL_STENCIL_TEST);
if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST);
#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_PRIMITIVE_RESTART
if (bd->GlVersion >= 310) { if (last_enable_primitive_restart) glEnable(GL_PRIMITIVE_RESTART); else glDisable(GL_PRIMITIVE_RESTART); }
#endif
#ifdef IMGUI_IMPL_HAS_POLYGON_MODE
glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]);
#endif
glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]);
glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]);
(void)bd; // Not all compilation paths use this
}
bool ImGui_ImplOpenGL3_CreateFontsTexture()
{
ImGuiIO& io = ImGui::GetIO();
ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData();
// Build texture atlas
unsigned char* pixels;
int width, height;
io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); // Load as RGBA 32-bit (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory.
// Upload texture to graphics system
GLint last_texture;
glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
glGenTextures(1, &bd->FontTexture);
glBindTexture(GL_TEXTURE_2D, bd->FontTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
#ifdef GL_UNPACK_ROW_LENGTH // Not on WebGL/ES
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
#endif
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
// Store our identifier
io.Fonts->SetTexID((ImTextureID)(intptr_t)bd->FontTexture);
// Restore state
glBindTexture(GL_TEXTURE_2D, last_texture);
return true;
}
void ImGui_ImplOpenGL3_DestroyFontsTexture()
{
ImGuiIO& io = ImGui::GetIO();
ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData();
if (bd->FontTexture)
{
glDeleteTextures(1, &bd->FontTexture);
io.Fonts->SetTexID(0);
bd->FontTexture = 0;
}
}
// If you get an error please report on github. You may try different GL context version or GLSL version. See GL<>GLSL version table at the top of this file.
static bool CheckShader(GLuint handle, const char* desc)
{
ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData();
GLint status = 0, log_length = 0;
glGetShaderiv(handle, GL_COMPILE_STATUS, &status);
glGetShaderiv(handle, GL_INFO_LOG_LENGTH, &log_length);
if ((GLboolean)status == GL_FALSE)
fprintf(stderr, "ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to compile %s! With GLSL: %s\n", desc, bd->GlslVersionString);
if (log_length > 1)
{
ImVector<char> buf;
buf.resize((int)(log_length + 1));
glGetShaderInfoLog(handle, log_length, NULL, (GLchar*)buf.begin());
fprintf(stderr, "%s\n", buf.begin());
}
return (GLboolean)status == GL_TRUE;
}
// If you get an error please report on GitHub. You may try different GL context version or GLSL version.
static bool CheckProgram(GLuint handle, const char* desc)
{
ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData();
GLint status = 0, log_length = 0;
glGetProgramiv(handle, GL_LINK_STATUS, &status);
glGetProgramiv(handle, GL_INFO_LOG_LENGTH, &log_length);
if ((GLboolean)status == GL_FALSE)
fprintf(stderr, "ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to link %s! With GLSL %s\n", desc, bd->GlslVersionString);
if (log_length > 1)
{
ImVector<char> buf;
buf.resize((int)(log_length + 1));
glGetProgramInfoLog(handle, log_length, NULL, (GLchar*)buf.begin());
fprintf(stderr, "%s\n", buf.begin());
}
return (GLboolean)status == GL_TRUE;
}
bool ImGui_ImplOpenGL3_CreateDeviceObjects()
{
ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData();
// Backup GL state
GLint last_texture, last_array_buffer;
glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer);
#ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY
GLint last_vertex_array;
glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array);
#endif
// Parse GLSL version string
int glsl_version = 130;
sscanf(bd->GlslVersionString, "#version %d", &glsl_version);
const GLchar* vertex_shader_glsl_120 =
"uniform mat4 ProjMtx;\n"
"attribute vec2 Position;\n"
"attribute vec2 UV;\n"
"attribute vec4 Color;\n"
"varying vec2 Frag_UV;\n"
"varying vec4 Frag_Color;\n"
"void main()\n"
"{\n"
" Frag_UV = UV;\n"
" Frag_Color = Color;\n"
" gl_Position = ProjMtx * vec4(Position.xy,0,1);\n"
"}\n";
const GLchar* vertex_shader_glsl_130 =
"uniform mat4 ProjMtx;\n"
"in vec2 Position;\n"
"in vec2 UV;\n"
"in vec4 Color;\n"
"out vec2 Frag_UV;\n"
"out vec4 Frag_Color;\n"
"void main()\n"
"{\n"
" Frag_UV = UV;\n"
" Frag_Color = Color;\n"
" gl_Position = ProjMtx * vec4(Position.xy,0,1);\n"
"}\n";
const GLchar* vertex_shader_glsl_300_es =
"precision highp float;\n"
"layout (location = 0) in vec2 Position;\n"
"layout (location = 1) in vec2 UV;\n"
"layout (location = 2) in vec4 Color;\n"
"uniform mat4 ProjMtx;\n"
"out vec2 Frag_UV;\n"
"out vec4 Frag_Color;\n"
"void main()\n"
"{\n"
" Frag_UV = UV;\n"
" Frag_Color = Color;\n"
" gl_Position = ProjMtx * vec4(Position.xy,0,1);\n"
"}\n";
const GLchar* vertex_shader_glsl_410_core =
"layout (location = 0) in vec2 Position;\n"
"layout (location = 1) in vec2 UV;\n"
"layout (location = 2) in vec4 Color;\n"
"uniform mat4 ProjMtx;\n"
"out vec2 Frag_UV;\n"
"out vec4 Frag_Color;\n"
"void main()\n"
"{\n"
" Frag_UV = UV;\n"
" Frag_Color = Color;\n"
" gl_Position = ProjMtx * vec4(Position.xy,0,1);\n"
"}\n";
const GLchar* fragment_shader_glsl_120 =
"#ifdef GL_ES\n"
" precision mediump float;\n"
"#endif\n"
"uniform sampler2D Texture;\n"
"varying vec2 Frag_UV;\n"
"varying vec4 Frag_Color;\n"
"void main()\n"
"{\n"
" gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV.st);\n"
"}\n";
const GLchar* fragment_shader_glsl_130 =
"uniform sampler2D Texture;\n"
"in vec2 Frag_UV;\n"
"in vec4 Frag_Color;\n"
"out vec4 Out_Color;\n"
"void main()\n"
"{\n"
" Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n"
"}\n";
const GLchar* fragment_shader_glsl_300_es =
"precision mediump float;\n"
"uniform sampler2D Texture;\n"
"in vec2 Frag_UV;\n"
"in vec4 Frag_Color;\n"
"layout (location = 0) out vec4 Out_Color;\n"
"void main()\n"
"{\n"
" Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n"
"}\n";
const GLchar* fragment_shader_glsl_410_core =
"in vec2 Frag_UV;\n"
"in vec4 Frag_Color;\n"
"uniform sampler2D Texture;\n"
"layout (location = 0) out vec4 Out_Color;\n"
"void main()\n"
"{\n"
" Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n"
"}\n";
// Select shaders matching our GLSL versions
const GLchar* vertex_shader = NULL;
const GLchar* fragment_shader = NULL;
if (glsl_version < 130)
{
vertex_shader = vertex_shader_glsl_120;
fragment_shader = fragment_shader_glsl_120;
}
else if (glsl_version >= 410)
{
vertex_shader = vertex_shader_glsl_410_core;
fragment_shader = fragment_shader_glsl_410_core;
}
else if (glsl_version == 300)
{
vertex_shader = vertex_shader_glsl_300_es;
fragment_shader = fragment_shader_glsl_300_es;
}
else
{
vertex_shader = vertex_shader_glsl_130;
fragment_shader = fragment_shader_glsl_130;
}
// Create shaders
const GLchar* vertex_shader_with_version[2] = { bd->GlslVersionString, vertex_shader };
GLuint vert_handle = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vert_handle, 2, vertex_shader_with_version, NULL);
glCompileShader(vert_handle);
CheckShader(vert_handle, "vertex shader");
const GLchar* fragment_shader_with_version[2] = { bd->GlslVersionString, fragment_shader };
GLuint frag_handle = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(frag_handle, 2, fragment_shader_with_version, NULL);
glCompileShader(frag_handle);
CheckShader(frag_handle, "fragment shader");
// Link
bd->ShaderHandle = glCreateProgram();
glAttachShader(bd->ShaderHandle, vert_handle);
glAttachShader(bd->ShaderHandle, frag_handle);
glLinkProgram(bd->ShaderHandle);
CheckProgram(bd->ShaderHandle, "shader program");
glDetachShader(bd->ShaderHandle, vert_handle);
glDetachShader(bd->ShaderHandle, frag_handle);
glDeleteShader(vert_handle);
glDeleteShader(frag_handle);
bd->AttribLocationTex = glGetUniformLocation(bd->ShaderHandle, "Texture");
bd->AttribLocationProjMtx = glGetUniformLocation(bd->ShaderHandle, "ProjMtx");
bd->AttribLocationVtxPos = (GLuint)glGetAttribLocation(bd->ShaderHandle, "Position");
bd->AttribLocationVtxUV = (GLuint)glGetAttribLocation(bd->ShaderHandle, "UV");
bd->AttribLocationVtxColor = (GLuint)glGetAttribLocation(bd->ShaderHandle, "Color");
// Create buffers
glGenBuffers(1, &bd->VboHandle);
glGenBuffers(1, &bd->ElementsHandle);
ImGui_ImplOpenGL3_CreateFontsTexture();
// Restore modified GL state
glBindTexture(GL_TEXTURE_2D, last_texture);
glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer);
#ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY
glBindVertexArray(last_vertex_array);
#endif
return true;
}
void ImGui_ImplOpenGL3_DestroyDeviceObjects()
{
ImGui_ImplOpenGL3_Data* bd = ImGui_ImplOpenGL3_GetBackendData();
if (bd->VboHandle) { glDeleteBuffers(1, &bd->VboHandle); bd->VboHandle = 0; }
if (bd->ElementsHandle) { glDeleteBuffers(1, &bd->ElementsHandle); bd->ElementsHandle = 0; }
if (bd->ShaderHandle) { glDeleteProgram(bd->ShaderHandle); bd->ShaderHandle = 0; }
ImGui_ImplOpenGL3_DestroyFontsTexture();
}
#if defined(__clang__)
#pragma clang diagnostic pop
#endif
+55
View File
@@ -0,0 +1,55 @@
// dear imgui: Renderer Backend for modern OpenGL with shaders / programmatic pipeline
// - Desktop GL: 2.x 3.x 4.x
// - Embedded GL: ES 2.0 (WebGL 1.0), ES 3.0 (WebGL 2.0)
// This needs to be used along with a Platform Backend (e.g. GLFW, SDL, Win32, custom..)
// Implemented features:
// [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID!
// [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices.
// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.
// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need.
// If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp.
// Read online: https://github.com/ocornut/imgui/tree/master/docs
// About GLSL version:
// The 'glsl_version' initialization parameter should be NULL (default) or a "#version XXX" string.
// On computer platform the GLSL version default to "#version 130". On OpenGL ES 3 platform it defaults to "#version 300 es"
// Only override if your GL version doesn't handle this GLSL version. See GLSL version table at the top of imgui_impl_opengl3.cpp.
#pragma once
#include <imgui.h> // IMGUI_IMPL_API
// Backend API
IMGUI_IMPL_API bool ImGui_ImplOpenGL3_Init(const char* glsl_version = NULL);
IMGUI_IMPL_API void ImGui_ImplOpenGL3_Shutdown();
IMGUI_IMPL_API void ImGui_ImplOpenGL3_NewFrame();
IMGUI_IMPL_API void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data);
// (Optional) Called by Init/NewFrame/Shutdown
IMGUI_IMPL_API bool ImGui_ImplOpenGL3_CreateFontsTexture();
IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyFontsTexture();
IMGUI_IMPL_API bool ImGui_ImplOpenGL3_CreateDeviceObjects();
IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyDeviceObjects();
// Specific OpenGL ES versions
//#define IMGUI_IMPL_OPENGL_ES2 // Auto-detected on Emscripten
//#define IMGUI_IMPL_OPENGL_ES3 // Auto-detected on iOS/Android
// You can explicitly select GLES2 or GLES3 API by using one of the '#define IMGUI_IMPL_OPENGL_LOADER_XXX' in imconfig.h or compiler command-line.
#if !defined(IMGUI_IMPL_OPENGL_ES2) \
&& !defined(IMGUI_IMPL_OPENGL_ES3)
// Try to detect GLES on matching platforms
#if defined(__APPLE__)
#include <TargetConditionals.h>
#endif
#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) || (defined(__ANDROID__))
#define IMGUI_IMPL_OPENGL_ES3 // iOS, Android -> GL ES 3, "#version 300 es"
#elif defined(__EMSCRIPTEN__)
#define IMGUI_IMPL_OPENGL_ES2 // Emscripten -> GL ES 2, "#version 100"
#else
// Otherwise imgui_impl_opengl3_loader.h will be used.
#endif
#endif
+2946
View File
File diff suppressed because it is too large Load Diff
+4062
View File
File diff suppressed because it is too large Load Diff
+8463
View File
File diff suppressed because it is too large Load Diff
+639
View File
@@ -0,0 +1,639 @@
// [DEAR IMGUI]
// This is a slightly modified version of stb_rect_pack.h 1.00.
// Those changes would need to be pushed into nothings/stb:
// - Added STBRP__CDECL
// Grep for [DEAR IMGUI] to find the changes.
// stb_rect_pack.h - v1.00 - public domain - rectangle packing
// Sean Barrett 2014
//
// Useful for e.g. packing rectangular textures into an atlas.
// Does not do rotation.
//
// Not necessarily the awesomest packing method, but better than
// the totally naive one in stb_truetype (which is primarily what
// this is meant to replace).
//
// Has only had a few tests run, may have issues.
//
// More docs to come.
//
// No memory allocations; uses qsort() and assert() from stdlib.
// Can override those by defining STBRP_SORT and STBRP_ASSERT.
//
// This library currently uses the Skyline Bottom-Left algorithm.
//
// Please note: better rectangle packers are welcome! Please
// implement them to the same API, but with a different init
// function.
//
// Credits
//
// Library
// Sean Barrett
// Minor features
// Martins Mozeiko
// github:IntellectualKitty
//
// Bugfixes / warning fixes
// Jeremy Jaussaud
// Fabian Giesen
//
// Version history:
//
// 1.00 (2019-02-25) avoid small space waste; gracefully fail too-wide rectangles
// 0.99 (2019-02-07) warning fixes
// 0.11 (2017-03-03) return packing success/fail result
// 0.10 (2016-10-25) remove cast-away-const to avoid warnings
// 0.09 (2016-08-27) fix compiler warnings
// 0.08 (2015-09-13) really fix bug with empty rects (w=0 or h=0)
// 0.07 (2015-09-13) fix bug with empty rects (w=0 or h=0)
// 0.06 (2015-04-15) added STBRP_SORT to allow replacing qsort
// 0.05: added STBRP_ASSERT to allow replacing assert
// 0.04: fixed minor bug in STBRP_LARGE_RECTS support
// 0.01: initial release
//
// LICENSE
//
// See end of file for license information.
//////////////////////////////////////////////////////////////////////////////
//
// INCLUDE SECTION
//
#ifndef STB_INCLUDE_STB_RECT_PACK_H
#define STB_INCLUDE_STB_RECT_PACK_H
#define STB_RECT_PACK_VERSION 1
#ifdef STBRP_STATIC
#define STBRP_DEF static
#else
#define STBRP_DEF extern
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct stbrp_context stbrp_context;
typedef struct stbrp_node stbrp_node;
typedef struct stbrp_rect stbrp_rect;
#ifdef STBRP_LARGE_RECTS
typedef int stbrp_coord;
#else
typedef unsigned short stbrp_coord;
#endif
STBRP_DEF int stbrp_pack_rects (stbrp_context *context, stbrp_rect *rects, int num_rects);
// Assign packed locations to rectangles. The rectangles are of type
// 'stbrp_rect' defined below, stored in the array 'rects', and there
// are 'num_rects' many of them.
//
// Rectangles which are successfully packed have the 'was_packed' flag
// set to a non-zero value and 'x' and 'y' store the minimum location
// on each axis (i.e. bottom-left in cartesian coordinates, top-left
// if you imagine y increasing downwards). Rectangles which do not fit
// have the 'was_packed' flag set to 0.
//
// You should not try to access the 'rects' array from another thread
// while this function is running, as the function temporarily reorders
// the array while it executes.
//
// To pack into another rectangle, you need to call stbrp_init_target
// again. To continue packing into the same rectangle, you can call
// this function again. Calling this multiple times with multiple rect
// arrays will probably produce worse packing results than calling it
// a single time with the full rectangle array, but the option is
// available.
//
// The function returns 1 if all of the rectangles were successfully
// packed and 0 otherwise.
struct stbrp_rect
{
// reserved for your use:
int id;
// input:
stbrp_coord w, h;
// output:
stbrp_coord x, y;
int was_packed; // non-zero if valid packing
}; // 16 bytes, nominally
STBRP_DEF void stbrp_init_target (stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes);
// Initialize a rectangle packer to:
// pack a rectangle that is 'width' by 'height' in dimensions
// using temporary storage provided by the array 'nodes', which is 'num_nodes' long
//
// You must call this function every time you start packing into a new target.
//
// There is no "shutdown" function. The 'nodes' memory must stay valid for
// the following stbrp_pack_rects() call (or calls), but can be freed after
// the call (or calls) finish.
//
// Note: to guarantee best results, either:
// 1. make sure 'num_nodes' >= 'width'
// or 2. call stbrp_allow_out_of_mem() defined below with 'allow_out_of_mem = 1'
//
// If you don't do either of the above things, widths will be quantized to multiples
// of small integers to guarantee the algorithm doesn't run out of temporary storage.
//
// If you do #2, then the non-quantized algorithm will be used, but the algorithm
// may run out of temporary storage and be unable to pack some rectangles.
STBRP_DEF void stbrp_setup_allow_out_of_mem (stbrp_context *context, int allow_out_of_mem);
// Optionally call this function after init but before doing any packing to
// change the handling of the out-of-temp-memory scenario, described above.
// If you call init again, this will be reset to the default (false).
STBRP_DEF void stbrp_setup_heuristic (stbrp_context *context, int heuristic);
// Optionally select which packing heuristic the library should use. Different
// heuristics will produce better/worse results for different data sets.
// If you call init again, this will be reset to the default.
enum
{
STBRP_HEURISTIC_Skyline_default=0,
STBRP_HEURISTIC_Skyline_BL_sortHeight = STBRP_HEURISTIC_Skyline_default,
STBRP_HEURISTIC_Skyline_BF_sortHeight
};
//////////////////////////////////////////////////////////////////////////////
//
// the details of the following structures don't matter to you, but they must
// be visible so you can handle the memory allocations for them
struct stbrp_node
{
stbrp_coord x,y;
stbrp_node *next;
};
struct stbrp_context
{
int width;
int height;
int align;
int init_mode;
int heuristic;
int num_nodes;
stbrp_node *active_head;
stbrp_node *free_head;
stbrp_node extra[2]; // we allocate two extra nodes so optimal user-node-count is 'width' not 'width+2'
};
#ifdef __cplusplus
}
#endif
#endif
//////////////////////////////////////////////////////////////////////////////
//
// IMPLEMENTATION SECTION
//
#ifdef STB_RECT_PACK_IMPLEMENTATION
#ifndef STBRP_SORT
#include <stdlib.h>
#define STBRP_SORT qsort
#endif
#ifndef STBRP_ASSERT
#include <assert.h>
#define STBRP_ASSERT assert
#endif
// [DEAR IMGUI] Added STBRP__CDECL
#ifdef _MSC_VER
#define STBRP__NOTUSED(v) (void)(v)
#define STBRP__CDECL __cdecl
#else
#define STBRP__NOTUSED(v) (void)sizeof(v)
#define STBRP__CDECL
#endif
enum
{
STBRP__INIT_skyline = 1
};
STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic)
{
switch (context->init_mode) {
case STBRP__INIT_skyline:
STBRP_ASSERT(heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight || heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight);
context->heuristic = heuristic;
break;
default:
STBRP_ASSERT(0);
}
}
STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int allow_out_of_mem)
{
if (allow_out_of_mem)
// if it's ok to run out of memory, then don't bother aligning them;
// this gives better packing, but may fail due to OOM (even though
// the rectangles easily fit). @TODO a smarter approach would be to only
// quantize once we've hit OOM, then we could get rid of this parameter.
context->align = 1;
else {
// if it's not ok to run out of memory, then quantize the widths
// so that num_nodes is always enough nodes.
//
// I.e. num_nodes * align >= width
// align >= width / num_nodes
// align = ceil(width/num_nodes)
context->align = (context->width + context->num_nodes-1) / context->num_nodes;
}
}
STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes)
{
int i;
#ifndef STBRP_LARGE_RECTS
STBRP_ASSERT(width <= 0xffff && height <= 0xffff);
#endif
for (i=0; i < num_nodes-1; ++i)
nodes[i].next = &nodes[i+1];
nodes[i].next = NULL;
context->init_mode = STBRP__INIT_skyline;
context->heuristic = STBRP_HEURISTIC_Skyline_default;
context->free_head = &nodes[0];
context->active_head = &context->extra[0];
context->width = width;
context->height = height;
context->num_nodes = num_nodes;
stbrp_setup_allow_out_of_mem(context, 0);
// node 0 is the full width, node 1 is the sentinel (lets us not store width explicitly)
context->extra[0].x = 0;
context->extra[0].y = 0;
context->extra[0].next = &context->extra[1];
context->extra[1].x = (stbrp_coord) width;
#ifdef STBRP_LARGE_RECTS
context->extra[1].y = (1<<30);
#else
context->extra[1].y = 65535;
#endif
context->extra[1].next = NULL;
}
// find minimum y position if it starts at x1
static int stbrp__skyline_find_min_y(stbrp_context *c, stbrp_node *first, int x0, int width, int *pwaste)
{
stbrp_node *node = first;
int x1 = x0 + width;
int min_y, visited_width, waste_area;
STBRP__NOTUSED(c);
STBRP_ASSERT(first->x <= x0);
#if 0
// skip in case we're past the node
while (node->next->x <= x0)
++node;
#else
STBRP_ASSERT(node->next->x > x0); // we ended up handling this in the caller for efficiency
#endif
STBRP_ASSERT(node->x <= x0);
min_y = 0;
waste_area = 0;
visited_width = 0;
while (node->x < x1) {
if (node->y > min_y) {
// raise min_y higher.
// we've accounted for all waste up to min_y,
// but we'll now add more waste for everything we've visted
waste_area += visited_width * (node->y - min_y);
min_y = node->y;
// the first time through, visited_width might be reduced
if (node->x < x0)
visited_width += node->next->x - x0;
else
visited_width += node->next->x - node->x;
} else {
// add waste area
int under_width = node->next->x - node->x;
if (under_width + visited_width > width)
under_width = width - visited_width;
waste_area += under_width * (min_y - node->y);
visited_width += under_width;
}
node = node->next;
}
*pwaste = waste_area;
return min_y;
}
typedef struct
{
int x,y;
stbrp_node **prev_link;
} stbrp__findresult;
static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, int width, int height)
{
int best_waste = (1<<30), best_x, best_y = (1 << 30);
stbrp__findresult fr;
stbrp_node **prev, *node, *tail, **best = NULL;
// align to multiple of c->align
width = (width + c->align - 1);
width -= width % c->align;
STBRP_ASSERT(width % c->align == 0);
// if it can't possibly fit, bail immediately
if (width > c->width || height > c->height) {
fr.prev_link = NULL;
fr.x = fr.y = 0;
return fr;
}
node = c->active_head;
prev = &c->active_head;
while (node->x + width <= c->width) {
int y,waste;
y = stbrp__skyline_find_min_y(c, node, node->x, width, &waste);
if (c->heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight) { // actually just want to test BL
// bottom left
if (y < best_y) {
best_y = y;
best = prev;
}
} else {
// best-fit
if (y + height <= c->height) {
// can only use it if it first vertically
if (y < best_y || (y == best_y && waste < best_waste)) {
best_y = y;
best_waste = waste;
best = prev;
}
}
}
prev = &node->next;
node = node->next;
}
best_x = (best == NULL) ? 0 : (*best)->x;
// if doing best-fit (BF), we also have to try aligning right edge to each node position
//
// e.g, if fitting
//
// ____________________
// |____________________|
//
// into
//
// | |
// | ____________|
// |____________|
//
// then right-aligned reduces waste, but bottom-left BL is always chooses left-aligned
//
// This makes BF take about 2x the time
if (c->heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight) {
tail = c->active_head;
node = c->active_head;
prev = &c->active_head;
// find first node that's admissible
while (tail->x < width)
tail = tail->next;
while (tail) {
int xpos = tail->x - width;
int y,waste;
STBRP_ASSERT(xpos >= 0);
// find the left position that matches this
while (node->next->x <= xpos) {
prev = &node->next;
node = node->next;
}
STBRP_ASSERT(node->next->x > xpos && node->x <= xpos);
y = stbrp__skyline_find_min_y(c, node, xpos, width, &waste);
if (y + height <= c->height) {
if (y <= best_y) {
if (y < best_y || waste < best_waste || (waste==best_waste && xpos < best_x)) {
best_x = xpos;
STBRP_ASSERT(y <= best_y);
best_y = y;
best_waste = waste;
best = prev;
}
}
}
tail = tail->next;
}
}
fr.prev_link = best;
fr.x = best_x;
fr.y = best_y;
return fr;
}
static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *context, int width, int height)
{
// find best position according to heuristic
stbrp__findresult res = stbrp__skyline_find_best_pos(context, width, height);
stbrp_node *node, *cur;
// bail if:
// 1. it failed
// 2. the best node doesn't fit (we don't always check this)
// 3. we're out of memory
if (res.prev_link == NULL || res.y + height > context->height || context->free_head == NULL) {
res.prev_link = NULL;
return res;
}
// on success, create new node
node = context->free_head;
node->x = (stbrp_coord) res.x;
node->y = (stbrp_coord) (res.y + height);
context->free_head = node->next;
// insert the new node into the right starting point, and
// let 'cur' point to the remaining nodes needing to be
// stiched back in
cur = *res.prev_link;
if (cur->x < res.x) {
// preserve the existing one, so start testing with the next one
stbrp_node *next = cur->next;
cur->next = node;
cur = next;
} else {
*res.prev_link = node;
}
// from here, traverse cur and free the nodes, until we get to one
// that shouldn't be freed
while (cur->next && cur->next->x <= res.x + width) {
stbrp_node *next = cur->next;
// move the current node to the free list
cur->next = context->free_head;
context->free_head = cur;
cur = next;
}
// stitch the list back in
node->next = cur;
if (cur->x < res.x + width)
cur->x = (stbrp_coord) (res.x + width);
#ifdef _DEBUG
cur = context->active_head;
while (cur->x < context->width) {
STBRP_ASSERT(cur->x < cur->next->x);
cur = cur->next;
}
STBRP_ASSERT(cur->next == NULL);
{
int count=0;
cur = context->active_head;
while (cur) {
cur = cur->next;
++count;
}
cur = context->free_head;
while (cur) {
cur = cur->next;
++count;
}
STBRP_ASSERT(count == context->num_nodes+2);
}
#endif
return res;
}
// [DEAR IMGUI] Added STBRP__CDECL
static int STBRP__CDECL rect_height_compare(const void *a, const void *b)
{
const stbrp_rect *p = (const stbrp_rect *) a;
const stbrp_rect *q = (const stbrp_rect *) b;
if (p->h > q->h)
return -1;
if (p->h < q->h)
return 1;
return (p->w > q->w) ? -1 : (p->w < q->w);
}
// [DEAR IMGUI] Added STBRP__CDECL
static int STBRP__CDECL rect_original_order(const void *a, const void *b)
{
const stbrp_rect *p = (const stbrp_rect *) a;
const stbrp_rect *q = (const stbrp_rect *) b;
return (p->was_packed < q->was_packed) ? -1 : (p->was_packed > q->was_packed);
}
#ifdef STBRP_LARGE_RECTS
#define STBRP__MAXVAL 0xffffffff
#else
#define STBRP__MAXVAL 0xffff
#endif
STBRP_DEF int stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects, int num_rects)
{
int i, all_rects_packed = 1;
// we use the 'was_packed' field internally to allow sorting/unsorting
for (i=0; i < num_rects; ++i) {
rects[i].was_packed = i;
}
// sort according to heuristic
STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_height_compare);
for (i=0; i < num_rects; ++i) {
if (rects[i].w == 0 || rects[i].h == 0) {
rects[i].x = rects[i].y = 0; // empty rect needs no space
} else {
stbrp__findresult fr = stbrp__skyline_pack_rectangle(context, rects[i].w, rects[i].h);
if (fr.prev_link) {
rects[i].x = (stbrp_coord) fr.x;
rects[i].y = (stbrp_coord) fr.y;
} else {
rects[i].x = rects[i].y = STBRP__MAXVAL;
}
}
}
// unsort
STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_original_order);
// set was_packed flags and all_rects_packed status
for (i=0; i < num_rects; ++i) {
rects[i].was_packed = !(rects[i].x == STBRP__MAXVAL && rects[i].y == STBRP__MAXVAL);
if (!rects[i].was_packed)
all_rects_packed = 0;
}
// return the all_rects_packed status
return all_rects_packed;
}
#endif
/*
------------------------------------------------------------------------------
This software is available under 2 licenses -- choose whichever you prefer.
------------------------------------------------------------------------------
ALTERNATIVE A - MIT License
Copyright (c) 2017 Sean Barrett
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
------------------------------------------------------------------------------
ALTERNATIVE B - Public Domain (www.unlicense.org)
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
software, either in source code form or as a compiled binary, for any purpose,
commercial or non-commercial, and by any means.
In jurisdictions that recognize copyright laws, the author or authors of this
software dedicate any and all copyright interest in the software to the public
domain. We make this dedication for the benefit of the public at large and to
the detriment of our heirs and successors. We intend this dedication to be an
overt act of relinquishment in perpetuity of all present and future rights to
this software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------------------------------------------
*/
+1449
View File
File diff suppressed because it is too large Load Diff
+4903
View File
File diff suppressed because it is too large Load Diff
Executable
+132
View File
@@ -0,0 +1,132 @@
#include <android_native_app_glue.h>
#include <EGL/egl.h>
#include "imgui/imgui.h"
#include "imgui/imgui_impl_android.h"
#include "imgui/imgui_impl_opengl3.h"
#include "font.h"
#include <dobby.h>
#include <fstream>
#include <vector>
#include <array>
#include <cstddef>
#include <sstream>
#include "结构体/数据/SDK.hpp"
using namespace SDK;
bool initImGui=false;
bool =true;
int screenWidth=2400,screenHeight=1080,glWidth,glHeight,gWidth,gHeight;
float density=-1;
uintptr_t UE4;
android_app*g_App=0;
static char s[64];
#include "引用.h"
#include "菜单.h"
EGLBoolean (*orig_eglSwapBuffers)(EGLDisplay dpy, EGLSurface surface);
EGLBoolean _eglSwapBuffers(EGLDisplay dpy, EGLSurface surface) {
eglQuerySurface(dpy, surface, EGL_WIDTH, &glWidth);
eglQuerySurface(dpy, surface, EGL_HEIGHT, &glHeight);
if (glWidth <= 0 || glHeight <= 0)
return eglSwapBuffers(dpy, surface);
if (!g_App)
return eglSwapBuffers(dpy, surface);
screenWidth = ANativeWindow_getWidth(g_App->window);
screenHeight = ANativeWindow_getHeight(g_App->window);
density = AConfiguration_getDensity(g_App->config);
if (!initImGui) {
LoadLanguageSetting();
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO();
io.IniFilename = NULL;
ImGui::StyleColorsLight();//黑紫主题
ImGui_ImplAndroid_Init();
ImGui_ImplOpenGL3_Init("#version 300 es");
ImFontConfig font_cfg;
font_cfg.SizePixels = 22.0f;
io.Fonts->AddFontFromMemoryTTF((void*)Custom_data, Custom_size, 29.0f,
nullptr, io.Fonts->GetGlyphRangesChineseFull());
static const ImWchar diamondRange[] = { 0x25C6, 0x25C6, 0 };
ImFontConfig cfgMerge;
cfgMerge.MergeMode = true;
io.Fonts->AddFontFromMemoryTTF((void*)Custom_data, Custom_size, 29.0f,
&cfgMerge, diamondRange);
io.Fonts->Build();
io.Fonts->AddFontDefault(&font_cfg);
ImGuiStyle *style = &ImGui::GetStyle();
style->Alpha = 0.8;
style->GrabMinSize = 13.0f; // 设置滑块宽度
style->ScrollbarRounding = 2.0f; // 设置滚动条圆角
style->ScrollbarSize = 15.0f; // 设置滚动条宽度
style->WindowPadding = ImVec2(4, 9); // 设置窗口内容区域与窗口边界的内边距,这里是上下4,左右9单位
style->WindowRounding = 5.0f; // 设置窗口边角的圆角半径为5单位
style->FramePadding = ImVec2(3, 3); // 设置表单控件(如按钮)内容区域与边界的内边距
style->FrameRounding = 2.0f; // 设置表单控件边角的圆角半径为2单位
style->ItemSpacing = ImVec2(8, 4); // 设置控件之间的水平和垂直间距
style->ItemInnerSpacing = ImVec2(1, 10); // 设置控件内部元素之间的间距
style->CellPadding = ImVec2(5, 5); // 设置表格单元格的内边距
style->IndentSpacing = 23.0f; // 设置列表项缩进的间距
style->TouchExtraPadding = ImVec2(0, 0); // 设置触摸屏额外的内边距(这里设置为0,可能意味着不增加额外的触摸区域)
style->ButtonTextAlign = ImVec2(0.50f, 0.50f); // 设置按钮文本的对齐方式(水平和垂直居中)
style->DisplayWindowPadding = ImVec2(22, 22); // 设置显示窗口内容区域与窗口边界的内边距
style->DisplaySafeAreaPadding = ImVec2(4, 4); // 设置显示安全区域的内边距(避免内容被屏幕边缘裁剪)
style->AntiAliasedLines = true; // 启用抗锯齿线
style->CurveTessellationTol = 1.f; // 设置曲线细分公差
style->TabBorderSize = 0.001f; // 设置标签页边框的大小(这里设置为0,意味着没有边框)
style->WindowTitleAlign = ImVec2(0.5, 0.5); // 设置标题居中
ImGui::GetStyle().ScaleAllSizes(1.0f);
initImGui = true;
const ImWchar icons_ranges[]={0xf000,0xf3ff,0};
ImFontConfig icons_config;
ImFontConfig CustomFont;
CustomFont.FontDataOwnedByAtlas=false;
icons_config.MergeMode=true;
icons_config.PixelSnapH=true;
icons_config.OversampleH=2.5;
icons_config.OversampleV=2.5;
io.ConfigWindowsMoveFromTitleBarOnly=true;
}
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplAndroid_NewFrame(glWidth,glHeight);
ImGui::NewFrame();
DrawESP(ImGui::GetBackgroundDrawList(),glWidth, glHeight);
ImGuiIO & io = ImGui::GetIO();
();
ImGui::Render();
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
return orig_eglSwapBuffers(dpy,surface);
}
int32_t(*orig_onInputEvent)(struct android_app*app,AInputEvent*inputEvent);
int32_t onInputEvent(struct android_app*app,AInputEvent*inputEvent){
ImGui_ImplAndroid_HandleInputEvent(inputEvent,{(float)screenWidth/(float)glWidth,(float)screenHeight/(float)glHeight});
return orig_onInputEvent(app,inputEvent);
}
extern "C"{
void android_main(struct android_app*state){
app_dummy();
}
}
void*main_thread(void*){
UE4=get_Module_Base("libUE4.so");
while(!UE4){
UE4=get_Module_Base("libUE4.so");
sleep(1.5);
}
while(!g_App){
g_App=*(android_app**)(UE4+0x4249CA4);
sleep(1.5);
}
orig_onInputEvent=decltype(orig_onInputEvent)(g_App->onInputEvent);
g_App->onInputEvent=onInputEvent;
FName::GNames=GetGNames();
UObject::GUObjectArray=(FUObjectArray*)(UE4+0x454dd28);
DobbyHook((void*)DobbySymbolResolver(("/system/lib/libEGL.so"),("eglSwapBuffers")),(void*)_eglSwapBuffers,(void**)&orig_eglSwapBuffers);
DobbyHook((void*)(UE4 + 0xc5ebbc), (void*)gm, (void**)&ogm);
return 0;
}
__attribute__((constructor))void _init(){
pthread_t pid;
pthread_create(&pid,0,main_thread,0);
}
Executable
+3564
View File
File diff suppressed because it is too large Load Diff
Executable
+48
View File
@@ -0,0 +1,48 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
#include <thread>
#include <mutex>
#include <chrono>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <vector>
#include <unordered_map>
#include <string>
#include <cstring>
#include <functional>
#include <atomic>
#include <algorithm>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
#include <thread>
#include <mutex>
#include <vector>
#include <string>
#include <atomic>
#include <sstream>
#include <iostream>
#include <fstream>
#include <chrono>
#include <iomanip>
#include <map>
#include "结构体/内存读写/Syscall读写.h"
#include "结构体/函数/混淆.cpp"
#include "结构体/函数/Quaternion.hpp"
#include "结构体/函数/普通函数.h"
#include "结构体/函数/必要函数.h"
#include "结构体/数据/训练场数据包.h"
#include "结构体/数据/雪地数据包.h"
#include "结构体/数据/海岛数据包.h"
#include "结构体/数据/沙漠数据包.h"
#include "结构体/数据/雨林数据包.h"
#include "变量.h"
#include "DrawESP.h"
+239
View File
@@ -0,0 +1,239 @@
#include <string>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <dirent.h>
#include <pthread.h>
#include <sys/socket.h>
#include <sys/syscall.h>
#include <sys/mman.h>
#include <sys/uio.h>
#include <malloc.h>
#include <math.h>
#include <thread>
#include <iostream>
#include <sys/stat.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <iostream>
#include <locale>
#include <string>
#include <codecvt>
#include <dlfcn.h>
using namespace std;
typedef long ADDRESS;
typedef char PACKAGENAME;
typedef unsigned short UTF16;
typedef char UTF8;
// syscall内存读写
#if defined(__arm__)
int process_vm_readv_syscall = 376;
int process_vm_writev_syscall = 377;
#elif defined(__aarch64__)
int process_vm_readv_syscall = 270;
int process_vm_writev_syscall = 271;
#elif defined(__i386__)
int process_vm_readv_syscall = 347;
int process_vm_writev_syscall = 348;
#else
int process_vm_readv_syscall = 310;
int process_vm_writev_syscall = 311;
#endif
ssize_t process_v1(pid_t __pid, const struct iovec *__local_iov, unsigned long __local_iov_count,
const struct iovec *__remote_iov, unsigned long __remote_iov_count,
unsigned long __flags, bool iswrite)
{
return syscall((iswrite ? process_vm_writev_syscall : process_vm_readv_syscall), __pid,
__local_iov, __local_iov_count, __remote_iov, __remote_iov_count, __flags);
}
// 进程读写内存
bool pvm1(void *address, void *buffer, size_t size, bool iswrite)
{
struct iovec local[1];
struct iovec remote[1];
local[0].iov_base = buffer;
local[0].iov_len = size;
remote[0].iov_base = address;
remote[0].iov_len = size;
ssize_t bytes = process_v1(getpid(), local, 1, remote, 1, 0, iswrite);
return bytes == size;
}
// 读取内存
bool vm_readv(long address, void *buffer, size_t size)
{
return pvm1(reinterpret_cast < void *>(address), buffer, size, false);
}
// 写入内存
bool vm_writev(long address, void *buffer, size_t size)
{
return pvm1(reinterpret_cast < void *>(address), buffer, size, true);
}
// 获取F类内存
float getfloat(long addr)
{
float var = 0;
vm_readv(addr, &var, 4);
return (var);
}
// 获取
int getdword(long addr)
{
int var = 0;
vm_readv(addr, &var, 4);
return (var);
}
// 获取
bool getbool(long addr)
{
bool var = 0;
vm_readv(addr, &var, 4);
return (var);
}
// 获取指针
long getPointer(long addr)
{
long var = 0;
vm_readv(addr, &var, 4);
return (var);
}
// 写入F类内存
void writefloat(long addr, float data)
{
vm_writev(addr, &data, 4);
}
bool WriteAddr(void *addr, void *buffer, size_t length) {
unsigned long page_size = sysconf(_SC_PAGESIZE);
unsigned long size = page_size * sizeof(uintptr_t);
return mprotect((void *) ((uintptr_t) addr - ((uintptr_t) addr % page_size) - page_size), (size_t) size, PROT_EXEC | PROT_READ | PROT_WRITE) == 0 && memcpy(addr, buffer, length) != 0;
}
bool WriteInt(uintptr_t addr,int var) {
return WriteAddr(reinterpret_cast<void*>(addr),reinterpret_cast<void*>(&var), sizeof(var));
}
// 写入D类内存
void writedword(long addr, int data)
{
vm_writev(addr, &data, 4);
}
// 获取进程
int getProcessID(const char *packageName)
{
int id = -1;
DIR *dir;
FILE *fp;
char filename[64];
char cmdline[64];
struct dirent *entry;
dir = opendir("/proc");
while ((entry = readdir(dir)) != NULL)
{
id = atoi(entry->d_name);
if (id != 0)
{
sprintf(filename, "/proc/%d/cmdline", id);
fp = fopen(filename, "r");
if (fp)
{
fgets(cmdline, sizeof(cmdline), fp);
fclose(fp);
if (strcmp(packageName, cmdline) == 0)
{
return id;
}
}
}
}
closedir(dir);
return -1;
}
// 获取基址
long get_Module_Base(const char *module_name)
{
FILE *fp;
long addr = 0;
char *pch;
char filename[64];
char line[1024];
snprintf(filename, sizeof(filename), "/proc/%d/maps", getpid());
fp = fopen(filename, "r");
if (fp != NULL)
{
while (fgets(line, sizeof(line), fp))
{
if (strstr(line, module_name))
{
pch = strtok(line, "-");
addr = strtoul(pch, NULL, 16);
if (addr == 0x8000)
addr = 0;
break;
}
}
fclose(fp);
}
return addr;
}
// 读取字符信息
void getUTF8(char * buf, long namepy)
{
UTF16 buf16[16] = { 0 };
vm_readv(namepy, buf16, 32);
UTF16 *pTempUTF16 = buf16;
UTF8 *pTempUTF8 = buf;
UTF8 *pUTF8End = pTempUTF8 + 32;
while (pTempUTF16 < pTempUTF16 + 28)
{
if (*pTempUTF16 <= 0x007F && pTempUTF8 + 1 < pUTF8End)
{
*pTempUTF8++ = (UTF8) * pTempUTF16;
}
else if (*pTempUTF16 >= 0x0080 && *pTempUTF16 <= 0x07FF && pTempUTF8 + 2 < pUTF8End)
{
*pTempUTF8++ = (*pTempUTF16 >> 6) | 0xC0;
*pTempUTF8++ = (*pTempUTF16 & 0x3F) | 0x80;
}
else if (*pTempUTF16 >= 0x0800 && *pTempUTF16 <= 0xFFFF && pTempUTF8 + 3 < pUTF8End)
{
*pTempUTF8++ = (*pTempUTF16 >> 12) | 0xE0;
*pTempUTF8++ = ((*pTempUTF16 >> 6) & 0x3F) | 0x80;
*pTempUTF8++ = (*pTempUTF16 & 0x3F) | 0x80;
}
else
{
break;
}
pTempUTF16++;
}
}
bool IsPtrValid(void *addr) {
if (!addr) {
return false;
}
static int fd = -1;
if (fd == -1) {
fd = open("/dev/random", O_WRONLY);
}
return write(fd, addr, 4) >= 0;
}
+703
View File
@@ -0,0 +1,703 @@
#pragma once
#define _USE_MATH_DEFINES
#include <math.h>
#include <iostream>
#define SMALL_float 0.0000000001
/**
* Attempt to include a header file if the file exists.
* If the file does not exist, create a dummy data structure for that type.
* If it cannot be determined if it exists, just attempt to include it.
*/
#ifdef __has_include
# if __has_include("Vector3.hpp")
# include "Vector3.hpp"
# elif !defined(GMATH_VECTOR3)
#define GMATH_VECTOR3
struct Vector3
{
union
{
struct
{
float X;
float Y;
float Z;
};
float data[3];
};
inline Vector3() : X(0), Y(0), Z(0) {}
inline Vector3(float data[]) : X(data[0]), Y(data[1]), Z(data[2])
{}
inline Vector3(float value) : X(value), Y(value), Z(value) {}
inline Vector3(float x, float y) : X(x), Y(y), Z(0) {}
inline Vector3(float x, float y, float z) : X(x), Y(y), Z(z) {}
static inline Vector3 Cross(Vector3 lhs, Vector3 rhs)
{
float x = lhs.Y * rhs.Z - lhs.Z * rhs.Y;
float y = lhs.Z * rhs.X - lhs.X * rhs.Z;
float z = lhs.X * rhs.Y - lhs.Y * rhs.X;
return Vector3(x, y, z);
}
static inline float Dot(Vector3 lhs, Vector3 rhs)
{
return lhs.X * rhs.X + lhs.Y * rhs.Y + lhs.Z * rhs.Z;
}
static inline Vector3 Normalized(Vector3 v)
{
float mag = sqrt(v.X * v.X + v.Y * v.Y + v.Z * v.Z);
if (mag == 0)
return Vector3::Zero();
return v / mag;
}
static inline Vector3 Orthogonal(Vector3 v)
{
return v.Z < v.X ?
Vector3(v.Y, -v.X, 0) : Vector3(0, -v.Z, v.Y);
}
static inline float SqrMagnitude(Vector3 v)
{
return v.X * v.X + v.Y * v.Y + v.Z * v.Z;
}
};
inline Vector3 operator+(Vector3 lhs, const Vector3 rhs)
{
return Vector3(lhs.X + rhs.X, lhs.Y + rhs.Y, lhs.Z + rhs.Z);
}
inline Vector3 operator*(Vector3 lhs, const float rhs)
{
return Vector3(lhs.X * rhs, lhs.Y * rhs, lhs.Z * rhs);
}
# endif
#else
# include "Vector3.hpp"
#endif
struct Quaternion
{
union
{
struct
{
float X;
float Y;
float Z;
float W;
};
float data[4];
};
/**
* Constructors.
*/
inline Quaternion();
inline Quaternion(float data[]);
inline Quaternion(Vector3 vector, float scalar);
inline Quaternion(float x, float y, float z, float w);
/**
* Constants for common quaternions.
*/
static inline Quaternion Identity();
/**
* Returns the angle between two quaternions.
* The quaternions must be normalized.
* @param a: The first quaternion.
* @param b: The second quaternion.
* @return: A scalar value.
*/
static inline float Angle(Quaternion a, Quaternion b);
/**
* Returns the conjugate of a quaternion.
* @param rotation: The quaternion in question.
* @return: A new quaternion.
*/
static inline Quaternion Conjugate(Quaternion rotation);
/**
* Returns the dot product of two quaternions.
* @param lhs: The left side of the multiplication.
* @param rhs: The right side of the multiplication.
* @return: A scalar value.
*/
static inline float Dot(Quaternion lhs, Quaternion rhs);
/**
* Creates a new quaternion from the angle-axis representation of
* a rotation.
* @param angle: The rotation angle in radians.
* @param axis: The vector about which the rotation occurs.
* @return: A new quaternion.
*/
static inline Quaternion FromAngleAxis(float angle, Vector3 axis);
/**
* Create a new quaternion from the euler angle representation of
* a rotation. The z, x and y values represent rotations about those
* axis in that respective order.
* @param rotation: The x, y and z rotations.
* @return: A new quaternion.
*/
static inline Quaternion FromEuler(Vector3 rotation);
/**
* Create a new quaternion from the euler angle representation of
* a rotation. The z, x and y values represent rotations about those
* axis in that respective order.
* @param x: The rotation about the x-axis in radians.
* @param y: The rotation about the y-axis in radians.
* @param z: The rotation about the z-axis in radians.
* @return: A new quaternion.
*/
static inline Quaternion FromEuler(float x, float y, float z);
/**
* Create a quaternion rotation which rotates "fromVector" to "toVector".
* @param fromVector: The vector from which to start the rotation.
* @param toVector: The vector at which to end the rotation.
* @return: A new quaternion.
*/
static inline Quaternion FromToRotation(Vector3 fromVector,
Vector3 toVector);
/**
* Returns the inverse of a rotation.
* @param rotation: The quaternion in question.
* @return: A new quaternion.
*/
static inline Quaternion Inverse(Quaternion rotation);
/**
* Interpolates between a and b by t, which is clamped to the range [0-1].
* The result is normalized before being returned.
* @param a: The starting rotation.
* @param b: The ending rotation.
* @return: A new quaternion.
*/
static inline Quaternion Lerp(Quaternion a, Quaternion b, float t);
/**
* Interpolates between a and b by t. This normalizes the result when
* complete.
* @param a: The starting rotation.
* @param b: The ending rotation.
* @param t: The interpolation value.
* @return: A new quaternion.
*/
static inline Quaternion LerpUnclamped(Quaternion a, Quaternion b,
float t);
/**
* Creates a rotation with the specified forward direction. This is the
* same as calling LookRotation with (0, 1, 0) as the upwards vector.
* The output is undefined for parallel vectors.
* @param forward: The forward direction to look toward.
* @return: A new quaternion.
*/
static inline Quaternion LookRotation(Vector3 forward);
/**
* Creates a rotation with the specified forward and upwards directions.
* The output is undefined for parallel vectors.
* @param forward: The forward direction to look toward.
* @param upwards: The direction to treat as up.
* @return: A new quaternion.
*/
static inline Quaternion LookRotation(Vector3 forward, Vector3 upwards);
/**
* Returns the norm of a quaternion.
* @param rotation: The quaternion in question.
* @return: A scalar value.
*/
static inline float Norm(Quaternion rotation);
/**
* Returns a quaternion with identical rotation and a norm of one.
* @param rotation: The quaternion in question.
* @return: A new quaternion.
*/
static inline Quaternion Normalized(Quaternion rotation);
/**
* Returns a new Quaternion created by rotating "from" towards "to" by
* "maxRadiansDelta". This will not overshoot, and if a negative delta is
* applied, it will rotate till completely opposite "to" and then stop.
* @param from: The rotation at which to start.
* @param to: The rotation at which to end.
# @param maxRadiansDelta: The maximum number of radians to rotate.
* @return: A new Quaternion.
*/
static inline Quaternion RotateTowards(Quaternion from, Quaternion to,
float maxRadiansDelta);
/**
* Returns a new quaternion interpolated between a and b, using spherical
* linear interpolation. The variable t is clamped to the range [0-1]. The
* resulting quaternion will be normalized.
* @param a: The starting rotation.
* @param b: The ending rotation.
* @param t: The interpolation value.
* @return: A new quaternion.
*/
static inline Quaternion Slerp(Quaternion a, Quaternion b, float t);
/**
* Returns a new quaternion interpolated between a and b, using spherical
* linear interpolation. The resulting quaternion will be normalized.
* @param a: The starting rotation.
* @param b: The ending rotation.
* @param t: The interpolation value.
* @return: A new quaternion.
*/
static inline Quaternion SlerpUnclamped(Quaternion a, Quaternion b,
float t);
/**
* Outputs the angle axis representation of the provided quaternion.
* @param rotation: The input quaternion.
* @param angle: The output angle.
* @param axis: The output axis.
*/
static inline void ToAngleAxis(Quaternion rotation, float &angle,
Vector3 &axis);
/**
* Returns the Euler angle representation of a rotation. The resulting
* vector contains the rotations about the z, x and y axis, in that order.
* @param rotation: The quaternion to convert.
* @return: A new vector.
*/
static inline Vector3 ToEuler(Quaternion rotation);
/**
* Operator overloading.
*/
inline struct Quaternion& operator+=(const float rhs);
inline struct Quaternion& operator-=(const float rhs);
inline struct Quaternion& operator*=(const float rhs);
inline struct Quaternion& operator/=(const float rhs);
inline struct Quaternion& operator+=(const Quaternion rhs);
inline struct Quaternion& operator-=(const Quaternion rhs);
inline struct Quaternion& operator*=(const Quaternion rhs);
};
inline Quaternion operator-(Quaternion rhs);
inline Quaternion operator+(Quaternion lhs, const float rhs);
inline Quaternion operator-(Quaternion lhs, const float rhs);
inline Quaternion operator*(Quaternion lhs, const float rhs);
inline Quaternion operator/(Quaternion lhs, const float rhs);
inline Quaternion operator+(const float lhs, Quaternion rhs);
inline Quaternion operator-(const float lhs, Quaternion rhs);
inline Quaternion operator*(const float lhs, Quaternion rhs);
inline Quaternion operator/(const float lhs, Quaternion rhs);
inline Quaternion operator+(Quaternion lhs, const Quaternion rhs);
inline Quaternion operator-(Quaternion lhs, const Quaternion rhs);
inline Quaternion operator*(Quaternion lhs, const Quaternion rhs);
inline Vector3 operator*(Quaternion lhs, const Vector3 rhs);
inline bool operator==(const Quaternion lhs, const Quaternion rhs);
inline bool operator!=(const Quaternion lhs, const Quaternion rhs);
/*******************************************************************************
* Implementation
*/
Quaternion::Quaternion() : X(0), Y(0), Z(0), W(1) {}
Quaternion::Quaternion(float data[]) : X(data[0]), Y(data[1]), Z(data[2]),
W(data[3]) {}
Quaternion::Quaternion(Vector3 vector, float scalar) : X(vector.X),
Y(vector.Y), Z(vector.Z), W(scalar) {}
Quaternion::Quaternion(float x, float y, float z, float w) : X(x), Y(y),
Z(z), W(w) {}
Quaternion Quaternion::Identity() { return Quaternion(0, 0, 0, 1); }
float Quaternion::Angle(Quaternion a, Quaternion b)
{
float dot = Dot(a, b);
return acos(fmin(fabs(dot), 1)) * 2;
}
Quaternion Quaternion::Conjugate(Quaternion rotation)
{
return Quaternion(-rotation.X, -rotation.Y, -rotation.Z, rotation.W);
}
float Quaternion::Dot(Quaternion lhs, Quaternion rhs)
{
return lhs.X * rhs.X + lhs.Y * rhs.Y + lhs.Z * rhs.Z + lhs.W * rhs.W;
}
Quaternion Quaternion::FromAngleAxis(float angle, Vector3 axis)
{
Quaternion q;
float m = sqrt(axis.X * axis.X + axis.Y * axis.Y + axis.Z * axis.Z);
float s = sin(angle / 2) / m;
q.X = axis.X * s;
q.Y = axis.Y * s;
q.Z = axis.Z * s;
q.W = cos(angle / 2);
return q;
}
Quaternion Quaternion::FromEuler(Vector3 rotation)
{
return FromEuler(rotation.X, rotation.Y, rotation.Z);
}
Quaternion Quaternion::FromEuler(float x, float y, float z)
{
float cx = cos(x * 0.5);
float cy = cos(y * 0.5);
float cz = cos(z * 0.5);
float sx = sin(x * 0.5);
float sy = sin(y * 0.5);
float sz = sin(z * 0.5);
Quaternion q;
q.X = cx * sy * sz + cy * cz * sx;
q.Y = cx * cz * sy - cy * sx * sz;
q.Z = cx * cy * sz - cz * sx * sy;
q.W = sx * sy * sz + cx * cy * cz;
return q;
}
Quaternion Quaternion::FromToRotation(Vector3 fromVector, Vector3 toVector)
{
float dot = Vector3::Dot(fromVector, toVector);
float k = sqrt(Vector3::SqrMagnitude(fromVector) *
Vector3::SqrMagnitude(toVector));
if (fabs(dot / k + 1) < 0.00001)
{
Vector3 ortho = Vector3::Orthogonal(fromVector);
return Quaternion(Vector3::Normalized(ortho), 0);
}
Vector3 cross = Vector3::Cross(fromVector, toVector);
return Normalized(Quaternion(cross, dot + k));
}
Quaternion Quaternion::Inverse(Quaternion rotation)
{
float n = Norm(rotation);
return Conjugate(rotation) / (n * n);
}
Quaternion Quaternion::Lerp(Quaternion a, Quaternion b, float t)
{
if (t < 0) return Normalized(a);
else if (t > 1) return Normalized(b);
return LerpUnclamped(a, b, t);
}
Quaternion Quaternion::LerpUnclamped(Quaternion a, Quaternion b, float t)
{
Quaternion quaternion;
if (Dot(a, b) >= 0)
quaternion = a * (1 - t) + b * t;
else
quaternion = a * (1 - t) - b * t;
return Normalized(quaternion);
}
Quaternion Quaternion::LookRotation(Vector3 forward)
{
return LookRotation(forward, Vector3(0, 1, 0));
}
Quaternion Quaternion::LookRotation(Vector3 forward, Vector3 upwards)
{
// Normalize inputs
forward = Vector3::Normalized(forward);
upwards = Vector3::Normalized(upwards);
// Don't allow zero vectors
if (Vector3::SqrMagnitude(forward) < SMALL_float || Vector3::SqrMagnitude(upwards) < SMALL_float)
return Quaternion::Identity();
// Handle alignment with up direction
if (1 - fabs(Vector3::Dot(forward, upwards)) < SMALL_float)
return FromToRotation(Vector3::Forward(), forward);
// Get orthogonal vectors
Vector3 right = Vector3::Normalized(Vector3::Cross(upwards, forward));
upwards = Vector3::Cross(forward, right);
// Calculate rotation
Quaternion quaternion;
float radicand = right.X + upwards.Y + forward.Z;
if (radicand > 0)
{
quaternion.W = sqrt(1.0 + radicand) * 0.5;
float recip = 1.0 / (4.0 * quaternion.W);
quaternion.X = (upwards.Z - forward.Y) * recip;
quaternion.Y = (forward.X - right.Z) * recip;
quaternion.Z = (right.Y - upwards.X) * recip;
}
else if (right.X >= upwards.Y && right.X >= forward.Z)
{
quaternion.X = sqrt(1.0 + right.X - upwards.Y - forward.Z) * 0.5;
float recip = 1.0 / (4.0 * quaternion.X);
quaternion.W = (upwards.Z - forward.Y) * recip;
quaternion.Z = (forward.X + right.Z) * recip;
quaternion.Y = (right.Y + upwards.X) * recip;
}
else if (upwards.Y > forward.Z)
{
quaternion.Y = sqrt(1.0 - right.X + upwards.Y - forward.Z) * 0.5;
float recip = 1.0 / (4.0 * quaternion.Y);
quaternion.Z = (upwards.Z + forward.Y) * recip;
quaternion.W = (forward.X - right.Z) * recip;
quaternion.X = (right.Y + upwards.X) * recip;
}
else
{
quaternion.Z = sqrt(1.0 - right.X - upwards.Y + forward.Z) * 0.5;
float recip = 1.0 / (4.0 * quaternion.Z);
quaternion.Y = (upwards.Z + forward.Y) * recip;
quaternion.X = (forward.X + right.Z) * recip;
quaternion.W = (right.Y - upwards.X) * recip;
}
return quaternion;
}
float Quaternion::Norm(Quaternion rotation)
{
return sqrt(rotation.X * rotation.X +
rotation.Y * rotation.Y +
rotation.Z * rotation.Z +
rotation.W * rotation.W);
}
Quaternion Quaternion::Normalized(Quaternion rotation)
{
return rotation / Norm(rotation);
}
Quaternion Quaternion::RotateTowards(Quaternion from, Quaternion to,
float maxRadiansDelta)
{
float angle = Quaternion::Angle(from, to);
if (angle == 0)
return to;
maxRadiansDelta = fmax(maxRadiansDelta, angle - M_PI);
float t = fmin(1, maxRadiansDelta / angle);
return Quaternion::SlerpUnclamped(from, to, t);
}
Quaternion Quaternion::Slerp(Quaternion a, Quaternion b, float t)
{
if (t < 0) return Normalized(a);
else if (t > 1) return Normalized(b);
return SlerpUnclamped(a, b, t);
}
Quaternion Quaternion::SlerpUnclamped(Quaternion a, Quaternion b, float t)
{
float n1;
float n2;
float n3 = Dot(a, b);
bool flag = false;
if (n3 < 0)
{
flag = true;
n3 = -n3;
}
if (n3 > 0.999999)
{
n2 = 1 - t;
n1 = flag ? -t : t;
}
else
{
float n4 = acos(n3);
float n5 = 1 / sin(n4);
n2 = sin((1 - t) * n4) * n5;
n1 = flag ? -sin(t * n4) * n5 : sin(t * n4) * n5;
}
Quaternion quaternion;
quaternion.X = (n2 * a.X) + (n1 * b.X);
quaternion.Y = (n2 * a.Y) + (n1 * b.Y);
quaternion.Z = (n2 * a.Z) + (n1 * b.Z);
quaternion.W = (n2 * a.W) + (n1 * b.W);
return Normalized(quaternion);
}
void Quaternion::ToAngleAxis(Quaternion rotation, float &angle, Vector3 &axis)
{
if (rotation.W > 1)
rotation = Normalized(rotation);
angle = 2 * acos(rotation.W);
float s = sqrt(1 - rotation.W * rotation.W);
if (s < 0.00001) {
axis.X = 1;
axis.Y = 0;
axis.Z = 0;
} else {
axis.X = rotation.X / s;
axis.Y = rotation.Y / s;
axis.Z = rotation.Z / s;
}
}
Vector3 Quaternion::ToEuler(Quaternion rotation)
{
float sqw = rotation.W * rotation.W;
float sqx = rotation.X * rotation.X;
float sqy = rotation.Y * rotation.Y;
float sqz = rotation.Z * rotation.Z;
// If normalized is one, otherwise is correction factor
float unit = sqx + sqy + sqz + sqw;
float test = rotation.X * rotation.W - rotation.Y * rotation.Z;
Vector3 v;
// Singularity at north pole
if (test > 0.4995f * unit)
{
v.Y = 2 * atan2(rotation.Y, rotation.X);
v.X = M_PI_2;
v.Z = 0;
return v;
}
// Singularity at south pole
if (test < -0.4995f * unit)
{
v.Y = -2 * atan2(rotation.Y, rotation.X);
v.X = -M_PI_2;
v.Z = 0;
return v;
}
// Yaw
v.Y = atan2(2 * rotation.W * rotation.Y + 2 * rotation.Z * rotation.X,
1 - 2 * (rotation.X * rotation.X + rotation.Y * rotation.Y));
// Pitch
v.X = asin(2 * (rotation.W * rotation.X - rotation.Y * rotation.Z));
// Roll
v.Z = atan2(2 * rotation.W * rotation.Z + 2 * rotation.X * rotation.Y,
1 - 2 * (rotation.Z * rotation.Z + rotation.X * rotation.X));
return v;
}
struct Quaternion& Quaternion::operator+=(const float rhs)
{
X += rhs;
Y += rhs;
Z += rhs;
W += rhs;
return *this;
}
struct Quaternion& Quaternion::operator-=(const float rhs)
{
X -= rhs;
Y -= rhs;
Z -= rhs;
W -= rhs;
return *this;
}
struct Quaternion& Quaternion::operator*=(const float rhs)
{
X *= rhs;
Y *= rhs;
Z *= rhs;
W *= rhs;
return *this;
}
struct Quaternion& Quaternion::operator/=(const float rhs)
{
X /= rhs;
Y /= rhs;
Z /= rhs;
W /= rhs;
return *this;
}
struct Quaternion& Quaternion::operator+=(const Quaternion rhs)
{
X += rhs.X;
Y += rhs.Y;
Z += rhs.Z;
W += rhs.W;
return *this;
}
struct Quaternion& Quaternion::operator-=(const Quaternion rhs)
{
X -= rhs.X;
Y -= rhs.Y;
Z -= rhs.Z;
W -= rhs.W;
return *this;
}
struct Quaternion& Quaternion::operator*=(const Quaternion rhs)
{
Quaternion q;
q.W = W * rhs.W - X * rhs.X - Y * rhs.Y - Z * rhs.Z;
q.X = X * rhs.W + W * rhs.X + Y * rhs.Z - Z * rhs.Y;
q.Y = W * rhs.Y - X * rhs.Z + Y * rhs.W + Z * rhs.X;
q.Z = W * rhs.Z + X * rhs.Y - Y * rhs.X + Z * rhs.W;
*this = q;
return *this;
}
Quaternion operator-(Quaternion rhs) { return rhs * -1; }
Quaternion operator+(Quaternion lhs, const float rhs) { return lhs += rhs; }
Quaternion operator-(Quaternion lhs, const float rhs) { return lhs -= rhs; }
Quaternion operator*(Quaternion lhs, const float rhs) { return lhs *= rhs; }
Quaternion operator/(Quaternion lhs, const float rhs) { return lhs /= rhs; }
Quaternion operator+(const float lhs, Quaternion rhs) { return rhs += lhs; }
Quaternion operator-(const float lhs, Quaternion rhs) { return rhs -= lhs; }
Quaternion operator*(const float lhs, Quaternion rhs) { return rhs *= lhs; }
Quaternion operator/(const float lhs, Quaternion rhs) { return rhs /= lhs; }
Quaternion operator+(Quaternion lhs, const Quaternion rhs)
{
return lhs += rhs;
}
Quaternion operator-(Quaternion lhs, const Quaternion rhs)
{
return lhs -= rhs;
}
Quaternion operator*(Quaternion lhs, const Quaternion rhs)
{
return lhs *= rhs;
}
Vector3 operator*(Quaternion lhs, const Vector3 rhs)
{
Vector3 u = Vector3(lhs.X, lhs.Y, lhs.Z);
float s = lhs.W;
return u * (Vector3::Dot(u, rhs) * 2)
+ rhs * (s * s - Vector3::Dot(u, u))
+ Vector3::Cross(u, rhs) * (2.0 * s);
}
bool operator==(const Quaternion lhs, const Quaternion rhs)
{
return lhs.X == rhs.X &&
lhs.Y == rhs.Y &&
lhs.Z == rhs.Z &&
lhs.W == rhs.W;
}
bool operator!=(const Quaternion lhs, const Quaternion rhs)
{
return !(lhs == rhs);
}
+528
View File
@@ -0,0 +1,528 @@
#pragma once
#define _USE_MATH_DEFINES
#include <math.h>
struct Vector2
{
union
{
struct
{
float X;
float Y;
};
float data[2];
};
/**
* Constructors.
*/
inline Vector2();
inline Vector2(float data[]);
inline Vector2(float value);
inline Vector2(float x, float y);
/**
* Constants for common vectors.
*/
static inline Vector2 Zero();
static inline Vector2 One();
static inline Vector2 Right();
static inline Vector2 Left();
static inline Vector2 Up();
static inline Vector2 Down();
//=====𝗦𝗥𝗖==𝗝𝗢𝗜𝗡==𝗧𝗘𝗟𝗘𝗚𝗥𝗔𝗠=@𝗚𝗞𝗣𝗙𝗥𝗘𝗘𝗛𝗔𝗖𝗞𝗦===@GKPHACK===V=2.4==//
static inline float Angle(Vector2 a, Vector2 b);
/**
* Returns a vector with its magnitude clamped to maxLength.
* @param vector: The target vector.
* @param maxLength: The maximum length of the return vector.
* @return: A new vector.
*/
static inline Vector2 ClampMagnitude(Vector2 vector, float maxLength);
/**
* Returns the component of a in the direction of b (scalar projection).
* @param a: The target vector.
* @param b: The vector being compared against.
* @return: A scalar value.
*/
static inline float Component(Vector2 a, Vector2 b);
/**
* Returns the distance between a and b.
* @param a: The first point.
* @param b: The second point.
* @return: A scalar value.
*/
static inline float Distance(Vector2 a, Vector2 b);
/**
* Returns the dot product of two vectors.
* @param lhs: The left side of the multiplication.
* @param rhs: The right side of the multiplication.
* @return: A scalar value.
*/
static inline float Dot(Vector2 lhs, Vector2 rhs);
/**
* Converts a polar representation of a vector into cartesian
* coordinates.
* @param rad: The magnitude of the vector.
* @param theta: The angle from the X axis.
* @return: A new vector.
*/
static inline Vector2 FromPolar(float rad, float theta);
/**
* Returns a vector linearly interpolated between a and b, moving along
* a straight line. The vector is clamped to never go beyond the end points.
* @param a: The starting point.
* @param b: The ending point.
* @param t: The interpolation value [0-1].
* @return: A new vector.
*/
static inline Vector2 Lerp(Vector2 a, Vector2 b, float t);
/**
* Returns a vector linearly interpolated between a and b, moving along
* a straight line.
* @param a: The starting point.
* @param b: The ending point.
* @param t: The interpolation value [0-1] (no actual bounds).
* @return: A new vector.
*/
static inline Vector2 LerpUnclamped(Vector2 a, Vector2 b, float t);
/**
* Returns the magnitude of a vector.
* @param v: The vector in question.
* @return: A scalar value.
*/
static inline float Magnitude(Vector2 v);
/**
* Returns a vector made from the largest components of two other vectors.
* @param a: The first vector.
* @param b: The second vector.
* @return: A new vector.
*/
static inline Vector2 Max(Vector2 a, Vector2 b);
/**
* Returns a vector made from the smallest components of two other vectors.
* @param a: The first vector.
* @param b: The second vector.
* @return: A new vector.
*/
static inline Vector2 Min(Vector2 a, Vector2 b);
/**
* Returns a vector "maxDistanceDelta" units closer to the target. This
* interpolation is in a straight line, and will not overshoot.
* @param current: The current position.
* @param target: The destination position.
* @param maxDistanceDelta: The maximum distance to move.
* @return: A new vector.
*/
static inline Vector2 MoveTowards(Vector2 current, Vector2 target,
float maxDistanceDelta);
/**
* Returns a new vector with magnitude of one.
* @param v: The vector in question.
* @return: A new vector.
*/
static inline Vector2 Normalized(Vector2 v);
/**
* Creates a new coordinate system out of the two vectors.
* Normalizes "normal" and normalizes "tangent" and makes it orthogonal to
* "normal"..
* @param normal: A reference to the first axis vector.
* @param tangent: A reference to the second axis vector.
*/
static inline void OrthoNormalize(Vector2 &normal, Vector2 &tangent);
/**
* Returns the vector projection of a onto b.
* @param a: The target vector.
* @param b: The vector being projected onto.
* @return: A new vector.
*/
static inline Vector2 Project(Vector2 a, Vector2 b);
/**
* Returns a vector reflected about the provided line.
* This behaves as if there is a plane with the line as its normal, and the
* vector comes in and bounces off this plane.
* @param vector: The vector traveling inward at the imaginary plane.
* @param line: The line about which to reflect.
* @return: A new vector pointing outward from the imaginary plane.
*/
static inline Vector2 Reflect(Vector2 vector, Vector2 line);
/**
* Returns the vector rejection of a on b.
* @param a: The target vector.
* @param b: The vector being projected onto.
* @return: A new vector.
*/
static inline Vector2 Reject(Vector2 a, Vector2 b);
/**
* Rotates vector "current" towards vector "target" by "maxRadiansDelta".
* This treats the vectors as directions and will linearly interpolate
* between their magnitudes by "maxMagnitudeDelta". This function does not
* overshoot. If a negative delta is supplied, it will rotate away from
* "target" until it is pointing the opposite direction, but will not
* overshoot that either.
* @param current: The starting direction.
* @param target: The destination direction.
* @param maxRadiansDelta: The maximum number of radians to rotate.
* @param maxMagnitudeDelta: The maximum delta for magnitude interpolation.
* @return: A new vector.
*/
static inline Vector2 RotateTowards(Vector2 current, Vector2 target,
float maxRadiansDelta,
float maxMagnitudeDelta);
/**
* Multiplies two vectors component-wise.
* @param a: The lhs of the multiplication.
* @param b: The rhs of the multiplication.
* @return: A new vector.
*/
static inline Vector2 Scale(Vector2 a, Vector2 b);
/**
* Returns a vector rotated towards b from a by the percent t.
* Since interpolation is done spherically, the vector moves at a constant
* angular velocity. This rotation is clamped to 0 <= t <= 1.
* @param a: The starting direction.
* @param b: The ending direction.
* @param t: The interpolation value [0-1].
*/
static inline Vector2 Slerp(Vector2 a, Vector2 b, float t);
/**
* Returns a vector rotated towards b from a by the percent t.
* Since interpolation is done spherically, the vector moves at a constant
* angular velocity. This rotation is unclamped.
* @param a: The starting direction.
* @param b: The ending direction.
* @param t: The interpolation value [0-1].
*/
static inline Vector2 SlerpUnclamped(Vector2 a, Vector2 b, float t);
/**
* Returns the squared magnitude of a vector.
* This is useful when comparing relative lengths, where the exact length
* is not important, and much time can be saved by not calculating the
* square root.
* @param v: The vector in question.
* @return: A scalar value.
*/
static inline float SqrMagnitude(Vector2 v);
/**
* Calculates the polar coordinate space representation of a vector.
* @param vector: The vector to convert.
* @param rad: The magnitude of the vector.
* @param theta: The angle from the X axis.
*/
static inline void ToPolar(Vector2 vector, float &rad, float &theta);
/**
* Operator overloading.
*/
inline struct Vector2& operator+=(const float rhs);
inline struct Vector2& operator-=(const float rhs);
inline struct Vector2& operator*=(const float rhs);
inline struct Vector2& operator/=(const float rhs);
inline struct Vector2& operator+=(const Vector2 rhs);
inline struct Vector2& operator-=(const Vector2 rhs);
};
inline Vector2 operator-(Vector2 rhs);
inline Vector2 operator+(Vector2 lhs, const float rhs);
inline Vector2 operator-(Vector2 lhs, const float rhs);
inline Vector2 operator*(Vector2 lhs, const float rhs);
inline Vector2 operator/(Vector2 lhs, const float rhs);
inline Vector2 operator+(const float lhs, Vector2 rhs);
inline Vector2 operator-(const float lhs, Vector2 rhs);
inline Vector2 operator*(const float lhs, Vector2 rhs);
inline Vector2 operator/(const float lhs, Vector2 rhs);
inline Vector2 operator+(Vector2 lhs, const Vector2 rhs);
inline Vector2 operator-(Vector2 lhs, const Vector2 rhs);
inline bool operator==(const Vector2 lhs, const Vector2 rhs);
inline bool operator!=(const Vector2 lhs, const Vector2 rhs);
/*******************************************************************************
* Implementation
*/
Vector2::Vector2() : X(0), Y(0) {}
Vector2::Vector2(float data[]) : X(data[0]), Y(data[1]) {}
Vector2::Vector2(float value) : X(value), Y(value) {}
Vector2::Vector2(float x, float y) : X(x), Y(y) {}
Vector2 Vector2::Zero() { return Vector2(0, 0); }
Vector2 Vector2::One() { return Vector2(1, 1); }
Vector2 Vector2::Right() { return Vector2(1, 0); }
Vector2 Vector2::Left() { return Vector2(-1, 0); }
Vector2 Vector2::Up() { return Vector2(0, 1); }
Vector2 Vector2::Down() { return Vector2(0, -1); }
float Vector2::Angle(Vector2 a, Vector2 b)
{
float v = Dot(a, b) / (Magnitude(a) * Magnitude(b));
v = fmax(v, -1.0);
v = fmin(v, 1.0);
return acos(v);
}
Vector2 Vector2::ClampMagnitude(Vector2 vector, float maxLength)
{
float length = Magnitude(vector);
if (length > maxLength)
vector *= maxLength / length;
return vector;
}
float Vector2::Component(Vector2 a, Vector2 b)
{
return Dot(a, b) / Magnitude(b);
}
float Vector2::Distance(Vector2 a, Vector2 b)
{
return Vector2::Magnitude(a - b);
}
float Vector2::Dot(Vector2 lhs, Vector2 rhs)
{
return lhs.X * rhs.X + lhs.Y * rhs.Y;
}
Vector2 Vector2::FromPolar(float rad, float theta)
{
Vector2 v;
v.X = rad * cos(theta);
v.Y = rad * sin(theta);
return v;
}
Vector2 Vector2::Lerp(Vector2 a, Vector2 b, float t)
{
if (t < 0) return a;
else if (t > 1) return b;
return LerpUnclamped(a, b, t);
}
Vector2 Vector2::LerpUnclamped(Vector2 a, Vector2 b, float t)
{
return (b - a) * t + a;
}
float Vector2::Magnitude(Vector2 v)
{
return sqrt(SqrMagnitude(v));
}
Vector2 Vector2::Max(Vector2 a, Vector2 b)
{
float x = a.X > b.X ? a.X : b.X;
float y = a.Y > b.Y ? a.Y : b.Y;
return Vector2(x, y);
}
Vector2 Vector2::Min(Vector2 a, Vector2 b)
{
float x = a.X > b.X ? b.X : a.X;
float y = a.Y > b.Y ? b.Y : a.Y;
return Vector2(x, y);
}
Vector2 Vector2::MoveTowards(Vector2 current, Vector2 target,
float maxDistanceDelta)
{
Vector2 d = target - current;
float m = Magnitude(d);
if (m < maxDistanceDelta || m == 0)
return target;
return current + (d * maxDistanceDelta / m);
}
Vector2 Vector2::Normalized(Vector2 v)
{
float mag = Magnitude(v);
if (mag == 0)
return Vector2::Zero();
return v / mag;
}
void Vector2::OrthoNormalize(Vector2 &normal, Vector2 &tangent)
{
normal = Normalized(normal);
tangent = Reject(tangent, normal);
tangent = Normalized(tangent);
}
Vector2 Vector2::Project(Vector2 a, Vector2 b)
{
float m = Magnitude(b);
return Dot(a, b) / (m * m) * b;
}
Vector2 Vector2::Reflect(Vector2 vector, Vector2 planeNormal)
{
return vector - 2 * Project(vector, planeNormal);
}
Vector2 Vector2::Reject(Vector2 a, Vector2 b)
{
return a - Project(a, b);
}
Vector2 Vector2::RotateTowards(Vector2 current, Vector2 target,
float maxRadiansDelta,
float maxMagnitudeDelta)
{
float magCur = Magnitude(current);
float magTar = Magnitude(target);
float newMag = magCur + maxMagnitudeDelta *
((magTar > magCur) - (magCur > magTar));
newMag = fmin(newMag, fmax(magCur, magTar));
newMag = fmax(newMag, fmin(magCur, magTar));
float totalAngle = Angle(current, target) - maxRadiansDelta;
if (totalAngle <= 0)
return Normalized(target) * newMag;
else if (totalAngle >= M_PI)
return Normalized(-target) * newMag;
float axis = current.X * target.Y - current.Y * target.X;
axis = axis / fabs(axis);
if (!(1 - fabs(axis) < 0.00001))
axis = 1;
current = Normalized(current);
Vector2 newVector = current * cos(maxRadiansDelta) +
Vector2(-current.Y, current.X) * sin(maxRadiansDelta) * axis;
return newVector * newMag;
}
Vector2 Vector2::Scale(Vector2 a, Vector2 b)
{
return Vector2(a.X * b.X, a.Y * b.Y);
}
Vector2 Vector2::Slerp(Vector2 a, Vector2 b, float t)
{
if (t < 0) return a;
else if (t > 1) return b;
return SlerpUnclamped(a, b, t);
}
Vector2 Vector2::SlerpUnclamped(Vector2 a, Vector2 b, float t)
{
float magA = Magnitude(a);
float magB = Magnitude(b);
a /= magA;
b /= magB;
float dot = Dot(a, b);
dot = fmax(dot, -1.0);
dot = fmin(dot, 1.0);
float theta = acos(dot) * t;
Vector2 relativeVec = Normalized(b - a * dot);
Vector2 newVec = a * cos(theta) + relativeVec * sin(theta);
return newVec * (magA + (magB - magA) * t);
}
float Vector2::SqrMagnitude(Vector2 v)
{
return v.X * v.X + v.Y * v.Y;
}
void Vector2::ToPolar(Vector2 vector, float &rad, float &theta)
{
rad = Magnitude(vector);
theta = atan2(vector.Y, vector.X);
}
struct Vector2& Vector2::operator+=(const float rhs)
{
X += rhs;
Y += rhs;
return *this;
}
struct Vector2& Vector2::operator-=(const float rhs)
{
X -= rhs;
Y -= rhs;
return *this;
}
struct Vector2& Vector2::operator*=(const float rhs)
{
X *= rhs;
Y *= rhs;
return *this;
}
struct Vector2& Vector2::operator/=(const float rhs)
{
X /= rhs;
Y /= rhs;
return *this;
}
struct Vector2& Vector2::operator+=(const Vector2 rhs)
{
X += rhs.X;
Y += rhs.Y;
return *this;
}
struct Vector2& Vector2::operator-=(const Vector2 rhs)
{
X -= rhs.X;
Y -= rhs.Y;
return *this;
}
Vector2 operator-(Vector2 rhs) { return rhs * -1; }
Vector2 operator+(Vector2 lhs, const float rhs) { return lhs += rhs; }
Vector2 operator-(Vector2 lhs, const float rhs) { return lhs -= rhs; }
Vector2 operator*(Vector2 lhs, const float rhs) { return lhs *= rhs; }
Vector2 operator/(Vector2 lhs, const float rhs) { return lhs /= rhs; }
Vector2 operator+(const float lhs, Vector2 rhs) { return rhs += lhs; }
Vector2 operator-(const float lhs, Vector2 rhs) { return rhs -= lhs; }
Vector2 operator*(const float lhs, Vector2 rhs) { return rhs *= lhs; }
Vector2 operator/(const float lhs, Vector2 rhs) { return rhs /= lhs; }
Vector2 operator+(Vector2 lhs, const Vector2 rhs) { return lhs += rhs; }
Vector2 operator-(Vector2 lhs, const Vector2 rhs) { return lhs -= rhs; }
bool operator==(const Vector2 lhs, const Vector2 rhs)
{
return lhs.X == rhs.X && lhs.Y == rhs.Y;
}
bool operator!=(const Vector2 lhs, const Vector2 rhs)
{
return !(lhs == rhs);
}
+625
View File
@@ -0,0 +1,625 @@
#pragma once
#define _USE_MATH_DEFINES
#include <math.h>
struct Vector3
{
union
{
struct
{
float X;
float Y;
float Z;
};
float data[3];
};
//=====𝗦𝗥𝗖==𝗝𝗢𝗜𝗡==𝗧𝗘𝗟𝗘𝗚𝗥𝗔𝗠=@𝗚𝗞𝗣𝗙𝗥𝗘𝗘𝗛𝗔𝗖𝗞𝗦===@GKPHACK===V=2.4==//
inline Vector3();
inline Vector3(float data[]);
inline Vector3(float value);
inline Vector3(float x, float y);
inline Vector3(float x, float y, float z);
/**
* Constants for common vectors.
*/
static inline Vector3 Zero();
static inline Vector3 One();
static inline Vector3 Right();
static inline Vector3 Left();
static inline Vector3 Up();
static inline Vector3 Down();
static inline Vector3 Forward();
static inline Vector3 Backward();
/**
* Returns the angle between two vectors in radians.
* @param a: The first vector.
* @param b: The second vector.
* @return: A scalar value.
*/
static inline float Angle(Vector3 a, Vector3 b);
/**
* Returns a vector with its magnitude clamped to maxLength.
* @param vector: The target vector.
* @param maxLength: The maximum length of the return vector.
* @return: A new vector.
*/
static inline Vector3 ClampMagnitude(Vector3 vector, float maxLength);
/**
* Returns the component of a in the direction of b (scalar projection).
* @param a: The target vector.
* @param b: The vector being compared against.
* @return: A scalar value.
*/
static inline float Component(Vector3 a, Vector3 b);
/**
* Returns the cross product of two vectors.
* @param lhs: The left side of the multiplication.
* @param rhs: The right side of the multiplication.
* @return: A new vector.
*/
static inline Vector3 Cross(Vector3 lhs, Vector3 rhs);
/**
* Returns the distance between a and b.
* @param a: The first point.
* @param b: The second point.
* @return: A scalar value.
*/
static inline float Distance(Vector3 a, Vector3 b);
static inline char ToChar(Vector3 a);
/**
* Returns the dot product of two vectors.
* @param lhs: The left side of the multiplication.
* @param rhs: The right side of the multiplication.
* @return: A scalar value.
*/
static inline float Dot(Vector3 lhs, Vector3 rhs);
/**
* Converts a spherical representation of a vector into cartesian
* coordinates.
* This uses the ISO convention (radius r, inclination theta, azimuth phi).
* @param rad: The magnitude of the vector.
* @param theta: The angle in the XY plane from the X axis.
* @param phi: The angle from the positive Z axis to the vector.
* @return: A new vector.
*/
static inline Vector3 FromSpherical(float rad, float theta, float phi);
/**
* Returns a vector linearly interpolated between a and b, moving along
* a straight line. The vector is clamped to never go beyond the end points.
* @param a: The starting point.
* @param b: The ending point.
* @param t: The interpolation value [0-1].
* @return: A new vector.
*/
static inline Vector3 Lerp(Vector3 a, Vector3 b, float t);
/**
* Returns a vector linearly interpolated between a and b, moving along
* a straight line.
* @param a: The starting point.
* @param b: The ending point.
* @param t: The interpolation value [0-1] (no actual bounds).
* @return: A new vector.
*/
static inline Vector3 LerpUnclamped(Vector3 a, Vector3 b, float t);
/**
* Returns the magnitude of a vector.
* @param v: The vector in question.
* @return: A scalar value.
*/
static inline float Magnitude(Vector3 v);
/**
* Returns a vector made from the largest components of two other vectors.
* @param a: The first vector.
* @param b: The second vector.
* @return: A new vector.
*/
static inline Vector3 Max(Vector3 a, Vector3 b);
/**
* Returns a vector made from the smallest components of two other vectors.
* @param a: The first vector.
* @param b: The second vector.
* @return: A new vector.
*/
static inline Vector3 Min(Vector3 a, Vector3 b);
/**
* Returns a vector "maxDistanceDelta" units closer to the target. This
* interpolation is in a straight line, and will not overshoot.
* @param current: The current position.
* @param target: The destination position.
* @param maxDistanceDelta: The maximum distance to move.
* @return: A new vector.
*/
static inline Vector3 MoveTowards(Vector3 current, Vector3 target,
float maxDistanceDelta);
/**
* Returns a new vector with magnitude of one.
* @param v: The vector in question.
* @return: A new vector.
*/
static inline Vector3 Normalized(Vector3 v);
/**
* Returns an arbitrary vector orthogonal to the input.
* This vector is not normalized.
* @param v: The input vector.
* @return: A new vector.
*/
static inline Vector3 Orthogonal(Vector3 v);
/**
* Creates a new coordinate system out of the three vectors.
* Normalizes "normal", normalizes "tangent" and makes it orthogonal to
* "normal" and normalizes "binormal" and makes it orthogonal to both
* "normal" and "tangent".
* @param normal: A reference to the first axis vector.
* @param tangent: A reference to the second axis vector.
* @param binormal: A reference to the third axis vector.
*/
static inline void OrthoNormalize(Vector3 &normal, Vector3 &tangent,
Vector3 &binormal);
/**
* Returns the vector projection of a onto b.
* @param a: The target vector.
* @param b: The vector being projected onto.
* @return: A new vector.
*/
static inline Vector3 Project(Vector3 a, Vector3 b);
/**
* Returns a vector projected onto a plane orthogonal to "planeNormal".
* This can be visualized as the shadow of the vector onto the plane, if
* the light source were in the direction of the plane normal.
* @param vector: The vector to project.
* @param planeNormal: The normal of the plane onto which to project.
* @param: A new vector.
*/
static inline Vector3 ProjectOnPlane(Vector3 vector, Vector3 planeNormal);
/**
* Returns a vector reflected off the plane orthogonal to the normal.
* The input vector is pointed inward, at the plane, and the return vector
* is pointed outward from the plane, like a beam of light hitting and then
* reflecting off a mirror.
* @param vector: The vector traveling inward at the plane.
* @param planeNormal: The normal of the plane off of which to reflect.
* @return: A new vector pointing outward from the plane.
*/
static inline Vector3 Reflect(Vector3 vector, Vector3 planeNormal);
/**
* Returns the vector rejection of a on b.
* @param a: The target vector.
* @param b: The vector being projected onto.
* @return: A new vector.
*/
static inline Vector3 Reject(Vector3 a, Vector3 b);
/**
* Rotates vector "current" towards vector "target" by "maxRadiansDelta".
* This treats the vectors as directions and will linearly interpolate
* between their magnitudes by "maxMagnitudeDelta". This function does not
* overshoot. If a negative delta is supplied, it will rotate away from
* "target" until it is pointing the opposite direction, but will not
* overshoot that either.
* @param current: The starting direction.
* @param target: The destination direction.
* @param maxRadiansDelta: The maximum number of radians to rotate.
* @param maxMagnitudeDelta: The maximum delta for magnitude interpolation.
* @return: A new vector.
*/
static inline Vector3 RotateTowards(Vector3 current, Vector3 target,
float maxRadiansDelta,
float maxMagnitudeDelta);
/**
* Multiplies two vectors element-wise.
* @param a: The lhs of the multiplication.
* @param b: The rhs of the multiplication.
* @return: A new vector.
*/
static inline Vector3 Scale(Vector3 a, Vector3 b);
/**
* Returns a vector rotated towards b from a by the percent t.
* Since interpolation is done spherically, the vector moves at a constant
* angular velocity. This rotation is clamped to 0 <= t <= 1.
* @param a: The starting direction.
* @param b: The ending direction.
* @param t: The interpolation value [0-1].
*/
static inline Vector3 Slerp(Vector3 a, Vector3 b, float t);
/**
* Returns a vector rotated towards b from a by the percent t.
* Since interpolation is done spherically, the vector moves at a constant
* angular velocity. This rotation is unclamped.
* @param a: The starting direction.
* @param b: The ending direction.
* @param t: The interpolation value [0-1].
*/
static inline Vector3 SlerpUnclamped(Vector3 a, Vector3 b, float t);
/**
* Returns the squared magnitude of a vector.
* This is useful when comparing relative lengths, where the exact length
* is not important, and much time can be saved by not calculating the
* square root.
* @param v: The vector in question.
* @return: A scalar value.
*/
static inline float SqrMagnitude(Vector3 v);
/**
* Calculates the spherical coordinate space representation of a vector.
* This uses the ISO convention (radius r, inclination theta, azimuth phi).
* @param vector: The vector to convert.
* @param rad: The magnitude of the vector.
* @param theta: The angle in the XY plane from the X axis.
* @param phi: The angle from the positive Z axis to the vector.
*/
static inline void ToSpherical(Vector3 vector, float &rad, float &theta,
float &phi);
/**
* Operator overloading.
*/
inline struct Vector3& operator+=(const float rhs);
inline struct Vector3& operator-=(const float rhs);
inline struct Vector3& operator*=(const float rhs);
inline struct Vector3& operator/=(const float rhs);
inline struct Vector3& operator+=(const Vector3 rhs);
inline struct Vector3& operator-=(const Vector3 rhs);
};
inline Vector3 operator-(Vector3 rhs);
inline Vector3 operator+(Vector3 lhs, const float rhs);
inline Vector3 operator-(Vector3 lhs, const float rhs);
inline Vector3 operator*(Vector3 lhs, const float rhs);
inline Vector3 operator/(Vector3 lhs, const float rhs);
inline Vector3 operator+(const float lhs, Vector3 rhs);
inline Vector3 operator-(const float lhs, Vector3 rhs);
inline Vector3 operator*(const float lhs, Vector3 rhs);
inline Vector3 operator/(const float lhs, Vector3 rhs);
inline Vector3 operator+(Vector3 lhs, const Vector3 rhs);
inline Vector3 operator-(Vector3 lhs, const Vector3 rhs);
inline bool operator==(const Vector3 lhs, const Vector3 rhs);
inline bool operator!=(const Vector3 lhs, const Vector3 rhs);
/*******************************************************************************
* Implementation
*/
Vector3::Vector3() : X(0), Y(0), Z(0) {}
Vector3::Vector3(float data[]) : X(data[0]), Y(data[1]), Z(data[2]) {}
Vector3::Vector3(float value) : X(value), Y(value), Z(value) {}
Vector3::Vector3(float x, float y) : X(x), Y(y), Z(0) {}
Vector3::Vector3(float x, float y, float z) : X(x), Y(y), Z(z) {}
Vector3 Vector3::Zero() { return Vector3(0, 0, 0); }
Vector3 Vector3::One() { return Vector3(1, 1, 1); }
Vector3 Vector3::Right() { return Vector3(1, 0, 0); }
Vector3 Vector3::Left() { return Vector3(-1, 0, 0); }
Vector3 Vector3::Up() { return Vector3(0, 1, 0); }
Vector3 Vector3::Down() { return Vector3(0, -1, 0); }
Vector3 Vector3::Forward() { return Vector3(0, 0, 1); }
Vector3 Vector3::Backward() { return Vector3(0, 0, -1); }
float Vector3::Angle(Vector3 a, Vector3 b)
{
float v = Dot(a, b) / (Magnitude(a) * Magnitude(b));
v = fmax(v, -1.0);
v = fmin(v, 1.0);
return acos(v);
}
Vector3 Vector3::ClampMagnitude(Vector3 vector, float maxLength)
{
float length = Magnitude(vector);
if (length > maxLength)
vector *= maxLength / length;
return vector;
}
float Vector3::Component(Vector3 a, Vector3 b)
{
return Dot(a, b) / Magnitude(b);
}
Vector3 Vector3::Cross(Vector3 lhs, Vector3 rhs)
{
float x = lhs.Y * rhs.Z - lhs.Z * rhs.Y;
float y = lhs.Z * rhs.X - lhs.X * rhs.Z;
float z = lhs.X * rhs.Y - lhs.Y * rhs.X;
return Vector3(x, y, z);
}
float Vector3::Distance(Vector3 a, Vector3 b)
{
return Vector3::Magnitude(a - b);
}
float Vector3::Dot(Vector3 lhs, Vector3 rhs)
{
return lhs.X * rhs.X + lhs.Y * rhs.Y + lhs.Z * rhs.Z;
}
Vector3 Vector3::FromSpherical(float rad, float theta, float phi)
{
Vector3 v;
v.X = rad * sin(theta) * cos(phi);
v.Y = rad * sin(theta) * sin(phi);
v.Z = rad * cos(theta);
return v;
}
Vector3 Vector3::Lerp(Vector3 a, Vector3 b, float t)
{
if (t < 0) return a;
else if (t > 1) return b;
return LerpUnclamped(a, b, t);
}
Vector3 Vector3::LerpUnclamped(Vector3 a, Vector3 b, float t)
{
return (b - a) * t + a;
}
float Vector3::Magnitude(Vector3 v)
{
return sqrt(SqrMagnitude(v));
}
Vector3 Vector3::Max(Vector3 a, Vector3 b)
{
float x = a.X > b.X ? a.X : b.X;
float y = a.Y > b.Y ? a.Y : b.Y;
float z = a.Z > b.Z ? a.Z : b.Z;
return Vector3(x, y, z);
}
Vector3 Vector3::Min(Vector3 a, Vector3 b)
{
float x = a.X > b.X ? b.X : a.X;
float y = a.Y > b.Y ? b.Y : a.Y;
float z = a.Z > b.Z ? b.Z : a.Z;
return Vector3(x, y, z);
}
Vector3 Vector3::MoveTowards(Vector3 current, Vector3 target,
float maxDistanceDelta)
{
Vector3 d = target - current;
float m = Magnitude(d);
if (m < maxDistanceDelta || m == 0)
return target;
return current + (d * maxDistanceDelta / m);
}
Vector3 Vector3::Normalized(Vector3 v)
{
float mag = Magnitude(v);
if (mag == 0)
return Vector3::Zero();
return v / mag;
}
Vector3 Vector3::Orthogonal(Vector3 v)
{
return v.Z < v.X ? Vector3(v.Y, -v.X, 0) : Vector3(0, -v.Z, v.Y);
}
void Vector3::OrthoNormalize(Vector3 &normal, Vector3 &tangent,
Vector3 &binormal)
{
normal = Normalized(normal);
tangent = ProjectOnPlane(tangent, normal);
tangent = Normalized(tangent);
binormal = ProjectOnPlane(binormal, tangent);
binormal = ProjectOnPlane(binormal, normal);
binormal = Normalized(binormal);
}
Vector3 Vector3::Project(Vector3 a, Vector3 b)
{
float m = Magnitude(b);
return Dot(a, b) / (m * m) * b;
}
Vector3 Vector3::ProjectOnPlane(Vector3 vector, Vector3 planeNormal)
{
return Reject(vector, planeNormal);
}
Vector3 Vector3::Reflect(Vector3 vector, Vector3 planeNormal)
{
return vector - 2 * Project(vector, planeNormal);
}
Vector3 Vector3::Reject(Vector3 a, Vector3 b)
{
return a - Project(a, b);
}
Vector3 Vector3::RotateTowards(Vector3 current, Vector3 target,
float maxRadiansDelta,
float maxMagnitudeDelta)
{
float magCur = Magnitude(current);
float magTar = Magnitude(target);
float newMag = magCur + maxMagnitudeDelta *
((magTar > magCur) - (magCur > magTar));
newMag = fmin(newMag, fmax(magCur, magTar));
newMag = fmax(newMag, fmin(magCur, magTar));
float totalAngle = Angle(current, target) - maxRadiansDelta;
if (totalAngle <= 0)
return Normalized(target) * newMag;
else if (totalAngle >= M_PI)
return Normalized(-target) * newMag;
Vector3 axis = Cross(current, target);
float magAxis = Magnitude(axis);
if (magAxis == 0)
axis = Normalized(Cross(current, current + Vector3(3.95, 5.32, -4.24)));
else
axis /= magAxis;
current = Normalized(current);
Vector3 newVector = current * cos(maxRadiansDelta) +
Cross(axis, current) * sin(maxRadiansDelta);
return newVector * newMag;
}
Vector3 Vector3::Scale(Vector3 a, Vector3 b)
{
return Vector3(a.X * b.X, a.Y * b.Y, a.Z * b.Z);
}
Vector3 Vector3::Slerp(Vector3 a, Vector3 b, float t)
{
if (t < 0) return a;
else if (t > 1) return b;
return SlerpUnclamped(a, b, t);
}
Vector3 Vector3::SlerpUnclamped(Vector3 a, Vector3 b, float t)
{
float magA = Magnitude(a);
float magB = Magnitude(b);
a /= magA;
b /= magB;
float dot = Dot(a, b);
dot = fmax(dot, -1.0);
dot = fmin(dot, 1.0);
float theta = acos(dot) * t;
Vector3 relativeVec = Normalized(b - a * dot);
Vector3 newVec = a * cos(theta) + relativeVec * sin(theta);
return newVec * (magA + (magB - magA) * t);
}
float Vector3::SqrMagnitude(Vector3 v)
{
return v.X * v.X + v.Y * v.Y + v.Z * v.Z;
}
void Vector3::ToSpherical(Vector3 vector, float &rad, float &theta,
float &phi)
{
rad = Magnitude(vector);
float v = vector.Z / rad;
v = fmax(v, -1.0);
v = fmin(v, 1.0);
theta = acos(v);
phi = atan2(vector.Y, vector.X);
}
struct Vector3& Vector3::operator+=(const float rhs)
{
X += rhs;
Y += rhs;
Z += rhs;
return *this;
}
struct Vector3& Vector3::operator-=(const float rhs)
{
X -= rhs;
Y -= rhs;
Z -= rhs;
return *this;
}
struct Vector3& Vector3::operator*=(const float rhs)
{
X *= rhs;
Y *= rhs;
Z *= rhs;
return *this;
}
struct Vector3& Vector3::operator/=(const float rhs)
{
X /= rhs;
Y /= rhs;
Z /= rhs;
return *this;
}
struct Vector3& Vector3::operator+=(const Vector3 rhs)
{
X += rhs.X;
Y += rhs.Y;
Z += rhs.Z;
return *this;
}
struct Vector3& Vector3::operator-=(const Vector3 rhs)
{
X -= rhs.X;
Y -= rhs.Y;
Z -= rhs.Z;
return *this;
}
char Vector3::ToChar(Vector3 a) {
const char* x = (const char*)(int)a.X;
const char* y = (const char*)(int)a.Y;
const char* z = (const char*)(int)a.Z;
char buffer[25];
strncpy(buffer, x, sizeof(buffer));
strncpy(buffer, ", ", sizeof(buffer));
strncpy(buffer, y, sizeof(buffer));
strncpy(buffer, ", ", sizeof(buffer));
strncpy(buffer, z, sizeof(buffer));
strncpy(buffer, ", ", sizeof(buffer));
return buffer[25];
}
Vector3 operator-(Vector3 rhs) { return rhs * -1; }
Vector3 operator+(Vector3 lhs, const float rhs) { return lhs += rhs; }
Vector3 operator-(Vector3 lhs, const float rhs) { return lhs -= rhs; }
Vector3 operator*(Vector3 lhs, const float rhs) { return lhs *= rhs; }
Vector3 operator/(Vector3 lhs, const float rhs) { return lhs /= rhs; }
Vector3 operator+(const float lhs, Vector3 rhs) { return rhs += lhs; }
Vector3 operator-(const float lhs, Vector3 rhs) { return rhs -= lhs; }
Vector3 operator*(const float lhs, Vector3 rhs) { return rhs *= lhs; }
Vector3 operator/(const float lhs, Vector3 rhs) { return rhs /= lhs; }
Vector3 operator+(Vector3 lhs, const Vector3 rhs) { return lhs += rhs; }
Vector3 operator-(Vector3 lhs, const Vector3 rhs) { return lhs -= rhs; }
bool operator==(const Vector3 lhs, const Vector3 rhs)
{
return lhs.X == rhs.X && lhs.Y == rhs.Y && lhs.Z == rhs.Z;
}
bool operator!=(const Vector3 lhs, const Vector3 rhs)
{
return !(lhs == rhs);
}
+142
View File
@@ -0,0 +1,142 @@
TNameEntryArray*GetGNames(){
return(TNameEntryArray*)getPointer(UE4+0x4431AE4);
}
static UEngine *GEngine = 0;
UWorld *GetWorld() {
while (!GEngine) {
GEngine = UObject::FindObject<UEngine>("UAEGameEngine Transient.UAEGameEngine_1");
sleep(1);
}
if (GEngine) {
auto ViewPort = GEngine->GameViewport;
if (ViewPort) {
return ViewPort->World;
} }
return 0;
}
#include <vector>
std::vector<AActor*> getActors()
{
auto World = GetWorld();
if (!World)
return std::vector<AActor*>();
auto PersistentLevel = World->PersistentLevel;
if (!PersistentLevel)
return std::vector<AActor*>();
auto Actors = *(TArray<AActor*> *)((uintptr_t)PersistentLevel + 0x70);
std::vector<AActor*> actors;
for (int i = 0; i < Actors.Num(); i++)
{
auto Actor = Actors[i];
if (Actor)
{
actors.push_back(Actor);
}
}
return actors;
}
struct sRegion {
uintptr_t start, end;
};
std::vector<sRegion> trapRegions;
bool isObjectInvalid(UObject *obj) {
if (!IsPtrValid(obj)) {
return true;
}
if (!IsPtrValid(obj->ClassPrivate)) {
return true;
}
if (obj->InternalIndex <= 0) {
return true;
}
if (obj->NamePrivate.ComparisonIndex <= 0) {
return true;
}
if ((uintptr_t)(obj) % sizeof(uintptr_t) != 0x0 && (uintptr_t)(obj) % sizeof(uintptr_t) != 0x4) {
return true;
}
if (std::any_of(trapRegions.begin(), trapRegions.end(), [obj](sRegion region) { return ((uintptr_t) obj) >= region.start && ((uintptr_t) obj) <= region.end; }) ||
std::any_of(trapRegions.begin(), trapRegions.end(), [obj](sRegion region) { return ((uintptr_t) obj->ClassPrivate) >= region.start && ((uintptr_t) obj->ClassPrivate) <= region.end; })) {
return true;
}
return false;
}
AUAEGameMode *GameMode=0;
ASTExtraPlayerCharacter *PlayerCharacter=0;
ASTExtraPlayerController *PlayerController2=0;
APlayerController *PlayerController=0;
AGameNetworkManager *NetworkManager = 0;
void GetActor(){
auto Actors = getActors();
for (int i = 0; i < Actors.size(); i++) {
auto Actor = Actors[i];
if (isObjectInvalid(Actor))
continue;
if (Actor->IsA(AGameNetworkManager::StaticClass())) {
NetworkManager = (AGameNetworkManager *) Actor;
break;
}
}
}
void (){
auto Actors = getActors();
for (int i = 0; i < Actors.size(); i++) {
auto Actor = Actors[i];
if (Actor->IsA(AUAEGameMode::StaticClass())) {
GameMode = (AUAEGameMode *) Actor;
break;
}
}
for (int i = 0; i < Actors.size(); i++) {
auto Actor = Actors[i];
if (Actor->IsA(ASTExtraPlayerCharacter::StaticClass())) {
PlayerCharacter = (ASTExtraPlayerCharacter *) Actor;
break;
}
}
for (int i = 0; i < Actors.size(); i++) {
auto Actor = Actors[i];
if (Actor->IsA(ASTExtraPlayerController::StaticClass())) {
PlayerController2 = (ASTExtraPlayerController *) Actor;
break;
}
}
for (int i = 0; i < Actors.size(); i++) {
auto Actor = Actors[i];
if (Actor->IsA(APlayerController::StaticClass())) {
PlayerController = (APlayerController *) Actor;
break;
}
}
}
void (){
();
GameMode->bEnableClimbing=true;
GameMode->bEnableDamage=true;
GameMode->bEnableDamage=20;
}
+215
View File
@@ -0,0 +1,215 @@
ASTExtraPlayerCharacter *g_LocalPlayer = 0;
ASTExtraPlayerController *g_LocalController = 0;
// ================= 语言设置和记忆功能 =================
enum class Language {
CHINESE,
ENGLISH
};
static Language currentLanguage = Language::CHINESE;
static const char* LANGUAGE_FILE = "/sdcard/pubg_menu_language.conf";
// 保存语言设置到文件
void SaveLanguageSetting() {
std::ofstream file(LANGUAGE_FILE);
if (file.is_open()) {
file << static_cast<int>(currentLanguage);
file.close();
}
}
// 从文件加载语言设置
void LoadLanguageSetting() {
std::ifstream file(LANGUAGE_FILE);
if (file.is_open()) {
int lang;
file >> lang;
currentLanguage = static_cast<Language>(lang);
file.close();
}
}
// 切换语言
void ToggleLanguage() {
currentLanguage = (currentLanguage == Language::CHINESE) ? Language::ENGLISH : Language::CHINESE;
SaveLanguageSetting();
}
// 多语言文本函数
const char* T(const char* chinese, const char* english) {
return (currentLanguage == Language::CHINESE) ? chinese : english;
}
#define IM_PI 3.14159265358979323846f
#define RAD2DEG(x) ((float)(x) * (float)(180.f / IM_PI))
#define DEG2RAD(x) ((float)(x) * (float)(IM_PI / 180.f))
ImColor 2 = ImColor(46,46,177);
ImColor =ImColor(226,145,163,255);
ImColor = ImColor(ImVec4(36/255.f, 249/255.f, 217/255.f, 255/255.f));
ImColor = ImColor(ImVec4(170/255.f, 203/255.f, 244/255.f, 0.95f));
ImColor = ImColor(ImVec4(255/255.f, 255/255.f, 258/255.f, 0.95f));
ImColor = ImColor(ImVec4(255/255.f, 200/255.f, 250/255.f, 0.95f));
ImColor = ImColor(ImVec4(0/255.f, 0/255.f, 0/255.f, 0.7f));
ImColor = ImColor(ImVec4(0/255.f, 0/255.f, 0/255.f, 0.18f));
ImColor = ImColor(ImVec4(0/255.f, 249/255.f, 0/255.f, 0.35f));
ImColor = ImColor(ImVec4(233/255.f, 55/255.f, 51/255.f, 0.95f));
ImColor 绿 = ImColor(ImVec4(50/255.f, 222/215.f, 50/255.f, 0.95f));
ImColor = ImColor(ImVec4(255/255.f, 255/255.f, 0/255.f, 0.95f));
ImColor = ImColor(ImVec4(255/255.f, 150/255.f, 30/255.f, 0.95f));
ImColor = ImColor(ImVec4(220/255.f, 108/255.f, 1202/255.f, 0.95f));
ImColor = ImColor(ImVec4(169/255.f, 120/255.f, 223/255.f, 0.95f));
ImColor = ImColor(ImVec4(1.0/255.f, 1.0/255.f, 1.0/255.f, 0.0f));
namespace Settings
{
static int Tab = 1;
}
std::string getClipboardTextt() {
if (!g_App)
return "";
auto activity = g_App->activity;
if (!activity)
return "";
auto vm = activity->vm;
if (!vm)
return "";
auto object = activity->clazz;
if (!object)
return "";
std::string result;
JNIEnv *env;
vm->AttachCurrentThread(&env, 0);
{
auto ContextClass = env->FindClass("android/content/Context");
auto getSystemServiceMethod = env->GetMethodID(ContextClass, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;");
auto str = env->NewStringUTF("clipboard");
auto clipboardManager = env->CallObjectMethod(object, getSystemServiceMethod, str);
env->DeleteLocalRef(str);
auto ClipboardManagerClass = env->FindClass("android/content/ClipboardManager");
auto getText = env->GetMethodID(ClipboardManagerClass, "getText", "()Ljava/lang/CharSequence;");
auto CharSequenceClass = env->FindClass("java/lang/CharSequence");
auto toStringMethod = env->GetMethodID(CharSequenceClass, "toString", "()Ljava/lang/String;");
auto text = env->CallObjectMethod(clipboardManager, getText);
if (text) {
str = (jstring) env->CallObjectMethod(text, toStringMethod);
result = env->GetStringUTFChars(str, 0);
env->DeleteLocalRef(str);
env->DeleteLocalRef(text);
}
env->DeleteLocalRef(CharSequenceClass);
env->DeleteLocalRef(ClipboardManagerClass);
env->DeleteLocalRef(clipboardManager);
env->DeleteLocalRef(ContextClass);
}
vm->DetachCurrentThread();
return result;
}
// 安全写入D内存
void safeWritedword(uintptr_t addr, int value) {
long pageSize = sysconf(_SC_PAGESIZE); // = 4096
uintptr_t pageStart = addr & ~(pageSize - 1);
if (mprotect((void*)(pageStart), pageSize * 2, PROT_READ | PROT_WRITE | PROT_EXEC) != 0) {
perror("mprotect failed");
return;
}
*((int*)addr) = value;
}
FVector WorldToRadar(float Yaw, FVector Origin, FVector LocalOrigin, float PosX, float PosY, Vector3 Size, bool &outbuff) {
bool flag = false;
double num = (double)Yaw;
double num2 = num * 0.017453292519943295;
float num3 = (float)std::cos(num2);
float num4 = (float)std::sin(num2);
float num5 = Origin.X - LocalOrigin.X;
float num6 = Origin.Y - LocalOrigin.Y;
struct FVector Xector;
Xector.X = (num6 * num3 - num5 * num4) / 150.f;
Xector.Y = (num5 * num3 + num6 * num4) / 150.f;
struct FVector Xector2;
Xector2.X = Xector.X + PosX + Size.X / 2.f;
Xector2.Y = -Xector.Y + PosY + Size.Y / 2.f;
bool flag2 = Xector2.X > PosX + Size.X;
if (flag2) {
Xector2.X = PosX + Size.X;
}else{
bool flag3 = Xector2.X < PosX;
if (flag3) {
Xector2.X = PosX;
}
}
bool flag4 = Xector2.Y > PosY + Size.Y;
if (flag4) {
Xector2.Y = PosY + Size.Y;
}else{
bool flag5 = Xector2.Y < PosY;
if (flag5){
Xector2.Y = PosY;
}
}
bool flag6 = Xector2.Y == PosY || Xector2.X == PosX;
if (flag6){
flag = true;
}
outbuff = flag;
return Xector2;
}
void VectorAnglesRadar(Vector3 & forward, FVector & angles) {
if (forward.X == 0.f && forward.Y == 0.f) {
angles.X = forward.Z > 0.f ? -90.f : 90.f;
angles.Y = 0.f;
} else {
angles.X = RAD2DEG(atan2(-forward.Z, forward.Magnitude(forward)));
angles.Y = RAD2DEG(atan2(forward.Y, forward.X));
}
angles.Z = 0.f;
}
void Box4Line(ImDrawList *draw, float thicc, int x, int y, int w, int h, int color) {
int iw = w / 4;
int ih = h / 4;
// top
draw->AddRect(ImVec2(x, y),ImVec2(x + iw, y), color, thicc);
draw->AddRect(ImVec2(x + w - iw, y),ImVec2(x + w, y), color, thicc);
draw->AddRect(ImVec2(x, y),ImVec2(x, y + ih), color, thicc);
draw->AddRect(ImVec2(x + w - 1, y),ImVec2(x + w - 1, y + ih), color, thicc);;
// bottom
draw->AddRect(ImVec2(x, y + h),ImVec2(x + iw, y + h), color, thicc);
draw->AddRect(ImVec2(x + w - iw, y + h),ImVec2(x + w, y + h), color, thicc);
draw->AddRect(ImVec2(x, y + h - ih), ImVec2(x, y + h), color, thicc);
draw->AddRect(ImVec2(x + w - 1, y + h - ih), ImVec2(x + w - 1, y + h), color, thicc);
}
void (float size, float x, float y, ImColor color, ImColor color1, const char* str)
{
ImGui::GetBackgroundDrawList()->AddText(NULL, size, {x-0.8, y-0.8}, color1, str);
ImGui::GetBackgroundDrawList()->AddText(NULL, size, {x+0.8, y+0.8}, color1, str);
ImGui::GetBackgroundDrawList()->AddText(NULL, size, {x, y}, color, str);
}
void RotateTriangle(std::array<Vector3, 3> & points, float rotation) {
const auto points_center = (points.at(0) + points.at(1) + points.at(2)) / 3;
for (auto & point : points) {
point = point - points_center;
const auto temp_x = point.X;
const auto temp_y = point.Y;
const auto theta = DEG2RAD(rotation);
const auto c = cosf(theta);
const auto s = sinf(theta);
point.X = temp_x * c - temp_y * s;
point.Y = temp_x * s + temp_y * c;
point = point + points_center;
}
}
+12
View File
@@ -0,0 +1,12 @@
#include "混淆.h"
size_t& _lxy_oxor_any_::X() {
static size_t x = 0;
return x;
}
size_t& _lxy_oxor_any_::Y() {
static size_t y = 0;
return y;
}
+699
View File
@@ -0,0 +1,699 @@
#ifndef 混淆_H
#define 混淆_H
#if _KERNEL_MODE
#ifndef _VCRUNTIME_DISABLED_WARNINGS
#define _VCRUNTIME_DISABLED_WARNINGS
#endif
#endif
#include <stdint.h>
#if _WIN32 || _WIN64
#if _WIN64
#define 混淆_ENVIRONMENT64
#else
#define 混淆_ENVIRONMENT32
#endif
#endif
#if __GNUC__
#if __x86_64__ || __ppc64__
#define 混淆_ENVIRONMENT64
#else
#define 混淆_ENVIRONMENT32
#endif
#endif
#ifdef _MSC_VER
#define 混淆_FORCEINLINE __forceinline
#else
#define 混淆_FORCEINLINE __attribute__((always_inline)) inline
#endif
#ifdef _DEBUG
#define 混淆
#define oxorvar
#else
#define 混淆(any) _lxy_oxor_any_::oxor_any<decltype(_lxy_oxor_any_::typeofs(any)), _lxy_oxor_any_::array_size(any), __COUNTER__>(any, _lxy_::make_index_sequence<sizeof(decltype(any))>()).get()
#define oxorvar(var) ((var) + 混淆(0))
#endif
namespace _lxy_ {
// https://stackoverflow.com/a/32223343/16602611
template <size_t... Ints>
struct index_sequence {
using type = index_sequence;
using value_type = size_t;
static constexpr size_t size() noexcept { return sizeof...(Ints); }
};
// --------------------------------------------------------------------
template <class Sequence1, class Sequence2>
struct _merge_and_renumber;
template <size_t... I1, size_t... I2>
struct _merge_and_renumber<index_sequence<I1...>, index_sequence<I2...>>
: index_sequence<I1..., (sizeof...(I1) + I2)...>
{ };
// --------------------------------------------------------------------
template <size_t N>
struct make_index_sequence
: _merge_and_renumber<typename make_index_sequence<N / 2>::type,
typename make_index_sequence<N - N / 2>::type>
{ };
template<> struct make_index_sequence<0> : index_sequence<> { };
template<> struct make_index_sequence<1> : index_sequence<0> { };
}
namespace _lxy_oxor_any_ {
/*
template <size_t ...>
struct indexSequence {
};
template <size_t N, size_t ... Next>
struct indexSequenceHelper : public indexSequenceHelper<N - 1U, N - 1U, Next...> {
};
template <size_t ... Next>
struct indexSequenceHelper<0U, Next ... > {
using type = indexSequence<Next ... >;
};
template <size_t N>
using makeIndexSequence = typename indexSequenceHelper<N>::type;
*/
size_t& X();
size_t& Y();
static constexpr size_t base_key = static_cast<size_t>(
(__TIME__[7] - '0') +
(__TIME__[6] - '0') * 10 +
(__TIME__[4] - '0') * 60 +
(__TIME__[3] - '0') * 600 +
(__TIME__[1] - '0') * 3600 +
(__TIME__[0] - '0') * 36000);
template<uint32_t s, size_t n>
class random_constant_32 {
static constexpr uint32_t x = s ^ (s << 13);
static constexpr uint32_t y = x ^ (x >> 17);
static constexpr uint32_t z = y ^ (y << 5);
public:
static constexpr uint32_t value = random_constant_32<z, n - 1>::value;
};
template<uint32_t s>
class random_constant_32<s, 0> {
public:
static constexpr uint32_t value = s;
};
template<uint64_t s, size_t n>
class random_constant_64 {
static constexpr uint64_t x = s ^ (s << 13);
static constexpr uint64_t y = x ^ (x >> 7);
static constexpr uint64_t z = y ^ (y << 17);
public:
static constexpr uint64_t value = random_constant_64<z, n - 1>::value;
};
template<uint64_t s>
class random_constant_64<s, 0> {
public:
static constexpr uint64_t value = s;
};
#ifdef 混淆_ENVIRONMENT64
#define random_constant random_constant_64
#else
#define random_constant random_constant_32
#endif
template<typename T, size_t size>
static _FORCEINLINE constexpr size_t array_size(const T(&)[size]) { return size; }
template<typename T>
static _FORCEINLINE constexpr size_t array_size(T) { return 0; }
template<typename T, size_t size>
static inline T typeofs(const T(&)[size]);
template<typename T>
static inline T typeofs(T);
template<size_t key>
static _FORCEINLINE constexpr uint8_t encrypt_byte(uint8_t c, size_t i) {
return static_cast<uint8_t>(((c + (key * 7)) ^ (i + key)));
}
template<size_t key>
static _FORCEINLINE constexpr uint8_t decrypt_byte(uint8_t c, size_t i) {
//a ^ b == (a + b) - 2 * (a & b)
size_t a = c;
size_t b = i + key;
//size_t a_xor_b = (a + b) - 2 * (a & b);
size_t a_xor_b = (a + b) - ((a & b) + (b & a));
return static_cast<uint8_t>((a_xor_b)-(key * 7));
}
template<size_t key>
static _FORCEINLINE constexpr size_t limit() {
constexpr size_t bcf_value[] = { 1,2,3,4,5, 6,8,9,10,16, 32,40,64,66,100, 128,512,1000,1024,4096, 'a','z','A','Z','*' };
return bcf_value[key % (sizeof(bcf_value) / sizeof(bcf_value[0]))];
}
template<typename return_type, size_t key, size_t size>
static _FORCEINLINE const return_type decrypt(uint8_t(&buffer)[size]) {
#ifndef 混淆_DISABLE_OBFUSCATION
uint8_t source;
uint8_t decrypted; //do not assign initial value
size_t stack_x;
size_t stack_y;
loc_start_1:
stack_x = X();
stack_y = Y();
loc_start_2:
for (size_t i = 0; i < size; i++) {
source = buffer[i];
loc_start_3:
if (stack_x <= i) {
if (stack_x < stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);//fake
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 1 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_9;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 2 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_8;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 3 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_7;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 4 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_6;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 5 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_5;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 6 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_4;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 7 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_3;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 8 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_2;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 9 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_1;
}
loc_start_4:
if (stack_y <= i) {
if (stack_x < stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);//fake
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 1 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_1;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 2 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_2;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 3 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_3;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 4 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_4;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 5 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_5;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 6 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_6;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 7 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_7;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 8 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_8;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 9 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_9;
}
loc_start_5:
if (stack_x + stack_y <= i) {
if (stack_x < stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key>(source, i);//real
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 1 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_9;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 2 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_8;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 3 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_7;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 4 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_6;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 5 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_5;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 6 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_4;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 7 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_3;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 8 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_2;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 9 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_1;
}
loc_start_6:
if (stack_x + stack_y != limit<key * __COUNTER__>()) {
if (stack_x > stack_y + limit<key * __COUNTER__>()) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 1 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_1;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 2 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_2;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 3 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_3;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 4 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_4;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 5 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_5;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 6 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_6;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 7 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_7;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 8 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_8;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 9 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_9;
}
loc_start_7:
if (stack_x < limit<key * __COUNTER__>()) {
if (stack_x > stack_y + limit<key * __COUNTER__>()) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 1 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_9;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 2 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_8;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 3 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_7;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 4 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_6;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 5 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_5;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 6 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_4;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 7 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_3;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 8 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_2;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>() % 9 + 1) {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_1;
}
loc_start_8:
if (stack_y < limit<key * __COUNTER__>()) {
loc_start_9:
buffer[i] = decrypted;//assign
}
else {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
decrypted += decrypted;
loc_unreachable_1:
buffer[i] = decrypt_byte<key* __COUNTER__>(source, i);
loc_unreachable_2:
stack_y++;
loc_unreachable_3:
i--;
}
}
else {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
decrypted += buffer[i];
loc_unreachable_4:
buffer[i] = decrypt_byte<key* __COUNTER__>(source, i);
buffer[i] += decrypted;
loc_unreachable_5:
stack_x += stack_y;
loc_unreachable_6:
i--;
i -= decrypted;
}
}
else {
//unreachable
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
decrypted -= buffer[i];
loc_unreachable_7:
buffer[i] = decrypt_byte<key* __COUNTER__>(source, i);
stack_y++;
i -= buffer[i];
i -= stack_y;
loc_unreachable_8:
buffer[i] = decrypt_byte<key* __COUNTER__>(source, i);
stack_x++;
i--;
i -= stack_x;
loc_unreachable_9:
i += buffer[i];
i += stack_y;
continue;
}
}
else {
//unreachable
while (true) {
if (stack_x == stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_1;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_2;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_3;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_4;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_5;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_6;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_7;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_8;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_9;
}
else if (stack_x == stack_y + limit<key * __COUNTER__>()) {
continue;
}
else {
stack_x = stack_y + limit<key* __COUNTER__>();
stack_y = stack_x + limit<key* __COUNTER__>();
}
if (stack_x < stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_start_1;
}
else if (stack_x < stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_start_2;
}
else if (stack_x < stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_start_3;
}
else if (stack_x < stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_start_4;
}
else if (stack_x < stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_start_5;
}
else if (stack_x < stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_start_6;
}
else if (stack_x < stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_start_7;
}
else if (stack_x < stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_start_8;
}
else if (stack_x < stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_start_9;
}
else if (stack_x < stack_y + limit<key * __COUNTER__>()) {
continue;
}
else {
stack_x = stack_y + limit<key* __COUNTER__>();
stack_y = stack_x + limit<key* __COUNTER__>();
}
if (stack_x > stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_9;
}
else if (stack_x > stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_8;
}
else if (stack_x > stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_7;
}
else if (stack_x > stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_6;
}
else if (stack_x > stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_5;
}
else if (stack_x > stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_4;
}
else if (stack_x > stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_3;
}
else if (stack_x > stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_2;
}
else if (stack_x > stack_y + limit<key * __COUNTER__>()) {
decrypted = decrypt_byte<key* __COUNTER__>(source, i);
goto loc_unreachable_1;
}
else if (stack_x > stack_y + limit<key * __COUNTER__>()) {
continue;
}
else {
stack_x = stack_y + limit<key* __COUNTER__>();
stack_y = stack_x + limit<key* __COUNTER__>();
}
}
}
}
else {
//unreachable
//Ooops, Decompilation failure:
//401000: stack frame is too big
return reinterpret_cast<return_type>(buffer + ((key * __COUNTER__) % 0x400000 + 0x1400000));
}
}
else {
//unreachable
//Ooops, Decompilation failure:
//401000: stack frame is too big
return reinterpret_cast<return_type>(buffer + ((key * __COUNTER__) % 0x1400000 + 0x400000));
}
}
#else
for (size_t i = 0; i < size; i++) {
buffer[i] = decrypt_byte<key>(buffer[i], i);
}
#endif // 混淆_DISABLE_OBFUSCATION
return reinterpret_cast<return_type>(buffer);
}
static _FORCEINLINE constexpr size_t align(size_t n, size_t a) {
return (n + a - 1) & ~(a - 1);
}
template<typename any_t, size_t ary_size, size_t counter>
class oxor_any {
static constexpr size_t size = align(ary_size * sizeof(any_t), 16)
+ random_constant<counter^ base_key, (counter^ base_key) % 128>::value % (16 + 1);
static constexpr size_t key = random_constant<counter^ base_key, (size^ base_key) % 128>::value;
uint8_t buffer[size];
public:
template<size_t... indices>
_FORCEINLINE constexpr oxor_any(const any_t(&any)[ary_size], _lxy_::index_sequence<indices...>) :
buffer{ encrypt_byte<key>(((uint8_t*)&any)[indices], indices)... } {
}
_FORCEINLINE const any_t* get() { return decrypt<const any_t*, key>(buffer); }
};
template<typename any_t, size_t counter>
class oxor_any<any_t, 0, counter> {
static constexpr size_t size = align(sizeof(any_t), 16)
+ random_constant<counter^ base_key, (counter^ base_key) % 128>::value % (16 + 1);
static constexpr size_t key = random_constant<counter^ base_key, (size^ base_key) % 128>::value;
uint8_t buffer[size];
public:
template<size_t... indices>
_FORCEINLINE constexpr oxor_any(any_t any, _lxy_::index_sequence<indices...>) :
buffer{ encrypt_byte<key>(reinterpret_cast<uint8_t*>(&any)[indices], indices)... } {
}
_FORCEINLINE const any_t get() { return *decrypt<const any_t*, key>(buffer); }
};
}
#endif // 混淆_H
+2412
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+931
View File
@@ -0,0 +1,931 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:39 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Enums
//---------------------------------------------------------------------------
// Enum AIModule.EPathFollowingResult
enum class EPathFollowingResult : uint8_t
{
EPathFollowingResult__Success = 0,
EPathFollowingResult__Blocked = 1,
EPathFollowingResult__OffPath = 2,
EPathFollowingResult__Aborted = 3,
EPathFollowingResult__Skipped_DEPRECATED = 4,
EPathFollowingResult__Invalid = 5,
EPathFollowingResult__EPathFollowingResult_MAX = 6
};
// Enum AIModule.EEnvQueryStatus
enum class EEnvQueryStatus : uint8_t
{
EEnvQueryStatus__Processing = 0,
EEnvQueryStatus__Success = 1,
EEnvQueryStatus__Failed = 2,
EEnvQueryStatus__Aborted = 3,
EEnvQueryStatus__OwnerLost = 4,
EEnvQueryStatus__MissingParam = 5,
EEnvQueryStatus__EEnvQueryStatus_MAX = 6
};
// Enum AIModule.EAISenseNotifyType
enum class EAISenseNotifyType : uint8_t
{
EAISenseNotifyType__OnEveryPerception = 0,
EAISenseNotifyType__OnPerceptionChange = 1,
EAISenseNotifyType__EAISenseNotifyType_MAX = 2
};
// Enum AIModule.EAITaskPriority
enum class EAITaskPriority : uint8_t
{
EAITaskPriority__Lowest = 0,
EAITaskPriority__Low = 1,
EAITaskPriority__AutonomousAI = 2,
EAITaskPriority__High = 3,
EAITaskPriority__Ultimate = 4,
EAITaskPriority__EAITaskPriority_MAX = 5
};
// Enum AIModule.EGenericAICheck
enum class EGenericAICheck : uint8_t
{
EGenericAICheck__Less = 0,
EGenericAICheck__LessOrEqual = 1,
EGenericAICheck__Equal = 2,
EGenericAICheck__NotEqual = 3,
EGenericAICheck__GreaterOrEqual = 4,
EGenericAICheck__Greater = 5,
EGenericAICheck__IsTrue = 6,
EGenericAICheck__MAX = 7
};
// Enum AIModule.EAILockSource
enum class EAILockSource : uint8_t
{
EAILockSource__Animation = 0,
EAILockSource__Logic = 1,
EAILockSource__Script = 2,
EAILockSource__Gameplay = 3,
EAILockSource__MAX = 4
};
// Enum AIModule.EAIRequestPriority
enum class EAIRequestPriority : uint8_t
{
EAIRequestPriority__SoftScript = 0,
EAIRequestPriority__Logic = 1,
EAIRequestPriority__HardScript = 2,
EAIRequestPriority__Reaction = 3,
EAIRequestPriority__Ultimate = 4,
EAIRequestPriority__MAX = 5
};
// Enum AIModule.EPawnActionEventType
enum class EPawnActionEventType : uint8_t
{
EPawnActionEventType__Invalid = 0,
EPawnActionEventType__FailedToStart = 1,
EPawnActionEventType__InstantAbort = 2,
EPawnActionEventType__FinishedAborting = 3,
EPawnActionEventType__FinishedExecution = 4,
EPawnActionEventType__Push = 5,
EPawnActionEventType__EPawnActionEventType_MAX = 6
};
// Enum AIModule.EPawnActionResult
enum class EPawnActionResult : uint8_t
{
EPawnActionResult__NotStarted = 0,
EPawnActionResult__InProgress = 1,
EPawnActionResult__Success = 2,
EPawnActionResult__Failed = 3,
EPawnActionResult__Aborted = 4,
EPawnActionResult__EPawnActionResult_MAX = 5
};
// Enum AIModule.EPawnActionAbortState
enum class EPawnActionAbortState : uint8_t
{
EPawnActionAbortState__NeverStarted = 0,
EPawnActionAbortState__NotBeingAborted = 1,
EPawnActionAbortState__MarkPendingAbort = 2,
EPawnActionAbortState__LatentAbortInProgress = 3,
EPawnActionAbortState__AbortDone = 4,
EPawnActionAbortState__MAX = 5
};
// Enum AIModule.FAIDistanceType
enum class EFAIDistanceType : uint8_t
{
FAIDistanceType__Distance3D = 0,
FAIDistanceType__Distance2D = 1,
FAIDistanceType__DistanceZ = 2,
FAIDistanceType__MAX = 3
};
// Enum AIModule.EAIOptionFlag
enum class EAIOptionFlag : uint8_t
{
EAIOptionFlag__Default = 0,
EAIOptionFlag__Enable = 1,
EAIOptionFlag__Disable = 2,
EAIOptionFlag__MAX = 3
};
// Enum AIModule.EBTFlowAbortMode
enum class EBTFlowAbortMode : uint8_t
{
EBTFlowAbortMode__None = 0,
EBTFlowAbortMode__LowerPriority = 1,
EBTFlowAbortMode__Self = 2,
EBTFlowAbortMode__Both = 3,
EBTFlowAbortMode__EBTFlowAbortMode_MAX = 4
};
// Enum AIModule.EBTNodeResult
enum class EBTNodeResult : uint8_t
{
EBTNodeResult__Succeeded = 0,
EBTNodeResult__Failed = 1,
EBTNodeResult__Aborted = 2,
EBTNodeResult__InProgress = 3,
EBTNodeResult__EBTNodeResult_MAX = 4
};
// Enum AIModule.ETextKeyOperation
enum class ETextKeyOperation : uint8_t
{
ETextKeyOperation__Equal = 0,
ETextKeyOperation__NotEqual = 1,
ETextKeyOperation__Contain = 2,
ETextKeyOperation__NotContain = 3,
ETextKeyOperation__ETextKeyOperation_MAX = 4
};
// Enum AIModule.EArithmeticKeyOperation
enum class EArithmeticKeyOperation : uint8_t
{
EArithmeticKeyOperation__Equal = 0,
EArithmeticKeyOperation__NotEqual = 1,
EArithmeticKeyOperation__Less = 2,
EArithmeticKeyOperation__LessOrEqual = 3,
EArithmeticKeyOperation__Greater = 4,
EArithmeticKeyOperation__GreaterOrEqual = 5,
EArithmeticKeyOperation__EArithmeticKeyOperation_MAX = 6
};
// Enum AIModule.EBasicKeyOperation
enum class EBasicKeyOperation : uint8_t
{
EBasicKeyOperation__Set = 0,
EBasicKeyOperation__NotSet = 1,
EBasicKeyOperation__EBasicKeyOperation_MAX = 2
};
// Enum AIModule.EBTParallelMode
enum class EBTParallelMode : uint8_t
{
EBTParallelMode__AbortBackground = 0,
EBTParallelMode__WaitForBackground = 1,
EBTParallelMode__EBTParallelMode_MAX = 2
};
// Enum AIModule.EBTDecoratorLogic
enum class EBTDecoratorLogic : uint8_t
{
EBTDecoratorLogic__Invalid = 0,
EBTDecoratorLogic__Test = 1,
EBTDecoratorLogic__And = 2,
EBTDecoratorLogic__Or = 3,
EBTDecoratorLogic__Not = 4,
EBTDecoratorLogic__EBTDecoratorLogic_MAX = 5
};
// Enum AIModule.EBTChildIndex
enum class EBTChildIndex : uint8_t
{
EBTChildIndex__FirstNode = 0,
EBTChildIndex__TaskNode = 1,
EBTChildIndex__EBTChildIndex_MAX = 2
};
// Enum AIModule.EBTBlackboardRestart
enum class EBTBlackboardRestart : uint8_t
{
EBTBlackboardRestart__ValueChange = 0,
EBTBlackboardRestart__ResultChange = 1,
EBTBlackboardRestart__EBTBlackboardRestart_MAX = 2
};
// Enum AIModule.EBlackBoardEntryComparison
enum class EBlackBoardEntryComparison : uint8_t
{
EBlackBoardEntryComparison__Equal = 0,
EBlackBoardEntryComparison__NotEqual = 1,
EBlackBoardEntryComparison__EBlackBoardEntryComparison_MAX = 2
};
// Enum AIModule.EPathExistanceQueryType
enum class EPathExistanceQueryType : uint8_t
{
EPathExistanceQueryType__NavmeshRaycast2D = 0,
EPathExistanceQueryType__HierarchicalQuery = 1,
EPathExistanceQueryType__RegularPathFinding = 2,
EPathExistanceQueryType__EPathExistanceQueryType_MAX = 3
};
// Enum AIModule.EPointOnCircleSpacingMethod
enum class EPointOnCircleSpacingMethod : uint8_t
{
EPointOnCircleSpacingMethod__BySpaceBetween = 0,
EPointOnCircleSpacingMethod__ByNumberOfPoints = 1,
EPointOnCircleSpacingMethod__EPointOnCircleSpacingMethod_MAX = 2
};
// Enum AIModule.EEQSNormalizationType
enum class EEQSNormalizationType : uint8_t
{
EEQSNormalizationType__Absolute = 0,
EEQSNormalizationType__RelativeToScores = 1,
EEQSNormalizationType__EEQSNormalizationType_MAX = 2
};
// Enum AIModule.EEnvTestDistance
enum class EEnvTestDistance : uint8_t
{
EEnvTestDistance__Distance3D = 0,
EEnvTestDistance__Distance2D = 1,
EEnvTestDistance__DistanceZ = 2,
EEnvTestDistance__DistanceAbsoluteZ = 3,
EEnvTestDistance__EEnvTestDistance_MAX = 4
};
// Enum AIModule.EEnvTestDot
enum class EEnvTestDot : uint8_t
{
EEnvTestDot__Dot3D = 0,
EEnvTestDot__Dot2D = 1,
EEnvTestDot__EEnvTestDot_MAX = 2
};
// Enum AIModule.EEnvTestPathfinding
enum class EEnvTestPathfinding : uint8_t
{
EEnvTestPathfinding__PathExist = 0,
EEnvTestPathfinding__PathCost = 1,
EEnvTestPathfinding__PathLength = 2,
EEnvTestPathfinding__EEnvTestPathfinding_MAX = 3
};
// Enum AIModule.EEnvQueryTestClamping
enum class EEnvQueryTestClamping : uint8_t
{
EEnvQueryTestClamping__None = 0,
EEnvQueryTestClamping__SpecifiedValue = 1,
EEnvQueryTestClamping__FilterThreshold = 2,
EEnvQueryTestClamping__EEnvQueryTestClamping_MAX = 3
};
// Enum AIModule.EEnvDirection
enum class EEnvDirection : uint8_t
{
EEnvDirection__TwoPoints = 0,
EEnvDirection__Rotation = 1,
EEnvDirection__EEnvDirection_MAX = 2
};
// Enum AIModule.EEnvOverlapShape
enum class EEnvOverlapShape : uint8_t
{
EEnvOverlapShape__Box = 0,
EEnvOverlapShape__Sphere = 1,
EEnvOverlapShape__Capsule = 2,
EEnvOverlapShape__EEnvOverlapShape_MAX = 3
};
// Enum AIModule.EEnvTraceShape
enum class EEnvTraceShape : uint8_t
{
EEnvTraceShape__Line = 0,
EEnvTraceShape__Box = 1,
EEnvTraceShape__Sphere = 2,
EEnvTraceShape__Capsule = 3,
EEnvTraceShape__EEnvTraceShape_MAX = 4
};
// Enum AIModule.EEnvQueryTrace
enum class EEnvQueryTrace : uint8_t
{
EEnvQueryTrace__None = 0,
EEnvQueryTrace__Navigation = 1,
EEnvQueryTrace__Geometry = 2,
EEnvQueryTrace__NavigationOverLedges = 3,
EEnvQueryTrace__EEnvQueryTrace_MAX = 4
};
// Enum AIModule.EAIParamType
enum class EAIParamType : uint8_t
{
EAIParamType__Float = 0,
EAIParamType__Int = 1,
EAIParamType__Bool = 2,
EAIParamType__MAX = 3
};
// Enum AIModule.EEnvQueryParam
enum class EEnvQueryParam : uint8_t
{
EEnvQueryParam__Float = 0,
EEnvQueryParam__Int = 1,
EEnvQueryParam__Bool = 2,
EEnvQueryParam__EEnvQueryParam_MAX = 3
};
// Enum AIModule.EEnvQueryRunMode
enum class EEnvQueryRunMode : uint8_t
{
EEnvQueryRunMode__SingleResult = 0,
EEnvQueryRunMode__RandomBest5Pct = 1,
EEnvQueryRunMode__RandomBest25Pct = 2,
EEnvQueryRunMode__AllMatching = 3,
EEnvQueryRunMode__EEnvQueryRunMode_MAX = 4
};
// Enum AIModule.EEnvTestScoreOperator
enum class EEnvTestScoreOperator : uint8_t
{
EEnvTestScoreOperator__AverageScore = 0,
EEnvTestScoreOperator__MinScore = 1,
EEnvTestScoreOperator__MaxScore = 2,
EEnvTestScoreOperator__EEnvTestScoreOperator_MAX = 3
};
// Enum AIModule.EEnvTestFilterOperator
enum class EEnvTestFilterOperator : uint8_t
{
EEnvTestFilterOperator__AllPass = 0,
EEnvTestFilterOperator__AnyPass = 1,
EEnvTestFilterOperator__EEnvTestFilterOperator_MAX = 2
};
// Enum AIModule.EEnvTestCost
enum class EEnvTestCost : uint8_t
{
EEnvTestCost__Low = 0,
EEnvTestCost__Medium = 1,
EEnvTestCost__High = 2,
EEnvTestCost__EEnvTestCost_MAX = 3
};
// Enum AIModule.EEnvTestWeight
enum class EEnvTestWeight : uint8_t
{
EEnvTestWeight__None = 0,
EEnvTestWeight__Square = 1,
EEnvTestWeight__Inverse = 2,
EEnvTestWeight__Unused = 3,
EEnvTestWeight__Constant = 4,
EEnvTestWeight__Skip = 5,
EEnvTestWeight__EEnvTestWeight_MAX = 6
};
// Enum AIModule.EEnvTestScoreEquation
enum class EEnvTestScoreEquation : uint8_t
{
EEnvTestScoreEquation__Linear = 0,
EEnvTestScoreEquation__Square = 1,
EEnvTestScoreEquation__InverseLinear = 2,
EEnvTestScoreEquation__SquareRoot = 3,
EEnvTestScoreEquation__Constant = 4,
EEnvTestScoreEquation__EEnvTestScoreEquation_MAX = 5
};
// Enum AIModule.EEnvTestFilterType
enum class EEnvTestFilterType : uint8_t
{
EEnvTestFilterType__Minimum = 0,
EEnvTestFilterType__Maximum = 1,
EEnvTestFilterType__Range = 2,
EEnvTestFilterType__Match = 3,
EEnvTestFilterType__EEnvTestFilterType_MAX = 4
};
// Enum AIModule.EEnvTestPurpose
enum class EEnvTestPurpose : uint8_t
{
EEnvTestPurpose__Filter = 0,
EEnvTestPurpose__Score = 1,
EEnvTestPurpose__FilterAndScore = 2,
EEnvTestPurpose__EEnvTestPurpose_MAX = 3
};
// Enum AIModule.EEnvQueryHightlightMode
enum class EEnvQueryHightlightMode : uint8_t
{
EEnvQueryHightlightMode__All = 0,
EEnvQueryHightlightMode__Best5Pct = 1,
EEnvQueryHightlightMode__Best25Pct = 2,
EEnvQueryHightlightMode__EEnvQueryHightlightMode_MAX = 3
};
// Enum AIModule.ETeamAttitude
enum class ETeamAttitude : uint8_t
{
ETeamAttitude__Friendly = 0,
ETeamAttitude__Neutral = 1,
ETeamAttitude__Hostile = 2,
ETeamAttitude__ETeamAttitude_MAX = 3
};
// Enum AIModule.EPathFollowingRequestResult
enum class EPathFollowingRequestResult : uint8_t
{
EPathFollowingRequestResult__Failed = 0,
EPathFollowingRequestResult__AlreadyAtGoal = 1,
EPathFollowingRequestResult__RequestSuccessful = 2,
EPathFollowingRequestResult__EPathFollowingRequestResult_MAX = 3
};
// Enum AIModule.EPathFollowingAction
enum class EPathFollowingAction : uint8_t
{
EPathFollowingAction__Error = 0,
EPathFollowingAction__NoMove = 1,
EPathFollowingAction__DirectMove = 2,
EPathFollowingAction__PartialPath = 3,
EPathFollowingAction__PathToGoal = 4,
EPathFollowingAction__EPathFollowingAction_MAX = 5
};
// Enum AIModule.EPathFollowingStatus
enum class EPathFollowingStatus : uint8_t
{
EPathFollowingStatus__Idle = 0,
EPathFollowingStatus__Waiting = 1,
EPathFollowingStatus__Paused = 2,
EPathFollowingStatus__Moving = 3,
EPathFollowingStatus__EPathFollowingStatus_MAX = 4
};
// Enum AIModule.EPawnActionFailHandling
enum class EPawnActionFailHandling : uint8_t
{
EPawnActionFailHandling__RequireSuccess = 0,
EPawnActionFailHandling__IgnoreFailure = 1,
EPawnActionFailHandling__EPawnActionFailHandling_MAX = 2
};
// Enum AIModule.EPawnSubActionTriggeringPolicy
enum class EPawnSubActionTriggeringPolicy : uint8_t
{
EPawnSubActionTriggeringPolicy__CopyBeforeTriggering = 0,
EPawnSubActionTriggeringPolicy__ReuseInstances = 1,
EPawnSubActionTriggeringPolicy__EPawnSubActionTriggeringPolicy_MAX = 2
};
// Enum AIModule.EPawnActionMoveMode
enum class EPawnActionMoveMode : uint8_t
{
EPawnActionMoveMode__UsePathfinding = 0,
EPawnActionMoveMode__StraightLine = 1,
EPawnActionMoveMode__EPawnActionMoveMode_MAX = 2
};
//---------------------------------------------------------------------------
//Script Structs
//---------------------------------------------------------------------------
// ScriptStruct AIModule.BlackboardKeySelector
// 0x0020
struct FBlackboardKeySelector
{
TArray<class UBlackboardKeyType*> AllowedTypes; // 0x0000(0x000C) (Edit, BlueprintVisible, ZeroConstructor, Transient)
unsigned char UnknownData00[0x4]; // 0x000C(0x0004) MISSED OFFSET
struct FName SelectedKeyName; // 0x0010(0x0008) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnTemplate, IsPlainOldData)
class UClass* SelectedKeyType; // 0x0018(0x0004) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnTemplate, Transient, IsPlainOldData)
unsigned char SelectedKeyID; // 0x001C(0x0001) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnTemplate, Transient, IsPlainOldData)
unsigned char bNoneIsAllowedValue : 1; // 0x001D(0x0001) (Edit, BlueprintVisible)
unsigned char UnknownData01[0x2]; // 0x001E(0x0002) MISSED OFFSET
};
// ScriptStruct AIModule.AIRequestID
// 0x0004
struct FAIRequestID
{
uint32_t RequestID; // 0x0000(0x0004) (ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AIModule.AIStimulus
// 0x0048
struct FAIStimulus
{
float Age; // 0x0000(0x0004) (BlueprintVisible, ZeroConstructor, IsPlainOldData)
float ExpirationAge; // 0x0004(0x0004) (BlueprintVisible, ZeroConstructor, IsPlainOldData)
float Strength; // 0x0008(0x0004) (BlueprintVisible, ZeroConstructor, IsPlainOldData)
struct FVector StimulusLocation; // 0x000C(0x000C) (BlueprintVisible, IsPlainOldData)
struct FVector ReceiverLocation; // 0x0018(0x000C) (BlueprintVisible, IsPlainOldData)
unsigned char UnknownData00[0x4]; // 0x0024(0x0004) MISSED OFFSET
struct FName Tag; // 0x0028(0x0008) (BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData01[0x10]; // 0x0030(0x0010) MISSED OFFSET
unsigned char UnknownData02 : 1; // 0x0040(0x0001)
unsigned char bSuccessfullySensed : 1; // 0x0040(0x0001) (BlueprintVisible)
unsigned char UnknownData03[0x7]; // 0x0041(0x0007) MISSED OFFSET
};
// ScriptStruct AIModule.ActorPerceptionBlueprintInfo
// 0x0014
struct FActorPerceptionBlueprintInfo
{
class AActor* Target; // 0x0000(0x0004) (BlueprintVisible, ZeroConstructor, IsPlainOldData)
TArray<struct FAIStimulus> LastSensedStimuli; // 0x0004(0x000C) (BlueprintVisible, ZeroConstructor)
unsigned char bIsHostile : 1; // 0x0010(0x0001) (BlueprintVisible)
unsigned char UnknownData00[0x3]; // 0x0011(0x0003) MISSED OFFSET
};
// ScriptStruct AIModule.AIDamageEvent
// 0x0024
struct FAIDamageEvent
{
float Amount; // 0x0000(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
struct FVector Location; // 0x0004(0x000C) (Edit, BlueprintVisible, IsPlainOldData)
struct FVector HitLocation; // 0x0010(0x000C) (Edit, BlueprintVisible, IsPlainOldData)
class AActor* DamagedActor; // 0x001C(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
class AActor* Instigator; // 0x0020(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AIModule.AINoiseEvent
// 0x0030
struct FAINoiseEvent
{
unsigned char UnknownData00[0x4]; // 0x0000(0x0004) MISSED OFFSET
struct FVector NoiseLocation; // 0x0004(0x000C) (Edit, BlueprintVisible, IsPlainOldData)
float Loudness; // 0x0010(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float MaxRange; // 0x0014(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
class AActor* Instigator; // 0x0018(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData01[0x4]; // 0x001C(0x0004) MISSED OFFSET
struct FName Tag; // 0x0020(0x0008) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData02[0x8]; // 0x0028(0x0008) MISSED OFFSET
};
// ScriptStruct AIModule.AIPredictionEvent
// 0x000C
struct FAIPredictionEvent
{
class AActor* Requestor; // 0x0000(0x0004) (ZeroConstructor, IsPlainOldData)
class AActor* PredictedActor; // 0x0004(0x0004) (ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x4]; // 0x0008(0x0004) MISSED OFFSET
};
// ScriptStruct AIModule.AITeamStimulusEvent
// 0x0030
struct FAITeamStimulusEvent
{
unsigned char UnknownData00[0x28]; // 0x0000(0x0028) MISSED OFFSET
class AActor* Broadcaster; // 0x0028(0x0004) (ZeroConstructor, IsPlainOldData)
class AActor* Enemy; // 0x002C(0x0004) (ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AIModule.AITouchEvent
// 0x0014
struct FAITouchEvent
{
unsigned char UnknownData00[0xC]; // 0x0000(0x000C) MISSED OFFSET
class AActor* TouchReceiver; // 0x000C(0x0004) (ZeroConstructor, IsPlainOldData)
class AActor* OtherActor; // 0x0010(0x0004) (ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AIModule.AISenseAffiliationFilter
// 0x0004
struct FAISenseAffiliationFilter
{
unsigned char bDetectEnemies : 1; // 0x0000(0x0001) (Edit, BlueprintVisible, BlueprintReadOnly)
unsigned char bDetectNeutrals : 1; // 0x0000(0x0001) (Edit, BlueprintVisible, BlueprintReadOnly)
unsigned char bDetectFriendlies : 1; // 0x0000(0x0001) (Edit, BlueprintVisible, BlueprintReadOnly)
unsigned char UnknownData00[0x3]; // 0x0001(0x0003) MISSED OFFSET
};
// ScriptStruct AIModule.AIMoveRequest
// 0x0028
struct FAIMoveRequest
{
class AActor* GoalActor; // 0x0000(0x0004) (ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x24]; // 0x0004(0x0024) MISSED OFFSET
};
// ScriptStruct AIModule.BTDecoratorLogic
// 0x0004
struct FBTDecoratorLogic
{
TEnumAsByte<EBTDecoratorLogic> Operation; // 0x0000(0x0001) (ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x1]; // 0x0001(0x0001) MISSED OFFSET
uint16_t Number; // 0x0002(0x0002) (ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AIModule.BehaviorTreeTemplateInfo
// 0x000C
struct FBehaviorTreeTemplateInfo
{
class UBehaviorTree* Asset; // 0x0000(0x0004) (ZeroConstructor, IsPlainOldData)
class UBTCompositeNode* Template; // 0x0004(0x0004) (ZeroConstructor, Transient, IsPlainOldData)
unsigned char UnknownData00[0x4]; // 0x0008(0x0004) MISSED OFFSET
};
// ScriptStruct AIModule.BlackboardEntry
// 0x0010
struct FBlackboardEntry
{
struct FName EntryName; // 0x0000(0x0008) (Edit, ZeroConstructor, IsPlainOldData)
class UBlackboardKeyType* KeyType; // 0x0008(0x0004) (Edit, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData)
unsigned char bInstanceSynced : 1; // 0x000C(0x0001) (Edit)
unsigned char UnknownData00[0x3]; // 0x000D(0x0003) MISSED OFFSET
};
// ScriptStruct AIModule.BTCompositeChild
// 0x0020
struct FBTCompositeChild
{
class UBTCompositeNode* ChildComposite; // 0x0000(0x0004) (ZeroConstructor, IsPlainOldData)
class UBTTaskNode* ChildTask; // 0x0004(0x0004) (ZeroConstructor, IsPlainOldData)
TArray<class UBTDecorator*> Decorators; // 0x0008(0x000C) (ZeroConstructor)
TArray<struct FBTDecoratorLogic> DecoratorOps; // 0x0014(0x000C) (ZeroConstructor)
};
// ScriptStruct AIModule.AIDataProviderValue
// 0x0018
struct FAIDataProviderValue
{
unsigned char UnknownData00[0x4]; // 0x0000(0x0004) MISSED OFFSET
class UProperty* CachedProperty; // 0x0004(0x0004) (ZeroConstructor, Transient, IsPlainOldData)
class UAIDataProvider* DataBinding; // 0x0008(0x0004) (Edit, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData)
unsigned char UnknownData01[0x4]; // 0x000C(0x0004) MISSED OFFSET
struct FName DataField; // 0x0010(0x0008) (Edit, ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AIModule.AIDataProviderTypedValue
// 0x0008 (0x0020 - 0x0018)
struct FAIDataProviderTypedValue : public FAIDataProviderValue
{
class UClass* PropertyType; // 0x0018(0x0004) (ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x4]; // 0x001C(0x0004) MISSED OFFSET
};
// ScriptStruct AIModule.AIDataProviderFloatValue
// 0x0000 (0x0020 - 0x0020)
struct FAIDataProviderFloatValue : public FAIDataProviderTypedValue
{
float DefaultValue; // 0x001C(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AIModule.AIDynamicParam
// 0x0030
struct FAIDynamicParam
{
struct FName ParamName; // 0x0000(0x0008) (Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, EditConst, IsPlainOldData)
EAIParamType ParamType; // 0x0008(0x0001) (Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, EditConst, IsPlainOldData)
unsigned char UnknownData00[0x3]; // 0x0009(0x0003) MISSED OFFSET
float Value; // 0x000C(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
struct FBlackboardKeySelector BBKey; // 0x0010(0x0020) (Edit, BlueprintVisible)
};
// ScriptStruct AIModule.EQSParametrizedQueryExecutionRequest
// 0x0038
struct FEQSParametrizedQueryExecutionRequest
{
class UEnvQuery* QueryTemplate; // 0x0000(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
TArray<struct FAIDynamicParam> QueryConfig; // 0x0004(0x000C) (Edit, ZeroConstructor)
struct FBlackboardKeySelector EQSQueryBlackboardKey; // 0x0010(0x0020) (Edit)
TEnumAsByte<EEnvQueryRunMode> RunMode; // 0x0030(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
unsigned char bUseBBKeyForQueryTemplate : 1; // 0x0031(0x0001) (Edit)
unsigned char UnknownData00[0x6]; // 0x0032(0x0006) MISSED OFFSET
};
// ScriptStruct AIModule.EnvNamedValue
// 0x0010
struct FEnvNamedValue
{
struct FName ParamName; // 0x0000(0x0008) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
EAIParamType ParamType; // 0x0008(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x3]; // 0x0009(0x0003) MISSED OFFSET
float Value; // 0x000C(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AIModule.CrowdAvoidanceConfig
// 0x001C
struct FCrowdAvoidanceConfig
{
float VelocityBias; // 0x0000(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
float DesiredVelocityWeight; // 0x0004(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
float CurrentVelocityWeight; // 0x0008(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
float SideBiasWeight; // 0x000C(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
float ImpactTimeWeight; // 0x0010(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
float ImpactTimeRange; // 0x0014(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
unsigned char CustomPatternIdx; // 0x0018(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
unsigned char AdaptiveDivisions; // 0x0019(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
unsigned char AdaptiveRings; // 0x001A(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
unsigned char AdaptiveDepth; // 0x001B(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AIModule.CrowdAvoidanceSamplingPattern
// 0x0018
struct FCrowdAvoidanceSamplingPattern
{
TArray<float> Angles; // 0x0000(0x000C) (Edit, ZeroConstructor)
TArray<float> Radii; // 0x000C(0x000C) (Edit, ZeroConstructor)
};
// ScriptStruct AIModule.AIDataProviderBoolValue
// 0x0000 (0x0020 - 0x0020)
struct FAIDataProviderBoolValue : public FAIDataProviderTypedValue
{
bool DefaultValue; // 0x001C(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x3]; // 0x001D(0x0003) MISSED OFFSET
};
// ScriptStruct AIModule.EnvTraceData
// 0x0028
struct FEnvTraceData
{
int VersionNum; // 0x0000(0x0004) (ZeroConstructor, IsPlainOldData)
class UClass* NavigationFilter; // 0x0004(0x0004) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float ProjectDown; // 0x0008(0x0004) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float ProjectUp; // 0x000C(0x0004) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float ExtentX; // 0x0010(0x0004) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float ExtentY; // 0x0014(0x0004) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float ExtentZ; // 0x0018(0x0004) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float PostProjectionVerticalOffset; // 0x001C(0x0004) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
TEnumAsByte<ETraceTypeQuery> TraceChannel; // 0x0020(0x0001) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
TEnumAsByte<ECollisionChannel> SerializedChannel; // 0x0021(0x0001) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
TEnumAsByte<EEnvTraceShape> TraceShape; // 0x0022(0x0001) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
TEnumAsByte<EEnvQueryTrace> TraceMode; // 0x0023(0x0001) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
unsigned char bTraceComplex : 1; // 0x0024(0x0001) (Edit, DisableEditOnInstance)
unsigned char bOnlyBlockingHits : 1; // 0x0024(0x0001) (Edit, DisableEditOnInstance)
unsigned char bCanTraceOnNavMesh : 1; // 0x0024(0x0001) (Edit, DisableEditOnInstance)
unsigned char bCanTraceOnGeometry : 1; // 0x0024(0x0001) (Edit, DisableEditOnInstance)
unsigned char bCanDisableTrace : 1; // 0x0024(0x0001) (Edit, DisableEditOnInstance)
unsigned char bCanProjectDown : 1; // 0x0024(0x0001) (Edit, DisableEditOnInstance)
unsigned char UnknownData00[0x3]; // 0x0025(0x0003) MISSED OFFSET
};
// ScriptStruct AIModule.AIDataProviderIntValue
// 0x0000 (0x0020 - 0x0020)
struct FAIDataProviderIntValue : public FAIDataProviderTypedValue
{
int DefaultValue; // 0x001C(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AIModule.EnvDirection
// 0x0010
struct FEnvDirection
{
class UClass* LineFrom; // 0x0000(0x0004) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
class UClass* LineTo; // 0x0004(0x0004) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
class UClass* Rotation; // 0x0008(0x0004) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
TEnumAsByte<EEnvDirection> DirMode; // 0x000C(0x0001) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
unsigned char UnknownData00[0x3]; // 0x000D(0x0003) MISSED OFFSET
};
// ScriptStruct AIModule.EnvQueryInstanceCache
// 0x0170
struct FEnvQueryInstanceCache
{
class UEnvQuery* Template; // 0x0000(0x0004) (ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x16C]; // 0x0004(0x016C) MISSED OFFSET
};
// ScriptStruct AIModule.EnvOverlapData
// 0x001C
struct FEnvOverlapData
{
float ExtentX; // 0x0000(0x0004) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float ExtentY; // 0x0004(0x0004) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float ExtentZ; // 0x0008(0x0004) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
struct FVector ShapeOffset; // 0x000C(0x000C) (Edit, DisableEditOnInstance, IsPlainOldData)
TEnumAsByte<ECollisionChannel> OverlapChannel; // 0x0018(0x0001) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
TEnumAsByte<EEnvOverlapShape> OverlapShape; // 0x0019(0x0001) (Edit, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
unsigned char bOnlyBlockingHits : 1; // 0x001A(0x0001) (Edit, DisableEditOnInstance)
unsigned char bOverlapComplex : 1; // 0x001A(0x0001) (Edit, DisableEditOnInstance)
unsigned char UnknownData00[0x1]; // 0x001B(0x0001) MISSED OFFSET
};
// ScriptStruct AIModule.PawnActionStack
// 0x0004
struct FPawnActionStack
{
class UPawnAction* TopAction; // 0x0000(0x0004) (ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AIModule.PawnActionEvent
// 0x0010
struct FPawnActionEvent
{
class UPawnAction* Action; // 0x0000(0x0004) (ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0xC]; // 0x0004(0x000C) MISSED OFFSET
};
// ScriptStruct AIModule.AIDataProviderStructValue
// 0x0010 (0x0028 - 0x0018)
struct FAIDataProviderStructValue : public FAIDataProviderValue
{
unsigned char UnknownData00[0x10]; // 0x0018(0x0010) MISSED OFFSET
};
// ScriptStruct AIModule.AISightEvent
// 0x0010
struct FAISightEvent
{
unsigned char UnknownData00[0x8]; // 0x0000(0x0008) MISSED OFFSET
class AActor* SeenActor; // 0x0008(0x0004) (ZeroConstructor, IsPlainOldData)
class AActor* Observer; // 0x000C(0x0004) (ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AIModule.EnvQueryRequest
// 0x0048
struct FEnvQueryRequest
{
class UEnvQuery* QueryTemplate; // 0x0000(0x0004) (ZeroConstructor, IsPlainOldData)
class UObject* Owner; // 0x0004(0x0004) (ZeroConstructor, IsPlainOldData)
class UWorld* World; // 0x0008(0x0004) (ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x3C]; // 0x000C(0x003C) MISSED OFFSET
};
// ScriptStruct AIModule.EnvQueryResult
// 0x0030
struct FEnvQueryResult
{
unsigned char UnknownData00[0xC]; // 0x0000(0x000C) MISSED OFFSET
class UClass* ItemType; // 0x000C(0x0004) (BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData01[0x10]; // 0x0010(0x0010) MISSED OFFSET
int OptionIndex; // 0x0020(0x0004) (BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData)
int QueryID; // 0x0024(0x0004) (BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData02[0x8]; // 0x0028(0x0008) MISSED OFFSET
};
// ScriptStruct AIModule.GenericTeamId
// 0x0001
struct FGenericTeamId
{
unsigned char TeamID; // 0x0000(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
};
}
+72
View File
@@ -0,0 +1,72 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Classes
//---------------------------------------------------------------------------
// Class ActorSequence.ActorSequence
// 0x0020 (0x02A0 - 0x0280)
class UActorSequence : public UMovieSceneSequence
{
public:
unsigned char UnknownData00[0x20]; // 0x0280(0x0020) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class ActorSequence.ActorSequence");
return pStaticClass;
}
};
// Class ActorSequence.ActorSequenceComponent
// 0x0028 (0x00E8 - 0x00C0)
class UActorSequenceComponent : public UActorComponent
{
public:
unsigned char UnknownData00[0x1C]; // 0x00C0(0x001C) MISSED OFFSET
class UActorSequence* Sequence; // 0x00DC(0x0004) (Edit, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData)
class UActorSequencePlayer* SequencePlayer; // 0x00E0(0x0004) (BlueprintVisible, BlueprintReadOnly, ZeroConstructor, Transient, IsPlainOldData)
bool bAutoPlay; // 0x00E4(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData01[0x3]; // 0x00E5(0x0003) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class ActorSequence.ActorSequenceComponent");
return pStaticClass;
}
};
// Class ActorSequence.ActorSequencePlayer
// 0x0000 (0x06A0 - 0x06A0)
class UActorSequencePlayer : public UMovieSceneSequencePlayer
{
public:
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class ActorSequence.ActorSequencePlayer");
return pStaticClass;
}
};
}
+15
View File
@@ -0,0 +1,15 @@
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Functions
//---------------------------------------------------------------------------
}
+17
View File
@@ -0,0 +1,17 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Parameters
//---------------------------------------------------------------------------
}
+55
View File
@@ -0,0 +1,55 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Enums
//---------------------------------------------------------------------------
// Enum ActorSequence.EActorSequenceObjectReferenceType
enum class EActorSequenceObjectReferenceType : uint8_t
{
EActorSequenceObjectReferenceType__ContextActor = 0,
EActorSequenceObjectReferenceType__ExternalActor = 1,
EActorSequenceObjectReferenceType__Component = 2,
EActorSequenceObjectReferenceType__EActorSequenceObjectReferenceType_MAX = 3
};
//---------------------------------------------------------------------------
//Script Structs
//---------------------------------------------------------------------------
// ScriptStruct ActorSequence.ActorSequenceObjectReference
// 0x0020
struct FActorSequenceObjectReference
{
EActorSequenceObjectReferenceType Type; // 0x0000(0x0001) (ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x3]; // 0x0001(0x0003) MISSED OFFSET
struct FGuid ActorId; // 0x0004(0x0010) (IsPlainOldData)
struct FString PathToComponent; // 0x0014(0x000C) (ZeroConstructor)
};
// ScriptStruct ActorSequence.ActorSequenceObjectReferences
// 0x000C
struct FActorSequenceObjectReferences
{
TArray<struct FActorSequenceObjectReference> Array; // 0x0000(0x000C) (ZeroConstructor)
};
// ScriptStruct ActorSequence.ActorSequenceObjectReferenceMap
// 0x0018
struct FActorSequenceObjectReferenceMap
{
TArray<struct FGuid> BindingIds; // 0x0000(0x000C) (ZeroConstructor)
TArray<struct FActorSequenceObjectReferences> References; // 0x000C(0x000C) (ZeroConstructor)
};
}
+589
View File
@@ -0,0 +1,589 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Classes
//---------------------------------------------------------------------------
// Class AkAudio.AkAcousticPortal
// 0x0010 (0x02F0 - 0x02E0)
class AAkAcousticPortal : public AVolume
{
public:
float Gain; // 0x02E0(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
EAkAcousticPortalState InitialState; // 0x02E4(0x0001) (Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0xB]; // 0x02E5(0x000B) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.AkAcousticPortal");
return pStaticClass;
}
void OpenPortal();
EAkAcousticPortalState GetCurrentState();
void ClosePortal();
};
// Class AkAudio.AkAcousticTexture
// 0x0004 (0x0020 - 0x001C)
class UAkAcousticTexture : public UObject
{
public:
unsigned char UnknownData00[0x4]; // 0x001C(0x0004) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.AkAcousticTexture");
return pStaticClass;
}
};
// Class AkAudio.AkAmbientSound
// 0x0010 (0x02C8 - 0x02B8)
class AAkAmbientSound : public AActor
{
public:
class UAkAudioEvent* AkAudioEvent; // 0x02B8(0x0004) (ZeroConstructor, Deprecated, IsPlainOldData)
class UAkComponent* AkComponent; // 0x02BC(0x0004) (Edit, BlueprintVisible, ExportObject, BlueprintReadOnly, ZeroConstructor, EditConst, InstancedReference, IsPlainOldData)
bool StopWhenOwnerIsDestroyed; // 0x02C0(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
bool AutoPost; // 0x02C1(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x6]; // 0x02C2(0x0006) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.AkAmbientSound");
return pStaticClass;
}
void StopAmbientSound();
void StartAmbientSound();
};
// Class AkAudio.AkAudioBank
// 0x0004 (0x0020 - 0x001C)
class UAkAudioBank : public UObject
{
public:
unsigned char UnknownData00[0x4]; // 0x001C(0x0004) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.AkAudioBank");
return pStaticClass;
}
};
// Class AkAudio.AkAudioEvent
// 0x0014 (0x0030 - 0x001C)
class UAkAudioEvent : public UObject
{
public:
unsigned char UnknownData00[0x4]; // 0x001C(0x0004) MISSED OFFSET
float MaxAttenuationRadius; // 0x0020(0x0004) (BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData)
bool IsInfinite; // 0x0024(0x0001) (BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData01[0x3]; // 0x0025(0x0003) MISSED OFFSET
float MinimumDuration; // 0x0028(0x0004) (BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData)
float MaximumDuration; // 0x002C(0x0004) (BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData)
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.AkAudioEvent");
return pStaticClass;
}
};
// Class AkAudio.AkAuxBus
// 0x000C (0x0028 - 0x001C)
class UAkAuxBus : public UObject
{
public:
unsigned char UnknownData00[0xC]; // 0x001C(0x000C) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.AkAuxBus");
return pStaticClass;
}
};
// Class AkAudio.AkComponent
// 0x0200 (0x04C0 - 0x02C0)
class UAkComponent : public USceneComponent
{
public:
class UAkAuxBus* EarlyReflectionAuxBus; // 0x02C0(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
struct FString EarlyReflectionAuxBusName; // 0x02C4(0x000C) (Edit, BlueprintVisible, ZeroConstructor)
int EarlyReflectionOrder; // 0x02D0(0x0004) (Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData)
float EarlyReflectionBusSendGain; // 0x02D4(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float EarlyReflectionMaxPathLength; // 0x02D8(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x4]; // 0x02DC(0x0004) MISSED OFFSET
unsigned char EnableSpotReflectors : 1; // 0x02E0(0x0001) (Edit, BlueprintVisible)
unsigned char DrawFirstOrderReflections : 1; // 0x02E0(0x0001) (Edit, BlueprintVisible)
unsigned char DrawSecondOrderReflections : 1; // 0x02E0(0x0001) (Edit, BlueprintVisible)
unsigned char DrawHigherOrderReflections : 1; // 0x02E0(0x0001) (Edit, BlueprintVisible)
bool StopWhenOwnerDestroyed; // 0x02E1(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
unsigned char bIsUpdateEmmiterTransform : 1; // 0x02E2(0x0001) (Edit, BlueprintVisible)
unsigned char UnknownData01[0x1]; // 0x02E3(0x0001) MISSED OFFSET
float AttenuationScalingFactor; // 0x02E4(0x0004) (Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData)
float OcclusionRefreshInterval; // 0x02E8(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
class UAkAudioEvent* AkAudioEvent; // 0x02EC(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
struct FString EventName; // 0x02F0(0x000C) (Edit, BlueprintVisible, ZeroConstructor)
unsigned char UnknownData02[0x1C4]; // 0x02FC(0x01C4) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.AkComponent");
return pStaticClass;
}
void UseReverbVolumes(bool inUseReverbVolumes);
void UseEarlyReflections(class UAkAuxBus* AuxBus, bool Left, bool Right, bool Floor, bool Ceiling, bool Back, bool Front, bool SpotReflectors, const struct FString& AuxBusName);
void Stop();
void SetSwitch(const struct FString& SwitchGroup, const struct FString& SwitchState);
void SetStopWhenOwnerDestroyed(bool bStopWhenOwnerDestroyed);
void SetRTPCValueGlobally(const struct FString& RTPC, float Value);
void SetRTPCValue(const struct FString& RTPC, float Value, int InterpolationTimeMs);
void SetOutputBusVolume(float BusVolume);
void SetListeners(TArray<class UAkComponent*> Listeners);
void SetEarlyReflectionOrder(int NewEarlyReflectionOrder);
void SetAutoDestroy(bool in_AutoDestroy);
void SetAttenuationScalingFactor(float Value);
void PostTrigger(const struct FString& Trigger);
int PostAssociatedAkEvent();
int PostAkEventByName(const struct FString& in_EventName);
int PostAkEvent(class UAkAudioEvent* AkEvent, const struct FString& in_EventName);
float GetAttenuationRadius();
};
// Class AkAudio.AkGameplayStatics
// 0x0000 (0x0020 - 0x0020)
class UAkGameplayStatics : public UBlueprintFunctionLibrary
{
public:
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.AkGameplayStatics");
return pStaticClass;
}
static void WakeupFromSuspend();
static void UseReverbVolumes(bool inUseReverbVolumes, class AActor* Actor);
static void UseEarlyReflections(class AActor* Actor, class UAkAuxBus* AuxBus, bool Left, bool Right, bool Floor, bool Ceiling, bool Back, bool Front, bool SpotReflectors, const struct FString& AuxBusName);
static void UnloadBankByName(const struct FString& BankName);
static void UnloadBank(class UAkAudioBank* Bank, const struct FString& BankName);
static void Suspend();
static void StopProfilerCapture();
static void StopOutputCapture();
static void StopAllAmbientSounds(class UObject* WorldContextObject);
static void StopAll();
static void StopActor(class AActor* Actor);
static void StartProfilerCapture(const struct FString& Filename);
static void StartOutputCapture(const struct FString& Filename);
static void StartAllAmbientSounds(class UObject* WorldContextObject);
static class UAkComponent* SpawnAkComponentAtLocation(class UObject* WorldContextObject, class UAkAudioEvent* AkEvent, class UAkAuxBus* EarlyReflectionsBus, const struct FVector& Location, const struct FRotator& Orientation, bool AutoPost, const struct FString& EventName, const struct FString& EarlyReflectionsBusName, bool AutoDestroy);
static void ShowAKComponentPosition(bool _IsShow);
static void SetSwitch(const struct FName& SwitchGroup, const struct FName& SwitchState, class AActor* Actor);
static void SetState(const struct FName& StateGroup, const struct FName& State);
static void SetRTPCValue(const struct FName& RTPC, float Value, int InterpolationTimeMs, class AActor* Actor);
static void SetPanningRule(EPanningRule PanRule);
static void SetOutputBusVolume(float BusVolume, class AActor* Actor);
static void SetOcclusionScalingFactor(float ScalingFactor);
static void SetOcclusionRefreshInterval(float RefreshInterval, class AActor* Actor);
static void SetBusConfig(const struct FString& BusName, EAkChannelConfiguration ChannelConfiguration);
static void PostTrigger(const struct FName& Trigger, class AActor* Actor);
static void PostEventByName(const struct FString& EventName, class AActor* Actor, bool bStopWhenAttachedToDestroyed);
static int PostEventAttached(class UAkAudioEvent* AkEvent, class AActor* Actor, const struct FName& AttachPointName, bool bStopWhenAttachedToDestroyed, const struct FString& EventName);
static void PostEventAtLocationByName(const struct FString& EventName, const struct FVector& Location, const struct FRotator& Orientation, class UObject* WorldContextObject);
static int PostEventAtLocation(class UAkAudioEvent* AkEvent, const struct FVector& Location, const struct FRotator& Orientation, const struct FString& EventName, class UObject* WorldContextObject);
static int PostEvent(class UAkAudioEvent* AkEvent, class AActor* Actor, bool bStopWhenAttachedToDestroyed, const struct FString& EventName);
static void LoadInitBank();
static void LoadBanks(TArray<class UAkAudioBank*> SoundBanks, bool SynchronizeSoundBanks);
static void LoadBankByName(const struct FString& BankName);
static void LoadBank(class UAkAudioBank* Bank, const struct FString& BankName);
static bool IsGame(class UObject* WorldContextObject);
static bool IsEditor();
static float GetOcclusionScalingFactor();
static class UAkComponent* GetAkComponent(class USceneComponent* AttachToComponent, const struct FName& AttachPointName, const struct FVector& Location, TEnumAsByte<EAttachLocation> LocationType);
static void ClearBanks();
static void AKSetRTPCValue(const struct FString& RTPC, float Value, bool in_bBypassInternalValueInterpolation);
static void AddOutputCaptureMarker(const struct FString& MarkerText);
};
// Class AkAudio.AkLateReverbComponent
// 0x0030 (0x02F0 - 0x02C0)
class UAkLateReverbComponent : public USceneComponent
{
public:
unsigned char bEnable : 1; // 0x02C0(0x0001) (Edit, BlueprintVisible)
unsigned char UnknownData00[0x3]; // 0x02C1(0x0003) MISSED OFFSET
class UAkAuxBus* AuxBus; // 0x02C4(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
struct FString AuxBusName; // 0x02C8(0x000C) (Edit, BlueprintVisible, ZeroConstructor)
float SendLevel; // 0x02D4(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float FadeRate; // 0x02D8(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float Priority; // 0x02DC(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData01[0x10]; // 0x02E0(0x0010) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.AkLateReverbComponent");
return pStaticClass;
}
};
// Class AkAudio.AkReverbVolume
// 0x0028 (0x0308 - 0x02E0)
class AAkReverbVolume : public AVolume
{
public:
unsigned char bEnabled : 1; // 0x02E0(0x0001) (Deprecated)
unsigned char UnknownData00[0x3]; // 0x02E1(0x0003) MISSED OFFSET
class UAkAuxBus* AuxBus; // 0x02E4(0x0004) (ZeroConstructor, Deprecated, IsPlainOldData)
struct FString AuxBusName; // 0x02E8(0x000C) (ZeroConstructor, Deprecated)
float SendLevel; // 0x02F4(0x0004) (ZeroConstructor, Deprecated, IsPlainOldData)
float FadeRate; // 0x02F8(0x0004) (ZeroConstructor, Deprecated, IsPlainOldData)
float Priority; // 0x02FC(0x0004) (ZeroConstructor, Deprecated, IsPlainOldData)
class UAkLateReverbComponent* LateReverbComponent; // 0x0300(0x0004) (Edit, BlueprintVisible, ExportObject, ZeroConstructor, EditConst, InstancedReference, IsPlainOldData)
unsigned char UnknownData01[0x4]; // 0x0304(0x0004) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.AkReverbVolume");
return pStaticClass;
}
};
// Class AkAudio.AkRoomComponent
// 0x0010 (0x02D0 - 0x02C0)
class UAkRoomComponent : public USceneComponent
{
public:
unsigned char bEnable : 1; // 0x02C0(0x0001) (Edit, BlueprintVisible)
unsigned char UnknownData00[0x7]; // 0x02C1(0x0007) MISSED OFFSET
float Priority; // 0x02C8(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData01[0x4]; // 0x02CC(0x0004) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.AkRoomComponent");
return pStaticClass;
}
void RemoveSpatialAudioRoom();
void AddSpatialAudioRoom();
};
// Class AkAudio.AkSettings
// 0x0054 (0x0070 - 0x001C)
class UAkSettings : public UObject
{
public:
unsigned char UnknownData00[0x4]; // 0x001C(0x0004) MISSED OFFSET
struct FFilePath WwiseProjectPath; // 0x0020(0x000C) (Edit, Config)
struct FDirectoryPath WwiseWindowsInstallationPath; // 0x002C(0x000C) (Edit, Config)
struct FFilePath WwiseMacInstallationPath; // 0x0038(0x000C) (Edit, Config)
bool SuppressWwiseProjectPathWarnings; // 0x0044(0x0001) (ZeroConstructor, Config, IsPlainOldData)
bool UseAlternateObstructionOcclusionFeature; // 0x0045(0x0001) (Edit, ZeroConstructor, Config, IsPlainOldData)
unsigned char UnknownData01[0x2A]; // 0x0046(0x002A) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.AkSettings");
return pStaticClass;
}
};
// Class AkAudio.AkSpatialAudioVolume
// 0x0010 (0x02F0 - 0x02E0)
class AAkSpatialAudioVolume : public AVolume
{
public:
class UAkSurfaceReflectorSetComponent* SurfaceReflectorSet; // 0x02E0(0x0004) (Edit, BlueprintVisible, ExportObject, BlueprintReadOnly, ZeroConstructor, EditConst, InstancedReference, IsPlainOldData)
class UAkLateReverbComponent* LateReverb; // 0x02E4(0x0004) (Edit, BlueprintVisible, ExportObject, BlueprintReadOnly, ZeroConstructor, EditConst, InstancedReference, IsPlainOldData)
class UAkRoomComponent* room; // 0x02E8(0x0004) (Edit, BlueprintVisible, ExportObject, BlueprintReadOnly, ZeroConstructor, EditConst, InstancedReference, IsPlainOldData)
unsigned char UnknownData00[0x4]; // 0x02EC(0x0004) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.AkSpatialAudioVolume");
return pStaticClass;
}
};
// Class AkAudio.AkSpotReflector
// 0x0020 (0x02D8 - 0x02B8)
class AAkSpotReflector : public AActor
{
public:
class UAkAuxBus* AuxBus; // 0x02B8(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
struct FString AuxBusName; // 0x02BC(0x000C) (Edit, BlueprintVisible, ZeroConstructor)
class UAkAcousticTexture* AcousticTexture; // 0x02C8(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float DistanceScalingFactor; // 0x02CC(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float Level; // 0x02D0(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x4]; // 0x02D4(0x0004) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.AkSpotReflector");
return pStaticClass;
}
};
// Class AkAudio.AkSurfaceReflectorSetComponent
// 0x0020 (0x02E0 - 0x02C0)
class UAkSurfaceReflectorSetComponent : public USceneComponent
{
public:
unsigned char bEnableSurfaceReflectors : 1; // 0x02C0(0x0001) (Edit, BlueprintVisible)
unsigned char UnknownData00[0x3]; // 0x02C1(0x0003) MISSED OFFSET
TArray<struct FAkPoly> AcousticPolys; // 0x02C4(0x000C) (Edit, BlueprintVisible, ZeroConstructor)
unsigned char UnknownData01[0x10]; // 0x02D0(0x0010) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.AkSurfaceReflectorSetComponent");
return pStaticClass;
}
void UpdateSurfaceReflectorSet();
void SendSurfaceReflectorSet();
void RemoveSurfaceReflectorSet();
};
// Class AkAudio.InterpTrackAkAudioEvent
// 0x0010 (0x0070 - 0x0060)
class UInterpTrackAkAudioEvent : public UInterpTrackVectorBase
{
public:
TArray<struct FAkAudioEventTrackKey> Events; // 0x0060(0x000C) (ZeroConstructor)
unsigned char bContinueEventOnMatineeEnd : 1; // 0x006C(0x0001) (Edit, BlueprintVisible)
unsigned char UnknownData00[0x3]; // 0x006D(0x0003) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.InterpTrackAkAudioEvent");
return pStaticClass;
}
};
// Class AkAudio.InterpTrackAkAudioRTPC
// 0x0010 (0x0070 - 0x0060)
class UInterpTrackAkAudioRTPC : public UInterpTrackFloatBase
{
public:
struct FString Param; // 0x0060(0x000C) (Edit, BlueprintVisible, ZeroConstructor)
unsigned char bPlayOnReverse : 1; // 0x006C(0x0001) (Edit, BlueprintVisible)
unsigned char bContinueRTPCOnMatineeEnd : 1; // 0x006C(0x0001) (Edit, BlueprintVisible)
unsigned char UnknownData00[0x3]; // 0x006D(0x0003) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.InterpTrackAkAudioRTPC");
return pStaticClass;
}
};
// Class AkAudio.InterpTrackInstAkAudioEvent
// 0x0000 (0x0020 - 0x0020)
class UInterpTrackInstAkAudioEvent : public UInterpTrackInst
{
public:
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.InterpTrackInstAkAudioEvent");
return pStaticClass;
}
};
// Class AkAudio.InterpTrackInstAkAudioRTPC
// 0x0000 (0x0020 - 0x0020)
class UInterpTrackInstAkAudioRTPC : public UInterpTrackInst
{
public:
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.InterpTrackInstAkAudioRTPC");
return pStaticClass;
}
};
// Class AkAudio.MovieSceneAkAudioEventSection
// 0x0010 (0x0100 - 0x00F0)
class UMovieSceneAkAudioEventSection : public UMovieSceneSection
{
public:
bool StopAtSectionEnd; // 0x00F0(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x3]; // 0x00F1(0x0003) MISSED OFFSET
struct FString EventName; // 0x00F4(0x000C) (Edit, ZeroConstructor)
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.MovieSceneAkAudioEventSection");
return pStaticClass;
}
};
// Class AkAudio.MovieSceneAkTrack
// 0x0010 (0x00C0 - 0x00B0)
class UMovieSceneAkTrack : public UMovieSceneTrack
{
public:
unsigned char UnknownData00[0x4]; // 0x00B0(0x0004) MISSED OFFSET
unsigned char bIsAMasterTrack : 1; // 0x00B4(0x0001)
unsigned char UnknownData01[0xB]; // 0x00B5(0x000B) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.MovieSceneAkTrack");
return pStaticClass;
}
};
// Class AkAudio.MovieSceneAkAudioEventTrack
// 0x0000 (0x00C0 - 0x00C0)
class UMovieSceneAkAudioEventTrack : public UMovieSceneAkTrack
{
public:
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.MovieSceneAkAudioEventTrack");
return pStaticClass;
}
};
// Class AkAudio.MovieSceneAkAudioRTPCSection
// 0x0060 (0x0150 - 0x00F0)
class UMovieSceneAkAudioRTPCSection : public UMovieSceneSection
{
public:
struct FString Name; // 0x00F0(0x000C) (Edit, ZeroConstructor)
struct FRichCurve FloatCurve; // 0x00FC(0x0054)
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.MovieSceneAkAudioRTPCSection");
return pStaticClass;
}
};
// Class AkAudio.MovieSceneAkAudioRTPCTrack
// 0x0000 (0x00C0 - 0x00C0)
class UMovieSceneAkAudioRTPCTrack : public UMovieSceneAkTrack
{
public:
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AkAudio.MovieSceneAkAudioRTPCTrack");
return pStaticClass;
}
};
}
File diff suppressed because it is too large Load Diff
+481
View File
@@ -0,0 +1,481 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Parameters
//---------------------------------------------------------------------------
// Function AkAudio.AkAcousticPortal.OpenPortal
struct AAkAcousticPortal_OpenPortal_Params
{
};
// Function AkAudio.AkAcousticPortal.GetCurrentState
struct AAkAcousticPortal_GetCurrentState_Params
{
EAkAcousticPortalState ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AkAudio.AkAcousticPortal.ClosePortal
struct AAkAcousticPortal_ClosePortal_Params
{
};
// Function AkAudio.AkAmbientSound.StopAmbientSound
struct AAkAmbientSound_StopAmbientSound_Params
{
};
// Function AkAudio.AkAmbientSound.StartAmbientSound
struct AAkAmbientSound_StartAmbientSound_Params
{
};
// Function AkAudio.AkComponent.UseReverbVolumes
struct UAkComponent_UseReverbVolumes_Params
{
bool inUseReverbVolumes; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkComponent.UseEarlyReflections
struct UAkComponent_UseEarlyReflections_Params
{
class UAkAuxBus* AuxBus; // (Parm, ZeroConstructor, IsPlainOldData)
bool Left; // (Parm, ZeroConstructor, IsPlainOldData)
bool Right; // (Parm, ZeroConstructor, IsPlainOldData)
bool Floor; // (Parm, ZeroConstructor, IsPlainOldData)
bool Ceiling; // (Parm, ZeroConstructor, IsPlainOldData)
bool Back; // (Parm, ZeroConstructor, IsPlainOldData)
bool Front; // (Parm, ZeroConstructor, IsPlainOldData)
bool SpotReflectors; // (Parm, ZeroConstructor, IsPlainOldData)
struct FString AuxBusName; // (Parm, ZeroConstructor)
};
// Function AkAudio.AkComponent.Stop
struct UAkComponent_Stop_Params
{
};
// Function AkAudio.AkComponent.SetSwitch
struct UAkComponent_SetSwitch_Params
{
struct FString SwitchGroup; // (Parm, ZeroConstructor)
struct FString SwitchState; // (Parm, ZeroConstructor)
};
// Function AkAudio.AkComponent.SetStopWhenOwnerDestroyed
struct UAkComponent_SetStopWhenOwnerDestroyed_Params
{
bool bStopWhenOwnerDestroyed; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkComponent.SetRTPCValueGlobally
struct UAkComponent_SetRTPCValueGlobally_Params
{
struct FString RTPC; // (Parm, ZeroConstructor)
float Value; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkComponent.SetRTPCValue
struct UAkComponent_SetRTPCValue_Params
{
struct FString RTPC; // (Parm, ZeroConstructor)
float Value; // (Parm, ZeroConstructor, IsPlainOldData)
int InterpolationTimeMs; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkComponent.SetOutputBusVolume
struct UAkComponent_SetOutputBusVolume_Params
{
float BusVolume; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkComponent.SetListeners
struct UAkComponent_SetListeners_Params
{
TArray<class UAkComponent*> Listeners; // (ConstParm, Parm, OutParm, ZeroConstructor, ReferenceParm)
};
// Function AkAudio.AkComponent.SetEarlyReflectionOrder
struct UAkComponent_SetEarlyReflectionOrder_Params
{
int NewEarlyReflectionOrder; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkComponent.SetAutoDestroy
struct UAkComponent_SetAutoDestroy_Params
{
bool in_AutoDestroy; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkComponent.SetAttenuationScalingFactor
struct UAkComponent_SetAttenuationScalingFactor_Params
{
float Value; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkComponent.PostTrigger
struct UAkComponent_PostTrigger_Params
{
struct FString Trigger; // (Parm, ZeroConstructor)
};
// Function AkAudio.AkComponent.PostAssociatedAkEvent
struct UAkComponent_PostAssociatedAkEvent_Params
{
int ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AkAudio.AkComponent.PostAkEventByName
struct UAkComponent_PostAkEventByName_Params
{
struct FString in_EventName; // (Parm, ZeroConstructor)
int ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AkAudio.AkComponent.PostAkEvent
struct UAkComponent_PostAkEvent_Params
{
class UAkAudioEvent* AkEvent; // (Parm, ZeroConstructor, IsPlainOldData)
struct FString in_EventName; // (Parm, ZeroConstructor)
int ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AkAudio.AkComponent.GetAttenuationRadius
struct UAkComponent_GetAttenuationRadius_Params
{
float ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.WakeupFromSuspend
struct UAkGameplayStatics_WakeupFromSuspend_Params
{
};
// Function AkAudio.AkGameplayStatics.UseReverbVolumes
struct UAkGameplayStatics_UseReverbVolumes_Params
{
bool inUseReverbVolumes; // (Parm, ZeroConstructor, IsPlainOldData)
class AActor* Actor; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.UseEarlyReflections
struct UAkGameplayStatics_UseEarlyReflections_Params
{
class AActor* Actor; // (Parm, ZeroConstructor, IsPlainOldData)
class UAkAuxBus* AuxBus; // (Parm, ZeroConstructor, IsPlainOldData)
bool Left; // (Parm, ZeroConstructor, IsPlainOldData)
bool Right; // (Parm, ZeroConstructor, IsPlainOldData)
bool Floor; // (Parm, ZeroConstructor, IsPlainOldData)
bool Ceiling; // (Parm, ZeroConstructor, IsPlainOldData)
bool Back; // (Parm, ZeroConstructor, IsPlainOldData)
bool Front; // (Parm, ZeroConstructor, IsPlainOldData)
bool SpotReflectors; // (Parm, ZeroConstructor, IsPlainOldData)
struct FString AuxBusName; // (Parm, ZeroConstructor)
};
// Function AkAudio.AkGameplayStatics.UnloadBankByName
struct UAkGameplayStatics_UnloadBankByName_Params
{
struct FString BankName; // (Parm, ZeroConstructor)
};
// Function AkAudio.AkGameplayStatics.UnloadBank
struct UAkGameplayStatics_UnloadBank_Params
{
class UAkAudioBank* Bank; // (Parm, ZeroConstructor, IsPlainOldData)
struct FString BankName; // (Parm, ZeroConstructor)
};
// Function AkAudio.AkGameplayStatics.Suspend
struct UAkGameplayStatics_Suspend_Params
{
};
// Function AkAudio.AkGameplayStatics.StopProfilerCapture
struct UAkGameplayStatics_StopProfilerCapture_Params
{
};
// Function AkAudio.AkGameplayStatics.StopOutputCapture
struct UAkGameplayStatics_StopOutputCapture_Params
{
};
// Function AkAudio.AkGameplayStatics.StopAllAmbientSounds
struct UAkGameplayStatics_StopAllAmbientSounds_Params
{
class UObject* WorldContextObject; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.StopAll
struct UAkGameplayStatics_StopAll_Params
{
};
// Function AkAudio.AkGameplayStatics.StopActor
struct UAkGameplayStatics_StopActor_Params
{
class AActor* Actor; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.StartProfilerCapture
struct UAkGameplayStatics_StartProfilerCapture_Params
{
struct FString Filename; // (Parm, ZeroConstructor)
};
// Function AkAudio.AkGameplayStatics.StartOutputCapture
struct UAkGameplayStatics_StartOutputCapture_Params
{
struct FString Filename; // (Parm, ZeroConstructor)
};
// Function AkAudio.AkGameplayStatics.StartAllAmbientSounds
struct UAkGameplayStatics_StartAllAmbientSounds_Params
{
class UObject* WorldContextObject; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.SpawnAkComponentAtLocation
struct UAkGameplayStatics_SpawnAkComponentAtLocation_Params
{
class UObject* WorldContextObject; // (Parm, ZeroConstructor, IsPlainOldData)
class UAkAudioEvent* AkEvent; // (Parm, ZeroConstructor, IsPlainOldData)
class UAkAuxBus* EarlyReflectionsBus; // (Parm, ZeroConstructor, IsPlainOldData)
struct FVector Location; // (Parm, IsPlainOldData)
struct FRotator Orientation; // (Parm, IsPlainOldData)
bool AutoPost; // (Parm, ZeroConstructor, IsPlainOldData)
struct FString EventName; // (Parm, ZeroConstructor)
struct FString EarlyReflectionsBusName; // (Parm, ZeroConstructor)
bool AutoDestroy; // (Parm, ZeroConstructor, IsPlainOldData)
class UAkComponent* ReturnValue; // (ExportObject, Parm, OutParm, ZeroConstructor, ReturnParm, InstancedReference, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.ShowAKComponentPosition
struct UAkGameplayStatics_ShowAKComponentPosition_Params
{
bool _IsShow; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.SetSwitch
struct UAkGameplayStatics_SetSwitch_Params
{
struct FName SwitchGroup; // (Parm, ZeroConstructor, IsPlainOldData)
struct FName SwitchState; // (Parm, ZeroConstructor, IsPlainOldData)
class AActor* Actor; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.SetState
struct UAkGameplayStatics_SetState_Params
{
struct FName StateGroup; // (Parm, ZeroConstructor, IsPlainOldData)
struct FName State; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.SetRTPCValue
struct UAkGameplayStatics_SetRTPCValue_Params
{
struct FName RTPC; // (Parm, ZeroConstructor, IsPlainOldData)
float Value; // (Parm, ZeroConstructor, IsPlainOldData)
int InterpolationTimeMs; // (Parm, ZeroConstructor, IsPlainOldData)
class AActor* Actor; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.SetPanningRule
struct UAkGameplayStatics_SetPanningRule_Params
{
EPanningRule PanRule; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.SetOutputBusVolume
struct UAkGameplayStatics_SetOutputBusVolume_Params
{
float BusVolume; // (Parm, ZeroConstructor, IsPlainOldData)
class AActor* Actor; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.SetOcclusionScalingFactor
struct UAkGameplayStatics_SetOcclusionScalingFactor_Params
{
float ScalingFactor; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.SetOcclusionRefreshInterval
struct UAkGameplayStatics_SetOcclusionRefreshInterval_Params
{
float RefreshInterval; // (Parm, ZeroConstructor, IsPlainOldData)
class AActor* Actor; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.SetBusConfig
struct UAkGameplayStatics_SetBusConfig_Params
{
struct FString BusName; // (Parm, ZeroConstructor)
EAkChannelConfiguration ChannelConfiguration; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.PostTrigger
struct UAkGameplayStatics_PostTrigger_Params
{
struct FName Trigger; // (Parm, ZeroConstructor, IsPlainOldData)
class AActor* Actor; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.PostEventByName
struct UAkGameplayStatics_PostEventByName_Params
{
struct FString EventName; // (Parm, ZeroConstructor)
class AActor* Actor; // (Parm, ZeroConstructor, IsPlainOldData)
bool bStopWhenAttachedToDestroyed; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.PostEventAttached
struct UAkGameplayStatics_PostEventAttached_Params
{
class UAkAudioEvent* AkEvent; // (Parm, ZeroConstructor, IsPlainOldData)
class AActor* Actor; // (Parm, ZeroConstructor, IsPlainOldData)
struct FName AttachPointName; // (Parm, ZeroConstructor, IsPlainOldData)
bool bStopWhenAttachedToDestroyed; // (Parm, ZeroConstructor, IsPlainOldData)
struct FString EventName; // (Parm, ZeroConstructor)
int ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.PostEventAtLocationByName
struct UAkGameplayStatics_PostEventAtLocationByName_Params
{
struct FString EventName; // (Parm, ZeroConstructor)
struct FVector Location; // (Parm, IsPlainOldData)
struct FRotator Orientation; // (Parm, IsPlainOldData)
class UObject* WorldContextObject; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.PostEventAtLocation
struct UAkGameplayStatics_PostEventAtLocation_Params
{
class UAkAudioEvent* AkEvent; // (Parm, ZeroConstructor, IsPlainOldData)
struct FVector Location; // (Parm, IsPlainOldData)
struct FRotator Orientation; // (Parm, IsPlainOldData)
struct FString EventName; // (Parm, ZeroConstructor)
class UObject* WorldContextObject; // (Parm, ZeroConstructor, IsPlainOldData)
int ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.PostEvent
struct UAkGameplayStatics_PostEvent_Params
{
class UAkAudioEvent* AkEvent; // (Parm, ZeroConstructor, IsPlainOldData)
class AActor* Actor; // (Parm, ZeroConstructor, IsPlainOldData)
bool bStopWhenAttachedToDestroyed; // (Parm, ZeroConstructor, IsPlainOldData)
struct FString EventName; // (Parm, ZeroConstructor)
int ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.LoadInitBank
struct UAkGameplayStatics_LoadInitBank_Params
{
};
// Function AkAudio.AkGameplayStatics.LoadBanks
struct UAkGameplayStatics_LoadBanks_Params
{
TArray<class UAkAudioBank*> SoundBanks; // (ConstParm, Parm, OutParm, ZeroConstructor, ReferenceParm)
bool SynchronizeSoundBanks; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.LoadBankByName
struct UAkGameplayStatics_LoadBankByName_Params
{
struct FString BankName; // (Parm, ZeroConstructor)
};
// Function AkAudio.AkGameplayStatics.LoadBank
struct UAkGameplayStatics_LoadBank_Params
{
class UAkAudioBank* Bank; // (Parm, ZeroConstructor, IsPlainOldData)
struct FString BankName; // (Parm, ZeroConstructor)
};
// Function AkAudio.AkGameplayStatics.IsGame
struct UAkGameplayStatics_IsGame_Params
{
class UObject* WorldContextObject; // (Parm, ZeroConstructor, IsPlainOldData)
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.IsEditor
struct UAkGameplayStatics_IsEditor_Params
{
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.GetOcclusionScalingFactor
struct UAkGameplayStatics_GetOcclusionScalingFactor_Params
{
float ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.GetAkComponent
struct UAkGameplayStatics_GetAkComponent_Params
{
class USceneComponent* AttachToComponent; // (Parm, ZeroConstructor, InstancedReference, IsPlainOldData)
struct FName AttachPointName; // (Parm, ZeroConstructor, IsPlainOldData)
struct FVector Location; // (Parm, IsPlainOldData)
TEnumAsByte<EAttachLocation> LocationType; // (Parm, ZeroConstructor, IsPlainOldData)
class UAkComponent* ReturnValue; // (ExportObject, Parm, OutParm, ZeroConstructor, ReturnParm, InstancedReference, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.ClearBanks
struct UAkGameplayStatics_ClearBanks_Params
{
};
// Function AkAudio.AkGameplayStatics.AKSetRTPCValue
struct UAkGameplayStatics_AKSetRTPCValue_Params
{
struct FString RTPC; // (Parm, ZeroConstructor)
float Value; // (Parm, ZeroConstructor, IsPlainOldData)
bool in_bBypassInternalValueInterpolation; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AkAudio.AkGameplayStatics.AddOutputCaptureMarker
struct UAkGameplayStatics_AddOutputCaptureMarker_Params
{
struct FString MarkerText; // (Parm, ZeroConstructor)
};
// Function AkAudio.AkRoomComponent.RemoveSpatialAudioRoom
struct UAkRoomComponent_RemoveSpatialAudioRoom_Params
{
};
// Function AkAudio.AkRoomComponent.AddSpatialAudioRoom
struct UAkRoomComponent_AddSpatialAudioRoom_Params
{
};
// Function AkAudio.AkSurfaceReflectorSetComponent.UpdateSurfaceReflectorSet
struct UAkSurfaceReflectorSetComponent_UpdateSurfaceReflectorSet_Params
{
};
// Function AkAudio.AkSurfaceReflectorSetComponent.SendSurfaceReflectorSet
struct UAkSurfaceReflectorSetComponent_SendSurfaceReflectorSet_Params
{
};
// Function AkAudio.AkSurfaceReflectorSetComponent.RemoveSurfaceReflectorSet
struct UAkSurfaceReflectorSetComponent_RemoveSurfaceReflectorSet_Params
{
};
}
+119
View File
@@ -0,0 +1,119 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Enums
//---------------------------------------------------------------------------
// Enum AkAudio.AkAcousticPortalState
enum class EAkAcousticPortalState : uint8_t
{
AkAcousticPortalState__Closed = 0,
AkAcousticPortalState__Open = 1,
AkAcousticPortalState__AkAcousticPortalState_MAX = 2
};
// Enum AkAudio.EReflectionFilterBits
enum class EReflectionFilterBits : uint8_t
{
EReflectionFilterBits__Wall = 0,
EReflectionFilterBits__Ceiling = 1,
EReflectionFilterBits__Floor = 2,
EReflectionFilterBits__EReflectionFilterBits_MAX = 3
};
// Enum AkAudio.PanningRule
enum class EPanningRule : uint8_t
{
PanningRule__PanningRule_Speakers = 0,
PanningRule__PanningRule_Headphones = 1,
PanningRule__PanningRule_MAX = 2
};
// Enum AkAudio.AkChannelConfiguration
enum class EAkChannelConfiguration : uint8_t
{
AkChannelConfiguration__Ak_Parent = 0,
AkChannelConfiguration__Ak_1 = 1,
AkChannelConfiguration__Ak_2 = 2,
AkChannelConfiguration__Ak_3 = 3,
AkChannelConfiguration__Ak_4 = 4,
AkChannelConfiguration__Ak_5 = 5,
AkChannelConfiguration__Ak_7 = 6,
AkChannelConfiguration__Ak_5_1 = 7,
AkChannelConfiguration__Ak_7_1 = 8,
AkChannelConfiguration__Ak_7_101 = 9,
AkChannelConfiguration__Ak_Auro_9 = 10,
AkChannelConfiguration__Ak_Auro_10 = 11,
AkChannelConfiguration__Ak_Auro_11 = 12,
AkChannelConfiguration__Ak_Auro_13 = 13,
AkChannelConfiguration__Ak_Ambisonics_1st_order = 14,
AkChannelConfiguration__Ak_Ambisonics_2nd_order = 15,
AkChannelConfiguration__Ak_Ambisonics_3rd_order = 16,
AkChannelConfiguration__Ak_MAX = 17
};
//---------------------------------------------------------------------------
//Script Structs
//---------------------------------------------------------------------------
// ScriptStruct AkAudio.AkPoly
// 0x0008
struct FAkPoly
{
class UAkAcousticTexture* Texture; // 0x0000(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
bool EnableSurface; // 0x0004(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x3]; // 0x0005(0x0003) MISSED OFFSET
};
// ScriptStruct AkAudio.AkAudioEventTrackKey
// 0x0014
struct FAkAudioEventTrackKey
{
float Time; // 0x0000(0x0004) (ZeroConstructor, IsPlainOldData)
class UAkAudioEvent* AkAudioEvent; // 0x0004(0x0004) (Edit, BlueprintVisible, ZeroConstructor, EditConst, IsPlainOldData)
struct FString EventName; // 0x0008(0x000C) (Edit, BlueprintVisible, ZeroConstructor, EditConst)
};
// ScriptStruct AkAudio.AkAmbSoundCheckpointRecord
// 0x0001
struct FAkAmbSoundCheckpointRecord
{
bool bCurrentlyPlaying; // 0x0000(0x0001) (ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AkAudio.MovieSceneAkAudioEventTemplate
// 0x0004 (0x0010 - 0x000C)
struct FMovieSceneAkAudioEventTemplate : public FMovieSceneEvalTemplate
{
class UMovieSceneAkAudioEventSection* Section; // 0x000C(0x0004) (ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData)
};
// ScriptStruct AkAudio.MovieSceneAkAudioRTPCTemplate
// 0x0004 (0x0010 - 0x000C)
struct FMovieSceneAkAudioRTPCTemplate : public FMovieSceneEvalTemplate
{
class UMovieSceneAkAudioRTPCSection* Section; // 0x000C(0x0004) (ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData)
};
// ScriptStruct AkAudio.MovieSceneAkAudioRTPCSectionData
// 0x0060
struct FMovieSceneAkAudioRTPCSectionData
{
struct FString RTPCName; // 0x0000(0x000C) (ZeroConstructor)
struct FRichCurve RTPCCurve; // 0x000C(0x0054)
};
}
@@ -0,0 +1,107 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Classes
//---------------------------------------------------------------------------
// Class AndroidDeviceProfileSelector.AndroidCommonDeviceProfileGradeScore
// 0x001C (0x0038 - 0x001C)
class UAndroidCommonDeviceProfileGradeScore : public UObject
{
public:
unsigned char UnknownData00[0x4]; // 0x001C(0x0004) MISSED OFFSET
TArray<struct FGradeScoreProfileName> GradeScoreProfileName; // 0x0020(0x000C) (Edit, ZeroConstructor, Config)
TArray<float> GradeScoreTypePercentage; // 0x002C(0x000C) (Edit, ZeroConstructor, Config)
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AndroidDeviceProfileSelector.AndroidCommonDeviceProfileGradeScore");
return pStaticClass;
}
};
// Class AndroidDeviceProfileSelector.AndroidCommonDeviceProfileMatchingRules
// 0x000C (0x0028 - 0x001C)
class UAndroidCommonDeviceProfileMatchingRules : public UObject
{
public:
unsigned char UnknownData00[0xC]; // 0x001C(0x000C) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AndroidDeviceProfileSelector.AndroidCommonDeviceProfileMatchingRules");
return pStaticClass;
}
};
// Class AndroidDeviceProfileSelector.AndroidCommonDeviceProfileWhiteList
// 0x000C (0x0028 - 0x001C)
class UAndroidCommonDeviceProfileWhiteList : public UObject
{
public:
unsigned char UnknownData00[0xC]; // 0x001C(0x000C) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AndroidDeviceProfileSelector.AndroidCommonDeviceProfileWhiteList");
return pStaticClass;
}
};
// Class AndroidDeviceProfileSelector.AndroidDeviceProfileMatchingRules
// 0x000C (0x0028 - 0x001C)
class UAndroidDeviceProfileMatchingRules : public UObject
{
public:
unsigned char UnknownData00[0xC]; // 0x001C(0x000C) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AndroidDeviceProfileSelector.AndroidDeviceProfileMatchingRules");
return pStaticClass;
}
};
// Class AndroidDeviceProfileSelector.AndroidJavaSurfaceViewDevices
// 0x000C (0x0028 - 0x001C)
class UAndroidJavaSurfaceViewDevices : public UObject
{
public:
unsigned char UnknownData00[0xC]; // 0x001C(0x000C) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AndroidDeviceProfileSelector.AndroidJavaSurfaceViewDevices");
return pStaticClass;
}
};
}
@@ -0,0 +1,15 @@
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Functions
//---------------------------------------------------------------------------
}
@@ -0,0 +1,17 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Parameters
//---------------------------------------------------------------------------
}
@@ -0,0 +1,133 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Enums
//---------------------------------------------------------------------------
// Enum AndroidDeviceProfileSelector.ECompareType
enum class ECompareType : uint8_t
{
CMP_Equal = 0,
CMP_Less = 1,
CMP_LessEqual = 2,
CMP_Greater = 3,
CMP_GreaterEqual = 4,
CMP_NotEqual = 5,
CMP_Regex = 6,
CMP_MAX = 7
};
// Enum AndroidDeviceProfileSelector.ESourceType
enum class ESourceType : uint8_t
{
SRC_PreviousRegexMatch = 0,
SRC_GpuFamily = 1,
SRC_GlVersion = 2,
SRC_AndroidVersion = 3,
SRC_DeviceMake = 4,
SRC_DeviceModel = 5,
SRC_VulkanVersion = 6,
SRC_UsingHoudini = 7,
SRC_VulkanAvailable = 8,
SRC_MemorySizeInGB = 9,
SRC_CPUCoreNum = 10,
SRC_CPUMaxFreq = 11,
SRC_GLExtensions = 12,
SRC_MAX = 13
};
// Enum AndroidDeviceProfileSelector.EGradeScoreType
enum class EGradeScoreType : uint8_t
{
GST_GPU = 0,
GST_Memory = 1,
GST_CPUCore = 2,
GST_CPUFreq = 3,
GST_MAX = 4
};
// Enum AndroidDeviceProfileSelector.EGradeType
enum class EGradeType : uint8_t
{
GAT_Grade01 = 0,
GAT_Grade02 = 1,
GAT_Grade03 = 2,
GAT_Grade04 = 3,
GAT_Grade05 = 4,
GAT_Grade06 = 5,
GAT_Grade07 = 6,
GAT_MAX = 7
};
//---------------------------------------------------------------------------
//Script Structs
//---------------------------------------------------------------------------
// ScriptStruct AndroidDeviceProfileSelector.GradeScoreProfileName
// 0x0010
struct FGradeScoreProfileName
{
struct FString ProfileName; // 0x0000(0x000C) (ZeroConstructor)
int Score; // 0x000C(0x0004) (ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AndroidDeviceProfileSelector.GradeProfileMatchItem
// 0x0010
struct FGradeProfileMatchItem
{
TEnumAsByte<ESourceType> SourceType; // 0x0000(0x0001) (ZeroConstructor, IsPlainOldData)
TEnumAsByte<ECompareType> CompareType; // 0x0001(0x0001) (ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x2]; // 0x0002(0x0002) MISSED OFFSET
struct FString MatchString; // 0x0004(0x000C) (ZeroConstructor)
};
// ScriptStruct AndroidDeviceProfileSelector.GradeProfileMatch
// 0x0014
struct FGradeProfileMatch
{
TEnumAsByte<EGradeScoreType> ScoreType; // 0x0000(0x0001) (ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x3]; // 0x0001(0x0003) MISSED OFFSET
int Score; // 0x0004(0x0004) (ZeroConstructor, IsPlainOldData)
TArray<struct FGradeProfileMatchItem> Match; // 0x0008(0x000C) (ZeroConstructor)
};
// ScriptStruct AndroidDeviceProfileSelector.ProfileMatchItem
// 0x0010
struct FProfileMatchItem
{
TEnumAsByte<ESourceType> SourceType; // 0x0000(0x0001) (ZeroConstructor, IsPlainOldData)
TEnumAsByte<ECompareType> CompareType; // 0x0001(0x0001) (ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x2]; // 0x0002(0x0002) MISSED OFFSET
struct FString MatchString; // 0x0004(0x000C) (ZeroConstructor)
};
// ScriptStruct AndroidDeviceProfileSelector.ProfileMatch
// 0x0018
struct FProfileMatch
{
struct FString Profile; // 0x0000(0x000C) (ZeroConstructor)
TArray<struct FProfileMatchItem> Match; // 0x000C(0x000C) (ZeroConstructor)
};
// ScriptStruct AndroidDeviceProfileSelector.JavaSurfaceViewDevice
// 0x0018
struct FJavaSurfaceViewDevice
{
struct FString Manufacturer; // 0x0000(0x000C) (ZeroConstructor)
struct FString Model; // 0x000C(0x000C) (ZeroConstructor)
};
}
+33
View File
@@ -0,0 +1,33 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Classes
//---------------------------------------------------------------------------
// Class AndroidMediaFactory.AndroidMediaSettings
// 0x0004 (0x0020 - 0x001C)
class UAndroidMediaSettings : public UObject
{
public:
unsigned char UnknownData00[0x4]; // 0x001C(0x0004) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AndroidMediaFactory.AndroidMediaSettings");
return pStaticClass;
}
};
}
@@ -0,0 +1,15 @@
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Functions
//---------------------------------------------------------------------------
}
@@ -0,0 +1,17 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Parameters
//---------------------------------------------------------------------------
}
+11
View File
@@ -0,0 +1,11 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
}
+53
View File
@@ -0,0 +1,53 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Classes
//---------------------------------------------------------------------------
// Class AndroidPermission.AndroidPermissionCallbackProxy
// 0x0054 (0x0070 - 0x001C)
class UAndroidPermissionCallbackProxy : public UObject
{
public:
unsigned char UnknownData00[0x54]; // 0x001C(0x0054) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AndroidPermission.AndroidPermissionCallbackProxy");
return pStaticClass;
}
};
// Class AndroidPermission.AndroidPermissionFunctionLibrary
// 0x0000 (0x0020 - 0x0020)
class UAndroidPermissionFunctionLibrary : public UBlueprintFunctionLibrary
{
public:
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AndroidPermission.AndroidPermissionFunctionLibrary");
return pStaticClass;
}
static bool CheckPermission(const struct FString& permission);
static class UAndroidPermissionCallbackProxy* AcquirePermissions(TArray<struct FString> Permissions);
};
}
+69
View File
@@ -0,0 +1,69 @@
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Functions
//---------------------------------------------------------------------------
// Function AndroidPermission.AndroidPermissionFunctionLibrary.CheckPermission
// (Final, Native, Static, Public, BlueprintCallable)
// Parameters:
// struct FString permission (Parm, ZeroConstructor)
// bool ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
bool UAndroidPermissionFunctionLibrary::CheckPermission(const struct FString& permission)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AndroidPermission.AndroidPermissionFunctionLibrary.CheckPermission");
UAndroidPermissionFunctionLibrary_CheckPermission_Params params;
params.permission = permission;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AndroidPermission.AndroidPermissionFunctionLibrary.AcquirePermissions
// (Final, Native, Static, Public, HasOutParms, BlueprintCallable)
// Parameters:
// TArray<struct FString> Permissions (ConstParm, Parm, OutParm, ZeroConstructor, ReferenceParm)
// class UAndroidPermissionCallbackProxy* ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
class UAndroidPermissionCallbackProxy* UAndroidPermissionFunctionLibrary::AcquirePermissions(TArray<struct FString> Permissions)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AndroidPermission.AndroidPermissionFunctionLibrary.AcquirePermissions");
UAndroidPermissionFunctionLibrary_AcquirePermissions_Params params;
params.Permissions = Permissions;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
}
@@ -0,0 +1,31 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Parameters
//---------------------------------------------------------------------------
// Function AndroidPermission.AndroidPermissionFunctionLibrary.CheckPermission
struct UAndroidPermissionFunctionLibrary_CheckPermission_Params
{
struct FString permission; // (Parm, ZeroConstructor)
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AndroidPermission.AndroidPermissionFunctionLibrary.AcquirePermissions
struct UAndroidPermissionFunctionLibrary_AcquirePermissions_Params
{
TArray<struct FString> Permissions; // (ConstParm, Parm, OutParm, ZeroConstructor, ReferenceParm)
class UAndroidPermissionCallbackProxy* ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
}
+11
View File
@@ -0,0 +1,11 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
}
@@ -0,0 +1,117 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Classes
//---------------------------------------------------------------------------
// Class AndroidRuntimeSettings.AndroidRuntimeSettings
// 0x01AC (0x01C8 - 0x001C)
class UAndroidRuntimeSettings : public UObject
{
public:
unsigned char UnknownData00[0xC]; // 0x001C(0x000C) MISSED OFFSET
int StoreVersion; // 0x0028(0x0004) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
struct FString ApplicationDisplayName; // 0x002C(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
struct FString VersionDisplayName; // 0x0038(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
int MinSDKVersion; // 0x0044(0x0004) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
int TargetSDKVersion; // 0x0048(0x0004) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
TEnumAsByte<EAndroidInstallLocation> InstallLocation; // 0x004C(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bEnableGradle; // 0x004D(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bPackageDataInsideApk; // 0x004E(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bCreateAllPlatformsInstall; // 0x004F(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bDisableVerifyOBBOnStartUp; // 0x0050(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bUseExternalFilesDir; // 0x0051(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
TEnumAsByte<EAndroidScreenOrientation> Orientation; // 0x0052(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
unsigned char UnknownData01[0x1]; // 0x0053(0x0001) MISSED OFFSET
float MaxAspectRatio; // 0x0054(0x0004) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
TEnumAsByte<EAndroidAntVerbosity> AntVerbosity; // 0x0058(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bFullScreen; // 0x0059(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bEnableNewKeyboard; // 0x005A(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
TEnumAsByte<EAndroidDepthBufferPreference> DepthBufferPreference; // 0x005B(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
TArray<struct FString> ExtraManifestNodeTags; // 0x005C(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
TArray<struct FString> ExtraApplicationNodeTags; // 0x0068(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
struct FString ExtraApplicationSettings; // 0x0074(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
TArray<struct FString> ExtraActivityNodeTags; // 0x0080(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
struct FString ExtraActivitySettings; // 0x008C(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
TArray<struct FString> ExtraPermissions; // 0x0098(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
bool bAndroidVoiceEnabled; // 0x00A4(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bPackageForGearVR; // 0x00A5(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bRemoveOSIG; // 0x00A6(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
unsigned char UnknownData02[0x1]; // 0x00A7(0x0001) MISSED OFFSET
TArray<TEnumAsByte<EGoogleVRCaps>> GoogleVRCaps; // 0x00A8(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
bool bGoogleVRSustainedPerformance; // 0x00B4(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
unsigned char UnknownData03[0x3]; // 0x00B5(0x0003) MISSED OFFSET
struct FString KeyStore; // 0x00B8(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
struct FString KeyAlias; // 0x00C4(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
struct FString KeyStorePassword; // 0x00D0(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
struct FString KeyPassword; // 0x00DC(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
bool bBuildForArmV7; // 0x00E8(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bBuildForArm64; // 0x00E9(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bBuildForX86; // 0x00EA(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bBuildForX8664; // 0x00EB(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bBuildForES2; // 0x00EC(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bBuildForES31; // 0x00ED(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bSupportsVulkan; // 0x00EE(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bBuildWithHiddenSymbolVisibility; // 0x00EF(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bEnableGooglePlaySupport; // 0x00F0(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bUseGetAccounts; // 0x00F1(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
unsigned char UnknownData04[0x2]; // 0x00F2(0x0002) MISSED OFFSET
struct FString GamesAppID; // 0x00F4(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
TArray<struct FGooglePlayAchievementMapping> AchievementMap; // 0x0100(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
TArray<struct FGooglePlayLeaderboardMapping> LeaderboardMap; // 0x010C(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
bool bSupportAdMob; // 0x0118(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
unsigned char UnknownData05[0x3]; // 0x0119(0x0003) MISSED OFFSET
struct FString AdMobAdUnitID; // 0x011C(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
TArray<struct FString> AdMobAdUnitIDs; // 0x0128(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
struct FString GooglePlayLicenseKey; // 0x0134(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
struct FString GCMClientSenderID; // 0x0140(0x000C) (Edit, ZeroConstructor, Config, GlobalConfig)
bool bShowLaunchImage; // 0x014C(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
TEnumAsByte<EAndroidAudio> AndroidAudio; // 0x014D(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
unsigned char UnknownData06[0x2]; // 0x014E(0x0002) MISSED OFFSET
int AudioSampleRate; // 0x0150(0x0004) (Edit, ZeroConstructor, Config, IsPlainOldData)
int AudioCallbackBufferFrameSize; // 0x0154(0x0004) (Edit, ZeroConstructor, Config, IsPlainOldData)
int AudioNumBuffersToEnqueue; // 0x0158(0x0004) (Edit, ZeroConstructor, Config, IsPlainOldData)
int AudioMaxChannels; // 0x015C(0x0004) (Edit, ZeroConstructor, Config, IsPlainOldData)
int AudioNumSourceWorkers; // 0x0160(0x0004) (Edit, ZeroConstructor, Config, IsPlainOldData)
struct FString SpatializationPlugin; // 0x0164(0x000C) (Edit, ZeroConstructor, Config)
struct FString ReverbPlugin; // 0x0170(0x000C) (Edit, ZeroConstructor, Config)
struct FString OcclusionPlugin; // 0x017C(0x000C) (Edit, ZeroConstructor, Config)
TEnumAsByte<EAndroidGraphicsDebugger> AndroidGraphicsDebugger; // 0x0188(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
unsigned char UnknownData07[0x3]; // 0x0189(0x0003) MISSED OFFSET
struct FDirectoryPath MaliGraphicsDebuggerPath; // 0x018C(0x000C) (Edit, Config, GlobalConfig)
struct FDirectoryPath RenderDocPath; // 0x0198(0x000C) (Edit, Config, GlobalConfig)
bool bMultiTargetFormat_ETC1; // 0x01A4(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bMultiTargetFormat_ETC2; // 0x01A5(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bMultiTargetFormat_DXT; // 0x01A6(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bMultiTargetFormat_PVRTC; // 0x01A7(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bMultiTargetFormat_ATC; // 0x01A8(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
bool bMultiTargetFormat_ASTC; // 0x01A9(0x0001) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
unsigned char UnknownData08[0x2]; // 0x01AA(0x0002) MISSED OFFSET
float TextureFormatPriority_ETC1; // 0x01AC(0x0004) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
float TextureFormatPriority_ETC2; // 0x01B0(0x0004) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
float TextureFormatPriority_DXT; // 0x01B4(0x0004) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
float TextureFormatPriority_PVRTC; // 0x01B8(0x0004) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
float TextureFormatPriority_ATC; // 0x01BC(0x0004) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
float TextureFormatPriority_ASTC; // 0x01C0(0x0004) (Edit, ZeroConstructor, Config, GlobalConfig, IsPlainOldData)
unsigned char UnknownData09[0x4]; // 0x01C4(0x0004) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AndroidRuntimeSettings.AndroidRuntimeSettings");
return pStaticClass;
}
};
}
@@ -0,0 +1,15 @@
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Functions
//---------------------------------------------------------------------------
}
@@ -0,0 +1,17 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Parameters
//---------------------------------------------------------------------------
}
@@ -0,0 +1,123 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Enums
//---------------------------------------------------------------------------
// Enum AndroidRuntimeSettings.EAndroidGraphicsDebugger
enum class EAndroidGraphicsDebugger : uint8_t
{
EAndroidGraphicsDebugger__None = 0,
EAndroidGraphicsDebugger__Mali = 1,
EAndroidGraphicsDebugger__Adreno = 2,
EAndroidGraphicsDebugger__RenderDoc = 3,
EAndroidGraphicsDebugger__EAndroidGraphicsDebugger_MAX = 4
};
// Enum AndroidRuntimeSettings.EGoogleVRCaps
enum class EGoogleVRCaps : uint8_t
{
EGoogleVRCaps__Cardboard = 0,
EGoogleVRCaps__Daydream33 = 1,
EGoogleVRCaps__Daydream63 = 2,
EGoogleVRCaps__EGoogleVRCaps_MAX = 3
};
// Enum AndroidRuntimeSettings.EGoogleVRMode
enum class EGoogleVRMode : uint8_t
{
EGoogleVRMode__Cardboard = 0,
EGoogleVRMode__Daydream = 1,
EGoogleVRMode__DaydreamAndCardboard = 2,
EGoogleVRMode__EGoogleVRMode_MAX = 3
};
// Enum AndroidRuntimeSettings.EAndroidAudio
enum class EAndroidAudio : uint8_t
{
EAndroidAudio__Default = 0,
EAndroidAudio__OGG = 1,
EAndroidAudio__ADPCM = 2,
EAndroidAudio__EAndroidAudio_MAX = 3
};
// Enum AndroidRuntimeSettings.EAndroidInstallLocation
enum class EAndroidInstallLocation : uint8_t
{
EAndroidInstallLocation__InternalOnly = 0,
EAndroidInstallLocation__PreferExternal = 1,
EAndroidInstallLocation__Auto = 2,
EAndroidInstallLocation__EAndroidInstallLocation_MAX = 3
};
// Enum AndroidRuntimeSettings.EAndroidDepthBufferPreference
enum class EAndroidDepthBufferPreference : uint8_t
{
EAndroidDepthBufferPreference__Default = 0,
EAndroidDepthBufferPreference__Bits16 = 1,
EAndroidDepthBufferPreference__Bits24 = 2,
EAndroidDepthBufferPreference__Bits32 = 3,
EAndroidDepthBufferPreference__EAndroidDepthBufferPreference_MAX = 4
};
// Enum AndroidRuntimeSettings.EAndroidScreenOrientation
enum class EAndroidScreenOrientation : uint8_t
{
EAndroidScreenOrientation__Portrait = 0,
EAndroidScreenOrientation__ReversePortrait = 1,
EAndroidScreenOrientation__SensorPortrait = 2,
EAndroidScreenOrientation__Landscape = 3,
EAndroidScreenOrientation__ReverseLandscape = 4,
EAndroidScreenOrientation__SensorLandscape = 5,
EAndroidScreenOrientation__Sensor = 6,
EAndroidScreenOrientation__FullSensor = 7,
EAndroidScreenOrientation__EAndroidScreenOrientation_MAX = 8
};
// Enum AndroidRuntimeSettings.EAndroidAntVerbosity
enum class EAndroidAntVerbosity : uint8_t
{
EAndroidAntVerbosity__Quiet = 0,
EAndroidAntVerbosity__Normal = 1,
EAndroidAntVerbosity__Verbose = 2,
EAndroidAntVerbosity__EAndroidAntVerbosity_MAX = 3
};
//---------------------------------------------------------------------------
//Script Structs
//---------------------------------------------------------------------------
// ScriptStruct AndroidRuntimeSettings.GooglePlayAchievementMapping
// 0x0018
struct FGooglePlayAchievementMapping
{
struct FString Name; // 0x0000(0x000C) (Edit, ZeroConstructor)
struct FString AchievementID; // 0x000C(0x000C) (Edit, ZeroConstructor)
};
// ScriptStruct AndroidRuntimeSettings.GooglePlayLeaderboardMapping
// 0x0018
struct FGooglePlayLeaderboardMapping
{
struct FString Name; // 0x0000(0x000C) (Edit, ZeroConstructor)
struct FString LeaderboardID; // 0x000C(0x000C) (Edit, ZeroConstructor)
};
}
+134
View File
@@ -0,0 +1,134 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Classes
//---------------------------------------------------------------------------
// Class AnimGraphRuntime.AnimCustomInstance
// 0x0000 (0x02F0 - 0x02F0)
class UAnimCustomInstance : public UAnimInstance
{
public:
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AnimGraphRuntime.AnimCustomInstance");
return pStaticClass;
}
};
// Class AnimGraphRuntime.AnimNotify_PlayMontageNotify
// 0x0008 (0x0030 - 0x0028)
class UAnimNotify_PlayMontageNotify : public UAnimNotify
{
public:
struct FName NotifyName; // 0x0028(0x0008) (Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData)
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AnimGraphRuntime.AnimNotify_PlayMontageNotify");
return pStaticClass;
}
};
// Class AnimGraphRuntime.AnimNotify_PlayMontageNotifyWindow
// 0x0008 (0x0028 - 0x0020)
class UAnimNotify_PlayMontageNotifyWindow : public UAnimNotifyState
{
public:
struct FName NotifyName; // 0x0020(0x0008) (Edit, BlueprintVisible, BlueprintReadOnly, ZeroConstructor, IsPlainOldData)
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AnimGraphRuntime.AnimNotify_PlayMontageNotifyWindow");
return pStaticClass;
}
};
// Class AnimGraphRuntime.AnimSequencerInstance
// 0x0000 (0x02F0 - 0x02F0)
class UAnimSequencerInstance : public UAnimCustomInstance
{
public:
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AnimGraphRuntime.AnimSequencerInstance");
return pStaticClass;
}
};
// Class AnimGraphRuntime.KismetAnimationLibrary
// 0x0000 (0x0020 - 0x0020)
class UKismetAnimationLibrary : public UBlueprintFunctionLibrary
{
public:
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AnimGraphRuntime.KismetAnimationLibrary");
return pStaticClass;
}
static void K2_TwoBoneIK(const struct FVector& RootPos, const struct FVector& JointPos, const struct FVector& EndPos, const struct FVector& JointTarget, const struct FVector& Effector, float MaxStretchScale, float StartStretchRatio, bool bAllowStretching, struct FVector* OutEndPos, struct FVector* OutJointPos);
static struct FTransform K2_LookAt(const struct FTransform& CurrentTransform, const struct FVector& TargetPosition, const struct FVector& LookAtVector, bool bUseUpVector, const struct FVector& UpVector, float ClampConeInDegree);
};
// Class AnimGraphRuntime.PlayMontageCallbackProxy
// 0x00D4 (0x00F0 - 0x001C)
class UPlayMontageCallbackProxy : public UObject
{
public:
unsigned char UnknownData00[0xC]; // 0x001C(0x000C) MISSED OFFSET
struct FScriptMulticastDelegate OnBlendOut; // 0x0028(0x000C) (ZeroConstructor, InstancedReference, BlueprintAssignable)
struct FScriptMulticastDelegate OnInterrupted; // 0x0034(0x000C) (ZeroConstructor, InstancedReference, BlueprintAssignable)
struct FScriptMulticastDelegate OnNotifyBegin; // 0x0040(0x000C) (ZeroConstructor, InstancedReference, BlueprintAssignable)
struct FScriptMulticastDelegate OnNotifyEnd; // 0x004C(0x000C) (ZeroConstructor, InstancedReference, BlueprintAssignable)
unsigned char UnknownData01[0x98]; // 0x0058(0x0098) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AnimGraphRuntime.PlayMontageCallbackProxy");
return pStaticClass;
}
void OnNotifyEndReceived(const struct FName& NotifyName, const struct FBranchingPointNotifyPayload& BranchingPointNotifyPayload);
void OnNotifyBeginReceived(const struct FName& NotifyName, const struct FBranchingPointNotifyPayload& BranchingPointNotifyPayload);
void OnMontageEnded(class UAnimMontage* Montage, bool bInterrupted);
void OnMontageBlendingOut(class UAnimMontage* Montage, bool bInterrupted);
static class UPlayMontageCallbackProxy* CreateProxyObjectForPlayMontage(class USkeletalMeshComponent* InSkeletalMeshComponent, class UAnimMontage* MontageToPlay, float PlayRate, float StartingPosition, const struct FName& StartingSection);
};
}
+236
View File
@@ -0,0 +1,236 @@
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Functions
//---------------------------------------------------------------------------
// Function AnimGraphRuntime.KismetAnimationLibrary.K2_TwoBoneIK
// (Final, Native, Static, Public, HasOutParms, HasDefaults, BlueprintCallable, BlueprintPure)
// Parameters:
// struct FVector RootPos (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
// struct FVector JointPos (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
// struct FVector EndPos (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
// struct FVector JointTarget (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
// struct FVector Effector (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
// struct FVector OutJointPos (Parm, OutParm, IsPlainOldData)
// struct FVector OutEndPos (Parm, OutParm, IsPlainOldData)
// bool bAllowStretching (Parm, ZeroConstructor, IsPlainOldData)
// float StartStretchRatio (Parm, ZeroConstructor, IsPlainOldData)
// float MaxStretchScale (Parm, ZeroConstructor, IsPlainOldData)
void UKismetAnimationLibrary::K2_TwoBoneIK(const struct FVector& RootPos, const struct FVector& JointPos, const struct FVector& EndPos, const struct FVector& JointTarget, const struct FVector& Effector, float MaxStretchScale, float StartStretchRatio, bool bAllowStretching, struct FVector* OutEndPos, struct FVector* OutJointPos)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AnimGraphRuntime.KismetAnimationLibrary.K2_TwoBoneIK");
UKismetAnimationLibrary_K2_TwoBoneIK_Params params;
params.RootPos = RootPos;
params.JointPos = JointPos;
params.EndPos = EndPos;
params.JointTarget = JointTarget;
params.Effector = Effector;
params.bAllowStretching = bAllowStretching;
params.StartStretchRatio = StartStretchRatio;
params.MaxStretchScale = MaxStretchScale;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
if (OutJointPos != nullptr)
*OutJointPos = params.OutJointPos;
if (OutEndPos != nullptr)
*OutEndPos = params.OutEndPos;
}
// Function AnimGraphRuntime.KismetAnimationLibrary.K2_LookAt
// (Final, Native, Static, Public, HasOutParms, HasDefaults, BlueprintCallable, BlueprintPure)
// Parameters:
// struct FTransform CurrentTransform (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
// struct FVector TargetPosition (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
// struct FVector LookAtVector (Parm, IsPlainOldData)
// bool bUseUpVector (Parm, ZeroConstructor, IsPlainOldData)
// struct FVector UpVector (Parm, IsPlainOldData)
// float ClampConeInDegree (Parm, ZeroConstructor, IsPlainOldData)
// struct FTransform ReturnValue (Parm, OutParm, ReturnParm, IsPlainOldData)
struct FTransform UKismetAnimationLibrary::K2_LookAt(const struct FTransform& CurrentTransform, const struct FVector& TargetPosition, const struct FVector& LookAtVector, bool bUseUpVector, const struct FVector& UpVector, float ClampConeInDegree)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AnimGraphRuntime.KismetAnimationLibrary.K2_LookAt");
UKismetAnimationLibrary_K2_LookAt_Params params;
params.CurrentTransform = CurrentTransform;
params.TargetPosition = TargetPosition;
params.LookAtVector = LookAtVector;
params.bUseUpVector = bUseUpVector;
params.UpVector = UpVector;
params.ClampConeInDegree = ClampConeInDegree;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AnimGraphRuntime.PlayMontageCallbackProxy.OnNotifyEndReceived
// (Final, Native, Protected, HasOutParms)
// Parameters:
// struct FName NotifyName (Parm, ZeroConstructor, IsPlainOldData)
// struct FBranchingPointNotifyPayload BranchingPointNotifyPayload (ConstParm, Parm, OutParm, ReferenceParm)
void UPlayMontageCallbackProxy::OnNotifyEndReceived(const struct FName& NotifyName, const struct FBranchingPointNotifyPayload& BranchingPointNotifyPayload)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AnimGraphRuntime.PlayMontageCallbackProxy.OnNotifyEndReceived");
UPlayMontageCallbackProxy_OnNotifyEndReceived_Params params;
params.NotifyName = NotifyName;
params.BranchingPointNotifyPayload = BranchingPointNotifyPayload;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AnimGraphRuntime.PlayMontageCallbackProxy.OnNotifyBeginReceived
// (Final, Native, Protected, HasOutParms)
// Parameters:
// struct FName NotifyName (Parm, ZeroConstructor, IsPlainOldData)
// struct FBranchingPointNotifyPayload BranchingPointNotifyPayload (ConstParm, Parm, OutParm, ReferenceParm)
void UPlayMontageCallbackProxy::OnNotifyBeginReceived(const struct FName& NotifyName, const struct FBranchingPointNotifyPayload& BranchingPointNotifyPayload)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AnimGraphRuntime.PlayMontageCallbackProxy.OnNotifyBeginReceived");
UPlayMontageCallbackProxy_OnNotifyBeginReceived_Params params;
params.NotifyName = NotifyName;
params.BranchingPointNotifyPayload = BranchingPointNotifyPayload;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AnimGraphRuntime.PlayMontageCallbackProxy.OnMontageEnded
// (Final, Native, Protected)
// Parameters:
// class UAnimMontage* Montage (Parm, ZeroConstructor, IsPlainOldData)
// bool bInterrupted (Parm, ZeroConstructor, IsPlainOldData)
void UPlayMontageCallbackProxy::OnMontageEnded(class UAnimMontage* Montage, bool bInterrupted)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AnimGraphRuntime.PlayMontageCallbackProxy.OnMontageEnded");
UPlayMontageCallbackProxy_OnMontageEnded_Params params;
params.Montage = Montage;
params.bInterrupted = bInterrupted;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AnimGraphRuntime.PlayMontageCallbackProxy.OnMontageBlendingOut
// (Final, Native, Protected)
// Parameters:
// class UAnimMontage* Montage (Parm, ZeroConstructor, IsPlainOldData)
// bool bInterrupted (Parm, ZeroConstructor, IsPlainOldData)
void UPlayMontageCallbackProxy::OnMontageBlendingOut(class UAnimMontage* Montage, bool bInterrupted)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AnimGraphRuntime.PlayMontageCallbackProxy.OnMontageBlendingOut");
UPlayMontageCallbackProxy_OnMontageBlendingOut_Params params;
params.Montage = Montage;
params.bInterrupted = bInterrupted;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AnimGraphRuntime.PlayMontageCallbackProxy.CreateProxyObjectForPlayMontage
// (Final, Native, Static, Public, BlueprintCallable)
// Parameters:
// class USkeletalMeshComponent* InSkeletalMeshComponent (Parm, ZeroConstructor, InstancedReference, IsPlainOldData)
// class UAnimMontage* MontageToPlay (Parm, ZeroConstructor, IsPlainOldData)
// float PlayRate (Parm, ZeroConstructor, IsPlainOldData)
// float StartingPosition (Parm, ZeroConstructor, IsPlainOldData)
// struct FName StartingSection (Parm, ZeroConstructor, IsPlainOldData)
// class UPlayMontageCallbackProxy* ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
class UPlayMontageCallbackProxy* UPlayMontageCallbackProxy::CreateProxyObjectForPlayMontage(class USkeletalMeshComponent* InSkeletalMeshComponent, class UAnimMontage* MontageToPlay, float PlayRate, float StartingPosition, const struct FName& StartingSection)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AnimGraphRuntime.PlayMontageCallbackProxy.CreateProxyObjectForPlayMontage");
UPlayMontageCallbackProxy_CreateProxyObjectForPlayMontage_Params params;
params.InSkeletalMeshComponent = InSkeletalMeshComponent;
params.MontageToPlay = MontageToPlay;
params.PlayRate = PlayRate;
params.StartingPosition = StartingPosition;
params.StartingSection = StartingSection;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
}
+83
View File
@@ -0,0 +1,83 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Parameters
//---------------------------------------------------------------------------
// Function AnimGraphRuntime.KismetAnimationLibrary.K2_TwoBoneIK
struct UKismetAnimationLibrary_K2_TwoBoneIK_Params
{
struct FVector RootPos; // (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
struct FVector JointPos; // (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
struct FVector EndPos; // (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
struct FVector JointTarget; // (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
struct FVector Effector; // (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
struct FVector OutJointPos; // (Parm, OutParm, IsPlainOldData)
struct FVector OutEndPos; // (Parm, OutParm, IsPlainOldData)
bool bAllowStretching; // (Parm, ZeroConstructor, IsPlainOldData)
float StartStretchRatio; // (Parm, ZeroConstructor, IsPlainOldData)
float MaxStretchScale; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AnimGraphRuntime.KismetAnimationLibrary.K2_LookAt
struct UKismetAnimationLibrary_K2_LookAt_Params
{
struct FTransform CurrentTransform; // (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
struct FVector TargetPosition; // (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
struct FVector LookAtVector; // (Parm, IsPlainOldData)
bool bUseUpVector; // (Parm, ZeroConstructor, IsPlainOldData)
struct FVector UpVector; // (Parm, IsPlainOldData)
float ClampConeInDegree; // (Parm, ZeroConstructor, IsPlainOldData)
struct FTransform ReturnValue; // (Parm, OutParm, ReturnParm, IsPlainOldData)
};
// Function AnimGraphRuntime.PlayMontageCallbackProxy.OnNotifyEndReceived
struct UPlayMontageCallbackProxy_OnNotifyEndReceived_Params
{
struct FName NotifyName; // (Parm, ZeroConstructor, IsPlainOldData)
struct FBranchingPointNotifyPayload BranchingPointNotifyPayload; // (ConstParm, Parm, OutParm, ReferenceParm)
};
// Function AnimGraphRuntime.PlayMontageCallbackProxy.OnNotifyBeginReceived
struct UPlayMontageCallbackProxy_OnNotifyBeginReceived_Params
{
struct FName NotifyName; // (Parm, ZeroConstructor, IsPlainOldData)
struct FBranchingPointNotifyPayload BranchingPointNotifyPayload; // (ConstParm, Parm, OutParm, ReferenceParm)
};
// Function AnimGraphRuntime.PlayMontageCallbackProxy.OnMontageEnded
struct UPlayMontageCallbackProxy_OnMontageEnded_Params
{
class UAnimMontage* Montage; // (Parm, ZeroConstructor, IsPlainOldData)
bool bInterrupted; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AnimGraphRuntime.PlayMontageCallbackProxy.OnMontageBlendingOut
struct UPlayMontageCallbackProxy_OnMontageBlendingOut_Params
{
class UAnimMontage* Montage; // (Parm, ZeroConstructor, IsPlainOldData)
bool bInterrupted; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AnimGraphRuntime.PlayMontageCallbackProxy.CreateProxyObjectForPlayMontage
struct UPlayMontageCallbackProxy_CreateProxyObjectForPlayMontage_Params
{
class USkeletalMeshComponent* InSkeletalMeshComponent; // (Parm, ZeroConstructor, InstancedReference, IsPlainOldData)
class UAnimMontage* MontageToPlay; // (Parm, ZeroConstructor, IsPlainOldData)
float PlayRate; // (Parm, ZeroConstructor, IsPlainOldData)
float StartingPosition; // (Parm, ZeroConstructor, IsPlainOldData)
struct FName StartingSection; // (Parm, ZeroConstructor, IsPlainOldData)
class UPlayMontageCallbackProxy* ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
}
File diff suppressed because it is too large Load Diff
+11
View File
@@ -0,0 +1,11 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
}
+15
View File
@@ -0,0 +1,15 @@
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Functions
//---------------------------------------------------------------------------
}
+17
View File
@@ -0,0 +1,17 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Parameters
//---------------------------------------------------------------------------
}
+175
View File
@@ -0,0 +1,175 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Enums
//---------------------------------------------------------------------------
// Enum AnimationCore.ETransformConstraintType
enum class ETransformConstraintType : uint8_t
{
ETransformConstraintType__Translation = 0,
ETransformConstraintType__Rotation = 1,
ETransformConstraintType__Scale = 2,
ETransformConstraintType__Parent = 3,
ETransformConstraintType__ETransformConstraintType_MAX = 4
};
// Enum AnimationCore.EConstraintType
enum class EConstraintType : uint8_t
{
EConstraintType__Transform = 0,
EConstraintType__Aim = 1,
EConstraintType__MAX = 2
};
//---------------------------------------------------------------------------
//Script Structs
//---------------------------------------------------------------------------
// ScriptStruct AnimationCore.Axis
// 0x0010
struct FAxis
{
struct FVector Axis; // 0x0000(0x000C) (Edit, IsPlainOldData)
bool bInLocalSpace; // 0x000C(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x3]; // 0x000D(0x0003) MISSED OFFSET
};
// ScriptStruct AnimationCore.ConstraintDescriptor
// 0x0008
struct FConstraintDescriptor
{
EConstraintType Type; // 0x0000(0x0001) (ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x7]; // 0x0001(0x0007) MISSED OFFSET
};
// ScriptStruct AnimationCore.ConstraintData
// 0x0080
struct FConstraintData
{
struct FConstraintDescriptor Constraint; // 0x0000(0x0008)
struct FName TargetNode; // 0x0008(0x0008) (ZeroConstructor, IsPlainOldData)
float Weight; // 0x0010(0x0004) (ZeroConstructor, IsPlainOldData)
bool bMaintainOffset; // 0x0014(0x0001) (ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0xB]; // 0x0015(0x000B) MISSED OFFSET
struct FTransform Offset; // 0x0020(0x0030) (IsPlainOldData)
struct FTransform CurrentTransform; // 0x0050(0x0030) (Transient, IsPlainOldData)
};
// ScriptStruct AnimationCore.FilterOptionPerAxis
// 0x0003
struct FFilterOptionPerAxis
{
bool bX; // 0x0000(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
bool bY; // 0x0001(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
bool bZ; // 0x0002(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AnimationCore.ConstraintDescriptionEx
// 0x0008
struct FConstraintDescriptionEx
{
unsigned char UnknownData00[0x4]; // 0x0000(0x0004) MISSED OFFSET
struct FFilterOptionPerAxis AxesFilterOption; // 0x0004(0x0003) (Edit)
unsigned char UnknownData01[0x1]; // 0x0007(0x0001) MISSED OFFSET
};
// ScriptStruct AnimationCore.AimConstraintDescription
// 0x0024 (0x002C - 0x0008)
struct FAimConstraintDescription : public FConstraintDescriptionEx
{
struct FAxis LookAt_Axis; // 0x0008(0x0010) (Edit)
struct FAxis LookUp_Axis; // 0x0018(0x0010) (Edit)
bool bUseLookUp; // 0x0028(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x3]; // 0x0029(0x0003) MISSED OFFSET
};
// ScriptStruct AnimationCore.TransformConstraintDescription
// 0x0000 (0x0008 - 0x0008)
struct FTransformConstraintDescription : public FConstraintDescriptionEx
{
ETransformConstraintType TransformType; // 0x0007(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AnimationCore.ConstraintDescription
// 0x000D
struct FConstraintDescription
{
bool bTranslation; // 0x0000(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
bool bRotation; // 0x0001(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
bool bScale; // 0x0002(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
bool bParent; // 0x0003(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
struct FFilterOptionPerAxis TranslationAxes; // 0x0004(0x0003) (Edit, BlueprintVisible)
struct FFilterOptionPerAxis RotationAxes; // 0x0007(0x0003) (Edit, BlueprintVisible)
struct FFilterOptionPerAxis ScaleAxes; // 0x000A(0x0003) (Edit, BlueprintVisible)
};
// ScriptStruct AnimationCore.TransformConstraint
// 0x0028
struct FTransformConstraint
{
struct FConstraintDescription Operator; // 0x0000(0x000D) (Edit, BlueprintVisible)
unsigned char UnknownData00[0x3]; // 0x000D(0x0003) MISSED OFFSET
struct FName SourceNode; // 0x0010(0x0008) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
struct FName TargetNode; // 0x0018(0x0008) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float Weight; // 0x0020(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
bool bMaintainOffset; // 0x0024(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData01[0x3]; // 0x0025(0x0003) MISSED OFFSET
};
// ScriptStruct AnimationCore.ConstraintOffset
// 0x0060
struct FConstraintOffset
{
struct FVector Translation; // 0x0000(0x000C) (IsPlainOldData)
unsigned char UnknownData00[0x4]; // 0x000C(0x0004) MISSED OFFSET
struct FQuat Rotation; // 0x0010(0x0010) (IsPlainOldData)
struct FVector Scale; // 0x0020(0x000C) (IsPlainOldData)
unsigned char UnknownData01[0x4]; // 0x002C(0x0004) MISSED OFFSET
struct FTransform Parent; // 0x0030(0x0030) (IsPlainOldData)
};
// ScriptStruct AnimationCore.NodeChain
// 0x000C
struct FNodeChain
{
TArray<struct FName> Nodes; // 0x0000(0x000C) (ZeroConstructor)
};
// ScriptStruct AnimationCore.NodeObject
// 0x0010
struct FNodeObject
{
struct FName Name; // 0x0000(0x0008) (ZeroConstructor, IsPlainOldData)
struct FName ParentName; // 0x0008(0x0008) (ZeroConstructor, IsPlainOldData)
};
// ScriptStruct AnimationCore.NodeHierarchyData
// 0x0054
struct FNodeHierarchyData
{
TArray<struct FNodeObject> Nodes; // 0x0000(0x000C) (ZeroConstructor)
TArray<struct FTransform> Transforms; // 0x000C(0x000C) (ZeroConstructor)
TMap<struct FName, int> NodeNameToIndexMapping; // 0x0018(0x0050) (ZeroConstructor)
};
// ScriptStruct AnimationCore.NodeHierarchyWithUserData
// 0x0058
struct FNodeHierarchyWithUserData
{
unsigned char UnknownData00[0x4]; // 0x0000(0x0004) MISSED OFFSET
struct FNodeHierarchyData Hierarchy; // 0x0004(0x0054)
};
}
+112
View File
@@ -0,0 +1,112 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Classes
//---------------------------------------------------------------------------
// Class ApexDestruction.DestructibleActor
// 0x0018 (0x02D0 - 0x02B8)
class ADestructibleActor : public AActor
{
public:
class UDestructibleComponent* DestructibleComponent; // 0x02B8(0x0004) (Edit, BlueprintVisible, ExportObject, BlueprintReadOnly, ZeroConstructor, EditConst, InstancedReference, IsPlainOldData)
unsigned char bAffectNavigation : 1; // 0x02BC(0x0001) (Edit, BlueprintVisible, Config)
unsigned char UnknownData00[0x3]; // 0x02BD(0x0003) MISSED OFFSET
struct FScriptMulticastDelegate OnActorFracture; // 0x02C0(0x000C) (ZeroConstructor, InstancedReference, BlueprintAssignable)
unsigned char UnknownData01[0x4]; // 0x02CC(0x0004) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class ApexDestruction.DestructibleActor");
return pStaticClass;
}
};
// Class ApexDestruction.DestructibleComponent
// 0x00B0 (0x07E0 - 0x0730)
class UDestructibleComponent : public USkinnedMeshComponent
{
public:
unsigned char UnknownData00[0x4]; // 0x0730(0x0004) MISSED OFFSET
unsigned char bFractureEffectOverride : 1; // 0x0734(0x0001) (Edit, BlueprintVisible)
unsigned char UnknownData01[0x3]; // 0x0735(0x0003) MISSED OFFSET
TArray<struct FFractureEffect> FractureEffects; // 0x0738(0x000C) (Edit, BlueprintVisible, BlueprintReadOnly, EditFixedSize, ZeroConstructor)
bool bEnableHardSleeping; // 0x0744(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData02[0x3]; // 0x0745(0x0003) MISSED OFFSET
float LargeChunkThreshold; // 0x0748(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData03[0xC]; // 0x074C(0x000C) MISSED OFFSET
struct FScriptMulticastDelegate OnComponentFracture; // 0x0758(0x000C) (ZeroConstructor, InstancedReference, BlueprintAssignable)
unsigned char UnknownData04[0x7C]; // 0x0764(0x007C) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class ApexDestruction.DestructibleComponent");
return pStaticClass;
}
void SetDestructibleMesh(class UDestructibleMesh* NewMesh);
class UDestructibleMesh* GetDestructibleMesh();
void ApplyRadiusDamage(float BaseDamage, const struct FVector& HurtOrigin, float DamageRadius, float ImpulseStrength, bool bFullDamage);
void ApplyDamage(float DamageAmount, const struct FVector& HitLocation, const struct FVector& ImpulseDir, float ImpulseStrength);
};
// Class ApexDestruction.DestructibleFractureSettings
// 0x0054 (0x0070 - 0x001C)
class UDestructibleFractureSettings : public UObject
{
public:
unsigned char UnknownData00[0x4]; // 0x001C(0x0004) MISSED OFFSET
struct FFractureMaterial FractureMaterialDesc; // 0x0020(0x0024) (Edit, Transient)
int RandomSeed; // 0x0044(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
TArray<struct FVector> VoronoiSites; // 0x0048(0x000C) (ZeroConstructor)
int OriginalSubmeshCount; // 0x0054(0x0004) (ZeroConstructor, IsPlainOldData)
TArray<class UMaterialInterface*> Materials; // 0x0058(0x000C) (ZeroConstructor)
TArray<struct FDestructibleChunkParameters> ChunkParameters; // 0x0064(0x000C) (ZeroConstructor)
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class ApexDestruction.DestructibleFractureSettings");
return pStaticClass;
}
};
// Class ApexDestruction.DestructibleMesh
// 0x0088 (0x02A8 - 0x0220)
class UDestructibleMesh : public USkeletalMesh
{
public:
struct FDestructibleParameters DefaultDestructibleParameters; // 0x0220(0x007C) (Edit)
TArray<struct FFractureEffect> FractureEffects; // 0x029C(0x000C) (Edit, EditFixedSize, ZeroConstructor)
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class ApexDestruction.DestructibleMesh");
return pStaticClass;
}
};
}
+126
View File
@@ -0,0 +1,126 @@
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Functions
//---------------------------------------------------------------------------
// Function ApexDestruction.DestructibleComponent.SetDestructibleMesh
// (Final, Native, Public, BlueprintCallable)
// Parameters:
// class UDestructibleMesh* NewMesh (Parm, ZeroConstructor, IsPlainOldData)
void UDestructibleComponent::SetDestructibleMesh(class UDestructibleMesh* NewMesh)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function ApexDestruction.DestructibleComponent.SetDestructibleMesh");
UDestructibleComponent_SetDestructibleMesh_Params params;
params.NewMesh = NewMesh;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function ApexDestruction.DestructibleComponent.GetDestructibleMesh
// (Final, Native, Public, BlueprintCallable)
// Parameters:
// class UDestructibleMesh* ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
class UDestructibleMesh* UDestructibleComponent::GetDestructibleMesh()
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function ApexDestruction.DestructibleComponent.GetDestructibleMesh");
UDestructibleComponent_GetDestructibleMesh_Params params;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function ApexDestruction.DestructibleComponent.ApplyRadiusDamage
// (Native, Public, HasOutParms, HasDefaults, BlueprintCallable)
// Parameters:
// float BaseDamage (Parm, ZeroConstructor, IsPlainOldData)
// struct FVector HurtOrigin (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
// float DamageRadius (Parm, ZeroConstructor, IsPlainOldData)
// float ImpulseStrength (Parm, ZeroConstructor, IsPlainOldData)
// bool bFullDamage (Parm, ZeroConstructor, IsPlainOldData)
void UDestructibleComponent::ApplyRadiusDamage(float BaseDamage, const struct FVector& HurtOrigin, float DamageRadius, float ImpulseStrength, bool bFullDamage)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function ApexDestruction.DestructibleComponent.ApplyRadiusDamage");
UDestructibleComponent_ApplyRadiusDamage_Params params;
params.BaseDamage = BaseDamage;
params.HurtOrigin = HurtOrigin;
params.DamageRadius = DamageRadius;
params.ImpulseStrength = ImpulseStrength;
params.bFullDamage = bFullDamage;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function ApexDestruction.DestructibleComponent.ApplyDamage
// (Native, Public, HasOutParms, HasDefaults, BlueprintCallable)
// Parameters:
// float DamageAmount (Parm, ZeroConstructor, IsPlainOldData)
// struct FVector HitLocation (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
// struct FVector ImpulseDir (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
// float ImpulseStrength (Parm, ZeroConstructor, IsPlainOldData)
void UDestructibleComponent::ApplyDamage(float DamageAmount, const struct FVector& HitLocation, const struct FVector& ImpulseDir, float ImpulseStrength)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function ApexDestruction.DestructibleComponent.ApplyDamage");
UDestructibleComponent_ApplyDamage_Params params;
params.DamageAmount = DamageAmount;
params.HitLocation = HitLocation;
params.ImpulseDir = ImpulseDir;
params.ImpulseStrength = ImpulseStrength;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
}
+48
View File
@@ -0,0 +1,48 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Parameters
//---------------------------------------------------------------------------
// Function ApexDestruction.DestructibleComponent.SetDestructibleMesh
struct UDestructibleComponent_SetDestructibleMesh_Params
{
class UDestructibleMesh* NewMesh; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function ApexDestruction.DestructibleComponent.GetDestructibleMesh
struct UDestructibleComponent_GetDestructibleMesh_Params
{
class UDestructibleMesh* ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function ApexDestruction.DestructibleComponent.ApplyRadiusDamage
struct UDestructibleComponent_ApplyRadiusDamage_Params
{
float BaseDamage; // (Parm, ZeroConstructor, IsPlainOldData)
struct FVector HurtOrigin; // (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
float DamageRadius; // (Parm, ZeroConstructor, IsPlainOldData)
float ImpulseStrength; // (Parm, ZeroConstructor, IsPlainOldData)
bool bFullDamage; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function ApexDestruction.DestructibleComponent.ApplyDamage
struct UDestructibleComponent_ApplyDamage_Params
{
float DamageAmount; // (Parm, ZeroConstructor, IsPlainOldData)
struct FVector HitLocation; // (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
struct FVector ImpulseDir; // (ConstParm, Parm, OutParm, ReferenceParm, IsPlainOldData)
float ImpulseStrength; // (Parm, ZeroConstructor, IsPlainOldData)
};
}
+134
View File
@@ -0,0 +1,134 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Enums
//---------------------------------------------------------------------------
// Enum ApexDestruction.EImpactDamageOverride
enum class EImpactDamageOverride : uint8_t
{
IDO_None = 0,
IDO_On = 1,
IDO_Off = 2,
IDO_MAX = 3
};
//---------------------------------------------------------------------------
//Script Structs
//---------------------------------------------------------------------------
// ScriptStruct ApexDestruction.FractureMaterial
// 0x0024
struct FFractureMaterial
{
struct FVector2D UVScale; // 0x0000(0x0008) (Edit, IsPlainOldData)
struct FVector2D UVOffset; // 0x0008(0x0008) (Edit, IsPlainOldData)
struct FVector Tangent; // 0x0010(0x000C) (Edit, IsPlainOldData)
float UAngle; // 0x001C(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
int InteriorElementIndex; // 0x0020(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
};
// ScriptStruct ApexDestruction.DestructibleChunkParameters
// 0x0004
struct FDestructibleChunkParameters
{
bool bIsSupportChunk; // 0x0000(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
bool bDoNotFracture; // 0x0001(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
bool bDoNotDamage; // 0x0002(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
bool bDoNotCrumble; // 0x0003(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
};
// ScriptStruct ApexDestruction.DestructibleDamageParameters
// 0x001C
struct FDestructibleDamageParameters
{
float DamageThreshold; // 0x0000(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
float DamageSpread; // 0x0004(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
bool bEnableImpactDamage; // 0x0008(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x3]; // 0x0009(0x0003) MISSED OFFSET
float ImpactDamage; // 0x000C(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
int DefaultImpactDamageDepth; // 0x0010(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
bool bCustomImpactResistance; // 0x0014(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData01[0x3]; // 0x0015(0x0003) MISSED OFFSET
float ImpactResistance; // 0x0018(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
};
// ScriptStruct ApexDestruction.DestructibleDebrisParameters
// 0x002C
struct FDestructibleDebrisParameters
{
float DebrisLifetimeMin; // 0x0000(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
float DebrisLifetimeMax; // 0x0004(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
float DebrisMaxSeparationMin; // 0x0008(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
float DebrisMaxSeparationMax; // 0x000C(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
struct FBox ValidBounds; // 0x0010(0x001C) (Edit, IsPlainOldData)
};
// ScriptStruct ApexDestruction.DestructibleAdvancedParameters
// 0x0010
struct FDestructibleAdvancedParameters
{
float DamageCap; // 0x0000(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
float ImpactVelocityThreshold; // 0x0004(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
float MaxChunkSpeed; // 0x0008(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
float FractureImpulseScale; // 0x000C(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
};
// ScriptStruct ApexDestruction.DestructibleSpecialHierarchyDepths
// 0x0014
struct FDestructibleSpecialHierarchyDepths
{
int SupportDepth; // 0x0000(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
int MinimumFractureDepth; // 0x0004(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
bool bEnableDebris; // 0x0008(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x3]; // 0x0009(0x0003) MISSED OFFSET
int DebrisDepth; // 0x000C(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
int EssentialDepth; // 0x0010(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
};
// ScriptStruct ApexDestruction.DestructibleDepthParameters
// 0x0001
struct FDestructibleDepthParameters
{
TEnumAsByte<EImpactDamageOverride> ImpactDamageOverride; // 0x0000(0x0001) (Edit, ZeroConstructor, IsPlainOldData)
};
// ScriptStruct ApexDestruction.DestructibleParametersFlag
// 0x0004
struct FDestructibleParametersFlag
{
unsigned char bAccumulateDamage : 1; // 0x0000(0x0001) (Edit)
unsigned char bAssetDefinedSupport : 1; // 0x0000(0x0001) (Edit)
unsigned char bWorldSupport : 1; // 0x0000(0x0001) (Edit)
unsigned char bDebrisTimeout : 1; // 0x0000(0x0001) (Edit)
unsigned char bDebrisMaxSeparation : 1; // 0x0000(0x0001) (Edit)
unsigned char bCrumbleSmallestChunks : 1; // 0x0000(0x0001) (Edit)
unsigned char bAccurateRaycasts : 1; // 0x0000(0x0001) (Edit)
unsigned char bUseValidBounds : 1; // 0x0000(0x0001) (Edit)
unsigned char bFormExtendedStructures : 1; // 0x0001(0x0001) (Edit)
unsigned char UnknownData00[0x2]; // 0x0002(0x0002) MISSED OFFSET
};
// ScriptStruct ApexDestruction.DestructibleParameters
// 0x007C
struct FDestructibleParameters
{
struct FDestructibleDamageParameters DamageParameters; // 0x0000(0x001C) (Edit)
struct FDestructibleDebrisParameters DebrisParameters; // 0x001C(0x002C) (Edit)
struct FDestructibleAdvancedParameters AdvancedParameters; // 0x0048(0x0010) (Edit)
struct FDestructibleSpecialHierarchyDepths SpecialHierarchyDepths; // 0x0058(0x0014) (Edit)
TArray<struct FDestructibleDepthParameters> DepthParameters; // 0x006C(0x000C) (Edit, EditFixedSize, ZeroConstructor)
struct FDestructibleParametersFlag Flags; // 0x0078(0x0004) (Edit)
};
}
+94
View File
@@ -0,0 +1,94 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Classes
//---------------------------------------------------------------------------
// Class AssetRegistry.AssetRegistryImpl
// 0x0874 (0x0890 - 0x001C)
class UAssetRegistryImpl : public UObject
{
public:
unsigned char UnknownData00[0x874]; // 0x001C(0x0874) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AssetRegistry.AssetRegistryImpl");
return pStaticClass;
}
};
// Class AssetRegistry.AssetRegistryHelpers
// 0x0004 (0x0020 - 0x001C)
class UAssetRegistryHelpers : public UObject
{
public:
unsigned char UnknownData00[0x4]; // 0x001C(0x0004) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AssetRegistry.AssetRegistryHelpers");
return pStaticClass;
}
static struct FSoftObjectPath ToSoftObjectPath(const struct FAssetData& InAssetData);
static struct FARFilter SetFilterTagsAndValues(const struct FARFilter& InFilter, TArray<struct FTagAndValue> InTagsAndValues);
static bool IsValid(const struct FAssetData& InAssetData);
static bool IsUAsset(const struct FAssetData& InAssetData);
static bool IsRedirector(const struct FAssetData& InAssetData);
static bool IsAssetLoaded(const struct FAssetData& InAssetData);
static bool GetTagValue(const struct FAssetData& InAssetData, const struct FName& InTagName, struct FString* OutTagValue);
static struct FString GetFullName(const struct FAssetData& InAssetData);
static struct FString GetExportTextName(const struct FAssetData& InAssetData);
static class UClass* GetClass(const struct FAssetData& InAssetData);
static TScriptInterface<class UAssetRegistry> GetAssetRegistry();
static class UObject* GetAsset(const struct FAssetData& InAssetData);
static struct FAssetData CreateAssetData(class UObject* InAsset, bool bAllowBlueprintClass);
};
// Class AssetRegistry.AssetRegistry
// 0x0000 (0x0020 - 0x0020)
class UAssetRegistry : public UInterface
{
public:
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AssetRegistry.AssetRegistry");
return pStaticClass;
}
void RunAssetsThroughFilter(const struct FARFilter& Filter, TArray<struct FAssetData>* AssetDataList);
bool IsLoadingAssets();
bool HasAssets(const struct FName& PackagePath, bool bRecursive);
void GetSubPaths(const struct FString& InBasePath, bool bInRecurse, TArray<struct FString>* OutPathList);
bool GetAssetsByPath(const struct FName& PackagePath, bool bRecursive, bool bIncludeOnlyOnDiskAssets, TArray<struct FAssetData>* OutAssetData);
bool GetAssetsByPackageName(const struct FName& PackageName, bool bIncludeOnlyOnDiskAssets, TArray<struct FAssetData>* OutAssetData);
bool GetAssetsByClass(const struct FName& ClassName, bool bSearchSubClasses, TArray<struct FAssetData>* OutAssetData);
bool GetAssets(const struct FARFilter& Filter, TArray<struct FAssetData>* OutAssetData);
struct FAssetData GetAssetByObjectPath(const struct FName& ObjectPath, bool bIncludeOnlyOnDiskAssets);
void GetAllCachedPaths(TArray<struct FString>* OutPathList);
bool GetAllAssets(bool bIncludeOnlyOnDiskAssets, TArray<struct FAssetData>* OutAssetData);
};
}
+704
View File
@@ -0,0 +1,704 @@
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Functions
//---------------------------------------------------------------------------
// Function AssetRegistry.AssetRegistryHelpers.ToSoftObjectPath
// (Final, Native, Static, Public, HasOutParms, HasDefaults, BlueprintCallable, BlueprintPure)
// Parameters:
// struct FAssetData InAssetData (ConstParm, Parm, OutParm, ReferenceParm)
// struct FSoftObjectPath ReturnValue (Parm, OutParm, ReturnParm)
struct FSoftObjectPath UAssetRegistryHelpers::ToSoftObjectPath(const struct FAssetData& InAssetData)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistryHelpers.ToSoftObjectPath");
UAssetRegistryHelpers_ToSoftObjectPath_Params params;
params.InAssetData = InAssetData;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistryHelpers.SetFilterTagsAndValues
// (Final, Native, Static, Public, HasOutParms, BlueprintCallable, BlueprintPure)
// Parameters:
// struct FARFilter InFilter (ConstParm, Parm, OutParm, ReferenceParm)
// TArray<struct FTagAndValue> InTagsAndValues (ConstParm, Parm, OutParm, ZeroConstructor, ReferenceParm)
// struct FARFilter ReturnValue (Parm, OutParm, ReturnParm)
struct FARFilter UAssetRegistryHelpers::SetFilterTagsAndValues(const struct FARFilter& InFilter, TArray<struct FTagAndValue> InTagsAndValues)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistryHelpers.SetFilterTagsAndValues");
UAssetRegistryHelpers_SetFilterTagsAndValues_Params params;
params.InFilter = InFilter;
params.InTagsAndValues = InTagsAndValues;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistryHelpers.IsValid
// (Final, Native, Static, Public, HasOutParms, BlueprintCallable, BlueprintPure)
// Parameters:
// struct FAssetData InAssetData (ConstParm, Parm, OutParm, ReferenceParm)
// bool ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
bool UAssetRegistryHelpers::IsValid(const struct FAssetData& InAssetData)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistryHelpers.IsValid");
UAssetRegistryHelpers_IsValid_Params params;
params.InAssetData = InAssetData;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistryHelpers.IsUAsset
// (Final, Native, Static, Public, HasOutParms, BlueprintCallable, BlueprintPure)
// Parameters:
// struct FAssetData InAssetData (ConstParm, Parm, OutParm, ReferenceParm)
// bool ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
bool UAssetRegistryHelpers::IsUAsset(const struct FAssetData& InAssetData)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistryHelpers.IsUAsset");
UAssetRegistryHelpers_IsUAsset_Params params;
params.InAssetData = InAssetData;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistryHelpers.IsRedirector
// (Final, Native, Static, Public, HasOutParms, BlueprintCallable, BlueprintPure)
// Parameters:
// struct FAssetData InAssetData (ConstParm, Parm, OutParm, ReferenceParm)
// bool ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
bool UAssetRegistryHelpers::IsRedirector(const struct FAssetData& InAssetData)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistryHelpers.IsRedirector");
UAssetRegistryHelpers_IsRedirector_Params params;
params.InAssetData = InAssetData;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistryHelpers.IsAssetLoaded
// (Final, Native, Static, Public, HasOutParms, BlueprintCallable, BlueprintPure)
// Parameters:
// struct FAssetData InAssetData (ConstParm, Parm, OutParm, ReferenceParm)
// bool ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
bool UAssetRegistryHelpers::IsAssetLoaded(const struct FAssetData& InAssetData)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistryHelpers.IsAssetLoaded");
UAssetRegistryHelpers_IsAssetLoaded_Params params;
params.InAssetData = InAssetData;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistryHelpers.GetTagValue
// (Final, Native, Static, Public, HasOutParms, BlueprintCallable, BlueprintPure)
// Parameters:
// struct FAssetData InAssetData (ConstParm, Parm, OutParm, ReferenceParm)
// struct FName InTagName (ConstParm, Parm, OutParm, ZeroConstructor, ReferenceParm, IsPlainOldData)
// struct FString OutTagValue (Parm, OutParm, ZeroConstructor)
// bool ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
bool UAssetRegistryHelpers::GetTagValue(const struct FAssetData& InAssetData, const struct FName& InTagName, struct FString* OutTagValue)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistryHelpers.GetTagValue");
UAssetRegistryHelpers_GetTagValue_Params params;
params.InAssetData = InAssetData;
params.InTagName = InTagName;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
if (OutTagValue != nullptr)
*OutTagValue = params.OutTagValue;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistryHelpers.GetFullName
// (Final, Native, Static, Public, HasOutParms, BlueprintCallable, BlueprintPure)
// Parameters:
// struct FAssetData InAssetData (ConstParm, Parm, OutParm, ReferenceParm)
// struct FString ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm)
struct FString UAssetRegistryHelpers::GetFullName(const struct FAssetData& InAssetData)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistryHelpers.GetFullName");
UAssetRegistryHelpers_GetFullName_Params params;
params.InAssetData = InAssetData;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistryHelpers.GetExportTextName
// (Final, Native, Static, Public, HasOutParms, BlueprintCallable, BlueprintPure)
// Parameters:
// struct FAssetData InAssetData (ConstParm, Parm, OutParm, ReferenceParm)
// struct FString ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm)
struct FString UAssetRegistryHelpers::GetExportTextName(const struct FAssetData& InAssetData)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistryHelpers.GetExportTextName");
UAssetRegistryHelpers_GetExportTextName_Params params;
params.InAssetData = InAssetData;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistryHelpers.GetClass
// (Final, Native, Static, Public, HasOutParms, BlueprintCallable, BlueprintPure)
// Parameters:
// struct FAssetData InAssetData (ConstParm, Parm, OutParm, ReferenceParm)
// class UClass* ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
class UClass* UAssetRegistryHelpers::GetClass(const struct FAssetData& InAssetData)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistryHelpers.GetClass");
UAssetRegistryHelpers_GetClass_Params params;
params.InAssetData = InAssetData;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistryHelpers.GetAssetRegistry
// (Final, Native, Static, Public, BlueprintCallable, BlueprintPure)
// Parameters:
// TScriptInterface<class UAssetRegistry> ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
TScriptInterface<class UAssetRegistry> UAssetRegistryHelpers::GetAssetRegistry()
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistryHelpers.GetAssetRegistry");
UAssetRegistryHelpers_GetAssetRegistry_Params params;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistryHelpers.GetAsset
// (Final, Native, Static, Public, HasOutParms, BlueprintCallable, BlueprintPure)
// Parameters:
// struct FAssetData InAssetData (ConstParm, Parm, OutParm, ReferenceParm)
// class UObject* ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
class UObject* UAssetRegistryHelpers::GetAsset(const struct FAssetData& InAssetData)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistryHelpers.GetAsset");
UAssetRegistryHelpers_GetAsset_Params params;
params.InAssetData = InAssetData;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistryHelpers.CreateAssetData
// (Final, Native, Static, Public, BlueprintCallable, BlueprintPure)
// Parameters:
// class UObject* InAsset (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
// bool bAllowBlueprintClass (Parm, ZeroConstructor, IsPlainOldData)
// struct FAssetData ReturnValue (Parm, OutParm, ReturnParm)
struct FAssetData UAssetRegistryHelpers::CreateAssetData(class UObject* InAsset, bool bAllowBlueprintClass)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistryHelpers.CreateAssetData");
UAssetRegistryHelpers_CreateAssetData_Params params;
params.InAsset = InAsset;
params.bAllowBlueprintClass = bAllowBlueprintClass;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistry.RunAssetsThroughFilter
// (Native, Public, HasOutParms, BlueprintCallable, BlueprintPure, Const)
// Parameters:
// TArray<struct FAssetData> AssetDataList (Parm, OutParm, ZeroConstructor)
// struct FARFilter Filter (ConstParm, Parm, OutParm, ReferenceParm)
void UAssetRegistry::RunAssetsThroughFilter(const struct FARFilter& Filter, TArray<struct FAssetData>* AssetDataList)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistry.RunAssetsThroughFilter");
UAssetRegistry_RunAssetsThroughFilter_Params params;
params.Filter = Filter;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
if (AssetDataList != nullptr)
*AssetDataList = params.AssetDataList;
}
// Function AssetRegistry.AssetRegistry.IsLoadingAssets
// (Native, Public, BlueprintCallable, BlueprintPure, Const)
// Parameters:
// bool ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
bool UAssetRegistry::IsLoadingAssets()
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistry.IsLoadingAssets");
UAssetRegistry_IsLoadingAssets_Params params;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistry.HasAssets
// (Native, Public, BlueprintCallable, BlueprintPure, Const)
// Parameters:
// struct FName PackagePath (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
// bool bRecursive (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
// bool ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
bool UAssetRegistry::HasAssets(const struct FName& PackagePath, bool bRecursive)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistry.HasAssets");
UAssetRegistry_HasAssets_Params params;
params.PackagePath = PackagePath;
params.bRecursive = bRecursive;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistry.GetSubPaths
// (Native, Public, HasOutParms, BlueprintCallable, BlueprintPure, Const)
// Parameters:
// struct FString InBasePath (Parm, ZeroConstructor)
// TArray<struct FString> OutPathList (Parm, OutParm, ZeroConstructor)
// bool bInRecurse (Parm, ZeroConstructor, IsPlainOldData)
void UAssetRegistry::GetSubPaths(const struct FString& InBasePath, bool bInRecurse, TArray<struct FString>* OutPathList)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistry.GetSubPaths");
UAssetRegistry_GetSubPaths_Params params;
params.InBasePath = InBasePath;
params.bInRecurse = bInRecurse;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
if (OutPathList != nullptr)
*OutPathList = params.OutPathList;
}
// Function AssetRegistry.AssetRegistry.GetAssetsByPath
// (Native, Public, HasOutParms, BlueprintCallable, BlueprintPure, Const)
// Parameters:
// struct FName PackagePath (Parm, ZeroConstructor, IsPlainOldData)
// TArray<struct FAssetData> OutAssetData (Parm, OutParm, ZeroConstructor)
// bool bRecursive (Parm, ZeroConstructor, IsPlainOldData)
// bool bIncludeOnlyOnDiskAssets (Parm, ZeroConstructor, IsPlainOldData)
// bool ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
bool UAssetRegistry::GetAssetsByPath(const struct FName& PackagePath, bool bRecursive, bool bIncludeOnlyOnDiskAssets, TArray<struct FAssetData>* OutAssetData)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistry.GetAssetsByPath");
UAssetRegistry_GetAssetsByPath_Params params;
params.PackagePath = PackagePath;
params.bRecursive = bRecursive;
params.bIncludeOnlyOnDiskAssets = bIncludeOnlyOnDiskAssets;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
if (OutAssetData != nullptr)
*OutAssetData = params.OutAssetData;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistry.GetAssetsByPackageName
// (Native, Public, HasOutParms, BlueprintCallable, BlueprintPure, Const)
// Parameters:
// struct FName PackageName (Parm, ZeroConstructor, IsPlainOldData)
// TArray<struct FAssetData> OutAssetData (Parm, OutParm, ZeroConstructor)
// bool bIncludeOnlyOnDiskAssets (Parm, ZeroConstructor, IsPlainOldData)
// bool ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
bool UAssetRegistry::GetAssetsByPackageName(const struct FName& PackageName, bool bIncludeOnlyOnDiskAssets, TArray<struct FAssetData>* OutAssetData)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistry.GetAssetsByPackageName");
UAssetRegistry_GetAssetsByPackageName_Params params;
params.PackageName = PackageName;
params.bIncludeOnlyOnDiskAssets = bIncludeOnlyOnDiskAssets;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
if (OutAssetData != nullptr)
*OutAssetData = params.OutAssetData;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistry.GetAssetsByClass
// (Native, Public, HasOutParms, BlueprintCallable, BlueprintPure, Const)
// Parameters:
// struct FName ClassName (Parm, ZeroConstructor, IsPlainOldData)
// TArray<struct FAssetData> OutAssetData (Parm, OutParm, ZeroConstructor)
// bool bSearchSubClasses (Parm, ZeroConstructor, IsPlainOldData)
// bool ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
bool UAssetRegistry::GetAssetsByClass(const struct FName& ClassName, bool bSearchSubClasses, TArray<struct FAssetData>* OutAssetData)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistry.GetAssetsByClass");
UAssetRegistry_GetAssetsByClass_Params params;
params.ClassName = ClassName;
params.bSearchSubClasses = bSearchSubClasses;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
if (OutAssetData != nullptr)
*OutAssetData = params.OutAssetData;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistry.GetAssets
// (Native, Public, HasOutParms, BlueprintCallable, BlueprintPure, Const)
// Parameters:
// struct FARFilter Filter (ConstParm, Parm, OutParm, ReferenceParm)
// TArray<struct FAssetData> OutAssetData (Parm, OutParm, ZeroConstructor)
// bool ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
bool UAssetRegistry::GetAssets(const struct FARFilter& Filter, TArray<struct FAssetData>* OutAssetData)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistry.GetAssets");
UAssetRegistry_GetAssets_Params params;
params.Filter = Filter;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
if (OutAssetData != nullptr)
*OutAssetData = params.OutAssetData;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistry.GetAssetByObjectPath
// (Native, Public, BlueprintCallable, BlueprintPure, Const)
// Parameters:
// struct FName ObjectPath (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
// bool bIncludeOnlyOnDiskAssets (Parm, ZeroConstructor, IsPlainOldData)
// struct FAssetData ReturnValue (Parm, OutParm, ReturnParm)
struct FAssetData UAssetRegistry::GetAssetByObjectPath(const struct FName& ObjectPath, bool bIncludeOnlyOnDiskAssets)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistry.GetAssetByObjectPath");
UAssetRegistry_GetAssetByObjectPath_Params params;
params.ObjectPath = ObjectPath;
params.bIncludeOnlyOnDiskAssets = bIncludeOnlyOnDiskAssets;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AssetRegistry.AssetRegistry.GetAllCachedPaths
// (Native, Public, HasOutParms, BlueprintCallable, BlueprintPure, Const)
// Parameters:
// TArray<struct FString> OutPathList (Parm, OutParm, ZeroConstructor)
void UAssetRegistry::GetAllCachedPaths(TArray<struct FString>* OutPathList)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistry.GetAllCachedPaths");
UAssetRegistry_GetAllCachedPaths_Params params;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
if (OutPathList != nullptr)
*OutPathList = params.OutPathList;
}
// Function AssetRegistry.AssetRegistry.GetAllAssets
// (Native, Public, HasOutParms, BlueprintCallable, BlueprintPure, Const)
// Parameters:
// TArray<struct FAssetData> OutAssetData (Parm, OutParm, ZeroConstructor)
// bool bIncludeOnlyOnDiskAssets (Parm, ZeroConstructor, IsPlainOldData)
// bool ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
bool UAssetRegistry::GetAllAssets(bool bIncludeOnlyOnDiskAssets, TArray<struct FAssetData>* OutAssetData)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AssetRegistry.AssetRegistry.GetAllAssets");
UAssetRegistry_GetAllAssets_Params params;
params.bIncludeOnlyOnDiskAssets = bIncludeOnlyOnDiskAssets;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
if (OutAssetData != nullptr)
*OutAssetData = params.OutAssetData;
return params.ReturnValue;
}
}
+198
View File
@@ -0,0 +1,198 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Parameters
//---------------------------------------------------------------------------
// Function AssetRegistry.AssetRegistryHelpers.ToSoftObjectPath
struct UAssetRegistryHelpers_ToSoftObjectPath_Params
{
struct FAssetData InAssetData; // (ConstParm, Parm, OutParm, ReferenceParm)
struct FSoftObjectPath ReturnValue; // (Parm, OutParm, ReturnParm)
};
// Function AssetRegistry.AssetRegistryHelpers.SetFilterTagsAndValues
struct UAssetRegistryHelpers_SetFilterTagsAndValues_Params
{
struct FARFilter InFilter; // (ConstParm, Parm, OutParm, ReferenceParm)
TArray<struct FTagAndValue> InTagsAndValues; // (ConstParm, Parm, OutParm, ZeroConstructor, ReferenceParm)
struct FARFilter ReturnValue; // (Parm, OutParm, ReturnParm)
};
// Function AssetRegistry.AssetRegistryHelpers.IsValid
struct UAssetRegistryHelpers_IsValid_Params
{
struct FAssetData InAssetData; // (ConstParm, Parm, OutParm, ReferenceParm)
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AssetRegistry.AssetRegistryHelpers.IsUAsset
struct UAssetRegistryHelpers_IsUAsset_Params
{
struct FAssetData InAssetData; // (ConstParm, Parm, OutParm, ReferenceParm)
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AssetRegistry.AssetRegistryHelpers.IsRedirector
struct UAssetRegistryHelpers_IsRedirector_Params
{
struct FAssetData InAssetData; // (ConstParm, Parm, OutParm, ReferenceParm)
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AssetRegistry.AssetRegistryHelpers.IsAssetLoaded
struct UAssetRegistryHelpers_IsAssetLoaded_Params
{
struct FAssetData InAssetData; // (ConstParm, Parm, OutParm, ReferenceParm)
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AssetRegistry.AssetRegistryHelpers.GetTagValue
struct UAssetRegistryHelpers_GetTagValue_Params
{
struct FAssetData InAssetData; // (ConstParm, Parm, OutParm, ReferenceParm)
struct FName InTagName; // (ConstParm, Parm, OutParm, ZeroConstructor, ReferenceParm, IsPlainOldData)
struct FString OutTagValue; // (Parm, OutParm, ZeroConstructor)
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AssetRegistry.AssetRegistryHelpers.GetFullName
struct UAssetRegistryHelpers_GetFullName_Params
{
struct FAssetData InAssetData; // (ConstParm, Parm, OutParm, ReferenceParm)
struct FString ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm)
};
// Function AssetRegistry.AssetRegistryHelpers.GetExportTextName
struct UAssetRegistryHelpers_GetExportTextName_Params
{
struct FAssetData InAssetData; // (ConstParm, Parm, OutParm, ReferenceParm)
struct FString ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm)
};
// Function AssetRegistry.AssetRegistryHelpers.GetClass
struct UAssetRegistryHelpers_GetClass_Params
{
struct FAssetData InAssetData; // (ConstParm, Parm, OutParm, ReferenceParm)
class UClass* ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AssetRegistry.AssetRegistryHelpers.GetAssetRegistry
struct UAssetRegistryHelpers_GetAssetRegistry_Params
{
TScriptInterface<class UAssetRegistry> ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AssetRegistry.AssetRegistryHelpers.GetAsset
struct UAssetRegistryHelpers_GetAsset_Params
{
struct FAssetData InAssetData; // (ConstParm, Parm, OutParm, ReferenceParm)
class UObject* ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AssetRegistry.AssetRegistryHelpers.CreateAssetData
struct UAssetRegistryHelpers_CreateAssetData_Params
{
class UObject* InAsset; // (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
bool bAllowBlueprintClass; // (Parm, ZeroConstructor, IsPlainOldData)
struct FAssetData ReturnValue; // (Parm, OutParm, ReturnParm)
};
// Function AssetRegistry.AssetRegistry.RunAssetsThroughFilter
struct UAssetRegistry_RunAssetsThroughFilter_Params
{
TArray<struct FAssetData> AssetDataList; // (Parm, OutParm, ZeroConstructor)
struct FARFilter Filter; // (ConstParm, Parm, OutParm, ReferenceParm)
};
// Function AssetRegistry.AssetRegistry.IsLoadingAssets
struct UAssetRegistry_IsLoadingAssets_Params
{
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AssetRegistry.AssetRegistry.HasAssets
struct UAssetRegistry_HasAssets_Params
{
struct FName PackagePath; // (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
bool bRecursive; // (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AssetRegistry.AssetRegistry.GetSubPaths
struct UAssetRegistry_GetSubPaths_Params
{
struct FString InBasePath; // (Parm, ZeroConstructor)
TArray<struct FString> OutPathList; // (Parm, OutParm, ZeroConstructor)
bool bInRecurse; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AssetRegistry.AssetRegistry.GetAssetsByPath
struct UAssetRegistry_GetAssetsByPath_Params
{
struct FName PackagePath; // (Parm, ZeroConstructor, IsPlainOldData)
TArray<struct FAssetData> OutAssetData; // (Parm, OutParm, ZeroConstructor)
bool bRecursive; // (Parm, ZeroConstructor, IsPlainOldData)
bool bIncludeOnlyOnDiskAssets; // (Parm, ZeroConstructor, IsPlainOldData)
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AssetRegistry.AssetRegistry.GetAssetsByPackageName
struct UAssetRegistry_GetAssetsByPackageName_Params
{
struct FName PackageName; // (Parm, ZeroConstructor, IsPlainOldData)
TArray<struct FAssetData> OutAssetData; // (Parm, OutParm, ZeroConstructor)
bool bIncludeOnlyOnDiskAssets; // (Parm, ZeroConstructor, IsPlainOldData)
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AssetRegistry.AssetRegistry.GetAssetsByClass
struct UAssetRegistry_GetAssetsByClass_Params
{
struct FName ClassName; // (Parm, ZeroConstructor, IsPlainOldData)
TArray<struct FAssetData> OutAssetData; // (Parm, OutParm, ZeroConstructor)
bool bSearchSubClasses; // (Parm, ZeroConstructor, IsPlainOldData)
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AssetRegistry.AssetRegistry.GetAssets
struct UAssetRegistry_GetAssets_Params
{
struct FARFilter Filter; // (ConstParm, Parm, OutParm, ReferenceParm)
TArray<struct FAssetData> OutAssetData; // (Parm, OutParm, ZeroConstructor)
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AssetRegistry.AssetRegistry.GetAssetByObjectPath
struct UAssetRegistry_GetAssetByObjectPath_Params
{
struct FName ObjectPath; // (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
bool bIncludeOnlyOnDiskAssets; // (Parm, ZeroConstructor, IsPlainOldData)
struct FAssetData ReturnValue; // (Parm, OutParm, ReturnParm)
};
// Function AssetRegistry.AssetRegistry.GetAllCachedPaths
struct UAssetRegistry_GetAllCachedPaths_Params
{
TArray<struct FString> OutPathList; // (Parm, OutParm, ZeroConstructor)
};
// Function AssetRegistry.AssetRegistry.GetAllAssets
struct UAssetRegistry_GetAllAssets_Params
{
TArray<struct FAssetData> OutAssetData; // (Parm, OutParm, ZeroConstructor)
bool bIncludeOnlyOnDiskAssets; // (Parm, ZeroConstructor, IsPlainOldData)
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
}
+69
View File
@@ -0,0 +1,69 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Script Structs
//---------------------------------------------------------------------------
// ScriptStruct AssetRegistry.AssetData
// 0x0040
struct FAssetData
{
struct FName ObjectPath; // 0x0000(0x0008) (BlueprintVisible, BlueprintReadOnly, ZeroConstructor, Transient, IsPlainOldData)
struct FName PackageName; // 0x0008(0x0008) (BlueprintVisible, BlueprintReadOnly, ZeroConstructor, Transient, IsPlainOldData)
struct FName PackagePath; // 0x0010(0x0008) (BlueprintVisible, BlueprintReadOnly, ZeroConstructor, Transient, IsPlainOldData)
struct FName AssetName; // 0x0018(0x0008) (BlueprintVisible, BlueprintReadOnly, ZeroConstructor, Transient, IsPlainOldData)
struct FName AssetClass; // 0x0020(0x0008) (BlueprintVisible, BlueprintReadOnly, ZeroConstructor, Transient, IsPlainOldData)
unsigned char UnknownData00[0x18]; // 0x0028(0x0018) MISSED OFFSET
};
// ScriptStruct AssetRegistry.ARFilter
// 0x00AC
struct FARFilter
{
TArray<struct FName> PackageNames; // 0x0000(0x000C) (BlueprintVisible, ZeroConstructor, Transient)
TArray<struct FName> PackagePaths; // 0x000C(0x000C) (BlueprintVisible, ZeroConstructor, Transient)
TArray<struct FName> ObjectPaths; // 0x0018(0x000C) (BlueprintVisible, ZeroConstructor, Transient)
TArray<struct FName> ClassNames; // 0x0024(0x000C) (BlueprintVisible, ZeroConstructor, Transient)
unsigned char UnknownData00[0x3C]; // 0x0030(0x003C) MISSED OFFSET
unsigned char UnknownData01[0x3C]; // 0x0030(0x003C) UNKNOWN PROPERTY: SetProperty AssetRegistry.ARFilter.RecursiveClassesExclusionSet
bool bRecursivePaths; // 0x00A8(0x0001) (BlueprintVisible, ZeroConstructor, Transient, IsPlainOldData)
bool bRecursiveClasses; // 0x00A9(0x0001) (BlueprintVisible, ZeroConstructor, Transient, IsPlainOldData)
bool bIncludeOnlyOnDiskAssets; // 0x00AA(0x0001) (BlueprintVisible, ZeroConstructor, Transient, IsPlainOldData)
unsigned char UnknownData02[0x1]; // 0x00AB(0x0001) MISSED OFFSET
};
// ScriptStruct AssetRegistry.TagAndValue
// 0x0018
struct FTagAndValue
{
struct FName Tag; // 0x0000(0x0008) (BlueprintVisible, ZeroConstructor, Transient, IsPlainOldData)
struct FString Value; // 0x0008(0x000C) (BlueprintVisible, ZeroConstructor, Transient)
unsigned char UnknownData00[0x4]; // 0x0014(0x0004) MISSED OFFSET
};
// ScriptStruct AssetRegistry.AssetBundleEntry
// 0x0028
struct FAssetBundleEntry
{
struct FPrimaryAssetId BundleScope; // 0x0000(0x0010)
struct FName BundleName; // 0x0010(0x0008) (ZeroConstructor, IsPlainOldData)
TArray<struct FSoftObjectPath> BundleAssets; // 0x0018(0x000C) (ZeroConstructor)
unsigned char UnknownData00[0x4]; // 0x0024(0x0004) MISSED OFFSET
};
// ScriptStruct AssetRegistry.AssetBundleData
// 0x000C
struct FAssetBundleData
{
TArray<struct FAssetBundleEntry> Bundles; // 0x0000(0x000C) (ZeroConstructor)
};
}
+161
View File
@@ -0,0 +1,161 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Classes
//---------------------------------------------------------------------------
// Class AudioMixer.AudioMixerBlueprintLibrary
// 0x0000 (0x0020 - 0x0020)
class UAudioMixerBlueprintLibrary : public UBlueprintFunctionLibrary
{
public:
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AudioMixer.AudioMixerBlueprintLibrary");
return pStaticClass;
}
static void SetBypassSourceEffectChainEntry(class UObject* WorldContextObject, class USoundEffectSourcePresetChain* PresetChain, int EntryIndex, bool bBypassed);
static void RemoveSourceEffectFromPresetChain(class UObject* WorldContextObject, class USoundEffectSourcePresetChain* PresetChain, int EntryIndex);
static void RemoveMasterSubmixEffect(class UObject* WorldContextObject, class USoundEffectSubmixPreset* SubmixEffectPreset);
static int GetNumberOfEntriesInSourceEffectChain(class UObject* WorldContextObject, class USoundEffectSourcePresetChain* PresetChain);
static void ClearMasterSubmixEffects(class UObject* WorldContextObject);
static void AddSourceEffectToPresetChain(class UObject* WorldContextObject, class USoundEffectSourcePresetChain* PresetChain, const struct FSourceEffectChainEntry& Entry);
static void AddMasterSubmixEffect(class UObject* WorldContextObject, class USoundEffectSubmixPreset* SubmixEffectPreset);
};
// Class AudioMixer.SubmixEffectDynamicsProcessorPreset
// 0x0050 (0x0080 - 0x0030)
class USubmixEffectDynamicsProcessorPreset : public USoundEffectSubmixPreset
{
public:
unsigned char UnknownData00[0x28]; // 0x0030(0x0028) MISSED OFFSET
struct FSubmixEffectDynamicsProcessorSettings Settings; // 0x0058(0x0028) (Edit, BlueprintVisible)
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AudioMixer.SubmixEffectDynamicsProcessorPreset");
return pStaticClass;
}
void SetSettings(const struct FSubmixEffectDynamicsProcessorSettings& InSettings);
};
// Class AudioMixer.SubmixEffectSubmixEQPreset
// 0x0018 (0x0048 - 0x0030)
class USubmixEffectSubmixEQPreset : public USoundEffectSubmixPreset
{
public:
unsigned char UnknownData00[0xC]; // 0x0030(0x000C) MISSED OFFSET
struct FSubmixEffectSubmixEQSettings Settings; // 0x003C(0x000C) (Edit, BlueprintVisible)
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AudioMixer.SubmixEffectSubmixEQPreset");
return pStaticClass;
}
void SetSettings(const struct FSubmixEffectSubmixEQSettings& InSettings);
};
// Class AudioMixer.SubmixEffectReverbPreset
// 0x0060 (0x0090 - 0x0030)
class USubmixEffectReverbPreset : public USoundEffectSubmixPreset
{
public:
unsigned char UnknownData00[0x30]; // 0x0030(0x0030) MISSED OFFSET
struct FSubmixEffectReverbSettings Settings; // 0x0060(0x0030) (Edit, BlueprintVisible)
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AudioMixer.SubmixEffectReverbPreset");
return pStaticClass;
}
void SetSettingsWithReverbEffect(class UReverbEffect* InReverbEffect, float WetLevel);
void SetSettings(const struct FSubmixEffectReverbSettings& InSettings);
};
// Class AudioMixer.SynthSound
// 0x0010 (0x0260 - 0x0250)
class USynthSound : public USoundWaveProcedural
{
public:
unsigned char UnknownData00[0x10]; // 0x0250(0x0010) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AudioMixer.SynthSound");
return pStaticClass;
}
};
// Class AudioMixer.SynthComponent
// 0x0270 (0x0530 - 0x02C0)
class USynthComponent : public USceneComponent
{
public:
unsigned char bAutoDestroy : 1; // 0x02C0(0x0001)
unsigned char bStopWhenOwnerDestroyed : 1; // 0x02C0(0x0001)
unsigned char bAllowSpatialization : 1; // 0x02C0(0x0001) (Edit, BlueprintVisible)
unsigned char bOverrideAttenuation : 1; // 0x02C0(0x0001) (Edit, BlueprintVisible)
unsigned char UnknownData00[0x3]; // 0x02C1(0x0003) MISSED OFFSET
class USoundAttenuation* AttenuationSettings; // 0x02C4(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
struct FSoundAttenuationSettings AttenuationOverrides; // 0x02C8(0x0214) (Edit, BlueprintVisible)
class USoundConcurrency* ConcurrencySettings; // 0x04DC(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
class USoundClass* SoundClass; // 0x04E0(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
class USoundEffectSourcePresetChain* SourceEffectChain; // 0x04E4(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
class USoundSubmix* SoundSubmix; // 0x04E8(0x0004) (Edit, ZeroConstructor, IsPlainOldData)
TArray<struct FSoundSubmixSendInfo> SoundSubmixSends; // 0x04EC(0x000C) (Edit, BlueprintVisible, ZeroConstructor)
unsigned char bIsUISound : 1; // 0x04F8(0x0001) (Edit, BlueprintVisible)
unsigned char UnknownData01[0x7]; // 0x04F9(0x0007) MISSED OFFSET
class USynthSound* Synth; // 0x0500(0x0004) (ZeroConstructor, Transient, IsPlainOldData)
class UAudioComponent* AudioComponent; // 0x0504(0x0004) (ExportObject, ZeroConstructor, Transient, InstancedReference, IsPlainOldData)
unsigned char UnknownData02[0x28]; // 0x0508(0x0028) MISSED OFFSET
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("Class AudioMixer.SynthComponent");
return pStaticClass;
}
void Stop();
void Start();
void SetSubmixSend(class USoundSubmix* Submix, float SendLevel);
bool IsPlaying();
};
}
+397
View File
@@ -0,0 +1,397 @@
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Functions
//---------------------------------------------------------------------------
// Function AudioMixer.AudioMixerBlueprintLibrary.SetBypassSourceEffectChainEntry
// (Final, Native, Static, Public, BlueprintCallable)
// Parameters:
// class UObject* WorldContextObject (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
// class USoundEffectSourcePresetChain* PresetChain (Parm, ZeroConstructor, IsPlainOldData)
// int EntryIndex (Parm, ZeroConstructor, IsPlainOldData)
// bool bBypassed (Parm, ZeroConstructor, IsPlainOldData)
void UAudioMixerBlueprintLibrary::SetBypassSourceEffectChainEntry(class UObject* WorldContextObject, class USoundEffectSourcePresetChain* PresetChain, int EntryIndex, bool bBypassed)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AudioMixer.AudioMixerBlueprintLibrary.SetBypassSourceEffectChainEntry");
UAudioMixerBlueprintLibrary_SetBypassSourceEffectChainEntry_Params params;
params.WorldContextObject = WorldContextObject;
params.PresetChain = PresetChain;
params.EntryIndex = EntryIndex;
params.bBypassed = bBypassed;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AudioMixer.AudioMixerBlueprintLibrary.RemoveSourceEffectFromPresetChain
// (Final, Native, Static, Public, BlueprintCallable)
// Parameters:
// class UObject* WorldContextObject (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
// class USoundEffectSourcePresetChain* PresetChain (Parm, ZeroConstructor, IsPlainOldData)
// int EntryIndex (Parm, ZeroConstructor, IsPlainOldData)
void UAudioMixerBlueprintLibrary::RemoveSourceEffectFromPresetChain(class UObject* WorldContextObject, class USoundEffectSourcePresetChain* PresetChain, int EntryIndex)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AudioMixer.AudioMixerBlueprintLibrary.RemoveSourceEffectFromPresetChain");
UAudioMixerBlueprintLibrary_RemoveSourceEffectFromPresetChain_Params params;
params.WorldContextObject = WorldContextObject;
params.PresetChain = PresetChain;
params.EntryIndex = EntryIndex;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AudioMixer.AudioMixerBlueprintLibrary.RemoveMasterSubmixEffect
// (Final, Native, Static, Public, BlueprintCallable)
// Parameters:
// class UObject* WorldContextObject (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
// class USoundEffectSubmixPreset* SubmixEffectPreset (Parm, ZeroConstructor, IsPlainOldData)
void UAudioMixerBlueprintLibrary::RemoveMasterSubmixEffect(class UObject* WorldContextObject, class USoundEffectSubmixPreset* SubmixEffectPreset)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AudioMixer.AudioMixerBlueprintLibrary.RemoveMasterSubmixEffect");
UAudioMixerBlueprintLibrary_RemoveMasterSubmixEffect_Params params;
params.WorldContextObject = WorldContextObject;
params.SubmixEffectPreset = SubmixEffectPreset;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AudioMixer.AudioMixerBlueprintLibrary.GetNumberOfEntriesInSourceEffectChain
// (Final, Native, Static, Public, BlueprintCallable)
// Parameters:
// class UObject* WorldContextObject (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
// class USoundEffectSourcePresetChain* PresetChain (Parm, ZeroConstructor, IsPlainOldData)
// int ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
int UAudioMixerBlueprintLibrary::GetNumberOfEntriesInSourceEffectChain(class UObject* WorldContextObject, class USoundEffectSourcePresetChain* PresetChain)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AudioMixer.AudioMixerBlueprintLibrary.GetNumberOfEntriesInSourceEffectChain");
UAudioMixerBlueprintLibrary_GetNumberOfEntriesInSourceEffectChain_Params params;
params.WorldContextObject = WorldContextObject;
params.PresetChain = PresetChain;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
// Function AudioMixer.AudioMixerBlueprintLibrary.ClearMasterSubmixEffects
// (Final, Native, Static, Public, BlueprintCallable)
// Parameters:
// class UObject* WorldContextObject (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
void UAudioMixerBlueprintLibrary::ClearMasterSubmixEffects(class UObject* WorldContextObject)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AudioMixer.AudioMixerBlueprintLibrary.ClearMasterSubmixEffects");
UAudioMixerBlueprintLibrary_ClearMasterSubmixEffects_Params params;
params.WorldContextObject = WorldContextObject;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AudioMixer.AudioMixerBlueprintLibrary.AddSourceEffectToPresetChain
// (Final, Native, Static, Public, BlueprintCallable)
// Parameters:
// class UObject* WorldContextObject (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
// class USoundEffectSourcePresetChain* PresetChain (Parm, ZeroConstructor, IsPlainOldData)
// struct FSourceEffectChainEntry Entry (Parm, IsPlainOldData)
void UAudioMixerBlueprintLibrary::AddSourceEffectToPresetChain(class UObject* WorldContextObject, class USoundEffectSourcePresetChain* PresetChain, const struct FSourceEffectChainEntry& Entry)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AudioMixer.AudioMixerBlueprintLibrary.AddSourceEffectToPresetChain");
UAudioMixerBlueprintLibrary_AddSourceEffectToPresetChain_Params params;
params.WorldContextObject = WorldContextObject;
params.PresetChain = PresetChain;
params.Entry = Entry;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AudioMixer.AudioMixerBlueprintLibrary.AddMasterSubmixEffect
// (Final, Native, Static, Public, BlueprintCallable)
// Parameters:
// class UObject* WorldContextObject (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
// class USoundEffectSubmixPreset* SubmixEffectPreset (Parm, ZeroConstructor, IsPlainOldData)
void UAudioMixerBlueprintLibrary::AddMasterSubmixEffect(class UObject* WorldContextObject, class USoundEffectSubmixPreset* SubmixEffectPreset)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AudioMixer.AudioMixerBlueprintLibrary.AddMasterSubmixEffect");
UAudioMixerBlueprintLibrary_AddMasterSubmixEffect_Params params;
params.WorldContextObject = WorldContextObject;
params.SubmixEffectPreset = SubmixEffectPreset;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
static auto defaultObj = StaticClass()->GetDefaultObject();
defaultObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AudioMixer.SubmixEffectDynamicsProcessorPreset.SetSettings
// (Final, Native, Public, HasOutParms, BlueprintCallable)
// Parameters:
// struct FSubmixEffectDynamicsProcessorSettings InSettings (ConstParm, Parm, OutParm, ReferenceParm)
void USubmixEffectDynamicsProcessorPreset::SetSettings(const struct FSubmixEffectDynamicsProcessorSettings& InSettings)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AudioMixer.SubmixEffectDynamicsProcessorPreset.SetSettings");
USubmixEffectDynamicsProcessorPreset_SetSettings_Params params;
params.InSettings = InSettings;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AudioMixer.SubmixEffectSubmixEQPreset.SetSettings
// (Final, Native, Public, HasOutParms, BlueprintCallable)
// Parameters:
// struct FSubmixEffectSubmixEQSettings InSettings (ConstParm, Parm, OutParm, ReferenceParm)
void USubmixEffectSubmixEQPreset::SetSettings(const struct FSubmixEffectSubmixEQSettings& InSettings)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AudioMixer.SubmixEffectSubmixEQPreset.SetSettings");
USubmixEffectSubmixEQPreset_SetSettings_Params params;
params.InSettings = InSettings;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AudioMixer.SubmixEffectReverbPreset.SetSettingsWithReverbEffect
// (Final, Native, Public, BlueprintCallable)
// Parameters:
// class UReverbEffect* InReverbEffect (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
// float WetLevel (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
void USubmixEffectReverbPreset::SetSettingsWithReverbEffect(class UReverbEffect* InReverbEffect, float WetLevel)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AudioMixer.SubmixEffectReverbPreset.SetSettingsWithReverbEffect");
USubmixEffectReverbPreset_SetSettingsWithReverbEffect_Params params;
params.InReverbEffect = InReverbEffect;
params.WetLevel = WetLevel;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AudioMixer.SubmixEffectReverbPreset.SetSettings
// (Final, Native, Public, HasOutParms, BlueprintCallable)
// Parameters:
// struct FSubmixEffectReverbSettings InSettings (ConstParm, Parm, OutParm, ReferenceParm)
void USubmixEffectReverbPreset::SetSettings(const struct FSubmixEffectReverbSettings& InSettings)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AudioMixer.SubmixEffectReverbPreset.SetSettings");
USubmixEffectReverbPreset_SetSettings_Params params;
params.InSettings = InSettings;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AudioMixer.SynthComponent.Stop
// (Final, Native, Public, BlueprintCallable)
void USynthComponent::Stop()
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AudioMixer.SynthComponent.Stop");
USynthComponent_Stop_Params params;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AudioMixer.SynthComponent.Start
// (Final, Native, Public, BlueprintCallable)
void USynthComponent::Start()
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AudioMixer.SynthComponent.Start");
USynthComponent_Start_Params params;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AudioMixer.SynthComponent.SetSubmixSend
// (Final, Native, Public, BlueprintCallable)
// Parameters:
// class USoundSubmix* Submix (Parm, ZeroConstructor, IsPlainOldData)
// float SendLevel (Parm, ZeroConstructor, IsPlainOldData)
void USynthComponent::SetSubmixSend(class USoundSubmix* Submix, float SendLevel)
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AudioMixer.SynthComponent.SetSubmixSend");
USynthComponent_SetSubmixSend_Params params;
params.Submix = Submix;
params.SendLevel = SendLevel;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
}
// Function AudioMixer.SynthComponent.IsPlaying
// (Final, Native, Public, BlueprintCallable, BlueprintPure, Const)
// Parameters:
// bool ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
bool USynthComponent::IsPlaying()
{
static UFunction *pFunc = 0;
if (!pFunc)
pFunc = UObject::FindObject<UFunction>("Function AudioMixer.SynthComponent.IsPlaying");
USynthComponent_IsPlaying_Params params;
auto flags = pFunc->FunctionFlags;
pFunc->FunctionFlags |= 0x400;
UObject *currentObj = (UObject *) this;
currentObj->ProcessEvent(pFunc, &params);
pFunc->FunctionFlags = flags;
return params.ReturnValue;
}
}
+118
View File
@@ -0,0 +1,118 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Parameters
//---------------------------------------------------------------------------
// Function AudioMixer.AudioMixerBlueprintLibrary.SetBypassSourceEffectChainEntry
struct UAudioMixerBlueprintLibrary_SetBypassSourceEffectChainEntry_Params
{
class UObject* WorldContextObject; // (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
class USoundEffectSourcePresetChain* PresetChain; // (Parm, ZeroConstructor, IsPlainOldData)
int EntryIndex; // (Parm, ZeroConstructor, IsPlainOldData)
bool bBypassed; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AudioMixer.AudioMixerBlueprintLibrary.RemoveSourceEffectFromPresetChain
struct UAudioMixerBlueprintLibrary_RemoveSourceEffectFromPresetChain_Params
{
class UObject* WorldContextObject; // (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
class USoundEffectSourcePresetChain* PresetChain; // (Parm, ZeroConstructor, IsPlainOldData)
int EntryIndex; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AudioMixer.AudioMixerBlueprintLibrary.RemoveMasterSubmixEffect
struct UAudioMixerBlueprintLibrary_RemoveMasterSubmixEffect_Params
{
class UObject* WorldContextObject; // (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
class USoundEffectSubmixPreset* SubmixEffectPreset; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AudioMixer.AudioMixerBlueprintLibrary.GetNumberOfEntriesInSourceEffectChain
struct UAudioMixerBlueprintLibrary_GetNumberOfEntriesInSourceEffectChain_Params
{
class UObject* WorldContextObject; // (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
class USoundEffectSourcePresetChain* PresetChain; // (Parm, ZeroConstructor, IsPlainOldData)
int ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
// Function AudioMixer.AudioMixerBlueprintLibrary.ClearMasterSubmixEffects
struct UAudioMixerBlueprintLibrary_ClearMasterSubmixEffects_Params
{
class UObject* WorldContextObject; // (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
};
// Function AudioMixer.AudioMixerBlueprintLibrary.AddSourceEffectToPresetChain
struct UAudioMixerBlueprintLibrary_AddSourceEffectToPresetChain_Params
{
class UObject* WorldContextObject; // (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
class USoundEffectSourcePresetChain* PresetChain; // (Parm, ZeroConstructor, IsPlainOldData)
struct FSourceEffectChainEntry Entry; // (Parm, IsPlainOldData)
};
// Function AudioMixer.AudioMixerBlueprintLibrary.AddMasterSubmixEffect
struct UAudioMixerBlueprintLibrary_AddMasterSubmixEffect_Params
{
class UObject* WorldContextObject; // (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
class USoundEffectSubmixPreset* SubmixEffectPreset; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AudioMixer.SubmixEffectDynamicsProcessorPreset.SetSettings
struct USubmixEffectDynamicsProcessorPreset_SetSettings_Params
{
struct FSubmixEffectDynamicsProcessorSettings InSettings; // (ConstParm, Parm, OutParm, ReferenceParm)
};
// Function AudioMixer.SubmixEffectSubmixEQPreset.SetSettings
struct USubmixEffectSubmixEQPreset_SetSettings_Params
{
struct FSubmixEffectSubmixEQSettings InSettings; // (ConstParm, Parm, OutParm, ReferenceParm)
};
// Function AudioMixer.SubmixEffectReverbPreset.SetSettingsWithReverbEffect
struct USubmixEffectReverbPreset_SetSettingsWithReverbEffect_Params
{
class UReverbEffect* InReverbEffect; // (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
float WetLevel; // (ConstParm, Parm, ZeroConstructor, IsPlainOldData)
};
// Function AudioMixer.SubmixEffectReverbPreset.SetSettings
struct USubmixEffectReverbPreset_SetSettings_Params
{
struct FSubmixEffectReverbSettings InSettings; // (ConstParm, Parm, OutParm, ReferenceParm)
};
// Function AudioMixer.SynthComponent.Stop
struct USynthComponent_Stop_Params
{
};
// Function AudioMixer.SynthComponent.Start
struct USynthComponent_Start_Params
{
};
// Function AudioMixer.SynthComponent.SetSubmixSend
struct USynthComponent_SetSubmixSend_Params
{
class USoundSubmix* Submix; // (Parm, ZeroConstructor, IsPlainOldData)
float SendLevel; // (Parm, ZeroConstructor, IsPlainOldData)
};
// Function AudioMixer.SynthComponent.IsPlaying
struct USynthComponent_IsPlaying_Params
{
bool ReturnValue; // (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData)
};
}
+99
View File
@@ -0,0 +1,99 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:40 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Enums
//---------------------------------------------------------------------------
// Enum AudioMixer.ESubmixEffectDynamicsPeakMode
enum class ESubmixEffectDynamicsPeakMode : uint8_t
{
ESubmixEffectDynamicsPeakMode__MeanSquared = 0,
ESubmixEffectDynamicsPeakMode__RootMeanSquared = 1,
ESubmixEffectDynamicsPeakMode__Peak = 2,
ESubmixEffectDynamicsPeakMode__Count = 3,
ESubmixEffectDynamicsPeakMode__ESubmixEffectDynamicsPeakMode_MAX = 4
};
// Enum AudioMixer.ESubmixEffectDynamicsProcessorType
enum class ESubmixEffectDynamicsProcessorType : uint8_t
{
ESubmixEffectDynamicsProcessorType__Compressor = 0,
ESubmixEffectDynamicsProcessorType__Limiter = 1,
ESubmixEffectDynamicsProcessorType__Expander = 2,
ESubmixEffectDynamicsProcessorType__Gate = 3,
ESubmixEffectDynamicsProcessorType__Count = 4,
ESubmixEffectDynamicsProcessorType__ESubmixEffectDynamicsProcessorType_MAX = 5
};
//---------------------------------------------------------------------------
//Script Structs
//---------------------------------------------------------------------------
// ScriptStruct AudioMixer.SubmixEffectDynamicsProcessorSettings
// 0x0028
struct FSubmixEffectDynamicsProcessorSettings
{
ESubmixEffectDynamicsProcessorType DynamicsProcessorType; // 0x0000(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
ESubmixEffectDynamicsPeakMode PeakMode; // 0x0001(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x2]; // 0x0002(0x0002) MISSED OFFSET
float LookAheadMsec; // 0x0004(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float AttackTimeMsec; // 0x0008(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float ReleaseTimeMsec; // 0x000C(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float ThresholdDb; // 0x0010(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float Ratio; // 0x0014(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float KneeBandwidthDb; // 0x0018(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float InputGainDb; // 0x001C(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float OutputGainDb; // 0x0020(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char bChannelLinked : 1; // 0x0024(0x0001) (Edit, BlueprintVisible)
unsigned char bAnalogMode : 1; // 0x0024(0x0001) (Edit, BlueprintVisible)
unsigned char UnknownData01[0x3]; // 0x0025(0x0003) MISSED OFFSET
};
// ScriptStruct AudioMixer.SubmixEffectEQBand
// 0x0010
struct FSubmixEffectEQBand
{
float Frequency; // 0x0000(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float Bandwidth; // 0x0004(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float GainDb; // 0x0008(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char bEnabled : 1; // 0x000C(0x0001) (Edit, BlueprintVisible)
unsigned char UnknownData00[0x3]; // 0x000D(0x0003) MISSED OFFSET
};
// ScriptStruct AudioMixer.SubmixEffectSubmixEQSettings
// 0x000C
struct FSubmixEffectSubmixEQSettings
{
TArray<struct FSubmixEffectEQBand> EQBands; // 0x0000(0x000C) (Edit, BlueprintVisible, ZeroConstructor)
};
// ScriptStruct AudioMixer.SubmixEffectReverbSettings
// 0x0030
struct FSubmixEffectReverbSettings
{
float Density; // 0x0000(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float Diffusion; // 0x0004(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float Gain; // 0x0008(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float GainHF; // 0x000C(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float DecayTime; // 0x0010(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float DecayHFRatio; // 0x0014(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float ReflectionsGain; // 0x0018(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float ReflectionsDelay; // 0x001C(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float LateGain; // 0x0020(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float LateDelay; // 0x0024(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float AirAbsorptionGainHF; // 0x0028(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
float WetLevel; // 0x002C(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
};
}
+134
View File
@@ -0,0 +1,134 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:52 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Classes
//---------------------------------------------------------------------------
// WidgetBlueprintGeneratedClass Authorization_BP.Authorization_BP_C
// 0x00F8 (0x0368 - 0x0270)
class UAuthorization_BP_C : public UUAEUserWidget
{
public:
struct FPointerToUberGraphFrame UberGraphFrame; // 0x0270(0x0004) (Transient, DuplicateTransient)
class UWidgetAnimation* LOGO_anima; // 0x0274(0x0004) (BlueprintVisible, ExportObject, BlueprintReadOnly, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UWidgetSwitcher* AuthTypeSwitcher; // 0x0278(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UButton* Button_1; // 0x027C(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UButton* Button_2; // 0x0280(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UButton* Button_3; // 0x0284(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UButton* Button_Button_VisitorEnter; // 0x0288(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UButton* Button_Help; // 0x028C(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UButton* Button_LeavePlane; // 0x0290(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UButton* Button_LoginOut; // 0x0294(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UButton* Button_Policy; // 0x0298(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UButton* Button_QQ; // 0x029C(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UButton* Button_Repair; // 0x02A0(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UButton* Button_Service; // 0x02A4(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UButton* Button_WX; // 0x02A8(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UCheckBox* CheckBox_Agree; // 0x02AC(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UGridPanel* GridPanel_IPX; // 0x02B0(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UHorizontalBox* HorizontalBox_autoHide_2; // 0x02B4(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UHorizontalBox* HorizontalBox_autoHide_3; // 0x02B8(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UHorizontalBox* QQBox; // 0x02BC(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UHorizontalBox* QQPswdBox; // 0x02C0(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UMultiLineEditableTextBox* Text_ID; // 0x02C4(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UEditableText* Text_Pswd; // 0x02C8(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UTextBlock* TextBlock_7; // 0x02CC(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UTextBlock* TextBlock_9; // 0x02D0(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UTextBlock* TextBlock_11; // 0x02D4(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UTextBlock* TextBlock_12; // 0x02D8(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UTextBlock* TextBlock_14; // 0x02DC(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UTextBlock* TextBlock_15; // 0x02E0(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UTextBlock* TextBlock_Version; // 0x02E4(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UVerticalBox* VerticalBox_autoHide_4; // 0x02E8(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
class UButton* Windows_Login; // 0x02EC(0x0004) (BlueprintVisible, ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, RepSkip, RepNotify, Interp, NonTransactional, EditorOnly, NoDestructor, AutoWeak, ContainsInstancedReference, AssetRegistrySearchable, SimpleDisplay, AdvancedDisplay, Protected, BlueprintCallable, BlueprintAuthorityOnly, TextExportTransient, NonPIEDuplicateTransient, ExposeOnSpawn, PersistentInstance, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic, NativeAccessSpecifierProtected, NativeAccessSpecifierPrivate)
bool m_checked; // 0x02F0(0x0001) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
unsigned char UnknownData00[0x3]; // 0x02F1(0x0003) MISSED OFFSET
struct FString PlatformName; // 0x02F4(0x000C) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance)
class Abp_authorization_C* bp_auth; // 0x0300(0x0004) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnTemplate, DisableEditOnInstance, IsPlainOldData)
struct FScriptMulticastDelegate startGameSounds; // 0x0304(0x000C) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, BlueprintAssignable)
int LoginCount; // 0x0310(0x0004) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
class UPlayerPrefs_C* MyPlayerPrefs; // 0x0314(0x0004) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
struct FString SlotName; // 0x0318(0x000C) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance)
class Abp_global_C* bpGlobal; // 0x0324(0x0004) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnTemplate, DisableEditOnInstance, IsPlainOldData)
int tempFpsIndex; // 0x0328(0x0004) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
TMap<int, int> FpsToIndex; // 0x032C(0x0050) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance)
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("WidgetBlueprintGeneratedClass Authorization_BP.Authorization_BP_C");
return pStaticClass;
}
void ShowHelpBtn();
void SetSettingVars(class USettingConfig_C* Config);
void IsServiceAccepted(bool* accept);
void SetCheckBox(bool isCheck);
void SetScreenLightness(class USettingConfig_C* Config);
void SetLocalSavedQuickMsgSetting();
void SetServiceAndPolicyCallType(int calltype);
void SetServiceAndPolicyChecked();
void ReleaseLoginButtons();
void BlockLoginButtons();
void updateLoginButtons();
void HideHelpBtn();
void GetMaxSupportFps(int* maxFpsIndex);
void SendPictureSetting();
void CheckRendingSafe();
void RefreshGameVersion();
void ShowEffects(bool Is_show);
void UIShow2();
void ShowUI();
void InitAuthorizationUI();
void InitLoginUI();
void doAutoLogin();
void UpdateRelatedSetting();
void DoUpdate();
void SetFpsByIndex(int Index);
void InitFps(class USettingConfig_C* settingConfig);
void SetLbsOffAndDisableMicphone(class USettingConfig_C* settingObj);
void InitVoiceSetting(class USettingConfig_C* settingObj);
void SetSoudsSetting(const struct FName& ParamName, float ParamValue);
void InitUserSetting();
void setLoginLimit();
void addLoginCount();
void clearLoginCount();
void redoAutoAuthorization();
void doAuthorization();
void hideButtons();
void showButtons();
void QuitGame();
void hideAuthorizationUI();
void startAuthorization();
void showAuthorizationUI();
void BndEvt__Button_Login_K2Node_ComponentBoundEvent_249_OnButtonClickedEvent__DelegateSignature();
void BndEvt__Button_Button_VisitorEnter0_K2Node_ComponentBoundEvent_0_OnButtonClickedEvent__DelegateSignature();
void BndEvt__Button_QQ2_K2Node_ComponentBoundEvent_1_OnButtonClickedEvent__DelegateSignature();
void BndEvt__Button_WX1_K2Node_ComponentBoundEvent_2_OnButtonClickedEvent__DelegateSignature();
void BndEvt__CheckBox_0_K2Node_ComponentBoundEvent_3_OnCheckBoxComponentStateChanged__DelegateSignature(bool bIsChecked);
void BndEvt__Button_Service3_K2Node_ComponentBoundEvent_4_OnButtonClickedEvent__DelegateSignature();
void StartAutoAuthorization();
void BndEvt__Button_1_K2Node_ComponentBoundEvent_34_OnButtonClickedEvent__DelegateSignature();
void BndEvt__Button_2_K2Node_ComponentBoundEvent_51_OnButtonClickedEvent__DelegateSignature();
void BndEvt__Button_LeavePlane_K2Node_ComponentBoundEvent_112_OnButtonClickedEvent__DelegateSignature();
void BndEvt__Button_Help_K2Node_ComponentBoundEvent_129_OnButtonClickedEvent__DelegateSignature();
void BndEvt__Button_LoginOut_K2Node_ComponentBoundEvent_62_OnButtonClickedEvent__DelegateSignature();
void BndEvt__Button_Repair_K2Node_ComponentBoundEvent_37_OnButtonClickedEvent__DelegateSignature();
void BndEvt__Button_Policy_K2Node_ComponentBoundEvent_146_OnButtonClickedEvent__DelegateSignature();
void Construct();
void ExecuteUbergraph_Authorization_BP(int EntryPoint);
void startGameSounds__DelegateSignature();
};
}
File diff suppressed because it is too large Load Diff
+322
View File
@@ -0,0 +1,322 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:52 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Parameters
//---------------------------------------------------------------------------
// Function Authorization_BP.Authorization_BP_C.ShowHelpBtn
struct UAuthorization_BP_C_ShowHelpBtn_Params
{
};
// Function Authorization_BP.Authorization_BP_C.SetSettingVars
struct UAuthorization_BP_C_SetSettingVars_Params
{
class USettingConfig_C* Config; // (BlueprintVisible, BlueprintReadOnly, Parm, ZeroConstructor, IsPlainOldData)
};
// Function Authorization_BP.Authorization_BP_C.IsServiceAccepted
struct UAuthorization_BP_C_IsServiceAccepted_Params
{
bool accept; // (Parm, OutParm, ZeroConstructor, IsPlainOldData)
};
// Function Authorization_BP.Authorization_BP_C.SetCheckBox
struct UAuthorization_BP_C_SetCheckBox_Params
{
bool isCheck; // (BlueprintVisible, BlueprintReadOnly, Parm, ZeroConstructor, IsPlainOldData)
};
// Function Authorization_BP.Authorization_BP_C.SetScreenLightness
struct UAuthorization_BP_C_SetScreenLightness_Params
{
class USettingConfig_C* Config; // (BlueprintVisible, BlueprintReadOnly, Parm, ZeroConstructor, IsPlainOldData)
};
// Function Authorization_BP.Authorization_BP_C.SetLocalSavedQuickMsgSetting
struct UAuthorization_BP_C_SetLocalSavedQuickMsgSetting_Params
{
};
// Function Authorization_BP.Authorization_BP_C.SetServiceAndPolicyCallType
struct UAuthorization_BP_C_SetServiceAndPolicyCallType_Params
{
int calltype; // (BlueprintVisible, BlueprintReadOnly, Parm, ZeroConstructor, IsPlainOldData)
};
// Function Authorization_BP.Authorization_BP_C.SetServiceAndPolicyChecked
struct UAuthorization_BP_C_SetServiceAndPolicyChecked_Params
{
};
// Function Authorization_BP.Authorization_BP_C.ReleaseLoginButtons
struct UAuthorization_BP_C_ReleaseLoginButtons_Params
{
};
// Function Authorization_BP.Authorization_BP_C.BlockLoginButtons
struct UAuthorization_BP_C_BlockLoginButtons_Params
{
};
// Function Authorization_BP.Authorization_BP_C.updateLoginButtons
struct UAuthorization_BP_C_updateLoginButtons_Params
{
};
// Function Authorization_BP.Authorization_BP_C.HideHelpBtn
struct UAuthorization_BP_C_HideHelpBtn_Params
{
};
// Function Authorization_BP.Authorization_BP_C.GetMaxSupportFps
struct UAuthorization_BP_C_GetMaxSupportFps_Params
{
int maxFpsIndex; // (Parm, OutParm, ZeroConstructor, IsPlainOldData)
};
// Function Authorization_BP.Authorization_BP_C.SendPictureSetting
struct UAuthorization_BP_C_SendPictureSetting_Params
{
};
// Function Authorization_BP.Authorization_BP_C.CheckRendingSafe
struct UAuthorization_BP_C_CheckRendingSafe_Params
{
};
// Function Authorization_BP.Authorization_BP_C.RefreshGameVersion
struct UAuthorization_BP_C_RefreshGameVersion_Params
{
};
// Function Authorization_BP.Authorization_BP_C.ShowEffects
struct UAuthorization_BP_C_ShowEffects_Params
{
bool Is_show; // (BlueprintVisible, BlueprintReadOnly, Parm, ZeroConstructor, IsPlainOldData)
};
// Function Authorization_BP.Authorization_BP_C.UIShow2
struct UAuthorization_BP_C_UIShow2_Params
{
};
// Function Authorization_BP.Authorization_BP_C.ShowUI
struct UAuthorization_BP_C_ShowUI_Params
{
};
// Function Authorization_BP.Authorization_BP_C.InitAuthorizationUI
struct UAuthorization_BP_C_InitAuthorizationUI_Params
{
};
// Function Authorization_BP.Authorization_BP_C.InitLoginUI
struct UAuthorization_BP_C_InitLoginUI_Params
{
};
// Function Authorization_BP.Authorization_BP_C.doAutoLogin
struct UAuthorization_BP_C_doAutoLogin_Params
{
};
// Function Authorization_BP.Authorization_BP_C.UpdateRelatedSetting
struct UAuthorization_BP_C_UpdateRelatedSetting_Params
{
};
// Function Authorization_BP.Authorization_BP_C.DoUpdate
struct UAuthorization_BP_C_DoUpdate_Params
{
};
// Function Authorization_BP.Authorization_BP_C.SetFpsByIndex
struct UAuthorization_BP_C_SetFpsByIndex_Params
{
int Index; // (BlueprintVisible, BlueprintReadOnly, Parm, ZeroConstructor, IsPlainOldData)
};
// Function Authorization_BP.Authorization_BP_C.InitFps
struct UAuthorization_BP_C_InitFps_Params
{
class USettingConfig_C* settingConfig; // (BlueprintVisible, BlueprintReadOnly, Parm, ZeroConstructor, IsPlainOldData)
};
// Function Authorization_BP.Authorization_BP_C.SetLbsOffAndDisableMicphone
struct UAuthorization_BP_C_SetLbsOffAndDisableMicphone_Params
{
class USettingConfig_C* settingObj; // (BlueprintVisible, BlueprintReadOnly, Parm, ZeroConstructor, IsPlainOldData)
};
// Function Authorization_BP.Authorization_BP_C.InitVoiceSetting
struct UAuthorization_BP_C_InitVoiceSetting_Params
{
class USettingConfig_C* settingObj; // (BlueprintVisible, BlueprintReadOnly, Parm, ZeroConstructor, IsPlainOldData)
};
// Function Authorization_BP.Authorization_BP_C.SetSoudsSetting
struct UAuthorization_BP_C_SetSoudsSetting_Params
{
struct FName ParamName; // (BlueprintVisible, BlueprintReadOnly, Parm, ZeroConstructor, IsPlainOldData)
float ParamValue; // (BlueprintVisible, BlueprintReadOnly, Parm, ZeroConstructor, IsPlainOldData)
};
// Function Authorization_BP.Authorization_BP_C.InitUserSetting
struct UAuthorization_BP_C_InitUserSetting_Params
{
};
// Function Authorization_BP.Authorization_BP_C.setLoginLimit
struct UAuthorization_BP_C_setLoginLimit_Params
{
};
// Function Authorization_BP.Authorization_BP_C.addLoginCount
struct UAuthorization_BP_C_addLoginCount_Params
{
};
// Function Authorization_BP.Authorization_BP_C.clearLoginCount
struct UAuthorization_BP_C_clearLoginCount_Params
{
};
// Function Authorization_BP.Authorization_BP_C.redoAutoAuthorization
struct UAuthorization_BP_C_redoAutoAuthorization_Params
{
};
// Function Authorization_BP.Authorization_BP_C.doAuthorization
struct UAuthorization_BP_C_doAuthorization_Params
{
};
// Function Authorization_BP.Authorization_BP_C.hideButtons
struct UAuthorization_BP_C_hideButtons_Params
{
};
// Function Authorization_BP.Authorization_BP_C.showButtons
struct UAuthorization_BP_C_showButtons_Params
{
};
// Function Authorization_BP.Authorization_BP_C.QuitGame
struct UAuthorization_BP_C_QuitGame_Params
{
};
// Function Authorization_BP.Authorization_BP_C.hideAuthorizationUI
struct UAuthorization_BP_C_hideAuthorizationUI_Params
{
};
// Function Authorization_BP.Authorization_BP_C.startAuthorization
struct UAuthorization_BP_C_startAuthorization_Params
{
};
// Function Authorization_BP.Authorization_BP_C.showAuthorizationUI
struct UAuthorization_BP_C_showAuthorizationUI_Params
{
};
// Function Authorization_BP.Authorization_BP_C.BndEvt__Button_Login_K2Node_ComponentBoundEvent_249_OnButtonClickedEvent__DelegateSignature
struct UAuthorization_BP_C_BndEvt__Button_Login_K2Node_ComponentBoundEvent_249_OnButtonClickedEvent__DelegateSignature_Params
{
};
// Function Authorization_BP.Authorization_BP_C.BndEvt__Button_Button_VisitorEnter0_K2Node_ComponentBoundEvent_0_OnButtonClickedEvent__DelegateSignature
struct UAuthorization_BP_C_BndEvt__Button_Button_VisitorEnter0_K2Node_ComponentBoundEvent_0_OnButtonClickedEvent__DelegateSignature_Params
{
};
// Function Authorization_BP.Authorization_BP_C.BndEvt__Button_QQ2_K2Node_ComponentBoundEvent_1_OnButtonClickedEvent__DelegateSignature
struct UAuthorization_BP_C_BndEvt__Button_QQ2_K2Node_ComponentBoundEvent_1_OnButtonClickedEvent__DelegateSignature_Params
{
};
// Function Authorization_BP.Authorization_BP_C.BndEvt__Button_WX1_K2Node_ComponentBoundEvent_2_OnButtonClickedEvent__DelegateSignature
struct UAuthorization_BP_C_BndEvt__Button_WX1_K2Node_ComponentBoundEvent_2_OnButtonClickedEvent__DelegateSignature_Params
{
};
// Function Authorization_BP.Authorization_BP_C.BndEvt__CheckBox_0_K2Node_ComponentBoundEvent_3_OnCheckBoxComponentStateChanged__DelegateSignature
struct UAuthorization_BP_C_BndEvt__CheckBox_0_K2Node_ComponentBoundEvent_3_OnCheckBoxComponentStateChanged__DelegateSignature_Params
{
bool bIsChecked; // (BlueprintVisible, BlueprintReadOnly, Parm, ZeroConstructor, IsPlainOldData)
};
// Function Authorization_BP.Authorization_BP_C.BndEvt__Button_Service3_K2Node_ComponentBoundEvent_4_OnButtonClickedEvent__DelegateSignature
struct UAuthorization_BP_C_BndEvt__Button_Service3_K2Node_ComponentBoundEvent_4_OnButtonClickedEvent__DelegateSignature_Params
{
};
// Function Authorization_BP.Authorization_BP_C.StartAutoAuthorization
struct UAuthorization_BP_C_StartAutoAuthorization_Params
{
};
// Function Authorization_BP.Authorization_BP_C.BndEvt__Button_1_K2Node_ComponentBoundEvent_34_OnButtonClickedEvent__DelegateSignature
struct UAuthorization_BP_C_BndEvt__Button_1_K2Node_ComponentBoundEvent_34_OnButtonClickedEvent__DelegateSignature_Params
{
};
// Function Authorization_BP.Authorization_BP_C.BndEvt__Button_2_K2Node_ComponentBoundEvent_51_OnButtonClickedEvent__DelegateSignature
struct UAuthorization_BP_C_BndEvt__Button_2_K2Node_ComponentBoundEvent_51_OnButtonClickedEvent__DelegateSignature_Params
{
};
// Function Authorization_BP.Authorization_BP_C.BndEvt__Button_LeavePlane_K2Node_ComponentBoundEvent_112_OnButtonClickedEvent__DelegateSignature
struct UAuthorization_BP_C_BndEvt__Button_LeavePlane_K2Node_ComponentBoundEvent_112_OnButtonClickedEvent__DelegateSignature_Params
{
};
// Function Authorization_BP.Authorization_BP_C.BndEvt__Button_Help_K2Node_ComponentBoundEvent_129_OnButtonClickedEvent__DelegateSignature
struct UAuthorization_BP_C_BndEvt__Button_Help_K2Node_ComponentBoundEvent_129_OnButtonClickedEvent__DelegateSignature_Params
{
};
// Function Authorization_BP.Authorization_BP_C.BndEvt__Button_LoginOut_K2Node_ComponentBoundEvent_62_OnButtonClickedEvent__DelegateSignature
struct UAuthorization_BP_C_BndEvt__Button_LoginOut_K2Node_ComponentBoundEvent_62_OnButtonClickedEvent__DelegateSignature_Params
{
};
// Function Authorization_BP.Authorization_BP_C.BndEvt__Button_Repair_K2Node_ComponentBoundEvent_37_OnButtonClickedEvent__DelegateSignature
struct UAuthorization_BP_C_BndEvt__Button_Repair_K2Node_ComponentBoundEvent_37_OnButtonClickedEvent__DelegateSignature_Params
{
};
// Function Authorization_BP.Authorization_BP_C.BndEvt__Button_Policy_K2Node_ComponentBoundEvent_146_OnButtonClickedEvent__DelegateSignature
struct UAuthorization_BP_C_BndEvt__Button_Policy_K2Node_ComponentBoundEvent_146_OnButtonClickedEvent__DelegateSignature_Params
{
};
// Function Authorization_BP.Authorization_BP_C.Construct
struct UAuthorization_BP_C_Construct_Params
{
};
// Function Authorization_BP.Authorization_BP_C.ExecuteUbergraph_Authorization_BP
struct UAuthorization_BP_C_ExecuteUbergraph_Authorization_BP_Params
{
int EntryPoint; // (BlueprintVisible, BlueprintReadOnly, Parm, ZeroConstructor, IsPlainOldData)
};
// Function Authorization_BP.Authorization_BP_C.startGameSounds__DelegateSignature
struct UAuthorization_BP_C_startGameSounds__DelegateSignature_Params
{
};
}
+11
View File
@@ -0,0 +1,11 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:52 2025
namespace SDK
{
}
@@ -0,0 +1,47 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:52 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Classes
//---------------------------------------------------------------------------
// BlueprintGeneratedClass BP_SAVEGAME_UIElemLayout.BP_SAVEGAME_UIElemLayout_C
// 0x00F8 (0x0118 - 0x0020)
class UBP_SAVEGAME_UIElemLayout_C : public USaveGame
{
public:
TMap<int, struct FBP_STRUCT_UIElemLayoutDetail> LayoutDetailDict1; // 0x0020(0x0050) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance)
TMap<int, struct FBP_STRUCT_UIElemLayoutDetail> LayoutDetailDict2; // 0x005C(0x0050) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance)
TMap<int, struct FBP_STRUCT_UIElemLayoutDetail> LayoutDetailDict3; // 0x0098(0x0050) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance)
bool IsDataValid1; // 0x00D4(0x0001) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
bool IsDataValid2; // 0x00D5(0x0001) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
bool IsDataValid3; // 0x00D6(0x0001) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
unsigned char UnknownData00[0x1]; // 0x00D7(0x0001) MISSED OFFSET
float RushTriggerLength1; // 0x00D8(0x0004) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float RushTriggerLength2; // 0x00DC(0x0004) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
float RushTriggerLength3; // 0x00E0(0x0004) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
struct FString SaveSlotName; // 0x00E4(0x000C) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance)
struct FString LayoutName1; // 0x00F0(0x000C) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance)
struct FString LayoutName2; // 0x00FC(0x000C) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance)
struct FString LayoutName3; // 0x0108(0x000C) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance)
int TimeTag; // 0x0114(0x0004) (Edit, BlueprintVisible, ZeroConstructor, DisableEditOnInstance, IsPlainOldData)
static UClass* StaticClass()
{
static UClass *pStaticClass = 0;
if (!pStaticClass)
pStaticClass = UObject::FindClass("BlueprintGeneratedClass BP_SAVEGAME_UIElemLayout.BP_SAVEGAME_UIElemLayout_C");
return pStaticClass;
}
};
}
@@ -0,0 +1,15 @@
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:52 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Functions
//---------------------------------------------------------------------------
}
@@ -0,0 +1,17 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:52 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Parameters
//---------------------------------------------------------------------------
}
@@ -0,0 +1,11 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:52 2025
namespace SDK
{
}
@@ -0,0 +1,11 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:50 2025
namespace SDK
{
}
@@ -0,0 +1,15 @@
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:50 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Functions
//---------------------------------------------------------------------------
}
@@ -0,0 +1,17 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:50 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Parameters
//---------------------------------------------------------------------------
}
@@ -0,0 +1,29 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:50 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Script Structs
//---------------------------------------------------------------------------
// UserDefinedStruct BP_STRUCT_ActButtonInfo.BP_STRUCT_ActButtonInfo
// 0x002C
struct FBP_STRUCT_ActButtonInfo
{
int Btn_Type_0_72A7BDDA4D539877791B30B19CB97C5E; // 0x0000(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
struct FString Btn_TypeName_1_C1631EF849C229989F4201B7B2E4F5B5; // 0x0004(0x000C) (Edit, BlueprintVisible, ZeroConstructor)
int ActID_2_89F1DAB74AE5AF1F611CE4AC8F9FAE25; // 0x0010(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
struct FString Btn_Name_3_CB1FB8C54883B36537B88AA8946E6E9B; // 0x0014(0x000C) (Edit, BlueprintVisible, ZeroConstructor)
bool IsRedPoint_4_4762A09D4D3A7BDD1094AE91409A4294; // 0x0020(0x0001) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
unsigned char UnknownData00[0x3]; // 0x0021(0x0003) MISSED OFFSET
int Btn_Tab_Num_5_11086F8025E813FE02005F990CEB832D; // 0x0024(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
int RedPoint_Type_6_5442EEC06638EC63042412B909CB83E5; // 0x0028(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
};
}
@@ -0,0 +1,11 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:50 2025
namespace SDK
{
}
@@ -0,0 +1,15 @@
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:50 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Functions
//---------------------------------------------------------------------------
}
@@ -0,0 +1,17 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:50 2025
#include "../SDK.hpp"
namespace SDK
{
//---------------------------------------------------------------------------
//Parameters
//---------------------------------------------------------------------------
}
@@ -0,0 +1,24 @@
#pragma once
//PUBGM(0.13.5)32位SDK
//作者:清华
//Telegram:@qinghuanb666
//生成时间:Fri Apr 18 20:44:50 2025
namespace SDK
{
//---------------------------------------------------------------------------
//Script Structs
//---------------------------------------------------------------------------
// UserDefinedStruct BP_STRUCT_ActiveAwardInfo.BP_STRUCT_ActiveAwardInfo
// 0x0014
struct FBP_STRUCT_ActiveAwardInfo
{
struct FString status_2_63049F3D4B573DE822E277BB11CF38C5; // 0x0000(0x000C) (Edit, BlueprintVisible, ZeroConstructor)
int id_1_A0702D724E5C3EC2F83B4B9CB00D4F52; // 0x000C(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
int value_3_CB44583242127623F9B90AA93F2B0AD4; // 0x0010(0x0004) (Edit, BlueprintVisible, ZeroConstructor, IsPlainOldData)
};
}

Some files were not shown because too many files have changed in this diff Show More