Advertisement
Bambus3k

Untitled

Nov 29th, 2019
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.36 KB | None | 0 0
  1. BOOL CActorInstance::TestActorCollision(CActorInstance & rVictim)
  2. {
  3. /*
  4. if (m_pkHorse)
  5. {
  6. if (m_pkHorse->TestActorCollision(rVictim))
  7. return TRUE;
  8.  
  9. return FALSE;
  10. }
  11. */
  12.  
  13. if (rVictim.IsDead())
  14. return FALSE;
  15. #ifdef ENABLE_SAFEZONE_STOP_COLLISION
  16. if (IsInSafe(rVictim))
  17. return FALSE;
  18. #endif
  19. if (rVictim.GetActorType() == TYPE_NPC && rVictim.GetRace() == 3)
  20. return FALSE;
  21.  
  22. #ifdef ENABLE_STOP_COLISSION_GLOBAL
  23. int pListPet[2] = {34001, 34030};
  24. int pListGlobal[] = {9001, 9002, 9003, 9004, 9005, 9006, 20011, 20091, 20092, 20093, 20094, 20095, 20111, 20112, 20113, 20114, 20115, 20116, 30000, 20117, 20221, 20222, 20123, 20118, 20231, 20119, 20120, 20101, 20102, 20103, 20104, 20105, 20106, 20107, 20108, 20109};
  25.  
  26. const char* strMapListGlobal[] = {"metin2_map_a1", "metin2_map_a3", "metin2_map_b1", "metin2_map_b3", "metin2_map_c1", "metin2_map_c3",
  27. "season2/metin2_map_skipia_dungeon_01", "season2/metin2_map_skipia_dungeon_02", "season2/metin2_map_guild_inside01", "metin2_map_duel", "metin2_map_spiderdungeon", "metin2_map_spiderdungeon_02", "metin2_map_milgyo", "metin2_map_n_flame_01", "metin2_map_n_desert_01", "Metin2_map_CapeDragonHead", "metin2_map_Mt_Thunder", "metin2_map_dawnmistwood", "metin2_map_BayBlackSand", "santhia_kouzelny_dul", "metin2_map_demon_dungeon_2", "exemir_90", "exemir_180", "someya_monkey", "metin2_map_slz3", "23_1", "23_5x5_02", "metin2_map_deviltower1", "map_n_snowm_01", "metin2_map_trent", "metin2_map_trent02", "metin2_map_wedding_01"};
  28. const char* strMapEventOx = "season1/metin2_map_oxevent";
  29.  
  30.  
  31. std::string stringName = CPythonBackground::Instance().GetWarpMapName();
  32.  
  33. for (int i = 0; i < _countof(strMapListGlobal); i++)
  34. {
  35. #ifdef ENABLE_STOP_COLLISION_PLAYER_OX
  36. if (strMapEventOx == stringName)
  37. {
  38. if (0 <= rVictim.GetRace() && rVictim.GetRace() <= 7)
  39. return FALSE;
  40. }
  41. #endif
  42. if (strMapListGlobal[i] == stringName)
  43. {
  44. for (int i = 0; i < _countof(pListGlobal); i++)
  45. {
  46. if (rVictim.GetRace() == pListGlobal[i] || pListPet[0] <= rVictim.GetRace() && rVictim.GetRace() <= pListPet[1])
  47. return FALSE;
  48. }
  49. }
  50. }
  51. #endif
  52.  
  53. // Check Distance
  54. // NOTE : Ŕű´çČ÷ ¸Ö¸é ĂĽĹ© ľČÇÔ
  55. // ÇÁ·ąŔÓ ˝şĹµ˝ĂłŞ ´ë»ó żŔşęÁ§Ć®ŔÇ Ĺ©±â°ˇ Ŭ°ćżě ą®Á¦°ˇ »ý±ć ż©Áö°ˇ ŔÖŔ˝
  56. // Äł¸ŻĹÍ°ˇ ŔÚ˝ĹŔÇ Body Sphere Radius ş¸´Ů ´ő Ĺ©°Ô Ŕ̵żÇß´ÂÁö¸¦ ĂĽĹ©ÇĎ°í,
  57. // ¸¸ľŕ ±×·¸Áö ľĘ´Ů¸é °Ĺ¸®·Î ĂĽĹ©ÇŘĽ­ °É·ŻÁŘ´Ů.
  58. D3DXVECTOR3 v3Distance = D3DXVECTOR3(rVictim.m_x - m_x, rVictim.m_y - m_y, rVictim.m_z - m_z);
  59. float fDistance = D3DXVec3LengthSq(&v3Distance);
  60. if (fDistance > 800.0f*800.0f)
  61. return FALSE;
  62.  
  63. // NOTE : °ř°Ý ÁßŔ϶§´Â Defending Sphere·Î Collision Check¸¦ ÇŐ´Ď´Ů.
  64. // NOTE : Wait·Î şí·»µů µÇ´Â µµÁßżˇ ¶Ő°í µéľî°ˇ´Â ą®Á¦°ˇ Ŕ־.. - [levites]
  65. TCollisionPointInstanceList * pMainList;
  66. TCollisionPointInstanceList * pVictimList;
  67. if (isAttacking() || IsWaiting())
  68. {
  69. pMainList = &m_DefendingPointInstanceList;
  70. pVictimList = &rVictim.m_DefendingPointInstanceList;
  71. }
  72. else
  73. {
  74. pMainList = &m_BodyPointInstanceList;
  75. pVictimList = &rVictim.m_BodyPointInstanceList;
  76. }
  77.  
  78. TCollisionPointInstanceListIterator itorMain = pMainList->begin();
  79. TCollisionPointInstanceListIterator itorVictim = pVictimList->begin();
  80. for (; itorMain != pMainList->end(); ++itorMain)
  81. for (; itorVictim != pVictimList->end(); ++itorVictim)
  82. {
  83. const CDynamicSphereInstanceVector & c_rMainSphereVector = (*itorMain).SphereInstanceVector;
  84. const CDynamicSphereInstanceVector & c_rVictimSphereVector = (*itorVictim).SphereInstanceVector;
  85.  
  86. for (DWORD i = 0; i < c_rMainSphereVector.size(); ++i)
  87. for (DWORD j = 0; j < c_rVictimSphereVector.size(); ++j)
  88. {
  89. const CDynamicSphereInstance & c_rMainSphere = c_rMainSphereVector[i];
  90. const CDynamicSphereInstance & c_rVictimSphere = c_rVictimSphereVector[j];
  91.  
  92. if (DetectCollisionDynamicSphereVSDynamicSphere(c_rMainSphere, c_rVictimSphere))
  93. {
  94. if (GetVector3Distance(c_rMainSphere.v3Position, c_rVictimSphere.v3Position) <=
  95. GetVector3Distance(c_rMainSphere.v3LastPosition, c_rVictimSphere.v3Position))
  96. {
  97. return TRUE;
  98. }
  99. return FALSE;
  100. }
  101. }
  102. }
  103.  
  104. return FALSE;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement