Другое С/С++ Вопрос - Ответ

0pc0d3R

Потрачен
550
269
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Да нет,мне проста надо ,чтобы при входе в игру резко вводилась команда и выбирался пункт диалога,это всё сделано,только проблема в том что скрипт автоматизирован и всё это выполняется при авторизации\подключении.
P.s использую "ASI plugin"
тогда проверь через память
 

SR_team

like pancake
BH Team
4,720
6,367
использую "ASI plugin"
Вот вы блядь странные люди, вам дали SFAPI для простого написания плагинов, а вы все равно в ASI лезите и ебетесь потом с тем, что в SFAPI одной строкой реализуется. Нахуя?
 
  • Нравится
Реакции: CarLCas и MISTER_GONWIK

Nark228

Новичок
6
1
Кто знает как исправить ошибку ?
bandicam 2016-02-22 10-11-33-072.jpg
 

return

Новичок
82
5
Вот сделал вывод игроков с определённым скином.
Как посчитать количество выведенных игроков?
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++;
     }
}
 

CarLCas

Известный
161
118
Вот сделал вывод игроков с определённым скином.
Как посчитать количество выведенных игроков?
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++;
     }
}
Вот это
C++:
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++:
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++;
}
И после цикла:
C++:
sprintf(text, "Кол-во: %d",counti);
pD3DFont->PrintShadow(1, pPresentParam.BackBufferHeight / 2 + count * 20, color, text);
 
  • Нравится
Реакции: return

return

Новичок
82
5
Почему то так, выводит только первый скин, 102.
103 и 104 не выводит.
Я бы заменил на:
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++;
}
 

CarLCas

Известный
161
118
Почему то так, выводит только первый скин, 102.
103 и 104 не выводит.
Он выводит только 103 скин, я писал не так. У меня вместо 102 в коде 101, а вместо 104 - 105. А в случае как ты написал, надо было бы в условии сделать вместо знаков ">" "<" вот такие ">=" "<="
 

return

Новичок
82
5
в исходнике соба нет структуры stSAMPMisc
в структуре есть iRaceCheckpointEnabled и vecRaceCheckpointPos, чем их можно заменить?
 

Ice

Известный
33
3
как проверить, если пикап уже подобрали?
когда кто то поднимает пикап, он по прежнему существует, но мы его не можем видеть или поднять...
 

Vasiliy77

Известный
22
1
Пробую написать значит прогу для начала у виде ехе файла, чтобы можно было удобней проверять написанное. Прога должна находить с памяти gta-sa.exe динамический адрес айпи. С помощью видеоуроков на ютубе и Cheat Engine я сделал приблизительно что нужно мне:
[HIDE=1]
// В файле класса:
DWORD Anticheat::ReadPointer(DWORD base, DWORD* offsets, int count)
{
for (int i = 0; i < count - 1; i++)
{
base = Read(base + offsets, 4).toUINT32();
}
return base + offsets[count - 1];
}
// В главном файле:
void main()
{
Anticheat* mem = new Anticheat("gta_sa.exe");
mem->Open();
printf("PID: %x\n\n", mem->getPID());
DWORD offsets[] = { 0x021A0F8, 0x20 };
DWORD addressdllsamp = 0x05180000;// адрес samp.dll
DWORD ammoadr = mem->ReadPointer(addressdllsamp, offsets, 2);
printf("Adress: 0x%x / value = %s\n\n", ammoadr, mem->Read(ammoadr, 15).toStringA());// 15 - величина nick`a + 1
system("PAUSE");
}

[/HIDE]
Здесь система получает динамический адресс значения "айпи сервера", через оффсеты и поинты.
Если в уже открытом процессе менять айпи, то в консоль выводит ее правильно. Но если перезапустить процесс, то в CE вижу что в samp.dll уже другой адрес, и в итоге в консоли ничего нет. Помогите вот, нужно такое же сделать, только уже для samp.dll, тоесть узнать поинт и оффсеты смещения в памяти адреса dll-лки.

[HIDE=1]
660889d1457693750

[/HIDE]
 

FYP

Известный
Администратор
1,758
5,722
@Vasiliy77, тебе нужно получить базовый адрес модуля в процессе.
это можно сделать с помощью такой функции:
C++:
#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;
}
 
  • Нравится
Реакции: Vasiliy77