То чувство, когда писал код на C#, а думал, что пишешь на C/C++Кто знает как исправить ошибку ?
Посмотреть вложение 4286
for (int i = 0; i < SAMP_MAX_PLAYERS; i++ )
{
if ( g_Players->iIsListed[i] != 1 )
continue;
if( g_Players->pRemotePlayer[i] == NULL )
continue;
if(vect3_near_zero(g_stStreamedOutInfo.fPlayerPos[i])
&& (g_Players->pRemotePlayer[i]->pPlayerData == NULL ||
g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor == NULL))
continue;
if(g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped->base.model_alt_id != 0)
{
switch (g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped->base.model_alt_id)
{
case 102:
sprintf(text, "%s[%d]", getPlayerName(i), i);
pD3DFont->PrintShadow(1, pPresentParam.BackBufferHeight / 2 + count * 20, color, text);
break;
case 103:
sprintf(text, "%s[%d]", getPlayerName(i), i);
pD3DFont->PrintShadow(1, pPresentParam.BackBufferHeight / 2 + count * 20, color, text);
break;
case 104:
sprintf(text, "%s[%d]", getPlayerName(i), i);
pD3DFont->PrintShadow(1, pPresentParam.BackBufferHeight / 2 + count * 20, color, text);
break;
}
count++;
}
}
Вот этоВот сделал вывод игроков с определённым скином.
Как посчитать количество выведенных игроков?
C++:for (int i = 0; i < SAMP_MAX_PLAYERS; i++ ) { if ( g_Players->iIsListed[i] != 1 ) continue; if( g_Players->pRemotePlayer[i] == NULL ) continue; if(vect3_near_zero(g_stStreamedOutInfo.fPlayerPos[i]) && (g_Players->pRemotePlayer[i]->pPlayerData == NULL || g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor == NULL)) continue; if(g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped->base.model_alt_id != 0) { switch (g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped->base.model_alt_id) { case 102: sprintf(text, "%s[%d]", getPlayerName(i), i); pD3DFont->PrintShadow(1, pPresentParam.BackBufferHeight / 2 + count * 20, color, text); break; case 103: sprintf(text, "%s[%d]", getPlayerName(i), i); pD3DFont->PrintShadow(1, pPresentParam.BackBufferHeight / 2 + count * 20, color, text); break; case 104: sprintf(text, "%s[%d]", getPlayerName(i), i); pD3DFont->PrintShadow(1, pPresentParam.BackBufferHeight / 2 + count * 20, color, text); break; } count++; } }
switch (g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped->base.model_alt_id)
{
case 102:
sprintf(text, "%s[%d]", getPlayerName(i), i);
pD3DFont->PrintShadow(1, pPresentParam.BackBufferHeight / 2 + count * 20, color, text);
break;
case 103:
sprintf(text, "%s[%d]", getPlayerName(i), i);
pD3DFont->PrintShadow(1, pPresentParam.BackBufferHeight / 2 + count * 20, color, text);
break;
case 104:
sprintf(text, "%s[%d]", getPlayerName(i), i);
pD3DFont->PrintShadow(1, pPresentParam.BackBufferHeight / 2 + count * 20, color, text);
break;
}
count++;
if (g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped->base.model_alt_id>101 && g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped->base.model_alt_id<105)
{
sprintf(text, "%s[%d]", getPlayerName(i), i);
pD3DFont->PrintShadow(1, pPresentParam.BackBufferHeight / 2 + count * 20, color, text);
count++;
}
sprintf(text, "Кол-во: %d",counti);
pD3DFont->PrintShadow(1, pPresentParam.BackBufferHeight / 2 + count * 20, color, text);
И после цикла:
C++:sprintf(text, "Кол-во: %d",counti); pD3DFont->PrintShadow(1, pPresentParam.BackBufferHeight / 2 + count * 20, color, text);
Ошибся, не "counti",a "count". Каждый раз когда скин походит, она инкримируется, и в последствии у тебя будет количество людей с нужными скинамиНе понял, что за переменная counti, что с ней делать?
Я бы заменил на:
C++:if (g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped->base.model_alt_id>102 && g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped->base.model_alt_id<104) { sprintf(text, "%s[%d]", getPlayerName(i), i); pD3DFont->PrintShadow(1, pPresentParam.BackBufferHeight / 2 + count * 20, color, text); count++; }
Он выводит только 103 скин, я писал не так. У меня вместо 102 в коде 101, а вместо 104 - 105. А в случае как ты написал, надо было бы в условии сделать вместо знаков ">" "<" вот такие ">=" "<="Почему то так, выводит только первый скин, 102.
103 и 104 не выводит.
SF->getGame()->isKeyDown()Как сделать проверку на ЗАЖАТИЕ клавиши? Пока клавишу держат опущенной, то программа работает, когда отпускают - перестаёт работать.
#include <string.h>
#include <TlHelp32.h>
HMODULE getModuleHandleRemote(DWORD processId, const char* moduleName)
{
HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, processId);
if (snap == INVALID_HANDLE_VALUE)
return NULL;
MODULEENTRY32 moduleEntry;
moduleEntry.dwSize = sizeof(moduleEntry);
bool found = Module32First(snap, &moduleEntry) == TRUE;
while (found)
{
if (stricmp(moduleEntry.szModule, moduleName) == 0)
return CloseHandle(snap), moduleEntry.hModule;
found = Module32Next(snap, &moduleEntry) == TRUE;
}
CloseHandle(snap);
return NULL;
}
#include <Windows.h>
#include <TlHelp32.h>
....
DWORD GetPID(const char * m_pName)
{
DWORD m_pID = 0;
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pInfo;
pInfo.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(snapshot, &pInfo))
{
while (Process32Next(snapshot, &pInfo))
{
if ( !stricmp( (const char *) m_pName, (const char *) pInfo.szExeFile) )
{
m_pID = pInfo.th32ProcessID;
CloseHandle(snapshot);
return m_pID;
}
}
}
CloseHandle(snapshot);
return m_pID;
}
....
GetPID("smss.exe");