HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #7601  
Старый 24.08.2025, 01:25
writeline
Новичок
Регистрация: 16.01.2022
Сообщений: 28
С нами: 2276608

Репутация: 8
По умолчанию

Цитата:
Сообщение от daun.daunovich.01  

Да я уже давно справился с этой задачей. Но всё равно спасибо.

Всем привет. Вопрос следующего характера. Не могу понять, почему при Render`е обычного 3D текста через графическую библиотеку ImGui при ALT + ENTER (смене разрешения) всё нормально, но, стоит мне сделать ALT + ENTER, то ники мои вообще не вижу (собсна, которые рендерю через ImGui)
А если я сделаю ALT + ENTER в момент когда рендерится ник над головой, то игра вообще не развернётся и всё.

В чём трабл?
Единственное что удивляет, с HP/Armour барами такого нету.
Может дело в шрифте?

cpp:





Код:
void
__fastcall
CPlayerTags_DrawHealthBar_Hook
(
void
*
thisptr
,
void
*
edx
,
CVectorSamp
*
position
,
float
fHealth
,
float
fArmour
,
float
fDistanceToCamera
)
{
if
(
!
deviceReset
)
return
cPlayerTags_DrawHealthBar
(
thisptr
,
position
,
fHealth
,
fArmour
,
fDistanceToCamera
)
;
Main
::
RenderBars
(
position
,
fDistanceToCamera
,
fHealth
,
fArmour
)
;
}
void
__fastcall
CPlayerTags_DrawLabel_Hook
(
void
*
thisptr
,
void
*
edx
,
CVectorSamp
*
position
,
const
char
*
szText
,
unsigned
long
color
,
float
fDistanceCamera
,
bool
bDrawStatus
,
int
nStatus
)
{
/*if (true) {
        return;
    }*/
if
(
!
deviceReset
)
return
cPlayerTags_DrawLabel
(
thisptr
,
position
,
szText
,
color
,
fDistanceCamera
,
bDrawStatus
,
nStatus
)
;
Main
::
RenderText
(
szText
,
position
,
color
,
fDistanceCamera
)
;
}
Инициализация ImGui
.
Events
::
initGameEvent
+=
[
]
(
)
{
CHooks
::
InitMinHook
(
)
;
ImGui
::
CreateContext
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
(
void
)
io
;
io
.
ConfigFlags
|=
ImGuiConfigFlags_NoMouseCursorChange
;
myFont
=
io
.
Fonts
->
AddFontFromFileTTF
(
std
::
string
(
CUtils
::
GetPath
(
)
+
"font.ttf"
)
.
c_str
(
)
,
18.0f
,
NULL
,
io
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
if
(
myFont
==
nullptr
)
{
printf
(
"font not found\n"
)
;
myFont
=
io
.
Fonts
->
AddFontDefault
(
)
;
}
ImGui
::
StyleColorsDark
(
)
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
reinterpret_cast

(
0xC97C28
)
)
;
CHooks
::
GameLoop_HookInstall
(
)
;
CHooks
::
CLabel__DrawHookInstall
(
)
;
CHooks
::
CPlayerTags__DrawLabelHookInstall
(
)
;
CHooks
::
CPlayerTags__DrawHealthBarHookInstall
(
)
;
return
true
;
}
;
Events
::
d3dResetEvent
+=
[
]
(
)
{
deviceReset
=
true
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
reinterpret_cast

(
0xC97C28
)
)
;
ImGui_ImplDX9_CreateDeviceObjects
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
io
.
Fonts
->
AddFontFromFileTTF
(
std
::
string
(
CUtils
::
GetPath
(
)
+
"font.ttf"
)
.
c_str
(
)
,
18.0f
,
NULL
,
io
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
io
.
Fonts
->
Build
(
)
;
return
true
;
}
;
Events
::
d3dLostEvent
+=
[
]
(
)
{
if
(
!
deviceReset
)
return
true
;
deviceReset
=
false
;
ImGui_ImplWin32_Shutdown
(
)
;
ImGui_ImplDX9_Shutdown
(
)
;
ImGui_ImplDX9_InvalidateDeviceObjects
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
io
.
Fonts
->
Clear
(
)
;
// Очистить текущие шрифты
return
true
;
}
;
extern
"C"
__declspec
(
dllexport
)
void
Ext_RenderText
(
const
char
*
szText
,
CVectorSamp
*
position
,
unsigned
long
color
,
float
fDistanceToCamera
,
bool
isBot
=
false
)
{
if
(
!
deviceReset
)
return
;
ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
position
->
z
=
fDistanceToCamera
*
0.047499999
+
position
->
z
+
0.2
;
RwV3d pos
{
position
->
x
,
position
->
y
,
position
->
z
}
;
RwV3d out
;
float
width
,
height
;
uint8_t
r
,
g
,
b
,
a
;
CUtils
::
explode_argb
(
(
uint32_t
)
color
,
a
,
r
,
g
,
b
)
;
CVector cameraPos
=
TheCamera
.
GetPosition
(
)
;
CEntity
*
entity
=
FindPlayerPed
(
)
;
CColPoint colPoint
;
bool
isLineOfSight
=
!
CWorld
::
ProcessLineOfSight
(
cameraPos
,
pos
,
colPoint
,
entity
,
true
,
false
,
false
,
true
,
false
,
true
,
false
,
false
)
;
if
(
!
isLineOfSight
)
return
;
if
(
CSprite
::
CalcScreenCoors
(
pos
,
&
out
,
&
width
,
&
height
,
true
,
true
)
)
{
ImVec2
screenPos
(
out
.
x
,
out
.
y
+
4.0f
)
;
ImDrawList
*
drawList
=
ImGui
::
GetForegroundDrawList
(
)
;
std
::
string utf8Text
=
CUtils
::
ConvertAnsiToUtf8
(
szText
)
;
auto
RemoveColorCodes
=
[
]
(
const
std
::
string
&
text
)
->
std
::
string
{
std
::
string result
=
text
;
size_t pos
=
0
;
while
(
(
pos
=
result
.
find
(
'{'
,
pos
)
)
!=
std
::
string
::
npos
)
{
size_t endPos
=
result
.
find
(
'}'
,
pos
)
;
if
(
endPos
!=
std
::
string
::
npos
)
{
result
.
erase
(
pos
,
endPos
-
pos
+
1
)
;
}
else
{
break
;
}
}
return
result
;
}
;
std
::
string nickname
;
int
playerID
=
-
1
;
size_t openBracket
=
utf8Text
.
find
(
'('
)
;
if
(
openBracket
!=
std
::
string
::
npos
)
{
size_t closeBracket
=
utf8Text
.
find
(
')'
,
openBracket
)
;
if
(
closeBracket
!=
std
::
string
::
npos
)
{
nickname
=
utf8Text
.
substr
(
0
,
openBracket
)
;
std
::
string idString
=
utf8Text
.
substr
(
openBracket
+
1
,
closeBracket
-
openBracket
-
1
)
;
try
{
playerID
=
std
::
stoi
(
idString
)
;
}
catch
(
const
std
::
exception
&
)
{
playerID
=
-
1
;
}
if
(
!
nickname
.
empty
(
)
&&
nickname
.
back
(
)
==
' '
)
{
nickname
.
pop_back
(
)
;
}
}
}
else
{
nickname
=
utf8Text
;
playerID
=
-
1
;
}
UINT32 characterId
=
0
;
if
(
CHooks
::
playersCharacterId
.
contains
(
playerID
)
)
{
characterId
=
CHooks
::
playersCharacterId
[
playerID
]
;
}
if
(
!
characterId
&&
!
isBot
)
return
;
if
(
isBot
)
characterId
=
playerID
;
nickname
=
RemoveColorCodes
(
nickname
)
;
std
::
string characterIdPart
=
" #"
+
std
::
to_string
(
characterId
)
;
ImVec2 nicknameSize
=
ImGui
::
CalcTextSize
(
nickname
.
c_str
(
)
)
;
ImVec2 characterIdSize
=
ImGui
::
CalcTextSize
(
characterIdPart
.
c_str
(
)
)
;
ImVec2 totalSize
=
ImVec2
(
nicknameSize
.
x
+
characterIdSize
.
x
,
std
::
max
(
nicknameSize
.
y
,
characterIdSize
.
y
)
)
;
ImVec2 centeredPos
=
screenPos
;
centeredPos
.
x
-=
totalSize
.
x
/
2.0f
;
centeredPos
.
y
-=
totalSize
.
y
/
2.0f
;
auto
DrawTextOutline
=
[
&
]
(
const
ImVec2
&
pos
,
const
std
::
string
&
text
,
ImU32 textColor
,
ImU32 outlineColor
=
IM_COL32
(
0
,
0
,
0
,
255
)
)
{
float
outlineThickness
=
1.0f
;
ImVec2 offsets
[
]
=
{
ImVec2
(
-
outlineThickness
,
-
outlineThickness
)
,
// лево-верх
ImVec2
(
0
,
-
outlineThickness
)
,
// верх
ImVec2
(
outlineThickness
,
-
outlineThickness
)
,
// право-верх
ImVec2
(
-
outlineThickness
,
0
)
,
// лево
ImVec2
(
outlineThickness
,
0
)
,
// право
ImVec2
(
-
outlineThickness
,
outlineThickness
)
,
// лево-низ
ImVec2
(
0
,
outlineThickness
)
,
// низ
ImVec2
(
outlineThickness
,
outlineThickness
)
// право-низ
}
;
for
(
int
layer
=
0
;
layer

AddText
(
myFont
,
ImGui
::
GetFontSize
(
)
,
outlinePos
,
outlineColor
,
text
.
c_str
(
)
)
;
}
}
drawList
->
AddText
(
myFont
,
ImGui
::
GetFontSize
(
)
,
pos
,
textColor
,
text
.
c_str
(
)
)
;
}
;
if
(
!
nickname
.
empty
(
)
)
{
ImU32 nicknameColor
=
IM_COL32
(
r
,
g
,
b
,
255
)
;
DrawTextOutline
(
centeredPos
,
nickname
,
nicknameColor
)
;
}
ImVec2 characterIdPos
=
ImVec2
(
centeredPos
.
x
+
nicknameSize
.
x
,
centeredPos
.
y
)
;
ImU32 whiteColor
=
IM_COL32
(
255
,
255
,
255
,
255
)
;
DrawTextOutline
(
characterIdPos
,
characterIdPart
,
whiteColor
)
;
}
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
}

У меня подобное было при рендере текста через DirectX, попробуй восстанавливать состояние, я обошёл это обычным перезапуском рендера
 
Ответить с цитированием

  #7602  
Старый 24.08.2025, 01:30
swlm
Познающий
Регистрация: 03.08.2022
Сообщений: 57
С нами: 1990627

Репутация: 8
По умолчанию

Цитата:
Сообщение от writeline  

У меня подобное было при рендере текста через DirectX, попробуй восстанавливать состояние, я обошёл это обычным перезапуском рендера
Ты имеешь ввиду вот это?

cpp:





Код:
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
reinterpret_cast

(
0xC97C28
)
)
;


Восстанавливать состояние? Не особо понял, что ты имел ввиду.

Цитата:
Сообщение от daun.daunovich.01  

Ты имеешь ввиду вот это?

cpp:





Код:
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
reinterpret_cast

(
0xC97C28
)
)
;


Восстанавливать состояние? Не особо понял, что ты имел ввиду.
P.S. Всё исправил. Проблема была в моей невнимательности.

Цитата:
Сообщение от daun.daunovich.01  

Ты имеешь ввиду вот это?

cpp:





Код:
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
reinterpret_cast

(
0xC97C28
)
)
;


Восстанавливать состояние? Не особо понял, что ты имел ввиду.

P.S. Всё исправил. Проблема была в моей невнимательности.
Моим нервам *****, нихуя не исправилось, как исправить эту ебаную ***ню?

С WindowedMode всё заебись и ALT + ENTER нормально работает, но как я удалю этот ебучий WindowedMode всё летит к хуям собачим, а именно текст ломается на*** "появляются квадратики какие-то"

cpp:





Код:
Events
::
initGameEvent
+=
[
]
(
)
{
CHooks
::
InitMinHook
(
)
;
ImGui
::
CreateContext
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
(
void
)
io
;
io
.
ConfigFlags
|=
ImGuiConfigFlags_NoMouseCursorChange
;
myFont
=
io
.
Fonts
->
AddFontFromFileTTF
(
std
::
string
(
CUtils
::
GetPath
(
)
+
"font.ttf"
)
.
c_str
(
)
,
18.0f
,
NULL
,
io
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
if
(
myFont
==
nullptr
)
{
printf
(
"font not found\n"
)
;
myFont
=
io
.
Fonts
->
AddFontDefault
(
)
;
}
ImGui
::
StyleColorsDark
(
)
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
reinterpret_cast

(
0xC97C28
)
)
;
CHooks
::
GameLoop_HookInstall
(
)
;
CHooks
::
CLabel__DrawHookInstall
(
)
;
CHooks
::
CPlayerTags__DrawLabelHookInstall
(
)
;
CHooks
::
CPlayerTags__DrawHealthBarHookInstall
(
)
;
return
true
;
}
;
Events
::
d3dResetEvent
+=
[
]
(
)
{
if
(
!
deviceReset
)
return
false
;
deviceReset
=
false
;
//ImGui::CreateContext();
//ImGui_ImplWin32_Init(GetActiveWindow());
//ImGui_ImplDX9_Init(*reinterpret_cast(0xC97C28));
ImGui_ImplDX9_CreateDeviceObjects
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
io
.
Fonts
->
AddFontFromFileTTF
(
std
::
string
(
CUtils
::
GetPath
(
)
+
"font.ttf"
)
.
c_str
(
)
,
18.0f
,
NULL
,
io
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
io
.
Fonts
->
Build
(
)
;
return
true
;
}
;
Events
::
d3dLostEvent
+=
[
]
(
)
{
deviceReset
=
true
;
//ImGui_ImplWin32_Shutdown();
//ImGui_ImplDX9_Shutdown();
ImGui_ImplDX9_InvalidateDeviceObjects
(
)
;
//ImGuiIO& io = ImGui::GetIO();
//io.Fonts->Clear(); // Очистить текущие шрифты
return
true
;
}
;
Events
::
pedDtorEvent
+=
[
]
(
CPed
*
ped
)
{
int
playerId
=
CMultiplayer
::
GetPlayerID
(
ped
)
;
if
(
playerId
!=
65535
)
{
CHooks
::
playersCharacterId
.
erase
(
playerId
)
;
}
}
;
}
;
}
grade_tags
;
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD fdwReason
,
LPVOID lpReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
{
}
//gChat.initialize();
else
if
(
fdwReason
==
DLL_PROCESS_DETACH
)
{
ImGui_ImplDX9_Shutdown
(
)
;
ImGui_ImplWin32_Shutdown
(
)
;
ImGui
::
DestroyContext
(
)
;
}
return
TRUE
;
}
extern
"C"
__declspec
(
dllexport
)
void
Ext_RenderText
(
const
char
*
szText
,
CVectorSamp
*
position
,
unsigned
long
color
,
float
fDistanceToCamera
,
bool
isBot
=
false
)
{
if
(
deviceReset
)
return
;
ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
position
->
z
=
fDistanceToCamera
*
0.047499999
+
position
->
z
+
0.2
;
RwV3d pos
{
position
->
x
,
position
->
y
,
position
->
z
}
;
RwV3d out
;
float
width
,
height
;
uint8_t
r
,
g
,
b
,
a
;
CUtils
::
explode_argb
(
(
uint32_t
)
color
,
a
,
r
,
g
,
b
)
;
CVector cameraPos
=
TheCamera
.
GetPosition
(
)
;
CEntity
*
entity
=
FindPlayerPed
(
)
;
CColPoint colPoint
;
bool
isLineOfSight
=
!
CWorld
::
ProcessLineOfSight
(
cameraPos
,
pos
,
colPoint
,
entity
,
true
,
false
,
false
,
true
,
false
,
true
,
false
,
false
)
;
if
(
!
isLineOfSight
)
return
;
if
(
CSprite
::
CalcScreenCoors
(
pos
,
&
out
,
&
width
,
&
height
,
true
,
true
)
)
{
ImVec2
screenPos
(
out
.
x
,
out
.
y
+
4.0f
)
;
ImDrawList
*
drawList
=
ImGui
::
GetForegroundDrawList
(
)
;
std
::
string utf8Text
=
CUtils
::
ConvertAnsiToUtf8
(
szText
)
;
auto
RemoveColorCodes
=
[
]
(
const
std
::
string
&
text
)
->
std
::
string
{
std
::
string result
=
text
;
size_t pos
=
0
;
while
(
(
pos
=
result
.
find
(
'{'
,
pos
)
)
!=
std
::
string
::
npos
)
{
size_t endPos
=
result
.
find
(
'}'
,
pos
)
;
if
(
endPos
!=
std
::
string
::
npos
)
{
result
.
erase
(
pos
,
endPos
-
pos
+
1
)
;
}
else
{
break
;
}
}
return
result
;
}
;
std
::
string nickname
;
int
playerID
=
-
1
;
size_t openBracket
=
utf8Text
.
find
(
'('
)
;
if
(
openBracket
!=
std
::
string
::
npos
)
{
size_t closeBracket
=
utf8Text
.
find
(
')'
,
openBracket
)
;
if
(
closeBracket
!=
std
::
string
::
npos
)
{
nickname
=
utf8Text
.
substr
(
0
,
openBracket
)
;
std
::
string idString
=
utf8Text
.
substr
(
openBracket
+
1
,
closeBracket
-
openBracket
-
1
)
;
try
{
playerID
=
std
::
stoi
(
idString
)
;
}
catch
(
const
std
::
exception
&
)
{
playerID
=
-
1
;
}
if
(
!
nickname
.
empty
(
)
&&
nickname
.
back
(
)
==
' '
)
{
nickname
.
pop_back
(
)
;
}
}
}
else
{
nickname
=
utf8Text
;
playerID
=
-
1
;
}
UINT32 characterId
=
0
;
if
(
CHooks
::
playersCharacterId
.
contains
(
playerID
)
)
{
characterId
=
CHooks
::
playersCharacterId
[
playerID
]
;
}
if
(
!
characterId
&&
!
isBot
)
return
;
if
(
isBot
)
characterId
=
playerID
;
nickname
=
RemoveColorCodes
(
nickname
)
;
std
::
string characterIdPart
=
" #"
+
std
::
to_string
(
characterId
)
;
ImVec2 nicknameSize
=
ImGui
::
CalcTextSize
(
nickname
.
c_str
(
)
)
;
ImVec2 characterIdSize
=
ImGui
::
CalcTextSize
(
characterIdPart
.
c_str
(
)
)
;
ImVec2 totalSize
=
ImVec2
(
nicknameSize
.
x
+
characterIdSize
.
x
,
std
::
max
(
nicknameSize
.
y
,
characterIdSize
.
y
)
)
;
ImVec2 centeredPos
=
screenPos
;
centeredPos
.
x
-=
totalSize
.
x
/
2.0f
;
centeredPos
.
y
-=
totalSize
.
y
/
2.0f
;
auto
DrawTextOutline
=
[
&
]
(
const
ImVec2
&
pos
,
const
std
::
string
&
text
,
ImU32 textColor
,
ImU32 outlineColor
=
IM_COL32
(
0
,
0
,
0
,
255
)
)
{
float
outlineThickness
=
1.0f
;
ImVec2 offsets
[
]
=
{
ImVec2
(
-
outlineThickness
,
-
outlineThickness
)
,
// лево-верх
ImVec2
(
0
,
-
outlineThickness
)
,
// верх
ImVec2
(
outlineThickness
,
-
outlineThickness
)
,
// право-верх
ImVec2
(
-
outlineThickness
,
0
)
,
// лево
ImVec2
(
outlineThickness
,
0
)
,
// право
ImVec2
(
-
outlineThickness
,
outlineThickness
)
,
// лево-низ
ImVec2
(
0
,
outlineThickness
)
,
// низ
ImVec2
(
outlineThickness
,
outlineThickness
)
// право-низ
}
;
for
(
int
layer
=
0
;
layer

AddText
(
myFont
,
ImGui
::
GetFontSize
(
)
,
outlinePos
,
outlineColor
,
text
.
c_str
(
)
)
;
}
}
drawList
->
AddText
(
myFont
,
ImGui
::
GetFontSize
(
)
,
pos
,
textColor
,
text
.
c_str
(
)
)
;
}
;
if
(
!
nickname
.
empty
(
)
)
{
ImU32 nicknameColor
=
IM_COL32
(
r
,
g
,
b
,
255
)
;
DrawTextOutline
(
centeredPos
,
nickname
,
nicknameColor
)
;
}
ImVec2 characterIdPos
=
ImVec2
(
centeredPos
.
x
+
nicknameSize
.
x
,
centeredPos
.
y
)
;
ImU32 whiteColor
=
IM_COL32
(
255
,
255
,
255
,
255
)
;
DrawTextOutline
(
characterIdPos
,
characterIdPart
,
whiteColor
)
;
}
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
}
Всякие хуки
void
__fastcall
CPlayerTags_DrawHealthBar_Hook
(
void
*
thisptr
,
void
*
edx
,
CVectorSamp
*
position
,
float
fHealth
,
float
fArmour
,
float
fDistanceToCamera
)
{
if
(
deviceReset
)
return
cPlayerTags_DrawHealthBar
(
thisptr
,
position
,
fHealth
,
fArmour
,
fDistanceToCamera
)
;
Main
::
RenderBars
(
position
,
fDistanceToCamera
,
fHealth
,
fArmour
)
;
}
void
__fastcall
CPlayerTags_DrawLabel_Hook
(
void
*
thisptr
,
void
*
edx
,
CVectorSamp
*
position
,
const
char
*
szText
,
unsigned
long
color
,
float
fDistanceCamera
,
bool
bDrawStatus
,
int
nStatus
)
{
/*if (true) {
        return;
    }*/
if
(
deviceReset
)
return
cPlayerTags_DrawLabel
(
thisptr
,
position
,
szText
,
color
,
fDistanceCamera
,
bDrawStatus
,
nStatus
)
;
Main
::
RenderText
(
szText
,
position
,
color
,
fDistanceCamera
)
;
}
 
Ответить с цитированием

  #7603  
Старый 24.08.2025, 21:15
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

Цитата:
Сообщение от daun.daunovich.01  

ImGui_ImplDX9_CreateDeviceObjects(); ImGuiIO& io = ImGui::GetIO(); io.Fonts->AddFontFromFileTTF(std::string(CUtils::GetPath( ) + "font.ttf").c_str(), 18.0f, NULL, io.Fonts->GetGlyphRangesCyrillic()); io.Fonts->Build();
лишнее
 
Ответить с цитированием

  #7604  
Старый 24.08.2025, 22:26
swlm
Познающий
Регистрация: 03.08.2022
Сообщений: 57
С нами: 1990627

Репутация: 8
По умолчанию

Цитата:
Сообщение от вайега52  

лишнее
и вот такую ***ню вижу, когда нажимаю кнопки ALT и ENTER





 
Ответить с цитированием

  #7605  
Старый 24.08.2025, 22:40
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

Цитата:
Сообщение от daun.daunovich.01  

и вот такую ***ню вижу, когда нажимаю кнопки ALT и ENTER
При удалении создания шрифта в ресете, ничего не меняется?
 
Ответить с цитированием

  #7606  
Старый 24.08.2025, 22:44
swlm
Познающий
Регистрация: 03.08.2022
Сообщений: 57
С нами: 1990627

Репутация: 8
По умолчанию

Цитата:
Сообщение от вайега52  

При удалении создания шрифта в ресете, ничего не меняется?
У меня вообще подозрения на то, что я не правильно понял предназначения этих двух Event`ов

cpp:





Код:
Events
::
d3dResetEvent
+=
[
]
(
)
{
if
(
!
deviceReset
)
return
false
;
deviceReset
=
false
;
ImGui
::
CreateContext
(
)
;
//ImGui_ImplWin32_Init(GetActiveWindow());
//ImGui_ImplDX9_Init(*reinterpret_cast(0xC97C28));
//ImGui_ImplDX9_CreateDeviceObjects();
//ImGuiIO& io = ImGui::GetIO();
//io.Fonts->AddFontFromFileTTF(std::string(CUtils::GetPath() + "font.ttf").c_str(), 18.0f, NULL, io.Fonts->GetGlyphRangesCyrillic());
//io.Fonts->Build();
return
true
;
}
;
Events
::
d3dLostEvent
+=
[
]
(
)
{
deviceReset
=
true
;
//ImGui_ImplWin32_Shutdown();
//ImGui_ImplDX9_Shutdown();
ImGui_ImplDX9_InvalidateDeviceObjects
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
io
.
Fonts
->
Clear
(
)
;
// Очистить текущие шрифты
return
true
;
}
;


lost, когда же потерян фокус с экраном, а reset - восстановлен фокус с экраном?

Так-вот, я делаю очистку шрифта, и у меня игра сразу же при запуске.
 
Ответить с цитированием

  #7607  
Старый 24.08.2025, 23:35
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

Цитата:
Сообщение от daun.daunovich.01  

lost, когда же потерян фокус с экраном, а reset - восстановлен фокус с экраном?
В точку

Цитата:
Сообщение от daun.daunovich.01  

Так-вот, я делаю очистку шрифта, и у меня игра сразу же при запуске.
Это не нужно делать, достаточно вызвать ImGui_ImplDX9_InvalidateDeviceObjects (Восстанавливать состояния в этом случае также не требуется. Это делается автоматически)
 
Ответить с цитированием

  #7608  
Старый 24.08.2025, 23:42
swlm
Познающий
Регистрация: 03.08.2022
Сообщений: 57
С нами: 1990627

Репутация: 8
По умолчанию

Цитата:
Сообщение от вайега52  

В точку

Это не нужно делать, достаточно вызвать ImGui_ImplDX9_InvalidateDeviceObjects (Восстанавливать состояния в этом случае также не требуется. Это делается автоматически)
пиздец(

и чо делать?

ImGui_ImplDX9_InvalidateDeviceObjects(); вот у меня вызывается в lost event

очистку шрифтов я убрал, но ничего не изменяется(((
 
Ответить с цитированием

  #7609  
Старый 25.08.2025, 00:20
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

Цитата:
Сообщение от daun.daunovich.01  

пиздец(
и чо делать?
ImGui_ImplDX9_InvalidateDeviceObjects(); вот у меня вызывается в lost event
очистку шрифтов я убрал, но ничего не изменяется(((
Можешь скинуть проект в ЛС, я в свободное время гляну
 
Ответить с цитированием

  #7610  
Старый 26.08.2025, 23:22
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

Цитата:
Сообщение от undefine  

короче есть такой код

C++:





Код:
void
show_cursor
(
bool
state
)
{
using
RwD3D9GetCurrentD3DDevice_t
=
LPDIRECT3DDEVICE9
(
__cdecl
*
)
(
)
;
auto
rwCurrentD3dDevice
{
reinterpret_cast

(
0x7F9D50U
)
(
)
}
;
if
(
nullptr
==
rwCurrentD3dDevice
)
{
return
;
}
static
DWORD
        updateMouseProtection
,
rsMouseSetPosProtFirst
,
rsMouseSetPosProtSecond
;
if
(
state
)
{
::
VirtualProtect
(
reinterpret_cast

(
0x53F3C6U
)
,
5U
,
PAGE_EXECUTE_READWRITE
,
&
updateMouseProtection
)
;
::
VirtualProtect
(
reinterpret_cast

(
0x53E9F1U
)
,
5U
,
PAGE_EXECUTE_READWRITE
,
&
rsMouseSetPosProtFirst
)
;
::
VirtualProtect
(
reinterpret_cast

(
0x748A1BU
)
,
5U
,
PAGE_EXECUTE_READWRITE
,
&
rsMouseSetPosProtSecond
)
;
// NOP: CPad::UpdateMouse
*
reinterpret_cast

(
0x53F3C6U
)
=
0xE9U
;
*
reinterpret_cast

(
0x53F3C6U
+
1U
)
=
0x15BU
;
// NOP: RsMouseSetPos
memset
(
reinterpret_cast

(
0x53E9F1U
)
,
0x90
,
5U
)
;
memset
(
reinterpret_cast

(
0x748A1BU
)
,
0x90
,
5U
)
;
rwCurrentD3dDevice
->
ShowCursor
(
TRUE
)
;
}
else
{
// Original: CPad::UpdateMouse
memcpy
(
reinterpret_cast

(
0x53F3C6U
)
,
"\xE8\x95\x6C\x20\x00"
,
5U
)
;
// Original: RsMouseSetPos
memcpy
(
reinterpret_cast

(
0x53E9F1U
)
,
"\xE8\xAA\xAA\x0D\x00"
,
5U
)
;
memcpy
(
reinterpret_cast

(
0x748A1BU
)
,
"\xE8\x80\x0A\xED\xFF"
,
5U
)
;
using
CPad_ClearMouseHistory_t
=
void
(
__cdecl
*
)
(
)
;
using
CPad_UpdatePads_t
=
void
(
__cdecl
*
)
(
)
;
reinterpret_cast

(
0x541BD0U
)
(
)
;
reinterpret_cast

(
0x541DD0U
)
(
)
;
::
VirtualProtect
(
reinterpret_cast

(
0x53F3C6U
)
,
5U
,
updateMouseProtection
,
&
updateMouseProtection
)
;
::
VirtualProtect
(
reinterpret_cast

(
0x53E9F1U
)
,
5U
,
rsMouseSetPosProtFirst
,
&
rsMouseSetPosProtFirst
)
;
::
VirtualProtect
(
reinterpret_cast

(
0x748A1BU
)
,
5U
,
rsMouseSetPosProtSecond
,
&
rsMouseSetPosProtSecond
)
;
rwCurrentD3dDevice
->
ShowCursor
(
FALSE
)
;
}
}


и там есть трабл в том что при выводе курсора можно управлять педом, но а мне надо что бы при выводе курсора нельзя было типо как в сампе открываешь чат/esc что бы так же выводило
SAMP-API/src/sampapi/0.3.7-R1/CGame.cpp at 6d4db99ab41f19d1a6a7c6cd48f5878bd1e14b62 · BlastHackNet/SAMP-API

A library for interacting with functions, classes and structures of SA-MP client - BlastHackNet/SAMP-API

github.com
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.