Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Api/Atlas/Atlas.h>
- #pragma comment(lib, "AtlasApi.lib")
- DECLARE_HOOK(APrimalDinoCharacter_TakeDamage, float, APrimalDinoCharacter*, float, FDamageEvent*, AController*, AActor*);
- /*struct APrimalRaft : APrimalDinoCharacter
- {
- // Functions
- bool IsAnchored() { return NativeCall<bool>(this, "APrimalRaft.IsAnchored"); }
- static UClass * GetPrivateStaticClass() { return NativeCall<UClass *>(nullptr, "APrimalRaft.GetPrivateStaticClass"); }
- static UClass * StaticClass() { return NativeCall<UClass *>(nullptr, "APrimalRaft.StaticClass"); }
- };*/
- float Hook_APrimalDinoCharacter_TakeDamage(APrimalDinoCharacter* _this, float Damage, FDamageEvent* DamageEvent,
- AController* EventInstigator, AActor* DamageCauser)
- {
- if (_this->IsShip())
- {
- //check for Friendly Claim Flags nearby
- UWorld* world = ArkApi::GetApiUtils().GetWorld();
- TArray<AActor*> new_actors;
- TArray<AActor*> actors_ignore;
- TArray<TEnumAsByte<enum EObjectTypeQuery>> types;
- UKismetSystemLibrary::SphereOverlapActors_NEW(world, _this->RootComponentField()->RelativeLocationField(),
- 10000, &types, APrimalStructureClaimFlag::GetPrivateStaticClass(), &actors_ignore, &new_actors);
- for (const auto& actor : new_actors)
- {
- APrimalStructureClaimFlag* claimFlag = static_cast<APrimalStructureClaimFlag*>(actor);
- //Log::GetLog()->warn(FVector::Distance(_this->RootComponentField()->RelativeLocationField(), actor->RootComponentField()->RelativeLocationField()));
- if (claimFlag->TargetingTeamField() == _this->TargetingTeamField())
- {
- if (FVector::Distance(_this->RootComponentField()->RelativeLocationField(), claimFlag->RootComponentField()->RelativeLocationField()) <= claimFlag->LandClaimRadiusField())
- {
- return APrimalDinoCharacter_TakeDamage_original(_this, 0, DamageEvent, EventInstigator, DamageCauser);
- }
- }
- }
- }
- return APrimalDinoCharacter_TakeDamage_original(_this, Damage, DamageEvent, EventInstigator, DamageCauser);
- }
- void Load()
- {
- Log::Get().Init("ParkedShipProtection");
- ArkApi::GetHooks().SetHook("APrimalStructure.TakeDamage", &Hook_APrimalDinoCharacter_TakeDamage,
- &APrimalDinoCharacter_TakeDamage_original);
- }
- void Unload()
- {
- ArkApi::GetHooks().DisableHook("APrimalDinoCharacter.TakeDamage", &Hook_APrimalDinoCharacter_TakeDamage);
- }
- BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
- {
- switch (ul_reason_for_call)
- {
- case DLL_PROCESS_ATTACH:
- Load();
- break;
- case DLL_PROCESS_DETACH:
- Unload();
- break;
- }
- return TRUE;
- }
Advertisement
Add Comment
Please, Sign In to add comment