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

MeG@LaDo[N] ^_^

Известный
280
324
Посмотрел пару уроков по сф и решил сделать жоски скрипт с хуком синхры педа, сделал, ошибок при компиляции никаких нету, но хук как я понял не срабатывает.

main.cpp:
#include "main.h"

SAMPFUNCS *SF = new SAMPFUNCS();

void __stdcall mainloop()
{
    static bool initialized = false;
    if (!initialized)
    {
        if (GAME && GAME->GetSystemState() == eSystemState::GS_PLAYING_GAME && SF->getSAMP()->IsInitialized())
        {
            initialized = true;

            SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_OUTCOMING_PACKET, onSendPacket);

            SF->getSAMP()->registerChatCommand("abc", [](std::string) {
                AddChat(-1, "Mamut_Rahal active");
                actived = !actived;
            });

            //SF->getSAMP()->getPlayers()->GetActorHandleFromSAMPPlayerID(id);
            SF->getSAMP()->getPlayers()->pRemotePlayer;
            AddChat(-1, "Ну типа работа с синхрой бу Ега.");
        }
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    if (dwReasonForCall == DLL_PROCESS_ATTACH)
        SF->initPlugin(mainloop, hModule);
    return TRUE;
}

main.h:
#pragma once

#include "SAMPFUNCS_API.h"
#include "game_api.h"

bool __stdcall onSendPacket(stRakNetHookParams* param);
static bool actived = false;

#define AddChat SF->getSAMP()->getChat()->AddChatMessage

extern SAMPFUNCS *SF;

raknet.cpp (сам хук):
#include "main.h"

bool __stdcall onSendPacket(stRakNetHookParams* param)
{
    if (param->packetId == ID_PLAYER_SYNC)
    {
        if (actived)
        {
            BYTE packet;
            stOnFootData data;
            memset(&data, 0, sizeof(stOnFootData));

            //float pos = SF->getSAMP()->getPlayers()->GetOnFootData(2)->fPosition[3];

            param->bitStream->ResetReadPointer();
            param->bitStream->Read(packet);
            param->bitStream->Read((PCHAR)&data, sizeof(stOnFootData));

            data.fMoveSpeed[0] = 2.5f;
            data.fMoveSpeed[1] = 2.5f;
            data.fMoveSpeed[2] = 2.5f;

            param->bitStream->ResetWritePointer();
            param->bitStream->Write((PCHAR)packet);
            param->bitStream->Write((PCHAR)&data, sizeof(stOnFootData));

            AddChat(-1, "%f %f %f", data.fMoveSpeed[0], data.fMoveSpeed[1], data.fMoveSpeed[2]);
        }
    }

    return true;
}
P.S. смог решить тем, что хук перенес из отдельного файла в main.cpp. Тогда еще 2 вопроса: как можно это сделать в разных файлах и влияет ли как-то на производительность то, что все в одном файле или разделено на несколько?
создать raknet.h и добавить прототип bool __stdcall onSendPacket(stRakNetHookParams* param);
и подключить этот файл в main.h и raknet.cpp
или вместо .cpp/h юзать .hpp
 
  • Нравится
Реакции: вайега52

вайега52

Налуашил состояние
Модератор
3,002
3,139
как сделать бег к координатам ?
C++:
void Camera::TurnToCoord(Vector3 vecObj, float smooth) {
    Vector3 playerPos = sdk::player::coordinate();
    Vector2 ViewAngle = sdk::camera::angle();

    Vector3 vec = vecObj - playerPos;
    Vector2 CameraAngle = Vector2(std::atan2(-vec.Length2d(), vec.z) * 0.1, std::atan2(-vec.y, -vec.x));
    Vector2 calcAngle = (CameraAngle - ViewAngle) / smooth; //чем больше смутч, тем плавнее

    Utils::setCameraAngle(ViewAngle + calcAngle);
}
Видел эту функцию на другом форуме
 
  • Нравится
Реакции: cort

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,759
4,894
Ку прив, использую plugin-sdk, подскажите пожалуйста, как мне проверить на то, что объект коснулся чего угодно?
У меня обрабатывается это всё чудо в цикле, мне нужно, что-бы объект, когда косается чего-то, происходило действие, в данном случае удаление объекта, использовал z координату и проверял ее с 0.f, но мне кажется, что это неправильно, и я хочу понять, как мне сделать так, что-бы проверялось касание
C++:
if ( obj->GetPosition().z <= 0.f ) {
    CWorld::Remove(obj);
// ...
}
Для проверки объекта на касание использовал, ловил краш =)
C++:
// Crash
if ( obj->TestCollision() ) {
    // some actions...
}
C++:
kthook::kthook_naked hook{ 0x54BCEE };

hook.set_cb([](const kthook::kthook_naked& hook) {
    auto for_obj = reinterpret_cast<CEntity*>(hook.get_context().esi);
    auto with_obj = reinterpret_cast<CEntity*>(hook.get_context().edi);
   
    /*
    if (for_obj == my_obj || with_obj == my_obj) {
       
    }
    */
});

hook.install();
 

Saroking

Потрачен
3
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
всем привет,не могу понять как фиксится данная проблема? хочу поставить в ImGui русский язык но u8 не работает:
1663856295797.png
 

MeG@LaDo[N] ^_^

Известный
280
324
всем привет,не могу понять как фиксится данная проблема? хочу поставить в ImGui русский язык но u8 не работает:Посмотреть вложение 169966
а у тебя в настройках проекта стоит какая кодировка? Многобайтовая или Юникод? Вроде из за этого трабл(нужно многобайтовую поставить)
 

Saroking

Потрачен
3
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а у тебя в настройках проекта стоит какая кодировка? Многобайтовая или Юникод? Вроде из за этого трабл(нужно многобайтовую поставить)
многобайтовая,я пробывал и юникод и вообще вырубать,всё равно такая ощибка.
 

Sadow

Известный
1,411
580
Почему выдаёт ошибку?
C++:
#include <iostream>
using namespace std;

int main()
{

}
 
Последнее редактирование:

ARMOR

God has forsaken us
Модератор
5,067
7,436
Почему выдаёт ошибку?
Код:
#include <iostream>
using namespace std;

int main()
{

}
int должен возвращать любое значение. Введи в конец функции return 0;
C++:
int main(){


    return 0; 
}

Мне показывает что проблема в #include<iostream>
После #include должен быть пробел, и только потом <iostream>
 
  • Нравится
Реакции: вайега52