Просмотр полной версии : SAMPFUNCS | API C++
Страницы :
1
2
3
4
[
5]
6
7
8
как поставить метку на карте не заходя в меню соответственно?
Dark_Knight
27.02.2016, 16:28
Createmarker ищи.
SF->getSAMP()->disconnect(100)
Я же писал чуть выше, что при таком способе у меня игра зависает и вылетает :)
Createmarker ищи.
как-то копался так и не нашел путь к этой функции, не подскажешь?
Dark_Knight
27.02.2016, 19:51
В GAME ищи
В GAME ищи
понял, сейчас посмотрю
Dark_Knight
27.02.2016, 22:08
ЕЕ, он и так загружен. SF->getSam()->getSampAdress
ЕЕ, он и так загружен. SF->getSam()->getSampAdress
SF->getSam()->getSampAdress / SF->getSAMP()->getSAMPAddr() не он случайно?
Dark_Knight
27.02.2016, 23:02
Оно. Смотря для каких тебе целей.
Оно. Смотря для каких тебе целей.
fps unlock xd
0x609CF9 как можно хукнуть данный адрес?
Dark_Knight
28.02.2016, 02:22
0x609CF9 как можно хукнуть данный адрес?
Обратись к Тиму лучше с этим вопросом.
Обратись к Тиму лучше с этим вопросом.
Кроме Тима, к кому еще можно?
ошибка fPos ни в какую не хочет инициализироваться. В чем беда?
C++:
char
buf
[
128
]
;
if
(
param
.
empty
(
)
)
{
sprintf
(
buf
,
"[COORDINATOR] Вы не указали квадрат поиска!"
)
;
return
;
}
char
square
=
std
::
stoi
(
param
)
;
switch
(
square
)
{
case
'A1'
:
{
sprintf
(
buf
,
"[COORDINATOR] Квадрат поиска [%d] указан на вашем GPS"
,
square
)
;
CVector
*
fPos
=
{
12.0
,
13.2
}
;
GAME
->
Get3DMarkers
(
)
->
CreateMarker
(
square
,
MARKER3D_TUBE
,
fPos
,
40.0
,
1.0
,
3
,
52
,
227
,
255
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
buf
)
;
break
;
}
Dark_Knight
28.02.2016, 13:08
CVector fPos = { 12.0, 13.2 , 0.0 };
GAME->Get3DMarkers()->CreateMarker(square, MARKER3D_TUBE, &fPos, 40.0, 1.0, 3, 52, 227, 255);
CVector fPos = { 12.0, 13.2 , 0.0 };
GAME->Get3DMarkers()->CreateMarker(square, MARKER3D_TUBE, &fPos, 40.0, 1.0, 3, 52, 227, 255);
Исправил. подкорректировал, закомпилил и как-то виснет при введении значений находящихся в свиче
опять где-то косяк ...
C++:
void
CALLBACK
cmd_get_player_square
(
std
::
string param
)
{
char
buf
[
128
]
;
char
buk
;
int
chisl
;
if
(
param
.
empty
(
)
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"[COORDINATOR]/t/t/tВы не указали квадрат поиска! (( /coord [Буква] [число] ))"
)
;
return
;
}
sscanf
(
param
.
c_str
(
)
,
"%d %d"
,
&
buk
,
&
chisl
)
;
char
square
=
std
::
stoi
(
param
)
;
switch
(
buk
)
{
case
'A'
:
{
switch
(
chisl
)
{
case
'1'
:
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"[COORDINATOR]/t/t/tКвадрат поиска [%d-%d] указан на вашем GPS"
,
buk
,
chisl
)
;
CVector fPos
=
{
12.0
,
13.2
,
0.0
}
;
GAME
->
Get3DMarkers
(
)
->
CreateMarker
(
square
,
MARKER3D_TUBE
,
&
fPos
,
40.0
,
1.0
,
3
,
52
,
227
,
255
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
buf
)
;
break
;
}
default
:
{
sprintf
(
buf
,
"[COORDINATOR]/t/t/tКвадрат поиска [%d-%d] не находится в базе"
,
buk
,
chisl
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
buf
)
;
}
}
}
default
:
{
sprintf
(
buf
,
"[COORDINATOR]/t/t/tКвадрат поиска [%d-%d] не находится в базе"
,
buk
,
chisl
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
buf
)
;
}
}
}
leonard228
28.02.2016, 14:53
Памаги, почему не робит?
void CALLBACK cmd_uron(std::string str)
{
if (str.empty()) return;
int i = std::stoi(str);
CVector *vect1;
stBulletData sync; // обьявляем
memset(&sync, 0, sizeof(stBulletData)); // очищаем
sync.byteType = 1; // обычная пуля
sync.byteWeaponID = 24; // ид дигла
for (byte a = 0; a GetPosition()->fX;
sync.fOrigin[1] = PEDSELF->GetPosition()->fY;
sync.fOrigin[2] = PEDSELF->GetPosition()->fZ;
vect1->fX = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[0];
vect1->fY = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[1];
vect1->fZ = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[2];
sync.fTarget[0] = vect1->fX;
sync.fTarget[1] = vect1->fY;
sync.fTarget[2] = vect1->fZ;
sync.sTargetID = i;
BitStream bsBulletSync;
bsBulletSync.Write((BYTE)ID_BULLET_SYNC);
bsBulletSync.Write((PCHAR)&sync, sizeof(stBulletData));
SF->getRakNet()->SendPacket(&bsBulletSync);
}
0x609CF9 как можно хукнуть данный адрес?
gta_sa.exe+209CF9 - 85 C9 - test ecx,ecx
если надо убрать эту проверку, то можно просто занопить. Сама функция, если хочешь хукать всю функцию, начинается с gta_sa.exe+209CD0
P.S. Или ты вообще не в курсе что такое хуки?
Памаги, почему не робит?
void CALLBACK cmd_uron(std::string str)
{
if (str.empty()) return;
int i = std::stoi(str);
CVector *vect1;
stBulletData sync; // обьявляем
memset(&sync, 0, sizeof(stBulletData)); // очищаем
sync.byteType = 1; // обычная пуля
sync.byteWeaponID = 24; // ид дигла
for (byte a = 0; a GetPosition()->fX;
sync.fOrigin[1] = PEDSELF->GetPosition()->fY;
sync.fOrigin[2] = PEDSELF->GetPosition()->fZ;
vect1->fX = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[0];
vect1->fY = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[1];
vect1->fZ = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[2];
sync.fTarget[0] = vect1->fX;
sync.fTarget[1] = vect1->fY;
sync.fTarget[2] = vect1->fZ;
sync.sTargetID = i;
BitStream bsBulletSync;
bsBulletSync.Write((BYTE)ID_BULLET_SYNC);
bsBulletSync.Write((PCHAR)&sync, sizeof(stBulletData));
SF->getRakNet()->SendPacket(&bsBulletSync);
}
Ну может потому что ты сам в себя пулю отправляешь?
leonard228
28.02.2016, 15:13
Ну может потому что ты сам в себя пулю отправляешь?
а как получить позицию игрока по идy?????
а как получить позицию игрока по идy?????
SF->getSAMP()->getPlayers()->pRemotePlayer[ i ]->дальше сам найдешь
leonard228
28.02.2016, 15:19
SF->getSAMP()->getPlayers()->pRemotePlayer[ i ]->дальше сам найдешь
сяп
Как всё-таки адекватно уйти на паузу? Чтобы всем вокруг писалось, что игрок на паузе?
Как всё-таки адекватно уйти на паузу? Чтобы всем вокруг писалось, что игрок на паузе?
Сделай хук плеер и инкар даты и будешь афк
Сделай хук плеер и инкар даты и будешь афк
Не очень понял, что это значит. Поясни, пожалуйста :) Я пока что делаю просто GAME->Pause(true);
Почему крашит ?
PHP:
void
CALLBACK
cmd
(
)
{
DWORD
g_dw_SAMP_Addr
=
(
DWORD
)
GetModuleHandle
(
"samp.dll"
)
;
DWORD
dll
=
g_dw_SAMP_Addr
+
0x9D9D0
;
*
(
DWORD
*
)
dll
=
0x5051FF15
;
*
(
HANDLE
*
)
0xBAB318
=
0
;
*
(
HANDLE
*
)
0x53E94C
=
0
;
}
leonard228
28.02.2016, 16:47
SF->getSAMP()->getPlayers()->pRemotePlayer[ i ]->дальше сам найдешь
так? : SF->getSAMP()->getPlayers()->pRemotePlayer->pPlayerData->fOnFootPos[0];
leonard228
28.02.2016, 19:17
Как получить ид оружия которое в руках?
leonard228
28.02.2016, 19:24
CVector fPos = { 12.0, 13.2 , 0.0 };
GAME->Get3DMarkers()->CreateMarker(square, MARKER3D_TUBE, &fPos, 40.0, 1.0, 3, 52, 227, 255);
памаги , вылетает игра после ввода /uron id
void CALLBACK cmd_uron(std::string str)
{
if (str.empty()) return;
int i = std::stoi(str);
CVector *vect1;
stBulletData sync; // обьявляем
memset(&sync, 0, sizeof(stBulletData)); // очищаем
sync.byteType = 1; // обычная пуля
sync.byteWeaponID = 24; // ид дигла
for (byte a = 0; a GetPosition()->fX; // заполняем
sync.fOrigin[1] = PEDSELF->GetPosition()->fY; // заполняем
sync.fOrigin[2] = PEDSELF->GetPosition()->fZ; // заполняем
vect1->fX = SF->getSAMP()->getPlayers()->pRemotePlayer->pPlayerData->fOnFootPos[1];
vect1->fX = SF->getSAMP()->getPlayers()->pRemotePlayer->pPlayerData->fOnFootPos[2]; // Получаем позицию игрока по ид
vect1->fX = SF->getSAMP()->getPlayers()->pRemotePlayer->pPlayerData->fOnFootPos[3]; // Получаем позицию игрока по ид
sync.fTarget[0] = vect1->fX; //Указываем позицию игрока по ид
sync.fTarget[1] = vect1->fY; //Указываем позицию игрока по ид
sync.fTarget[2] = vect1->fZ; //Указываем позицию игрока по ид
sync.sTargetID = i; // ид игрока
BitStream bsBulletSync; // объявляем объект класса BitStream, в котором хранятся пакетные данные.
bsBulletSync.Write((BYTE)ID_BULLET_SYNC); // записываем ID пакета.
bsBulletSync.Write((PCHAR)&sync, sizeof(stBulletData));
SF->getRakNet()->SendPacket(&bsBulletSync);
}
PHP:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
FILE
*
f1
;
stFontInfo
*
pFont
;
char fs
,
fp
,
gna
[
25
]
;
const
short int count_arr
=
26
;
char nick_arr
[
count_arr
]
[
30
]
=
{
"Darksoul_Paradise"
,
"Exile_Paradise"
,
"Solid_Paradise"
,
"Zeref_Paradise"
,
"Raiden_Paradise"
,
"Keef_Grasso"
,
"Peskar Ivanovich"
,
"Sergo_Paradise"
,
"Sergio_Paradise"
,
"Sergio_Lini"
,
"Neko_Paradise"
,
"Picachy_Paradise"
,
"Funtik_Paradise"
,
"Apollon_Paradise"
,
"Tadjik_Yurarak"
,
"Tadjik_Yraloh"
,
"Kalipso_Saavedra"
,
"Yura_Lini"
,
"Kalipso_Saavedra"
,
"Snake_Paradise"
,
"Neal_Paradise"
,
"Rentaro_Paradise"
,
"Gleb_Richbeech"
,
"Blood_Hunter"
,
"Elik_Paradise"
,
"Sfgx_Paradise"
}
;
int online_arr
[
count_arr
]
;
int count_online
;
bool zaa
;
bool
CALLBACK
incomingRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
-
>
packetId
==
ScriptRPCEnumeration
:
:
RPC_ScrServerJoin
)
{
short int sPlayerID
;
D3DCOLOR
D3DPlayerColor
;
byte isNPC
,
nameLen
;
char szPlayerName
[
26
]
;
params
-
>
bitStream
-
>
ResetReadPointer
(
)
;
params
-
>
bitStream
-
>
Read
(
sPlayerID
)
;
// ID игрока
params
-
>
bitStream
-
>
Read
(
D3DPlayerColor
)
;
// цвет ника
params
-
>
bitStream
-
>
Read
(
isNPC
)
;
// NPC это или нет.
params
-
>
bitStream
-
>
Read
(
nameLen
)
;
// длина ника
params
-
>
bitStream
-
>
Read
(
szPlayerName
,
nameLen
)
;
// ник
szPlayerName
[
nameLen
]
=
'\0'
;
//
params
-
>
bitStream
-
>
ResetReadPointer
(
)
;
for
(
int ind
=
0
;
ind
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
-
1
,
"{CD853F}[Paradise Family] | {00868B}В сети: %s"
,
szPlayerName
,
sPlayerID
)
;
online_arr
[
count_online
]
=
sPlayerID
;
count_online
++
;
}
}
}
return
true
;
}
bool
CALLBACK
Present
(
CONST
RECT
pSourceRect
,
CONST
RECT
pDestRect
,
HWND
hDestWindowOverride
,
CONST
RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
-
>
getRender
(
)
-
>
BeginRender
(
)
)
&&
zaa
==
true
)
{
char buff
[
256
]
;
char rend_onl
[
1024
]
;
rend_onl
[
0
]
=
'\0'
;
if
(
count_online
==
0
)
{
sprintf
(
buff
,
"{CD853F}[Paradise Family]"
)
;
sprintf
(
rend_onl
,
"{CD853F}[Paradise Family] {a52a2a}Членов семьи нету online."
)
;
//pFont->Print(rend_onl, D3DCOLOR_ARGB(255, 255, 255, 0), 10, 260, false);
}
else
{
for
(
int ind
=
0
;
ind
getSAMP
(
)
-
>
getPlayers
(
)
-
>
GetPlayerName
(
online_arr
[
ind
]
)
,
online_arr
[
ind
]
)
;
rend_onl
[
strlen
(
rend_onl
)
]
=
'\0'
;
}
}
pFont
-
>
Print
(
rend_onl
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
10
,
260
,
false
)
;
pFont
-
>
Print
(
buff
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
10
,
220
,
false
)
;
SF
-
>
getRender
(
)
-
>
EndRender
(
)
;
}
return
true
;
}
;
void
CALLBACK
cmd_show_info_player
(
std
:
:
string param
)
{
zaa
^
=
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
-
>
getRender
(
)
-
>
registerD3DCallback
(
eDirect3DDeviceMethods
:
:
D3DMETHOD_PRESENT
,
Present
)
;
SF
-
>
getRakNet
(
)
-
>
registerRakNetCallback
(
RakNetScriptHookType
:
:
RAKHOOK_TYPE_INCOMING_RPC
,
incomingRPC
)
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"fam"
,
cmd_show_info_player
)
;
pFont
=
SF
-
>
getRender
(
)
-
>
CreateNewFont
(
"Arial"
,
10
,
FCR_BORDER
)
;
f1
=
fopen
(
"file.txt"
,
"r"
)
;
init
=
true
;
for
(
int fi
=
0
;
fi
initPlugin
(
mainloop
,
hModule
)
;
break
;
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}
Почему подчеркнуты красным strstr, ign_mm, fs и fp
Как получить ид оружия которое в руках?
C++:
eWeaponSlot slot
=
PEDSELF
->
GetCurrentWeaponSlot
(
)
;
if
(
slot
!=
eWeaponSlot
::
WEAPONSLOT_TYPE_UNARMED
)
{
CWeapon
*
weapon
=
PEDSELF
->
GetWeapon
(
slot
)
;
}
Dark_Knight
28.02.2016, 21:03
vect1->fX = SF->getSAMP()->getPlayers()->pRemotePlayer->pPlayerData->fOnFootPos[1];
vect1->fX = SF->getSAMP()->getPlayers()->pRemotePlayer->pPlayerData->fOnFootPos[2]; // Получаем позицию игрока по ид
vect1->fX = SF->getSAMP()->getPlayers()->pRemotePlayer->pPlayerData->fOnFootPos[3]; // Получаем позицию игрока по ид
Ты объявил указатель, но не создал обьект.
Dark_Knight
28.02.2016, 21:09
C++:
void
CALLBACK
cmd_get_player_square
(
std
::
string param
)
{
char
buk
;
Обьяви размер
char
square
=
std
::
stoi
(
param
)
;
// Возвращает число, а не буквы. Так же, если в строке будут буквы вызовит краш.
Запихни весь код команды в трай кетч и и отлогируй че выдает
try
{
char buf[128];
//code
}
catch(std::extension &e) {//Точно название не помню. Найдешь сам.
SF->Log(e.what());
}
Dark_Knight
28.02.2016, 21:37
PHP:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
FILE
*
f1
;
stFontInfo
*
pFont
;
char fs
,
fp
,
gna
[
25
]
;
const
short int count_arr
=
26
;
char nick_arr
[
count_arr
]
[
30
]
=
{
"Darksoul_Paradise"
,
"Exile_Paradise"
,
"Solid_Paradise"
,
"Zeref_Paradise"
,
"Raiden_Paradise"
,
"Keef_Grasso"
,
"Peskar Ivanovich"
,
"Sergo_Paradise"
,
"Sergio_Paradise"
,
"Sergio_Lini"
,
"Neko_Paradise"
,
"Picachy_Paradise"
,
"Funtik_Paradise"
,
"Apollon_Paradise"
,
"Tadjik_Yurarak"
,
"Tadjik_Yraloh"
,
"Kalipso_Saavedra"
,
"Yura_Lini"
,
"Kalipso_Saavedra"
,
"Snake_Paradise"
,
"Neal_Paradise"
,
"Rentaro_Paradise"
,
"Gleb_Richbeech"
,
"Blood_Hunter"
,
"Elik_Paradise"
,
"Sfgx_Paradise"
}
;
int online_arr
[
count_arr
]
;
int count_online
;
bool zaa
;
bool
CALLBACK
incomingRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
-
>
packetId
==
ScriptRPCEnumeration
:
:
RPC_ScrServerJoin
)
{
short int sPlayerID
;
D3DCOLOR
D3DPlayerColor
;
byte isNPC
,
nameLen
;
char szPlayerName
[
26
]
;
params
-
>
bitStream
-
>
ResetReadPointer
(
)
;
params
-
>
bitStream
-
>
Read
(
sPlayerID
)
;
// ID игрока
params
-
>
bitStream
-
>
Read
(
D3DPlayerColor
)
;
// цвет ника
params
-
>
bitStream
-
>
Read
(
isNPC
)
;
// NPC это или нет.
params
-
>
bitStream
-
>
Read
(
nameLen
)
;
// длина ника
params
-
>
bitStream
-
>
Read
(
szPlayerName
,
nameLen
)
;
// ник
szPlayerName
[
nameLen
]
=
'\0'
;
//
params
-
>
bitStream
-
>
ResetReadPointer
(
)
;
for
(
int ind
=
0
;
ind
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
-
1
,
"{CD853F}[Paradise Family] | {00868B}В сети: %s"
,
szPlayerName
,
sPlayerID
)
;
online_arr
[
count_online
]
=
sPlayerID
;
count_online
++
;
}
}
}
return
true
;
}
bool
CALLBACK
Present
(
CONST
RECT
pSourceRect
,
CONST
RECT
pDestRect
,
HWND
hDestWindowOverride
,
CONST
RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
-
>
getRender
(
)
-
>
BeginRender
(
)
)
&&
zaa
==
true
)
{
char buff
[
256
]
;
char rend_onl
[
1024
]
;
rend_onl
[
0
]
=
'\0'
;
if
(
count_online
==
0
)
{
sprintf
(
buff
,
"{CD853F}[Paradise Family]"
)
;
sprintf
(
rend_onl
,
"{CD853F}[Paradise Family] {a52a2a}Членов семьи нету online."
)
;
//pFont->Print(rend_onl, D3DCOLOR_ARGB(255, 255, 255, 0), 10, 260, false);
}
else
{
for
(
int ind
=
0
;
ind
getSAMP
(
)
-
>
getPlayers
(
)
-
>
GetPlayerName
(
online_arr
[
ind
]
)
,
online_arr
[
ind
]
)
;
rend_onl
[
strlen
(
rend_onl
)
]
=
'\0'
;
}
}
pFont
-
>
Print
(
rend_onl
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
10
,
260
,
false
)
;
pFont
-
>
Print
(
buff
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
10
,
220
,
false
)
;
SF
-
>
getRender
(
)
-
>
EndRender
(
)
;
}
return
true
;
}
;
void
CALLBACK
cmd_show_info_player
(
std
:
:
string param
)
{
zaa
^
=
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
-
>
getRender
(
)
-
>
registerD3DCallback
(
eDirect3DDeviceMethods
:
:
D3DMETHOD_PRESENT
,
Present
)
;
SF
-
>
getRakNet
(
)
-
>
registerRakNetCallback
(
RakNetScriptHookType
:
:
RAKHOOK_TYPE_INCOMING_RPC
,
incomingRPC
)
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"fam"
,
cmd_show_info_player
)
;
pFont
=
SF
-
>
getRender
(
)
-
>
CreateNewFont
(
"Arial"
,
10
,
FCR_BORDER
)
;
f1
=
fopen
(
"file.txt"
,
"r"
)
;
init
=
true
;
for
(
int fi
=
0
;
fi
initPlugin
(
mainloop
,
hModule
)
;
break
;
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}
Почему подчеркнуты красным strstr, ign_mm, fs и fp
Код:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include
#include
#include
#include
#include
#include ;
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS *SF = new SAMPFUNCS();
stFontInfo *pFont;
stPlayerPool *players;
//---------------------
bool render;
//---------------------
std::vector FamNicks = { "Darksoul_Paradise", "Exile_Paradise", "Solid_Paradise",
"Zeref_Paradise", "Raiden_Paradise", "Keef_Grasso", "Peskar Ivanovich", "Sergo_Paradise", "Sergio_Paradise", "Sergio_Lini",
"Neko_Paradise", "Picachy_Paradise", "Funtik_Paradise", "Apollon_Paradise", "Tadjik_Yurarak", "Tadjik_Yraloh", "Kalipso_Saavedra", "Yura_Lini",
"Kalipso_Saavedra", "Snake_Paradise", "Neal_Paradise", "Rentaro_Paradise", "Gleb_Richbeech", "Blood_Hunter", "Elik_Paradise", "Sfgx_Paradise" };
float fHeight;
bool FindNickFamily(std::string nick){
for (auto &iter : FamNicks)
{
if (iter == nick)
return true;
}
return false;
}
bool CALLBACK Present(CONST RECT pSourceRect, CONST RECT pDestRect, HWND hDestWindowOverride,
CONST RGNDATA *pDirtyRegion)
{
if (render && SUCCEEDED(SF->getRender()->BeginRender()))
{
int count = 0;
for (int i = 0; i IsPlayerDefined(i, false)){
const char *name = players->GetPlayerName(i);
if (FindNickFamily(name)){
count++;
if (count == 0)
{
pFont->Print("{CD853F}[Paradise Family]\n{a52a2a}Членов семьи нету online.", -1, 10, 260, false);
}
else
{
pFont->Print("{CD853F}[Paradise Family]", -1, 10, 260, false);
pFont->Print(name, -1, 10, 260 + fHeight + fHeight*i, false, false);
}
}
}
}
SF->getRender()->EndRender();
}
return true;
};
void CALLBACK cmd_show_info_player(std::string param){
render != render;
}
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::D3DMET HOD_PRESENT, Present);
SF->getSAMP()->registerChatCommand("fam", cmd_show_info_player);
pFont = SF->getRender()->CreateNewFont("Arial", 10, FCR_BORDER);
players = SF->getSAMP()->getPlayers();
fHeight = pFont->DrawHeight();
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;
}
leonard228
28.02.2016, 22:15
Ты объявил указатель, но не создал обьект.
как создать обьект
Dark_Knight
28.02.2016, 22:29
new CVector()
leonard228
28.02.2016, 23:49
new CVector()
о спасибо бальшое теперь пашет)
leonard228
29.02.2016, 00:02
как проверить игрок в зоне стрима или не?
Woofing Giraffe
29.02.2016, 02:53
как проверить игрок в зоне стрима или не?
SF->getSAMP()->getPlayers()->IsPlayerDefined(id, true/false) (Писал от руки, вроде так) - true - в зоне стрима, false - игнорирование зоны стрима
leonard228
29.02.2016, 20:23
SF->getSAMP()->getPlayers()->IsPlayerDefined(id, true/false) (Писал от руки, вроде так) - true - в зоне стрима, false - игнорирование зоны стрима
а как сделать чтобы если человек вне зоне стрима то скрипт не выполнялся?
Как правильно записать?
А то компилятор ругается.
C++:
vehicle_info
*
vehinfo
=
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
GetSAMPVehicleIDFromGTAHandle
(
411
)
;
leonard228
29.02.2016, 22:57
ребят скинте кто нибудь стрелку вверх которая на кнопке 6 у вас а то у меня ее нету
Dark_Knight
29.02.2016, 22:59
Как правильно записать?
А то компилятор ругается.
Ты сначала хендл узнай.
Да эт я тут не правильно написал, я туда передаю инт с хендлом.
Ошибку выдаёт, невозможно преобразовать "int" в "vehicle_info *
Запихни весь код команды в трай кетч и и отлогируй че выдает
try
{
char buf[128];
//code
}
catch(std::extension &e) {//Точно название не помню. Найдешь сам.
SF->Log(e.what());
}
invalid stoi argument ...
Вот где он может быть тут ?
C++:
CVector fPos
=
{
12.0
,
13.2
,
0.0
}
;
GAME
->
Get3DMarkers
(
)
->
CreateMarker
(
square
,
MARKER3D_TUBE
,
&
fPos
,
40.0
,
1.0
,
3
,
52
,
227
,
255
)
;
Dark_Knight
01.03.2016, 13:29
Я же тебе это описал же
char square = std::stoi(param); // Возвращает число, а не буквы. Так же, если в строке будут буквы вызовит краш.
Ошибку выдаёт, невозможно преобразовать "int" в "vehicle_info *
Как это исправить?
C++:
void
CALLBACK
cmd_takecar
(
std
::
string param
)
{
if
(
param
.
empty
(
)
)
return
;
int
iParam
=
std
::
stoi
(
param
)
;
int
vehid
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetActorHandleFromSAMPPlayerID
(
iParam
)
;
struct
vehicle_info
*
vehinfo
=
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
GetSAMPVehicleIDFromGTAHandle
(
vehid
)
;
if
(
vehinfo
)
{
SF
->
getSAMP
(
)
->
sendEnterVehicle
(
vehid
,
0
)
;
GTAfunc_PutActorInCar
(
vehinfo
)
;
GAME
->
GetCamera
(
)
->
RestoreWithJumpCut
(
)
;
}
}
struct
убери
SF->getSAMP()->getVehicles()->GetSAMPVehicleIDFromGTAHandle(vehid);
а перед этим добавь (vehicle_info*)
вот такую вот фигню выбивает когда ввожу команду.
http://i.imgur.com/5jxJzlX.png
вот такую вот фигню выбивает когда ввожу команду.
http://i.imgur.com/5jxJzlX.png
какую команду?
какую команду?
Ну, то что выше писал.
Поправил её, как ты сказал, закомпилил, но при вводе команды, выбивает эту парашу.
C++:
void
CALLBACK
cmd_takecar
(
std
::
string param
)
{
if
(
param
.
empty
(
)
)
return
;
int
iParam
=
std
::
stoi
(
param
)
;
int
vehid
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetActorHandleFromSAMPPlayerID
(
iParam
)
;
vehicle_info
*
vehinfo
=
(
vehicle_info
*
)
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
GetSAMPVehicleIDFromGTAHandle
(
vehid
)
;
if
(
vehinfo
)
{
SF
->
getSAMP
(
)
->
sendEnterVehicle
(
vehid
,
0
)
;
GTAfunc_PutActorInCar
(
vehinfo
)
;
GAME
->
GetCamera
(
)
->
RestoreWithJumpCut
(
)
;
}
}
GTAfunc_PutActorInCar(vehinfo);
мб эта ф-ция кривая?
мб эта ф-ция кривая?
Собвская функция. В собе норм работает.
C++:
void
GTAfunc_PutActorInCar
(
vehicle_info
*
vehicle
)
{
CVehicle
*
pCurrentVehicle
=
GAME
->
GetPools
(
)
->
GetVehicle
(
(
DWORD
*
)
SF
->
getGame
(
)
->
vehicleInfoGet
(
VEHICLE_SELF
,
0
)
)
;
if
(
pCurrentVehicle
)
{
CTaskSimpleCarSetPedOut
*
pOutTask
=
GAME
->
GetTasks
(
)
->
CreateTaskSimpleCarSetPedOut
(
pCurrentVehicle
,
1
,
false
)
;
if
(
pOutTask
)
{
// May seem illogical, but it'll crash without this
pOutTask
->
SetKnockedOffBike
(
)
;
pOutTask
->
ProcessPed
(
PEDSELF
)
;
pOutTask
->
SetIsWarpingPedOutOfCar
(
)
;
pOutTask
->
Destroy
(
)
;
}
}
CVehicle
*
pVehicle
=
GAME
->
GetPools
(
)
->
GetVehicle
(
(
DWORD
*
)
vehicle
)
;
if
(
pVehicle
)
{
CTaskSimpleCarSetPedInAsDriver
*
pInTask
=
GAME
->
GetTasks
(
)
->
CreateTaskSimpleCarSetPedInAsDriver
(
pVehicle
)
;
if
(
pInTask
)
{
pInTask
->
SetIsWarpingPedIntoCar
(
)
;
pInTask
->
ProcessPed
(
PEDSELF
)
;
pInTask
->
Destroy
(
)
;
}
}
}
Собвская функция. В собе норм работает.
C++:
void
GTAfunc_PutActorInCar
(
vehicle_info
*
vehicle
)
{
CVehicle
*
pCurrentVehicle
=
GAME
->
GetPools
(
)
->
GetVehicle
(
(
DWORD
*
)
SF
->
getGame
(
)
->
vehicleInfoGet
(
VEHICLE_SELF
,
0
)
)
;
if
(
pCurrentVehicle
)
{
CTaskSimpleCarSetPedOut
*
pOutTask
=
GAME
->
GetTasks
(
)
->
CreateTaskSimpleCarSetPedOut
(
pCurrentVehicle
,
1
,
false
)
;
if
(
pOutTask
)
{
// May seem illogical, but it'll crash without this
pOutTask
->
SetKnockedOffBike
(
)
;
pOutTask
->
ProcessPed
(
PEDSELF
)
;
pOutTask
->
SetIsWarpingPedOutOfCar
(
)
;
pOutTask
->
Destroy
(
)
;
}
}
CVehicle
*
pVehicle
=
GAME
->
GetPools
(
)
->
GetVehicle
(
(
DWORD
*
)
vehicle
)
;
if
(
pVehicle
)
{
CTaskSimpleCarSetPedInAsDriver
*
pInTask
=
GAME
->
GetTasks
(
)
->
CreateTaskSimpleCarSetPedInAsDriver
(
pVehicle
)
;
if
(
pInTask
)
{
pInTask
->
SetIsWarpingPedIntoCar
(
)
;
pInTask
->
ProcessPed
(
PEDSELF
)
;
pInTask
->
Destroy
(
)
;
}
}
}
эта функция должна быть где-то в GAME, попробуй вызвать оттуда
Как сделать хук на инкардата и плеера?
Dark_Knight
01.03.2016, 20:18
Как сделать хук на инкардата и плеера?
SF->Raknet()->RegisterRPCCallBack(PACKET_IN/PACKET_OUT, callback);
Найди урок на вики. Там показано.
Почему я не могу рендерить текст шрифтами, кроме как системных, например Pricedown. Указывал название из свойств шрифта, просто название шрифта, никак не хочет рендерить моим шрифтом. С системными шрифтами все нормально, Tahoma, Arial, Calibri, Verdana и т.д. все работает.
Почему я не могу рендерить текст шрифтами, кроме как системных, например Pricedown. Указывал название из свойств шрифта, просто название шрифта, никак не хочет рендерить моим шрифтом. С системными шрифтами все нормально, Tahoma, Arial, Calibri, Verdana и т.д. все работает.
а шрифт установлен?
а шрифт установлен?
Установлен. Перезапускал ПК, все равно не рендерит.
Установлен. Перезапускал ПК, все равно не рендерит.
попробуй шрифт в системную папку шрифтов закинуть
SF->Raknet()->RegisterRPCCallBack(PACKET_IN/PACKET_OUT, callback);
Найди урок на вики. Там показано.
Я не очень понимаю, как это сделает так, чтобы я ушёл адекватно на паузу. Или, быть может, надо возвращать false? Ну, в callback.
попробуй шрифт в системную папку шрифтов закинуть
Все равно :sad_frog:
На версии SF 5.2.2 все работало отлично.
Dark_Knight
01.03.2016, 21:15
Я не очень понимаю, как это сделает так, чтобы я ушёл адекватно на паузу. Или, быть может, надо возвращать false? Ну, в callback.
Читай урок.
Все равно :sad_frog:
На версии SF 5.2.2 все работало отлично.
Есть вариант один. Если это из-за него скажу фипу, чтобы пофиксил.
Читай урок.
Есть вариант один. Если это из-за него скажу фипу, чтобы пофиксил.
А щас что делать?
Dark_Knight
01.03.2016, 21:51
А щас что делать?
Ничего. У меня такая же хрень с weapon3.ttf(шрифт киллстата.)
Woofing Giraffe
01.03.2016, 21:52
Как можно проверить прошла ли команда на сервер, или return`улась? (Серверная команда)
Dark_Knight
01.03.2016, 21:56
Отправилась ли команда на сервер и какой от неё ответ?
Woofing Giraffe
01.03.2016, 21:56
Отправилась ли команда на сервер и какой от неё ответ?
ну типо того
Читай урок.
Урок я прочитал давно. И перехватываю входящие сообщения (и исходящие при желании). Но как запретить отправку пакета - не знаю.
Woofing Giraffe
01.03.2016, 22:11
Урок я прочитал давно. И перехватываю входящие сообщения (и исходящие при желании). Но как запретить отправку пакета - не знаю.
return false;
эта функция должна быть где-то в GAME, попробуй вызвать оттуда
все пересмотрел, не могу найти.
Если кто то знает, как посадить игрока в кар, напишите, пожалуйста.
Dark_Knight
01.03.2016, 23:45
ну типо того
Распишу принцип.
Создаешь бул(дальше булка) переменную со стартовым значением фалсе.
Чекаешь, что отравилась нужная тебе команда и в булку записываешь тру(var = !var)
Потом в хук на клиент мессадже чекаешь, что пришла тебе нужная строка и если условие прошло сообщаешь себе в чат и булку пишешь фалсе. (var = !var)
все пересмотрел, не могу найти.
Если кто то знает, как посадить игрока в кар, напишите, пожалуйста.
0x6d16a0 void __thiscall CVehicle::SetDriver(class CPed *)
itsLegend
01.03.2016, 23:58
все пересмотрел, не могу найти.
Если кто то знает, как посадить игрока в кар, напишите, пожалуйста.
C++:
CTaskSimpleCarSetPedInAsDriver
*
task
=
GAME
->
GetTasks
(
)
->
CreateTaskSimpleCarSetPedInAsDriver
(
vehicle
)
;
if
(
task
)
{
task
->
ProcessPed
(
PEDSELF
)
;
task
->
SetIsWarpingPedIntoCar
(
)
;
task
->
Destroy
(
)
;
}
kemperrr
02.03.2016, 11:31
Подскажите как был реализован urChatот urShadow
Dark_Knight
02.03.2016, 11:42
И что тебя интересует хотя бы?
Спасибо, работает!
И последнее - как адекватно сделать дисконнект?
как узнать ник игрока который нанёс мне урон?
Dark_Knight
02.03.2016, 20:36
как узнать ник игрока который нанёс мне урон?
Через буллет дату узнать ид, кто нанес тебе урон, а потом по иду узнать его ник.
Woofing Giraffe
02.03.2016, 22:03
Как в API будет выглядеть опкод 0555: remove_weapon 3@ from_actor $PLAYER_ACTOR ?
kemperrr
02.03.2016, 22:05
И что тебя интересует хотя бы?
Как передавались данные между игроками? Мне не нужно как там через дополнительное GUI, через обычный чат с отправкой через команду /fb *текст* ну и отправится сообщение в обычный чат, без каких либо привилегий и плюшек
itsLegend
02.03.2016, 22:08
Как в API будет выглядеть опкод 0555: remove_weapon 3@ from_actor $PLAYER_ACTOR ?
C++:
PEDSELF
->
ClearWeapon
(
eWeaponType
::
)
;
Dark_Knight
02.03.2016, 22:08
Клиент Вася => Сервер => Все клиенты
Woofing Giraffe
02.03.2016, 22:12
C++:
PEDSELF
->
ClearWeapon
(
eWeaponType
::
)
;
А не подскажешь как достать тип текущего слота?)
itsLegend
02.03.2016, 22:12
Как передавались данные между игроками? Мне не нужно как там через дополнительное GUI, через обычный чат с отправкой через команду /fb *текст* ну и отправится сообщение в обычный чат, без каких либо привилегий и плюшек
Единственное адекватное решение по моему мнению - это использовать сокет сервер.
А не подскажешь как достать тип текущего слота?)
В том же PEDSELF ищи.
Woofing Giraffe
02.03.2016, 22:28
Единственное адекватное решение по моему мнению - это использовать сокет сервер.
В том же PEDSELF ищи.
Бля, я там только текущий слот нашел, а именно модели там нет
itsLegend
02.03.2016, 22:31
Бля, я там только текущий слот нашел, а именно модели там нет
C++:
CWeapon
*
wpn
=
PEDSELF
->
GetWeapon
(
PEDSELF
->
GetCurrentWeaponSlot
(
)
)
;
eWeaponType wtype
=
wpn
->
GetType
(
)
;
ну ответьте
https://www.blast.hk/threads/10970/#post-103571
C++:
CWeapon
*
wpn
=
PEDSELF
->
GetWeapon
(
PEDSELF
->
GetCurrentWeaponSlot
(
)
)
;
eWeaponType wtype
=
wpn
->
GetType
(
)
;
https://www.blast.hk/threads/10970/#post-103571
Не поверишь, она баганная.
Dark_Knight
02.03.2016, 22:55
Не поверишь, она баганная.
С соба вытащи.
itsLegend
02.03.2016, 23:05
Не поверишь, она баганная.
C++:
void
mapMenuTeleport
(
void
)
{
if
(
(
*
(
int
*
)
0xBA6774
!=
0
)
)
{
// ty to Racer_S for this
float
mapPos
[
3
]
;
for
(
int
i
=
0
;
i
GetWorld
(
)
->
FindGroundZForPosition
(
pos
[
0
]
,
pos
[
1
]
)
+
2.0f
;
PEDSELF
->
Teleport
(
mapPos
[
0
]
,
mapPos
[
1
]
,
mapPos
[
2
]
)
;
}
}
}
}
Woofing Giraffe
02.03.2016, 23:25
Знаю, наверное заебал уже своими вопросами, но как выдать локальному игроку оружие имея его ID (оружия) и кол-во патрон?
itsLegend
02.03.2016, 23:37
Тааам же.
GiveWeapon
Woofing Giraffe
02.03.2016, 23:38
Тааам же.
GiveWeapon
Ну так мне там как то надо получить модель гана через его ид, а такой функи я не нашел
itsLegend
02.03.2016, 23:40
Что за ид?
Woofing Giraffe
02.03.2016, 23:41
https://sampwiki.blast.hk/wiki/Weapons_RU
Допустим дробовик - 25
itsLegend
02.03.2016, 23:43
CLEO:
int id =
25
;
eWeaponType type = (eWeaponType)id;
kemperrr
03.03.2016, 06:28
Единственное адекватное решение по моему мнению - это использовать сокет сервер.
А получится через запрос на php файл записать в .txt, а потом прочитать каждому клиенту? Мне же не нужны привелегиии просто текст
itsLegend
03.03.2016, 09:24
Очень много запросов для php.
Тогда ставь интервал для чтения и записи.
Как определить, находится ли человек в поезде?
Как сделать дисконнект без краша ГТА?
Dark_Knight
03.03.2016, 13:15
https://yadi.sk/i/HB05H5RApsbG8 (https://www.blast.hk/redirect/aHR0cHM6Ly95YWRpLnNrL2kvSEIwNUg1UkFwc2JHOA)
vehicle_info *car = SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_TYPE_CAR);
byte carClass = *(byte *)(uint32_t)car + 0x590);
if (carClass == 9)
{
SF->Log("It's a train");
}
Там как-то стоит скобка неправильно. Как ни расставлял - не работает.
Сделал так:
Код:
bool carTypeIsTrain()
{
vehicle_info *car = SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_TYPE_CAR);
if (!car) return false;
byte carClass = *((byte *)(uint32_t)car + 0x590);
if (car->vehicle_type == VEHICLE_TYPE_TRAIN) return true;
return false;
}
Я же тебе это описал же
char square = std::stoi(param); // Возвращает число, а не буквы. Так же, если в строке будут буквы вызовит краш.
объявил переменной buk размер (char buk[1];)
получение данных теперь через sscanf(param.c_str(), "%d %d", &buk, &chisl);
Вопрос теперь в одном, строка:
GAME->Get3DMarkers()->CreateMarker
первое значение у этой функции какое должно быть? Может быть просто "square" ?
Dark_Knight
04.03.2016, 15:52
Индефикатор идет первым. И у тебя в скане уже ошибка. Ты число в чар записываешь? Нахрена?
Gabriel__
04.03.2016, 17:10
Почему не читает RPC ???
Код:
if (params->packetId == ScriptRPCEnumeration::RPC_ScrSetPlayerHealth)
{
byte packet;
float data = 0.0;
params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало
params->bitStream->Read( packet ); // читаем ID пакета
params->bitStream->Read((PCHAR)&data, 4); // читаем отправляемые данные
SF->getSAMP()->getChat()->AddChatMessage(0xFFFF00, "%f", data);
};
return true; // успешно завершаем отправку пакета
itsLegend
04.03.2016, 17:21
Потому что ты его читаешь как пакет.
Gabriel__
04.03.2016, 17:27
Потому что ты его читаешь как пакет.
А как читать как RPC ?
P.S Тебе ты лучше сразу говорить как нужно делать. А то форум засоряем (
itsLegend
04.03.2016, 17:32
P.S. Лучше сразу читать весь туториал, а не форум засорять. Ишь ты.
Gabriel__
04.03.2016, 17:35
P.S. Лучше сразу читать весь туториал, а не форум засорять. Ишь ты.
В туториале написано как работать с пакетами а не с RPC.
Индефикатор идет первым. И у тебя в скане уже ошибка. Ты число в чар записываешь? Нахрена?
нет, буква соответственно чар, а цифра имеет интовский тип
закомпилил этот код:
C++:
void
CALLBACK
cmd_get_player_square
(
std
::
string param
)
{
char
buf
[
128
]
;
char
buk
[
1
]
;
int
chisl
;
char
square
=
'A'
;
if
(
param
.
empty
(
)
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"[COORDINATOR]\t\tВы не указали квадрат поиска! (( /coord [Буква] [число] ))"
)
;
return
;
}
if
(
buk
==
"А"
)
bukn
=
1
;
if
(
buk
==
"Б"
)
bukn
=
2
;
if
(
buk
==
"В"
)
bukn
=
3
;
if
(
buk
==
"Г"
)
bukn
=
4
;
if
(
buk
==
"Д"
)
bukn
=
5
;
if
(
buk
==
"Ж"
)
bukn
=
6
;
if
(
buk
==
"З"
)
bukn
=
7
;
if
(
buk
==
"И"
)
bukn
=
8
;
if
(
buk
==
"К"
)
bukn
=
9
;
if
(
buk
==
"Л"
)
bukn
=
10
;
if
(
buk
==
"М"
)
bukn
=
11
;
if
(
buk
==
"Н"
)
bukn
=
12
;
if
(
buk
==
"О"
)
bukn
=
13
;
if
(
buk
==
"П"
)
bukn
=
14
;
if
(
buk
==
"Р"
)
bukn
=
15
;
if
(
buk
==
"С"
)
bukn
=
16
;
if
(
buk
==
"Т"
)
bukn
=
17
;
if
(
buk
==
"У"
)
bukn
=
18
;
if
(
buk
==
"Ф"
)
bukn
=
19
;
if
(
buk
==
"Х"
)
bukn
=
20
;
if
(
buk
==
"Ц"
)
bukn
=
21
;
if
(
buk
==
"Ч"
)
bukn
=
22
;
if
(
buk
==
"Ш"
)
bukn
=
23
;
if
(
buk
==
"Я"
)
bukn
=
24
;
switch
(
bukn
)
{
case
1
:
{
switch
(
chisl
)
{
case
1
:
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"[COORDINATOR]\t\tКвадрат поиска [%d-%d] указан на вашем GPS"
,
buk
,
chisl
)
;
CVector fPos
=
{
12.0
,
13.2
,
0.0
}
;
GAME
->
Get3DMarkers
(
)
->
CreateMarker
(
square
,
MARKER3D_TUBE
,
&
fPos
,
40.0
,
1.0
,
3
,
52
,
227
,
255
)
;
break
;
}
case
2
:
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"[COORDINATOR]\t\tКвадрат поиска [%d-%d] указан на вашем GPS"
,
buk
,
chisl
)
;
CVector fPos
=
{
302.0
,
313.2
,
0.0
}
;
GAME
->
Get3DMarkers
(
)
->
CreateMarker
(
square
,
MARKER3D_TUBE
,
&
fPos
,
40.0
,
1.0
,
3
,
52
,
227
,
255
)
;
break
;
}
case
3
:
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"[COORDINATOR]\t\tКвадрат поиска [%d-%d] указан на вашем GPS"
,
buk
,
chisl
)
;
CVector fPos
=
{
612.0
,
613.2
,
0.0
}
;
GAME
->
Get3DMarkers
(
)
->
CreateMarker
(
square
,
MARKER3D_TUBE
,
&
fPos
,
40.0
,
1.0
,
3
,
52
,
227
,
255
)
;
break
;
}
case
4
:
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"[COORDINATOR]\t\tКвадрат поиска [%d-%d] указан на вашем GPS"
,
buk
,
chisl
)
;
CVector fPos
=
{
912.0
,
913.2
,
0.0
}
;
GAME
->
Get3DMarkers
(
)
->
CreateMarker
(
square
,
MARKER3D_TUBE
,
&
fPos
,
40.0
,
1.0
,
3
,
52
,
227
,
255
)
;
break
;
}
default
:
{
sprintf
(
buf
,
"[COORDINATOR]\t\tКвадрат поиска [%s-%d] не находится в базе"
,
buk
,
chisl
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
buf
)
;
}
}
}
default
:
{
sprintf
(
buf
,
"[COORDINATOR]\t\tКвадрат поиска [%s-%d] не находится в базе"
,
buk
,
chisl
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
buf
)
;
}
}
}
теперь вообще не понимает команду /coord A 1
хотя распознает 1 А и выдает дефолтовое значение свича
kemperrr
04.03.2016, 19:57
Очень много запросов для php.
Тогда ставь интервал для чтения и записи.
А можно сделать типо сессии, дапустим я подключился первый и хост будет висеть на мне? А захотел передал хост другому
Gabriel__
04.03.2016, 20:12
Как читать параметры из RPC ? Типо params->bitStream->Read() но RPC.
itsLegend
04.03.2016, 20:17
А можно сделать типо сессии, дапустим я подключился первый и хост будет висеть на мне? А захотел передал хост другому
Теоретически - можно. Но на это может повлиять фаервол, провайдер, которые банально ограничили доступ к портам.
При смене "хостера" будет теряться соединение, скорее всего. Можно перечислить ещё несколько причин, почему этот способ не так удобен.
Dark_Knight
04.03.2016, 20:49
теперь вообще не понимает команду /coord A 1
хотя распознает 1 А и выдает дефолтовое значение свича
Свич работает с числами только. Лучше сканф заменить на регулярки и рабоать с std::string вместо чара. Практичнее в разы.
Gabriel__
04.03.2016, 21:06
Как получить кол-во хп у игрока ? т.е у меня.
Как получить кол-во хп у игрока ? т.е у меня.
C++:
Player
->
pPlayerData
->
fActorHealth
Gabriel__
04.03.2016, 23:16
Почему не ловит ид игрока который стреляет. Высвечиваются одни и те же числа 256 и 0
Код:
stBulletData data;
memset(&data, 0, sizeof(stBulletData)); // обнуляем
byte packet;
params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало
params->bitStream->Read(packet); // читаем ID пакета
params->bitStream->Read((PCHAR)&data, sizeof(stBulletData)); // читаем отправляемые данные
SF->getSAMP()->getChat()->AddChatMessage(0xDFFFFF, "sTargetID: %d", data.sTargetID);
itsLegend
04.03.2016, 23:18
Вторым байтом идет ид игрока, который отправил пакет
Свич работает с числами только. Лучше сканф заменить на регулярки и рабоать с std::string вместо чара. Практичнее в разы.
Туплю как всегда,что за регулярки?
Я все время со сканфом делал все ...
Dark_Knight
04.03.2016, 23:58
Туплю как всегда,что за регулярки?
Я все время со сканфом делал все ...
Регулярные выражения. Намного лучше сканф.
Регулярные выражения. Намного лучше сканф.
Можешь пример получения данных написать?
Woofing Giraffe
05.03.2016, 05:04
Как читать параметры из RPC ? Типо params->bitStream->Read() но RPC.
Тоже самое, но не читаешь ID пакета. У пакета в начале стоит его ID, а у RPC этого нет
itsLegend
05.03.2016, 12:06
Обойтись без цикла.
Обойтись без цикла.
Если не трудно то можешь показать пример регулярного выражения для получения данных с ввода?
itsLegend
05.03.2016, 12:52
Их нужно составлять по примеру ввода.
Их нужно составлять по примеру ввода.
/coord [Буква] [цифра]
C++:
void
CALLBACK
cmd_get_player_square
(
std
::
string param
)
{
char
buf
[
128
]
;
std
::
string buk
;
int
chisl
;
int
bukn
;
int
square
;
FLOAT FxPos
;
FLOAT FyPos
;
if
(
param
.
empty
(
)
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"[COORDINATOR]\t\tВы не указали квадрат поиска! (( /coord [Буква] [число] ))"
)
;
return
;
}
int
i
=
std
::
stoi
(
param
)
;
//sscanf(param.c_str(), "%d %d", &buk, &chisl);
if
(
buk
==
"А"
)
bukn
=
1
;
if
(
buk
==
"Б"
)
bukn
=
2
;
if
(
buk
==
"В"
)
bukn
=
3
;
if
(
buk
==
"Г"
)
bukn
=
4
;
if
(
buk
==
"Д"
)
bukn
=
5
;
if
(
buk
==
"Ж"
)
bukn
=
6
;
if
(
buk
==
"З"
)
bukn
=
7
;
if
(
buk
==
"И"
)
bukn
=
8
;
if
(
buk
==
"К"
)
bukn
=
9
;
if
(
buk
==
"Л"
)
bukn
=
10
;
if
(
buk
==
"М"
)
bukn
=
11
;
if
(
buk
==
"Н"
)
bukn
=
12
;
if
(
buk
==
"О"
)
bukn
=
13
;
if
(
buk
==
"П"
)
bukn
=
14
;
if
(
buk
==
"Р"
)
bukn
=
15
;
if
(
buk
==
"С"
)
bukn
=
16
;
if
(
buk
==
"Т"
)
bukn
=
17
;
if
(
buk
==
"У"
)
bukn
=
18
;
if
(
buk
==
"Ф"
)
bukn
=
19
;
if
(
buk
==
"Х"
)
bukn
=
20
;
if
(
buk
==
"Ц"
)
bukn
=
21
;
if
(
buk
==
"Ч"
)
bukn
=
22
;
if
(
buk
==
"Ш"
)
bukn
=
23
;
if
(
buk
==
"Я"
)
bukn
=
24
;
switch
(
bukn
)
{
case
1
:
FyPos
=
200.0
;
break
;
case
2
:
FyPos
=
400.0
;
break
;
case
3
:
FyPos
=
600.0
;
break
;
case
4
:
FyPos
=
800.0
;
break
;
case
5
:
FyPos
=
1000.0
;
break
;
case
6
:
FyPos
=
1200.0
;
break
;
case
7
:
FyPos
=
1400.0
;
break
;
case
8
:
FyPos
=
1600.0
;
break
;
case
9
:
FyPos
=
1800.0
;
break
;
case
10
:
FyPos
=
2000.0
;
break
;
case
11
:
FyPos
=
2200.0
;
break
;
case
12
:
FyPos
=
2400.0
;
break
;
case
13
:
FyPos
=
2600.0
;
break
;
case
14
:
FyPos
=
2800.0
;
break
;
case
15
:
FyPos
=
3000.0
;
break
;
case
16
:
FyPos
=
3200.0
;
break
;
case
17
:
FyPos
=
3400.0
;
break
;
case
18
:
FyPos
=
3600.0
;
break
;
case
19
:
FyPos
=
3800.0
;
break
;
case
20
:
FyPos
=
4000.0
;
break
;
case
21
:
FyPos
=
4200.0
;
break
;
case
22
:
FyPos
=
4400.0
;
break
;
case
23
:
FyPos
=
4600.0
;
break
;
case
24
:
FyPos
=
4800.0
;
break
;
default
:
FyPos
=
0.0
;
}
switch
(
chisl
)
{
case
1
:
FxPos
=
200.0
;
break
;
case
2
:
FxPos
=
400.0
;
break
;
case
3
:
FxPos
=
600.0
;
break
;
case
4
:
FxPos
=
800.0
;
break
;
case
5
:
FxPos
=
1000.0
;
break
;
case
6
:
FxPos
=
1200.0
;
break
;
case
7
:
FxPos
=
1400.0
;
break
;
case
8
:
FxPos
=
1600.0
;
break
;
case
9
:
FxPos
=
1800.0
;
break
;
case
10
:
FxPos
=
2000.0
;
break
;
case
11
:
FxPos
=
2200.0
;
break
;
case
12
:
FxPos
=
2400.0
;
break
;
case
13
:
FxPos
=
2600.0
;
break
;
case
14
:
FxPos
=
2800.0
;
break
;
case
15
:
FxPos
=
3000.0
;
break
;
case
16
:
FxPos
=
3200.0
;
break
;
case
17
:
FxPos
=
3400.0
;
break
;
case
18
:
FxPos
=
3600.0
;
break
;
case
19
:
FxPos
=
3800.0
;
break
;
case
20
:
FxPos
=
4000.0
;
break
;
case
21
:
FxPos
=
4200.0
;
break
;
case
22
:
FxPos
=
4400.0
;
break
;
case
23
:
FxPos
=
4600.0
;
break
;
case
24
:
FxPos
=
4800.0
;
break
;
default
:
FxPos
=
0.0
;
}
if
(
FxPos
!=
0.0
||
FyPos
!=
0.0
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"[COORDINATOR]\t\tКвадрат поиска [%d-%d] указан на вашем GPS"
,
buk
,
chisl
)
;
CVector fPos
=
{
FxPos
,
FyPos
,
0.0
}
;
GAME
->
Get3DMarkers
(
)
->
CreateMarker
(
square
,
MARKER3D_TUBE
,
&
fPos
,
40.0
,
1.0
,
3
,
52
,
227
,
255
)
;
}
else
{
sprintf
(
buf
,
"[COORDINATOR]\t\tКвадрат поиска [%s-%d] не находится в базе"
,
buk
,
chisl
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
buf
)
;
}
}
Dark_Knight
05.03.2016, 14:21
Можешь пример получения данных написать?
std::smatch res;
if(std::regex_match(param, res, std::regex(R"(^\w \d$)"))
как называется рпц которые показывает от кого пришел дамаг и по кому я нанес
Dark_Knight
05.03.2016, 14:53
как называется рпц которые показывает от кого пришел дамаг и по кому я нанес
GiveTakeDamage. Он входящий и исходящий. Не на всех серверах он юзается
GiveTakeDamage. Он входящий и исходящий. Не на всех серверах он юзается
как это не на всех?
Как удалить перезарядку у shotgun'a
Gabriel__
05.03.2016, 16:20
Обойтись без цикла.
Как обойтись ?? Как ты себе это представляешь ???
std::smatch res;
if(std::regex_match(param, res, std::regex(R"(^\w \d$)"))
Ошибка: std не содержит члена smatch, regex_mach и regex
Dark_Knight
05.03.2016, 17:23
#include и почитай уроки по регуляркам. http://regexr.com (https://www.blast.hk/redirect/aHR0cDovL3JlZ2V4ci5jb20) довольно удобный сайт для тестирования регулярок. Так же советую по началу регулярки брать в try catch. По началу будешь часто ловить ошибки.
Gabriel__
05.03.2016, 18:13
Ребят сделал функцию которая делает задержку. И из-за нее игра жутко виснет.
Код:
[CODE]
void wait(unsigned int ms)
{
unsigned int time = GetTickCount();
time += ms;
while (GetTickCount()
Как удалить перезарядку у shotgun'a
я так понимаю никто не знает?
Dark_Knight
05.03.2016, 20:29
[QUOTE="Gabriel__"]
Ребят сделал функцию которая делает задержку. И из-за нее игра жутко виснет.
Код:
void wait(unsigned int ms)
{
unsigned int time = GetTickCount();
time += ms;
while (GetTickCount()
Код:
[CODE]
static DWORD timer = 0;
void mainloop(){
if{!init}{
}
if(GetTickCount - timer > 5000){
SF->log("Таймер работает раз в 5 секунд");
timer = GetTickCount();
}
}
Gabriel__
05.03.2016, 21:06
А как сделать чтобы везде можно было использовать а не в mainloop.
Dark_Knight
05.03.2016, 21:07
А как сделать чтобы везде можно было использовать а не в mainloop.
Я тебе дал пример. Как в коллбеках юзать таймер. Дальше уже разбирайся сам. В СФ плагинах нельзя юзать таймеры через вайл в основном потоке.
Я вроде как получил регулярку но, мне нужно получить 2 значения, это можно получить из одной строки?
if (std::regex_match(param, res, std::regex("/([A - Z] [1 - 24])/ig")))
соответственно A-Z одна переменная, 1-24 вторая. Или все же делать через 2 регулярки?
да и для сравнения через strcpy нужны чар значения, как их сравнивать теперь?
Dark_Knight
06.03.2016, 13:15
Я вроде как получил регулярку но, мне нужно получить 2 значения, это можно получить из одной строки?
if (std::regex_match(param, res, std::regex("/([A - Z] [1 - 24])/ig")))
соответственно A-Z одна переменная, 1-24 вторая. Или все же делать через 2 регулярки?
да и для сравнения через strcpy нужны чар значения, как их сравнивать теперь?
Зачем тебе чар, когда у тебя есть std::string? Регулярку ты не правильно записал. В моей все тоже самое. Индификатор /i нужен для регистронезависимости, /g для мультилайна(несколько строк) тебе оно не надо. std::smacth - это вектор полученных результатов.
if(std::regex_match(param, res, std::regex(R"(^\w \d$)")){
std::string bukva = res[1].str();
byte chiclo = std::stoi(res[1].str()); // ot 0 do 255;
if(bukva == "a" || bukva == "A"){
SF->Log("true bukva");
}
if(chiclo == 5 || chiclo == 25){
SF->Log("true chiclo");
}
}
else{
SF->Log("Формат [Буква] [Число]");
}
Учись работать с std::string. Они функциональнее.
Зачем тебе чар, когда у тебя есть std::string? Регулярку ты не правильно записал. В моей все тоже самое. Индификатор /i нужен для регистронезависимости, /g для мультилайна(несколько строк) тебе оно не надо. std::smacth - это вектор полученных результатов.
if(std::regex_match(param, res, std::regex(R"(^\w \d$)")){
std::string bukva = res[1].str();
byte chiclo = std::stoi(res[1].str()); // ot 0 do 255;
if(bukva == "a" || bukva == "A"){
SF->Log("true bukva");
}
if(chiclo == 5 || chiclo == 25){
SF->Log("true chiclo");
}
}
else{
SF->Log("Формат [Буква] [Число]");
}
Учись работать с std::string. Они функциональнее.
Спасибо, сейчас буду пробовать
Небольшая проблема с рендером текстуры.
Вообщем, есть текстура 128x128 px и её нужно рендерить на экране так, чтобы она на всех разрешениях экрана выглядела нормально (использовал игровые координаты с конвертацией в экранные). У меня разрешение 1680x1050 (рендерится размером 32x32 пикселей) и текстура выглядит хорошо, но если сменить разрешение на меньшее, то у текстуры появляются дефекты по краям в виде белой обводки, которая мне не нужна. Если эту текстуру заблюрить в фотошопе, то на всех разрешениях она рендерится без этих дефектов, но и качество текстуры желает лучшего. Вообщем, что мне делать то? Пробовал сохранять текстуру в 512x512 пикселей и в 32x32 пикселя. В первом случае дефекты присутствуют и качество картинки хорошее, во втором дефекты отсутствуют, но качество плохое. На моем то разрешении без дефектов все, но вот скриптом будут пользоваться и пользователи с другим разрешением.
P.S. Все изображения ниже были увеличены для наглядной демонстрации дефектов!
http://i.imgur.com/AbWuWuM.png
http://i.imgur.com/lTyGy94.png
http://i.imgur.com/W0kepPT.png
http://i.imgur.com/lD9UKii.png
Как можно ускорить перезарядку у шотгана, то есть его щелчок после каждого выстрела.
как получить векторы камеры?
Код:
while true
wait 0
if and
02E0: actor $PLAYER_ACTOR firing_weapon
02D8: actor $PLAYER_ACTOR current_weapon == 25 // Проверка что держит в руках shotgun
then
wait 50 // Ждем пока выстрелит
01B2: give_actor $PLAYER_ACTOR weapon 25 ammo 0
end
end
P.S Сам не тестил.
Это тема по C++
как получить векторы камеры?
CVector GetCameraPosition()
{
return *(CVector *)(0x00B6F338);
};
Небольшая проблема с рендером текстуры.
Вообщем, есть текстура 128x128 px и её нужно рендерить на экране так, чтобы она на всех разрешениях экрана выглядела нормально (использовал игровые координаты с конвертацией в экранные). У меня разрешение 1680x1050 (рендерится размером 32x32 пикселей) и текстура выглядит хорошо, но если сменить разрешение на меньшее, то у текстуры появляются дефекты по краям в виде белой обводки, которая мне не нужна. Если эту текстуру заблюрить в фотошопе, то на всех разрешениях она рендерится без этих дефектов, но и качество текстуры желает лучшего. Вообщем, что мне делать то? Пробовал сохранять текстуру в 512x512 пикселей и в 32x32 пикселя. В первом случае дефекты присутствуют и качество картинки хорошее, во втором дефекты отсутствуют, но качество плохое. На моем то разрешении без дефектов все, но вот скриптом будут пользоваться и пользователи с другим разрешением.
P.S. Все изображения ниже были увеличены для наглядной демонстрации дефектов!
http://i.imgur.com/AbWuWuM.png
http://i.imgur.com/lTyGy94.png
http://i.imgur.com/W0kepPT.png
http://i.imgur.com/lD9UKii.png
у директИкса есть всякие флаги для обработки текстур. Поигугли.
02E0: actor $PLAYER_ACTOR firing_weapon аналог в SF API есть?
Почему не убирается перезарядка?
PHP:
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
bool act
=
false
;
DWORD
timer
;
DWORD
tm
=
GetTickCount
(
)
;
bool
CALLBACK
outcomingData
(
stRakNetHookParams
*
params
)
{
if
(
params
-
>
packetId
==
PacketEnumeration
:
:
ID_BULLET_SYNC
&&
act
==
true
)
{
if
(
SF
-
>
getSAMP
(
)
-
>
getPlayers
(
)
-
>
pLocalPlayer
-
>
byteCurrentWeapon
==
25
)
{
if
(
tm
GiveWeapon
(
(
eWeaponType
)
25
,
0
,
WEAPONSKILL_PRO
)
;
}
}
}
return
true
;
}
void
CALLBACK
heh
(
std
:
:
string param
)
{
act
^
=
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
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"macro"
)
;
SF
-
>
getRakNet
(
)
-
>
registerRakNetCallback
(
RakNetScriptHookType
:
:
RAKHOOK_TYPE_OUTCOMING_PACKET
,
outcomingData
)
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"macro"
,
heh
)
;
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
;
}
itsLegend
07.03.2016, 15:54
Бли, хватит флудить здесь этим вопросом.
В крайнем случае можешь применить класс SFCleo.
Бли, хватит флудить здесь этим вопросом.
В крайнем случае можешь применить класс SFCleo.
А wait можно?
Бли, хватит флудить здесь этим вопросом.
В крайнем случае можешь применить класс SFCleo.
Все равно
PHP:
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
bool kek
=
false
;
void
CALLBACK
cmd_show_info_player
(
std
:
:
string param
)
{
kek
^
=
true
;
if
(
kek
)
{
if
(
SF
-
>
getCLEO
(
)
-
>
callOpcode
(
"02E0: actor $PLAYER_ACTOR firing_weapon"
)
&&
SF
-
>
getSAMP
(
)
-
>
getPlayers
(
)
-
>
pLocalPlayer
-
>
byteCurrentWeapon
==
25
)
{
SF
-
>
getCLEO
(
)
-
>
callOpcode
(
"0001: wait 50"
)
;
PEDSELF
-
>
GiveWeapon
(
(
eWeaponType
)
25
,
0
,
WEAPONSKILL_PRO
)
;
}
}
}
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
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"macro"
)
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"cyka"
,
cmd_show_info_player
)
;
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
;
}
itsLegend
07.03.2016, 16:28
А wait можно?
Для чего? Если прям трясьот, что нельзя юзать Sleep в mainloop, используй CreateThread, std::thread, _beginthread и т.п.
Для чего? Если прям трясьот, что нельзя юзать Sleep в mainloop, используй CreateThread, std::thread, _beginthread и т.п.
Толку 0, не работает
Я таймер заюзал, все равно не пашет
itsLegend
07.03.2016, 16:33
Толку 0, не работает
А должно?
А должно?
Ну смысл кода, что он просто убирает перезарядку у шотгана, но это не происходит
Dark_Knight
07.03.2016, 17:00
Ну так сам думай и пробуй
C++:
int
square
=
1
;
CVector fPos
=
{
FxPos
,
FyPos
,
0.0
}
;
GAME
->
Get3DMarkers
(
)
->
CreateMarker
(
square
,
MARKER3D_TUBE
,
&
fPos
,
40.0
,
1.0
,
3
,
52
,
227
,
255
)
;
Беда, не могу нарисовать маркер, где косяк может быть?
FxPos и FyPos в зависимости от введенных данных по свичу выбираются
itsLegend
07.03.2016, 17:23
Этот класс вообще странный.
Для начала - после создания необходимо получить указатель на C3DMarker(который возвращается при создании). Функции CreateMarker по барабану какую позицию ты указал, тебе придется снова установить её: C3DMarker::SetPosition(CVector*);
Потом в цикле C3DMarker::SetActive();
Насчет Z координаты - её тоже нужно указать. 0.0 не покатит в многих случаях.
Этот класс вообще странный.
Для начала - после создания необходимо получить указатель на C3DMarker(который возвращается при создании). Функции CreateMarker по барабану какую позицию ты указал, тебе придется снова установить её: C3DMarker::SetPosition(CVector*);
Потом в цикле C3DMarker::SetActive();
Насчет Z координаты - её тоже нужно указать. 0.0 не покатит в многих случаях.
Я нуб, как указатель пишется? ))
itsLegend
07.03.2016, 18:06
C3DMarker* pointer;
C3DMarker* pointer;
C3DMarker* pointer = GAME->Get3DMarkers()->CreateMarker(square, MARKER3D_TUBE, &fPos, 40.0, 1.0, 3, 52, 227, 255);
C3DMarker::SetPosition(pointer);
C3DMarker::SetActive(pointer);
ругается на C3DMarker::SetPosition и C3DMarker::SetActive
itsLegend
07.03.2016, 18:19
Бли.
pointer->SetPosition(&fpos);
Бли.
pointer->SetPosition(&fpos);
переписал строки, сейчас посмотрим
Бли.
pointer->SetPosition(&fpos);
В итоге все равно не реагирует на результат
itsLegend
07.03.2016, 20:10
В итоге все равно не реагирует на результат
В цикле, который mainloop, нужно фигачить ->SetActive();
C++:
C3DMarker
*
marker
=
nullptr
;
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
C3DMarker
*
freeMarker
=
GAME
->
Get3DMarkers
(
)
->
FindFreeMarker
(
)
;
if
(
freeMarker
)
{
CVector pos
=
CVector
(
0.0f
,
0.0f
,
0.0f
)
;
marker
=
GAME
->
Get3DMarkers
(
)
->
CreateMarker
(
freeMarker
->
GetIdentifier
(
)
,
MARKER3D_TUBE
,
&
pos
,
40.0f
,
1.0f
,
3
,
52
,
227
,
255
)
;
marker
->
SetPosition
(
&
pos
)
;
}
init
=
true
;
}
else
{
if
(
marker
!=
nullptr
)
{
marker
->
SetActive
(
)
;
}
}
}
Всё в какашечку укатилось. Этот код уже не рабочий. Прошло 1,5 месяца.
PHP:
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
stFontInfo
*
pFont
;
bool alfonso
=
false
;
char adm
[
11
]
[
60
]
;
bool admint
;
char pl
[
125
]
;
char adonl
[
125
]
[
125
]
;
int coutadmin
;
void
del_adm_onl
(
int nac
)
{
for
(
int i
=
nac
;
i
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
-
1
,
"Error reading list admins"
)
;
f1
=
fopen
(
".\\SAMPFUNCS\\admins.txt"
,
"w"
)
;
fputs
(
"Nick_Name"
,
f1
)
;
fclose
(
f1
)
;
return
;
}
char
*
fs
,
*
fp
,
gna
[
25
]
;
for
(
int i
=
0
;
i
packetId
==
ScriptRPCEnumeration
:
:
RPC_ScrServerJoin
&&
alfonso
)
// если это RPC_ScrServerJoin
{
short int sPlayerID
;
D3DCOLOR
D3DPlayerColor
;
byte isNPC
,
nameLen
;
char szPlayerName
[
25
]
;
params
-
>
bitStream
-
>
ResetReadPointer
(
)
;
// обнуляем оффсет чтения.
params
-
>
bitStream
-
>
Read
(
sPlayerID
)
;
// читаем ID игрока.
params
-
>
bitStream
-
>
Read
(
D3DPlayerColor
)
;
// цвет ника игрока.
params
-
>
bitStream
-
>
Read
(
isNPC
)
;
// флаг говорящий о том, NPC это или нет.
params
-
>
bitStream
-
>
Read
(
nameLen
)
;
// длина ника.
params
-
>
bitStream
-
>
Read
(
szPlayerName
,
nameLen
)
;
// ник.
szPlayerName
[
nameLen
]
=
'\0'
;
// обрезаем чтоб не было мусора
params
-
>
bitStream
-
>
ResetReadPointer
(
)
;
// обнуляем оффсет чтения
sprintf
(
pl
,
"%s[%d] Подключился к серверу."
,
szPlayerName
,
sPlayerID
)
;
// добавляем сообшение в чат.
for
(
int i
=
0
;
i
packetId
==
ScriptRPCEnumeration
:
:
RPC_ScrServerQuit
&&
alfonso
)
// если player quit
{
short int PlayerID
;
byte ReasonID
;
params
-
>
bitStream
-
>
ResetReadPointer
(
)
;
// обнуляем оффсет чтения.
params
-
>
bitStream
-
>
Read
(
PlayerID
)
;
// читаем ID игрока.
params
-
>
bitStream
-
>
Read
(
ReasonID
)
;
for
(
int i
=
0
;
i
getSAMP
(
)
-
>
getPlayers
(
)
-
>
GetPlayerName
(
PlayerID
)
,
adonl
[
i
]
)
==
0
)
{
del_adm_onl
(
i
)
;
coutadmin
--
;
}
//SF->getSAMP()->getChat()->AddChatMessage(-1,"OFF: %s",SF->getSAMP()->getPlayers()->GetPlayerName(PlayerID));
}
}
}
;
return
true
;
// успешно завершаем обработку RPC.
}
;
bool
CALLBACK
Present
(
CONST
RECT
*
pSourceRect
,
CONST
RECT
*
pDestRect
,
HWND
hDestWindowOverride
,
CONST
RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
-
>
getRender
(
)
-
>
BeginRender
(
)
&&
alfonso
)
)
{
for
(
int i
=
0
;
i
Print
(
adonl
[
i
]
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
10
,
260
,
false
)
;
}
SF
-
>
getRender
(
)
-
>
EndRender
(
)
;
// завершаем рисование
}
;
return
true
;
}
void
CALLBACK
famc
(
std
:
:
string param
)
{
alfonso
^
=
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
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"1"
)
;
SF
-
>
getRender
(
)
-
>
registerD3DCallback
(
eDirect3DDeviceMethods
:
:
D3DMETHOD_PRESENT
,
Present
)
;
pFont
=
SF
-
>
getRender
(
)
-
>
CreateNewFont
(
"Tahoma"
,
12
,
FCR_BORDER
)
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"fam"
,
famc
)
;
get_list_admin
(
)
;
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
;
}
Почему крашит?
itsLegend
07.03.2016, 21:36
Используй std::vector лучше.
Используй std::vector лучше.
первый раз слышу
Dark_Knight
07.03.2016, 21:48
первый раз слышу
Я тебе пример же давал -_-
Dark_Knight
07.03.2016, 21:52
переписал строки, сейчас посмотрим
В итоге все равно не реагирует на результат
Код:
void CreateMapMarker(CVector i){
if (!mapMarker){
mapMarker = GAME->GetRadar()->CreateMarker(&i);
}
else
{
mapMarker->SetPosition(&i);
}
mapMarker->SetDisplay(eMarkerDisplay::MARKER_DISPLAY_BLIPONLY );
mapMarker->SetScale(1);
mapMarker->SetSprite(eMarkerSprite::MARKER_SPRITE_ENEMYATTACK );
}
Не знаю пригодится ли, но это создает маркер на радаре. У 3д маркеров такой же.
Ребят, ну помогите уже кто-нибудь, неужели дисконнект нельзя нормально сделать? disconnect(100) у меня крашит игру...
Dark_Knight
08.03.2016, 14:50
Ребят, ну помогите уже кто-нибудь, неужели дисконнект нельзя нормально сделать? disconnect(100) у меня крашит игру...
так это проблема у тебя с ГТА уже. Только что проверил и всё нормально.
Woofing Giraffe
10.03.2016, 20:25
Код:
bool CALLBACK incomingRPC(stRakNetHookParams *params)
{
if (params->packetId == ScriptRPCEnumeration::RPC_ScrSetPlayerColor)
{
WORD i;
DWORD Color;
params->bitStream->ResetReadPointer();
params->bitStream->Read(i);
params->bitStream->Read(Color);
params->bitStream->ResetReadPointer();
if (Color == 0xFFFFFF01)
{
params->bitStream->ResetWritePointer();
params->bitStream->Write(i);
params->bitStream->Write(0xFF000001);
}
};
return true;
};
Проблема в том что цвет ника меняет только в табе, а в игре цвет остается тем же.
Ребят, ну помогите уже кто-нибудь, неужели дисконнект нельзя нормально сделать? disconnect(100) у меня крашит игру...
хех. Помню проснулся в понедельник, потому что мне снилось, что ты вокруг меня ходил и заебывал этой проблемой, и я решил проверить ее и если что пофиксить, написал код, и он оказался рабочим. Понимаешь, из-за того, что ты тут флудишь не существующей проблемой ты заебал меня даже во сне!
Вот кусок кода, он полностью рабочий, но себе ты его все равно не прикрутишь, ибо ему нужна последняя версия !MenuManager, которая еще не залита, и потому что это не весь код плагина.
C++:
struct
stConnectInfo
{
DWORD dwTimer
=
0
;
//TODO: прикрутить список серверов
}
ConnectInfo
;
void
RejTimer
(
)
{
if
(
ConnectInfo
.
dwTimer
==
0
)
return
;
if
(
ConnectInfo
.
dwTimer
>
GetTickCount
(
)
)
return
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
RestartGame
(
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
iGameState
=
GAMESTATE_WAIT_CONNECT
;
ConnectInfo
.
dwTimer
=
0
;
}
void
CALLBACK
Reconnect
(
int
KeyClicked
)
{
std
::
string nick
=
MENU
.
connects
->
InputBoxes
->
GetInputBoxText
(
0
)
;
if
(
nick
.
length
(
)
>
3
&&
nick
.
length
(
)
getSAMP
(
)
->
getPlayers
(
)
->
SetLocalPlayerName
(
nick
.
c_str
(
)
)
;
SF
->
getSAMP
(
)
->
disconnect
(
100
)
;
ConnectInfo
.
dwTimer
=
atoi
(
MENU
.
connects
->
InputBoxes
->
GetInputBoxText
(
1
)
.
c_str
(
)
)
*
1000
+
GetTickCount
(
)
;
}
void
ConnectsInit
(
)
{
MENU
.
connects
=
new
Menu
(
"Подключения"
,
-
1
,
-
1
,
500
,
200
,
0xDD202040
,
-
1
,
false
)
;
MENU
.
connects
->
Elements
->
AddElement
(
"Ник:"
,
5
,
5
,
NULL
)
;
MENU
.
connects
->
InputBoxes
->
AddInputBox
(
45
,
5
,
450
)
;
//MENU.connects->InputBoxes->SetInputBoxText(0, SF->getSAMP()->getPlayers()->pszLocalPlayerName);
MENU
.
connects
->
Elements
->
AddElement
(
"Задержка:"
,
5
,
25
,
NULL
)
;
MENU
.
connects
->
InputBoxes
->
AddInputBox
(
95
,
25
,
400
)
;
MENU
.
connects
->
InputBoxes
->
SetInputBoxText
(
1
,
"15"
)
;
MENU
.
connects
->
Elements
->
AddElement
(
"{0080FF}Реконнект"
,
5
,
40
,
Reconnect
)
;
}
Код:
bool CALLBACK incomingRPC(stRakNetHookParams *params)
{
if (params->packetId == ScriptRPCEnumeration::RPC_ScrSetPlayerColor)
{
WORD i;
DWORD Color;
params->bitStream->ResetReadPointer();
params->bitStream->Read(i);
params->bitStream->Read(Color);
params->bitStream->ResetReadPointer();
if (Color == 0xFFFFFF01)
{
params->bitStream->ResetWritePointer();
params->bitStream->Write(i);
params->bitStream->Write(0xFF000001);
}
};
return true;
};
Проблема в том что цвет ника меняет только в табе, а в игре цвет остается тем же.
В собе есть функция чтения цвета ника, возьми ее из вместо чтения запиши свой цвет
Помогите ребят, поставил на ноутбук Visual Studio 2013, а тут выдает 2 ошибки
http://i062.radikal.ru/1603/a1/f23131d651aa.png
http://s019.radikal.ru/i625/1603/68/9dae5d5b3d12.png
Dark_Knight
10.03.2016, 21:35
Код:
bool CALLBACK incomingRPC(stRakNetHookParams *params)
{
if (params->packetId == ScriptRPCEnumeration::RPC_ScrSetPlayerColor)
{
WORD i;
DWORD Color;
params->bitStream->ResetReadPointer();
params->bitStream->Read(i);
params->bitStream->Read(Color);
params->bitStream->ResetReadPointer();
if (Color == 0xFFFFFF01)
{
params->bitStream->ResetWritePointer();
params->bitStream->Write(i);
params->bitStream->Write(0xFF000001);
}
};
return true;
};
Проблема в том что цвет ника меняет только в табе, а в игре цвет остается тем же.
Ты не передаешь серверу данные о цвете, только он тебе.
сделал какую-то парашу, при попытке отправить ID_WEAPONS_UPDATE игра вылетает. Не совсем понимаю почему, объясните.
Код:
actor_info *self = SF->getGame()->actorInfoGet(-1, ACTOR_ALIVE);
weapon gun = self->weapon[self->weapon_slot];
stWeaponsUpdate weapUpd;
memset(&weapUpd, 0, sizeof(stWeaponsUpdate));
weapUpd.iTargetID = std::stoi(param);
weapUpd.slot = self->weapon_slot;
weapUpd.weapon = gun.id;
weapUpd.ammo = gun.ammo;
BitStream bsWeapUpd;
bsWeapUpd.Write((BYTE)ID_WEAPONS_UPDATE);
bsWeapUpd.Write((PCHAR)&weapUpd, sizeof(stWeaponsUpdate));
SF->getRakNet()->SendPacket(&bsWeapUpd);
Помогите ребят, поставил на ноутбук Visual Studio 2013, а тут выдает 2 ошибки
http://i062.radikal.ru/1603/a1/f23131d651aa.png
http://s019.radikal.ru/i625/1603/68/9dae5d5b3d12.png
тебе необходимо установить microsoft visual c++ redistributable 2015
Dark_Knight
10.03.2016, 22:13
weapUpd.iTargetID = std::stoi(param);
Вполне тут может быть краш.
Woofing Giraffe
10.03.2016, 22:16
Ты не передаешь серверу данные о цвете, только он тебе.
В смысле я должен эмулировать принятие пакета?
weapUpd.iTargetID = std::stoi(param);
Вполне тут может быть краш.
Привел к uint16_t ничего не поменялось, не понимат.
Структуру ID_WEAPONS_UPDATE вроде правильно переписал. Вот если что.
Код:
struct stWeaponsUpdate
{
uint16_t iTargetID;
uint8_t slot;
uint8_t weapon;
int16_t ammo;
};
UPD: Я короче в другом месте где-то обосрался, хотя до этого тестил онли ID_WEAPONS_UPDATE и вылетало. Жопой ошибки правлю походу.
тебе необходимо установить microsoft visual c++ redistributable 2015
http://s11.radikal.ru/i183/1603/a1/8db1539f5319.png
http://s11.radikal.ru/i183/1603/a1/8db1539f5319.png
Удали - установи
хех. Помню проснулся в понедельник, потому что мне снилось, что ты вокруг меня ходил и заебывал этой проблемой, и я решил проверить ее и если что пофиксить, написал код, и он оказался рабочим. Понимаешь, из-за того, что ты тут флудишь не существующей проблемой ты заебал меня даже во сне!
Вот кусок кода, он полностью рабочий, но себе ты его все равно не прикрутишь, ибо ему нужна последняя версия !MenuManager, которая еще не залита, и потому что это не весь код плагина.
C++:
struct
stConnectInfo
{
DWORD dwTimer
=
0
;
//TODO: прикрутить список серверов
}
ConnectInfo
;
void
RejTimer
(
)
{
if
(
ConnectInfo
.
dwTimer
==
0
)
return
;
if
(
ConnectInfo
.
dwTimer
>
GetTickCount
(
)
)
return
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
RestartGame
(
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
iGameState
=
GAMESTATE_WAIT_CONNECT
;
ConnectInfo
.
dwTimer
=
0
;
}
void
CALLBACK
Reconnect
(
int
KeyClicked
)
{
std
::
string nick
=
MENU
.
connects
->
InputBoxes
->
GetInputBoxText
(
0
)
;
if
(
nick
.
length
(
)
>
3
&&
nick
.
length
(
)
getSAMP
(
)
->
getPlayers
(
)
->
SetLocalPlayerName
(
nick
.
c_str
(
)
)
;
SF
->
getSAMP
(
)
->
disconnect
(
100
)
;
ConnectInfo
.
dwTimer
=
atoi
(
MENU
.
connects
->
InputBoxes
->
GetInputBoxText
(
1
)
.
c_str
(
)
)
*
1000
+
GetTickCount
(
)
;
}
void
ConnectsInit
(
)
{
MENU
.
connects
=
new
Menu
(
"Подключения"
,
-
1
,
-
1
,
500
,
200
,
0xDD202040
,
-
1
,
false
)
;
MENU
.
connects
->
Elements
->
AddElement
(
"Ник:"
,
5
,
5
,
NULL
)
;
MENU
.
connects
->
InputBoxes
->
AddInputBox
(
45
,
5
,
450
)
;
//MENU.connects->InputBoxes->SetInputBoxText(0, SF->getSAMP()->getPlayers()->pszLocalPlayerName);
MENU
.
connects
->
Elements
->
AddElement
(
"Задержка:"
,
5
,
25
,
NULL
)
;
MENU
.
connects
->
InputBoxes
->
AddInputBox
(
95
,
25
,
400
)
;
MENU
.
connects
->
InputBoxes
->
SetInputBoxText
(
1
,
"15"
)
;
MENU
.
connects
->
Elements
->
AddElement
(
"{0080FF}Реконнект"
,
5
,
40
,
Reconnect
)
;
}
C++:
struct
stConnectInfo
{
DWORD dwTimer
=
0
;
//TODO: прикрутить список серверов
}
ConnectInfo
;
// Для чего тут ConnecInfo? Это объявление структуры stConnectInfo?
Для чего тут ConnecInfo? Это объявление структуры stConnectInfo?
да
Как сделать проверку что мой актер находися в машине или на мото
Как сделать проверку что мой актер находися в машине или на мото
Вроде должно работать.
Код:
vehicle_info *veh = SF->getGame()->vehicleInfoGet(-1, VEHICLE_ALIVE);
if (veh)
SF->getSAMP()->getChat()->AddChatMessage(-1, "in Car");
Dark_Knight
11.03.2016, 16:56
vehicle_info *car = SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_TYPE_CAR);
какой нужен рпц для спавна кара
Как получить позиции костей игрока в стриме? В структура actor_info вроде есть функция pHead, pNeck.. и т.д, но она типа void, то есть ничего не возвращает. Для чего тогда она?
C++:
for
(
int
i
=
0
;
i
getSAMP
(
)
->
getPlayers
(
)
->
IsPlayerDefined
(
i
)
)
{
actor_info
*
Actor
=
SF
->
getGame
(
)
->
actorInfoGet
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetActorHandleFromSAMPPlayerID
(
i
)
,
0
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
255
,
255
,
255
)
,
"X: %.3f, Y: %.3f, Z: %.3f"
,
?
,
?
,
?
)
;
}
}
Как создать машину, например elegy
Как получить позиции костей игрока в стриме? В структура actor_info вроде есть функция pHead, pNeck.. и т.д, но она типа void, то есть ничего не возвращает. Для чего тогда она?
C++:
for
(
int
i
=
0
;
i
getSAMP
(
)
->
getPlayers
(
)
->
IsPlayerDefined
(
i
)
)
{
actor_info
*
Actor
=
SF
->
getGame
(
)
->
actorInfoGet
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetActorHandleFromSAMPPlayerID
(
i
)
,
0
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
255
,
255
,
255
)
,
"X: %.3f, Y: %.3f, Z: %.3f"
,
?
,
?
,
?
)
;
}
}
Здраститя, там же закоментировано, что может принимать 4 параметра.
Имеет структуру
Код:
- float height
- float front/back
- float left/right
- void* pObject
А вообще, я вот тут посмотрел и мне кажется, что это ближе к твоему вопросу:
Код:
CVector vec;
PEDSELF->GetBonePosition(eBone::BONE_HEAD, &vec);
В общем тести.
Здраститя, там же закоментировано, что может принимать 4 параметра.
Имеет структуру
Код:
- float height
- float front/back
- float left/right
- void* pObject
А вообще, я вот тут посмотрел и мне кажется, что это ближе к твоему вопросу:
Код:
CVector vec;
PEDSELF->GetBonePosition(eBone::BONE_HEAD, &vec);
В общем тести.
Оно то ближе, но мне нужно получить не координаты костей своего игрока, а других, а я хз как получить CPed другого игрока. Мб знаешь?
А по поводу того, что функция принимает 4 параметра, так у меня компиль ругается.
Вообщем, я так и не понял, как получить координаты кости другого игрока, не локального. Если кто поможет, буду очень признателен.
Woofing Giraffe
13.03.2016, 20:06
Ты не передаешь серверу данные о цвете, только он тебе.
Можешь объяснить подробнее? Как мне передать данные о цвете серверу?
Можешь объяснить подробнее? Как мне передать данные о цвете серверу?
Он, наверное, имел ввиду, что ты не можешь передать данные о цвете своего клиста.
Woofing Giraffe
13.03.2016, 20:26
Он, наверное, имел ввиду, что ты не можешь передать данные о цвете своего клиста.
Дак прикол в том что если эмулировать принятие пакета, то всё нормально, а если просто изменить цвет во входящем, то красится только в табе
как можно заставить сервер думать что ты умер и остаешься мёртвым после летального выстрела?
как можно заставить сервер думать что ты умер и остаешься мёртвым после летального выстрела?
Никак.
А есть такой рпц который получает скорость машин игроков со всего сервера
А есть такой рпц который получает скорость машин игроков со всего сервера
..\Sanny Builder 3\data\sa->SF
Dark_Knight
16.03.2016, 16:59
..\Sanny Builder 3\data\sa->SF
Вообще нет такого РПЦ. Нужно через пакеты считывать вектор скорости и уже по ним считать.
Вообще нет такого РПЦ. Нужно через пакеты считывать вектор скорости и уже по ним считать.
Ну, в файле SF там все РПЦ. И он просит скорость всех машин на сервере, это вроде невозможно. Только в зоне стрима.
Как только вызываю эту функцию - виснет игра, если закомментировать проверки на нажатие клавиши, то все работает нормально. *SF объявлена внутри класса в private: .
C++:
void
CMenu
::
MenuEvents
(
)
{
int
Key
=
0x0
;
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
0x25
)
)
Key
=
0x25
;
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
0x26
)
)
Key
=
0x26
;
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
0x27
)
)
Key
=
0x27
;
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
0x28
)
)
Key
=
0x28
;
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
0x0D
)
)
Key
=
0x0D
;
}
Dark_Knight
16.03.2016, 18:31
Обьяви SF глобально и не ебись.
я конечно понимаю что пиздец вопрос, но почему он проверку игнорит
PHP:
bool
CALLBACK
outcomingData
(
stRakNetHookParams
*
params
)
{
if
(
kekos
&&
params
-
>
packetId
==
PacketEnumeration
:
:
ID_PLAYER_SYNC
)
{
stOnFootData data
;
memset
(
&
data
,
0
,
sizeof
(
stOnFootData
)
)
;
byte packet
;
params
-
>
bitStream
-
>
ResetReadPointer
(
)
;
params
-
>
bitStream
-
>
Read
(
packet
)
;
params
-
>
bitStream
-
>
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
params
-
>
bitStream
-
>
ResetReadPointer
(
)
;
if
(
VK_LBUTTON
)
SF
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
-
1
,
"keys: %d"
,
data
.
sKeys
)
;
params
-
>
bitStream
-
>
ResetWritePointer
(
)
;
params
-
>
bitStream
-
>
Write
(
packet
)
;
params
-
>
bitStream
-
>
Write
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
kekos
=
false
;
}
;
return
true
;
}
;
itsLegend
18.03.2016, 00:42
какую проверку
if(VK_LBUTTON), ету?
какую проверку
if(VK_LBUTTON), ету?
Да
itsLegend
18.03.2016, 01:24
Да
А что ты от неё хотел? Она должна возвращать true или false. Сравни с чем-нибудь, к примеру.
Да
VK_LBUTTON == true. Вот и срабатывает всегда.
Dark_Knight
18.03.2016, 05:00
VK_LBUTTON == true. Вот и срабатывает всегда.
VK_LBUTTON это макрос и ВС тебя на*** пошлет с такой переменной. Если ты хочешь булевую переменную проверять, то его проверка тоже подойдет, а вообще надо эму проверять зажатость клавиш(IsDown) или нажатость(IsPressed) в классe CGame
VK_LBUTTON это макрос и ВС тебя на*** пошлет с такой переменной. Если ты хочешь булевую переменную проверять, то его проверка тоже подойдет, а вообще надо эму проверять зажатость клавиш(IsDown) или нажатость(IsPressed) в классe CGame
то есть мне лучше ispreseed? Чем VK_LBUTTON
Dark_Knight
18.03.2016, 12:16
то есть мне лучше ispreseed? Чем VK_LBUTTON
http://risovach.ru/upload/2016/03/mem/mart_108712173_orig_.jpg
http://risovach.ru/upload/2016/03/mem/mart_108712173_orig_.jpg
***ню сморозил xDD
А реально поменять цвет ника над головой?
Woofing Giraffe
18.03.2016, 12:53
Код:
bool CALLBACK incomingRPC(stRakNetHookParams *params)
{
if (params->packetId == ScriptRPCEnumeration::RPC_ScrSetPlayerColor)
{
WORD i;
DWORD Color;
params->bitStream->ResetReadPointer();
params->bitStream->Read(i);
params->bitStream->Read(Color);
params->bitStream->ResetReadPointer();
if (Color == 0xFFFFFF01)
{
params->bitStream->ResetWritePointer();
params->bitStream->Write(i);
params->bitStream->Write(0xFF000001);
}
};
return true;
};
Проблема в том что цвет ника меняет только в табе, а в игре цвет остается тем же.
Бля, ну помогите(
Бля, ну помогите(
в собе есть функция. возьми ее и используй. В новом сф тоже будет такая функция
Можно ли получить клавишу, которая зажата. Пробовал getch(), GetKeyState(), без результата.
Dark_Knight
18.03.2016, 18:01
WndProcc HOOK
Как отправить урон с кулака, дилдо и т.д
Как отправить урон с кулака, дилдо и т.д
Если чисто на синхре то шли онфут пакет с позицией в метре от жертвы и разворачивай себя точно в её сторону(там это на кватернионах по этому прийдеться высчитывать) Ставишь ид анимки удара и соотвествующий флаг к ней. И лучше после этого послать GiveDamageRPC сам знаешь зачем. (Ид гана нулевой, урон от одного до трёх). Но можно обойтись и без манипуляций с кватернионами, разворачивай у себя в клиенте.
Например так. Только рпц на выдачу дамага лучше под GetTickCount на 220 мс поставить.
C++:
#pragma warning(disable:4409)
float
GetZRot
(
uint32_t
enemy
)
{
if
(
enemy
==
65535
)
return
-
0.0f
;
float
x1
=
PEDSELF
->
GetPosition
(
)
->
fX
;
float
y1
=
PEDSELF
->
GetPosition
(
)
->
fY
;
float
x2
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
enemy
]
->
pPlayerData
->
fOnFootPos
[
0
]
;
float
y2
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
enemy
]
->
pPlayerData
->
fOnFootPos
[
1
]
;
float
kx
,
ky
;
float
t
,
a
;
kx
=
x2
-
x1
;
ky
=
y2
-
y1
;
if
(
kx
==
0
)
kx
=
0.00001f
;
t
=
kx
/
ky
;
if
(
t
=
0
)
&&
(
ky
>=
0
)
)
a
=
359.99999f
-
a
;
else
if
(
(
kx
>=
0
)
&&
(
ky
getRakNet
(
)
->
SendRPC
(
RPCEnumeration
::
RPC_GiveTakeDamage
,
&
bs
)
;
}
// переменная targetId должна содержать ид твоей жертвы
uint32_t
targetId
;
bool
__stdcall
HackMySync
(
stRakNetHookParams
*
hook
)
{
if
(
hook
->
packetId
==
ID_PLAYER_SYNC
&&
Enabled
==
true
)
{
stOnFootData foot
;
byte packetID
;
memset
(
&
foot
,
0
,
sizeof
(
stOnFootData
)
)
;
hook
->
bitStream
->
ResetReadPointer
(
)
;
hook
->
bitStream
->
Read
(
(
BYTE
)
packetID
)
;
hook
->
bitStream
->
Read
(
(
PCHAR
)
&
foot
,
sizeof
(
stOnFootData
)
)
;
hook
->
bitStream
->
ResetReadPointer
(
)
;
if
(
!
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
targetId
]
)
return
true
;
if
(
!
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
IsPlayerDefined
(
targetId
,
true
)
)
return
true
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
targetId
]
->
pPlayerData
->
iAFKState
==
2
)
return
true
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
targetId
]
->
pPlayerData
->
bytePlayerState
!=
PLAYER_STATE_ONFOOT
)
return
true
;
float
dist
[
3
]
,
mdist
[
3
]
;
for
(
short
x
=
0
;
x
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
targetId
]
->
pPlayerData
->
fOnFootPos
[
x
]
;
mdist
[
x
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fPosition
[
x
]
;
}
if
(
GetDistance3D
(
dist
[
0
]
,
dist
[
1
]
,
dist
[
2
]
,
mdist
[
0
]
,
mdist
[
1
]
,
mdist
[
2
]
)
>
30.0f
)
return
true
;
PEDSELF
->
SetTargetRotation
(
GetZRot
(
targetId
)
)
;
for
(
short
x
=
0
;
x
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
targetId
]
->
pPlayerData
->
fOnFootPos
[
x
]
;
foot
.
fPosition
[
1
]
+=
0.5f
;
hook
->
bitStream
->
ResetWritePointer
(
)
;
hook
->
bitStream
->
Write
(
(
BYTE
)
packetID
)
;
hook
->
bitStream
->
Write
(
(
PCHAR
)
&
foot
,
sizeof
(
stOnFootData
)
)
;
SendTakeDamageRPC
(
targetId
,
0
,
rand
(
)
%
3
+
1
)
;
}
return
true
;
}
itsLegend
18.03.2016, 22:23
Можно ли получить клавишу, которая зажата. Пробовал getch(), GetKeyState(), без результата.
SF->getGame()->
как отправить сообщение на сервер без RPC
з.ы в клео можно было как-то.
itsLegend
20.03.2016, 15:00
как отправить сообщение на сервер без RPC
з.ы в клео можно было как-то.
SF->getSAMP()->getPlayers()->pLocalPlayer->Say();
Что-то вроде
Можно как-то узнать высоту форматированного текста? *pFont->Height не подойдет, так как оно возвращает высоту одной строки, а у меня текст форматированный, с переходом на новую строку.
itsLegend
20.03.2016, 15:09
С переходами вряд ли.
Рендери отдельно строки убрав в них символ перехода
Dark_Knight
20.03.2016, 15:29
Считаешь количество \n +1 и умножаешь на хеигхт.
С переходами вряд ли.
Рендери отдельно строки убрав в них символ перехода
Ну, можно и так.
Считаешь количество \n +1 и умножаешь на хеигхт.
Или так.
PHP:
#include
#include
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#pragma comment (lib,"user32.lib")
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
static
bool gun_rec
=
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
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
init
=
true
;
}
if
(
SF
-
>
getGame
(
)
-
>
isKeyPressed
(
'R'
)
)
{
if
(
!
gun_rec
)
{
keybd_event
(
'E'
,
0
,
0
,
0
)
;
Sleep
(
200
)
;
keybd_event
(
'E'
,
0
,
KEYEVENTF_KEYUP
,
0
)
;
}
else
{
keybd_event
(
'Q'
,
0
,
0
,
0
)
;
Sleep
(
200
)
;
keybd_event
(
'Q'
,
0
,
KEYEVENTF_KEYUP
,
0
)
;
}
gun_rec
^
=
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
;
}
не скруллит почему?
nikita_cheater
21.03.2016, 15:33
PHP:
#include
#include
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#pragma comment (lib,"user32.lib")
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
static
bool gun_rec
=
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
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
init
=
true
;
}
if
(
SF
-
>
getGame
(
)
-
>
isKeyPressed
(
'R'
)
)
{
if
(
!
gun_rec
)
{
keybd_event
(
'E'
,
0
,
0
,
0
)
;
Sleep
(
200
)
;
keybd_event
(
'E'
,
0
,
KEYEVENTF_KEYUP
,
0
)
;
}
else
{
keybd_event
(
'Q'
,
0
,
0
,
0
)
;
Sleep
(
200
)
;
keybd_event
(
'Q'
,
0
,
KEYEVENTF_KEYUP
,
0
)
;
}
gun_rec
^
=
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
;
}
не скруллит почему?
Не юзай Sleep в мейнлупе, будет фризить игру
Gabriel__
21.03.2016, 18:40
Как выдать игроку джетпак ?
Как получить координаты маркера на карте ?
Как сделать в ATB что то типо чекбокса ? (ставить галочку включено/выключено)
Dark_Knight
21.03.2016, 18:58
TW_TYPE_BOOLCPP
Gabriel__
22.03.2016, 14:58
Как проверить что игрок стреляет ? Помогите!
if (SF->getCLEO()->callOpcode("02E0: actor $PLAYER_ACTOR firing_weapon")) - Не работает. Всегда выдает true.
DarkP1xel
22.03.2016, 15:29
Поставь хук на исходящую bullet sync
Как проверить что игрок стреляет ? Помогите!
if (SF->getCLEO()->callOpcode("02E0: actor $PLAYER_ACTOR firing_weapon")) - Не работает. Всегда выдает true.
If(data.type = 0) не помню точно
Gabriel__
22.03.2016, 16:40
1. Как отчистить чат ? SF->getSAMP()->getChat()-> - не нашел.
2. Как проверить что нажата левая кнопка мыши ?
By_Surse
22.03.2016, 17:35
1. Как отчистить чат ? SF->getSAMP()->getChat()-> - не нашел.
2. Как проверить что нажата левая кнопка мыши ?
add_message(-1, ""); и так много раз
if (SF->getGame()->isKeyPressed(VK_LBUTTON))
Gabriel__
22.03.2016, 18:03
add_message(-1, ""); и так много раз
Ну ты говнокодер.
А как в AntTweakBar изменить цвет и позицию ???
DarkP1xel
22.03.2016, 18:08
Используй функцию TwDefine
By_Surse
22.03.2016, 19:23
Ну как чат отчистить (какая функция) ну помогите блять!
я тебе уже говорил:
отправь кучу пустых сообщений
Gabriel__
22.03.2016, 19:24
Ну это не очистка. Просто маскировка и говнокод!
Если наверх проматать то можно увидеть сообщения.
nikita_cheater
22.03.2016, 19:24
Ну как чат отчистить (какая функция) ну помогите блять!
тебе же написали, в цикле выводишь пустое сообщение в чат
By_Surse
22.03.2016, 19:25
Ну как чат отчистить (какая функция) ну помогите блять!
говнокод это ты! а это очистка чата
Gabriel__
22.03.2016, 19:32
А я понял отправить очень много сообщений и самп освободит память чата останутся только пустые строки.
Gabriel__
22.03.2016, 21:06
Как отключить RakNet хук ? Видел функцию ->UnregisterHook();
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot