Кодировку в проекте поставь многобайтовую, а не юникод.C++:pFont = SF->getRender()->CreateNewFont("Tahoma", 12, FCR_BORDER );
C++:pFont->Print( "текст", D3DCOLOR_ARGB( 255, 255, 255, 0 ), 500, 500, false );
В чём может быть проблема?
Не помогает.Попробуй другой шрифт.
Стоит многобайтовая.Кодировку в проекте поставь многобайтовую, а не юникод.
bool CALLBACK incomingRPC(stRakNetHookParams *PARAMS)
{
if(PARAMS->packetId == ScriptRPCEnumeration::RPC_ScrClientMessage)
{
DWORD sizeMSG, Color;
PARAMS->bitStream->ResetReadPointer();
PARAMS->bitStream->Read(Color);
PARAMS->bitStream->Read(sizeMSG);
char *MSG = new char[sizeMSG + 1];
PARAMS->bitStream->Read(MSG, sizeMSG);
MSG[sizeMSG] = '\0';
PARAMS->bitStream->ResetReadPointer();
std::string str(MSG);
SF->Log("%s", str);
delete[] MSG;
};
return true;
};
D3DCOLOR Color = 0xFFFFFFFF;
std::string Msg = "test";
BitStream Test;
Test.Write(Color);
Test.Write(DWORD(Msg.size()));
Test.Write(Msg.c_str());
SF->getRakNet()->emulateRecvRPC(ScriptRPCEnumeration::RPC_ScrClientMessage, &Test);
Когда строку записываешь вторым параметром вроде надо ее длину указывать.Почему в чат выводится некорректно? (Знаю, что есть уже готовая функция)C++:D3DCOLOR Color = 0xFFFFFFFF; std::string Msg = "test"; BitStream Test; Test.Write(Color); Test.Write(DWORD(Msg.size())); SF->getRakNet()->emulateRecvRPC(ScriptRPCEnumeration::RPC_ScrClientMessage, &Test);
Test.Write(Msg.c_str(), Msg.size());
Не, так вообще ничего в чат не выводитКогда строку записываешь вторым параметром вроде надо ее длину указывать.
Но эт не точноC++:Test.Write(Msg.c_str(), Msg.size());
//main.h
#pragma once
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#include "Render.h"
extern SAMPFUNCS *SF;
extern bool test;
//main.cpp
#include "main.h"
SAMPFUNCS *SF = new SAMPFUNCS();
bool test = false;
void CALLBACK mainloop()
{
static bool init = false;
if (!init)
{
if (GAME == nullptr)
return;
if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
return;
if (!SF->getSAMP()->IsInitialized())
return;
SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
init = true;
}
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
switch (dwReasonForCall)
{
case DLL_PROCESS_ATTACH:
SF->initPlugin(mainloop, hModule);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
//Render.h
#pragma once
bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
CONST RGNDATA *pDirtyRegion);
//Render.cpp
#include "main.h"
bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
CONST RGNDATA *pDirtyRegion)
{
if (SUCCEEDED(SF->getRender()->BeginRender()) && test)
{
SF->getRender()->DrawBox(500, 500, 25, 25, D3DCOLOR_ARGB(255, 0, 255, 0));
SF->getRender()->EndRender();
};
return true;
};
В этом проблема:Возникла следующая проблема. При добавлении в условия на рендер переменной типа bool, первая секунда загрузки выглядит примерно так:
Если его убрать, то всё нормально.
Как это можно исправить?C++://main.h #pragma once #include <windows.h> #include <string> #include <assert.h> #include <process.h> #include "SAMPFUNCS_API.h" #include "game_api\game_api.h" #include "Render.h" extern SAMPFUNCS *SF; extern bool test; //main.cpp #include "main.h" SAMPFUNCS *SF = new SAMPFUNCS(); bool test = false; void CALLBACK mainloop() { static bool init = false; if (!init) { if (GAME == nullptr) return; if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME) return; if (!SF->getSAMP()->IsInitialized()) return; SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present); init = true; } } BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved) { switch (dwReasonForCall) { case DLL_PROCESS_ATTACH: SF->initPlugin(mainloop, hModule); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } //Render.h #pragma once bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion); //Render.cpp #include "main.h" bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion) { if (SUCCEEDED(SF->getRender()->BeginRender()) && test) { SF->getRender()->DrawBox(500, 500, 25, 25, D3DCOLOR_ARGB(255, 0, 255, 0)); SF->getRender()->EndRender(); }; return true; };
if (SUCCEEDED(SF->getRender()->BeginRender()) && test)
Как можно изменить размер шрифта, который уже создан?
bool bGoResize = false;
int iSize = 12;
void CALLBACK mainloop()
{
static bool init = false;
if (!init)
{
if (GAME == nullptr)
return;
if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
return;
if (!SF->getSAMP()->IsInitialized())
return;
SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
pFont = SF->getRender()->CreateNewFont("Consolas", 12, FCR_BORDER);
init = true;
}
if(SF->GetGame()->IsKeyPressed(0x5))
bGoResize = true;
if(bGoResize) {
pFont = SF->getRender()->CreateNewFont("Consolas", iSize, FCR_BORDER);
bGoRezise = false;
}
}
Надо сначала удалить старый, там есть что то вроде ReleaseFontНо в этом способе я точно не уверен , правильный ли он. Может как то по другому это делается вообще. Но это работает.
C++:bool bGoResize = false; int iSize = 12; void CALLBACK mainloop() { static bool init = false; if (!init) { if (GAME == nullptr) return; if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME) return; if (!SF->getSAMP()->IsInitialized()) return; SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present); pFont = SF->getRender()->CreateNewFont("Consolas", 12, FCR_BORDER); init = true; } if(SF->GetGame()->IsKeyPressed(0x5)) bGoResize = true; if(bGoResize) { pFont = SF->getRender()->CreateNewFont("Consolas", iSize, FCR_BORDER); bGoRezise = false; } }