Просмотр полной версии : 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?
Вы могли бы сделать пример для registercommand?
urShadow
06.12.2014, 22:30
На днях начну писать статьи посвященные работе с API. Всё подробно будет разъяснено с нуля.
NarutoUA
07.12.2014, 16:23
Если просто подключить проэкт и компилировать под asi будет работать?
urShadow
07.12.2014, 16:42
Нет, специально сделано, чтоб работало только с .sf плагинами.
Про класс 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.
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)
Рисует квадрат и в левой части квадрата текст
Как использовать это с 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.
Такая тема:
Код:
fatal error C1083: Cannot open include file: 'd3dx9.h': No such file or directory
DirectX SDK стоит!
Такая тема:
Код:
fatal error C1083: Cannot open include file: 'd3dx9.h': No such file or directory
DirectX SDK стоит!
Попробуй указать путь до него, мне помогло
ФИП, ЕВГЕН, когда структуру actor_info добавите?
urShadow
11.12.2014, 19:54
С каких пор ты ко мне на вы? :D
Добавлю на выходных мб.
Как можно создать bitstream для SendRPC?
КакможносоздатьbitstreamдляSendR PC?
Код:
BitStream bit;
bit.Write();
SF->getRakNet()->SendRPC(id RPC,&bit,HIGH_PRIORITY,RELIABLE_ORDERED,0,0);
Почему повторное соединение не работает?
Код:
SF->getSAMP()->disconnect(0);
SF->getSAMP()->getInfo()->RestartGame();
Почему повторное соединение не работает?
Код:
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
}
Как это обносится к апи? -_-
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
SF->getSAMP()->disconnect(0);
SF->getSAMP()->disconnect(100);
SF->getSAMP()->disconnect(100);
хорошо работает
Что не так?
Код:
//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);
}
}
Код:
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 _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 убери
Даже если так сделать:
Код:
#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;
Все равно краш. Проблема именно в регистрации команды, если в место нее засунуть вывод сообщения в чат то все пашет.
Даже если так сделать:
Код:
#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);
Однако все равно крашит. Что то тут не так.. Ведь без этой гребаной регистрации команды все работает!
Подскажите, пожалуйста, как отправить команду/текст в чат?
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 );
}
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/).
How can I get the playerid from name?
Make a loop and use stricmp.
Распишите пожалуйста по подробнее о структуре stBulletData, буду очень благодарен. А то я не понял какие параметры что значат. Допустим fOrigin, fCenter и fTarget. И еще подскажите как получать ближающего удаленного игрока.
Хотелось бы больше уроков о CRakNet.
vladikf1
06.01.2015, 13:45
Как сделать тп через SF API?
Как сделать тп через 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
Блин, ниче не происходит... Скажи, как из файла main.cpp сделать файл .sf
в свойствах проекта ставь в его имени, в конце расширение .sf
Юршедов давай больше уроков по CRakNet и CGame ))
Дайте кто нибудь скомплированый проект для DevC++ а то у меня не получается сделать сборку для сф плагина. Куча ерроров из SFAPI.
Распишите пожалуйста по подробнее о структуре stBulletData, буду очень благодарен. А то я не понял какие параметры что значат. Допустим fOrigin, fCenter и fTarget. И еще подскажите как получать ближающего удаленного игрока.
fOrigin - координаты откуда стреляешь
fTarget - куда стреляешь
fCenter - смещение относительно центра
Как получить ближайшего - делаешь цикл от 1 до 1000 например(это иды в сампе), пытаешься получить по ним хэндл игрока, если получилось - получаешь координаты игрока. Готовых ф-ций для вычисления расстояния не знаю, но впринципе самому написать несложно
fOrigin - координаты откуда стреляешь
fTarget - куда стреляешь
fCenter - смещение относительно центра
Как получить ближайшего - делаешь цикл от 1 до 1000 например(это иды в сампе), пытаешься получить по ним хэндл игрока, если получилось - получаешь координаты игрока. Готовых ф-ций для вычисления расстояния не знаю, но впринципе самому написать несложно
спасибо, и еще вопросик, у Dev C++ можно скомпилить нормально сф плагин? Компилю сборку, ругается(( Причём вся API не тронутая.
urShadow
10.02.2015, 01:16
Когда будут идеи для уроков.
Ну много C-Классов в API плачут по урокам, давай по CGAME хотя бы)
Хелп, гта крашит. Что не так у моем вызове клео опкода?!
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
Почему хендл кара и игрока имеет тип scriptvalue_t? Если для них должен быть DWORD или же int
ну так в SetLocalInt второй параметр scriptvalue_t типа, если ставлю другой - ругается.
Во, поставил DWORD, скомпилило, щас протестью.
Всё равно гта вылетела(( Хоть и DWORD...
itsLegend
10.02.2015, 21:54
Хрен знает крч, я нуб(
Dark_Knight
10.02.2015, 22:10
Хрен знает крч, я нуб(
Фип говорил, что ССлео может неправильно работать.
Фип говорил, что ССлео может неправильно работать.
Хоть кто-то удачно вызывал опкоды без вылетов?))
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делал все по уроку.
вопрос: как скомпилировать?
объясните нубу, открыл в 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 является "циклом", он вызывается несколько раз за секунду.
Ребят как тпхнуть игрока в кар?
1) расстояние от точки до точки
2) кликабельный текст
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
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
SF->getGame()->emulateGTAKey(17, 255);
не работает, помочь?
iAmerican
19.02.2015, 19:35
Можно ли проверить что игрок был сдвинут\тпшнут сервером \ администратором ?
Можно ли проверить что игрок был сдвинут\тпшнут сервером \ администратором ?
Если ты про локального педа, тогда хукай 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.
Удаленного - никак. Только сохранять позицию и чекать с текущей, но это уже будет другой результат.
Почему когда пишу команду без параметров, то вылетает ошибка игры?
PHP:
int carid
=
std
:
:
stoi
(
param
)
;
BitStream bs
;
bs
.
Write
(
carid
)
;
SF
-
>
getRakNet
(
)
-
>
SendRPC
(
RPC_VehicleDestroyed
,
&
bs
,
HIGH_PRIORITY
,
RELIABLE_ORDERED
,
NULL
,
NULL
)
;
Почему когда пишу команду без параметров, то вылетает ошибка игры?
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
Как проверять последнею строку на определенный текст?
Помогите, вообщем, вот код:
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() );
int carid = atoi( param.c_str() );
Спасибо.
Не мог бы ты подсказать, как сделать проверки, даже наплевать на стрим, как сделать проверку на введённый параметр, то бишь если написаны буквы или параметр и вовсе не указан, то об этом напишет в чат, а если всё правильно то сработает тот код.
Dark_Knight
26.02.2015, 16:25
if sscanf
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?)
Почему бы просто не зайти в гугл с запросом sscanf?)
Спасибо большое) Но как добавить проверку на пустой параметр, то бишь не на букв и цифры, а на пробел.
Dark_Knight
27.02.2015, 09:40
Если есть пробел, это тебе не пустой параметр.
Если есть пробел, это тебе не пустой параметр.
Не правильно выразился я. Я имею введу на пустую строку, вот.
itsLegend
27.02.2015, 17:20
if ( param.empty() ) return;
urShadow
02.03.2015, 00:40
Предлагайте идеи какие функции вы хотите увидеть в следующей версии SF API.
Можно как то реализовать нажатие определённого пункта в диалоге?
Например, на сервере сис-ма каптура через диалог, то бишь мы вводим команду и у нас высвечивается диалог, после надо выбрать определённый пункт в диалоге.
Основа команды это обычный бинд который вводит команду, но остаётся сама функция которая будет выбирать пункт в диалоге.
itsLegend
06.03.2015, 07:32
sendDialogResponse
Предлагайте идеи какие функции вы хотите увидеть в следующей версии SF API.
Мта классы)
Давай больше уроков посвященных апи. Например создание клиентских диалогов (обычных и DXTU).
О CGame каких-то тоже бы.
Как узнать id определённого диалога? Помню в каком то собе была такая функция, но увы, я его не нашёл, а id очень нужно узнать.)
з.ы. ид не те что стили, я их и так знаю))
upd: всё, узнал через самп-бот)
Код:
char textpath[MAX_PATH] = "SAMPFUNCS\\image.png";
stTextureInfo *point = fTxd;
point->szTexturePath = textpath; // тут ошибка
При установке другого типа (к примеру iResourceID) проблем нет
Предлагайте идеи какие функции вы хотите увидеть в следующей версии 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
В СФ апи нет. В самом С++ да.
Подскажите пожалуйста:
1) Как отобразить курсор, пробовал SF->getSAMP()->getMisc()->ToggleCursor(1,true), не получилось
2) SF->getSAMP()->getPlayers()->iLocalPlayerPing обновляет пинг только при открытие tab, можно ли реализовать обновление без нажатия tab?
Подскажите пожалуйста:
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();
Не хватает немного структуры stWeaponData.
Не хватает немного структуры stWeaponData.
Согласен с тобой, не удобно отдельно вытаскивать с разных мест данные об оружии.
Есть небольшая рендерная консоль:
http://firepic.org/images/2015-03/23/giptgcq6a0cy.png
Как сделать так, чтоб самп не обрабатывал Tab, T, F1 и т.д (такое уже сделано в стандартной консоли сф).
Dark_Knight
23.03.2015, 23:25
Т.е, тебе не нужно, чтобы в табе отображалось?
Код:
if(!SF->getSAMP()->getScoreboard()->iIsEnable)
Т.е, тебе не нужно, чтобы в табе отображалось?
Код:
if(!SF->getSAMP()->getScoreboard()->iIsEnable)
Если открыть консоль сф и нажать T - то чат сампа не откроется, если закрыть консоль и сделать тоже - чат откроется. Вот и вопрос: как сделать это?
Dark_Knight
30.03.2015, 14:13
Нужно открывать SFPlugin.sln -_-
MISTER_GONWIK
30.03.2015, 14:45
Если открыть консоль сф и нажать T - то чат сампа не откроется, если закрыть консоль и сделать тоже - чат откроется. Вот и вопрос: как сделать это?
Видишь ли, когда консоль сф открыта, работает хук клавиш, который прерывает передачу нажатий клавиш, у тебя я вообще не вижу там консоли, поэтому лучший вариант - нопить обработку этих клавиш
Подскажите, пожалуйста, аналог данного опкода: 0B74: samp set_chat_string 0@ text "ho-ho-ho" prefix "" color 3@ prefix_color 4@
А то не смог найти..
Подскажите, пожалуйста, аналог данного опкода: 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) вот эта штука должна помочь
Уже ставил, не помогло
Проект->Свойства SF Plugin->Свойства конфигурации->Каталоги VC++
в каталоги включения добавь $(DXSDK_DIR)\Include
в каталоги библиотек добавь $(DXSDK_DIR)\Lib\x86
вот так должно быть
https://forum.antichat.xyz/attachments/27067428/
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 а еще вопрос самолёты к какому вехикл типу оно тогда отнесёт?
Суть в проверке типов транспорта в котором я нахожусь.
а еще вопрос самолёты к какому вехикл типу оно тогда отнесёт?
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;
}
а еще вопрос самолёты к какому вехикл типу оно тогда отнесёт?
Airplanes должно быть
в том то и фишка, что нет такого типа у апи.
Код:
switch (pActer->vehicle->vehicle_type)
{
case VEHICLE_TYPE_CAR:
case VEHICLE_TYPE_BIKE:
case VEHICLE_TYPE_TRAIN:
return false;
default:
return true;
}
Спасибо.
А не легче проверять не по типу, а по классу авто?
Из собейта:
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 такого нету
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()
1) Эта функция не сажает игрока в авто, а отправляет RPC.
2) sscanf. Первым параметром будет param.c_str()
можно проще, используя stringstream(#include )
std::stringstream ss(param);
int p1 = 0;
std::string p2;
ss >> p1 >> p2;
вот так например
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);
Вроде так, если не ошибся.
Пока "нормальными" методами никак.
Можешь попробовать вызывать клео опкоды, указывай
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");
Вот так прекрасно работает,спасибо.
Есть опкод что-бы выйти из машины?
Ещё пару вопросов:
1)Как узнать ид машины в которой сидит игрок?
Разобрался:
Код:
stInCarData * VehInfo = SF->getSAMP()->getPlayers()->GetInCarData(id);
int carid = VehInfo->sVehicleID;
2)Как выкинуть себя из машины?
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; // сохраняем ссылку на переменную в которой хранится текущий статус диалога.
А что это значит?
Код:
int &iDialogStatus = SF->getSAMP()->getDialog()->iIsActive; // сохраняем ссылку на переменную в которой хранится текущий статус диалога.
ну короче чтобы каждый раз
SF->getSAMP()->getDialog()->iIsActive не писать можно как бы сохранить это большую штуку в iDialogStatus а потом изменять ee
iDialogStatus = 1
iDialogStatus = 0
ну короче вооот ну вот у iIsActive есть адрес да? Ну мы короче этот адрес в iDialogStatus записали да? и можем его изменять..
Как тпхнуть игрока на координаты?
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
;
Уршадов когда новые уроки будут?
urShadow
05.05.2015, 19:21
Предложи тему уроков, напишу.
Предложи тему уроков, напишу.
примеры работы из классом CGAME (Телепортация игрока, поиск актёров в стриме(по флагам/рандомно/ближайших) и тд.)
Денис, добавь больше готовых функций на отправку рпц пожалуйста.
kemperrr
22.05.2015, 21:47
Предложи тему уроков, напишу.
Го про МТА классы
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|
Что с этой ошибкой делать? Файл такой есть по нужному пути.
ЧЕ НЕ ТАК ВРОДЕ ВСЕ РАБОТАЕТ ПОСЛЕ АКТИВАЦИИ РЕСТАРТ КИК ИЛИ БАН ЧЕРЕЗ КАКОЕ ТО ВРЕМЯ МОЖ ЗАДЕРЖКУ БОЛЬШЕ НАДО
Код:
#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;
}
void Crasher( void )
не void, а bool, и в конце return true; в wiki же есть пример
не 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
Как эмулировать нажатие игровой клавиши?
Почему когда пишу любой сф плагин, потом музыка при входе в игру хуярит? Радио типа.
у меня тоже на том гипере музыка играла снуб док какой то при входе начала и во время игры играла
бля с++ учите, музыку там не*** делать убрать.
slonoboyko
12.06.2015, 22:32
бля с++ учите, музыку там не*** делать убрать.
У всех затупы бывают. Я просто не мог предположить что в исходнике строчка музыку включает. Думал проблема где то глубже.
У всех затупы бывают. Я просто не мог предположить что в исходнике строчка музыку включает. Думал проблема где то глубже.
может быть в знании английского*?)
slonoboyko
16.06.2015, 13:23
может быть в знании английского*?)
Может быть)
поцаны, помогите.
хочу, чтобы команда принимала пару параметров, но не осилил все это сделать сам.
Код:
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 параметра какого хочешь типа. Написал бы код, но я с телефона
Смотри, ты получаешь значение чар. Потом функцией сканф считай 2 параметра какого хочешь типа. Написал бы код, но я с телефона
Ну у меня короче пустая строка выходит.
Я походу какие-то параметры напутал.
Dark_Knight
29.06.2015, 12:53
Получает 2 параметра типа DWORD
Код:
DWORD a, b;
sscanf(params.c_str(), "%d %d", &a, &b);
как сделать проверку на координату и её радиус? То бишь если я нахожусь в радиусе заданной координаты, то выполняется моя функция.
поцаны, проблема тут такая.
вот, я короче пытаюсь сделать считывание из файла, но у меня пустую строку всегда выводит.
Код:
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..
я сегодня выложу хорошую штуку для работы с 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();
}
Читает весь файл.
Код:
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();
У мну всё работает.
Можешь тут почитать, если хз чо о чём: 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
Есть что по пикапам? Подобрать и т.д
Есть что по пикапам? Подобрать и т.д
Код:
void sendPickedUpPickup( int pickup );
stPickupPool
Код:
stPickupPool *pPickup = SF->getSAMP()->getInfo()->pPools->pPickup;
Вроде так, если не напиздел, а я могу. Ваще поройся, дохуя че есть.
а че это, как его в 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.
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;
Как загрузить/выгрузить плагин?
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
чем можно заменить функции собейта 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
Ты лучше опиши, что тебе надо.
Ты лучше опиши, что тебе надо.
ну из собейт кода сделать сф плагин как преобразовать например эти функции 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
)
;
}
pload/pfree
Это вроде только через консоль, а как реализовать в сф плагине?
urShadow
10.07.2015, 17:28
Лол, Зерно как был так и остался говнокодером.
Это вроде только через консоль, а как реализовать в сф плагине?
наверна)
Код:
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
)
;
}
Юль, от куда у тя код исходника гока?
Словами опиши, что плагин должен выполнять.
это тп игрока вместе с машиной на магнит в СФ работает только в машине при нажатии R
Юль, от куда у тя код исходника гока?
у зеро взяла
Dark_Knight
11.07.2015, 16:44
это тп игрока вместе с машиной на магнит в СФ работает только в машине при нажатии R
у зеро взяла
Ищет ближайшего игрока?
Ищет ближайшего игрока?
да при нажатии R его тп вместе с машиной на магнит в СФ в гоке там была цель только для водителя incartargetonly на пешего не действует
короче не стал доебывать в чате со своими нубскими вопросами, вот один из них.
Благодаря Фипу получилось сделать, чтобы обрабатывались действия с 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);
}
bool __stdcall hookmsg(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return !TwEventWin(hwnd, uMsg, wParam, lParam);
}
этого достаточно.
kemperrr
12.07.2015, 22:49
FYP, эмуляцию игровых клавиш запилил?
Как эмулировать нажатие клавиши? Функция emulateGTAKey не работает, как я понял. Через callOpcode не получилось (я никогда не работал с опкодами). Может, есть какое-то решение?
Ещё вопрос. Можно ли как-то "поставить на паузу", не выходя в меню, из скрипта? Чтобы сервер думал, что игрок на паузе, но скрипт всё равно работал?
И вдогонку. Как получить координаты чекпоинта?
Написал такую функцию для отправки сообщений в чат. Но отправляет не то. В чат выводится пустое сообщение. Как правильно отправлять данный пакет?
Код:
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
};
Спасибо огромное! А остальные вопросы не подскажешь?
Ещё дополнительно вопрос - как понять, что персонаж находится именно в поезде? Не просто в машине.
Код:
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");
Структурирую вопросы:
1) Эмуляция игровых клавиш?
2) Выйти на паузу, "не выходя на паузу"
3) Координаты чекпоинта более адекватно:D
4) Как определить, что персонаж находится именно в поезде?
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)
"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 файлы.
Так и должно быть?
Ты ресурс в проект добавил то?
Ты ресурс в проект добавил то?
Конечно.
gj a
Надо парсер иметь, d3d c *.dds изображением работает.
В принципе, я научился делать прозрачный фон у BMP (из-за прозрачности и нужна была текстура в формате PNG), но все равно спасибо.
Вот я нахожусь в поезде. Как сделать тп меня вместе с поездом куда-либо?
Также интересует вопрос, как поставить игру на паузу прямо из плагина? Какая функция?
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;
}
Попытался так. Но мотоциклы и машины так тпшит, а вот поезд - нет :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;
}
Насколько я знаю, поезд не может тпхнутся. Он всегда на рельсах
По идее при ТП поезд должен встать на ближайшие рельсы. В скриптах, по крайней мере, при установке поезда так.
Ладно, как тогда поставить игру на паузу? Аналог нажатия escape фактически?
Как получить скин игрока?
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;
Можно ли перехватить как-то выгрузку плагина (т.е. pfree NAME).
Я просто хочу убить поток в это время.
Подскажите пожалуйста как получить координаты игрока сидящего в машине?
Как выводить в рендер значения переменных?
slonoboyko
29.07.2015, 04:44
Как выводить в рендер значения переменных?
функой sprintf ебашишь все в одну переменную потом с помощью идентификатора.
функой sprintf ебашишь все в одну переменную потом с помощью идентификатора.
Спасибо.
Тут одна проблема возникла, когда я пытаюсь вывести кол-во хп, то игра зависает. В чём проблема?
Sire Like
29.07.2015, 09:56
Спасибо.
Тут одна проблема возникла, когда я пытаюсь вывести кол-во хп, то игра зависает. В чём проблема?
Тут наверно код нужно смотреть.
:-[
Код:
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;
}
Код:
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];
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[id];
Это я знаю, писал по памяти, забыл дописать.
Ничего не меняет, зависает игра при коннекте.
Dark_Knight
29.07.2015, 20:26
Где получене ида, а так же добавь проверку что указатель не нулевой.
Мне кто-нибудь ответит? Как определить, нахожусь ли я в поезде?
как в sf использовать это?
int len = rpcParams ? rpcParams->numberOfBitsOfData / 8 : 0;
как в одну строку вывести текст разного цвета и как вывести что либо в консоль?
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot