Просмотр полной версии : SF | Способ передачи данных по сети
Хаюшки
Это вопрос для шарющих.
Те, кто интересовался работой сокетов на c++ и знают, что это такое
У меня к вам вопрос
Как можно передать данные между игроками/пользователями через интернет, т.к либ для работы с сокетом я не нашел в SF, а методы, что работают в обычном проекте тут не прокатывают.
Все там прокатывает... Опиши конкретнее, в чем ошибка
Все там прокатывает... Опиши конкретнее, в чем ошибка
Крч, подключаю либу с сокетом
Вроде пишет, что она есть, даже ее открывает, но при создании той же самой структуры, говорит, что она не объявлена
Крч, подключаю либу с сокетом
Вроде пишет, что она есть, даже ее открывает, но при создании той же самой структуры, говорит, что она не объявлена
покажи код и что пишет студия
https://i.imgur.com/iJTOyTk.png
А можно в виде кода, а не скриншота?
Сокеты к проекту так же подключал?
C++:
#include
#include
#pragma comment(lib, "WS2_32.lib")
Да, точно также
Я же сказал, что они вроде-бы определились но выводят такую ошибку
А можно в виде кода, а не скриншота?
Окс
с++:
#include
#include "main.h"
#pragma comment(lib, "ws2_32.lib")
#include
#include
#include
#pragma warning(disable: 4996)
SOCKET Connection
;
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
bool
CALLBACK
outcomingData
(
stRakNetHookParams
*
params
)
// определение callback-функции, которая будет вызвана при отправке какого либо пакета
{
if
(
params
->
packetId
==
93
)
{
UINT32 dColor
;
UINT32 messageLen
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
dColor
)
;
params
->
bitStream
->
Read
(
messageLen
)
;
char
*
msg
=
new
char
[
messageLen
]
;
params
->
bitStream
->
Read
(
msg
,
messageLen
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
msg
)
;
params
->
bitStream
->
ResetReadPointer
(
)
;
}
return
true
;
// успешно завершаем отправку пакета
}
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
SF
->
getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_INCOMING_RPC
,
outcomingData
)
;
// регистрируем RakNet callback
WSAData wsaData
;
WORD DLLVersion
=
MAKEWORD
(
2
,
1
)
;
if
(
WSAStartup
(
DLLVersion
,
&
wsaData
)
!=
0
)
{
std
::
cout
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Error connected to server!"
)
;
}
else
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Connected!"
)
;
}
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}
Окс
с++:
#include
#include "main.h"
#pragma comment(lib, "ws2_32.lib")
#include
#include
#include
#pragma warning(disable: 4996)
SOCKET Connection
;
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
bool
CALLBACK
outcomingData
(
stRakNetHookParams
*
params
)
// определение callback-функции, которая будет вызвана при отправке какого либо пакета
{
if
(
params
->
packetId
==
93
)
{
UINT32 dColor
;
UINT32 messageLen
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
dColor
)
;
params
->
bitStream
->
Read
(
messageLen
)
;
char
*
msg
=
new
char
[
messageLen
]
;
params
->
bitStream
->
Read
(
msg
,
messageLen
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
msg
)
;
params
->
bitStream
->
ResetReadPointer
(
)
;
}
return
true
;
// успешно завершаем отправку пакета
}
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
SF
->
getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_INCOMING_RPC
,
outcomingData
)
;
// регистрируем RakNet callback
WSAData wsaData
;
WORD DLLVersion
=
MAKEWORD
(
2
,
1
)
;
if
(
WSAStartup
(
DLLVersion
,
&
wsaData
)
!=
0
)
{
std
::
cout
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Error connected to server!"
)
;
}
else
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Connected!"
)
;
}
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}
#include - удали
#include "main.h" - после всех инклюдов
#include - удали
#include "main.h" - после всех инклюдов
Спасибо, а с чем это связано
Спасибо, а с чем это связано
Cannot include both files (WinSock2, Windows.h) (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxNDAxNTAz)
I'm having a problem including both files. Now, I know I need to either include Winsock2 first, then windows.h, or simply put: #define WIN32_LEAN_AND_MEAN but, I'm still having problems I have a ...
stackoverflow.com
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot