Guest User

Untitled

a guest
Jan 23rd, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1. #include <Api/Atlas/Atlas.h>
  2.  
  3. #pragma comment(lib, "AtlasApi.lib")
  4.  
  5. DECLARE_HOOK(APrimalDinoCharacter_TakeDamage, float, APrimalDinoCharacter*, float, FDamageEvent*, AController*, AActor*);
  6.  
  7. /*struct APrimalRaft : APrimalDinoCharacter
  8. {
  9.  
  10.     // Functions
  11.  
  12.     bool IsAnchored() { return NativeCall<bool>(this, "APrimalRaft.IsAnchored"); }
  13.     static UClass * GetPrivateStaticClass() { return NativeCall<UClass *>(nullptr, "APrimalRaft.GetPrivateStaticClass"); }
  14.     static UClass * StaticClass() { return NativeCall<UClass *>(nullptr, "APrimalRaft.StaticClass"); }
  15. };*/
  16.  
  17. float Hook_APrimalDinoCharacter_TakeDamage(APrimalDinoCharacter* _this, float Damage, FDamageEvent* DamageEvent,
  18.     AController* EventInstigator, AActor* DamageCauser)
  19. {
  20.  
  21.     if (_this->IsShip())
  22.     {
  23.  
  24.         //check for Friendly Claim Flags nearby
  25.         UWorld* world = ArkApi::GetApiUtils().GetWorld();
  26.         TArray<AActor*> new_actors;
  27.         TArray<AActor*> actors_ignore;
  28.         TArray<TEnumAsByte<enum EObjectTypeQuery>> types;
  29.             UKismetSystemLibrary::SphereOverlapActors_NEW(world, _this->RootComponentField()->RelativeLocationField(),
  30.                 10000, &types, APrimalStructureClaimFlag::GetPrivateStaticClass(), &actors_ignore, &new_actors);
  31.  
  32.         for (const auto& actor : new_actors)
  33.         {
  34.             APrimalStructureClaimFlag* claimFlag = static_cast<APrimalStructureClaimFlag*>(actor);
  35.             //Log::GetLog()->warn(FVector::Distance(_this->RootComponentField()->RelativeLocationField(), actor->RootComponentField()->RelativeLocationField()));
  36.             if (claimFlag->TargetingTeamField() == _this->TargetingTeamField())
  37.             {
  38.                 if (FVector::Distance(_this->RootComponentField()->RelativeLocationField(), claimFlag->RootComponentField()->RelativeLocationField()) <= claimFlag->LandClaimRadiusField())
  39.                 {
  40.                     return APrimalDinoCharacter_TakeDamage_original(_this, 0, DamageEvent, EventInstigator, DamageCauser);
  41.                 }
  42.             }
  43.         }
  44.     }
  45.     return APrimalDinoCharacter_TakeDamage_original(_this, Damage, DamageEvent, EventInstigator, DamageCauser);
  46. }
  47.  
  48. void Load()
  49. {
  50.     Log::Get().Init("ParkedShipProtection");
  51.  
  52.     ArkApi::GetHooks().SetHook("APrimalStructure.TakeDamage", &Hook_APrimalDinoCharacter_TakeDamage,
  53.         &APrimalDinoCharacter_TakeDamage_original);
  54. }
  55.  
  56. void Unload()
  57. {
  58.     ArkApi::GetHooks().DisableHook("APrimalDinoCharacter.TakeDamage", &Hook_APrimalDinoCharacter_TakeDamage);
  59.    
  60. }
  61.  
  62. BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
  63. {
  64.     switch (ul_reason_for_call)
  65.     {
  66.     case DLL_PROCESS_ATTACH:
  67.         Load();
  68.         break;
  69.     case DLL_PROCESS_DETACH:
  70.         Unload();
  71.         break;
  72.     }
  73.     return TRUE;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment