PDA

Просмотр полной версии : SAMPFUNCS | API C++


Страницы : 1 2 3 4 [5] 6 7 8

FordeD
27.02.2016, 16:16
как поставить метку на карте не заходя в меню соответственно?

Dark_Knight
27.02.2016, 16:28
Createmarker ищи.

FordeD
27.02.2016, 16:33
Createmarker ищи.


фенк

Harch
27.02.2016, 17:19
SF->getSAMP()->disconnect(100)



Я же писал чуть выше, что при таком способе у меня игра зависает и вылетает :)

FordeD
27.02.2016, 19:43
Createmarker ищи.


как-то копался так и не нашел путь к этой функции, не подскажешь?

Dark_Knight
27.02.2016, 19:51
В GAME ищи

FordeD
27.02.2016, 19:57
В GAME ищи


понял, сейчас посмотрю

Tray228
27.02.2016, 22:03
как прогрузить samp.dll?

Dark_Knight
27.02.2016, 22:08
ЕЕ, он и так загружен. SF->getSam()->getSampAdress

Tray228
27.02.2016, 22:17
ЕЕ, он и так загружен. SF->getSam()->getSampAdress


SF->getSam()->getSampAdress / SF->getSAMP()->getSAMPAddr() не он случайно?

Dark_Knight
27.02.2016, 23:02
Оно. Смотря для каких тебе целей.

Tray228
27.02.2016, 23:45
Оно. Смотря для каких тебе целей.


fps unlock xd

Tray228
28.02.2016, 02:21
0x609CF9 как можно хукнуть данный адрес?

Dark_Knight
28.02.2016, 02:22
0x609CF9 как можно хукнуть данный адрес?


Обратись к Тиму лучше с этим вопросом.

Tray228
28.02.2016, 02:26
Обратись к Тиму лучше с этим вопросом.


Кроме Тима, к кому еще можно?

FordeD
28.02.2016, 11:54
ошибка 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);

FordeD
28.02.2016, 13:48
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);

}

SR_team
28.02.2016, 15:07
0x609CF9 как можно хукнуть данный адрес?


gta_sa.exe+209CF9 - 85 C9 - test ecx,ecx

если надо убрать эту проверку, то можно просто занопить. Сама функция, если хочешь хукать всю функцию, начинается с gta_sa.exe+209CD0

P.S. Или ты вообще не в курсе что такое хуки?

CarLCas
28.02.2016, 15:09
Памаги, почему не робит?
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?????

CarLCas
28.02.2016, 15:17
а как получить позицию игрока по идy?????


SF->getSAMP()->getPlayers()->pRemotePlayer[ i ]->дальше сам найдешь

leonard228
28.02.2016, 15:19
SF->getSAMP()->getPlayers()->pRemotePlayer[ i ]->дальше сам найдешь


сяп

Harch
28.02.2016, 15:48
Как всё-таки адекватно уйти на паузу? Чтобы всем вокруг писалось, что игрок на паузе?

CarLCas
28.02.2016, 16:04
Как всё-таки адекватно уйти на паузу? Чтобы всем вокруг писалось, что игрок на паузе?


Сделай хук плеер и инкар даты и будешь афк

Harch
28.02.2016, 16:34
Сделай хук плеер и инкар даты и будешь афк



Не очень понял, что это значит. Поясни, пожалуйста :) Я пока что делаю просто GAME->Pause(true);

Tray228
28.02.2016, 16:34
Почему крашит ?

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);

}

Tray228
28.02.2016, 19:57
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

fragma
28.02.2016, 20:08
Как получить ид оружия которое в руках?



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 - игнорирование зоны стрима


а как сделать чтобы если человек вне зоне стрима то скрипт не выполнялся?

return
29.02.2016, 22:16
Как правильно записать?

А то компилятор ругается.

C++:






vehicle_info
*
vehinfo
=
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
GetSAMPVehicleIDFromGTAHandle
(
411
)
;

leonard228
29.02.2016, 22:57
ребят скинте кто нибудь стрелку вверх которая на кнопке 6 у вас а то у меня ее нету

Dark_Knight
29.02.2016, 22:59
Как правильно записать?
А то компилятор ругается.
Ты сначала хендл узнай.

return
29.02.2016, 23:43
Да эт я тут не правильно написал, я туда передаю инт с хендлом.

Ошибку выдаёт, невозможно преобразовать "int" в "vehicle_info *

FordeD
01.03.2016, 13:27
Запихни весь код команды в трай кетч и и отлогируй че выдает
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); // Возвращает число, а не буквы. Так же, если в строке будут буквы вызовит краш.

return
01.03.2016, 14:57
Ошибку выдаёт, невозможно преобразовать "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
(
)
;
}
}

SR_team
01.03.2016, 15:50
struct


убери

SF->getSAMP()->getVehicles()->GetSAMPVehicleIDFromGTAHandle(vehid);

а перед этим добавь (vehicle_info*)

return
01.03.2016, 16:28
вот такую вот фигню выбивает когда ввожу команду.

http://i.imgur.com/5jxJzlX.png

SR_team
01.03.2016, 16:34
вот такую вот фигню выбивает когда ввожу команду.

http://i.imgur.com/5jxJzlX.png


какую команду?

return
01.03.2016, 16:41
какую команду?


Ну, то что выше писал.

Поправил её, как ты сказал, закомпилил, но при вводе команды, выбивает эту парашу.

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
(
)
;
}
}

SR_team
01.03.2016, 17:37
GTAfunc_PutActorInCar(vehinfo);


мб эта ф-ция кривая?

return
01.03.2016, 18:28
мб эта ф-ция кривая?


Собвская функция. В собе норм работает.

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
(
)
;
}
}
}

SR_team
01.03.2016, 18:32
Собвская функция. В собе норм работает.

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, попробуй вызвать оттуда

Harch
01.03.2016, 20:07
Как сделать хук на инкардата и плеера?

Dark_Knight
01.03.2016, 20:18
Как сделать хук на инкардата и плеера?


SF->Raknet()->RegisterRPCCallBack(PACKET_IN/PACKET_OUT, callback);

Найди урок на вики. Там показано.

AWRage
01.03.2016, 20:40
Почему я не могу рендерить текст шрифтами, кроме как системных, например Pricedown. Указывал название из свойств шрифта, просто название шрифта, никак не хочет рендерить моим шрифтом. С системными шрифтами все нормально, Tahoma, Arial, Calibri, Verdana и т.д. все работает.

SR_team
01.03.2016, 20:42
Почему я не могу рендерить текст шрифтами, кроме как системных, например Pricedown. Указывал название из свойств шрифта, просто название шрифта, никак не хочет рендерить моим шрифтом. С системными шрифтами все нормально, Tahoma, Arial, Calibri, Verdana и т.д. все работает.


а шрифт установлен?

AWRage
01.03.2016, 20:45
а шрифт установлен?


Установлен. Перезапускал ПК, все равно не рендерит.

SR_team
01.03.2016, 20:49
Установлен. Перезапускал ПК, все равно не рендерит.


попробуй шрифт в системную папку шрифтов закинуть

Harch
01.03.2016, 20:55
SF->Raknet()->RegisterRPCCallBack(PACKET_IN/PACKET_OUT, callback);
Найди урок на вики. Там показано.



Я не очень понимаю, как это сделает так, чтобы я ушёл адекватно на паузу. Или, быть может, надо возвращать false? Ну, в callback.

AWRage
01.03.2016, 20:59
попробуй шрифт в системную папку шрифтов закинуть


Все равно :sad_frog:

На версии SF 5.2.2 все работало отлично.

Dark_Knight
01.03.2016, 21:15
Я не очень понимаю, как это сделает так, чтобы я ушёл адекватно на паузу. Или, быть может, надо возвращать false? Ну, в callback.


Читай урок.



Все равно :sad_frog:
На версии SF 5.2.2 все работало отлично.


Есть вариант один. Если это из-за него скажу фипу, чтобы пофиксил.

AWRage
01.03.2016, 21:23
Читай урок.

Есть вариант один. Если это из-за него скажу фипу, чтобы пофиксил.


А щас что делать?

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
Отправилась ли команда на сервер и какой от неё ответ?


ну типо того

Harch
01.03.2016, 22:03
Читай урок.



Урок я прочитал давно. И перехватываю входящие сообщения (и исходящие при желании). Но как запретить отправку пакета - не знаю.

Woofing Giraffe
01.03.2016, 22:11
Урок я прочитал давно. И перехватываю входящие сообщения (и исходящие при желании). Но как запретить отправку пакета - не знаю.


return false;

return
01.03.2016, 23:38
эта функция должна быть где-то в GAME, попробуй вызвать оттуда


все пересмотрел, не могу найти.

Если кто то знает, как посадить игрока в кар, напишите, пожалуйста.

Dark_Knight
01.03.2016, 23:45
ну типо того


Распишу принцип.

Создаешь бул(дальше булка) переменную со стартовым значением фалсе.

Чекаешь, что отравилась нужная тебе команда и в булку записываешь тру(var = !var)

Потом в хук на клиент мессадже чекаешь, что пришла тебе нужная строка и если условие прошло сообщаешь себе в чат и булку пишешь фалсе. (var = !var)

san0
01.03.2016, 23:52
все пересмотрел, не могу найти.

Если кто то знает, как посадить игрока в кар, напишите, пожалуйста.


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
И что тебя интересует хотя бы?

Harch
02.03.2016, 17:13
Спасибо, работает!

И последнее - как адекватно сделать дисконнект?

return
02.03.2016, 20:27
как узнать ник игрока который нанёс мне урон?

F_Time
02.03.2016, 20:35
как сделать тп по метке?

Dark_Knight
02.03.2016, 20:36
как узнать ник игрока который нанёс мне урон?


Через буллет дату узнать ид, кто нанес тебе урон, а потом по иду узнать его ник.

F_Time
02.03.2016, 21:25
как сделать тп по метке?

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 ищи.

F_Time
02.03.2016, 22:26
ну ответьте

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

F_Time
02.03.2016, 22:34
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.

Тогда ставь интервал для чтения и записи.

Harch
03.03.2016, 10:22
Как определить, находится ли человек в поезде?

Как сделать дисконнект без краша ГТА?

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");

}

Harch
03.03.2016, 16:41
Там как-то стоит скобка неправильно. Как ни расставлял - не работает.

Harch
03.03.2016, 16:59
Сделал так:

Код:






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;
}

FordeD
04.03.2016, 15:11
Я же тебе это описал же
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.

FordeD
04.03.2016, 18:02
Индефикатор идет первым. И у тебя в скане уже ошибка. Ты число в чар записываешь? Нахрена?


нет, буква соответственно чар, а цифра имеет интовский тип

закомпилил этот код:

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
Как получить кол-во хп у игрока ? т.е у меня.

fragma
04.03.2016, 21:47
Как получить кол-во хп у игрока ? т.е у меня.



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
Вторым байтом идет ид игрока, который отправил пакет

FordeD
04.03.2016, 23:44
Свич работает с числами только. Лучше сканф заменить на регулярки и рабоать с std::string вместо чара. Практичнее в разы.



Туплю как всегда,что за регулярки?

Я все время со сканфом делал все ...

Dark_Knight
04.03.2016, 23:58
Туплю как всегда,что за регулярки?
Я все время со сканфом делал все ...


Регулярные выражения. Намного лучше сканф.

FordeD
05.03.2016, 00:24
Регулярные выражения. Намного лучше сканф.


Можешь пример получения данных написать?

Woofing Giraffe
05.03.2016, 05:04
Как читать параметры из RPC ? Типо params->bitStream->Read() но RPC.


Тоже самое, но не читаешь ID пакета. У пакета в начале стоит его ID, а у RPC этого нет

itsLegend
05.03.2016, 12:06
Обойтись без цикла.

FordeD
05.03.2016, 12:30
Обойтись без цикла.


Если не трудно то можешь показать пример регулярного выражения для получения данных с ввода?

itsLegend
05.03.2016, 12:52
Их нужно составлять по примеру ввода.

FordeD
05.03.2016, 13:16
Их нужно составлять по примеру ввода.



/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$)"))

Tray228
05.03.2016, 14:50
как называется рпц которые показывает от кого пришел дамаг и по кому я нанес

Dark_Knight
05.03.2016, 14:53
как называется рпц которые показывает от кого пришел дамаг и по кому я нанес


GiveTakeDamage. Он входящий и исходящий. Не на всех серверах он юзается

SR_team
05.03.2016, 14:59
GiveTakeDamage. Он входящий и исходящий. Не на всех серверах он юзается


как это не на всех?

Tray228
05.03.2016, 15:36
Как удалить перезарядку у shotgun'a

Gabriel__
05.03.2016, 16:20
Обойтись без цикла.


Как обойтись ?? Как ты себе это представляешь ???

FordeD
05.03.2016, 17:02
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()

Tray228
05.03.2016, 18:23
Как удалить перезарядку у 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.


Я тебе дал пример. Как в коллбеках юзать таймер. Дальше уже разбирайся сам. В СФ плагинах нельзя юзать таймеры через вайл в основном потоке.

FordeD
06.03.2016, 11:07
Я вроде как получил регулярку но, мне нужно получить 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. Они функциональнее.

FordeD
06.03.2016, 13:37
Зачем тебе чар, когда у тебя есть 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. Они функциональнее.


Спасибо, сейчас буду пробовать

AWRage
06.03.2016, 14:54
Небольшая проблема с рендером текстуры.

Вообщем, есть текстура 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

Tray228
07.03.2016, 01:51
Как можно ускорить перезарядку у шотгана, то есть его щелчок после каждого выстрела.

Ice
07.03.2016, 05:01
как получить векторы камеры?

SR_team
07.03.2016, 09:40
Код:






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);

};

SR_team
07.03.2016, 09:42
Небольшая проблема с рендером текстуры.
Вообщем, есть текстура 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





у директИкса есть всякие флаги для обработки текстур. Поигугли.

Tray228
07.03.2016, 14:35
02E0: actor $PLAYER_ACTOR firing_weapon аналог в SF API есть?

Tray228
07.03.2016, 15:32
Почему не убирается перезарядка?

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.

Tray228
07.03.2016, 15:59
Бли, хватит флудить здесь этим вопросом.
В крайнем случае можешь применить класс 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 и т.п.

Tray228
07.03.2016, 16:32
Для чего? Если прям трясьот, что нельзя юзать Sleep в mainloop, используй CreateThread, std::thread, _beginthread и т.п.


Толку 0, не работает

Я таймер заюзал, все равно не пашет

itsLegend
07.03.2016, 16:33
Толку 0, не работает


А должно?

Tray228
07.03.2016, 16:35
А должно?


Ну смысл кода, что он просто убирает перезарядку у шотгана, но это не происходит

Dark_Knight
07.03.2016, 17:00
Ну так сам думай и пробуй

FordeD
07.03.2016, 17:15
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 не покатит в многих случаях.

FordeD
07.03.2016, 18:05
Этот класс вообще странный.
Для начала - после создания необходимо получить указатель на C3DMarker(который возвращается при создании). Функции CreateMarker по барабану какую позицию ты указал, тебе придется снова установить её: C3DMarker::SetPosition(CVector*);
Потом в цикле C3DMarker::SetActive();

Насчет Z координаты - её тоже нужно указать. 0.0 не покатит в многих случаях.


Я нуб, как указатель пишется? ))

itsLegend
07.03.2016, 18:06
C3DMarker* pointer;

FordeD
07.03.2016, 18:16
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);

FordeD
07.03.2016, 18:36
Бли.
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 месяца.

Tray228
07.03.2016, 20:45
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 лучше.

Tray228
07.03.2016, 21:37
Используй 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д маркеров такой же.

Harch
08.03.2016, 14:31
Ребят, ну помогите уже кто-нибудь, неужели дисконнект нельзя нормально сделать? 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;
};




Проблема в том что цвет ника меняет только в табе, а в игре цвет остается тем же.

SR_team
10.03.2016, 20:37
Ребят, ну помогите уже кто-нибудь, неужели дисконнект нельзя нормально сделать? 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
)
;
}

SR_team
10.03.2016, 20:42
Код:






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;
};




Проблема в том что цвет ника меняет только в табе, а в игре цвет остается тем же.


В собе есть функция чтения цвета ника, возьми ее из вместо чтения запиши свой цвет

Tray228
10.03.2016, 21:28
Помогите ребят, поставил на ноутбук 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;
};




Проблема в том что цвет ника меняет только в табе, а в игре цвет остается тем же.


Ты не передаешь серверу данные о цвете, только он тебе.

Enjoy
10.03.2016, 21:55
сделал какую-то парашу, при попытке отправить 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);

SR_team
10.03.2016, 22:13
Помогите ребят, поставил на ноутбук 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
Ты не передаешь серверу данные о цвете, только он тебе.


В смысле я должен эмулировать принятие пакета?

Enjoy
10.03.2016, 22:18
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 и вылетало. Жопой ошибки правлю походу.

Tray228
10.03.2016, 22:32
тебе необходимо установить microsoft visual c++ redistributable 2015



http://s11.radikal.ru/i183/1603/a1/8db1539f5319.png

mac
10.03.2016, 23:59
http://s11.radikal.ru/i183/1603/a1/8db1539f5319.png


Удали - установи

AWRage
11.03.2016, 00:22
хех. Помню проснулся в понедельник, потому что мне снилось, что ты вокруг меня ходил и заебывал этой проблемой, и я решил проверить ее и если что пофиксить, написал код, и он оказался рабочим. Понимаешь, из-за того, что ты тут флудишь не существующей проблемой ты заебал меня даже во сне!
Вот кусок кода, он полностью рабочий, но себе ты его все равно не прикрутишь, ибо ему нужна последняя версия !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?

SR_team
11.03.2016, 10:09
Для чего тут ConnecInfo? Это объявление структуры stConnectInfo?


да

Tray228
11.03.2016, 15:53
Как сделать проверку что мой актер находися в машине или на мото

Enjoy
11.03.2016, 16:25
Как сделать проверку что мой актер находися в машине или на мото


Вроде должно работать.

Код:






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);

Tray228
11.03.2016, 20:41
какой нужен рпц для спавна кара

AWRage
11.03.2016, 20:42
Как получить позиции костей игрока в стриме? В структура 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"
,
?
,
?
,
?
)
;
}
}

Tray228
11.03.2016, 21:16
Как создать машину, например elegy

Enjoy
11.03.2016, 22:35
Как получить позиции костей игрока в стриме? В структура 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);




В общем тести.

AWRage
11.03.2016, 23:02
Здраститя, там же закоментировано, что может принимать 4 параметра.
Имеет структуру

Код:






- float height
- float front/back
- float left/right
- void* pObject




А вообще, я вот тут посмотрел и мне кажется, что это ближе к твоему вопросу:

Код:






CVector vec;
PEDSELF->GetBonePosition(eBone::BONE_HEAD, &vec);




В общем тести.


Оно то ближе, но мне нужно получить не координаты костей своего игрока, а других, а я хз как получить CPed другого игрока. Мб знаешь?

А по поводу того, что функция принимает 4 параметра, так у меня компиль ругается.

AWRage
13.03.2016, 00:34
Вообщем, я так и не понял, как получить координаты кости другого игрока, не локального. Если кто поможет, буду очень признателен.

Woofing Giraffe
13.03.2016, 20:06
Ты не передаешь серверу данные о цвете, только он тебе.


Можешь объяснить подробнее? Как мне передать данные о цвете серверу?

AWRage
13.03.2016, 20:15
Можешь объяснить подробнее? Как мне передать данные о цвете серверу?


Он, наверное, имел ввиду, что ты не можешь передать данные о цвете своего клиста.

Woofing Giraffe
13.03.2016, 20:26
Он, наверное, имел ввиду, что ты не можешь передать данные о цвете своего клиста.


Дак прикол в том что если эмулировать принятие пакета, то всё нормально, а если просто изменить цвет во входящем, то красится только в табе

Tray228
14.03.2016, 16:18
как можно заставить сервер думать что ты умер и остаешься мёртвым после летального выстрела?

AWRage
14.03.2016, 16:52
как можно заставить сервер думать что ты умер и остаешься мёртвым после летального выстрела?


Никак.

Tray228
16.03.2016, 14:49
А есть такой рпц который получает скорость машин игроков со всего сервера

AWRage
16.03.2016, 16:51
А есть такой рпц который получает скорость машин игроков со всего сервера


..\Sanny Builder 3\data\sa->SF

Dark_Knight
16.03.2016, 16:59
..\Sanny Builder 3\data\sa->SF


Вообще нет такого РПЦ. Нужно через пакеты считывать вектор скорости и уже по ним считать.

AWRage
16.03.2016, 17:13
Вообще нет такого РПЦ. Нужно через пакеты считывать вектор скорости и уже по ним считать.


Ну, в файле SF там все РПЦ. И он просит скорость всех машин на сервере, это вроде невозможно. Только в зоне стрима.

AWRage
16.03.2016, 17:32
Как только вызываю эту функцию - виснет игра, если закомментировать проверки на нажатие клавиши, то все работает нормально. *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 глобально и не ебись.

Tray228
18.03.2016, 00:17
я конечно понимаю что пиздец вопрос, но почему он проверку игнорит

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), ету?

Tray228
18.03.2016, 01:22
какую проверку
if(VK_LBUTTON), ету?


Да

itsLegend
18.03.2016, 01:24
Да


А что ты от неё хотел? Она должна возвращать true или false. Сравни с чем-нибудь, к примеру.

AWRage
18.03.2016, 01:33
Да


VK_LBUTTON == true. Вот и срабатывает всегда.

Dark_Knight
18.03.2016, 05:00
VK_LBUTTON == true. Вот и срабатывает всегда.


VK_LBUTTON это макрос и ВС тебя на*** пошлет с такой переменной. Если ты хочешь булевую переменную проверять, то его проверка тоже подойдет, а вообще надо эму проверять зажатость клавиш(IsDown) или нажатость(IsPressed) в классe CGame

Tray228
18.03.2016, 10:50
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

Tray228
18.03.2016, 12:40
http://risovach.ru/upload/2016/03/mem/mart_108712173_orig_.jpg


***ню сморозил xDD

Tray228
18.03.2016, 12:46
А реально поменять цвет ника над головой?

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;
};




Проблема в том что цвет ника меняет только в табе, а в игре цвет остается тем же.


Бля, ну помогите(

SR_team
18.03.2016, 13:05
Бля, ну помогите(


в собе есть функция. возьми ее и используй. В новом сф тоже будет такая функция

AWRage
18.03.2016, 17:54
Можно ли получить клавишу, которая зажата. Пробовал getch(), GetKeyState(), без результата.

Dark_Knight
18.03.2016, 18:01
WndProcc HOOK

Tray228
18.03.2016, 18:25
Как отправить урон с кулака, дилдо и т.д

ЯedЯuM
18.03.2016, 22:19
Как отправить урон с кулака, дилдо и т.д


Если чисто на синхре то шли онфут пакет с позицией в метре от жертвы и разворачивай себя точно в её сторону(там это на кватернионах по этому прийдеться высчитывать) Ставишь ид анимки удара и соотвествующий флаг к ней. И лучше после этого послать 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()->

Tray228
20.03.2016, 14:39
как отправить сообщение на сервер без RPC

з.ы в клео можно было как-то.

itsLegend
20.03.2016, 15:00
как отправить сообщение на сервер без RPC
з.ы в клео можно было как-то.


SF->getSAMP()->getPlayers()->pLocalPlayer->Say();

Что-то вроде

AWRage
20.03.2016, 15:00
Можно как-то узнать высоту форматированного текста? *pFont->Height не подойдет, так как оно возвращает высоту одной строки, а у меня текст форматированный, с переходом на новую строку.

itsLegend
20.03.2016, 15:09
С переходами вряд ли.

Рендери отдельно строки убрав в них символ перехода

Dark_Knight
20.03.2016, 15:29
Считаешь количество \n +1 и умножаешь на хеигхт.

AWRage
20.03.2016, 15:47
С переходами вряд ли.
Рендери отдельно строки убрав в них символ перехода


Ну, можно и так.



Считаешь количество \n +1 и умножаешь на хеигхт.


Или так.

Tray228
20.03.2016, 21:45
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

Tray228
22.03.2016, 15:33
Как проверить что игрок стреляет ? Помогите!
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();