Advertisement
Anti-hide

Hitmarker/Hitsound

Oct 23rd, 2017
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.74 KB | None | 0 0
  1. # include <Windows.h>
  2. #pragma comment(lib, "Winmm.lib")
  3. class hitmarker
  4. {
  5. class player_hurt_listener
  6. : public IGameEventListener2
  7. {
  8. public:
  9. void start()
  10. {
  11. if (!g_pGameEventManager->AddListener(this, "player_hurt", false))
  12. {
  13. throw misc::exception("Failed to register the event");
  14. }
  15. }
  16. void stop()
  17. {
  18. g_pGameEventManager->RemoveListener(this);
  19. }
  20. void FireGameEvent(IGameEvent*event) override
  21. {
  22. hitmarker::singleton()->on_fire_event(event);
  23. }
  24. int GetEventDebugID(void) override
  25. {
  26. return EVENT_DEBUG_ID_INIT /*0x2A*/;
  27. }
  28. };
  29. public:
  30. static hitmarker* singleton()
  31. {
  32. static hitmarker* instance = new hitmarker;
  33. return instance;
  34. }
  35. void initialize()
  36. {
  37. _listener.start();
  38. }
  39. void on_fire_event(IGameEvent* event)
  40. {
  41. if (!strcmp(event->GetName(), "player_hurt"))
  42. {
  43. int attacker = event->GetInt("attacker");
  44. if (g_pEngine->GetPlayerForUserID(attacker) == g_pEngine->GetLocalPlayer())
  45. {
  46. //g_pSurface->PlaySound doesnt work for some reason
  47. PlaySoundA(_soundFileName, NULL, SND_ASYNC);
  48. _flHurtTime = g_pGlobalVars->curtime;
  49. }
  50. }
  51. }
  52. void on_paint()
  53. {
  54. auto curtime = g_pGlobalVars->curtime;
  55. auto lineSize = 8;
  56. if (_flHurtTime + 0.25f >= curtime)
  57. {
  58. int screenSizeX, screenCenterX;
  59. int screenSizeY, screenCenterY;
  60. g_pEngine->GetScreenSize(screenSizeX, screenSizeY);
  61. screenCenterX = screenSizeX / 2;
  62. screenCenterY = screenSizeY / 2;
  63. g_pSurface->DrawSetColor(200, 200, 200, 255);
  64. g_pSurface->DrawLine(screenCenterX - lineSize, screenCenterY - lineSize, screenCenterX - (lineSize / 4), screenCenterY - (lineSize / 4));
  65. g_pSurface->DrawLine(screenCenterX - lineSize, screenCenterY + lineSize, screenCenterX - (lineSize / 4), screenCenterY + (lineSize / 4));
  66. g_pSurface->DrawLine(screenCenterX + lineSize, screenCenterY + lineSize, screenCenterX + (lineSize / 4), screenCenterY + (lineSize / 4));
  67. g_pSurface->DrawLine(screenCenterX + lineSize, screenCenterY - lineSize, screenCenterX + (lineSize / 4), screenCenterY - (lineSize / 4));
  68. }
  69. }
  70. private:
  71. player_hurt_listener _listener;
  72. const char* _soundFileName = "csgo\\sound\\hitsound.wav";
  73. float _flHurtTime;
  74. };
  75.  
  76.  
  77. USAGE:
  78. void __stdcall PaintTraverse(VPANEL vguiPanel, bool forceRepaint, bool allowForce)
  79. {
  80. static tPaintTraverse oPaintTraverse = g_pPanelHook->get_original<tPaintTraverse>(41);
  81. static VPANEL targetPanel = 0;
  82. if (!targetPanel)
  83. {
  84. if (!strcmp(g_pPanel->GetName(vguiPanel), "MatSystemTopPanel"))
  85. {
  86. targetPanel = vguiPanel;
  87. }
  88. }
  89. else if (targetPanel == vguiPanel)
  90. {
  91. if (g_pEngine->IsInGame())
  92. hitmarker::singleton()->on_paint();
  93. }
  94. return oPaintTraverse(g_pPanel, vguiPanel, forceRepaint, allowForce);
  95. }
  96. DWORD WINAPI DllLoad()
  97. {
  98. //
  99. //bla bla bla boring initialization stuff
  100. //
  101. hitmarker::singleton()->initialize();
  102. //
  103. //bla bla bla boring initialization stuff
  104. //
  105. return TRUE;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement