#include #include "plugin.h" #include "game_sa\CPed.h" #include "game_sa\RenderWare.h" #include "game_sa\CSprite.h" #include "game_sa\CFont.h" #include "game_sa\common.h" #include "extender\ObjectExtender.h" using namespace plugin; class MyCustomData{ public: bool bPlayerTouchedMe; MyCustomData(CObject *object){ bPlayerTouchedMe = false; } }; // Регистрируем расширение CObject ObjectExtendedData objectExData; void CheckAndDraw() { CPed *playa = FindPlayerPed(); for (int i = 0; i < CPools::ms_pObjectPool->m_Size; i++){ CObject *object = CPools::ms_pObjectPool->GetAt(i); if (object){ // Проверяем на соприкосновение if (playa && !objectExData.Get(object)->bPlayerTouchedMe){ for (int i = 0; i < 6; i++){ if (playa->m_apCollidedEntities[i] == object){ objectExData.Get(object)->bPlayerTouchedMe = true; break; } } } // Выводим надпись CVector &posn = object->m_pCoords ? object->m_pCoords->pos : object->m_Placement.m_vPosn; RwV3d rwp = { posn.x, posn.y, posn.z + 1.0f }; RwV3d screenCoors; float w, h; if (CSprite::CalcScreenCoors(rwp, &screenCoors, &w, &h, true, true)) // Получаем экранные координаты из 3d { CFont::SetAlignment(ALIGN_CENTER); CFont::SetOutlinePosition(1); CFont::SetBackground(false, false); CFont::SetWrapx(500.0); CFont::SetScale(0.5, 1.0); CFont::SetFontStyle(FONT_SUBTITLES); CFont::SetProp(true); char text[16]; if (objectExData.Get(object)->bPlayerTouchedMe){ CFont::SetColor(CRGBA(0, 200, 0, 255)); CFont::PrintString(screenCoors.x, screenCoors.y, "TOUCHED :)"); } else{ CFont::SetColor(CRGBA(200, 0, 0, 255)); CFont::PrintString(screenCoors.x, screenCoors.y, "NOT TOUCHED :("); } } } } } BOOL APIENTRY DllMain(HMODULE module, DWORD reason, LPVOID reserved){ if (reason == DLL_PROCESS_ATTACH){ // Добавляем нашу функцию в событие отрисовки на экране Events::drawingEvent += CheckAndDraw; } return TRUE; }