PDA

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


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

Dark_Knight
05.08.2015, 08:08
{FF0000}Red{00ff00}Green{0000FF}Blue

CissCass
05.08.2015, 18:50
Подскажите,пожалуйста, как написать в консоль свой текст

itsLegend
05.08.2015, 19:02
SF->LogConsole("text");

CissCass
06.08.2015, 10:41
Можно ли как нибудь проверить получил ли я урон и от кого этот урон?

Dark_Knight
06.08.2015, 18:07
GiveTakeDamage or BULLET SYNC

CissCass
07.08.2015, 21:05
Код:






#define FUNC_IsLineOfSightClear 0x56A490

bool GTAfunc_IsLineOfSightClear(CVector *vecStart, CVector *vecEnd, bool bCheckBuildings, bool bCheckVehicles, bool bCheckPeds, bool bCheckObjects, bool bCheckDummies, bool bSeeThroughStuff, bool bIgnoreSomeObjectsForCamera)
{
DWORD dwFunc = FUNC_IsLineOfSightClear;
bool bReturn = false;
__asm
{
push bIgnoreSomeObjectsForCamera
push bSeeThroughStuff
push bCheckDummies
push bCheckObjects
push bCheckPeds
push bCheckVehicles
push bCheckBuildings
push vecEnd
push vecStart
call dwFunc
mov bReturn, al
add esp, 0x24
}

return bReturn;
}

void t(shotr int id)
{
CVector *vect1;
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];
CVector *vect2;
vect2->fX = SF->getSAMP()->getPlayers()->pRemotePlayer[id]->pPlayerData->onFootData.fPosition[0];
vect2->fY = SF->getSAMP()->getPlayers()->pRemotePlayer[id]->pPlayerData->onFootData.fPosition[1];
vect2->fZ = SF->getSAMP()->getPlayers()->pRemotePlayer[id]->pPlayerData->onFootData.fPosition[2];
if (GTAfunc_IsLineOfSightClear(vect1, vect2, true, true,true, true, true, false, false))
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 255, 0), "LLLLt");
}




Почему при вызове GTAfunc_IsLineOfSightClear крашит?

itsLegend
07.08.2015, 21:37
В SF API есть эта функция. Зачем ты её отдельно суешь?

Код:






#include "game_api\\game_api.h"
GAME->GetWorld()->IsLineOfSightClear()

CissCass
07.08.2015, 21:54
В SF API есть эта функция. Зачем ты её отдельно суешь?

Код:






#include "game_api\\game_api.h"
GAME->GetWorld()->IsLineOfSightClear()





Не знал о ней...

Спасибо, за ответ. Теперь буду лучше проверять API

0pc0d3R
10.08.2015, 21:53
как в sf использовать это?
int len = rpcParams ? rpcParams->numberOfBitsOfData / 8 : 0;



PHP:






BitStream
bsData
(
params
-
>
bitStream
-
>
GetData
(
)
,
params
-
>
bitStream
-
>
GetNumberOfBitsUsed
(
)
/
8
,
false
)
;

itsLegend
13.08.2015, 14:00
Код:






char *szIP = SF->getSAMP()->getInfo()->szIP;
DWORD dwPort = SF->getSAMP()->getInfo()->ulPort;

fanta
13.08.2015, 21:48
Захожу с упавшим фпс, потом крашит, в чем проблема?

Код:






bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
CONST RGNDATA *pDirtyRegion)
{
int myidd = SF->getSAMP()->getPlayers()->sLocalPlayerID;
int myclist = SF->getSAMP()->getPlayers()->GetPlayerColor(myidd);
stFontInfo *pFont;
pFont = SF->getRender()->CreateNewFont("Tahoma", 12, FCR_BORDER);

if (SUCCEEDED(SF->getRender()->BeginRender()))
{

if (SF->getGame()->isKeyDown('G'))
{

pFont->Print("MyColor", myclist, 500, 500, false);

SF->getRender()->EndRender();
};
};

return true;
};

itsLegend
13.08.2015, 21:52
Потому что ты каждый раз пересоздаешь шрифт. Т.к. этот колбэк вызывается по несколько раз в секунду. Создавай его один раз, после инициализации сампа.

fanta
13.08.2015, 22:06
Потому что ты каждый раз пересоздаешь шрифт. Т.к. этот колбэк вызывается по несколько раз в секунду. Создавай его один раз, после инициализации сампа.


Создаю после инициализации сампа - pFont: необъявленный идентификатор. Вставил вроде туда.







Код:






if (!SF->getSAMP()->IsInitialized())

return;
stFontInfo *pFont;
pFont = SF->getRender()->CreateNewFont("Tahoma", 12, FCR_BORDER);

itsLegend
13.08.2015, 22:07
stFontInfo *pFont; нужно вставлять до цикла mainloop

fanta
14.08.2015, 23:30
Как получить значение хп?

itsLegend
15.08.2015, 00:06
Как получить значение хп?


Уточняй кого именно.

Код:






actor_info *actor = SF->getGame()->actorInfoGet(-1, ACTOR_ALIVE);
actor->hitpoints = 50.0f;

fanta
15.08.2015, 16:49
И снова здрасьте, после смерти идет краш, с чем это связано?

Код:






bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
CONST RGNDATA *pDirtyRegion)
{
int myidd = SF->getSAMP()->getPlayers()->sLocalPlayerID;
int myclist = SF->getSAMP()->getPlayers()->GetPlayerColor(myidd);
const char* myname = SF->getSAMP()->getPlayers()->GetPlayerName(myidd);
int myhp = SF->getGame()->actorInfoGet(-1, ACTOR_ALIVE)->hitpoints;
int myar = SF->getGame()->actorInfoGet(-1, ACTOR_ALIVE)->armor;

if (SUCCEEDED(SF->getRender()->BeginRender())) // если девайс готов к рисованию
{
char buf[256];
sprintf(buf, "%s[%d] {FF0000}%i {FFFFFF}%i", myname, myidd, myhp, myar);

if (SF->getGame()->isKeyDown('R'))
{


pFont->Print( buf, myclist, 10, 550, false); // рисуем 1 - широта, 2 - высота

SF->getRender()->EndRender(); // завершаем рисование
};
};

return true; // возвращаем положительный результат
};

itsLegend
15.08.2015, 17:06
Возможно, что при actorInfoGet возвращается недействительный handle игрока(т.к. флаги выставлены так, что хендл будет возвращаться только тогда, когда игрок жив).

Либо необходимо убрать флаги, либо проверять возвращаемое значение actorInfoGet на неравенство нулю.

Dark_Knight
15.08.2015, 17:16
if (SF->getGame()->isKeyDown('R') &&

SF->getGame()->actorInfoGet(ACTOR_ALIVE, ACTOR_ALIVE)

)

fanta
15.08.2015, 17:33
if (SF->getGame()->isKeyDown('R') &&
SF->getGame()->actorInfoGet(ACTOR_ALIVE, ACTOR_ALIVE)
)


Так отказывается рендерить, если я жив.

0pc0d3R
15.08.2015, 19:36
Так отказывается рендерить, если я жив.



PHP:






if
(
SF
-
>
getGame
(
)
-
>
isKeyDown
(
'R'
)
&&
PEDSELF
-
>
GetHealth
(
)
>
0
)

Dark_Knight
15.08.2015, 21:15
Замени на это

SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE) != nullptr

fanta
16.08.2015, 00:12
Замени на это
SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE) != nullptr


Так крашит при смерти.

Dark_Knight
16.08.2015, 11:15
Так крашит при смерти.



Код:






bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)
{
if (SUCCEEDED(SF->getRender()->BeginRender())) // если девайс готов к рисованию
{
if (SF->getGame()->isKeyDown('R'))
{
struct actor_info *self = SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE);
if (self != NULL)
{
stPlayerPool *pPool = SF->getSAMP()->getPlayers();
int iPlayerID = pPool->sLocalPlayerID;
char buf[256] = {0};

sprintf(buf, "%s[%d] {FF0000}%d {FFFFFF}%d", pPool->GetPlayerName(iPlayerID), pPool->sLocalPlayerID, self->hitpoints, self->armor);
pFont->Print(buf, pPool->GetPlayerColor(iPlayerID), 10, 550, false); // рисуем 1 - широта, 2 - высота
}
}
SF->getRender()->EndRender(); // завершаем рисование
};
return true; // возвращаем положительный результат
};

Woofing Giraffe
21.08.2015, 07:14
http://i.imgur.com/1mbA7uu.jpg

Что за фигня?

urShadow
21.08.2015, 08:10
Продублирую ответ из чата на случай если у кого-то еще возникнет такая проблема.

Код:






#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS




В начало файла.

return
22.08.2015, 18:43
Как сделать чтоб команда приминала несколько параметров?

0pc0d3R
23.08.2015, 14:38
Как сделать чтоб команда приминала несколько параметров?



PHP:






#include
void __stdcall
CommandCallback
(
std
:
:
string param
)
{
std
:
:
stringstream
prm
(
param
)
;
int type
=
0
,
parametr
=
0
;
prm
>
>
type
>
>
parametr
;
}

kemperrr
24.08.2015, 20:23
Кто ни будь решил проблему с эмуляцией клавиш?

DarkExorcist
24.08.2015, 21:25
А можно ли сделать ноп на входящие RPC?

0pc0d3R
24.08.2015, 21:32
А можно ли сделать ноп на входящие RPC?


Да. Зарегай ракнет хук с типом RAKNET_HOOK_TYPE_INCOMING_RPC и в нём лови которые нужно, return false и пакет не пропустит.

DarkExorcist
24.08.2015, 22:57
Да. Зарегай ракнет хук с типом RAKNET_HOOK_TYPE_INCOMING_RPC и в нём лови которые нужно, return false и пакет не пропустит.


а можно как-то отправить серверу пакет о пустой анимации, ну что у моего актера нет анимации?

return
31.08.2015, 00:32
Почему не показывает админов в сети?

PHP:






void
AdminsChecker
(
)
{
if
(
admins
)
{
char admin_name
[
300
]
[
300
]
;
FILE
*
file
;
char path
[
512
]
;
sprintf
(
path
,
"SAMPFUNCS\\admins.ini"
)
;
file
=
fopen
(
path
,
"r"
)
;
if
(
file
)
{
for
(
int i
=
0
;
i

getSAMP
(
)
-
>
getPlayers
(
)
-
>
iIsListed
!=
0
)
continue
;
if
(
SF
-
>
getSAMP
(
)
-
>
getPlayers
(
)
-
>
pRemotePlayer
==
NULL
)
continue
;
for
(
int x
=
0
;
x

getSAMP
(
)
-
>
getPlayers
(
)
-
>
GetPlayerName
(
i
)
==
NULL
||
admin_name
[
x
]
==
NULL
)
break
;
if
(
!
strcmp
(
SF
-
>
getSAMP
(
)
-
>
getPlayers
(
)
-
>
GetPlayerName
(
i
)
,
admin_name
[
x
]
)
)
{
char buf
[
64
]
;
sprintf
(
buf
,
"%s [ID: %d]"
,
SF
-
>
getSAMP
(
)
-
>
getPlayers
(
)
-
>
GetPlayerName
(
i
)
,
i
)
;
pFont
-
>
Print
(
buf
,
D3DCOLOR_ARGB
(
255
,
255
,
165
,
0
)
,
1
,
SF
-
>
getRender
(
)
-
>
getPresentationParameters
(
)
-
>
BackBufferHeight
-
360
+
count
*
20
,
false
)
;
count
++
;
}
}
}
if
(
count
==
0
)
pFont
-
>
Print
(
"Администраторов в сети нету"
,
D3DCOLOR_ARGB
(
255
,
255
,
165
,
0
)
,
1
,
SF
-
>
getRender
(
)
-
>
getPresentationParameters
(
)
-
>
BackBufferHeight
-
45
,
false
)
;
}
}

Sire Like
31.08.2015, 01:06
LEL, у слонобоя код спиздил)

return
31.08.2015, 02:26
LEL, у слонобоя код спиздил)


лел.

эт тоже не его код =)

https://www.blast.hk/threads/1549/

Sire Like
31.08.2015, 09:07
лел.
эт тоже не его код :)

https://www.blast.hk/threads/1549/


блина, знач он сам не мог написать

0pc0d3R
31.08.2015, 09:26
а можно как-то отправить серверу пакет о пустой анимации, ну что у моего актера нет анимации?


в онфут синхре нопай AnimId и AnimFlag, чтобы узнать какие значения туда вогнать, выведи их себе в сообщение допустим и запиши нормальные.

Woofing Giraffe
31.08.2015, 15:19
В чем ошибка?

http://ssmaker.ru/45a03149.png



Код:






#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS




В самое начало кода.

Woofing Giraffe
31.08.2015, 15:40
Теперь одна ошибка осталась

http://SSMaker.ru/a9e7730b.png


В самое начало. На 1 строчку.

Woofing Giraffe
31.08.2015, 16:14
Как сделать чтобы через две секунды после загрузки samp, в чат отправилось сообщение?


Если есть в скрипте цикл, поставь проверку на интилизацию сампа, перед ней задержку 2 сек.

Sire Like
31.08.2015, 16:21
if (SF->getSAMP()->IsInitialized())

Woofing Giraffe
31.08.2015, 18:24
SF->getSAMP()->getChat()->AddChatMessage()

Woofing Giraffe
31.08.2015, 18:28
Как сделать что-то типо wait`a? Когда использую sleep оно стопит весь скрипт, а мне нужно отдельную функцию.

Dark_Knight
31.08.2015, 20:27
GetTicketCount в помощь.

return
31.08.2015, 20:58
Почему не показывает админов в сети?




PHP:






void
AdminsChecker
(
)
{
if
(
admins
)
{
char admin_name
[
300
]
[
300
]
;
FILE
*
file
;
char path
[
512
]
;
sprintf
(
path
,
"SAMPFUNCS\\admins.ini"
)
;
file
=
fopen
(
path
,
"r"
)
;
if
(
file
)
{
for
(
int i
=
0
;
i

getSAMP
(
)
-
>
getPlayers
(
)
-
>
iIsListed
!=
0
)
continue
;
if
(
SF
-
>
getSAMP
(
)
-
>
getPlayers
(
)
-
>
pRemotePlayer
==
NULL
)
continue
;
for
(
int x
=
0
;
x

getSAMP
(
)
-
>
getPlayers
(
)
-
>
GetPlayerName
(
i
)
==
NULL
||
admin_name
[
x
]
==
NULL
)
break
;
if
(
!
strcmp
(
SF
-
>
getSAMP
(
)
-
>
getPlayers
(
)
-
>
GetPlayerName
(
i
)
,
admin_name
[
x
]
)
)
{
char buf
[
64
]
;
sprintf
(
buf
,
"%s [ID: %d]"
,
SF
-
>
getSAMP
(
)
-
>
getPlayers
(
)
-
>
GetPlayerName
(
i
)
,
i
)
;
pFont
-
>
Print
(
buf
,
D3DCOLOR_ARGB
(
255
,
255
,
165
,
0
)
,
1
,
SF
-
>
getRender
(
)
-
>
getPresentationParameters
(
)
-
>
BackBufferHeight
-
360
+
count
*
20
,
false
)
;
count
++
;
}
}
}
if
(
count
==
0
)
pFont
-
>
Print
(
"Администраторов в сети нету"
,
D3DCOLOR_ARGB
(
255
,
255
,
165
,
0
)
,
1
,
SF
-
>
getRender
(
)
-
>
getPresentationParameters
(
)
-
>
BackBufferHeight
-
45
,
false
)
;
}
}








хелп плес

Woofing Giraffe
31.08.2015, 21:14
И ещё, как сделать что-то типо опкода get_chat_string? Мне нужен только текст.

FYP
31.08.2015, 22:55
И ещё, как сделать что-то типо опкода get_chat_string? Мне нужен только текст.


SF->getSAMP()->getChat()->chatEntry[id].szText

Woofing Giraffe
01.09.2015, 09:14
В общем, пытаюсь сделать что-то типо wait`а, вот что я делаю

Код:






GetLocalTime(&tm);
time666 = (tm.wHour * 3600) + (tm.wMinute * 60) + (tm.wSecond);
Zagruzka();




Это вставляю в main, далее

Код:






void CALLBACK Zagruzka()
{
while (true)
{
GetLocalTime(&tm);
int time777 = (tm.wHour * 3600 + tm.wMinute * 60 + tm.wSecond) - time666;
if (time777 > 6)
{
// текст
break;
}

}
}




В общем то секунды оно вычисляет правильно, но проблема в том, что с момента загрузки до 7-ой секунды тупо фризит игру. Из за чего это, или как сделать по другому?

spiceman
01.09.2015, 15:52
В общем, пытаюсь сделать что-то типо wait`а, вот что я делаю

Код:






GetLocalTime(&tm);
time666 = (tm.wHour * 3600) + (tm.wMinute * 60) + (tm.wSecond);
Zagruzka();




Это вставляю в main, далее

Код:






void CALLBACK Zagruzka()
{
while (true)
{
GetLocalTime(&tm);
int time777 = (tm.wHour * 3600 + tm.wMinute * 60 + tm.wSecond) - time666;
if (time777 > 6)
{
// текст
break;
}

}
}




В общем то секунды оно вычисляет правильно, но проблема в том, что с момента загрузки до 7-ой секунды тупо фризит игру. Из за чего это, или как сделать по другому?


ну потому что у тебя цикл блокирует все остальные действия, цикл работает, пока не пройдет 6 секунд

Woofing Giraffe
01.09.2015, 19:44
ну потому что у тебя цикл блокирует все остальные действия, цикл работает, пока не пройдет 6 секунд


А как по другому то сделать?

urShadow
01.09.2015, 19:47
Таймером.

Woofing Giraffe
02.09.2015, 17:28
я через fwrite и fopen делаю. Почитай в интернете.

Sire Like
02.09.2015, 21:19
В SAMPFUNCS API "классы" что-то типа опкодов в cleo, да? Так вот, как можно узнать эти "опкоды"? То есть я захожу в класс CGAME, и там мне надо найти какой нибуть опкод (Типа is_key_pressed и.т.д). Как их найти?


нет. Классы в С++, можешь загуглить. Можешь писать например так "SF->" и тебе будут предлагаться варианты. Дальше сам думай что тебе нужно .

Sire Like
02.09.2015, 21:36
Ну вот например: SF->getSAMP->
А как дальше узнать что писать?


неправильно прост сделал. SF->getSAMP()->

Ковычки слил ты.

Sire Like
02.09.2015, 21:45
Ну вот например: SF->getSAMP->
А как дальше узнать что писать?

Sire Like
02.09.2015, 22:03
я не знаю что такое хендл.

про переменные пиздил с гугла а то лень писать

PHP:






int a
;
// объявление переменной a целого типа.
float b
;
// объявление переменной b типа данных с плавающей запятой.
double c
=
14.2
;
// инициализация переменной типа double.
char d
=
's'
;
// инициализация переменной типа char.
bool k
=
true
;
// инициализация логической переменной k.




К примеру int a = 0;

Woofing Giraffe
02.09.2015, 22:09
Кстати, не подскажешь, как записать хендл персонажа в переменную. Да и вообще записать в переменную что-либо?



C++:






int
handle
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetActorHandleFromSAMPPlayerID
(
id
)
;

Woofing Giraffe
02.09.2015, 22:25
В данном случае вместо id писать handle


Из ID получаем хэндл и засовываем в переменную handle

Woofing Giraffe
02.09.2015, 22:27
Как телепортировать персонажа к другому игроку?
Искал в SF->getSAMP()->getPlayers(), getSamp, getCLEO, но так и не нашел.


Смотри, получаешь хэндлы обоих игроков, получаешь координаты одного из них и ставишь второго на эти координаты.

0pc0d3R
03.09.2015, 09:57
А как поставить одного из них на координаты? Хендл получил, позицию получил.



C++:






void
__stdcall
utp
(
std
::
string param
)
{
if
(
param
.
empty
(
)
)
return
;
int
i
=
std
::
stoi
(
param
)
;
actor_info
*
acter
=
SF
->
getGame
(
)
->
actorInfoGet
(
-
1
,
0x01
)
;
acter
->
base
.
matrix
[
4
*
3
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
->
fOnFootPos
[
0
]
;
acter
->
base
.
matrix
[
4
*
3
+
1
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
->
fOnFootPos
[
1
]
;
acter
->
base
.
matrix
[
4
*
3
+
2
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
->
fOnFootPos
[
2
]
;
}

Woofing Giraffe
07.09.2015, 18:10
Как сделать обработчик данных диалога?

Dark_Knight
07.09.2015, 18:47
Локального или серверного?

Woofing Giraffe
07.09.2015, 20:01
Локального или серверного?


Локального

Woofing Giraffe
07.09.2015, 21:33
Как при запуске игры нарисовать текст (render)? Я перед mainloop вставлял эту функцию рисования (Как на blasthack wiki в туториалах) и чёт не рисуется ничего.


Значит чёт не так делаешь. Сам по этим урокам начинал)

Woofing Giraffe
07.09.2015, 21:49
C++:






bool
CALLBACK
Present
(
CONST RECT
*
pSourceRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindowOverride
,
CONST RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
)
{
stFontInfo
*
pFont
;
SF
->
getRender
(
)
->
registerD3DCallback
(
eDirect3DDeviceMethods
::
D3DMETHOD_PRESENT
,
Present
)
;
pFont
=
SF
->
getRender
(
)
->
CreateNewFont
(
"Tahoma"
,
12
,
FCR_BORDER
)
;
pFont
->
Print
(
"10%"
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
500
,
500
,
false
)
;
pFont
->
Print
(
"20%"
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
500
,
500
,
false
)
;
pFont
->
Print
(
"30%"
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
500
,
500
,
false
)
;
pFont
->
Print
(
"40%"
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
500
,
500
,
false
)
;
pFont
->
Print
(
"50%"
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
500
,
500
,
false
)
;
pFont
->
Print
(
"60%"
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
500
,
500
,
false
)
;
pFont
->
Print
(
"70%"
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
500
,
500
,
false
)
;
pFont
->
Print
(
"80%"
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
500
,
500
,
false
)
;
pFont
->
Print
(
"90%"
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
500
,
500
,
false
)
;
pFont
->
Print
(
"100%"
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
500
,
500
,
false
)
;
pFont
->
Print
(
" Loaded!"
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
500
,
500
,
false
)
;
SF
->
getRender
(
)
->
EndRender
(
)
;
}
;
return
true
;
}
;
void
CALLBACK
mainloop
(
)
{
и
.
т
.
д
}




Чёт не так значит.



Код:






pFont = SF->getRender()->CreateNewFont("Tahoma", 12, FCR_BORDER);




Вот твоя ошибка. Этот callback является циклом, который выполняется несколько раз в секунду, а ты в нем регистрируешь новый шрифт. Поэтому и не запускается. Регистрируй в mainloop.



//================================================== ================================================== =========

Код:






stFontInfo *pFont;




это после инклюдов пихаешь,

Код:






bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)
{
if (SUCCEEDED(SF->getRender()->BeginRender()))
{
pFont->Print("10%", D3DCOLOR_ARGB(255, 255, 255, 0), 500, 500, false);
pFont->Print("20%", D3DCOLOR_ARGB(255, 255, 255, 0), 500, 500, false);
pFont->Print("30%", D3DCOLOR_ARGB(255, 255, 255, 0), 500, 500, false);
pFont->Print("40%", D3DCOLOR_ARGB(255, 255, 255, 0), 500, 500, false);
pFont->Print("50%", D3DCOLOR_ARGB(255, 255, 255, 0), 500, 500, false);
pFont->Print("60%", D3DCOLOR_ARGB(255, 255, 255, 0), 500, 500, false);
pFont->Print("70%", D3DCOLOR_ARGB(255, 255, 255, 0), 500, 500, false);
pFont->Print("80%", D3DCOLOR_ARGB(255, 255, 255, 0), 500, 500, false);
pFont->Print("90%", D3DCOLOR_ARGB(255, 255, 255, 0), 500, 500, false);
pFont->Print("100%", D3DCOLOR_ARGB(255, 255, 255, 0), 500, 500, false);
pFont->Print(" Loaded!", D3DCOLOR_ARGB(255, 255, 255, 0), 500, 500, false);
SF->getRender()->EndRender();
};
return true;
};




Это куда тебе надо.

Код:






SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMET HOD_PRESENT, Present);
pFont = SF->getRender()->CreateNewFont("Tahoma", 12, FCR_BORDER);




А это в мэйн. У меня работает.

Woofing Giraffe
07.09.2015, 22:03
Да, спасибо, помогло. А как сделать что бы первый текст появился -> через секунду исчез -> появился второй текст -> исчез -> появился следующий текст -> исчез. И так что бы до последнего текста было. (Типа как загрузка плагина).


Сам не могу понять как сделать типо wait`a, если делаю циклом, скрипт стопит, если sleep, опять же стоп, вроде как с таймером надо попробовать, но я не разобрался как.

White_116
07.09.2015, 22:53
Сам не могу понять как сделать типо wait`a, если делаю циклом, скрипт стопит, если sleep, опять же стоп, вроде как с таймером надо попробовать, но я не разобрался как.



Колхозный вариант.




Код:






char load_percent_text[11][] = { "0%", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "100%" };
char load_percen = 0;

bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)
{
if (SUCCEEDED(SF->getRender()->BeginRender()))
{
static stFontInfo *pFont = NULL;
if (pFont == NULL)
{
pFont = SF->getRender()->CreateNewFont("Tahoma", 12, FCR_BORDER);
if (pFont == NULL) //WTF? Exit if not created
{
SF->getRender()->EndRender();
return true;
}
}

static int load_time = GetTickCount();
if (load_percen Print(LoadPercentText[load_percen], D3DCOLOR_ARGB(255, 255, 255, 0), 500, 500, false);
}
else if (load_percen == 11)
{
if (load_time Print(" Loaded!", D3DCOLOR_ARGB(255, 255, 255, 0), 500, 500, false);
}

SF->getRender()->EndRender();
};

return true;
};

CissCass
08.09.2015, 12:57
Сам не могу понять как сделать типо wait`a, если делаю циклом, скрипт стопит, если sleep, опять же стоп, вроде как с таймером надо попробовать, но я не разобрался как.


Можешь воспользоваться примером выше, либо создать поток и в нем в нужном месте юзать sleep, тогда фризить не будет

Dark_Knight
08.09.2015, 14:30
Как можно подключить AntTweakBar к плагину?


Подключаешь инклуду и либу и работаешь. Обьявляешь.

Код:






TwBar *twBar_Main = nullptr;




В маинлуп

Код:






if (!TwInit(TW_DIRECT3D9, SF->getRender()->getD3DDevice()))
return;
twBar_Main = TwNewBar("Main");




Ну а дальше уже юзаешь документацию по нем.

Woofing Giraffe
08.09.2015, 17:58
Как сделать обработчик данных диалога?





Локального

0pc0d3R
08.09.2015, 20:53
слип в хуке или команде вызвет геймфриз, создай новый поток и вызывай с него метод, а у нем можешь уже слип юзать как альтернативу вейту.

0pc0d3R
08.09.2015, 22:57
Как можно использовать вот это:



C++:






actor_info
*
acter
=
SF
->
GetGame
(
)
->
actor_info_get
(
-
1
,
0x1
)
;
acter
->
base
.
matrix
[
4
*
3
]
=
x
;
acter
->
base
.
matrix
[
4
*
3
+
1
]
=
y
;
acter
->
base
.
matrix
[
4
*
3
+
2
]
=
z
;




А вообще это давний способ теперь более удобный через мта классы есть для себя PEDSELF->Teleport

0pc0d3R
08.09.2015, 23:08
А как можно пополнить себе хп?


acter->hitpoints вроде бы, но в мта классах должно подобное быть поройся.

0pc0d3R
08.09.2015, 23:10
а где "мта классы" найти?


набери PEDSELF-> и там смотри, найдешь весь функционал для работы из собой GAME-> уже куда глобальнее там тож дофига всего вообщем ройся ищи

Woofing Giraffe
08.09.2015, 23:38
Йобана, как сделать обработчик локального диалога? Ну типо if samp_dialog_respond в cleo

Woofing Giraffe
08.09.2015, 23:41
слип в хуке или команде вызвет геймфриз, создай новый поток и вызывай с него метод, а у нем можешь уже слип юзать как альтернативу вейту.


Такой вопрос, как создать новый поток?)

urShadow
08.09.2015, 23:52
Ты бы сперва статьи какие нибудь по C++ почитал, потом бы уже спрашивал. Эта тема касается только SAMPFUNCS API.

0pc0d3R
08.09.2015, 23:52
Такой вопрос, как создать новый поток?)



C++:






DWORD ThreadID
;
HANDLE hThread
;
void
__stdcall
AnotherThread
(
void
)
{
Sleep
(
500
)
;
TerminateThread
(
hThread
,
0
)
;
CloseHandle
(
hThread
)
;
}
hThread
=
CreateThread
(
NULL
,
0
,
(
LPTHREAD_START_ROUTINE
)
&
AnotherThread
,
NULL
,
0
,
&
ThreadID
)
;






Йобана, как сделать обработчик локального диалога? Ну типо if samp_dialog_respond в cleo


SF->getSAMP()->registerDialogCallback(OnDialogResponse); в маинлуп

C++:






void
CALLBACK
OnDialogResponse
(
int
dialogId
,
int
buttonId
,
int
listItem
,
const
char
*
input
)
{
}

fanta
09.09.2015, 15:49
Как вызвать опкод, в котором уже имеются кавычки? Например 0AF9: samp say_msg "lol"

Sire Like
09.09.2015, 15:56
Как вызвать опкод, в котором уже имеются кавычки? Например 0AF9: samp say_msg "lol"


SF->getCLEO()->callOpcode("0AF9: samp say_msg \"lol\"");

Можно так SF->getSAMP()->getPlayers()->pLocalPlayer->Say("lol");

0pc0d3R
09.09.2015, 18:28
ReadSAMPMemory, SAMP.WriteSAMPMemory
Где найти в API их найти?


Нагугли тему в гуле C++ работа с памятю. WritProccessMemory & ReadProccesMemory.

itsLegend
09.09.2015, 22:18
В isKeyPressed передается параметр с типом byte. Тебе нужно "конвертировать" клавишу в её ид. Можешь через массив или ещё как-нибудь.

В собейте есть такая функция: static int key_lookup ( const char *name ) (https://github.com/BlastHackNet/mod_s0beit_sa/blob/957b2ec683777a0face802f8c6645559c326c150/src/ini.cpp#L176), может возникнет собственная идея...

DarkExorcist
11.09.2015, 21:52
056D: actor 11@ defined

есть ли в СФ аналог?

0pc0d3R
11.09.2015, 22:06
056D: actor 11@ defined
есть ли в СФ аналог?


if (SF->getSAMP()->getPlayers()->IsPlayerDefined(playerid, true)) чекает в стриме ли игрок с таким идом. false - игнорировать стрим.

DarkExorcist
11.09.2015, 22:42
Можно ли вызвать опкод в условии плагина?

Sire Like
11.09.2015, 22:53
Можно ли вызвать опкод в условии плагина?


Что мешает попробовать самому?

0pc0d3R
11.09.2015, 22:56
Можно ли вызвать опкод в условии плагина?


SF->getCLEO()->callOpcode("0001: wait 0 ms"); // вот тебе пример) синтаксис опкодов таков как и у сб.

DarkExorcist
12.09.2015, 21:30
SF->getGame()->convert3DCoordsToScreen

переводит так же как и

0AB1: call_scm_func @getScreenXYFrom3DCoords

или же он переводит к разрешению экрана, а не к игровому?

0pc0d3R
12.09.2015, 22:27
SF->getGame()->convert3DCoordsToScreen
переводит так же как и
0AB1: call_scm_func @getScreenXYFrom3DCoords
или же он переводит к разрешению экрана, а не к игровому?


SF->getGame()->convert3DCoordsToScreen - конвертирует координаты из трехмерного пространства в плоские для екрана.

а вторая с клео тоже вроде, и да обе переводят игровые в екранные.

Woofing Giraffe
13.09.2015, 06:58
Код:






if (dialogId == 9437)
{
if (buttonId == 1)
{
carid = atoi(input);
SF->getSAMP()->getChat()->AddChatMessage(-1, "%d", carid);
SF->getSAMP()->getDialog()->ShowDialog(9439, 2, "kek", "1\n2", "Выбор", "Отмена");
}
}




Обработчик работает, сообщение выводит, а следующий диалог не отображает.

Woofing Giraffe
13.09.2015, 08:12
И как установить facingAngle?

FYP
13.09.2015, 10:40
Код:






if (dialogId == 9437)
{
if (buttonId == 1)
{
carid = atoi(input);
SF->getSAMP()->getChat()->AddChatMessage(-1, "%d", carid);
SF->getSAMP()->getDialog()->ShowDialog(9439, 2, "kek", "1\n2", "Выбор", "Отмена");
}
}




Обработчик работает, сообщение выводит, а следующий диалог не отображает.


в калбэке нельзя показывать новый диалог - это проблема сф. сделай по примеру NoCollision, он с исходником.

Woofing Giraffe
13.09.2015, 10:42
в калбэке нельзя показывать новый диалог - это проблема сф. сделай по примеру NoCollision, он с исходником.


Попробую. А как установить поворот лица не подскажешь?) По типу







Код:






0173: set_actor $PLAYER_ACTOR Z_angle 0@

FYP
13.09.2015, 10:51
C++:






actor_info
*
self
=
actorInfoGet
(
ACTOR_SELF
,
0
)
;
self
->
fCurrentRotation
=
self
->
fTargetRotation
=
rotation
;




используя Game API:

C++:






PEDSELF
->
SetCurrentRotation
(
rotation
)
;
PEDSELF
->
SetTargetRotation
(
rotation
)
;

DarkExorcist
13.09.2015, 15:15
SF->getGame()->convert3DCoordsToScreen - конвертирует координаты из трехмерного пространства в плоские для екрана.
а вторая с клео тоже вроде, и да обе переводят игровые в екранные.


Я немного другое имел ввиду. Они переводят в экранные под разрешение экрана, или под те, с которыми обычно работает игра(600х480 вроде).

Woofing Giraffe
13.09.2015, 15:17
Код:






char intext[128];
sprintf(intext, "%s", input);
char * pch = strtok(intext, " ");
while (pch != NULL)
{
if (*one = '\0')
{
sprintf(one, "%s", pch);
SF->getSAMP()->getChat()->AddChatMessage(-1, one);
oone = atoi(one);
}
else
{
sprintf(two, "%s", pch);
SF->getSAMP()->getChat()->AddChatMessage(-1, two);
ttwo = atoi(two);
activation = true;
}
sprintf(textcmd, " %d %d %d", carid, oone, ttwo);
pch = strtok(NULL, " ");
}




Почему carid и ttwo записывает как надо, а oone - 0? Хотя оно 5. Сначала отображается 5, а потом когда в кмд получаешь значение оно 0.

DarkExorcist
19.09.2015, 14:07
018C: play_sound 1083 at 0.0 0.0 0.0

Есть ли аналог этому опкоду, чтобы в .sf использовать звуки гташки?

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

Sire Like
19.09.2015, 14:56
поч стиль диалога INPUT ? хотя в указан MSGBOX. И вообще правильно?

C++:






#define DIALOG_STYLE_MSGBOX 0
#define DIALOG_STYLE_INPUT 1
#define DIALOG_STYLE_LIST 2
#define DIALOG_STYLE_PASSWORD 3
SF
->
getCLEO
(
)
->
callOpcode
(
"0B3B: samp show_dialog id 32000 caption \"BLA BLA\" text \"VAX VAX\" button_1 \"da\" button_2 \"net\" style DIALOG_STYLE_MSGBOX"
)
;




Решено.

PoccoJI
19.09.2015, 14:57
018C: play_sound 1083 at 0.0 0.0 0.0
Есть ли аналог этому опкоду, чтобы в .sf использовать звуки гташки?
Пытался вызвать этот опкод в коде моем, но звука слышно не было.


GAME->GetAudio()->SetMissionAudioPosition попробуй



поч стиль диалога INPUT ? хотя в указан MSGBOX. И вообще правильно?

C++:






#define DIALOG_STYLE_MSGBOX 0
#define DIALOG_STYLE_INPUT 1
#define DIALOG_STYLE_LIST 2
#define DIALOG_STYLE_PASSWORD 3
SF
->
getCLEO
(
)
->
callOpcode
(
"0B3B: samp show_dialog id 32000 caption \"BLA BLA\" text \"VAX VAX\" button_1 \"da\" button_2 \"net\" style DIALOG_STYLE_MSGBOX"
)
;








https://www.blast.hk/attachments/2553/ разбирай

Sire Like
19.09.2015, 15:10
GAME->GetAudio()->SetMissionAudioPosition попробуй

https://www.blast.hk/attachments/2553/ разбирай



В чем соль?

PoccoJI
19.09.2015, 15:16
В чем соль?


там есть пример создания диалога

Sire Like
19.09.2015, 15:17
там есть пример создания диалога


Уже разобрался, дефайнилось криво

Tray228
22.09.2015, 00:28
Не удалось загрузить проект "SFPlugin", так как для него отсутствуют компоненты установки. Чтобы это исправить, запустите программу установки Visual Studio со следующими выбранными элементами:

Установка инструментов Visual C++ 2015 для Windows Desktop

C:\Users\MSI\Desktop\SFPlugin\SFPlugin\SFPlugin.vc xproj : error : Исключение из HRESULT: 0x80041FE2

Че не так?

san0
22.09.2015, 00:45
Не удалось загрузить проект "SFPlugin", так как для него отсутствуют компоненты установки. Чтобы это исправить, запустите программу установки Visual Studio со следующими выбранными элементами:
Установка инструментов Visual C++ 2015 для Windows Desktop

C:\Users\MSI\Desktop\SFPlugin\SFPlugin\SFPlugin.vc xproj : error : Исключение из HRESULT: 0x80041FE2

Че не так?


https://www.blast.hk/threads/9166/#post-76230

Tray228
22.09.2015, 01:04
https://www.blast.hk/threads/9166/#post-76230


у меня 15 версия

Woofing Giraffe
22.09.2015, 01:57
у меня 15 версия


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

FYP
22.09.2015, 17:09
настройки проекта -> C++ -> препроцессор -> определения препроцессора добавить _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS

Sire Like
25.09.2015, 19:28
kak ТПнуть машину на опрдл. координаты? ( в которой сижу )

CarLCas
26.09.2015, 08:05
kak ТПнуть машину на опрдл. координаты? ( в которой сижу )



Код:






void tp_car(float x, float y, float z)
{
vehicle_info *self_car = SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_ALIVE);
self_car->base.matrix[4 * 3] = x;
self_car->base.matrix[4 * 3 + 1] = y;
self_car->base.matrix[4 * 3 + 2] = z;
}

Gouvere
26.09.2015, 10:39
Как поставить метку ка карте?

itsLegend
27.09.2015, 00:56
Как поставить метку ка карте?



C++:






CVector
pos
(
0.0f
,
0.0f
,
0.0f
)
;
CMarker
*
mapMarker
=
GAME
->
GetRadar
(
)
->
CreateMarker
(
&
pos
)
;
mapMarker
->
SetSprite
(
eMarkerSprite
::
MARKER_SPRITE_CASH
)
;




Для работы необходим инклуд файл game_api\game_api.h

Woofing Giraffe
27.09.2015, 04:16
Если создать в потоке цикл while true при завершении игры если его не прервать игру крашит. Как сделать чтобы он сам при завершении игры прерывался?

Woofing Giraffe
27.09.2015, 10:03
Код:






SF->getSAMP()->getChat()->AddChatMessage(-16724992, "Отправил Nick");




Код:






while(true)
{
if (sscanf(SF->getSAMP()->getChat()->chatEntry[99].szText, "Отправил %[a-zA-Z]", nickname) > 0)
{
SF->getSAMP()->getChat()->AddChatMessage(-1, "%s", nickname);
}
}




И ещё, почему не работает?

SR_team
27.09.2015, 10:34
Код:






SF->getSAMP()->getChat()->AddChatMessage(-16724992, "Отправил Nick");




Код:






while(true)
{
if (sscanf(SF->getSAMP()->getChat()->chatEntry[99].szText, "Отправил %[a-zA-Z]", nickname) > 0)
{
SF->getSAMP()->getChat()->AddChatMessage(-1, "%s", nickname);
}
}




И ещё, почему не работает?


Потому что бесконечный цикл, это тебе не клео, все плагины работают в потоке игры

Woofing Giraffe
27.09.2015, 10:38
Потому что бесконечный цикл, это тебе не клео, все плагины работают в потоке игры


Это цикл в потоке.

Woofing Giraffe
27.09.2015, 10:43
Код:






SF->getSAMP()->getChat()->AddChatMessage(-16724992, "Nick");




Код:






while(true)
{
if (sscanf(SF->getSAMP()->getChat()->chatEntry[99].szText, "%[a-zA-Z]", nickname) > 0)
{
SF->getSAMP()->getChat()->AddChatMessage(-1, "%s", nickname);
}
}




Такой вариант работает. А если перед переменной что-то стоит, и в функции тоже, она почему-то отказывается её записывать...

Woofing Giraffe
27.09.2015, 12:14
Почему при сканировании строки через sscanf символ маленькая 'я' принимается как конец строки? И как это исправить?

itsLegend
27.09.2015, 12:16
Используй regex.

FYP
27.09.2015, 13:05
Почему при сканировании строки через sscanf символ маленькая 'я' принимается как конец строки? И как это исправить?


_sscanf_s

или setlocale

Trou
27.09.2015, 17:56
Guys How Can i Set Current Vehicle Health ?

ArtyomG
27.09.2015, 21:29
Как можно проверить, подключен игрок или нет? На подобии 0B23: samp is_player_connected 1@. Мне для цикла нужно

Woofing Giraffe
27.09.2015, 21:31
Как можно проверить, подключен игрок или нет? На подобии 0B23: samp is_player_connected 1@. Мне для цикла нужно



Код:






if (!SF->getSAMP()->getPlayers()->IsPlayerDefined(plid, false)) return SF->getSAMP()->getChat()->AddChatMessage(0xB0B0B0, "Такого игрока нет.");




plid - ID игрока.

false - Игнорирование зоны стрима.

Woofing Giraffe
27.09.2015, 23:28
Код:






sscanf_s(SF->getSAMP()->getChat()->chatEntry[99].szText, "%[a-zA-Zа-яА-Я0-9 |-]", ischo);

SF->getSAMP()->getChat()->AddChatMessage(-1, "%s", ischo);




просканировать строку из чата, которая выглядит примерно так: 924 абвгдя слово.

Всё читает до буквы я, потом прерывает.

Dark_Knight
28.09.2015, 00:27
Пользуй std::regex

Woofing Giraffe
28.09.2015, 01:16
Как break`нуть бесконечный цикл который находится в потоке? Просто если этого не сделать, то крашит при выходе.

White_116
28.09.2015, 01:23
Как break`нуть бесконечный цикл который находится в потоке? Просто если этого не сделать, то крашит при выходе.


Задать условие, Скорее всего проблема в другом месте, например: обращение к уже "выгруженному" классу.

Woofing Giraffe
28.09.2015, 01:34
Задать условие, Скорее всего проблема в другом месте, например: обращение к уже "выгруженному" классу.


Ну вот мне и интересно, какое условие надо задать?

Woofing Giraffe
28.09.2015, 01:47
Пользуй std::regex


Можно пример пожалуйста?)

FYP
28.09.2015, 09:06
Можно пример пожалуйста?)


http://www.cplusplus.com/reference/regex/regex_match/ (https://www.blast.hk/redirect/aHR0cDovL3d3dy5jcGx1c3BsdXMuY29tL3JlZmVyZW5jZS9yZW dleC9yZWdleF9tYXRjaC8)

https://ru.wikipedia.org/wiki/Регулярные_выражения (https://www.blast.hk/redirect/aHR0cHM6Ly9ydS53aWtpcGVkaWEub3JnL3dpa2kvJUQwJUEwJU QwJUI1JUQwJUIzJUQxJTgzJUQwJUJCJUQxJThGJUQxJTgwJUQw JUJEJUQxJThCJUQwJUI1XyVEMCVCMiVEMSU4QiVEMSU4MCVEMC VCMCVEMCVCNiVEMCVCNSVEMCVCRCVEMCVCOCVEMSU4Rg)

Sire Like
28.09.2015, 09:12
кароч, в диалоге мусор

http://i.imgur.com/2v4XuXj.png

в коде нету, диалог на strcat

FYP
28.09.2015, 10:05
кароч, в диалоге мусор

http://i.imgur.com/2v4XuXj.png

в коде нету, диалог на strcat


код бы добавил хоть...

Sire Like
28.09.2015, 10:08
код бы добавил хоть...


стесняюсь чёт

C++:






char
dialog
[
60
]
;
strcat
(
dialog
,
"Команды:\n\n"
)
;
strcat
(
dialog
,
"- /reconnect - Переподключиться к серверу\n"
)
;
SAMP
->
getDialog
(
)
->
ShowDialog
(
1
,
DIALOG_STYLE_MSGBOX
,
"Vax Vax"
,
dialog
,
" Ясно "
,
""
)
;

FYP
28.09.2015, 12:10
любые переменные нужно инициализировать перед использованием. ты не обнулил массив и в нём оказался мусор, затем ты соединяешь свою строку с мусором, итогом становится строка с рандомными символами в начале.

C++:






char
dialog
[
60
]
=
{
0
}
;
strcat
(
dialog
,
"Команды:\n\n"
)
;
strcat
(
dialog
,
"- /reconnect - Переподключиться к серверу\n"
)
;
SAMP
->
getDialog
(
)
->
ShowDialog
(
1
,
DIALOG_STYLE_MSGBOX
,
"Vax Vax"
,
dialog
,
" Ясно "
,
""
)
;




p.s. использование strcat запрещено стандартом C++ из соображений безопасности, вместо него нужно использовать strcat_s.

p.p.s. в данном случае не обязательно объединять строки, достаточно передать в диалог строку "Команды:\n\n- /reconnect - Переподключиться к серверу\n".

Sire Like
28.09.2015, 12:23
любые переменные нужно инициализировать перед использованием. ты не обнулил массив и в нём оказался мусор, затем ты соединяешь свою строку с мусором, итогом становится строка с рандомными символами в начале.

C++:






char
dialog
[
60
]
=
{
0
}
;
strcat
(
dialog
,
"Команды:\n\n"
)
;
strcat
(
dialog
,
"- /reconnect - Переподключиться к серверу\n"
)
;
SAMP
->
getDialog
(
)
->
ShowDialog
(
1
,
DIALOG_STYLE_MSGBOX
,
"Vax Vax"
,
dialog
,
" Ясно "
,
""
)
;




p.s. использование strcat запрещено стандартом C++ из соображений безопасности, вместо него нужно использовать strcat_s.
p.p.s. в данном случае не обязательно объединять строки, достаточно передать в диалог строку "Команды:\n\n- /reconnect - Переподключиться к серверу\n".


от души объяснил

DarkExorcist
28.09.2015, 18:51
GiveTakeDamage входящий или исходящий RPC?

Dark_Knight
28.09.2015, 19:40
и то и другое

FYP
28.09.2015, 20:44
только исходящий

Sire Like
29.09.2015, 13:04
можно kak-то изменить угол поворота транспорта?

Gouvere
29.09.2015, 17:20
Как создать такой текст? Он часто на САМП серверах используется.

Скриншот: http://f4.s.qip.ru/2Q3rLnL5.png (https://www.blast.hk/redirect/aHR0cDovL2Y0LnMucWlwLnJ1LzJRM3JMbkw1LnBuZw)

Woofing Giraffe
29.09.2015, 17:31
Game Text это называется

Gouvere
29.09.2015, 17:38
Game Text это называется


окей, а как сделать?

Сделал короче через SF->getCLEO()->callOpcode

Woofing Giraffe
29.09.2015, 22:32
Не могу скомпилировать, где ошибся/не дописал?

Код:






#include
#include
#include
#include

#include "SAMPFUNCS_API.h"

SAMPFUNCS *SF = new SAMPFUNCS();

void TW_CALL nops(void *clientData)
{
SF->getCLEO()->callOpcode("0B2E: 1@ = read_samp_memory offset 0x4251 size 2\"");
SF->getCLEO()->callOpcode("0B2D: write_samp_memory offset 0x4251 value 1@ size 2\"");
}

void TW_CALL nop=(void *clientData)
{
if (!SF->getSAMP()->IsInitialized())
return;

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





Ну во первых ты void не закрыл, а вообще память лучше читать и записывать не так.[/QUOTE]

Tray228
29.09.2015, 23:04
Как сделать НОП, как в собейте.

Dark_Knight
30.09.2015, 00:02
В старом или новом от фипа?

Tray228
30.09.2015, 00:30
В старом или новом от фипа?


в новом

Sire Like
30.09.2015, 04:58
в новом


хз, мож не то

"Зарегай ракнет хук с типом RAKNET_HOOK_TYPE_INCOMING_RPC и в нём лови которые нужно, return false и пакет не пропустит"

(с) Сэр Опкодер

CarLCas
30.09.2015, 06:31
Вот кусок плагина. При нажатии на P должно открыться меню, но оно не открывается.



C++:






void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"uinfo"
,
cmd_show_info_player
)
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"utp"
,
utp
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
0xFF3300FF
,
"запущен!"
)
;
SF
->
LogConsole
(
" Loaded!"
)
;
twBar_Main
=
TwNewBar
(
"SF"
)
;
TwDefine
(
"'SF Ultimate' color='0 224 160' size='250 400' text=white position='5 400' position='200 200'"
)
;
TwAddButton
(
twBar_Main
,
"Player"
,
player
,
NULL
,
""
)
;
TwAddButton
(
twBar_Main
,
"Vehicles"
,
veh
,
NULL
,
""
)
;
TwAddButton
(
twBar_Main
,
"Nops"
,
nops
,
NULL
,
""
)
;
TwAddButton
(
twBar_Main
,
"Other"
,
other
,
NULL
,
""
)
;
TwAddButton
(
twBar_Main
,
"Help"
,
uhelp
,
NULL
,
""
)
;
bar
=
TwNewBar
(
"S"
)
;
TwAddButton
(
bar
,
"Info 1.1"
,
NULL
,
NULL
,
" label='/uinfo - player info' "
)
;
TwAddButton
(
bar
,
"Info 1.2"
,
NULL
,
NULL
,
" label='/' "
)
;
TwAddButton
(
bar
,
"Info 1.3"
,
NULL
,
NULL
,
" label='SF' "
)
;
init
=
true
;
}
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
'P'
)
)
{
Active
^=
true
;
}
}

CarLCas
30.09.2015, 06:33
хз, мож не то
"Зарегай ракнет хук с типом RAKNET_HOOK_TYPE_INCOMING_RPC и в нём лови которые нужно, return false и пакет не пропустит"
(с) Сэр Опкодер


То, только не обязательно RAKNET_HOOK_TYPE_INCOMING_RPC, всё будет зависеть от того какой пакет/RPC тебе надо проигнорировать.

Gouvere
30.09.2015, 10:29
Как игровое время изменить? Ну там день, ночь, утро и т.д.

Woofing Giraffe
30.09.2015, 10:36
Как игровое время изменить? Ну там день, ночь, утро и т.д.


Через память.

Gouvere
30.09.2015, 10:39
Через память.


Я не умею с памятью работать, можно код?

Sire Like
30.09.2015, 12:27
можно kak-то изменить угол поворота транспорта?

FYP
30.09.2015, 13:06
можно kak-то изменить угол поворота транспорта?


только через матрицу

Sire Like
30.09.2015, 13:16
только через матрицу


я в курсе, код можно? а то мудрил в итоге бред получился.

2) "vect3_copy" как в sf api юзать?

Tray228
30.09.2015, 18:55
Как сделать перезаход на сервер при этом поменя имя через команду например "sname [nick]"

Woofing Giraffe
30.09.2015, 19:23
Я не умею с памятью работать, можно код?



Код:






#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS *SF = new SAMPFUNCS();
bool Status;
char newtime[28];
DWORD ThreadID;
HANDLE hThread;

void __stdcall AnotherThread(void)
{
HANDLE ProcessHandle = GetCurrentProcess();
while (true)
{
if (Status)
{
WriteProcessMemory(ProcessHandle, (LPVOID)0xB70153, newtime, 1, 0);
}
}
TerminateThread(hThread, 0);
CloseHandle(hThread);
}

void CALLBACK cmd(std::string param)
{
if (param.empty()) return;
int time;
if (!sscanf(param.c_str(), "%d", &time) || time > 23 || time getSAMP()->getChat()->AddChatMessage(0xB0B0B0, "Используй: /settime [Время (От 0 до 23)].");
sprintf(newtime, "%d", time);
Status = true;
}

void CALLBACK mainloop()
{
static bool init = false;
if (!init)
{
if (GAME == nullptr)
return;
if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
return;
if (!SF->getSAMP()->IsInitialized())
return;
SF->getSAMP()->registerChatCommand("settime", cmd);
hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&AnotherThread, NULL, 0, &ThreadID);
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;
}




Код конечно та ещё херня, но рабочий.

Woofing Giraffe
30.09.2015, 19:26
И опять же вопрос, даже в том коде выше, при выходе из игры через /q тупо крашит игру, если цикл убрать то такого не будет происходить. Что я делаю не так? И как это исправить?

Gouvere
30.09.2015, 20:06
Код:






#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS *SF = new SAMPFUNCS();
bool Status;
char newtime[28];
DWORD ThreadID;
HANDLE hThread;

void __stdcall AnotherThread(void)
{
HANDLE ProcessHandle = GetCurrentProcess();
while (true)
{
if (Status)
{
WriteProcessMemory(ProcessHandle, (LPVOID)0xB70153, newtime, 1, 0);
}
}
TerminateThread(hThread, 0);
CloseHandle(hThread);
}

void CALLBACK cmd(std::string param)
{
if (param.empty()) return;
int time;
if (!sscanf(param.c_str(), "%d", &time) || time > 23 || time getSAMP()->getChat()->AddChatMessage(0xB0B0B0, "Используй: /settime [Время (От 0 до 23)].");
sprintf(newtime, "%d", time);
Status = true;
}

void CALLBACK mainloop()
{
static bool init = false;
if (!init)
{
if (GAME == nullptr)
return;
if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
return;
if (!SF->getSAMP()->IsInitialized())
return;
SF->getSAMP()->registerChatCommand("settime", cmd);
hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&AnotherThread, NULL, 0, &ThreadID);
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
30.09.2015, 21:23
И опять же вопрос, даже в том коде выше, при выходе из игры через /q тупо крашит игру, если цикл убрать то такого не будет происходить. Что я делаю не так? И как это исправить?


Зачем тебе создавать новый поток? Чем тебе не устраивает mainloop?

Tray228
30.09.2015, 22:03
как сделать проверки?

actor defiend, actor dead и т.д

а если не найдет то прыгаем обратно.

как это сделать?

Woofing Giraffe
01.10.2015, 00:10
Зачем тебе создавать новый поток? Чем тебе не устраивает mainloop?


Если в мэйн при надобности создать беск. цикл то игра зависает.

Woofing Giraffe
01.10.2015, 00:21
как сделать проверки?
actor defiend, actor dead и т.д

а если не найдет то прыгаем обратно.
как это сделать?



Код:






SF->getSAMP()->getPlayers()->IsPlayerDefined(plid, false)




Используй как условие. Plid - ID игрока, true/false - зона стрима, т.е. если стоит false, то оно проверяет подключён ли игрок к серверу, если true, то находится ли он в зоне стрима.

Tray228
01.10.2015, 00:28
Код:






SF->getSAMP()->getPlayers()->IsPlayerDefined(plid, false)




Используй как условие. Plid - ID игрока, true/false - зона стрима, т.е. если стоит false, то оно проверяет подключён ли игрок к серверу, если true, то находится ли он в зоне стрима.


retrue;

если условие не выполнено

Woofing Giraffe
01.10.2015, 00:31
retrue;
если условие не выполнено


Ну лично я так делаю







Код:






if (!SF->getSAMP()->getPlayers()->IsPlayerDefined(plid, false)) return SF->getSAMP()->getChat()->AddChatMessage(0xB0B0B0, "Такого игрока нет.");

Tray228
01.10.2015, 00:34
return SF->getSAMP()->getChat()->AddChatMessage(0xB0B0B0, "Такого игрока нет.");

вот прям так?

Woofing Giraffe
01.10.2015, 00:35
return SF->getSAMP()->getChat()->AddChatMessage(0xB0B0B0, "Такого игрока нет.");
вот прям так?


Ну да, это прерывает функцию если условие не выполнено и выводит сообщение в чат.

Tray228
01.10.2015, 00:36
Ну да, это прерывает функцию если условие не выполнено и выводит сообщение в чат.


Донес,спасибо,я просто первый день изучаю SF API. :D

Sire Like
01.10.2015, 00:37
Как сделать перезаход на сервер при этом поменя имя через команду например "sname [nick]"


Могу скинуть через час.с телефона промт

Tray228
01.10.2015, 00:39
Могу скинуть через час.с телефона промт


Давай, жду. ;)

Sire Like
01.10.2015, 01:38
Давай, жду. ;)



Код:






void __stdcall Name_CMD(std::string str)
{
const char * name = str.c_str();
if (str.empty()) return;
SAMP->getPlayers()->SetLocalPlayerName(name);
SAMP->disconnect(100); SAMP->getInfo()->RestartGame();
SAMP->getInfo()->iGameState = GAMESTATE_WAIT_CONNECT;
};

Sire Like
01.10.2015, 08:42
По сути дела работает при заходе. Но неверно. Координаты всегда по нулям. ID объекта вообще рандомный:pidrila:

Код:






bool __stdcall TEST(stRakNetHookParams *hook)
{
if (hook->packetId == ScriptRPCEnumeration::RPC_ScrCreateObject)
{
hook->bitStream->ResetReadPointer();
int modelid; float Pos[3];
float xPos[3];
float DrawDis;
hook->bitStream->Read(modelid);
hook->bitStream->Read(Pos[0]);
hook->bitStream->Read(Pos[1]);
hook->bitStream->Read(Pos[2]);
hook->bitStream->Read(xPos[0]);
hook->bitStream->Read(xPos[1]);
hook->bitStream->Read(xPos[2]);
hook->bitStream->Read(DrawDis);
hook->bitStream->ResetReadPointer();
SAMP->getChat()->AddChatMessage(D3DCOLOR_ARGB(255, 255, 255, 255), "CreateObject(%d, %f, %f, %f, %f, %f, %f, %f)", modelid, Pos[0], Pos[1], Pos[2], xPos[0], xPos[1], xPos[2], DrawDis);
}
return true;
};

Sire Like
01.10.2015, 16:18
Почему не проходит вторая задержка в 2 секунды.
После переподключения прошо 2 секунды и телепортировался на определенные кординаты.

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
(
)
;
bool bRequestReconnect
=
false
;
DWORD
time
=
0
;
bool bRequestWait
=
false
;
DWORD
times
=
0
;
void
CALLBACK
telo
(
std
:
:
string param
)
{
SF
-
>
getSAMP
(
)
-
>
disconnect
(
100
)
;
SF
-
>
getSAMP
(
)
-
>
getInfo
(
)
-
>
RestartGame
(
)
;
SF
-
>
getSAMP
(
)
-
>
getInfo
(
)
-
>
iGameState
=
GAMESTATE_WAIT_CONNECT
;
}
void
CALLBACK
teli
(
std
:
:
string param
)
{
bRequestReconnect
=
true
;
time
=
GetTickCount
(
)
;
SF
-
>
getSAMP
(
)
-
>
disconnect
(
100
)
;
SF
-
>
getSAMP
(
)
-
>
getInfo
(
)
-
>
RestartGame
(
)
;
bRequestWait
=
true
;
times
=
GetTickCount
(
)
;
}
void
CALLBACK
tela
(
std
:
:
string param
)
{
ExitProcess
(
1
)
;
}
void
CALLBACK
tels
(
std
:
:
string param
)
{
SF
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"{FF0000}Команды: {0000FF}/recco - {FFFFFF}переподключение без задержки, {0000FF}/reccos - {FFFFFF}переподключение с задержкой в 15 сек, {0000FF}/fquit - {FFFFFF}быстрое закрытие GTA:SA."
)
;
SF
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"{0000FF}/fquit - {FFFFFF}быстрое закрытие GTA:SA."
)
;
}
void
CALLBACK
mainloop
(
)
{
static
bool init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
-
>
GetSystemState
(
)
!=
eSystemState
:
:
GS_PLAYING_GAME
)
return
;
if
(
!
SF
-
>
getSAMP
(
)
-
>
IsInitialized
(
)
)
return
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"recco"
,
telo
)
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"reccos"
,
teli
)
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"fquit"
,
tela
)
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"helrf"
,
tels
)
;
SF
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"{0000FF}Recconect {FFFFFF}and {0000FF}Fast Quit {FFFFFF}by {7CFF00}TRAY228 {FFFFFF}| {FFFFFF}Thanks to {44FF00}urShadow"
)
;
SF
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Помощь по командам: {0000FF}/helrf "
)
;
init
=
true
;
}
if
(
(
GetTickCount
(
)
-
time
)
>
15000
&&
bRequestReconnect
)
{
SF
-
>
getSAMP
(
)
-
>
getInfo
(
)
-
>
iGameState
=
GAMESTATE_WAIT_CONNECT
;
bRequestReconnect
=
false
;
time
=
GetTickCount
(
)
;
if
(
(
GetTickCount
(
)
-
times
)
>
2000
&&
bRequestWait
)
PEDSELF
-
>
Teleport
(
0
,
0
,
0
)
;
bRequestWait
=
false
;
times
=
GetTickCount
(
)
;
}
}
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 и поток,хотя я в этом не уверен

Tray228
01.10.2015, 16:23
попробуй через sleep и поток,хотя я в этом не уверен


Это как?

Tray228
01.10.2015, 16:36
Как сделать телепорт по метке?

Tray228
01.10.2015, 19:46
Ну лично я так делаю







Код:






if (!SF->getSAMP()->getPlayers()->IsPlayerDefined(plid, false)) return SF->getSAMP()->getChat()->AddChatMessage(0xB0B0B0, "Такого игрока нет.");





в маин луп это идет?

Woofing Giraffe
01.10.2015, 20:05
в маин луп это идет?


Смотря куда, но лучше не надо

Tray228
01.10.2015, 20:08
Смотря куда, но лучше не надо


http://pastebin.com/XL3dN6Yz (https://www.blast.hk/redirect/aHR0cDovL3Bhc3RlYmluLmNvbS9YTDNkTjZZeg) вот я сделал примерно.Как лучше сделать подскажи.

NIKO
01.10.2015, 20:08
Как проверить на то, что актёр мёртв?

Tray228
01.10.2015, 20:47
Смотря куда, но лучше не надо


Дай лучше ВК)

Tray228
01.10.2015, 20:49
if Actor.Death()

Как то так


нет такого

Gouvere
01.10.2015, 20:50
if Actor.Death()

Как то так


Я знаю, что ты знаешь как сменить игровое время. Подскажешь?

Tray228
01.10.2015, 20:53
С клео перепутал, лол


а как сделать в SF api?

Tray228
01.10.2015, 20:59
как сделать проверку на что мой актер находится в каре.

Dark_Knight
01.10.2015, 21:02
как сделать проверку на что мой актер находится в каре.


Открой инклуды сф и смотри.

Woofing Giraffe
01.10.2015, 21:04
Дай лучше ВК)


В личку скинул.

Tray228
02.10.2015, 00:20
Как сделать что-бы текст двигался в разные стороны.

Sire Like
02.10.2015, 01:53
как сделать проверку на что мой актер находится в каре.


я так проверял

Код:






if (SF->getGame()->getCurrentState() == CHEAT_STATE_VEHICLE) {

}

Sire Like
02.10.2015, 03:10
в маин луп это идет?


mainloop вызывается постоянно. создай калбек отдельный же

Dark_Knight
02.10.2015, 09:17
mainloop вызывается постоянно. создай калбек отдельный же


Такое в меине можно сделать.

Sire Like
02.10.2015, 10:26
Kak правильно вытащить инфу с серверного диалога в стиле DIALOG_STYLE_INPUT?

Sire Like
02.10.2015, 12:25
Как при вводе команды вывести рендер текст, а при повторном вводе его убрать?


создай переменную типа bool ; когда рисуешь поставить проверку ,в команде меняй значения переменной.

я так делал лично

Sire Like
02.10.2015, 13:26
А можешь сделать пример? А то у меня даже просто рендер командой не получается создать :sad_frog:



рисуй в калбеке для рисования

Sire Like
02.10.2015, 13:50
C++:






bool
CALLBACK
cdate
(
CONST RECT
*
pSourceRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindowOverride
,
CONST RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
)
{
stFontInfo
*
pFont
;
pFont
=
SF
->
getRender
(
)
->
CreateNewFont
(
"Tahoma"
,
12
,
FCR_BORDER
)
;
pFont
->
Print
(
"Fast"
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
500
,
500
,
false
)
;
SF
->
getRender
(
)
->
EndRender
(
)
;
}
;
return
true
;
}
;
потом регистрирую команду
SF
->
getSAMP
(
)
->
registerChatCommand
(
"cdate"
,
cdate
)
;
и потом ошибка






http://pastebin.com/MbUu3rEe (https://www.blast.hk/redirect/aHR0cDovL3Bhc3RlYmluLmNvbS9NYlV1M3JFZQ)

Мог где-то ошибиться

Sire Like
02.10.2015, 14:12
Как вывести текст отсюда:

C++:






char
buf
[
128
]
;
SYSTEMTIME lt
,
st
;
GetLocalTime
(
&
lt
)
;
GetSystemTime
(
&
st
)
;
sprintf
(
buf
,
"Time: %02d:%02d:%02d"
,
lt
.
wHour
,
lt
.
wMinute
,
lt
.
wSecond
)
;






Вот сюда:

C++:






pFont
->
Print






Код:






pFont->Print(buf, D3DCOLOR_ARGB(255, 255, 255, 0), 500, 500, false);

Dark_Knight
02.10.2015, 14:14
Kak правильно вытащить инфу с серверного диалога в стиле DIALOG_STYLE_INPUT?


Хук ставить.

Sire Like
02.10.2015, 14:17
Хук ставить.


я ставил, либо иероглифу прут, либо пустота, либо краш

Dark_Knight
02.10.2015, 14:21
Не правильно читаешь тогда. Декоде стринг юзал в хуке?

Sire Like
02.10.2015, 14:35
Не правильно читаешь тогда. Декоде стринг юзал в хуке?


не,я прост чёт хз как в диалоге делать

Dark_Knight
02.10.2015, 14:49
Код:






if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowDialog)
{
unsigned short DialogID;
BYTE style, caplen, button1_len, button2_len;
char caption[255], button1[25], button2[25], info[0x1000];
params->bitStream->Read(DialogID);
params->bitStream->Read(style);
params->bitStream->Read(caplen);
params->bitStream->Read(caption, caplen);
caption[caplen] = '\0';
params->bitStream->Read(button1_len);
params->bitStream->Read(button1, button1_len);
button1[button1_len] = '\0';
params->bitStream->Read(button2_len);
params->bitStream->Read(button2, button2_len);
button2[button2_len] = '\0';
SF->getRakNet()->DecodeString(info, 0x1000, params->bitStream);
params->bitStream->ResetReadPointer();
}

Dark_Knight
02.10.2015, 16:41
Код:






*(float *)0x00B7CDE0 = 10.0




И без каких либо функций

Tray228
02.10.2015, 19:52
Как телепортироватсья по метке

Tray228
02.10.2015, 23:51
Как сделать синхру applyanimation

Wall
03.10.2015, 08:38
помогите вот такая проблема возникает при компиляции плагина 2 раксампа отлично скомпилировались без единой ошибки а сф плагин ошибку выдает

сдк установленно подклучино пути прописаны все равно пишет

http://s017.radikal.ru/i443/1510/61/eb5c24a6b6fb.jpg

http://s019.radikal.ru/i637/1510/fc/bd2a831af3d2.jpg

http://s013.radikal.ru/i323/1510/21/b759292ca250.jpg

R3Z4K
03.10.2015, 11:39
DirectX SDK подключи

Wall
03.10.2015, 12:44
все компилит спс

0pc0d3R
03.10.2015, 13:03
Как сделать синхру applyanimation


в структуре stOnFootData меняй sCurrentAnimID и sAnimFlags

Tray228
03.10.2015, 13:16
Как правильно записать sCurrentAnimID и sAnimFlags

А то чет не получается.

0pc0d3R
03.10.2015, 13:18
Как правильно записать sCurrentAnimID и sAnimFlags
А то чет не получается.


покажи как ты делал

Tray228
03.10.2015, 13:36
покажи как ты делал



Код:






#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"

bool STATUS;
SAMPFUNCS *SF = new SAMPFUNCS();
stOnFootData sync;

void CALLBACK cmd(std::string param)
{
STATUS ^= true;
memset(&sync, 0, sizeof(stOnFootData) && STATUS == true );
sync = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;

BitStream sCurrentAnimID;
BitStream sAnimFlags;


sCurrentAnimID.Write((BYTE)ID_PLAYER_SYNC);
sCurrentAnimID.Write((PCHAR)&sync, sizeof(stOnFootData));

sAnimFlags.Write((BYTE)ID_PLAYER_SYNC);
sAnimFlags.Write((PCHAR)&sync, sizeof(stOnFootData));

SF->getRakNet()->SendPacket(&sCurrentAnimID);
SF->getRakNet()->SendPacket(&sAnimFlags);
};

void CALLBACK mainloop()
{
static bool init = false;
if (!init)
{
if (GAME == nullptr)
return;
if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
return;
GAME->GetAudio()->PlayBeatTrack(2);

if (!SF->getSAMP()->IsInitialized())
return;
SF->getSAMP()->registerChatCommand("sbiv", cmd);
SF->LogConsole("{FF0000}[SFPlugin] {FFFFFF}загужен by Tray228");


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

Dark_Knight
03.10.2015, 13:56
Выучи сначала основы С++, а потом пиши плагины.

http://turboportal.ru/uploads/posts/14270070694.jpg

0pc0d3R
03.10.2015, 14:07
Код:






void CALLBACK cmd(std::string param)
{
stOnFootData sync; BitStream bs;
memcpy(&SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData, &sync);
sync.sCurrentAnimID = 1134; // допустим перезапишем на такой ид анимки
sync.sAnimFlags = 1130; // и флаг анимки для пример
// флаг и ид анимки узнаешь если выведешь sCurrentAnimID и sAnimFlags из текущей онфут даты на екран или в чат.
bs.Write((BYTE)ID_PLAYER_SYNC);
bs.Write((PCHAR)&sync, sizeof(stOnFootData));
SF->getRakNet()->SendPacket(&bs);
};




Мда чет ты натворил ерунды что хоть падай и плачь.

Tray228
03.10.2015, 14:11
Код:






void CALLBACK cmd(std::string param)
{
stOnFootData sync; BitStream bs;
memcpy(&SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData, &sync);
sync.sCurrentAnimID = 1134; // допустим перезапишем на такой ид анимки
sync.sAnimFlags = 1130; // и флаг анимки для пример
// флаг и ид анимки узнаешь если выведешь sCurrentAnimID и sAnimFlags из текущей онфут даты на екран или в чат.
bs.Write((BYTE)ID_PLAYER_SYNC);
bs.Write((PCHAR)&sync, sizeof(stOnFootData));
SF->getRakNet()->SendPacket(&bs);
};




Мда чет ты натворил ерунды что хоть падай и плачь.


Воу, спасибо ;3

Tray228
03.10.2015, 14:13
Код:






void CALLBACK cmd(std::string param)
{
stOnFootData sync; BitStream bs;
memcpy(&SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData, &sync);
sync.sCurrentAnimID = 1134; // допустим перезапишем на такой ид анимки
sync.sAnimFlags = 1130; // и флаг анимки для пример
// флаг и ид анимки узнаешь если выведешь sCurrentAnimID и sAnimFlags из текущей онфут даты на екран или в чат.
bs.Write((BYTE)ID_PLAYER_SYNC);
bs.Write((PCHAR)&sync, sizeof(stOnFootData));
SF->getRakNet()->SendPacket(&bs);
};




Мда чет ты натворил ерунды что хоть падай и плачь.


а в чем отличия от memcpy и memset

0pc0d3R
03.10.2015, 14:14
а в чем отличия от memcpy и memset


memset может обнулять память, чаще всего для этого её и юзают, чтобы почистить структуры/классы и тд. А memcpy наоборот копирует их откуда-то куда-то.

Tray228
03.10.2015, 14:19
memset может обнулять память, чаще всего для этого её и юзают, чтобы почистить структуры/классы и тд. А memcpy наоборот копирует их откуда-то куда-то.


Спасибо)

Sire Like
03.10.2015, 14:20
1) Как проверить что у мну дигл в руке?

2) Как проверить что я выстрелил\стреляю ?

0pc0d3R
03.10.2015, 14:26
1) Как проверить что у мну дигл в руке?
2) Как проверить что я выстрелил\стреляю ?


1. if (SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon == 24)

2. Юзай хук исходящей буллет синхры.

Tray228
03.10.2015, 20:44
Как проиграть специально действие без хука.

0pc0d3R
03.10.2015, 20:47
Как проиграть специально действие без хука.


если знаешь клео может просто вызывать опкоды через клео обработчик.

Tray228
03.10.2015, 20:48
если знаешь клео может просто вызывать опкоды через клео обработчик.


Ааа точно,спасибо.

CarLCas
03.10.2015, 20:49
Как проиграть специально действие без хука.


SF->getSAMP()->getPlayers()->pLocalPlayer->SetSpecialAction(ид_действия)

MISTER_GONWIK
03.10.2015, 21:44
Не конектиться к серверу из-за плагина

PHP:






#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
bool
STATUS
;
stFontInfo
*
pFont
;
char buf
[
512
]
;
static
bool
INIT
=
false
;
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
bool
CALLBACK
Present
(
CONST
RECT
*
pSourceRect
,
CONST
RECT
*
pDestRect
,
HWND
hDestWindowOverride
,
CONST
RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
-
>
getRender
(
)
-
>
BeginRender
(
)
)
&&
STATUS
==
true
)
{
SYSTEMTIME
lt
;
GetLocalTime
(
&
lt
)
;
float
FPS
=
GAME
-
>
GetFPS
(
)
;
sprintf
(
buf
,
"Дата: День: %d | Месяц: %d | Год: %d "
,
lt
.
wDay
,
lt
.
wMonth
,
lt
.
wYear
)
;
pFont
-
>
Print
(
buf
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
255
)
,
10
,
300
,
false
)
;
sprintf
(
buf
,
"Время: %02d | %02d | %02d "
,
lt
.
wHour
,
lt
.
wMinute
,
lt
.
wSecond
)
;
pFont
-
>
Print
(
buf
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
255
)
,
10
,
280
,
false
)
;
sprintf
(
buf
,
"FPS: %f "
,
FPS
)
;
pFont
-
>
Print
(
buf
,
D3DCOLOR_ARGB
(
255
,
0
,
255
,
0
)
,
10
,
260
,
false
)
;
SF
-
>
getRender
(
)
-
>
EndRender
(
)
;
}
return
true
;
}
;
void
CALLBACK
cmdd
(
std
:
:
string param
)
{
if
(
!
param
.
empty
(
)
)
return
;
STATUS
^
=
true
;
}
void
CALLBACK
cmdds
(
std
:
:
string param
)
{
SF
-
>
getSAMP
(
)
-
>
getPlayers
(
)
-
>
pLocalPlayer
-
>
SetSpecialAction
(
68
)
;
}
;
bool
CALLBACK
incomingRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
-
>
packetId
==
ScriptRPCEnumeration
:
:
RPC_ScrApplyAnimation
&&
STATUS
==
true
)
{
short int pID
;
char animlib
[
10
]
;
char animname
[
14
]
;
float fDelta
;
bool loop
,
x
,
y
,
fr
;
int time
;
byte nameLen
;
int iid
=
SF
-
>
getSAMP
(
)
-
>
getPlayers
(
)
-
>
sLocalPlayerID
;
params
-
>
bitStream
-
>
ResetReadPointer
(
)
;
params
-
>
bitStream
-
>
Read
(
pID
)
;
params
-
>
bitStream
-
>
Read
(
nameLen
)
;
params
-
>
bitStream
-
>
Read
(
animlib
,
nameLen
)
;
animlib
[
nameLen
]
=
'\0'
;
params
-
>
bitStream
-
>
Read
(
nameLen
)
;
params
-
>
bitStream
-
>
Read
(
animname
,
nameLen
)
;
animname
[
nameLen
]
=
'\0'
;
params
-
>
bitStream
-
>
Read
(
fDelta
)
;
params
-
>
bitStream
-
>
Read
(
loop
)
;
params
-
>
bitStream
-
>
Read
(
x
)
;
params
-
>
bitStream
-
>
Read
(
y
)
;
params
-
>
bitStream
-
>
Read
(
fr
)
;
params
-
>
bitStream
-
>
Read
(
time
)
;
params
-
>
bitStream
-
>
ResetReadPointer
(
)
;
if
(
iid
==
pID
&&
!
strcmp
(
"COLT45"
,
animlib
)
&&
!
strcmp
(
"colt45_reload"
,
animname
)
)
return
false
;
}
;
}
;
void
CALLBACK
cmda
(
std
:
:
string param
)
{
SF
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"{0000FF}Command: {FFFFFF}/kuk - мача, /sbiv - сбив анимки перезарядки /times "
)
;
SF
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"{0000FF}/times - показатель {FFFFFF}FPS, Время, Даты. "
)
;
}
;
void
CALLBACK
cmd
(
std
:
:
string param
)
{
STATUS
^
=
true
;
}
;
void
CALLBACK
mainloop
(
)
{
static
bool init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
-
>
GetSystemState
(
)
!=
eSystemState
:
:
GS_PLAYING_GAME
)
return
;
if
(
!
SF
-
>
getSAMP
(
)
-
>
IsInitialized
(
)
)
return
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"sfhelp"
,
cmda
)
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"kuk"
,
cmd
)
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"sbiv"
,
cmdd
)
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"times"
,
cmdds
)
;
SF
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"{0000FF}[SFPlugin] {FFFFFF}Loaded by {FF0000}Tray228 {FF0000}Info: /sfhelp"
)
;
SF
-
>
LogConsole
(
"{FF0000}[SFPlugin] {FFFFFF}загужен by Tray228"
)
;
pFont
=
SF
-
>
getRender
(
)
-
>
CreateNewFont
(
"Arial"
,
11
,
FCR_BORDER
)
;
SF
-
>
getRakNet
(
)
-
>
registerRakNetCallback
(
RakNetScriptHookType
:
:
RAKHOOK_TYPE_INCOMING_RPC
,
incomingRPC
)
;
SF
-
>
getRender
(
)
-
>
registerD3DCallback
(
eDirect3DDeviceMethods
:
:
D3DMETHOD_PRESENT
,
Present
)
;
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
;
}





в функции

Код:






bool CALLBACK incomingRPC(stRakNetHookParams *params)




в самый конец добавь return true;

между

http://puu.sh/kxaEG/9e69a54b9e.png

и у первой } убери ;

Woofing Giraffe
03.10.2015, 22:15
Код:






char storka[128] = "Текст лолол яяЯЯя ы"




Как получить строку начиная с "лолол"? Я пытался через sscanf, он эту блядскую букву "я" считает как разделитель строки. Через regex я чёт не понял как делать. Объясните пожалуйста)

Пытался с помощью sscanf(storka, "%[a-zA-Zа-яА-Я]", kek); Но бля, записывает только "Текст лолол ", дальше строка обрывается

Tray228
03.10.2015, 22:34
как заспавнить игрока без хука?

MISTER_GONWIK
03.10.2015, 23:03
Код:






char storka[128] = "Текст лолол яяЯЯя ы"




Как получить строку начиная с "лолол"? Я пытался через sscanf, он эту блядскую букву "я" считает как разделитель строки. Через regex я чёт не понял как делать. Объясните пожалуйста)
Пытался с помощью sscanf(storka, "%[a-zA-Zа-яА-Я]", kek); Но бля, записывает только "Текст лолол ", дальше строка обрывается



Код:






char* result = strstr(storka, "лолол");




в result будет указатель на то, где начинается "лолол"

MISTER_GONWIK
03.10.2015, 23:11
в проблема в том что я ввожу /times и у меня отключается /sbiv
и так же наоборот

PHP:






#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
int
STATUS
;
stFontInfo
*
pFont
;
char buf
[
512
]
;
static
bool
INIT
=
false
;
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
bool
CALLBACK
Present
(
CONST
RECT
*
pSourceRect
,
CONST
RECT
*
pDestRect
,
HWND
hDestWindowOverride
,
CONST
RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
-
>
getRender
(
)
-
>
BeginRender
(
)
)
&&
STATUS
==
2
)
{
SYSTEMTIME
lt
;
GetLocalTime
(
&
lt
)
;
float
FPS
=
GAME
-
>
GetFPS
(
)
;
sprintf
(
buf
,
"Дата: День: %d | Месяц: %d | Год: %d "
,
lt
.
wDay
,
lt
.
wMonth
,
lt
.
wYear
)
;
pFont
-
>
Print
(
buf
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
255
)
,
10
,
300
,
false
)
;
sprintf
(
buf
,
"Время: %02d | %02d | %02d "
,
lt
.
wHour
,
lt
.
wMinute
,
lt
.
wSecond
)
;
pFont
-
>
Print
(
buf
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
255
)
,
10
,
280
,
false
)
;
sprintf
(
buf
,
"FPS: %.f "
,
FPS
)
;
pFont
-
>
Print
(
buf
,
D3DCOLOR_ARGB
(
255
,
0
,
255
,
0
)
,
10
,
260
,
false
)
;
SF
-
>
getRender
(
)
-
>
EndRender
(
)
;
}
return
true
;
}
;
void
CALLBACK
cmdd
(
std
:
:
string param
)
{
if
(
!
param
.
empty
(
)
)
return
;
STATUS
=
2
;
}
void
CALLBACK
cmdds
(
std
:
:
string param
)
{
SF
-
>
getSAMP
(
)
-
>
getPlayers
(
)
-
>
pLocalPlayer
-
>
SetSpecialAction
(
68
)
;
}
;
bool
CALLBACK
incomingRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
-
>
packetId
==
ScriptRPCEnumeration
:
:
RPC_ScrApplyAnimation
&&
STATUS
==
1
)
{
short int pID
;
char animlib
[
10
]
;
char animname
[
14
]
;
float fDelta
;
bool loop
,
x
,
y
,
fr
;
int time
;
byte nameLen
;
int iid
=
SF
-
>
getSAMP
(
)
-
>
getPlayers
(
)
-
>
sLocalPlayerID
;
params
-
>
bitStream
-
>
ResetReadPointer
(
)
;
params
-
>
bitStream
-
>
Read
(
pID
)
;
params
-
>
bitStream
-
>
Read
(
nameLen
)
;
params
-
>
bitStream
-
>
Read
(
animlib
,
nameLen
)
;
animlib
[
nameLen
]
=
'\0'
;
params
-
>
bitStream
-
>
Read
(
nameLen
)
;
params
-
>
bitStream
-
>
Read
(
animname
,
nameLen
)
;
animname
[
nameLen
]
=
'\0'
;
params
-
>
bitStream
-
>
Read
(
fDelta
)
;
params
-
>
bitStream
-
>
Read
(
loop
)
;
params
-
>
bitStream
-
>
Read
(
x
)
;
params
-
>
bitStream
-
>
Read
(
y
)
;
params
-
>
bitStream
-
>
Read
(
fr
)
;
params
-
>
bitStream
-
>
Read
(
time
)
;
params
-
>
bitStream
-
>
ResetReadPointer
(
)
;
if
(
iid
==
pID
&&
!
strcmp
(
"COLT45"
,
animlib
)
&&
!
strcmp
(
"colt45_reload"
,
animname
)
)
return
false
;
}
return
true
;
}
;
void
CALLBACK
cmda
(
std
:
:
string param
)
{
SF
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"{0000FF}Command: {FFFFFF}/kuk - мача, /sbiv - сбив анимки перезарядки /times "
)
;
SF
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"{0000FF}/times - показатель {FFFFFF}FPS, Время, Даты, /fspawn - заспавниться "
)
;
SF
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"{0000FF}/recconect - {FFFFFF}переподключение на сервер. "
)
;
}
;
void
CALLBACK
cmd
(
std
:
:
string param
)
{
STATUS
=
1
;
}
;
void
CALLBACK
telo
(
std
:
:
string param
)
{
SF
-
>
getSAMP
(
)
-
>
disconnect
(
100
)
;
SF
-
>
getSAMP
(
)
-
>
getInfo
(
)
-
>
RestartGame
(
)
;
SF
-
>
getSAMP
(
)
-
>
getInfo
(
)
-
>
iGameState
=
GAMESTATE_WAIT_CONNECT
;
}
;
void
CALLBACK
mainloop
(
)
{
static
bool init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
-
>
GetSystemState
(
)
!=
eSystemState
:
:
GS_PLAYING_GAME
)
return
;
if
(
!
SF
-
>
getSAMP
(
)
-
>
IsInitialized
(
)
)
return
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"recconect"
,
telo
)
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"sfhelp"
,
cmda
)
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"sbiv"
,
cmd
)
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"times"
,
cmdd
)
;
SF
-
>
getSAMP
(
)
-
>
registerChatCommand
(
"kuk"
,
cmdds
)
;
SF
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"{FFFFFF}[{0000FF}SFPlugin]{FFFFFF} {FFFFFF}Loaded{FFFFFF}] by {FF0000}Tray228 {FF0000}Info: /sfhelp"
)
;
SF
-
>
LogConsole
(
"{FF0000}[SFPlugin] {FFFFFF}загужен by Tray228"
)
;
pFont
=
SF
-
>
getRender
(
)
-
>
CreateNewFont
(
"Arial"
,
11
,
FCR_BORDER
)
;
SF
-
>
getRakNet
(
)
-
>
registerRakNetCallback
(
RakNetScriptHookType
:
:
RAKHOOK_TYPE_INCOMING_RPC
,
incomingRPC
)
;
SF
-
>
getRender
(
)
-
>
registerD3DCallback
(
eDirect3DDeviceMethods
:
:
D3DMETHOD_PRESENT
,
Present
)
;
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
;
}





ну так у тебя одна переменная на две функции, нахуя? сделай на обе функции две разные переменные

Tray228
03.10.2015, 23:43
Как вызвать sendrate

Woofing Giraffe
04.10.2015, 00:46
Как поставить проверку на ввод команды /q? Чтоб вовремя завершить цикл в потоке, дабы игру не крашило.

itsLegend
04.10.2015, 00:51
Как поставить проверку на ввод команды /q? Чтоб вовремя завершить цикл в потоке, дабы игру не крашило.


Установить кэллбэк при деструкторе игры.

C++:






void
CALLBACK
callbackDestructor
(
)
{
//
}
SF
->
getGame
(
)
->
registerGameDestructorCallback
(
callbackDestructor
)
;

itsLegend
04.10.2015, 01:19
Как вызвать sendrate



C++:






SF
->
getSAMP
(
)
->
setSendRate
(
eSendrateType
::
AIMSENDRATE
,
100
)
;




eSendrateType(уже описаны в инклудах):

C++:






enum
eSendrateType
{
ONFOOTSENDRATE
=
1
,
INCARSENDRATE
,
AIMSENDRATE
}
;

Tray228
04.10.2015, 01:33
как вызвать анимацию например "поднять руки вверх"

R3Z4K
04.10.2015, 10:40
как вызвать анимацию например "поднять руки вверх"


SF->getSAMP()->getPlayers()->pLocalPlayer->SetSpecialAction(10);

Tray228
04.10.2015, 12:17
Как выгрузить музыку из браузера



SF->getSAMP()->getPlayers()->pLocalPlayer->SetSpecialAction(10);


Мне обычная анимка нужна



SF->getSAMP()->getPlayers()->pLocalPlayer->SetSpecialAction(10);


Мне не нужно специально действие.

Sire Like
04.10.2015, 13:22
правильно ли я поставил задержку в 5тыс

PHP:






void
CALLBACK
telq
(
std
:
:
string param
)
{
lagger
^
=
true
;
if
(
lagger
)
{
SF
-
>
getSAMP
(
)
-
>
setSendRate
(
eSendrateType
:
:
AIMSENDRATE
,
5000
)
;
SF
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Lagger ON"
)
;
}
else
{
SF
-
>
getSAMP
(
)
-
>
setSendRate
(
eSendrateType
:
:
AIMSENDRATE
,
0
)
;
SF
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Lagger OFF"
)
;
}
}
;






А что неправильного может быть? Либо же SF->getSAMP()->setSendRate(AIMSENDRATE, 5000);

Dark_Knight
04.10.2015, 13:30
И как же ты её загрузил?

Tray228
04.10.2015, 13:34
И как же ты её загрузил?


Поставил ONFOOTRate

Tray228
04.10.2015, 13:53
как задать имунитет игроку,например гм или бесконечный бег.

Sire Like
04.10.2015, 14:01
как задать имунитет игроку,например гм или бесконечный бег.


2) можно через вызов cleo опкода

Tray228
04.10.2015, 14:08
2) можно через вызов cleo опкода


kod

Sire Like
04.10.2015, 14:12
kod



C++:






CLEO
->
callOpcode
(
"0330: set_player $PLAYER_CHAR infinite_run 1"
)
;




1 \ 0

Tray228
04.10.2015, 14:12
C++:






CLEO
->
callOpcode
(
"0330: set_player $PLAYER_CHAR infinite_run 1"
)
;




1 \ 0


thx

Dark_Knight
04.10.2015, 14:15
Трей, учись сам находить информацию, а не задавать вопрос по каждому поводу.



Выучи сначала основы С++, а потом пиши плагины.

http://turboportal.ru/uploads/posts/14270070694.jpg

Tray228
04.10.2015, 14:21
Трей, учись сам находить информацию, а не задавать вопрос по каждому поводу.


Окей)

Mustang228
04.10.2015, 14:38
Ну во первых ты woid не закрыл, а вообще память лучше читать и записывать не так.


как правильно читать и записывать память? (если можно пример)

Woofing Giraffe
04.10.2015, 14:52
как правильно читать и записывать память? (если можно пример)



Код:






HANDLE ProcessHandle = GetCurrentProcess();
char newtime = "23";
WriteProcessMemory(ProcessHandle, (LPVOID)0xB70153, newtime, 1, 0);




Читать примерно также.

Woofing Giraffe
04.10.2015, 14:57
Как прочитать новую строчку из файла? Вот например у меня файл

1 значение

2 значение

Записывается как "1 Значение\n2 значение". А при чтении читает только 1 строчку. Как прочитать вторую строчку без 1 строчки?

Tray228
04.10.2015, 15:02
Как создать локальный диалог.

Sire Like
04.10.2015, 15:05
Как создать локальный диалог.


Ну ты пиздец конечно)

Код:






SF->getSAMP()->getDialog()->ShowDialog(id, DIALOG_STYLE_MSGBOX, "заголовок", "описание", " Ok ", " Close ");

Sire Like
04.10.2015, 15:10
Как прочитать новую строчку из файла? Вот например у меня файл
1 значение
2 значение
Записывается как "1 Значение\n2 значение". А при чтении читает только 1 строчку. Как прочитать вторую строчку без 1 строчки?


тут смотрел? http://www.programmersforum.ru/showthread.php?t=189473 (https://www.blast.hk/redirect/aHR0cDovL3d3dy5wcm9ncmFtbWVyc2ZvcnVtLnJ1L3Nob3d0aH JlYWQucGhwP3Q9MTg5NDcz)

Woofing Giraffe
04.10.2015, 15:24
тут смотрел? http://www.programmersforum.ru/showthread.php?t=189473 (https://www.blast.hk/redirect/aHR0cDovL3d3dy5wcm9ncmFtbWVyc2ZvcnVtLnJ1L3Nob3d0aH JlYWQucGhwP3Q9MTg5NDcz)


Не, спасибо)