-
Постов
93 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные VDV
-
-
Мерцает, скорее всего, потому, что, судя по всему, используются функции GDI для вывода FPS. А игра использует DirectX. Отсюда и мерцание.
через директ Х вроде бы все рисую - там стандартный вывод был
sprintf( cFrameRate, "Framerate: %d", int( fFps ) );
я заменил на свой
FPSText(10, 120, SKYBLUE,dMenu.pFont, "%d",int(fFps));
-
Да ну блин, сколько можно? В будущем подобные темы буду закрывать без предупреждения. Либо предоставляете МАКСИМУМ информации (как то - название и версия игры, и полностью код, в котором возникает ошибка, а также, при каких обстоятельствах), либо не получите НИКАКОЙ помощи!
Причем сдесь название игры и версия???? Подсчет ФПС это общее - для всех игр подходит , поставить этот код на вормс3д или же на КС - одно и тоже , суть проблемы не в том , суть проблемы в коде ,а имеено
FPSText(10, 120, SKYBLUE,dMenu.pFont, "%d",int(fFps));
при выводе на экран значения ФПС.
С помощью какой функции я вывожу значения на экран????
void FPSText(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString2, ... )
{
char buf[1024];
RECT FontRect = { x, y, x+800, y+50 };//500 30
va_list vaList;
va_start(vaList, pString2);
vsprintf_s(buf, pString2, vaList);
va_end(vaList);
pFont->DrawText( NULL, buf, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);
}
Игра фаркрай, какую еще инфу предоставить????
-
Немного изменил исходный код под себя
float fFps = 0; // переменная для основного ФПС
float fLastTickCount = 0;// - переменная последнего отсчета
float fCurrentTickCount; // переменная не знаю как правильно объяснить
char cFrameRate[50] = {NULL}; - убрал
char *cFps() - сама функция
{
fCurrentTickCount = clock() * 0.001f;// время на компе * 0.001.
++fFps; переменная ФПС +1
if((fCurrentTickCount - fLastTickCount) > 1.0f)
{
fLastTickCount = fCurrentTickCount;
FPSText(10, 120, SKYBLUE,dMenu.pFont, "%d",int(fFps)); // все парвильно выводит -НО значение мерцает постоянно, в чем проблема объясните пожалуйста
//sprintf( cFrameRate, "Framerate: %d", int( fFps ) ); - убрал
fFps = 0;
}
return cFrameRate;
} -
есть массив байт 00 15 31 A8 B5 FF(к примеру)
Необходимо создать цикл , который будет находить все адреса по этому массиву байт и приплюсовывать смещение "+20"(однократно) к найденным адресам, а затем найденные адреса со смещение "+ 20" постоянно(цикл) приравнивать к значению , адреса 0х1452AB. (к примеру)
Такое возможно сделать или нет? помогите кто чем сможет.
Использовал функции чтения и запись в память "Кодера"
template<class T> T ReadMemory (DWORD address)
{
static char buffer [1024];
HANDLE proc_handle = OpenProcess (PROCESS_ALL_ACCESS , false , pID);
if (!ReadProcessMemory(proc_handle , (LPCVOID)address , &buffer , sizeof(buffer), NULL))
CloseHandle (proc_handle);
return reinterpret_cast<T> (buffer);
}template<class T> void WriteMemory (DWORD address , T value)
{
HANDLE proc_handle = OpenProcess (PROCESS_ALL_ACCESS , false , pID);
if (!WriteProcessMemory(proc_handle , (LPVOID)address , &value , sizeof(value), NULL))
CloseHandle (proc_handle);
} -
Грубо говоря пишу "ESP box" , столкнулся с проблемой перевода 3д координат в экранные 2д , скопипастить у кого-то не понимая как это работает одно , а разобраться в этом самому , пускай и с помощью других умных людей другое. Нашел пример кода на одном сайте , естественно ничего не понял , просьба помочь разобраться, исправить мои комменты, если это вообще то что нужно , если есть способы по-проще просьба исправить меня :
bool WorldToScreen(Vector3D World, float *ScreenX, float *ScreenY)- сама функция с аргументами, не совсем понятно , что входит "Vector3D"
{
Vector3D Position = VectorSubtract(World, RefDef->Origin); - не совсем понятно что входит в "VectorSubtract"
Vector3D Transform; переменная трансформации 3д координат
Transform.x = DotProduct(Position, RefDef->viewAxis[1]); - трансформация координаты х , не совсем понятны аргументы
Transform.y = DotProduct(Position, RefDef->viewAxis[2]);- трансформация координаты y , не совсемпонятны аргументы
Transform.z = DotProduct(Position, RefDef->viewAxis[0]); - трансформация координаты z , не совсемпонятны аргументы
//дальше вообще не пойму
if (Transform.z < 0.1f)
return false;
Vector2D Center = Vector2D((float)RefDef->Width * 0.5f, (float)RefDef->Height * 0.5f); отцентровка 2д координат как я понял , прошу объяснить
подсчет экранных координат
*ScreenX = Center.x * (1 - (Transform.x / RefDef->fov.x / Transform.z));
*ScreenY = Center.y * (1 - (Transform.y / RefDef->fov.y / Transform.z));
return true;
} -
Необходимо подсчитать и вывести на экран FPS в моём directx меню, помогите с исходным кодом разобраться
нашел какой-никой исходник, работает он конечно некорректно,помогите его доработать:
DWORD FrameCnt; // кол-во кадров
float TimeElapsed; // промежуток времени
float FPS; // наш фпс
float oldTime;
float newTime;
float deltatime;
FrameCnt++; // c каждым кадром увеличивается на 1, т.е. это кол-во кадров кот. мы разделим на промежуток времени
newTime = GetTickCount(); // записываем в ньютайм время после всех выполненных операциях
deltatime = newTime - oldTime; // узнаем сколько времени проходит от начала до конца
TimeElapsed += deltatime; // и прибавляем эту разницу к таймэлапседу
if(TimeElapsed >= 500.0) // если в таймэлапседе накопилось 0.5 сек, то
{
FPS = 1000*(float)FrameCnt / TimeElapsed; // делим кол-во кадров прошедшее за полсекунды на таймэлапсед(равный примерно 0.5 сек)
TimeElapsed = 0.0f; // обнуляем таймэлапсед, для следующего подсчета
FrameCnt = 0; // и обнуляем кол-во кадров
}
p.s. украл с киберфорума
-
Необходимо подсчитать и вывести на экран FPS в моём directx меню, помогите с исходным кодом разобраться
нашел какой-никой исходник, работает он конечно некорректно,помогите его доработать:
DWORD FrameCnt; // кол-во кадров
float TimeElapsed; // промежуток времени
float FPS; // наш фпс
float oldTime;
float newTime;
float deltatime;
FrameCnt++; // c каждым кадром увеличивается на 1, т.е. это кол-во кадров кот. мы разделим на промежуток времени
newTime = GetTickCount(); // записываем в ньютайм время после всех выполненных операциях
deltatime = newTime - oldTime; // узнаем сколько времени проходит от начала до конца
TimeElapsed += deltatime; // и прибавляем эту разницу к таймэлапседу
if(TimeElapsed >= 500.0) // если в таймэлапседе накопилось 0.5 сек, то
{
FPS = 1000*(float)FrameCnt / TimeElapsed; // делим кол-во кадров прошедшее за полсекунды на таймэлапсед(равный примерно 0.5 сек)
TimeElapsed = 0.0f; // обнуляем таймэлапсед, для следующего подсчета
FrameCnt = 0; // и обнуляем кол-во кадров
}p.s. украл с киберфорума
-
спасибо огромное все работает , осталось уладить пару нюансов
p.s. поставить плюс так и не могу почему-то
-
Проверь аргументы функции PrintText2..
void PrintText2(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString2 )
- позиция х,у,цвет,шрифт, и строка с символами чар - не пойму на что ты намекаешь друг, добавлять еще аргумент не получается, добавить аргумент в va_list тоже , голова кругом идет ...
-
Правильно...
Твоя ошибка - "toо many arguments in function call"))
это я понял - я сокращал колличество аргументов и все равно такая же проблема
PrintText2(10, 150, SKYBLUE,dMenu.pFont, "Количество патронов = %d",ammoBytes);
-
if ( checkbox_getState(sender)== 1 ) then
твой скрипт
else
твой скрипт №2
end
-
Из MSDN
va_list vaList; //Variable argument list
va_start(vaList, pString2); //Initialize variable arguments
vsprintf_s(buf, pString2, vaList); //Write formatted output using a pointer to the list of arguments
va_end(vaList); //Reset variable arguments.
PrintText2(10, 150, SKYBLUE,dMenu.pFont, "Адрес патронов = 0x%X\nКоличество патронов = %d", ammoAddress/*Буффер 1*/, ammoValue/*Буффер 2*/);Правильно я понимаю? в %Х будет отображаться буфер 1 в хексе , а в %d будет отображаться буфер 2 в целых числах?
прочитал адрес и его значение и всунул во второй буффер (ammoBytes - значения адреса патронов) тут все нормально , но в первый буффер я вообще ничего не могу всунуть , постоянно пишет много аргументов (to many arguments in function call) , что я неправильно делаю?
byte* ReadMemory (DWORD address , DWORD size , DWORD pID)
{
static byte* bytes = new byte [size];
HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS , false , pID);
ReadProcessMemory(hProcess , (void*)address , bytes , size , NULL);
CloseHandle (hProcess);
return bytes;
}
DWORD ammo = 0;
byte* ammoBytes = ReadMemory (0x01668084 , sizeof(DWORD) , pID); -
Если не ленится и поискать, можно найти ответы на все ваши вопросы.
PrintText(x, y, color, pFont, "Font = 0x%X", pFont); //Выводит адрес "pFont"-а в hex виде..Друг или ты меня не поймешь или я тупой сильно (скорее всего), вот смотри что у меня получается , поправь , если я не правильно что-то закомментирую.
void PrintText2(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString2 ) - параметры функции вывода текста в моё меню:" х, у, цвет, вывод шрифта по-моему , сама строка в ввиде чар"
{
char buf[1024]; - буффер
DWORD pID = GetProcessByName("Game.exe"); я получил хендл на нужный мне процесс(это не полный код)
RECT FontRect = { x, y, x+500, y+30 }; - не помню для чего это
va_list vaList;
va_start(vaList, pString2);
vsprintf_s(buf, pString2, vaList);
va_end(vaList);
вот это я вообще не пойму зачем , объясни пожалуйста
pFont->DrawText( NULL, buf, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col); - рисование текста , аргументы: нул, буффер , автозаполнение(непомню чего), ссылка на FontRect , не знаю что это , цвет.
}затем мы водим текст с заданными параметрами
PrintText2(10, 150, SKYBLUE,dMenu.pFont, " патроны %X"); - х , у , цвет , вот тут не понятно , где "патроны" выводит текст в формате чар, где "%Х" выводит весь буфер в формате хекс, а мне необходимо , чтобы где по-колхозному говоря "%Х" постоянно выводило значение моего адреса (0х1652587) патрон
Читаю чужую программу , получаем ammo(значение адреса патронов)
byte* ReadMemory (DWORD address , DWORD size , DWORD pID)
{
static byte* bytes = new byte [size];
HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS , false , pID);
ReadProcessMemory(hProcess , (void*)address , bytes , size , NULL);
CloseHandle (hProcess);
return bytes;
}
DWORD ammo = 0;
byte* ammoBytes = ReadMemory (0x01668084 , sizeof(DWORD) , pID);p.s. почему я не могу тебя отблагодарить - пишет лимит исчерпан,хотя я не кому "спасибо" не ставил
-
Друг не ругайся на меня сильно, но я не пойму ход мыслей твоих , так еще не совсем опытен в с++ , прошу отнестись адыкватно и объяснить как вывести значение адреса в формате флоат, не всего буфера а только нужного мне адреса , я запутался совсем.
void PrintText(int x(позиция Х), int y(позиция У), D3DCOLOR col(цвет), LPD3DXFONT pFont(текст), const char *pString(сама строка,зачем константное значение не пойму ), ...)
{
char buf[1024];(выделяем буффер)
RECT FontRect = { x, y, x+500, y+30 };(отрисовка)
va_list vaList;(не пойму для чего это - скорее всего для передачи необходимого значения строке)
va_start(vaList, pString);(аргументы : сам ва-лист и строка)
vsprintf_s(buf, pString, vaList);(настройки строки получается, что мы выводим: буфер , строка )
va_end(vaList);(тут ясно)
pFont->DrawText( NULL, buf, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col); (что мы рисуем : ну тут главное буфер)
}
........
PrintText(x(позиция Х), y(позиция У), color(цвет), pFont(понятно), "0x(текст)%X(вот тут получается, выводит весь буфер, в формате целого числа, а как вывести не весь буфер а адрес нужный мне)");читаю память я способом Кодера
byte* ReadMemory (DWORD address , DWORD size , DWORD pID)
{
static byte* bytes = new byte [size];
HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS , false , pID);
ReadProcessMemory(hProcess , (void*)address , bytes , size , NULL);
CloseHandle (hProcess);
return bytes;
}может нужно как ни буть приравнять
char buf =
я запутался...
-
текст нужно еще отформатировать с помощью wsprintf, передав ей необходимое значение.
если вам не трудно помогите с исходным кодом - у меня не получается форматировать текст и задать ему значение буфера
Нужно задать дополнительные параметры pString ??? что-то типа Pstring(buffer , pID , .....) или как?
void PrintText(char pString[], int x, int y, D3DCOLOR col, ID3DXFont *font)
{
RECT FontRect = { x, y, x+500, y+30 };
font->DrawText( NULL, pString, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);
} -
Не судите строго изучаю directx 3 недели, с чужих исходов естественно.
Собственно задача:
1. Прочитать память из другой программы , определенный адрес(адрес с моими патронами)
2. Вывести значение этого адреса в моё directх приложение(пример с фрапсом)
Смысл в том , чтобы постоянно рисовать значение адреса с патронами . Как фрапс рисует значение ФПС.
Начну с исходного кода , думаю так будет понятнее:
1.Получаем хендл на другой процесс(код не нужен думаю)
2.Читаем память другого процесса,возвращаем значение ввиде байт(использовал код "Кодера")
byte* ReadMemory (DWORD address , DWORD size , DWORD pID)
{
static byte* bytes = new byte [size];
HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS , false , pID);
ReadProcessMemory(hProcess , (void*)address , bytes , size , NULL);
CloseHandle (hProcess);
return bytes;
}3.Создаем буффер
Код:
WCHAR buffer [32];
4. Функция вывода текста(основная функция с аргументами,если нужен весь код я сброшу)
void PrintText(char pString[], int x, int y, D3DCOLOR col, ID3DXFont *font)
{
RECT FontRect = { x, y, x+500, y+30 };
font->DrawText( NULL, pString, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);
}5. Вывод текста(правильно или нет судите сами , скорее всего нет)
void TestThread()
{
PrintText("вот тут нужно вывести значение адреса как это сделать?",10, 150, SKYBLUE, dMenu.pFont);
}6. Выводится только текст L"%f" - не катит , в основной функции замена аргуметов
void PrintText(char pString[], int x, int y, D3DCOLOR col, ID3DXFont *font)
{
RECT FontRect = { x, y, x+500, y+30 };
font->DrawText( NULL, pString, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);
}на
void PrintText(buffer, int x, int y, D3DCOLOR col, ID3DXFont *font)
{
RECT FontRect = { x, y, x+500, y+30 };
font->DrawText( NULL, buffer, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);
}не катит, как решить задачу?
-
local te_health = getTableEntry("health")
function CECheckbox1Change(sender)
if ( checkbox_getState(sender)== 1 ) then
memoryrecord_setValue(te_health, "100")
memoryrecord_freeze(te_health, 0)
else
memoryrecord_setValue(te_health, "99")
memoryrecord_unfreeze(te_health)
end
endПоглядывай сюда, тут могут быть подсказки о том какие функции тебе использовать. Тебе пригодиться. Когда я писал для тебя код я смотрел, только туда )
Вот спасибо ! помог очень,очень! только ссылка не работает, я понимаю что она 2011 года,не мог ли ты подсказать где еще есть руссифицированные материалы для СЕ?
Возврат значения в виде адресов \ с++ VS 2012
in Низкоуровневое программирование
Опубликовано
Необходимо просканировать памать с помощью функции "FindPattern" массив байт "01 55 B1 FF 12 B3" и вернуть не один найденный адрес , а все адреса, которые нашлись при скане указанного массива , как это сделать?
думаю информацию дал полную...