Просмотр полной версии : 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
как в 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;
Захожу с упавшим фпс, потом крашит, в чем проблема?
Код:
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
Потому что ты каждый раз пересоздаешь шрифт. Т.к. этот колбэк вызывается по несколько раз в секунду. Создавай его один раз, после инициализации сампа.
Потому что ты каждый раз пересоздаешь шрифт. Т.к. этот колбэк вызывается по несколько раз в секунду. Создавай его один раз, после инициализации сампа.
Создаю после инициализации сампа - 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
Как получить значение хп?
itsLegend
15.08.2015, 00:06
Как получить значение хп?
Уточняй кого именно.
Код:
actor_info *actor = SF->getGame()->actorInfoGet(-1, ACTOR_ALIVE);
actor->hitpoints = 50.0f;
И снова здрасьте, после смерти идет краш, с чем это связано?
Код:
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)
)
if (SF->getGame()->isKeyDown('R') &&
SF->getGame()->actorInfoGet(ACTOR_ALIVE, ACTOR_ALIVE)
)
Так отказывается рендерить, если я жив.
Так отказывается рендерить, если я жив.
PHP:
if
(
SF
-
>
getGame
(
)
-
>
isKeyDown
(
'R'
)
&&
PEDSELF
-
>
GetHealth
(
)
>
0
)
Dark_Knight
15.08.2015, 21:15
Замени на это
SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE) != nullptr
Замени на это
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
В начало файла.
Как сделать чтоб команда приминала несколько параметров?
Как сделать чтоб команда приминала несколько параметров?
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?
А можно ли сделать ноп на входящие RPC?
Да. Зарегай ракнет хук с типом RAKNET_HOOK_TYPE_INCOMING_RPC и в нём лови которые нужно, return false и пакет не пропустит.
DarkExorcist
24.08.2015, 22:57
Да. Зарегай ракнет хук с типом RAKNET_HOOK_TYPE_INCOMING_RPC и в нём лови которые нужно, return false и пакет не пропустит.
а можно как-то отправить серверу пакет о пустой анимации, ну что у моего актера нет анимации?
Почему не показывает админов в сети?
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, у слонобоя код спиздил)
LEL, у слонобоя код спиздил)
лел.
эт тоже не его код =)
https://www.blast.hk/threads/1549/
Sire Like
31.08.2015, 09:07
лел.
эт тоже не его код :)
https://www.blast.hk/threads/1549/
блина, знач он сам не мог написать
а можно как-то отправить серверу пакет о пустой анимации, ну что у моего актера нет анимации?
в онфут синхре нопай 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 в помощь.
Почему не показывает админов в сети?
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? Мне нужен только текст.
И ещё, как сделать что-то типо опкода 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, но так и не нашел.
Смотри, получаешь хэндлы обоих игроков, получаешь координаты одного из них и ставишь второго на эти координаты.
А как поставить одного из них на координаты? Хендл получил, позицию получил.
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
Как сделать обработчик данных диалога?
Локального
слип в хуке или команде вызвет геймфриз, создай новый поток и вызывай с него метод, а у нем можешь уже слип юзать как альтернативу вейту.
Как можно использовать вот это:
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
А как можно пополнить себе хп?
acter->hitpoints вроде бы, но в мта классах должно подобное быть поройся.
а где "мта классы" найти?
набери 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.
Такой вопрос, как создать новый поток?)
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
)
{
}
Как вызвать опкод, в котором уже имеются кавычки? Например 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");
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
есть ли в СФ аналог?
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
Можно ли вызвать опкод в условии плагина?
Что мешает попробовать самому?
Можно ли вызвать опкод в условии плагина?
SF->getCLEO()->callOpcode("0001: wait 0 ms"); // вот тебе пример) синтаксис опкодов таков как и у сб.
DarkExorcist
12.09.2015, 21:30
SF->getGame()->convert3DCoordsToScreen
переводит так же как и
0AB1: call_scm_func @getScreenXYFrom3DCoords
или же он переводит к разрешению экрана, а не к игровому?
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?
Код:
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@
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"
)
;
Решено.
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/ разбирай
В чем соль?
В чем соль?
там есть пример создания диалога
Sire Like
19.09.2015, 15:17
там есть пример создания диалога
Уже разобрался, дефайнилось криво
Не удалось загрузить проект "SFPlugin", так как для него отсутствуют компоненты установки. Чтобы это исправить, запустите программу установки Visual Studio со следующими выбранными элементами:
Установка инструментов Visual C++ 2015 для Windows Desktop
C:\Users\MSI\Desktop\SFPlugin\SFPlugin\SFPlugin.vc xproj : error : Исключение из HRESULT: 0x80041FE2
Че не так?
Не удалось загрузить проект "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
https://www.blast.hk/threads/9166/#post-76230
у меня 15 версия
Woofing Giraffe
22.09.2015, 01:57
у меня 15 версия
Вчера такая же херня была, запускаешь снова пакет установки, жмёшь исправить, выбираешь дополнительные параметры или хз как там, выбираешь всё что предлагается и жмёшь ок, оно закачает нужные файлы и установит.
настройки проекта -> C++ -> препроцессор -> определения препроцессора добавить _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
Sire Like
25.09.2015, 19:28
kak ТПнуть машину на опрдл. координаты? ( в которой сижу )
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;
}
Как поставить метку ка карте?
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);
}
}
И ещё, почему не работает?
Код:
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.
Почему при сканировании строки через sscanf символ маленькая 'я' принимается как конец строки? И как это исправить?
_sscanf_s
или setlocale
Guys How Can i Set Current Vehicle Health ?
Как можно проверить, подключен игрок или нет? На подобии 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
Можно пример пожалуйста?)
Можно пример пожалуйста?)
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
кароч, в диалоге мусор
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
,
" Ясно "
,
""
)
;
любые переменные нужно инициализировать перед использованием. ты не обнулил массив и в нём оказался мусор, затем ты соединяешь свою строку с мусором, итогом становится строка с рандомными символами в начале.
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
и то и другое
Sire Like
29.09.2015, 13:04
можно kak-то изменить угол поворота транспорта?
Как создать такой текст? Он часто на САМП серверах используется.
Скриншот: http://f4.s.qip.ru/2Q3rLnL5.png (https://www.blast.hk/redirect/aHR0cDovL2Y0LnMucWlwLnJ1LzJRM3JMbkw1LnBuZw)
Woofing Giraffe
29.09.2015, 17:31
Game Text это называется
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]
Как сделать НОП, как в собейте.
Dark_Knight
30.09.2015, 00:02
В старом или новом от фипа?
В старом или новом от фипа?
в новом
Sire Like
30.09.2015, 04:58
в новом
хз, мож не то
"Зарегай ракнет хук с типом RAKNET_HOOK_TYPE_INCOMING_RPC и в нём лови которые нужно, return false и пакет не пропустит"
(с) Сэр Опкодер
Вот кусок плагина. При нажатии на 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
;
}
}
хз, мож не то
"Зарегай ракнет хук с типом RAKNET_HOOK_TYPE_INCOMING_RPC и в нём лови которые нужно, return false и пакет не пропустит"
(с) Сэр Опкодер
То, только не обязательно RAKNET_HOOK_TYPE_INCOMING_RPC, всё будет зависеть от того какой пакет/RPC тебе надо проигнорировать.
Как игровое время изменить? Ну там день, ночь, утро и т.д.
Woofing Giraffe
30.09.2015, 10:36
Как игровое время изменить? Ну там день, ночь, утро и т.д.
Через память.
Через память.
Я не умею с памятью работать, можно код?
Sire Like
30.09.2015, 12:27
можно kak-то изменить угол поворота транспорта?
можно kak-то изменить угол поворота транспорта?
только через матрицу
Sire Like
30.09.2015, 13:16
только через матрицу
я в курсе, код можно? а то мудрил в итоге бред получился.
2) "vect3_copy" как в sf api юзать?
Как сделать перезаход на сервер при этом поменя имя через команду например "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 тупо крашит игру, если цикл убрать то такого не будет происходить. Что я делаю не так? И как это исправить?
Код:
#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?
как сделать проверки?
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, то находится ли он в зоне стрима.
Код:
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, "Такого игрока нет.");
return SF->getSAMP()->getChat()->AddChatMessage(0xB0B0B0, "Такого игрока нет.");
вот прям так?
Woofing Giraffe
01.10.2015, 00:35
return SF->getSAMP()->getChat()->AddChatMessage(0xB0B0B0, "Такого игрока нет.");
вот прям так?
Ну да, это прерывает функцию если условие не выполнено и выводит сообщение в чат.
Ну да, это прерывает функцию если условие не выполнено и выводит сообщение в чат.
Донес,спасибо,я просто первый день изучаю SF API. :D
Sire Like
01.10.2015, 00:37
Как сделать перезаход на сервер при этом поменя имя через команду например "sname [nick]"
Могу скинуть через час.с телефона промт
Могу скинуть через час.с телефона промт
Давай, жду. ;)
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 и поток,хотя я в этом не уверен
попробуй через sleep и поток,хотя я в этом не уверен
Это как?
Как сделать телепорт по метке?
Ну лично я так делаю
Код:
if (!SF->getSAMP()->getPlayers()->IsPlayerDefined(plid, false)) return SF->getSAMP()->getChat()->AddChatMessage(0xB0B0B0, "Такого игрока нет.");
в маин луп это идет?
Woofing Giraffe
01.10.2015, 20:05
в маин луп это идет?
Смотря куда, но лучше не надо
Смотря куда, но лучше не надо
http://pastebin.com/XL3dN6Yz (https://www.blast.hk/redirect/aHR0cDovL3Bhc3RlYmluLmNvbS9YTDNkTjZZeg) вот я сделал примерно.Как лучше сделать подскажи.
Как проверить на то, что актёр мёртв?
Смотря куда, но лучше не надо
Дай лучше ВК)
if Actor.Death()
Как то так
нет такого
if Actor.Death()
Как то так
Я знаю, что ты знаешь как сменить игровое время. Подскажешь?
С клео перепутал, лол
а как сделать в SF api?
как сделать проверку на что мой актер находится в каре.
Dark_Knight
01.10.2015, 21:02
как сделать проверку на что мой актер находится в каре.
Открой инклуды сф и смотри.
Woofing Giraffe
01.10.2015, 21:04
Дай лучше ВК)
В личку скинул.
Как сделать что-бы текст двигался в разные стороны.
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
И без каких либо функций
Как телепортироватсья по метке
Как сделать синхру applyanimation
помогите вот такая проблема возникает при компиляции плагина 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
Как сделать синхру applyanimation
в структуре stOnFootData меняй sCurrentAnimID и sAnimFlags
Как правильно записать sCurrentAnimID и sAnimFlags
А то чет не получается.
Как правильно записать sCurrentAnimID и sAnimFlags
А то чет не получается.
покажи как ты делал
покажи как ты делал
Код:
#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
Код:
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);
};
Мда чет ты натворил ерунды что хоть падай и плачь.
Код:
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
Код:
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
а в чем отличия от memcpy и memset
memset может обнулять память, чаще всего для этого её и юзают, чтобы почистить структуры/классы и тд. А memcpy наоборот копирует их откуда-то куда-то.
memset может обнулять память, чаще всего для этого её и юзают, чтобы почистить структуры/классы и тд. А memcpy наоборот копирует их откуда-то куда-то.
Спасибо)
Sire Like
03.10.2015, 14:20
1) Как проверить что у мну дигл в руке?
2) Как проверить что я выстрелил\стреляю ?
1) Как проверить что у мну дигл в руке?
2) Как проверить что я выстрелил\стреляю ?
1. if (SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon == 24)
2. Юзай хук исходящей буллет синхры.
Как проиграть специально действие без хука.
Как проиграть специально действие без хука.
если знаешь клео может просто вызывать опкоды через клео обработчик.
если знаешь клео может просто вызывать опкоды через клео обработчик.
Ааа точно,спасибо.
Как проиграть специально действие без хука.
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); Но бля, записывает только "Текст лолол ", дальше строка обрывается
как заспавнить игрока без хука?
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
;
}
ну так у тебя одна переменная на две функции, нахуя? сделай на обе функции две разные переменные
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
}
;
как вызвать анимацию например "поднять руки вверх"
как вызвать анимацию например "поднять руки вверх"
SF->getSAMP()->getPlayers()->pLocalPlayer->SetSpecialAction(10);
Как выгрузить музыку из браузера
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
И как же ты её загрузил?
И как же ты её загрузил?
Поставил ONFOOTRate
как задать имунитет игроку,например гм или бесконечный бег.
Sire Like
04.10.2015, 14:01
как задать имунитет игроку,например гм или бесконечный бег.
2) можно через вызов cleo опкода
2) можно через вызов cleo опкода
kod
Sire Like
04.10.2015, 14:12
kod
C++:
CLEO
->
callOpcode
(
"0330: set_player $PLAYER_CHAR infinite_run 1"
)
;
1 \ 0
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
Трей, учись сам находить информацию, а не задавать вопрос по каждому поводу.
Окей)
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 строчки?
Как создать локальный диалог.
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)
Не, спасибо)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot