Исходник Hitmarker with sound for TGF

Начинающий
Статус
Оффлайн
Регистрация
2 Авг 2017
Сообщения
28
Реакции[?]
10
Поинты[?]
0
Всем привет, сегодня я покажу, как сделать хитмаркер со звуком для тгф. Это не более чем рабочий концепт. Сурс был взят с uc (не реклама) под ауувар. Ну и просто "портирован" под тгф. Сделан по тупому, не судите строго. Для примера запихнём его в морф, да и он работает всегда. Нету желания его под кнопку делать.

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;
};
dllmain.cpp
Код:
hitmarker::singleton()->initialize();
paintraverse.cpp
Код:
if (I::Engine->IsInGame()) hitmarker::singleton()->on_paint();
 
Сверху Снизу