 |
|

11.01.2019, 21:12
|
|
Постоянный
Регистрация: 02.06.2018
Сообщений: 342
С нами:
4183567
Репутация:
133
|
|
Сообщение от Soreso
Попытался сделать получение координат кости и рисовать на них, но чё то не то
C++:
Код:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include
#include
#include
#include
#define FUNC_IsVisible 0x536BC0
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
bool
CALLBACK
Present
(
CONST RECT
*
pSourceRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindowOverride
,
CONST RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
)
// если рендерер готов к рисованию
{
for
(
int
i
=
0
;
i
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
CPed
*
Ped
=
GAME
->
GetPools
(
)
->
GetPed
(
(
DWORD
*
)
actorInfo
)
;
float
posX
[
15
]
,
posY
[
15
]
;
int
counter
=
0
;
CVector vPos
[
15
]
;
for
(
int
i
=
1
;
i
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
3
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
4
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
5
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
6
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
22
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
23
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
25
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
32
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
33
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
35
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
42
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
43
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
52
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
53
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
}
}
if
(
Ped
->
IsOnScreen
(
)
)
{
for
(
int
i
=
0
;
i
getGame
(
)
->
convert3DCoordsToScreen
(
vPos
[
i
]
.
fX
,
vPos
[
i
]
.
fY
,
vPos
[
i
]
.
fZ
,
&
posX
[
i
]
,
&
posY
[
i
]
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
0
]
,
posY
[
0
]
,
posX
[
1
]
,
posY
[
1
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
0
]
,
posY
[
0
]
,
posX
[
11
]
,
posY
[
11
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
0
]
,
posY
[
0
]
,
posX
[
13
]
,
posY
[
13
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
1
]
,
posY
[
1
]
,
posX
[
2
]
,
posY
[
2
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
2
]
,
posY
[
2
]
,
posX
[
5
]
,
posY
[
5
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
2
]
,
posY
[
2
]
,
posX
[
8
]
,
posY
[
8
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
2
]
,
posY
[
2
]
,
posX
[
3
]
,
posY
[
3
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
3
]
,
posY
[
3
]
,
posX
[
4
]
,
posY
[
4
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
5
]
,
posY
[
5
]
,
posX
[
6
]
,
posY
[
6
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
6
]
,
posY
[
6
]
,
posX
[
7
]
,
posY
[
7
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
8
]
,
posY
[
8
]
,
posX
[
9
]
,
posY
[
9
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
9
]
,
posY
[
9
]
,
posX
[
10
]
,
posY
[
10
]
,
2
,
0xFFFFFFFF
)
;
}
SF
->
getRender
(
)
->
EndRender
(
)
;
// завершаем рисование
}
}
;
return
true
;
// возвращаем положительный результат
}
;
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->getSAMP()->registerChatCommand("stillobj", sasas);
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
;
}
В чём ошибка?
Код:
Код:
for (int i = 0; i getSAMP()->getPlayers()->iIsListed[i] != 1) continue;
if (SF->getSAMP()->getPlayers()->pRemotePlayer[i] == NULL) continue;
if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData == NULL) continue;
if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor == NULL) continue;
if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped == NULL) continue;
// Если игрок не существует или не в зоне стрима, то пропускаем
#pragma endregion ValidPlayer
Регистрация callback"а в mainloop для кого?
Код:
Код:
SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
|
|
|

12.01.2019, 15:37
|
|
Участник форума
Регистрация: 07.03.2015
Сообщений: 233
С нами:
5887139
Репутация:
18
|
|
Функция бесконечно вызывается mainloop'ом, флудит сообщением в чат, как беру оружие в руку. Как решить, если помимо mainloop'а нет подходящих мест для ее вызова?
C++:
Код:
void
gun_func
(
void
)
{
int
current_weapon
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
if
(
current_weapon
==
31
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1."
)
;
}
}
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
;
init
=
true
;
}
gun_func
(
)
;
}
|
|
|

13.01.2019, 15:14
|
|
Постоянный
Регистрация: 17.02.2014
Сообщений: 611
С нами:
6438231
Репутация:
133
|
|
Сообщение от Harryss
Функция бесконечно вызывается mainloop'ом, флудит сообщением в чат, как беру оружие в руку. Как решить, если помимо mainloop'а нет подходящих мест для ее вызова?
C++:
Код:
int
iTempCurrentWeapon
=
-
1
;
[
/
FONT
]
void
gun_func
(
void
)
{
int
current_weapon
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
if
(
current_weapon
==
31
)
{
if
(
iTempCurrentWeapon
!=
31
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1."
)
;
iTempCurrentWeapon
=
31
;
}
}
else
{
iTempCurrentWeapon
=
-
1
;
}
}
[
FONT
=
Tahoma
]
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
;
init
=
true
;
}
gun_func
(
)
;
}
Как то так вроде. Не проверял
|
|
|

13.01.2019, 18:36
|
|
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами:
4319022
Репутация:
113
|
|
Сообщение от Harryss
Функция бесконечно вызывается mainloop'ом, флудит сообщением в чат, как беру оружие в руку. Как решить, если помимо mainloop'а нет подходящих мест для ее вызова?
C++:
Код:
void
gun_func
(
void
)
{
int
current_weapon
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
if
(
current_weapon
==
31
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1."
)
;
}
}
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
;
init
=
true
;
}
gun_func
(
)
;
}
Попробуй вот так, не самый лудший вариант, можеш еще задержку(GetTickCount) поставить на gun_func().
C++:
Код:
void
gun_func
(
void
)
{
static
unsigned
char
current_weapon
=
-
1
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
!=
current_weapon
)
{
if
(
current_weapon
==
31
)
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1."
)
;
current_weapon
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
}
}
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
;
init
=
true
;
}
gun_func
(
)
;
}
Подскажите, для чего нужен #pragma region, и что он делает?
|
|
|

13.01.2019, 18:58
|
|
Познавший АНТИЧАТ
Регистрация: 09.08.2015
Сообщений: 1,213
С нами:
5663255
Репутация:
183
|
|
|
|
|

13.01.2019, 19:01
|
|
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами:
4319022
Репутация:
113
|
|
Сообщение от Rinat_Namazov
#pragma region никак не влияет на работу кода, это просто для удобства работы в Visual Studio?
|
|
|

13.01.2019, 19:52
|
|
Познавший АНТИЧАТ
Регистрация: 09.08.2015
Сообщений: 1,213
С нами:
5663255
Репутация:
183
|
|
Сообщение от Stiopko
#pragma region никак не влияет на работу кода, это просто для удобства работы в Visual Studio?
Да
|
|
|

14.01.2019, 14:40
|
|
Участник форума
Регистрация: 12.10.2014
Сообщений: 156
С нами:
6096955
Репутация:
78
|
|
@FYP
в собе не срабатывает деструктор, в связи с этим появляются краши при /q
знающий человек или кто нибудь ещё, скажите пожалуйста адрес на начало функции деструктора игры или сампа
то что ниже, это не то
#define SAMP_HOOKENTER_CNETGAME_DESTR 0xB2893
#define SAMP_HOOKENTER_CNETGAME_DESTR2 0xB3A32
|
|
|

15.01.2019, 00:11
|
|
Познавший АНТИЧАТ
Регистрация: 09.08.2015
Сообщений: 1,213
С нами:
5663255
Репутация:
183
|
|
Сообщение от Jenecheque
@FYP
в собе не срабатывает деструктор, в связи с этим появляются краши при /q
знающий человек или кто нибудь ещё, скажите пожалуйста адрес на начало функции деструктора игры или сампа
то что ниже, это не то
#define SAMP_HOOKENTER_CNETGAME_DESTR 0xB2893
#define SAMP_HOOKENTER_CNETGAME_DESTR2 0xB3A32
В смысле не верные? Эти адреса подходят для SAMP 0.3.7 R1, только что проверил.
|
|
|

15.01.2019, 08:26
|
|
Участник форума
Регистрация: 12.10.2014
Сообщений: 156
С нами:
6096955
Репутация:
78
|
|
поставил на них хук и вывожу там сообщение в чат, итог такой что они постоянно флудят, как будто это Present а не деструктор )
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|