PDA

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


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

urShadow
06.12.2014, 00:59
[Список доступных классов:

CSAMP, CRakNet, CRender, CCLEO, CGame.

Описание:

SF API это удобный инструмент позволяющий использовать возможности плагина SAMPFUNCS на максимум.

Предоставлены удобные классы для максимально простого и эффективного написания своих плагинов на языке программирования c++.

Более подробная информация вскоре будет выложена в Wiki (http://blasthack.net/wiki/)

Установка:

Папку SFAPI положить в каталог своего проекта, в настройках выставить тип конфигурации .dll и конечное расширение .sf.

Затем, объявить объект класса CSAMPFUNCS и в точке входа в приложение при выполнении операции DLL_PROCESS_ATTACH вызвать функцию obj_api->initPlugin( mainloop, hModule ), где mainloop - это указатель на функцию которая будет выполняться в основном цикле игры, а hModule это дескриптор.

Либо извлечь готовый настроенный проект SFPlugin.zip из архива с SF (http://blasthack.net/threads/17/).

Список уроков:

1. Основы API (http://blasthack.net/wiki/tutorials:api_lesson_basics)

2. Dialog hider (http://blasthack.net/wiki/tutorials:api_lesson_dialog_hider)

3. Render (http://blasthack.net/wiki/tutorials:api_lesson_render)

4. RakNet (http://blasthack.net/wiki/tutorials:api_lesson_raknet)

Разработчик SF API: urShadow

ScripterAHK
06.12.2014, 20:52
Может кто скинуть скомпилированный .dll?

Uztor
06.12.2014, 22:05
Вы могли бы сделать пример для registercommand?

urShadow
06.12.2014, 22:30
На днях начну писать статьи посвященные работе с API. Всё подробно будет разъяснено с нуля.

NarutoUA
07.12.2014, 16:23
Если просто подключить проэкт и компилировать под asi будет работать?

urShadow
07.12.2014, 16:42
Нет, специально сделано, чтоб работало только с .sf плагинами.

AxweII
07.12.2014, 16:58
Про класс CCLEO можно поподробнее? Хотя бы пару слов про него

urShadow
07.12.2014, 17:58
В будущих уроках покажу.

NarutoUA
08.12.2014, 00:19
Добавь возможность отсылать уроки на вики с предмодерацией.

iAmerican
08.12.2014, 00:34
Как фиксануть?

http://i9.pixs.ru/storage/3/7/0/2014120723_5618876_15068370.png

urShadow
08.12.2014, 00:37
Добавь возможность отсылать уроки на вики с предмодерацией.


Эта возможность есть.

http://blasthack.net/wiki/tutorials:add

Только учти, что основной цикл уроков веду только я, если ты решишь свои уроки писать, то пусть они не пересекаются с моими.

Dark_Knight
08.12.2014, 01:20
Как фиксануть?

http://i9.pixs.ru/storage/3/7/0/2014120723_5618876_15068370.png




Установи DirectX SDK.

Frixen
08.12.2014, 14:01
0B6D: render 30@ = create_font "Verdana" height 13 flags 0x9

0B6F: render font 30@ draw_text 2@ pos 23@ 24@ color 0xffff7700

Как это будет выглядеть в API

itsLegend
08.12.2014, 16:07
0B6D: render 30@ = create_font "Verdana" height 13 flags 0x9
0B6F: render font 30@ draw_text 2@ pos 23@ 24@ color 0xffff7700

Как это будет выглядеть в API




Дабы вопрос не висел, в вики сегодня будет урок по этому.

А я прост кину свой код с которым мне помог urS:

http://dumpz.org/1270415/ (https://www.blast.hk/redirect/aHR0cDovL2R1bXB6Lm9yZy8xMjcwNDE1Lw)

Рисует квадрат и в левой части квадрата текст

Uztor
08.12.2014, 23:19
Как использовать это с api?

PACKET_BULLET_SYNC = 224

struct stBulletSync ( size =39)

BYTE bHitType;+0

short iHitID;+1

float fBullFrom[3];+3

float fBullTo[3];+15

float fBodyOfsset[3];+27

SF->getRakNet()->SendRPC(224, ?, HIGH_PRIORITY, RELIABLE_ORDERED, '\000', false);

urShadow
09.12.2014, 01:12
Использовать также как и в собе, просто функция отправки другая.

kemperrr
09.12.2014, 16:51
Сделай урок как сделать интерфейс на подобии uChat

NarutoUA
10.12.2014, 22:56
Можно ли хуки ставить? хотелось бы перехватить отправку сообщения

urShadow
10.12.2014, 23:05
Можно, на выходных напишу подробный урок по работе с RakNet.

AxweII
11.12.2014, 02:20
Такая тема:

Код:






fatal error C1083: Cannot open include file: 'd3dx9.h': No such file or directory






DirectX SDK стоит!

Frixen
11.12.2014, 14:28
Такая тема:

Код:






fatal error C1083: Cannot open include file: 'd3dx9.h': No such file or directory





DirectX SDK стоит!




Попробуй указать путь до него, мне помогло

PoccoJI
11.12.2014, 19:37
ФИП, ЕВГЕН, когда структуру actor_info добавите?

urShadow
11.12.2014, 19:54
С каких пор ты ко мне на вы? :D

Добавлю на выходных мб.

Uztor
12.12.2014, 06:26
Как можно создать bitstream для SendRPC?

PoccoJI
12.12.2014, 10:16
КакможносоздатьbitstreamдляSendR PC?




Код:






BitStream bit;
bit.Write();
SF->getRakNet()->SendRPC(id RPC,&bit,HIGH_PRIORITY,RELIABLE_ORDERED,0,0);

Uztor
13.12.2014, 02:56
Почему повторное соединение не работает?

Код:






SF->getSAMP()->disconnect(0);
SF->getSAMP()->getInfo()->RestartGame();

PoccoJI
13.12.2014, 16:12
Почему повторное соединение не работает?

Код:






SF->getSAMP()->disconnect(0);
SF->getSAMP()->getInfo()->RestartGame();





use

SF->getSAMP()->disconnect(0);

SF->getSAMP()->getInfo()->RestartGame();

+ SF->getSAMP()->getInfo()->iGameState = GAMESTATE_WAIT_CONNECT;

Dark_Knight
13.12.2014, 16:18
use

Код:






#define FUNC_RESTARTGAME 0x9280
#define SAMP_INFO_OFFSET 0x212A80
void restartGame ()
{
DWORD g_dw_SAMP_Addr = (DWORD)GetModuleHandle("samp.dll");
uint32_t samp_info = g_dw_SAMP_Addr + SAMP_INFO_OFFSET;
uint32_t func = g_dw_SAMP_Addr + FUNC_RESTARTGAME;
__asm mov eax, dword ptr[samp_info]
__asm mov ecx, dword ptr[eax]
__asm call func
__asm pop eax
__asm pop ecx
}







Как это обносится к апи? -_-

Uztor
13.12.2014, 18:36
use
SF->getSAMP()->disconnect(0);
SF->getSAMP()->getInfo()->RestartGame();
+ SF->getSAMP()->getInfo()->iGameState = GAMESTATE_WAIT_CONNECT;




[15:36:12] Connecting to **.***.***.***:7777...

[15:36:12] Connected. Joining the game...

[15:36:12] CONNECTION REJECTED: Unacceptable NickName

[15:36:12] Please choose another nick between and 3-20 characters

[15:36:12] Please use only a-z, A-Z, 0-9

[15:36:12] Use /quit to exit or press ESC and select Quit Game

FYP
13.12.2014, 18:44
SF->getSAMP()->disconnect(0);

SF->getSAMP()->disconnect(100);

Uztor
13.12.2014, 19:08
SF->getSAMP()->disconnect(100);

хорошо работает

Uztor
13.12.2014, 19:59
Что не так?

Код:






//NAMETAGS
for (int i = 0; i getSAMP()->getPlayers()->pRemotePlayer[i];
if (SF->getSAMP()->getPlayers()->IsPlayerDefined(i))
{
char buffer[24];
sprintf(buffer, "%s", pPlayer->szPlayerName);
SF->getSAMP()->getInfo()->pPools->pPool_Text3D->Create3DText(i, buffer,0.00,5000.0,true,i);
}
}

AxweII
16.12.2014, 00:18
Код:






void _cdecl cmd_show_info_player( char *param )
{
int i = atoi( param );

char buf[128];

stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];

sprintf_s( buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",
pPlayer->szPlayerName,
pPlayer->iPing,
pPlayer->iScore,
pPlayer->iIsNPC,
pPlayer->pPlayerData->iAFKState == 2 );

SF->getSAMP()->getChat()->AddChatMessage( -1, buf );
};

void CALLBACK mainloop(void)
{
static bool init = false;
if(!init)
{
if(!SF->getSAMP()->IsInitialized()) return;
SF->getSAMP()->registerChatCommand("ubot", cmd_show_info_player);
init = true;
}
}




При в ходе крашит игру. Если убрать регистрацию команды то все норм. Где ошибка?

PoccoJI
16.12.2014, 11:44
Код:






void _cdecl cmd_show_info_player( char *param )
{
int i = atoi( param );

char buf[128];

stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];

sprintf_s( buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",
pPlayer->szPlayerName,
pPlayer->iPing,
pPlayer->iScore,
pPlayer->iIsNPC,
pPlayer->pPlayerData->iAFKState == 2 );

SF->getSAMP()->getChat()->AddChatMessage( -1, buf );
};

void CALLBACK mainloop(void)
{
static bool init = false;
if(!init)
{
if(!SF->getSAMP()->IsInitialized()) return;
SF->getSAMP()->registerChatCommand("ubot", cmd_show_info_player);
init = true;
}
}




При в ходе крашит игру. Если убрать регистрацию команды то все норм. Где ошибка?



void cmd_show_info_player(char *param);

pPlayer->pPlayerData->iAFKState == 2

== 2 убери

AxweII
16.12.2014, 13:06
Даже если так сделать:

Код:






#include
#include
#include
#include "CSAMPFUNCS.h"

CSAMPFUNCS *SF = new CSAMPFUNCS();

void _cdecl cmd_show_info_player( char *param ){};

void CALLBACK mainloop(void)
{
static bool init = false;
if(!init)
{
if(!SF->getSAMP()->IsInitialized()) return;
SF->getSAMP()->registerChatCommand("ubot", cmd_show_info_player);
init = true;
}
}

BOOL APIENTRY DllMain( HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved )
{
switch ( dwReasonForCall )
{
case DLL_PROCESS_ATTACH:
SF->initPlugin( mainloop, hModule );
}
return true;




Все равно краш. Проблема именно в регистрации команды, если в место нее засунуть вывод сообщения в чат то все пашет.

PoccoJI
16.12.2014, 13:14
Даже если так сделать:

Код:






#include
#include
#include
#include "CSAMPFUNCS.h"

CSAMPFUNCS *SF = new CSAMPFUNCS();

void _cdecl cmd_show_info_player( char *param ){};

void CALLBACK mainloop(void)
{
static bool init = false;
if(!init)
{
if( !SF->getSAMP()->IsInitialized() )
return;
if(!SF->getSAMP()->IsInitialized()) return;
SF->getSAMP()->registerChatCommand("ubot", cmd_show_info_player);
init = true;
}
}

BOOL APIENTRY DllMain( HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved )
{
switch ( dwReasonForCall )
{
case DLL_PROCESS_ATTACH:
SF->initPlugin( mainloop, hModule );
}
return true;




Все равно краш. Проблема именно в регистрации команды, если в место нее засунуть вывод сообщения в чат то все пашет.



Код:






#include
#include
#include
#include "CSAMPFUNCS.h"

CSAMPFUNCS *SF = new CSAMPFUNCS();

void cmd_show_info_player( char *param )
{
int i = atoi( param );

char buf[128];

stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];

sprintf_s( buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",
pPlayer->szPlayerName,
pPlayer->iPing,
pPlayer->iScore,
pPlayer->iIsNPC,
pPlayer->pPlayerData->iAFKState );

SF->getSAMP()->getChat()->AddChatMessage( -1, buf );
}

void CALLBACK mainloop(void)
{
static bool init = false;
if(!init)
{
if(!SF->getSAMP()->IsInitialized()) return;
SF->getSAMP()->registerChatCommand("ubot",(CMDPROC) cmd_show_info_player);
init = true;
}
}

BOOL APIENTRY DllMain( HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved )
{
switch ( dwReasonForCall )
{
case DLL_PROCESS_ATTACH:
SF->initPlugin( mainloop, hModule );
}
return true;
}




вот абсалютли рабочий код

вот что сделал SF->getSAMP()->registerChatCommand("ubot",(CMDPROC) cmd_show_info_player);

AxweII
16.12.2014, 19:51
Однако все равно крашит. Что то тут не так.. Ведь без этой гребаной регистрации команды все работает!

CarLCas
17.12.2014, 20:42
Подскажите, пожалуйста, как отправить команду/текст в чат?

Uztor
28.12.2014, 18:38
Hello, what is wrong?

Код:






if (params->packetId == ScriptRPCEnumeration::RPC_ScrSetPlayerHealth)
{
short int sPlayerID;
float health;
char buf[256];
params->bitStream->Read(sPlayerID);
params->bitStream->Read(health);
params->bitStream->ResetReadPointer();
sprintf(buf, "%s (%d) health set to %.1f gesetzt", SF->getSAMP()->getPlayers()->GetPlayerName(sPlayerID), sPlayerID, health);
log(buf);
}

itsLegend
28.12.2014, 18:53
Maybe log(buf);?

Change to SF->log(buf); or... it's(log(buf)) your function?

urShadow
28.12.2014, 20:05
Hello, what is wrong?



Код:






if (params->packetId == ScriptRPCEnumeration::RPC_ScrSetPlayerHealth)
{
float health;
char buf[128];
params->bitStream->ResetReadPointer();
params->bitStream->Read(health);
params->bitStream->ResetReadPointer();
sprintf(buf, "My health set to %.2f", health);
SF->Log( buf );
}

Uztor
28.12.2014, 23:01
Maybe log(buf);?
Change to SF->log(buf); or... it's(log(buf)) your function?


log is my own function. :)

Thanks @urShadow (https://www.blast.hk/members/6/).

Uztor
29.12.2014, 00:46
How can I get the playerid from name?

Vikktor
29.12.2014, 06:24
Make a loop and use stricmp.

0pc0d3R
04.01.2015, 20:20
Распишите пожалуйста по подробнее о структуре stBulletData, буду очень благодарен. А то я не понял какие параметры что значат. Допустим fOrigin, fCenter и fTarget. И еще подскажите как получать ближающего удаленного игрока.

0pc0d3R
04.01.2015, 23:41
Хотелось бы больше уроков о CRakNet.

vladikf1
06.01.2015, 13:45
Как сделать тп через SF API?

0pc0d3R
06.01.2015, 16:45
Как сделать тп через SF API?



PHP:






stOnFootData pos
;
memset
(
&
pos
,
0
,
sizeof
(
stOnFootData
)
)
;
pos
=
SF
-
>
getSAMP
(
)
-
>
getPlayers
(
)
-
>
pLocalPlayer
-
>
onFootData
;
pos
.
fPosition
[
0
]
=
x
;
pos
.
fPosition
[
1
]
=
y
;
pos
.
fPosition
[
2
]
=
z
;
BitStream PosSync
;
PosSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
PosSync
.
Write
(
(
PCHAR
)
&
pos
,
sizeof
(
stOnFootData
)
)
;
SF
-
>
getRakNet
(
)
-
>
SendPacket
(
&
PosSync
)
;

itsLegend
06.01.2015, 19:13
Как сделать тп через SF API?



Код:






void actor_teleport(float x, float y, float z)
{
actor_info *self = SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE);
self->base.matrix[4 * 3] = x;
self->base.matrix[4 * 3 + 1] = y;
self->base.matrix[4 * 3 + 2] = z;
}




actor_teleport(0.0, 0.0, 0.0);

kemperrr
13.01.2015, 18:22
Расскажите про







PHP:






SF
-
>
getGame
(
)
-
>
emulateGTAKey




, как эмулировать нажатие клавиши Y и N ?

©Ded_Fedot
15.01.2015, 09:23
Пишется в Visual Studio? Если да то подскажите какую лучше использвовать

Dark_Knight
15.01.2015, 15:54
Пишется в любой IDE для С++. Используй ту которая тебе нравится. Если будешь ставить Visual Studio, то юзай лучше Ultimate.

Dark_Knight
18.01.2015, 13:52
Как открыть проект, кторый вместе с сампфунксом? И как его скимпилировать? Обьясните нубу


Через среды разработок приложений. К примеру, Visual Studio. А так же для компиляции нужно установить DirectX SDK.

Dark_Knight
18.01.2015, 18:57
ф5

kemperrr
18.01.2015, 22:34
Стоит визуал студио 2012, стоит директ сдк... Открывать main.cpp? И как скомпилить?


Открывать нужно файл с расширением .sln

0pc0d3R
31.01.2015, 00:16
Блин, ниче не происходит... Скажи, как из файла main.cpp сделать файл .sf


в свойствах проекта ставь в его имени, в конце расширение .sf

0pc0d3R
31.01.2015, 00:59
Юршедов давай больше уроков по CRakNet и CGame ))

0pc0d3R
06.02.2015, 14:42
Дайте кто нибудь скомплированый проект для DevC++ а то у меня не получается сделать сборку для сф плагина. Куча ерроров из SFAPI.

schokk
06.02.2015, 16:20
Распишите пожалуйста по подробнее о структуре stBulletData, буду очень благодарен. А то я не понял какие параметры что значат. Допустим fOrigin, fCenter и fTarget. И еще подскажите как получать ближающего удаленного игрока.


fOrigin - координаты откуда стреляешь

fTarget - куда стреляешь

fCenter - смещение относительно центра

Как получить ближайшего - делаешь цикл от 1 до 1000 например(это иды в сампе), пытаешься получить по ним хэндл игрока, если получилось - получаешь координаты игрока. Готовых ф-ций для вычисления расстояния не знаю, но впринципе самому написать несложно

0pc0d3R
06.02.2015, 16:37
fOrigin - координаты откуда стреляешь
fTarget - куда стреляешь
fCenter - смещение относительно центра

Как получить ближайшего - делаешь цикл от 1 до 1000 например(это иды в сампе), пытаешься получить по ним хэндл игрока, если получилось - получаешь координаты игрока. Готовых ф-ций для вычисления расстояния не знаю, но впринципе самому написать несложно


спасибо, и еще вопросик, у Dev C++ можно скомпилить нормально сф плагин? Компилю сборку, ругается(( Причём вся API не тронутая.

0pc0d3R
09.02.2015, 22:57
Когда новые уроки?

urShadow
10.02.2015, 01:16
Когда будут идеи для уроков.

0pc0d3R
10.02.2015, 02:26
Ну много C-Классов в API плачут по урокам, давай по CGAME хотя бы)

0pc0d3R
10.02.2015, 20:36
Хелп, гта крашит. Что не так у моем вызове клео опкода?!

PHP:






scriptvalue_t uid
=
SF
-
>
getSAMP
(
)
-
>
getPlayers
(
)
-
>
GetActorHandleFromSAMPPlayerID
(
SF
-
>
getSAMP
(
)
-
>
getPlayers
(
)
-
>
sLocalPlayerID
)
;
scriptvalue_t vid
=
SF
-
>
getSAMP
(
)
-
>
getVehicles
(
)
-
>
GetCarHandleFromSAMPCarID
(
rPlayer
-
>
pPlayerData
-
>
sVehicleID
)
;
SF
-
>
getCLEO
(
)
-
>
SetLocalVar
(
0
,
uid
)
;
SF
-
>
getCLEO
(
)
-
>
SetLocalVar
(
1
,
vid
)
;
SF
-
>
getCLEO
(
)
-
>
callOpcode
(
"036A: put_actor 0@ in_car 1@"
)
;

itsLegend
10.02.2015, 20:45
Почему хендл кара и игрока имеет тип scriptvalue_t? Если для них должен быть DWORD или же int

0pc0d3R
10.02.2015, 21:17
Почему хендл кара и игрока имеет тип scriptvalue_t? Если для них должен быть DWORD или же int


ну так в SetLocalInt второй параметр scriptvalue_t типа, если ставлю другой - ругается.

Во, поставил DWORD, скомпилило, щас протестью.

0pc0d3R
10.02.2015, 21:20
Всё равно гта вылетела(( Хоть и DWORD...

itsLegend
10.02.2015, 21:54
Хрен знает крч, я нуб(

Dark_Knight
10.02.2015, 22:10
Хрен знает крч, я нуб(


Фип говорил, что ССлео может неправильно работать.

0pc0d3R
10.02.2015, 22:11
Фип говорил, что ССлео может неправильно работать.


Хоть кто-то удачно вызывал опкоды без вылетов?))

kemperrr
10.02.2015, 22:51
Фип говорил, что ССлео может неправильно работать.


А Фип не говорил когда исправит эмуляцию клавиш в FS API?

Dark_Knight
11.02.2015, 03:53
А Фип не говорил когда исправит эмуляцию клавиш в FS API?


А что с ней не так?

kemperrr
11.02.2015, 21:19
А что с ней не так?


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

Dark_Knight
11.02.2015, 21:26
Попробуй написать на клео сначала и потом так же само написать на С++

kemperrr
11.02.2015, 21:50
Попробуй написать на клео сначала и потом так же само написать на С++


На клео все четко, а на c++ не хочет

Mustang228
12.02.2015, 17:38
объясните нубу, открыл в MVS Ultimate main.cpp, cделал все по уроку.

вопрос: как скомпилировать?

0pc0d3R
12.02.2015, 18:20
объясните нубу, открыл в MVS Ultimate main.cpp, cделал все по уроку.
вопрос: как скомпилировать?


ф5 жми или справа у обозревателе решений правой кнопкой по имени проекта и собрать решение.

Mustang228
13.02.2015, 00:22
ф5 жми или справа у обозревателе решений правой кнопкой по имени проекта и собрать решение.


на f5 ничего не происходит. Там скомпилировать нету, только сохранить main.cpp

Dark_Knight
13.02.2015, 04:15
объясните нубу, открыл в MVS Ultimate main.cpp, cделал все по уроку.
вопрос: как скомпилировать?


Ф5. Только нужно открывать проект, а не СПП

kemperrr
13.02.2015, 13:28
на f5 ничего не происходит. Там скомпилировать нету, только сохранить main.cpp


Проект открывается файлом .sln

Mustang228
13.02.2015, 20:10
Ф5. Только нужно открывать проект, а не СПП





Проект открывается файлом .sln


Открыл SFPlugin.sln =>




http://i.imgur.com/ghwn6Uq.png

kemperrr
13.02.2015, 21:22
Открыл SFPlugin.sln =>


ghwn6Uq.pngkemperrr · 13 Фев 2015 в 20:22' data-fancybox="lb-post-62543" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="/proxy.php?image=http%3A%2F%2Fi.imgur.com%2Fghwn6Uq .png&hash=ce0ca69c7f5fa5970c4150bf7ec90343" style="cursor: pointer;" title="ghwn6Uq.png">
http://i.imgur.com/ghwn6Uq.png





Хм.. В VS я не селен, но то что открывать именно .sln это я точно знаю. Что за проблема у тебя, не знаю. Погугли.

iAmerican
14.02.2015, 21:34
http://pastebin.com/RUNcbaJy (https://www.blast.hk/redirect/aHR0cDovL3Bhc3RlYmluLmNvbS9SVU5jYmFKeQ)

Почему как только доходит до диалога авторизации сразу крашит?

itsLegend
14.02.2015, 21:37
Походу перебрал со созданием шрифта.

1 раз его нужно создавать и лучше перед инициализацией D3DCallback'а.

D3DCallback является "циклом", он вызывается несколько раз за секунду.

0pc0d3R
16.02.2015, 00:05
Ребят как тпхнуть игрока в кар?

san0
17.02.2015, 21:05
1) расстояние от точки до точки

2) кликабельный текст

PoccoJI
18.02.2015, 12:33
1) расстояние от точки до точки
2) кликабельный текст


1)




Код:





[CODE]
void vect3_vect3_sub ( const float in1[3], const float in2[3], float out[3] )
{
int i;

for ( i = 0; i




это из соба.

Код:






float dist = vect3_dist(coords,coords2);




2)Берешь позицию курсора







Код:






SF->getGame()->getCursorPos()




если курсор в районе твоего текста и нажата левая кнопка мыши(VK_LBUTTON), тогда выполняй действие

Dark_Knight
18.02.2015, 13:50
2) кликабельный текст



Код:





[CODE]
bool OnMouseHover(float x, float y, float w, float h)
{
POINT MousePosition = SF->getGame()->getCursorPos();
return(MousePosition.x >= x && MousePosition.x = y && MousePosition.y

san0
18.02.2015, 23:21
1)




Код:





[CODE]
void vect3_vect3_sub ( const float in1[3], const float in2[3], float out[3] )
{
int i;

for ( i = 0; i




это из соба.

Код:






float dist = vect3_dist(coords,coords2);




2)Берешь позицию курсора







Код:






SF->getGame()->getCursorPos()




если курсор в районе твоего текста и нажата левая кнопка мыши(VK_LBUTTON), тогда выполняй действие



[QUOTE="Dark_Knight"]

Код:





[CODE]
bool OnMouseHover(float x, float y, float w, float h)
{
POINT MousePosition = SF->getGame()->getCursorPos();
return(MousePosition.x >= x && MousePosition.x = y && MousePosition.y

Vikktor
19.02.2015, 18:16
SF->getGame()->emulateGTAKey(17, 255);

не работает, помочь?

iAmerican
19.02.2015, 19:35
Можно ли проверить что игрок был сдвинут\тпшнут сервером \ администратором ?

PoccoJI
19.02.2015, 19:42
Можно ли проверить что игрок был сдвинут\тпшнут сервером \ администратором ?


Если ты про локального педа, тогда хукай RPC_ScrSetPlayerPos.

iAmerican
19.02.2015, 20:22
Если ты про локального педа, тогда хукай RPC_ScrSetPlayerPos.


Не, того чей ид будет в переменной и в зоне стрима естественно.

itsLegend
19.02.2015, 20:33
SF->getGame()->emulateGTAKey(17, 255);

не работает, помочь?


Not working. It's bug. Wait next version.

itsLegend
19.02.2015, 20:34
Можно ли проверить что игрок был сдвинут\тпшнут сервером \ администратором ?


Локального -



Если ты про локального педа, тогда хукай RPC_ScrSetPlayerPos.



Удаленного - никак. Только сохранять позицию и чекать с текущей, но это уже будет другой результат.

Skadi
22.02.2015, 14:54
Почему когда пишу команду без параметров, то вылетает ошибка игры?

PHP:






int carid
=
std
:
:
stoi
(
param
)
;
BitStream bs
;
bs
.
Write
(
carid
)
;
SF
-
>
getRakNet
(
)
-
>
SendRPC
(
RPC_VehicleDestroyed
,
&
bs
,
HIGH_PRIORITY
,
RELIABLE_ORDERED
,
NULL
,
NULL
)
;

PoccoJI
22.02.2015, 15:05
Почему когда пишу команду без параметров, то вылетает ошибка игры?

PHP:






int carid
=
std
:
:
stoi
(
param
)
;
BitStream bs
;
bs
.
Write
(
carid
)
;
SF
-
>
getRakNet
(
)
-
>
SendRPC
(
RPC_VehicleDestroyed
,
&
bs
,
HIGH_PRIORITY
,
RELIABLE_ORDERED
,
NULL
,
NULL
)
;






Код:






if( param.empty() ) return;

iAmerican
23.02.2015, 16:21
Как проверять последнею строку на определенный текст?

Skadi
26.02.2015, 04:25
Помогите, вообщем, вот код:

PHP:






if
(
param
.
empty
(
)
)
return
;
int carid
=
std
:
:
stoi
(
param
)
;
BitStream bs
;
bs
.
Write
(
carid
)
;
SF
-
>
getRakNet
(
)
-
>
SendRPC
(
RPC_VehicleDestroyed
,
&
bs
,
HIGH_PRIORITY
,
RELIABLE_ORDERED
,
NULL
,
NULL
)
;




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

И ещё один вопрос, как сделать проверку на стрим, то бишь если кара с таким id не будет в стриме, то напишет в чат об этом. Ну и проверку на водимый параметр, то бишь если команда введена без параметров или с параметром в виде буквы, то напишет в чат об этом.

urShadow
26.02.2015, 11:26
int carid = atoi( param.c_str() );

Skadi
26.02.2015, 16:12
int carid = atoi( param.c_str() );


Спасибо.

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

Dark_Knight
26.02.2015, 16:25
if sscanf

Skadi
26.02.2015, 23:00
if sscanf


Я нубоват в этом. Использовать так? - if ( !sscanf == ( atoi( param.c_str() ) ) )

Таким способом работает, но только на буквы, а как сделать что бы работала ещё и на пустой параметр?

itsLegend
26.02.2015, 23:36
Код:






int iParam;
if (sscanf(param.c_str(), "%d", &iParam) == 0) return; // sscanf не прочитал параметры




Почему бы просто не зайти в гугл с запросом sscanf?)

Skadi
27.02.2015, 07:02
Почему бы просто не зайти в гугл с запросом sscanf?)


Спасибо большое) Но как добавить проверку на пустой параметр, то бишь не на букв и цифры, а на пробел.

Dark_Knight
27.02.2015, 09:40
Если есть пробел, это тебе не пустой параметр.

Skadi
27.02.2015, 17:16
Если есть пробел, это тебе не пустой параметр.


Не правильно выразился я. Я имею введу на пустую строку, вот.

itsLegend
27.02.2015, 17:20
if ( param.empty() ) return;

urShadow
02.03.2015, 00:40
Предлагайте идеи какие функции вы хотите увидеть в следующей версии SF API.

Skadi
06.03.2015, 05:32
Можно как то реализовать нажатие определённого пункта в диалоге?

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

Основа команды это обычный бинд который вводит команду, но остаётся сама функция которая будет выбирать пункт в диалоге.

itsLegend
06.03.2015, 07:32
sendDialogResponse

0pc0d3R
06.03.2015, 17:04
Предлагайте идеи какие функции вы хотите увидеть в следующей версии SF API.


Мта классы)

0pc0d3R
06.03.2015, 17:08
Давай больше уроков посвященных апи. Например создание клиентских диалогов (обычных и DXTU).

О CGame каких-то тоже бы.

Skadi
07.03.2015, 10:38
Как узнать id определённого диалога? Помню в каком то собе была такая функция, но увы, я его не нашёл, а id очень нужно узнать.)

з.ы. ид не те что стили, я их и так знаю))

upd: всё, узнал через самп-бот)

san0
07.03.2015, 17:24
Код:






char textpath[MAX_PATH] = "SAMPFUNCS\\image.png";
stTextureInfo *point = fTxd;
point->szTexturePath = textpath; // тут ошибка




При установке другого типа (к примеру iResourceID) проблем нет

dimoz
08.03.2015, 01:48
Предлагайте идеи какие функции вы хотите увидеть в следующей версии SF API.


Функции для работы с камерой. RestoreWithJumpCut, например.

urShadow
08.03.2015, 04:02
char textpath[MAX_PATH] = "SAMPFUNCS\\image.png";
stTextureInfo *point = fTxd;
point->szTexturePath = textpath; // тут ошибка

При установке другого типа (к примеру iResourceID) проблем нет


strcpy( point->szTexturePath, textpath );

smart1337
19.03.2015, 13:02
в сф есть готовые функции типа read/write processmemory?

Dark_Knight
19.03.2015, 13:13
В СФ апи нет. В самом С++ да.

CarLCas
19.03.2015, 21:09
Подскажите пожалуйста:

1) Как отобразить курсор, пробовал SF->getSAMP()->getMisc()->ToggleCursor(1,true), не получилось

2) SF->getSAMP()->getPlayers()->iLocalPlayerPing обновляет пинг только при открытие tab, можно ли реализовать обновление без нажатия tab?

san0
20.03.2015, 01:34
Подскажите пожалуйста:
1) Как отобразить курсор, пробовал SF->getSAMP()->getMisc()->ToggleCursor(1,true), не получилось
2) SF->getSAMP()->getPlayers()->iLocalPlayerPing обновляет пинг только при открытие tab, можно ли реализовать обновление без нажатия tab?


1. Возможно, неправильный iCursorMode

Код:






CMODE_DISABLED = 0 (отключен)
CMODE_LOCKKEYS_NOCURSOR = 1 (управление клавиатурой заблокировано, курсор отключен)
CMODE_LOCKCAMANDCONTROL = 2 (управление клавиатурой и мышкой заблокировано, курсор включен)
CMODE_LOCKCAM = 3 (управление мышкой заблокировано, курсор включен)
CMODE_LOCKCAM_NOCURSOR = 4 (управление мышкой заблокировано, курсор отключен)




2. Перед получением попробуй SF->getSAMP()->getInfo()->UpdateScoreAndPing();

dimoz
20.03.2015, 20:54
Не хватает немного структуры stWeaponData.

0pc0d3R
23.03.2015, 14:21
Не хватает немного структуры stWeaponData.


Согласен с тобой, не удобно отдельно вытаскивать с разных мест данные об оружии.

san0
23.03.2015, 21:07
Есть небольшая рендерная консоль:

http://firepic.org/images/2015-03/23/giptgcq6a0cy.png

Как сделать так, чтоб самп не обрабатывал Tab, T, F1 и т.д (такое уже сделано в стандартной консоли сф).

Dark_Knight
23.03.2015, 23:25
Т.е, тебе не нужно, чтобы в табе отображалось?







Код:






if(!SF->getSAMP()->getScoreboard()->iIsEnable)

san0
24.03.2015, 19:18
Т.е, тебе не нужно, чтобы в табе отображалось?







Код:






if(!SF->getSAMP()->getScoreboard()->iIsEnable)





Если открыть консоль сф и нажать T - то чат сампа не откроется, если закрыть консоль и сделать тоже - чат откроется. Вот и вопрос: как сделать это?

Dark_Knight
30.03.2015, 14:13
Нужно открывать SFPlugin.sln -_-

MISTER_GONWIK
30.03.2015, 14:45
Если открыть консоль сф и нажать T - то чат сампа не откроется, если закрыть консоль и сделать тоже - чат откроется. Вот и вопрос: как сделать это?


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

CarLCas
31.03.2015, 20:32
Подскажите, пожалуйста, аналог данного опкода: 0B74: samp set_chat_string 0@ text "ho-ho-ho" prefix "" color 3@ prefix_color 4@

А то не смог найти..

PoccoJI
03.04.2015, 19:26
Подскажите, пожалуйста, аналог данного опкода: 0B74: samp set_chat_string 0@ text "ho-ho-ho" prefix "" color 3@ prefix_color 4@
А то не смог найти..


в stChatInfo или как там должно чето быть



Ну тип файла нету, качал с офф темки...

http://i.imgur.com/wuu6sbq.png


http://www.microsoft.com/en-us/download/details.aspx?id=23549 (https://www.blast.hk/redirect/aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL2VuLXVzL2Rvd25sb2 FkL2RldGFpbHMuYXNweD9pZD0yMzU0OQ) вот эта штука должна помочь

PoccoJI
04.04.2015, 13:07
Уже ставил, не помогло


Проект->Свойства SF Plugin->Свойства конфигурации->Каталоги VC++

в каталоги включения добавь $(DXSDK_DIR)\Include

в каталоги библиотек добавь $(DXSDK_DIR)\Lib\x86

вот так должно быть

https://forum.antichat.xyz/attachments/27067428/

0pc0d3R
04.04.2015, 13:18
PHP:






actor_info
*
pActer
=
SF
-
>
getGame
(
)
-
>
actorInfoGet
(
ACTOR_SELF
,
ACTOR_ALIVE
)
;
if
(
SF
-
>
getGame
(
)
-
>
getCurrentState
(
)
==
CHEAT_STATE_VEHICLE
)
{
if
(
pActer
-
>
vehicle
-
>
vehicle_type
!=
(
VEHICLE_TYPE_CAR
&&
VEHICLE_TYPE_BIKE
&&
VEHICLE_TYPE_TRAIN
)
)
return
true
;
}




Правильно ли я построил проверку? (Нужно чтобы если я в транспорте и не в обычном каре/байках/поезде то код прерывал свое выполнение) Там осталось только VEHICLE_TYPE_BOAT и VEHICLE_TYPE_NONE а еще вопрос самолёты к какому вехикл типу оно тогда отнесёт?

Суть в проверке типов транспорта в котором я нахожусь.

Julia
04.04.2015, 13:33
а еще вопрос самолёты к какому вехикл типу оно тогда отнесёт?

Airplanes должно быть

itsLegend
04.04.2015, 13:40
Код:






switch (pActer->vehicle->vehicle_type)
{
case VEHICLE_TYPE_CAR:
case VEHICLE_TYPE_BIKE:
case VEHICLE_TYPE_TRAIN:
return false;

default:
return true;
}

0pc0d3R
04.04.2015, 13:46
а еще вопрос самолёты к какому вехикл типу оно тогда отнесёт?

Airplanes должно быть


в том то и фишка, что нет такого типа у апи.



Код:






switch (pActer->vehicle->vehicle_type)
{
case VEHICLE_TYPE_CAR:
case VEHICLE_TYPE_BIKE:
case VEHICLE_TYPE_TRAIN:
return false;

default:
return true;
}





Спасибо.

Maddy
05.04.2015, 07:01
А не легче проверять не по типу, а по классу авто?

Из собейта:

int class_id = gta_vehicle_get_by_id( vinfo->base.model_alt_id )->class_id; // получение класса авто

/* классы авто */

#define VEHICLE_CLASS_CAR 0

#define VEHICLE_CLASS_CAR_FAST 1

#define VEHICLE_CLASS_HEAVY 2

#define VEHICLE_CLASS_HELI 3

#define VEHICLE_CLASS_AIRPLANE 4

#define VEHICLE_CLASS_BIKE 5

#define VEHICLE_CLASS_BOAT 6

#define VEHICLE_CLASS_MINI 7

#define VEHICLE_CLASS_TRAILER 8

#define VEHICLE_CLASS_COUNT 9 /* # of classes */

Ошибся, в SF такого нету

kent-34
05.04.2015, 13:05
1)Почему не работает?

Код:






if ( param.empty() ) return;
int carid = std::stoi( param );
SF->getSAMP()->sendEnterVehicle(carid,0);




2)Как получить больше параметров из команды?

itsLegend
05.04.2015, 13:58
1) Эта функция не сажает игрока в авто, а отправляет RPC.

2) sscanf. Первым параметром будет param.c_str()

PoccoJI
05.04.2015, 14:19
1) Эта функция не сажает игрока в авто, а отправляет RPC.
2) sscanf. Первым параметром будет param.c_str()


можно проще, используя stringstream(#include )

std::stringstream ss(param);

int p1 = 0;

std::string p2;

ss >> p1 >> p2;

вот так например

kent-34
05.04.2015, 14:21
1) Эта функция не сажает игрока в авто, а отправляет RPC.
2) sscanf. Первым параметром будет param.c_str()


А как тогда посадить в кар? Пробывал через клео-крашь

itsLegend
05.04.2015, 14:41
можно проще, используя stringstream(#include )
std::stringstream ss(param);
int p1 = 0;
std::string p2;
ss >> p1 >> p2;
вот так например


Вот так да, вот так проще.

Ты подключаешь ещё какую-то библиотеку, которая будет необходима только для одного - чтение значений...

Дело твое.

itsLegend
05.04.2015, 14:55
А как тогда посадить в кар? Пробывал через клео-крашь


Пока "нормальными" методами никак.

Можешь попробовать вызывать клео опкоды, указывай

072A: put_actor 0@ into_car 1@ driverseat

0@ = actor handle(actor_info *self = SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE);)

1@ = car handle(DWORD car_handle = SF->getSAMP()->getVehicles()->GetCarHandleFromSAMPCarID(carid);)

SF->getCLEO()->callOpcode("072A: put_actor %d into_car %d driverseat", &self, car_handle);


Вроде так, если не ошибся.

kent-34
05.04.2015, 15:18
Пока "нормальными" методами никак.

Можешь попробовать вызывать клео опкоды, указывай
072A: put_actor 0@ into_car 1@ driverseat
0@ = actor handle(actor_info *self = SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE);)
1@ = car handle(DWORD car_handle = SF->getSAMP()->getVehicles()->GetCarHandleFromSAMPCarID(carid);)
SF->getCLEO()->callOpcode("072A: put_actor %d into_car %d driverseat", &self, car_handle);

Вроде так, если не ошибся.



Код:






if ( param.empty() ) return;
int carid = std::stoi( param );
DWORD vid = SF->getSAMP()->getVehicles()->GetCarHandleFromSAMPCarID(carid);
SF->getCLEO()->SetLocalVar(1, vid);
SF->getCLEO()->callOpcode("036A: put_actor $PLAYER_ACTOR in_car 1@ driverseat");




Вот так прекрасно работает,спасибо.

Есть опкод что-бы выйти из машины?

kent-34
05.04.2015, 16:27
Ещё пару вопросов:

1)Как узнать ид машины в которой сидит игрок?

Разобрался:

Код:






stInCarData * VehInfo = SF->getSAMP()->getPlayers()->GetInCarData(id);
int carid = VehInfo->sVehicleID;




2)Как выкинуть себя из машины?

Uztor
10.04.2015, 18:34
More functions coming like this:


0B82: dialog 1@ add_button id 2@ text 3@ pos_XY 4@ 5@ size 6@ 7@

0B83: dialog 1@ add_checkbox id 2@ text 3@ pos_XY 4@ 5@ size 6@ 7@

0B88: dialog 1@ add_editbox id 2@ text 3@ pos_XY 4@ 5@ size 6@ 7@

...
?

luckyFOX
13.04.2015, 20:23
А что это значит?

Код:






int &iDialogStatus = SF->getSAMP()->getDialog()->iIsActive; // сохраняем ссылку на переменную в которой хранится текущий статус диалога.

PoccoJI
13.04.2015, 20:32
А что это значит?

Код:






int &iDialogStatus = SF->getSAMP()->getDialog()->iIsActive; // сохраняем ссылку на переменную в которой хранится текущий статус диалога.





ну короче чтобы каждый раз

SF->getSAMP()->getDialog()->iIsActive не писать можно как бы сохранить это большую штуку в iDialogStatus а потом изменять ee

iDialogStatus = 1

iDialogStatus = 0

ну короче вооот ну вот у iIsActive есть адрес да? Ну мы короче этот адрес в iDialogStatus записали да? и можем его изменять..

0pc0d3R
29.04.2015, 15:36
Как тпхнуть игрока на координаты?



PHP:






actor_info
*
Actor
=
SF
-
>
getGame
(
)
-
>
actor_info_get
(
ACTOR_SELF
,
ACTOR_ALIVE
)
;
Actor
-
>
base
.
matrix
[
4
*
3
]
=
x
;
Actor
-
>
base
.
matrix
[
4
*
3
+
1
]
=
y
;
Actor
-
>
base
.
matrix
[
4
*
3
+
2
]
=
z
;

0pc0d3R
05.05.2015, 18:05
Уршадов когда новые уроки будут?

urShadow
05.05.2015, 19:21
Предложи тему уроков, напишу.

0pc0d3R
05.05.2015, 19:32
Предложи тему уроков, напишу.


примеры работы из классом CGAME (Телепортация игрока, поиск актёров в стриме(по флагам/рандомно/ближайших) и тд.)

0pc0d3R
16.05.2015, 00:50
Денис, добавь больше готовых функций на отправку рпц пожалуйста.

kemperrr
22.05.2015, 21:47
Предложи тему уроков, напишу.


Го про МТА классы

Skadi
23.05.2015, 14:55
http://blasthack.net/wiki/tutorials:api_lesson_render

Жутко лагает игра, так и должно быть или я что то не правильно делаю?

PHP:






bool
CALLBACK
Present
(
CONST
RECT
*
pSourceRect
,
CONST
RECT
*
pDestRect
,
HWND
hDestWindowOverride
,
CONST
RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
-
>
getRender
(
)
-
>
BeginRender
(
)
)
)
// если девайс готов к рисованию
{
pFont
=
SF
-
>
getRender
(
)
-
>
CreateNewFont
(
"Tahoma"
,
12
,
FCR_BORDER
)
;
pFont
-
>
Print
(
"текст"
,
D3DCOLOR_ARGB
(
35
,
30
,
220
,
0
)
,
500
,
500
,
false
)
;
SF
-
>
getRender
(
)
-
>
DrawBox
(
500
,
500
,
25
,
25
,
D3DCOLOR_ARGB
(
255
,
0
,
255
,
0
)
)
;
SF
-
>
getRender
(
)
-
>
EndRender
(
)
;
// завершаем рисование
}
;
return
true
;
// возвращаем положительный результат
}
;

urShadow
23.05.2015, 16:14
CreateNewFont должен быть вызван один раз, при инициализации плагина, а у тебя вызывается каждый раз перед рисованием.

kemperrr
24.05.2015, 17:49
urShadow (http://blasthack.net/members/6/), не проверял, работает ли SF->getGame()->emulateGTAKey(11, 255);?

DarkExorcist
30.05.2015, 16:57
G:\SFP\SFPlugin\SFPlugin\game_api\sdk\SharedUtil.F astHashMap.h|21|fatal error: google\dense_hash_map: No such file or directory|

Что с этой ошибкой делать? Файл такой есть по нужному пути.

Julia
31.05.2015, 20:38
ЧЕ НЕ ТАК ВРОДЕ ВСЕ РАБОТАЕТ ПОСЛЕ АКТИВАЦИИ РЕСТАРТ КИК ИЛИ БАН ЧЕРЕЗ КАКОЕ ТО ВРЕМЯ МОЖ ЗАДЕРЖКУ БОЛЬШЕ НАДО

Код:






#include
#include
#include
#include

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

SAMPFUNCS *SF = new SAMPFUNCS();
bool gipercrasher = false;

void Crasher( void )
{
for(int i = 0; i getSAMP()->getPlayers()->iIsListed != 1)
continue;
if(i == SF->getSAMP()->getPlayers()->sLocalPlayerID)
continue;

stBulletData BulletData;
BitStream bsBulletData;
memset(&BulletData, 0, sizeof(stBulletData));

BulletData.byteType = 1;
BulletData.sTargetID = i;

BulletData.fCenter[0] = 0.0;
BulletData.fCenter[1] = 0.0;
BulletData.fCenter[2] = 0.0;

BulletData.fOrigin[0] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[0];
BulletData.fOrigin[1] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[1];
BulletData.fOrigin[2] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[2];

BulletData.fTarget[0] = SF->getSAMP()->getPlayers()->pRemotePlayer->pPlayerData->onFootData.fPosition[0];
BulletData.fTarget[1] = SF->getSAMP()->getPlayers()->pRemotePlayer->pPlayerData->onFootData.fPosition[0];
BulletData.fTarget[2] = SF->getSAMP()->getPlayers()->pRemotePlayer->pPlayerData->onFootData.fPosition[0];

bsBulletData.Write((BYTE)ID_BULLET_SYNC);
bsBulletData.Write((PCHAR)&BulletData, sizeof(stBulletData));

SF->getRakNet()->SendPacket(&bsBulletData);
}
};

bool CALLBACK InPacketHook(stRakNetHookParams *params)
{
if (params->packetId == PacketEnumeration::ID_BULLET_SYNC && gipercrasher == true)
{
stBulletData bSync;
unsigned short ID;
params->bitStream->IgnoreBits(8);
params->bitStream->Read(ID);
params->bitStream->Read((PCHAR)&bSync, sizeof(stBulletData));

if( bSync.byteWeaponID == NULL )
{

memset(&bSync, 0, sizeof(stBulletData));
unsigned char PacketID;
params->bitStream->ResetReadPointer();
params->bitStream->Read(PacketID);
params->bitStream->Read((PCHAR)&bSync, sizeof(stBulletData));
params->bitStream->ResetReadPointer();

bSync.byteWeaponID = 24;
bSync.sTargetID = 0;

params->bitStream->ResetWritePointer();
params->bitStream->Write(PacketID);
params->bitStream->Write((PCHAR)&bSync, sizeof(stBulletData));
}
}
return true;
};

void CALLBACK CMD(std::string param)
{
if (gipercrasher == false)
{
gipercrasher = true;
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 255, 0), "GiperCrasher Enable");
}
else
{
gipercrasher = false;
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 0, 0), "GiperCrasher Disable");
}

};

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

if (!SF->getSAMP()->IsInitialized())
return;
SF->getSAMP()->registerChatCommand("gcrash", CMD);
SF->getSAMP()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 0, 0xAA, 0 ), "GiperCrasher by Julia loaded." );
SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHO OK_TYPE_INCOMING_PACKET, InPacketHook);

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

SR_team
01.06.2015, 00:24
void Crasher( void )


не void, а bool, и в конце return true; в wiki же есть пример

Julia
01.06.2015, 00:26
не void, а bool, и в конце return true; в wiki же есть пример



спс проверю

slonoboyko
11.06.2015, 00:20
Почему когда пишу любой сф плагин, потом музыка при входе в игру хуярит? Радио типа.

Dark_Knight
11.06.2015, 00:52
Глупый вопрос. На код глянь сначала.

urShadow
11.06.2015, 01:17
kek chet

slonoboyko
11.06.2015, 06:40
Глупый вопрос. На код глянь сначала.



Код:






#include
#include
#include
#include

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

SAMPFUNCS *SF = new SAMPFUNCS();
bool slonobot = false;
bool adm = false;

int GetPickup(int GtaPickupID)
{
if ( SF->getSAMP()->getInfo()->pPools->pPickup == NULL )
return 0;

actor_info *self = SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE);

if ( self != NULL )
{
for ( int i = 0; i getSAMP()->getInfo()->pPools->pPickup->pickup[i].iModelID == 0 )
continue;
if ( SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].iType == 0 )
continue;
if ( SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].fPosition[0] == NULL
|| SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].fPosition[1] == NULL
|| SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].fPosition[2] == NULL )
continue;

int x = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].iModelID;

if(x == GtaPickupID)
return i;
}
}
return 0;
}

void Admin_Checker()
{
if(adm)
{
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[i] != 1)
continue;
if (SF->getSAMP()->getPlayers()->pRemotePlayer[i] == 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]))
{
if(SF->getSAMP()->getPlayers()->pRemotePlayer[i]->iScore > 0)
{
static int action = 0;
static DWORD dwTime = GetTickCount();
if(action == 0)
{
if(GetPickup(1275))
{
SF->getSAMP()->sendPickedUpPickup(GetPickup(1275));
action = 1;
}
}
if(action == 1)
{
if(dwTime getSAMP()->getDialog()->iIsActive)
{
if(SF->getSAMP()->getDialog()->DialogID == 110)
{
SF->getSAMP()->getDialog()->Close(1);
action = 2;
dwTime = GetTickCount();
}
}
else
{
action = 0;
dwTime = GetTickCount();
}
}
}
if(action == 2 && dwTime getRakNet()->getRakClient()->Disconnect(500);
SF->getSAMP()->getInfo()->RestartGame();
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "В игру зашел админ, бот завершил свою работу.");
slonobot = false;
adm = false;
action = 0;
dwTime = GetTickCount();
}
}
}
}
}
}
}

void SlonoBot()
{
static DWORD dwTime = GetTickCount();
static int action = 0;
static int count = 0;
static int count_action = 0;

if(slonobot && action == 0 && dwTime getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE);
info->base.matrix[4 * 3] = coord[0];
info->base.matrix[4 * 3 + 1] = coord[1];
info->base.matrix[4 * 3 + 2] = coord[2];
if(count >= 20)
{
if(count_action == 0)
{
if(GetPickup(1275))
{
SF->getSAMP()->sendPickedUpPickup(GetPickup(1275));
count_action = 1;
}
}
if(count_action == 1)
{
if(SF->getSAMP()->getDialog()->iIsActive)
{
if(SF->getSAMP()->getDialog()->DialogID == 110 || SF->getSAMP()->getDialog()->DialogID == 109)
{
SF->getSAMP()->getDialog()->Close(1);
count_action = 2;
}
}
}
if(count_action == 2 && dwTime getSAMP()->sendPickedUpPickup(GetPickup(1275));
count_action = 3;
dwTime = GetTickCount();
}
}
if(count_action == 3)
{
if(SF->getSAMP()->getDialog()->iIsActive)
{
if(SF->getSAMP()->getDialog()->DialogID == 110 || SF->getSAMP()->getDialog()->DialogID == 109)
{
SF->getSAMP()->getDialog()->Close(1);
count_action = 0;
count = 0;
action = 1;
dwTime = GetTickCount();
}
}
}
}
else
{
action = 1;
dwTime = GetTickCount();
}
}
if(slonobot && action == 1)
{
if(SF->getSAMP()->getPlayers()->pLocalPlayer->sCurrentAnimID == 616)
{
action = 2;
dwTime = GetTickCount();
}
}
if(slonobot && action == 2)
{
if(dwTime getSAMP()->getPlayers()->pLocalPlayer->onFootData.byteArmor;
ofSync.byteCurrentWeapon = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.byteCurrentWeapon;
ofSync.byteHealth = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.byteHealth;
ofSync.byteSpecialAction = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.byteSpecialAction;

ofSync.fMoveSpeed[0] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fMoveSpeed[0];
ofSync.fMoveSpeed[1] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fMoveSpeed[1];
ofSync.fMoveSpeed[2] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fMoveSpeed[2];

ofSync.fPosition[0] = pos[0];
ofSync.fPosition[1] = pos[1];
ofSync.fPosition[2] = pos[2];

ofSync.fQuaternion[0] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fQuaternion[0];
ofSync.fQuaternion[1] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fQuaternion[1];
ofSync.fQuaternion[2] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fQuaternion[2];
ofSync.fQuaternion[3] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fQuaternion[3];

ofSync.fSurfingOffsets[0] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fSurfingOffsets[0];
ofSync.fSurfingOffsets[1] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fSurfingOffsets[1];
ofSync.fSurfingOffsets[2] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fSurfingOffsets[2];

ofSync.sAnimFlags = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.sAnimFlags;
ofSync.sCurrentAnimationID = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.sCurrentAnimationID;
ofSync.sKeys = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.sKeys;
ofSync.sLeftRightKeys = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.sLeftRightKeys;
ofSync.sSurfingVehicleID = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.sSurfingVehicleID;
ofSync.stSampKeys = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.stSampKeys;
ofSync.sUpDownKeys = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.sUpDownKeys;

bsOnfootSync.Write((BYTE)ID_PLAYER_SYNC);
bsOnfootSync.Write((PCHAR)&ofSync, sizeof(stOnFootData));

SF->getRakNet()->SendPacket(&bsOnfootSync);
action = 0;
count++;
dwTime = GetTickCount();
}
}
}

void CALLBACK zp(std::string param)
{
if ( SF->getSAMP()->getInfo()->pPools->pPickup == NULL )
return;

actor_info *self = SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE);

if ( self != NULL )
{
for ( int i = 0; i getSAMP()->getInfo()->pPools->pPickup->pickup[i].iModelID == 0 )
continue;
if ( SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].iType == 0 )
continue;
if ( SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].fPosition[0] == NULL
|| SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].fPosition[1] == NULL
|| SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].fPosition[2] == NULL )
continue;
int x = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].iModelID;

if(x == 1275)
{
BitStream bsPickup;
bsPickup.Write( i );
SF->getRakNet()->SendRPC(RPC_PickedUpPickup, &bsPickup);
SF->getRakNet()->SendRPC(RPC_PickedUpPickup, &bsPickup);
break;
}
}
}
}

void CALLBACK cmd(std::string param)
{
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Выключить/Выключить бота | {0000FF}/slonobot");
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Посмотреть команды | {0000FF}/comands");
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Завершить работу | {0000FF}/zp");
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Автовыключение, если админ в сети | {0000FF}/adm");
}

void CALLBACK Adm(std::string param)
{
if (adm == false)
{
adm = true;
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Автовыключение при входе админа | {00FF00}Включено");
}
else
{
adm = false;
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Автовыключение при входе админа | {FF0000}Выключено");
}
}

void CALLBACK boton(std::string param)
{
if (slonobot == false)
{
slonobot = true;
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Бот шахтера by slonoboyko для Advance RP | {00FF00}Запущен");
}
else
{
slonobot = false;
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Бот шахтера by slonoboyko для Advance RP | {FF0000}Остановлен");
}
}

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()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 255, 255, 0), "[SlonoBot] Бот шахтера от SlonoBoyko успешно загружен." );
SF->getSAMP()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 255, 255, 0 ), "[SlonoBot] Чтобы посмотреть команды введи /comands." );
SF->getSAMP()->registerChatCommand("slonobot", boton);
SF->getSAMP()->registerChatCommand("comands", cmd);
SF->getSAMP()->registerChatCommand("zp", zp);
SF->getSAMP()->registerChatCommand("adm", Adm);
init = true;
}
else
{
Admin_Checker();
SlonoBot();
}
}

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
11.06.2015, 10:40
Код:






GAME->GetAudio()->PlayBeatTrack(2);




В голос.

MISTER_GONWIK
11.06.2015, 10:57
Код:






#include
#include
#include
#include

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

SAMPFUNCS *SF = new SAMPFUNCS();
bool slonobot = false;
bool adm = false;

int GetPickup(int GtaPickupID)
{
if ( SF->getSAMP()->getInfo()->pPools->pPickup == NULL )
return 0;

actor_info *self = SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE);

if ( self != NULL )
{
for ( int i = 0; i getSAMP()->getInfo()->pPools->pPickup->pickup[i].iModelID == 0 )
continue;
if ( SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].iType == 0 )
continue;
if ( SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].fPosition[0] == NULL
|| SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].fPosition[1] == NULL
|| SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].fPosition[2] == NULL )
continue;

int x = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].iModelID;

if(x == GtaPickupID)
return i;
}
}
return 0;
}

void Admin_Checker()
{
if(adm)
{
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[i] != 1)
continue;
if (SF->getSAMP()->getPlayers()->pRemotePlayer[i] == 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]))
{
if(SF->getSAMP()->getPlayers()->pRemotePlayer[i]->iScore > 0)
{
static int action = 0;
static DWORD dwTime = GetTickCount();
if(action == 0)
{
if(GetPickup(1275))
{
SF->getSAMP()->sendPickedUpPickup(GetPickup(1275));
action = 1;
}
}
if(action == 1)
{
if(dwTime getSAMP()->getDialog()->iIsActive)
{
if(SF->getSAMP()->getDialog()->DialogID == 110)
{
SF->getSAMP()->getDialog()->Close(1);
action = 2;
dwTime = GetTickCount();
}
}
else
{
action = 0;
dwTime = GetTickCount();
}
}
}
if(action == 2 && dwTime getRakNet()->getRakClient()->Disconnect(500);
SF->getSAMP()->getInfo()->RestartGame();
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "В игру зашел админ, бот завершил свою работу.");
slonobot = false;
adm = false;
action = 0;
dwTime = GetTickCount();
}
}
}
}
}
}
}

void SlonoBot()
{
static DWORD dwTime = GetTickCount();
static int action = 0;
static int count = 0;
static int count_action = 0;

if(slonobot && action == 0 && dwTime getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE);
info->base.matrix[4 * 3] = coord[0];
info->base.matrix[4 * 3 + 1] = coord[1];
info->base.matrix[4 * 3 + 2] = coord[2];
if(count >= 20)
{
if(count_action == 0)
{
if(GetPickup(1275))
{
SF->getSAMP()->sendPickedUpPickup(GetPickup(1275));
count_action = 1;
}
}
if(count_action == 1)
{
if(SF->getSAMP()->getDialog()->iIsActive)
{
if(SF->getSAMP()->getDialog()->DialogID == 110 || SF->getSAMP()->getDialog()->DialogID == 109)
{
SF->getSAMP()->getDialog()->Close(1);
count_action = 2;
}
}
}
if(count_action == 2 && dwTime getSAMP()->sendPickedUpPickup(GetPickup(1275));
count_action = 3;
dwTime = GetTickCount();
}
}
if(count_action == 3)
{
if(SF->getSAMP()->getDialog()->iIsActive)
{
if(SF->getSAMP()->getDialog()->DialogID == 110 || SF->getSAMP()->getDialog()->DialogID == 109)
{
SF->getSAMP()->getDialog()->Close(1);
count_action = 0;
count = 0;
action = 1;
dwTime = GetTickCount();
}
}
}
}
else
{
action = 1;
dwTime = GetTickCount();
}
}
if(slonobot && action == 1)
{
if(SF->getSAMP()->getPlayers()->pLocalPlayer->sCurrentAnimID == 616)
{
action = 2;
dwTime = GetTickCount();
}
}
if(slonobot && action == 2)
{
if(dwTime getSAMP()->getPlayers()->pLocalPlayer->onFootData.byteArmor;
ofSync.byteCurrentWeapon = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.byteCurrentWeapon;
ofSync.byteHealth = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.byteHealth;
ofSync.byteSpecialAction = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.byteSpecialAction;

ofSync.fMoveSpeed[0] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fMoveSpeed[0];
ofSync.fMoveSpeed[1] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fMoveSpeed[1];
ofSync.fMoveSpeed[2] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fMoveSpeed[2];

ofSync.fPosition[0] = pos[0];
ofSync.fPosition[1] = pos[1];
ofSync.fPosition[2] = pos[2];

ofSync.fQuaternion[0] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fQuaternion[0];
ofSync.fQuaternion[1] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fQuaternion[1];
ofSync.fQuaternion[2] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fQuaternion[2];
ofSync.fQuaternion[3] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fQuaternion[3];

ofSync.fSurfingOffsets[0] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fSurfingOffsets[0];
ofSync.fSurfingOffsets[1] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fSurfingOffsets[1];
ofSync.fSurfingOffsets[2] = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fSurfingOffsets[2];

ofSync.sAnimFlags = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.sAnimFlags;
ofSync.sCurrentAnimationID = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.sCurrentAnimationID;
ofSync.sKeys = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.sKeys;
ofSync.sLeftRightKeys = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.sLeftRightKeys;
ofSync.sSurfingVehicleID = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.sSurfingVehicleID;
ofSync.stSampKeys = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.stSampKeys;
ofSync.sUpDownKeys = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.sUpDownKeys;

bsOnfootSync.Write((BYTE)ID_PLAYER_SYNC);
bsOnfootSync.Write((PCHAR)&ofSync, sizeof(stOnFootData));

SF->getRakNet()->SendPacket(&bsOnfootSync);
action = 0;
count++;
dwTime = GetTickCount();
}
}
}

void CALLBACK zp(std::string param)
{
if ( SF->getSAMP()->getInfo()->pPools->pPickup == NULL )
return;

actor_info *self = SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE);

if ( self != NULL )
{
for ( int i = 0; i getSAMP()->getInfo()->pPools->pPickup->pickup[i].iModelID == 0 )
continue;
if ( SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].iType == 0 )
continue;
if ( SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].fPosition[0] == NULL
|| SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].fPosition[1] == NULL
|| SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].fPosition[2] == NULL )
continue;
int x = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[i].iModelID;

if(x == 1275)
{
BitStream bsPickup;
bsPickup.Write( i );
SF->getRakNet()->SendRPC(RPC_PickedUpPickup, &bsPickup);
SF->getRakNet()->SendRPC(RPC_PickedUpPickup, &bsPickup);
break;
}
}
}
}

void CALLBACK cmd(std::string param)
{
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Выключить/Выключить бота | {0000FF}/slonobot");
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Посмотреть команды | {0000FF}/comands");
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Завершить работу | {0000FF}/zp");
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Автовыключение, если админ в сети | {0000FF}/adm");
}

void CALLBACK Adm(std::string param)
{
if (adm == false)
{
adm = true;
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Автовыключение при входе админа | {00FF00}Включено");
}
else
{
adm = false;
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Автовыключение при входе админа | {FF0000}Выключено");
}
}

void CALLBACK boton(std::string param)
{
if (slonobot == false)
{
slonobot = true;
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Бот шахтера by slonoboyko для Advance RP | {00FF00}Запущен");
}
else
{
slonobot = false;
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0), "Бот шахтера by slonoboyko для Advance RP | {FF0000}Остановлен");
}
}

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()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 255, 255, 0), "[SlonoBot] Бот шахтера от SlonoBoyko успешно загружен." );
SF->getSAMP()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 255, 255, 0 ), "[SlonoBot] Чтобы посмотреть команды введи /comands." );
SF->getSAMP()->registerChatCommand("slonobot", boton);
SF->getSAMP()->registerChatCommand("comands", cmd);
SF->getSAMP()->registerChatCommand("zp", zp);
SF->getSAMP()->registerChatCommand("adm", Adm);
init = true;
}
else
{
Admin_Checker();
SlonoBot();
}
}

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




Вроде я радио нигде не включаю.
Реально, мистика какая то, я сам вахуе.

Снуп дог хуярит, ахуеть.


я бы твой плагин никогда себе не поставил из-за ебанутой системы админсчекера

slonoboyko
11.06.2015, 16:41
я бы твой плагин никогда себе не поставил из-за ебанутой системы админсчекера


Верю, не стал с ним заморачиватся. Криво сделал.

Да уже переделал в принципе.

kemperrr
11.06.2015, 20:23
Как эмулировать нажатие игровой клавиши?

Julia
11.06.2015, 21:39
Почему когда пишу любой сф плагин, потом музыка при входе в игру хуярит? Радио типа.



у меня тоже на том гипере музыка играла снуб док какой то при входе начала и во время игры играла

0pc0d3R
12.06.2015, 21:59
бля с++ учите, музыку там не*** делать убрать.

slonoboyko
12.06.2015, 22:32
бля с++ учите, музыку там не*** делать убрать.


У всех затупы бывают. Я просто не мог предположить что в исходнике строчка музыку включает. Думал проблема где то глубже.

0pc0d3R
16.06.2015, 12:03
У всех затупы бывают. Я просто не мог предположить что в исходнике строчка музыку включает. Думал проблема где то глубже.


может быть в знании английского*?)

slonoboyko
16.06.2015, 13:23
может быть в знании английского*?)


Может быть)

Enjoy
29.06.2015, 10:21
поцаны, помогите.

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

Код:






std::string buf("");
char name[12];
sscanf(buf.c_str(), "%s", param.data());
strncpy(name, buf.c_str(), n);




Сначала короче выдавало ошибку, что нельзя приводить const char * к char * (это про name).

Почему вообще так? Пришлось отдельно в char записать.

Сейчас просто ничего не выводит, че я напутал.

slonoboyko
29.06.2015, 11:31
Смотри, ты получаешь значение чар. Потом функцией сканф считай 2 параметра какого хочешь типа. Написал бы код, но я с телефона

Enjoy
29.06.2015, 12:06
Смотри, ты получаешь значение чар. Потом функцией сканф считай 2 параметра какого хочешь типа. Написал бы код, но я с телефона


Ну у меня короче пустая строка выходит.

Я походу какие-то параметры напутал.

Dark_Knight
29.06.2015, 12:53
Получает 2 параметра типа DWORD

Код:






DWORD a, b;
sscanf(params.c_str(), "%d %d", &a, &b);

Skadi
01.07.2015, 21:00
как сделать проверку на координату и её радиус? То бишь если я нахожусь в радиусе заданной координаты, то выполняется моя функция.

Enjoy
02.07.2015, 07:34
поцаны, проблема тут такая.

вот, я короче пытаюсь сделать считывание из файла, но у меня пустую строку всегда выводит.

Код:






std::ifstream f("test.txt");
char buf[24] = "";
f.getline(buf, '\0');
SF->getSAMP()->getChat()->AddChatMessage(-1, buf);

slonoboyko
02.07.2015, 07:55
поцаны, проблема тут такая.
вот, я короче пытаюсь сделать считывание из файла, но у меня пустую строку всегда выводит.

Код:






std::ifstream f("test.txt");
char buf[24] = "";
f.getline(buf, '\0');
SF->getSAMP()->getChat()->AddChatMessage(-1, buf);






Во считывание из файла.

Код:





[CODE]
FILE *file;
char path[512], stroka[9999999999];
sprintf(path, "SAMPFUNCS\\file.txt");
file = fopen(path, "r");
if (file)
{
for (int i = 0; i

MISTER_GONWIK
02.07.2015, 08:36
Во считывание из файла.

Код:






FILE *file;
char path[512], stroka[9999999999];
sprintf(path, "SAMPFUNCS\\file.txt");
file = fopen(path, "r");
if (file)
{
for (int i = 0; i getSAMP()->getChat()->AddChatMessage(-1, buf);






я сегодня выложу хорошую штуку для работы с Ini..

Enjoy
02.07.2015, 08:46
я сегодня выложу хорошую штуку для работы с Ini..


давай, я зырел ещё короче создание ini через boost::property_tree ini parser, но не осилил.

Dark_Knight
02.07.2015, 17:41
давай, я зырел ещё короче создание ini через boost::property_tree ini parser, но не осилил.


Это буст. Он не легкий. Хотя property_tree дает сразу работать с ini, json, xml

itsLegend
02.07.2015, 20:19
поцаны, проблема тут такая.
вот, я короче пытаюсь сделать считывание из файла, но у меня пустую строку всегда выводит.

Код:






std::ifstream f("test.txt");
char buf[24] = "";
f.getline(buf, '\0');
SF->getSAMP()->getChat()->AddChatMessage(-1, buf);





Читает весь файл.

Код:






std::ifstream f;
f.open("test.txt", std::ios_base::in);
if (f.is_open())
{
char szBuffer[64];
memset(szBuffer, 0, 64);
while (f.getline(szBuffer, 63))
{
SF->getSAMP()->getChat()->AddChatMessage(-1, szBuffer);
}

f.close();
}

Enjoy
02.07.2015, 20:40
Читает весь файл.

Код:






std::ifstream f;
f.open("test.txt", std::ios_base::in);
if (f.is_open())
{
char szBuffer[64];
memset(szBuffer, 0, 64);
while (f.getline(szBuffer, 63))
{
SF->getSAMP()->getChat()->AddChatMessage(-1, szBuffer);
}

f.close();
}





Чето нихера не читает, он точно из currentdirectory открывается?

itsLegend
02.07.2015, 21:27
Чето нихера не читает, он точно из currentdirectory открывается?


У мну всё работает.

Можешь тут почитать, если хз чо о чём: http://programmersclub.ru/34/ (https://www.blast.hk/redirect/aHR0cDovL3Byb2dyYW1tZXJzY2x1Yi5ydS8zNC8)

Dark_Knight
02.07.2015, 21:28
Вот тебе кусок кода с Раклоггера моего

Код:






memset(&path, 0, MAX_PATH + 32);
GetCurrentDirectory(MAX_PATH, path);
strcat(path, "\\");
strcat(path, set.chPlayerListPath.c_str());
file.open(path);
while (!file.eof())
{
std::getline(file, str);;
std::transform(str.begin(), str.end(), str.begin(), tolower);
Admins += str;
}
file.close();

Enjoy
02.07.2015, 21:53
У мну всё работает.
Можешь тут почитать, если хз чо о чём: http://programmersclub.ru/34/ (https://www.blast.hk/redirect/aHR0cDovL3Byb2dyYW1tZXJzY2x1Yi5ydS8zNC8)


Да я это читал, только отсюда http://cppstudio.com/post/446/ (https://www.blast.hk/redirect/aHR0cDovL2NwcHN0dWRpby5jb20vcG9zdC80NDYv)

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

itsLegend
02.07.2015, 21:57
Может потому что у тебя файл лежит в SAMPFUNCS папке, а не в папке игры?

Sire Like
05.07.2015, 15:11
Есть что по пикапам? Подобрать и т.д

Enjoy
06.07.2015, 13:45
Есть что по пикапам? Подобрать и т.д



Код:






void sendPickedUpPickup( int pickup );




stPickupPool

Код:






stPickupPool *pPickup = SF->getSAMP()->getInfo()->pPools->pPickup;




Вроде так, если не напиздел, а я могу. Ваще поройся, дохуя че есть.

Enjoy
07.07.2015, 15:26
а че это, как его в stLocalPlayer я не могу свое хп узнать.

А вот так не выходит, вылетает чето

Код:






char buf[32] = "";
int id = SF->getSAMP()->getPlayers()->sLocalPlayerID;
stRemotePlayerData *pPlayerData = SF->getSAMP()->getPlayers()->pRemotePlayer[id]->pPlayerData;
sprintf(buf, "ID: %d // Health: %2.f", id, pPlayerData->fActorHealth);
SF->getSAMP()->getChat()->AddChatMessage(-1, buf);

itsLegend
07.07.2015, 16:18
stRemotePlayerData != stLocalPlayer

В stLocalPlayer есть указатель на структуру stSampPed(там ещё будет 1 указатель, вроде как), оттуда ты можешь получить уровень здоровья или поступить ещё легче - вытащить из синхронизации onFoot.

Enjoy
07.07.2015, 16:48
stRemotePlayerData != stLocalPlayer
В stLocalPlayer есть указатель на структуру stSampPed(там ещё будет 1 указатель, вроде как), оттуда ты можешь получить уровень здоровья или поступить ещё легче - вытащить из синхронизации onFoot.


Вот, что вышло.

Код:






actor_info *pGTA_Ped = SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped;
pGTA_Ped->pPlayerData;




Но pPlayerData там void, как мне оттуда fHealth вытащить?

itsLegend
07.07.2015, 17:07
SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->hitpoints;

actor_info *self = SF->getGame()->actorInfoGet(-1, ACTOR_ALIVE);

self->hitpoints;

fanta
09.07.2015, 17:59
Как загрузить/выгрузить плагин?

Sire Like
09.07.2015, 22:52
ошибка при компилировании как исправить?

Error 1 error C1083: Cannot open include file: 'excpt.h': No such file or directory C:\Program Files\Microsoft SDKs\Windows\v7.0\Include\windows.h


Данного файла нет, ты проверяла по этому пути? Он там есть?

Sire Like
09.07.2015, 23:09
глупых вопросов не задавай и посты не набивай если че то не знаешь лучше помолчи если по существу ответить не можешь
все там есть


Хахаа, у тебя бомбит на меня за кривые ручки? Шуточек не понимаешь, за чатом бы следила - поняла. Будешь у меня Юля Криворучко.

Dark_Knight
10.07.2015, 13:30
Как загрузить/выгрузить плагин?


pload/pfree

Julia
10.07.2015, 15:36
чем можно заменить функции собейта GoC->FakerState , GoC->IncarTargetOnly , if (!GoC_KEY_CHECK(KEY_R)) и тд для .sf?

PHP:






GoC
-
>
FakerState
=
GetClosestPlayerid
(
player
,
(
(
GoC
-
>
IncarTargetOnly
)
?
ACTOR_INVEHICLE
:
NULL
)
|
ACTOR_ALIVE
|
ACTOR_NOT_ME
|
ACTOR_NOT_IN_MY_CAR
|
ACTOR_NOT_AFK
|
ACTOR_NO_PROTECT
)
;
if
(
GoC
-
>
FakerState
==
INVALID
)
return
;
if
(
!
GoC_KEY_CHECK
(
KEY_R
)
)
return
;




if (!GoC_KEY_CHECK(KEY_R)) а активация чтобы нажималась а не просто активация деактивация например так же R

и желательно что было IncarTargetOnly

Dark_Knight
10.07.2015, 15:48
Ты лучше опиши, что тебе надо.

Julia
10.07.2015, 15:59
Ты лучше опиши, что тебе надо.


ну из собейт кода сделать сф плагин как преобразовать например эти функции GoC в функции сф плагина тут все функции начинаются с GoC

PHP:






void
AttackerDataFakerTpMagnit
(
)
{
actor_info
*
player
=
actor_info_get
(
ACTOR_SELF
,
NULL
)
;
if
(
player
==
NULL
)
return
;
GoC
-
>
FakerState
=
GetClosestPlayerid
(
player
,
(
(
GoC
-
>
IncarTargetOnly
)
?
ACTOR_INVEHICLE
:
NULL
)
|
ACTOR_ALIVE
|
ACTOR_NOT_ME
|
ACTOR_NOT_IN_MY_CAR
|
ACTOR_NOT_AFK
|
ACTOR_NO_PROTECT
)
;
if
(
GoC
-
>
FakerState
==
INVALID
)
return
;
if
(
!
GoC_KEY_CHECK
(
KEY_R
)
)
return
;
actor_info
*
deadman
=
getGTAPedFromSAMPPlayerID
(
GoC
-
>
FakerState
)
;
if
(
deadman
==
NULL
)
return
;
float pos
[
3
]
=
{
-
1569.4526
f
,
98.3293
f
,
20.0894
f
}
;
float Speed
[
3
]
=
{
}
;
SyncTargetActor
(
deadman
,
pos
,
Speed
)
;
}

fanta
10.07.2015, 17:03
pload/pfree


Это вроде только через консоль, а как реализовать в сф плагине?

urShadow
10.07.2015, 17:28
Лол, Зерно как был так и остался говнокодером.

Enjoy
10.07.2015, 17:44
Это вроде только через консоль, а как реализовать в сф плагине?


наверна)

Код:






void loadPlugin(std::string strPluginName);
void unloadPlugin(std::string strPluginName);

Dark_Knight
10.07.2015, 19:21
ну из собейт кода сделать сф плагин как преобразовать например эти функции GoC в функции сф плагина тут все функции начинаются с GoC


Словами опиши, что плагин должен выполнять.

▒░▓█VIRUSMOBIL█▓░▒
10.07.2015, 23:23
ну из собейт кода сделать сф плагин как преобразовать например эти функции GoC в функции сф плагина тут все функции начинаются с GoC

PHP:






void
AttackerDataFakerTpMagnit
(
)
{
actor_info
*
player
=
actor_info_get
(
ACTOR_SELF
,
NULL
)
;
if
(
player
==
NULL
)
return
;
GoC
-
>
FakerState
=
GetClosestPlayerid
(
player
,
(
(
GoC
-
>
IncarTargetOnly
)
?
ACTOR_INVEHICLE
:
NULL
)
|
ACTOR_ALIVE
|
ACTOR_NOT_ME
|
ACTOR_NOT_IN_MY_CAR
|
ACTOR_NOT_AFK
|
ACTOR_NO_PROTECT
)
;
if
(
GoC
-
>
FakerState
==
INVALID
)
return
;
if
(
!
GoC_KEY_CHECK
(
KEY_R
)
)
return
;
actor_info
*
deadman
=
getGTAPedFromSAMPPlayerID
(
GoC
-
>
FakerState
)
;
if
(
deadman
==
NULL
)
return
;
float pos
[
3
]
=
{
-
1569.4526
f
,
98.3293
f
,
20.0894
f
}
;
float Speed
[
3
]
=
{
}
;
SyncTargetActor
(
deadman
,
pos
,
Speed
)
;
}





Юль, от куда у тя код исходника гока?

Julia
11.07.2015, 03:58
Словами опиши, что плагин должен выполнять.


это тп игрока вместе с машиной на магнит в СФ работает только в машине при нажатии R



Юль, от куда у тя код исходника гока?


у зеро взяла

Dark_Knight
11.07.2015, 16:44
это тп игрока вместе с машиной на магнит в СФ работает только в машине при нажатии R

у зеро взяла


Ищет ближайшего игрока?

Julia
11.07.2015, 16:45
Ищет ближайшего игрока?


да при нажатии R его тп вместе с машиной на магнит в СФ в гоке там была цель только для водителя incartargetonly на пешего не действует

Enjoy
11.07.2015, 22:51
короче не стал доебывать в чате со своими нубскими вопросами, вот один из них.

Благодаря Фипу получилось сделать, чтобы обрабатывались действия с anttweakbar.

Теперь хук не дает закрыть меню/двинуться с места, посмотрел в SFGAME че можно сделать, но не увидел нихера.

(mainloop)




Код:






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

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

SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMET HOD_PRESENT, present);
SF->getGame()->registerWndProcCallback(SFGame::HIGH_CB_PRIORITY, hookmsg);

init = true;
}

if (SF->getGame()->isKeyPressed(0x7A))
{
TwInit(TW_DIRECT3D9, SF->getRender()->getD3DDevice());
MenuState ^= true;
if (MenuState)
SF->getSAMP()->getMisc()->ToggleCursor(3, true);
else
{
SF->getSAMP()->getMisc()->ToggleCursor(false);
TwTerminate();
}
}

}





(hookmsg и MessageProc)




Код:






LRESULT CALLBACK MessageProc(HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (TwEventWin(wnd, msg, wParam, lParam))
return 0;

switch (msg)
{
case WM_CHAR:
if (wParam == VK_ESCAPE)
PostQuitMessage(0);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(wnd, msg, wParam, lParam);
}
}

bool __stdcall hookmsg(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return MessageProc(hwnd, uMsg, wParam, lParam);
}

FYP
12.07.2015, 00:20
bool __stdcall hookmsg(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

return !TwEventWin(hwnd, uMsg, wParam, lParam);

}

этого достаточно.

kemperrr
12.07.2015, 22:49
FYP, эмуляцию игровых клавиш запилил?

Harch
13.07.2015, 02:08
Как эмулировать нажатие клавиши? Функция emulateGTAKey не работает, как я понял. Через callOpcode не получилось (я никогда не работал с опкодами). Может, есть какое-то решение?

Harch
13.07.2015, 02:43
Ещё вопрос. Можно ли как-то "поставить на паузу", не выходя в меню, из скрипта? Чтобы сервер думал, что игрок на паузе, но скрипт всё равно работал?

Harch
13.07.2015, 21:46
И вдогонку. Как получить координаты чекпоинта?

Harch
14.07.2015, 16:14
Написал такую функцию для отправки сообщений в чат. Но отправляет не то. В чат выводится пустое сообщение. Как правильно отправлять данный пакет?

Код:






void sendTextToChat( string text )
{
BitStream bsClass; // объявляем объект класса BitStream, в котором хранятся пакетные данные.
bsClass.Write( text.size() );
bsClass.Write( text.c_str() );
SF->getRakNet()->SendRPC( RPC_Chat, &bsClass ); // отправляем RPC
};

urShadow
14.07.2015, 17:45
Код:






void sendTextToChat( string text )
{
BitStream bsClass; // объявляем объект класса BitStream, в котором хранятся пакетные данные.
bsClass.Write( (byte)text.length() );
bsClass.Write( text.c_str(), text.length() );
SF->getRakNet()->SendRPC( RPC_Chat, &bsClass ); // отправляем RPC
};

Harch
14.07.2015, 21:32
Спасибо огромное! А остальные вопросы не подскажешь?

Ещё дополнительно вопрос - как понять, что персонаж находится именно в поезде? Не просто в машине.

Enjoy
16.07.2015, 04:16
Код:






void sendTextToChat( string text )
{
BitStream bsClass; // объявляем объект класса BitStream, в котором хранятся пакетные данные.
bsClass.Write( (byte)text.length() );
bsClass.Write( text.c_str(), text.length() );
SF->getRakNet()->SendRPC( RPC_Chat, &bsClass ); // отправляем RPC
};





Можно так кстати

Код:






SF->getSAMP()->getInput()->pszDefaultCMD("text");




Но я не нашел как сендить серверные команды.

itsLegend
16.07.2015, 05:59
SF->getSAMP()->getPlayers()->pLocalPlayer->Say("any");

SF->getSAMP()->getPlayers()->pLocalPlayer->Say("/mycmd");

Harch
16.07.2015, 20:12
Структурирую вопросы:

1) Эмуляция игровых клавиш?

2) Выйти на паузу, "не выходя на паузу"

3) Координаты чекпоинта более адекватно:D

4) Как определить, что персонаж находится именно в поезде?

dimoz
17.07.2015, 13:14
3) Координаты чекпоинта более адекватно:D



Код:






struct checkpoint *cp = (struct checkpoint *)0x00C7F158;
if (cp->counter > 0) // проверка на то, что чекпоинт активен
{
cp->position[0]; // x
cp->position[1]; // y
cp->position[2]; // z
}




Кто-нибудь промышлял рендером изображений из ресурсов? В связи с моей криворукостью при любых попытках осуществить затеянное игра просто-напросто вылетает.

Если кто-то умеет, то, пожалуйста, подскажите


Получилось. Просто я очень невнимателен.

Совет: D3DColorKey при загрузке текстуры не должен быть чисто черным (т.е. при использовании D3DCOLOR_ARGB хотя бы один параметр, за исключением прозрачности, не должен быть равным нулю)

Username
21.07.2015, 17:33
Как сделать проверку на открытость чата?

White_116
21.07.2015, 18:22
Как сделать проверку на открытость чата?



Код:






if(SF->getSAMP()->getInput()->iInputEnabled)

dimoz
21.07.2015, 19:04
"LoadTextureFromResource" не загружает PNG файлы.

Так и должно быть?

White_116
21.07.2015, 19:26
gj a



"LoadTextureFromResource" не загружает PNG файлы.
Так и должно быть?


Надо парсер иметь, d3d c *.dds изображением работает.

Dark_Knight
21.07.2015, 19:45
"LoadTextureFromResource" не загружает PNG файлы.
Так и должно быть?


Ты ресурс в проект добавил то?

dimoz
21.07.2015, 20:23
Ты ресурс в проект добавил то?


Конечно.



gj a

Надо парсер иметь, d3d c *.dds изображением работает.


В принципе, я научился делать прозрачный фон у BMP (из-за прозрачности и нужна была текстура в формате PNG), но все равно спасибо.

Harch
24.07.2015, 17:22
Вот я нахожусь в поезде. Как сделать тп меня вместе с поездом куда-либо?

Harch
24.07.2015, 17:37
Также интересует вопрос, как поставить игру на паузу прямо из плагина? Какая функция?

spiceman
24.07.2015, 18:06
урсхадов фип кто там ау разработчик в общем. фикс говноедство, типа

Код:






void CALLBACK mainloop() {
static bool init = false;
if (!init) {
if (GAME == nullptr)
return;

if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
return;

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

SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded.");

init = true;
}
}

bool APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved) {
switch (dwReasonForCall) {
case DLL_PROCESS_ATTACH:
SF->initPlugin(mainloop, hModule);
}
return true;
}




сделойте в методе инициализации плагина еще один параметр, колбек, вызывающийся после инициализации плагина. а основная петля будет вызываться уже после инициализации.

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

Код:






void onPluginInit() {
SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHO OK_TYPE_INCOMING_RPC, incomingRPC);
SF->getSAMP()->registerChatCommand("showinfo", cmd_show_info_player);
}

void mainloop() {
if(SF->getGame()->isKeyPressed( 'H' )) {
int &iDialogStatus = SF->getSAMP()->getDialog()->iIsActive;
iDialogStatus ^= true;
if(!iDialogStatus)
SF->getSAMP()->getMisc()->ToggleCursor(false);
};
}

bool APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved) {
switch (dwReasonForCall) {
case DLL_PROCESS_ATTACH:
SF->initPlugin(onPluginInit, mainloop, hModule);
}
return true;
}

Harch
24.07.2015, 22:04
Попытался так. Но мотоциклы и машины так тпшит, а вот поезд - нет :C Что не так?

Код:






void vehicleTeleport(float x, float y, float z)
{
actor_info *self = SF->getGame()->actorInfoGet(VEHICLE_SELF, VEHICLE_ALIVE);
self->vehicle->base.matrix[4 * 3] = x;
self->vehicle->base.matrix[4 * 3 + 1] = y;
self->vehicle->base.matrix[4 * 3 + 2] = z;
}

slonoboyko
25.07.2015, 01:34
Попытался так. Но мотоциклы и машины так тпшит, а вот поезд - нет :C Что не так?

Код:






void vehicleTeleport(float x, float y, float z)
{
actor_info *self = SF->getGame()->actorInfoGet(VEHICLE_SELF, VEHICLE_ALIVE);
self->vehicle->base.matrix[4 * 3] = x;
self->vehicle->base.matrix[4 * 3 + 1] = y;
self->vehicle->base.matrix[4 * 3 + 2] = z;
}





Насколько я знаю, поезд не может тпхнутся. Он всегда на рельсах

Harch
25.07.2015, 03:57
По идее при ТП поезд должен встать на ближайшие рельсы. В скриптах, по крайней мере, при установке поезда так.

Ладно, как тогда поставить игру на паузу? Аналог нажатия escape фактически?

CarLCas
26.07.2015, 16:56
Как получить скин игрока?

White_116
26.07.2015, 17:37
Как получить скин игрока?


Попробуй:

Код:






SF->getSAMP->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->base.model_alt_id;
//or
SF->getSAMP->getPlayers()->pRemotePlayer[id]->pPlayerData->pSAMP_Actor->pGTA_Ped->base.model_alt_id;

Enjoy
27.07.2015, 12:44
Можно ли перехватить как-то выгрузку плагина (т.е. pfree NAME).

Я просто хочу убить поток в это время.

CarLCas
27.07.2015, 18:19
Подскажите пожалуйста как получить координаты игрока сидящего в машине?

return
29.07.2015, 03:56
Как выводить в рендер значения переменных?

slonoboyko
29.07.2015, 04:44
Как выводить в рендер значения переменных?


функой sprintf ебашишь все в одну переменную потом с помощью идентификатора.

return
29.07.2015, 09:50
функой sprintf ебашишь все в одну переменную потом с помощью идентификатора.


Спасибо.

Тут одна проблема возникла, когда я пытаюсь вывести кол-во хп, то игра зависает. В чём проблема?

Sire Like
29.07.2015, 09:56
Спасибо.
Тут одна проблема возникла, когда я пытаюсь вывести кол-во хп, то игра зависает. В чём проблема?


Тут наверно код нужно смотреть.

:-[

return
29.07.2015, 18:42
Код:






bool CALLBACK Present ( CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
CONST RGNDATA *pDirtyRegion )
{
if( SUCCEEDED( SF->getRender()->BeginRender() ) )
{
char buf[256];
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];
sprintf( buf, "health %0.2f", pPlayer->pPlayerData->fActorHealth );
pFont->Print( buf, D3DCOLOR_ARGB( 255, 255, 255, 0 ), 500, 500, false );
SF->getRender()->EndRender();
}
return true;
}

CarLCas
29.07.2015, 19:53
Код:






bool CALLBACK Present ( CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
CONST RGNDATA *pDirtyRegion )
{
if( SUCCEEDED( SF->getRender()->BeginRender() ) )
{
char buf[256];
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer;
sprintf( buf, "health %0.2f", pPlayer->pPlayerData->fActorHealth; );
pFont->Print( buf, D3DCOLOR_ARGB( 255, 255, 255, 0 ), 500, 500, false );
SF->getRender()->EndRender();
}
return true;
}







stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[id];

return
29.07.2015, 20:03
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[id];


Это я знаю, писал по памяти, забыл дописать.

Ничего не меняет, зависает игра при коннекте.

Dark_Knight
29.07.2015, 20:26
Где получене ида, а так же добавь проверку что указатель не нулевой.

Harch
03.08.2015, 16:56
Мне кто-нибудь ответит? Как определить, нахожусь ли я в поезде?

return
04.08.2015, 14:09
как в sf использовать это?

int len = rpcParams ? rpcParams->numberOfBitsOfData / 8 : 0;

fanta
05.08.2015, 01:40
как в одну строку вывести текст разного цвета и как вывести что либо в консоль?