 |
|

27.04.2017, 16:40
|
|
Постоянный
Регистрация: 17.01.2014
Сообщений: 493
С нами:
6483143
Репутация:
93
|
|
Сообщение от SR_team
int a = reinterpret_cast(&fout);
Это ведь можно использовать как сам fout, ссылаясь на него? Так примерно:
*a
|
|
|

27.04.2017, 17:17
|
|
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами:
6921957
Репутация:
183
|
|
Какая у тебя задача вообще ? А то щас настроеш код из говна и палок и потом хер разберешься почему у тебя крашит.
|
|
|

27.04.2017, 17:22
|
|
Постоянный
Регистрация: 17.01.2014
Сообщений: 493
С нами:
6483143
Репутация:
93
|
|
Сообщение от Dark_Knight
Какая у тебя задача вообще ? А то щас настроеш код из говна и палок и потом хер разберешься почему у тебя крашит.
Отлично сказано.
Да вот я хотел поставить условие на проверку существования файла для логов, и открывать файл создавая указатель для записи, в зависимости от его наличия - есть файл, пишем с конца . Нет файла - создаём заново. Вот. И поскольку заполнение лога идёт через хук, мне требуется создать указатель на файл, (fout) в mainloop, чтобы он был доступен коллбеку irpc, вот код если не понятно:
Сообщение от Спойлер
C++:
Код:
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#include "SFAPI\SFRakNet.h"
#include
#include
#include
#include
#include
#include "qwe\main.h"
#pragma comment(lib, "shlwapi.lib")
using
namespace
std
;
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
int
*
a
=
nullptr
;
bool
CALLBACK
irpc
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
ScriptRPCEnumeration
::
RPC_ScrClientMessage
)
// id: 93 thanks for MISTER_GONWIK
{
D3DCOLOR color
=
-
1
;
int
length
=
0
;
char
message
[
144
]
{
0
}
;
params
->
bitStream
->
Read
(
color
)
;
params
->
bitStream
->
Read
(
length
)
;
params
->
bitStream
->
Read
(
message
,
length
)
;
//sss[len] = '\0';
if
(
strcmp
(
string
(
message
)
.
c_str
(
)
,
" "
)
==
0
)
return
false
;
else
{
//SF->getSAMP()->getChat()->AddChatMessage(555555, "%s", string(message).c_str());
//fout
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
init
=
true
;
char
meow
[
MAX_PATH
]
;
GetCurrentDirectory
(
sizeof
(
meow
)
,
meow
)
;
if
(
PathFileExists
(
strcat
(
meow
,
"/yiffme"
)
)
)
{
ofstream
fout
(
"yiffme"
,
ios
::
app
)
;
*
a
=
reinterpret_cast
(
&
fout
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
555555
,
"file exist"
)
;
}
else
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
555555
,
"file doesnt exist"
)
;
fout
getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_INCOMING_RPC
,
irpc
)
;
}
}
|
|
|

27.04.2017, 19:21
|
|
Познавший АНТИЧАТ
Регистрация: 09.03.2013
Сообщений: 1,262
С нами:
6935116
Репутация:
183
|
|
Сообщение от Снежок
Отлично сказано.
Да вот я хотел поставить условие на проверку существования файла для логов, и открывать файл создавая указатель для записи, в зависимости от его наличия - есть файл, пишем с конца . Нет файла - создаём заново. Вот. И поскольку заполнение лога идёт через хук, мне требуется создать указатель на файл, (fout) в mainloop, чтобы он был доступен коллбеку irpc, вот код если не понятно:
Сообщение от Спойлер
C++:
Код:
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#include "SFAPI\SFRakNet.h"
#include
#include
#include
#include
#include
#include "qwe\main.h"
#pragma comment(lib, "shlwapi.lib")
using
namespace
std
;
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
int
*
a
=
nullptr
;
bool
CALLBACK
irpc
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
ScriptRPCEnumeration
::
RPC_ScrClientMessage
)
// id: 93 thanks for MISTER_GONWIK
{
D3DCOLOR color
=
-
1
;
int
length
=
0
;
char
message
[
144
]
{
0
}
;
params
->
bitStream
->
Read
(
color
)
;
params
->
bitStream
->
Read
(
length
)
;
params
->
bitStream
->
Read
(
message
,
length
)
;
//sss[len] = '\0';
if
(
strcmp
(
string
(
message
)
.
c_str
(
)
,
" "
)
==
0
)
return
false
;
else
{
//SF->getSAMP()->getChat()->AddChatMessage(555555, "%s", string(message).c_str());
//fout
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
init
=
true
;
char
meow
[
MAX_PATH
]
;
GetCurrentDirectory
(
sizeof
(
meow
)
,
meow
)
;
if
(
PathFileExists
(
strcat
(
meow
,
"/yiffme"
)
)
)
{
ofstream
fout
(
"yiffme"
,
ios
::
app
)
;
*
a
=
reinterpret_cast
(
&
fout
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
555555
,
"file exist"
)
;
}
else
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
555555
,
"file doesnt exist"
)
;
fout
getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_INCOMING_RPC
,
irpc
)
;
}
}
Это лишь пример накидал, но не пользуйся такими дерьмовыми функциями как:
C++:
Код:
GetCurrentDirectory
(
.
.
)
,
PathFileExists
(
.
.
)
и т
.
д
.
займись изучением чего-то более классного и функционального
C++:
[CODE]
// после всех инклудов
#include
namespace
fs
=
std
::
experimental
::
filesystem
;
// самой первой функцией
std
::
ofstream
&
log
(
)
{
static
std
::
ofstream logFile
;
if
(
logFile
.
is_open
(
)
==
false
)
{
fs
::
path workDirectoryPath
=
fs
::
current_path
(
)
/
"SAMPFUNCS"
/
"Meow"
;
if
(
!
fs
::
exists
(
workDirectoryPath
)
)
fs
::
create_directories
(
workDirectoryPath
)
;
fs
::
path logFilePath
=
workDirectoryPath
/
"yiffme.fr"
;
bool
fileExists
=
fs
::
exists
(
logFilePath
)
;
logFile
.
open
(
logFilePath
.
string
(
)
,
std
::
ios
::
app
)
;
if
(
fileExists
==
true
)
logFile
ну и mainloop в твоём случае должен выглядеть вот так:
C++:
[CODE]
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_INCOMING_RPC
,
incomingRPC
)
;
log
(
)
а irpc
C++:
[CODE]
bool
CALLBACK
incomingRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
ScriptRPCEnumeration
::
RPC_ScrClientMessage
)
// id: 93 thanks for MISTER_GONWIK
{
D3DCOLOR color
=
-
1
;
int
length
=
0
;
char
message
[
144
]
{
0
}
;
params
->
bitStream
->
Read
(
color
)
;
params
->
bitStream
->
Read
(
length
)
;
params
->
bitStream
->
Read
(
message
,
length
)
;
if
(
!
strcmp
(
message
,
" "
)
)
return
false
;
log
(
)
|
|
|

28.04.2017, 09:09
|
|
Познающий
Регистрация: 24.02.2017
Сообщений: 75
С нами:
4849680
Репутация:
0
|
|
Запустил через RakSAMP три бота на advance. Примерно через 10 минут двух ботов телепортировал к себе администратор, а ещё через минуту забанил всех трех за использование "песочницы".
Как он определил, что я использую "песочницу"? Скорее всего посмотрел, что одинаковые ip, но как тогда можно обмануть админов? Можно сделать, чтобы боты двигались, но администратор может телепортировать в любую точку и бот тупо может забежать в стену.
|
|
|

28.04.2017, 09:26
|
|
Познавший АНТИЧАТ
Регистрация: 09.03.2013
Сообщений: 1,262
С нами:
6935116
Репутация:
183
|
|
Сообщение от winrare
Запустил через RakSAMP три бота на advance. Примерно через 10 минут двух ботов телепортировал к себе администратор, а ещё через минуту забанил всех трех за использование "песочницы".
Как он определил, что я использую "песочницу"? Скорее всего посмотрел, что одинаковые ip, но как тогда можно обмануть админов? Можно сделать, чтобы боты двигались, но администратор может телепортировать в любую точку и бот тупо может забежать в стену.
проще сказать, что никак.
|
|
|

28.04.2017, 09:42
|
|
Познающий
Регистрация: 24.02.2017
Сообщений: 75
С нами:
4849680
Репутация:
0
|
|
Сообщение от MISTER_GONWIK
проще сказать, что никак.
А если не проще? Я не ищу легких путей.
|
|
|

28.04.2017, 10:08
|
|
Познавший АНТИЧАТ
Регистрация: 09.03.2013
Сообщений: 1,262
С нами:
6935116
Репутация:
183
|
|
Сообщение от winrare
А если не проще? Я не ищу легких путей.
для тебя это невозможно, хочешь чтоб бот бегал как человек, пиши систему путей, но учти, у тебя нет никакой карты коллизии
|
|
|

28.04.2017, 10:28
|
|
Познающий
Регистрация: 24.02.2017
Сообщений: 75
С нами:
4849680
Репутация:
0
|
|
Сообщение от MISTER_GONWIK
для тебя это невозможно, хочешь чтоб бот бегал как человек, пиши систему путей, но учти, у тебя нет никакой карты коллизии
Такая система мне нужна в случае, если админ уже телепортировал меня. А что если просто не доходить до этого? Скорее всего он вычисляет меня по ip (если есть ещё варианты, скажи), значит если будут разные ip, то все будет нормально. Разные ip можно получить используя прокси, но я не знаю, поддерживает ли RakSAMP или хотя бы RakNet прокси.
|
|
|

28.04.2017, 10:44
|
|
Познавший АНТИЧАТ
Регистрация: 09.03.2013
Сообщений: 1,262
С нами:
6935116
Репутация:
183
|
|
Сообщение от winrare
Такая система мне нужна в случае, если админ уже телепортировал меня. А что если просто не доходить до этого? Скорее всего он вычисляет меня по ip (если есть ещё варианты, скажи), значит если будут разные ip, то все будет нормально. Разные ip можно получить используя прокси, но я не знаю, поддерживает ли RakSAMP или хотя бы RakNet прокси.
1. обычный раксамп не поддерживает работу через прокси, но сделать можно, как это сделать, думай сам.
2. я не админ на сервере, так что могут сказать лишь предположительно, что есть команда, по которой отображаются текущие онлайн аккаунты с одного ип (как ты и подумал), для раксампа нужны прокси UDP, их ты не найдёшь, только если с помощью программ hotspot shield и прочих.
3. сомневаюсь что всё это спасёт тебя от банов, ведь они всё равно палятся (я про ботов)
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|