-
Автор темы
- #1
Всем привет, сегодня я покажу, как сделать хитмаркер со звуком для тгф. Это не более чем рабочий концепт. Сурс был взят с uc (не реклама) под ауувар. Ну и просто "портирован" под тгф. Сделан по тупому, не судите строго. Для примера запихнём его в морф, да и он работает всегда. Нету желания его под кнопку делать.
sdk.h
dllmain.cpp
paintraverse.cpp
sdk.h
Код:
class hitmarker
{
class player_hurt_listener
: public IGameEventListener2
{
public:
void start()
{
if (!I::GameEvent->AddListener(this, "player_hurt", false)) {
}
}
void stop()
{
I::GameEvent->RemoveListener(this);
}
void FireGameEvent(IGameEvent *event) override
{
hitmarker::singleton()->on_fire_event(event);
}
int GetEventDebugID(void) override
{
return 0x2A;
}
};
public:
static hitmarker* singleton()
{
static hitmarker* instance = new hitmarker;
return instance;
}
void initialize()
{
_listener.start();
}
void on_fire_event(IGameEvent* event)
{
if (!strcmp(event->GetName(), "player_hurt")) {
int attacker = event->GetInt("attacker");
if (I::Engine->GetPlayerForUserID(attacker) == I::Engine->GetLocalPlayer()) {
//g_pSurface->PlaySound doesnt work for some reason
PlaySoundA(_soundFileName, NULL, SND_ASYNC);
_flHurtTime = I::Globals->curtime;
}
}
}
void on_paint()
{
auto curtime = I::Globals->curtime;
auto lineSize = 8;
if (_flHurtTime + 0.25f >= curtime) {
int screenSizeX, screenCenterX;
int screenSizeY, screenCenterY;
I::Engine->GetScreenSize(screenSizeX, screenSizeY);
screenCenterX = screenSizeX / 2;
screenCenterY = screenSizeY / 2;
I::Surface->DrawSetColor(200, 200, 200, 255);
I::Surface->DrawLine(screenCenterX - lineSize, screenCenterY - lineSize, screenCenterX - (lineSize / 4), screenCenterY - (lineSize / 4));
I::Surface->DrawLine(screenCenterX - lineSize, screenCenterY + lineSize, screenCenterX - (lineSize / 4), screenCenterY + (lineSize / 4));
I::Surface->DrawLine(screenCenterX + lineSize, screenCenterY + lineSize, screenCenterX + (lineSize / 4), screenCenterY + (lineSize / 4));
I::Surface->DrawLine(screenCenterX + lineSize, screenCenterY - lineSize, screenCenterX + (lineSize / 4), screenCenterY - (lineSize / 4));
}
}
private:
player_hurt_listener _listener;
const char* _soundFileName = "csgo\\sound\\hitsound.wav";
float _flHurtTime;
};
Код:
hitmarker::singleton()->initialize();
Код:
if (I::Engine->IsInGame()) hitmarker::singleton()->on_paint();