Skip to content

Commit 026f643

Browse files
committed
2 parents 66bde67 + 834e645 commit 026f643

4 files changed

Lines changed: 86 additions & 1 deletion

File tree

version/Core/Public/API/ARK/PrimalStructure.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,3 +1161,14 @@ struct APrimalStructureItemContainer_CropPlot : APrimalStructureItemContainer
11611161
bool AllowBlueprintCraftingRequirement(TSubclassOf<UPrimalItem> ItemTemplate, int ItemQuantity) { return NativeCall<bool, TSubclassOf<UPrimalItem>, int>(this, "APrimalStructureItemContainer_CropPlot.AllowBlueprintCraftingRequirement", ItemTemplate, ItemQuantity); }
11621162
bool AllowCraftingResourceConsumption(TSubclassOf<UPrimalItem> ItemTemplate, int ItemQuantity) { return NativeCall<bool, TSubclassOf<UPrimalItem>, int>(this, "APrimalStructureItemContainer_CropPlot.AllowCraftingResourceConsumption", ItemTemplate, ItemQuantity); }
11631163
};
1164+
1165+
struct UPrimalStructureSettings : UObject
1166+
{
1167+
float& DecayDestructionPeriodMultiplierField() { return *GetNativePointerField<float*>(this, "UPrimalStructureSettings.DecayDestructionPeriodMultiplier"); }
1168+
};
1169+
1170+
struct APrimalStructureExplosive : APrimalStructure
1171+
{
1172+
unsigned int& ConstructorPlayerDataIDField() { return *GetNativePointerField<unsigned int*>(this, "APrimalStructureExplosive.ConstructorPlayerDataID"); }
1173+
static UClass* StaticClass() { return NativeCall<UClass*>(nullptr, "APrimalStructureExplosive.StaticClass"); }
1174+
};

version/Core/Public/API/Base.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,6 @@ struct APrimalWorldSettings;
628628
struct FWeightedObjectList;
629629
struct UNetDriver;
630630
struct AHUD;
631-
struct APrimalStructureExplosive;
632631
struct UPaintingTexture;
633632
struct APrimalStructureExplosiveTransGPS;
634633
struct ITargetableInterface;

version/Core/Public/API/UE/UE.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,30 @@ struct TSubclassOf
203203
struct IOnlinePlatformData
204204
{
205205
void* vfptr;
206+
FString* ToHumanReadableString(FString* result) { return NativeCall<FString*, FString*>(this, "IOnlinePlatformData.ToHumanReadableString", result); }
206207
};
207208

208209
struct FUniqueNetId : IOnlinePlatformData
209210
{
210211
};
211212

213+
struct FUniqueNetIdUInt64 : FUniqueNetId
214+
{
215+
unsigned __int64& UniqueNetIdField() { return *GetNativePointerField<unsigned __int64*>(this, "FUniqueNetIdUInt64.UniqueNetId"); }
216+
217+
// Functions
218+
219+
FUniqueNetIdUInt64(FString* Str) { NativeCall<void, FString*>(this, "FUniqueNetIdUInt64.FUniqueNetIdUInt64", Str); }
220+
FUniqueNetIdUInt64(FUniqueNetIdUInt64* Src) { NativeCall<void, FUniqueNetIdUInt64*>(this, "FUniqueNetIdUInt64.FUniqueNetIdUInt64", Src); }
221+
FUniqueNetIdUInt64(FUniqueNetId* InUniqueNetId) { NativeCall<void, FUniqueNetId*>(this, "FUniqueNetIdUInt64.FUniqueNetIdUInt64", InUniqueNetId); }
222+
FUniqueNetIdUInt64(uint64 InUniqueNetId) { NativeCall<void, uint64>(this, "FUniqueNetIdUInt64.FUniqueNetIdUInt64", InUniqueNetId); }
223+
224+
bool IsValid() { return NativeCall<bool>(this, "FUniqueNetIdUInt64.IsValid"); }
225+
FString* ToDebugString(FString* result) { return NativeCall<FString*, FString*>(this, "FUniqueNetIdUInt64.ToDebugString", result); }
226+
unsigned int GetHash() { return NativeCall<int>(this, "FUniqueNetIdUInt64.GetHash"); }
227+
FString* ToString(FString* result) { return NativeCall<FString*, FString*>(this, "FUniqueNetIdUInt64.ToString", result); }
228+
};
229+
212230
struct FUniqueNetIdSteam : FUniqueNetId
213231
{
214232
unsigned __int64 UniqueNetId;

version/Core/Public/Ark/ArkApiUtils.h

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ namespace ArkApi
88
{
99
enum class ServerStatus { Loading, Ready };
1010

11+
struct MapCoords
12+
{
13+
float x = 0.f;
14+
float y = 0.f;
15+
};
16+
1117
class ARK_API IApiUtils
1218
{
1319
public:
@@ -734,6 +740,57 @@ namespace ArkApi
734740

735741
return out_actors;
736742
}
743+
744+
/**
745+
* \brief Converts FVector into coords that are displayed when you view the ingame map
746+
*/
747+
FORCEINLINE MapCoords FVectorToCoords(FVector actor_position)
748+
{
749+
AWorldSettings* world_settings = GetWorld()->GetWorldSettings(false, true);
750+
APrimalWorldSettings* p_world_settings = static_cast<APrimalWorldSettings*>(world_settings);
751+
MapCoords coords;
752+
753+
float lat_scale = p_world_settings->LatitudeScaleField() != 0 ? p_world_settings->LatitudeScaleField() : 800.0f;
754+
float lon_scale = p_world_settings->LongitudeScaleField() != 0 ? p_world_settings->LongitudeScaleField() : 800.0f;
755+
756+
float lat_origin = p_world_settings->LatitudeOriginField() != 0 ? p_world_settings->LatitudeOriginField() : -400000.0f;
757+
float lon_origin = p_world_settings->LongitudeOriginField() != 0 ? p_world_settings->LongitudeOriginField() : -400000.0f;
758+
759+
float lat_div = 100.f / lat_scale;
760+
float lat = (lat_div * actor_position.Y + lat_div * abs(lat_origin)) / 1000.f;
761+
762+
float lon_div = 100.f / lon_scale;
763+
float lon = (lon_div * actor_position.X + lon_div * abs(lon_origin)) / 1000.f;
764+
765+
coords.x = std::floor(lon * 10.0f) / 10.0f;
766+
coords.y = std::floor(lat * 10.0f) / 10.0f;
767+
768+
return coords;
769+
}
770+
771+
/**
772+
* \brief obtains the steam ID of an attacker, meant to be used in hooks such as TakeDamage
773+
* \param tribe_check if set to true will return NULL if the target is from the same tribe as the attacker
774+
*/
775+
FORCEINLINE uint64 GetAttackerSteamID(AActor* target, AController* killer, AActor* damage_causer, bool tribe_check = true)
776+
{
777+
uint64 steam_id = NULL;
778+
779+
if (target)
780+
{
781+
if (killer && !killer->IsLocalController() && killer->IsA(AShooterPlayerController::GetPrivateStaticClass())
782+
&& (!tribe_check || (tribe_check && target->TargetingTeamField() != killer->TargetingTeamField())))
783+
steam_id = GetSteamIdFromController(static_cast<AShooterPlayerController*>(killer));
784+
else if (damage_causer && (!tribe_check || (tribe_check && target->TargetingTeamField() != damage_causer->TargetingTeamField()))
785+
&& damage_causer->IsA(APrimalStructureExplosive::StaticClass()))
786+
{
787+
APrimalStructureExplosive* explosive = static_cast<APrimalStructureExplosive*>(damage_causer);
788+
steam_id = GetSteamIDForPlayerID(explosive->ConstructorPlayerDataIDField());
789+
}
790+
}
791+
792+
return steam_id;
793+
}
737794
private:
738795
virtual AShooterPlayerController* FindPlayerFromSteamId_Internal(uint64 steam_id) const = 0;
739796
};

0 commit comments

Comments
 (0)