Войти или зарегистрироваться
Выберите удобный способ — аккаунт создастся автоматически.
Или войдите по логину и паролю
 |
|

16.10.2020, 09:21
|
|
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами:
3174020
Репутация:
213
|
|
В имгуи при попытке загрузки шрифта из пути имеющего русские символы, не получается загрузить шрифт.
Загружаю так:
C++:
Код:
io
.
Fonts
->
AddFontFromFileTTF
(
font
,
15.0f
,
&
icons_config
,
icons_ranges
)
;
Кто-то знает как можно решить эту проблему?
|
|
|

16.10.2020, 10:45
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от SC6UT
В имгуи при попытке загрузки шрифта из пути имеющего русские символы, не получается загрузить шрифт.
Загружаю так:
C++:
Код:
io
.
Fonts
->
AddFontFromFileTTF
(
font
,
15.0f
,
&
icons_config
,
icons_ranges
)
;
Кто-то знает как можно решить эту проблему?
Путь в utf-8 отдаешь?
|
|
|

16.10.2020, 11:33
|
|
Флудер
Регистрация: 10.08.2017
Сообщений: 2,659
С нами:
4609424
Репутация:
183
|
|
Сообщение от SC6UT
делаю вот так, но не уверен, что это правильно
C++:
Код:
char
path
[
MAX_PATH
]
,
font
[
MAX_PATH
]
;
GetCurrentDirectory
(
MAX_PATH
,
path
)
;
sprintf
(
font
,
u8
"%s\\%s"
,
path
,
FONT_PATH
)
;
Это нелогично, ты обёртываешь под кодировку не путь, а только текст %s\\%s, поэтому ошибка, у тебя строка всё ещё не под utf8
Отдельно перекодируй
|
|
|

22.10.2020, 20:07
|
|
Познавший АНТИЧАТ
Регистрация: 21.12.2016
Сообщений: 1,046
С нами:
4943565
Репутация:
168
|
|
C++:
Код:
#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
CALLBACK
cmd_show_info_player
(
std
::
string param
)
{
if
(
param
.
empty
(
)
)
return
;
int
i
=
std
::
stoi
(
param
)
;
char
buf
[
128
]
;
stRemotePlayer
*
pPlayer
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
;
if
(
!
pPlayer
)
return
;
sprintf
(
buf
,
"Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d"
,
pPlayer
->
szPlayerName
,
pPlayer
->
iPing
,
pPlayer
->
iScore
,
pPlayer
->
iIsNPC
,
pPlayer
->
pPlayerData
->
iAFKState
==
2
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
buf
)
;
}
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
SF
->
getSAMP
(
)
->
registerChatCommand
(
"showinfo"
,
cmd_show_info_player
)
;
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Bl"
)
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}
|
|
|

22.10.2020, 20:10
|
|
Флудер
Регистрация: 10.08.2017
Сообщений: 2,659
С нами:
4609424
Репутация:
183
|
|
Сообщение от #00DD00
C++:
Код:
#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
CALLBACK
cmd_show_info_player
(
std
::
string param
)
{
if
(
param
.
empty
(
)
)
return
;
int
i
=
std
::
stoi
(
param
)
;
char
buf
[
128
]
;
stRemotePlayer
*
pPlayer
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
;
if
(
!
pPlayer
)
return
;
sprintf
(
buf
,
"Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d"
,
pPlayer
->
szPlayerName
,
pPlayer
->
iPing
,
pPlayer
->
iScore
,
pPlayer
->
iIsNPC
,
pPlayer
->
pPlayerData
->
iAFKState
==
2
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
buf
)
;
}
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
SF
->
getSAMP
(
)
->
registerChatCommand
(
"showinfo"
,
cmd_show_info_player
)
;
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Bl"
)
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}
Гайд - Интегрированная отладка asi/sf/dll плагинов в игре с помощью Visual Studio
прив Многие ли из вас знают, что с помощью Visual Studio можно отлаживать плагины прямо в игре и что делается это очень просто? Нет, блять, нихуя вы не знаете! Но я вас научу. Берём студию и проект своего плагина, идём в конфигурацию проекта на страницу "Debugging" (Отладка) и ставим такие...
www.blast.hk
настрой и посмотри
там скорее всего исключение в stoi вызывается, если больше sizeof(int) то std:  ut_of_range, если туда отправляется текст без цифр то std::invalid_argument
|
|
|

22.10.2020, 20:11
|
|
Познавший АНТИЧАТ
Регистрация: 21.12.2016
Сообщений: 1,046
С нами:
4943565
Репутация:
168
|
|
Сообщение от #Northn
Гайд - Интегрированная отладка asi/sf/dll плагинов в игре с помощью Visual Studio
прив Многие ли из вас знают, что с помощью Visual Studio можно отлаживать плагины прямо в игре и что делается это очень просто? Нет, блять, нихуя вы не знаете! Но я вас научу. Берём студию и проект своего плагина, идём в конфигурацию проекта на страницу "Debugging" (Отладка) и ставим такие...
www.blast.hk
настрой и посмотри
там скорее всего исключение в stoi вызывается, если больше sizeof(int) то std:  ut_of_range, если туда отправляется текст без цифр то std::invalid_argument
Сорри, я тупой нихуя не понял. Но, то что ты скинул(ссылку), я сделал уже.
|
|
|

22.10.2020, 20:16
|
|
Флудер
Регистрация: 10.08.2017
Сообщений: 2,659
С нами:
4609424
Репутация:
183
|
|
Сообщение от #00DD00
Сорри, я тупой нихуя не понял
C++:
Код:
void
CALLBACK
si
(
std
::
string param
)
{
if
(
param
.
empty
(
)
||
param
.
length
(
)
>
23
)
return
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Please use /si "
)
;
try
{
int
id
=
std
::
stoi
(
param
)
;
if
(
id
>
SAMP_MAX_PLAYERS
-
5
)
_Xout_of_range
(
"stoi"
)
;
stRemotePlayer
*
pData
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
;
if
(
!
pData
)
throw
std
::
exception
(
"Player is offline"
)
;
std
::
string text
=
"ID: "
+
param
+
" | NAME: "
+
pData
.
name
// fields may be wrong
+
" | SCORE: "
+
to_string
(
pData
.
score
)
+
" | PING: "
+
to_string
(
pData
.
ping
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
text
.
c_str
(
)
)
;
}
catch
(
const
std
::
out_of_range
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Not more than 1000"
)
;
}
catch
(
const
std
::
invalid_argument
)
{
// here u can try find player by nickname
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"You didn't put number"
)
;
}
catch
(
const
std
::
exception
&
arg
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
arg
.
what
(
)
)
;
}
}
|
|
|

22.10.2020, 20:31
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от #Northn
C++:
Код:
void
CALLBACK
si
(
std
::
string param
)
{
if
(
param
.
empty
(
)
||
param
.
length
(
)
>
23
)
return
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Please use /si "
)
;
try
{
int
id
=
std
::
stoi
(
param
)
;
if
(
id
>
SAMP_MAX_PLAYERS
-
5
)
_Xout_of_range
(
"stoi"
)
;
stRemotePlayer
*
pData
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
;
if
(
!
pData
)
throw
std
::
exception
(
"Player is offline"
)
;
std
::
string text
=
"ID: "
+
param
+
" | NAME: "
+
pData
.
name
// fields may be wrong
+
" | SCORE: "
+
to_string
(
pData
.
score
)
+
" | PING: "
+
to_string
(
pData
.
ping
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
text
.
c_str
(
)
)
;
}
catch
(
const
std
::
out_of_range
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Not more than 1000"
)
;
}
catch
(
const
std
::
invalid_argument
)
{
// here u can try find player by nickname
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"You didn't put number"
)
;
}
catch
(
const
std
::
exception
&
arg
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
arg
.
what
(
)
)
;
}
}
Исключения в c++ чересчур медленные. Для чтения числа можно использовать scanf, либо regex_match.
|
|
|

22.10.2020, 20:38
|
|
Флудер
Регистрация: 26.10.2013
Сообщений: 4,924
С нами:
6603505
Репутация:
183
|
|
Сообщение от KiN4StAt
Исключения в c++ чересчур медленные. Для чтения числа можно использовать scanf, либо regex_match.
Добро пожаловать в 2к20. Если исключение не брошено, то оно ничего не стоит
|
|
|

22.10.2020, 20:39
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от SR_team
Добро пожаловать в 2к20. Если исключение не брошено, то оно ничего не стоит
Тоже верно.
(Оптимизация головного мозга, извините)
|
|
|
|
 |
|
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|