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

dekname

Участник
44
2
Можно ли где-то посмотреть логику, каким образом выдается стан и какие анимки при этом выдает игра/SA-MP?
 

manukhov

Известный
125
131
Привет. Это код который записывает игровые координаты педа в файл. После чего читает коорды и бегает по ним, но читается только первая строка.
Как можно перейти к следующей строке после выполнения проверки на дистанцию.

C++:
{
std::ofstream cfg("n1ght.txt");
static std::string writestr;

if (g_class.events->gameKeyState(SRKeys::GameKeysOnFoot::Forward_or_Backward) || g_class.events->gameKeyState(SRKeys::GameKeysOnFoot::Left_or_Right)) {

static ULONGLONG iTick = GetTickCount64();
if (GetTickCount64() - iTick > (ULONGLONG)2000) {

writestr += (std::to_string(LOCAL_PLAYER->getPosition().fX) + ":" + std::to_string(LOCAL_PLAYER->getPosition().fY) + "\n");

iTick = GetTickCount64();
}

}
cfg.write(writestr.c_str(), writestr.length());
}


std::ofstream rd("read.txt");
static std::string writestr;



{


std::cmatch result;
std::regex reg("(.*):(.*)");

//Файл откуда берутся координаты
std::ifstream fileread("n1ght.txt");

//Делаем перебор всех строк в файле
for (std::string line; std::getline(fileread, line);) {

//Получаем две координаты в виде чисел из регекса и записываем их в result[1] и result[2]
std::regex_match(line.c_str(), result, reg);

//Переводим наши координаты из string в float для дальнейшей работы
float posX = std::stof(result[1].str()); float posY = std::stof(result[2].str());

float dist = dist2D(LOCAL_PLAYER->getPosition().fX, LOCAL_PLAYER->getPosition().fY, posX, posY);
/* По идеии мы должны сделать проверку на расстояние между педом и самими координатами
* Если пед ближе к нашей точке то переключаем на следующие координаты из файла
* только я хз как)
*/
if (dist >= 1.5f)
continue;

}
//Направляем нашу камеру на координаты из файла
CameraSet(posX, posY);
А вот так только последняя.
C++:
//Получаем две координаты в виде чисел из регекса и записываем их в result[1] и result[2]
std::regex_match(line.c_str(), result, reg);

//Переводим наши координаты из string в float для дальнейшей работы
posX = std::stof(result[1].str()); posY = std::stof(result[2].str());
float dist = dist2D(LOCAL_PLAYER->getPosition().fX, LOCAL_PLAYER->getPosition().fY, posX, posY);

if (dist <= 1.5f) {
line[i]++;
}
}
 

Musaigen

abobusnik
Проверенный
1,608
1,366
Привет. Это код который записывает игровые координаты педа в файл. После чего читает коорды и бегает по ним, но читается только первая строка.
Как можно перейти к следующей строке после выполнения проверки на дистанцию.

C++:
{
std::ofstream cfg("n1ght.txt");
static std::string writestr;

if (g_class.events->gameKeyState(SRKeys::GameKeysOnFoot::Forward_or_Backward) || g_class.events->gameKeyState(SRKeys::GameKeysOnFoot::Left_or_Right)) {

static ULONGLONG iTick = GetTickCount64();
if (GetTickCount64() - iTick > (ULONGLONG)2000) {

writestr += (std::to_string(LOCAL_PLAYER->getPosition().fX) + ":" + std::to_string(LOCAL_PLAYER->getPosition().fY) + "\n");

iTick = GetTickCount64();
}

}
cfg.write(writestr.c_str(), writestr.length());
}


std::ofstream rd("read.txt");
static std::string writestr;



{


std::cmatch result;
std::regex reg("(.*):(.*)");

//Файл откуда берутся координаты
std::ifstream fileread("n1ght.txt");

//Делаем перебор всех строк в файле
for (std::string line; std::getline(fileread, line);) {

//Получаем две координаты в виде чисел из регекса и записываем их в result[1] и result[2]
std::regex_match(line.c_str(), result, reg);

//Переводим наши координаты из string в float для дальнейшей работы
float posX = std::stof(result[1].str()); float posY = std::stof(result[2].str());

float dist = dist2D(LOCAL_PLAYER->getPosition().fX, LOCAL_PLAYER->getPosition().fY, posX, posY);
/* По идеии мы должны сделать проверку на расстояние между педом и самими координатами
* Если пед ближе к нашей точке то переключаем на следующие координаты из файла
* только я хз как)
*/
if (dist >= 1.5f)
continue;

}
//Направляем нашу камеру на координаты из файла
CameraSet(posX, posY);
А вот так только последняя.
C++:
//Получаем две координаты в виде чисел из регекса и записываем их в result[1] и result[2]
std::regex_match(line.c_str(), result, reg);

//Переводим наши координаты из string в float для дальнейшей работы
posX = std::stof(result[1].str()); posY = std::stof(result[2].str());
float dist = dist2D(LOCAL_PLAYER->getPosition().fX, LOCAL_PLAYER->getPosition().fY, posX, posY);

if (dist <= 1.5f) {
line[i]++;
}
}
Попробуй
C++:
std::ifstream stream("n1ght.txt");
std::string line;

while(std::getline(stream, line))
    // code
 

iliyasyeskhatov

Участник
89
6
stRemotePlayer* pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer;
SF 5.5.0 не работает функция или у него другая функция ?
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,654
2,535
понял, но можно кодом?
0.3.7-R3
C++:
uintptr_t CChatPtr = *reinterpret_cast<uintptr_t*>(0x26E8C8);

reinterpret_cast<void(__thiscall*)(uintptr_t ptr, uint32_t /*D3DCOLOR*/ color, const char* text)>(0x679F0)(CChatPtr, color, text);

Или:
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,812
понял, но можно кодом?
C++:
constexpr auto SAMP_037_R1_CHAT_OFFSET = 0x21A0E4;
constexpr auto SAMP_037_R3_CHAT_OFFSET = 0x26E8C8;
constexpr auto SAMP_037_R1_ADDCHATMSG_FUNC = 0x64010;
constexpr auto SAMP_037_R3_ADDCHATMSG_FUNC = 0x67460;

inline void AddChatMessage_R1(int nType, const char* szText, const char* szPrefix, unsigned int textColor, unsigned int prefixColor) {
    using AddChatMsgProt = void (__thiscall*)(void*, int, const char*, const char*, unsigned int, unsigned int);
    auto pChat = *reinterpret_cast<void**>(dwSAMP + SAMP_037_R1_CHAT_OFFSET);
    return reinterpret_cast<AddChatMsgProt>(SAMP_037_R1_ADDCHATMSG_FUNC)(pChat, nType, szText, szPrefix, textColor, prefixColor);
}

inline void AddChatMessage_R3(int nType, const char* szText, const char* szPrefix, unsigned int textColor, unsigned int prefixColor) {
    using AddChatMsgProt = void (__thiscall*)(void*, int, const char*, const char*, unsigned int, unsigned int);
    auto pChat = *reinterpret_cast<void**>(dwSAMP + SAMP_037_R3_CHAT_OFFSET);
    return reinterpret_cast<AddChatMsgProt>(SAMP_037_R3_ADDCHATMSG_FUNC)(pChat, nType, szText, szPrefix, textColor, prefixColor);
}
 
  • Нравится
Реакции: ROBERT PUSHER

ROBERT PUSHER

Известный
305
213
C++:
constexpr auto SAMP_037_R1_CHAT_OFFSET = 0x21A0E4;
constexpr auto SAMP_037_R3_CHAT_OFFSET = 0x26E8C8;
constexpr auto SAMP_037_R1_ADDCHATMSG_FUNC = 0x64010;
constexpr auto SAMP_037_R3_ADDCHATMSG_FUNC = 0x67460;

inline void AddChatMessage_R1(int nType, const char* szText, const char* szPrefix, unsigned int textColor, unsigned int prefixColor) {
    using AddChatMsgProt = void (__thiscall*)(void*, int, const char*, const char*, unsigned int, unsigned int);
    auto pChat = *reinterpret_cast<void**>(dwSAMP + SAMP_037_R1_CHAT_OFFSET);
    return reinterpret_cast<AddChatMsgProt>(SAMP_037_R1_ADDCHATMSG_FUNC)(pChat, nType, szText, szPrefix, textColor, prefixColor);
}

inline void AddChatMessage_R3(int nType, const char* szText, const char* szPrefix, unsigned int textColor, unsigned int prefixColor) {
    using AddChatMsgProt = void (__thiscall*)(void*, int, const char*, const char*, unsigned int, unsigned int);
    auto pChat = *reinterpret_cast<void**>(dwSAMP + SAMP_037_R3_CHAT_OFFSET);
    return reinterpret_cast<AddChatMsgProt>(SAMP_037_R3_ADDCHATMSG_FUNC)(pChat, nType, szText, szPrefix, textColor, prefixColor);
}
Требуется объявление dwSAMP, загуглил, ничего не нашёл. только начинаю свой путь в с++ )