Как отловить сообщение "Этот игрок уже в тюрьме" ?
bool CALLBACK incomingRPC(stRakNetHookParams * params)
{
if (params->packetId == ScriptRPCEnumeration::RPC_ScrClientMessage)
{
DWORD color;
DWORD strlen;
char string[2048];
params->bitStream->ResetReadPointer();
params->bitStream->Read(color);
params->bitStream->Read(strlen);
params->bitStream->Read(string, strlen);
string[strlen] = '\0';
if (strstr(string, "Этот игрок уже в тюрьме") != 0) {
}
}
return true;
}
SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC);
Спасибо, сеньор
Как выровнять текст по середине на титлере(заголовка) imgui?
Вообще надо перед Init. Внутри контекста. иначе имгуи выдаст ошибкуВ mainloop до регистрации callback"а Present:
Код:ImGuiStyle& style = ImGui::GetStyle(); style.WindowTitleAlign = ImVec2(0.5f, 0.5f);
А как выхукать инфу с диалога?Код:bool CALLBACK incomingRPC(stRakNetHookParams * params) { if (params->packetId == ScriptRPCEnumeration::RPC_ScrClientMessage) { DWORD color; DWORD strlen; char string[2048]; params->bitStream->ResetReadPointer(); params->bitStream->Read(color); params->bitStream->Read(strlen); params->bitStream->Read(string, strlen); string[strlen] = '\0'; if (strstr(string, "Этот игрок уже в тюрьме") != 0) { } } return true; } SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC);
А как выхукать инфу с диалога?
if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowDialog) {
uint16 wDialogID;
UINT8 bDialogStyle;
UINT8 bTitleLength;
char szTitle[256];
UINT8 bButton1Len;
char szButton1[256];
UINT8 bButton2Len;
char szButton2[256];
params->bitStream->ResetReadPointer();
params->bitStream->Read(wDialogID); // Айди диалога
params->bitStream->Read(bDialogStyle); // Стиль диалога
params->bitStream->Read(bTitleLength); // Длина заголовка
params->bitStream->Read(szTitle, bTitleLength); // Заголовок
params->bitStream->Read(bButton1Len); // Длина названия кнопки 1
params->bitStream->Read(szButton1, bButton1Len); // Название кнопки 1
params->bitStream->Read(bButton2Len); // Длина названия кнопки 2
params->bitStream->Read(szButton2, bButton2Len); // Название кнопки 2
// Тут еще параметер CSTRING szInfo но я не знаю как его читать
}
ахахах
Как отправить 6 listitem в диалогу? ( Есть диалог с 6ью пунктами нужно отправить 6ой)
BitStream bs;
bs.ResetWritePointer();
bs.Write(uint16(Айди далога));
bs.Write(uint8(1)); // кнопка
bs.Write(uint16(6)); // строка в списке начинается с нуля
bs.Write(uint8(0)); // колличество символов в строке если диалог возврощает строку
SF->getRakNet()->SendRPC(RPCEnumeration::RPC_DialogResponse, &bs);
Я уже отвечал на подобный вопрос. Ищи мое сообщение с аттачем собранного проекта.BrunoBM16/samp-packet-list(https://github.com/BrunoBM16/samp-packet-list/wiki/RPC-List#dialogs)C++:if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowDialog) { uint16 wDialogID; UINT8 bDialogStyle; UINT8 bTitleLength; char szTitle[256]; UINT8 bButton1Len; char szButton1[256]; UINT8 bButton2Len; char szButton2[256]; params->bitStream->ResetReadPointer(); params->bitStream->Read(wDialogID); // Айди диалога params->bitStream->Read(bDialogStyle); // Стиль диалога params->bitStream->Read(bTitleLength); // Длина заголовка params->bitStream->Read(szTitle, bTitleLength); // Заголовок params->bitStream->Read(bButton1Len); // Длина названия кнопки 1 params->bitStream->Read(szButton1, bButton1Len); // Название кнопки 1 params->bitStream->Read(bButton2Len); // Длина названия кнопки 2 params->bitStream->Read(szButton2, bButton2Len); // Название кнопки 2 // Тут еще параметер CSTRING szInfo но я не знаю как его читать }
BrunoBM16/samp-packet-list(https://github.com/BrunoBM16/samp-packet-list/wiki/RPC-List#senddialogresponse---62)C++:BitStream bs; bs.ResetWritePointer(); bs.Write(uint16(Айди далога)); bs.Write(uint8(1)); // кнопка bs.Write(uint16(6)); // строка в списке начинается с нуля bs.Write(uint8(0)); // колличество символов в строке если диалог возврощает строку SF->getRakNet()->SendRPC(RPCEnumeration::RPC_DialogResponse, &bs);
Помогите ктото пж с им гуйой
Посмотреть вложение 24464
И как Перевести RGB или RGBA в ImVec4?
ImGui::ColorConvertU32ToFloat4();
Как сделать проверку на спавн?
if (SF->getSAMP()->getPlayers()->pLocalPlayer->iIsActive != 1) {
//Значит не заспавнен
}
Я уже отвечал на подобный вопрос. Ищи мое сообщение с аттачем собранного проекта.
Код:ImGui::ColorConvertU32ToFloat4();
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include <windows.h>
#include <assert.h>
#include <ctime>
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#include "imgui/imgui.h"
#include "imgui/imgui_impl_dx9.h"
#include "imgui/imgui_impl_win32.h"
#include <d3d9.h>
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
#include <tchar.h>
extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
#pragma comment(lib, "User32.lib")
#pragma comment(lib, "advapi32.lib")
bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)
{
if (SUCCEEDED(SF->getRender()->BeginRender()))
{
ImGui_ImplDX9_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();
if (mGuiAutoMex->menuState) {
ImGui::Begin("AutoMex by Stiopko", &mGuiAutoMex->toggleMenuState, ImVec2(305, 160), 0.8f, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoResize);
{
if (ImGui::Checkbox("State", &mGuiAutoMex->autoMex.state)) {
SF->getSAMP()->getChat()->AddChatMessage(-1, "bb");
}
}
ImGui::End();
}
ImGui::EndFrame();
ImGui::Render();
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
SF->getRender()->EndRender();
}
return true;
}
HRESULT CALLBACK Reset(D3DPRESENT_PARAMETERS* pPresentationParameters)
{
ImGui_ImplDX9_InvalidateDeviceObjects();
return true;
}
bool CALLBACK WndProcHandler(HWND hwd, UINT msg, WPARAM wParam, LPARAM lParam)
{
ImGui_ImplWin32_WndProcHandler(hwd, msg, wParam, lParam);
return true;
}
void CALLBACK endProc() {
mGuiAutoMex->autoMex.state = false;
delete mGuiAutoMex;
ImGui_ImplDX9_Shutdown();
ImGui_ImplWin32_Shutdown();
ImGui::DestroyContext();
}
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include "imgui.h"
#include "imgui_impl_dx9.h"
#include "imgui_impl_win32.h"
#include <d3d9.h>
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
#include <tchar.h>
extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
#include <windows.h>
#include <string>
#include <assert.h>
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
bool CALLBACK WndProcHandler(HWND hwd, UINT msg, WPARAM wParam, LPARAM lParam)
{
ImGui_ImplWin32_WndProcHandler(hwd, msg, wParam, lParam);
return true;
}
HRESULT CALLBACK Reset(D3DPRESENT_PARAMETERS* pPresentationParameters)
{
ImGui_ImplDX9_InvalidateDeviceObjects();
return true;
}
bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)
{
if (SUCCEEDED(SF->getRender()->BeginRender()))
{
ImGui_ImplDX9_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();
if (activew)
{
ImGui::Begin("ImGui меню", &activew, ImVec2(305, 160), 0.8f, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoResize);
{
}
ImGui::End();
}
ImGui::EndFrame();
ImGui::Render();
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
SF->getRender()->EndRender();
}
return true;
}
void CALLBACK PluginFree()
{
ImGui_ImplDX9_Shutdown();
ImGui_ImplWin32_Shutdown();
ImGui::DestroyContext();
}
А в мейнлупе условие такое будет работать?Код:if (SF->getSAMP()->getPlayers()->pLocalPlayer->iIsActive != 1) { //Значит не заспавнен }
if (SF->getSAMP()->getPlayers()->pLocalPlayer->iIsActive = 1) {
int my_ping = SF->getSAMP()->getPlayers()->iLocalPlayerPing;
int my_score = SF->getSAMP()->getPlayers()->iLocalPlayerScore;
int my_id = SF->getSAMP()->getPlayers()->sLocalPlayerID;
char *my_nick = SF->getSAMP()->getPlayers()->szLocalPlayerName;
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "Твой пинг: %i, твой уровень: %i, твой ник: %s"), my_ping, my_score, my_id, my_nick;
}
// long double __thiscall stSAMPVehicle::getDistanceToLocalPlayer(stSAMPVehicle *this)
long double(*func)(stSAMPVehicle*) = (long double(*)(stSAMPVehicle*))(SF->getSAMP()->getSAMPAddr() + 0x9A700);
long double result = func(SF->getSAMP()->getVehicles()->pSAMP_Vehicle[1]);
Потому что если я написал, что надо вот так "SF->getSAMP()->getPlayers()->pLocalPlayer->iIsActive != 1" значит так и должно быть.Так не сработало, перед спавном делает этоКод:if (SF->getSAMP()->getPlayers()->pLocalPlayer->iIsActive = 1) { int my_ping = SF->getSAMP()->getPlayers()->iLocalPlayerPing; int my_score = SF->getSAMP()->getPlayers()->iLocalPlayerScore; int my_id = SF->getSAMP()->getPlayers()->sLocalPlayerID; char *my_nick = SF->getSAMP()->getPlayers()->szLocalPlayerName; SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "Твой пинг: %i, твой уровень: %i, твой ник: %s"), my_ping, my_score, my_id, my_nick; }
Даже если так, до спавна мессадж идетПотому что если я написал, что надо вот так "SF->getSAMP()->getPlayers()->pLocalPlayer->iIsActive != 1" значит так и должно быть.