Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
REIKAI
ygopro
Commits
2007e1b6
Commit
2007e1b6
authored
Jan 29, 2012
by
argon.sun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
host finding
parent
feb083ea
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
176 additions
and
92 deletions
+176
-92
gframe/duelclient.cpp
gframe/duelclient.cpp
+85
-2
gframe/duelclient.h
gframe/duelclient.h
+10
-0
gframe/game.cpp
gframe/game.cpp
+2
-1
gframe/game.h
gframe/game.h
+2
-0
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+4
-1
gframe/netserver.cpp
gframe/netserver.cpp
+55
-0
gframe/netserver.h
gframe/netserver.h
+5
-0
gframe/network.cpp
gframe/network.cpp
+0
-75
gframe/network.h
gframe/network.h
+0
-1
gframe/single_duel.cpp
gframe/single_duel.cpp
+3
-2
script/c23274061.lua
script/c23274061.lua
+1
-2
script/c38495396.lua
script/c38495396.lua
+1
-1
script/c4335427.lua
script/c4335427.lua
+1
-1
script/c4466015.lua
script/c4466015.lua
+3
-3
script/c5284653.lua
script/c5284653.lua
+1
-2
script/c76650663.lua
script/c76650663.lua
+2
-1
strings.conf
strings.conf
+1
-0
No files found.
gframe/duelclient.cpp
View file @
2007e1b6
...
@@ -23,6 +23,10 @@ int DuelClient::select_hint = 0;
...
@@ -23,6 +23,10 @@ int DuelClient::select_hint = 0;
wchar_t
DuelClient
::
event_string
[
256
];
wchar_t
DuelClient
::
event_string
[
256
];
mtrandom
DuelClient
::
rnd
;
mtrandom
DuelClient
::
rnd
;
bool
DuelClient
::
is_refreshing
=
false
;
std
::
vector
<
HostInfo
>
DuelClient
::
hosts
;
event
*
DuelClient
::
resp_event
=
0
;
bool
DuelClient
::
StartClient
(
unsigned
int
ip
,
unsigned
short
port
,
bool
create_game
)
{
bool
DuelClient
::
StartClient
(
unsigned
int
ip
,
unsigned
short
port
,
bool
create_game
)
{
if
(
connect_state
)
if
(
connect_state
)
return
false
;
return
false
;
...
@@ -254,7 +258,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
...
@@ -254,7 +258,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
else
if
(
mainGame
->
wLanWindow
->
isVisible
())
else
if
(
mainGame
->
wLanWindow
->
isVisible
())
mainGame
->
HideElement
(
mainGame
->
wLanWindow
);
mainGame
->
HideElement
(
mainGame
->
wLanWindow
);
mainGame
->
gMutex
.
Unlock
();
mainGame
->
gMutex
.
Unlock
();
mainGame
->
WaitFrameSignal
(
1
0
);
mainGame
->
WaitFrameSignal
(
1
1
);
mainGame
->
ShowElement
(
mainGame
->
wHostSingle
);
mainGame
->
ShowElement
(
mainGame
->
wHostSingle
);
mainGame
->
WaitFrameSignal
(
10
);
mainGame
->
WaitFrameSignal
(
10
);
break
;
break
;
...
@@ -2275,5 +2279,84 @@ void DuelClient::SetResponseB(unsigned char* respB, unsigned char len) {
...
@@ -2275,5 +2279,84 @@ void DuelClient::SetResponseB(unsigned char* respB, unsigned char len) {
void
DuelClient
::
SendResponse
()
{
void
DuelClient
::
SendResponse
()
{
SendBufferToServer
(
CTOS_RESPONSE
,
response_buf
,
response_len
);
SendBufferToServer
(
CTOS_RESPONSE
,
response_buf
,
response_len
);
}
}
void
DuelClient
::
BeginRefreshHost
()
{
if
(
is_refreshing
)
return
;
is_refreshing
=
true
;
mainGame
->
gMutex
.
Lock
();
mainGame
->
lstHostList
->
clear
();
hosts
.
clear
();
event_base
*
broadev
=
event_base_new
();
char
hname
[
256
];
gethostname
(
hname
,
256
);
hostent
*
host
=
gethostbyname
(
hname
);
if
(
!
host
)
return
;
SOCKET
reply
=
socket
(
AF_INET
,
SOCK_DGRAM
,
0
);
sockaddr_in
reply_addr
;
memset
(
&
reply_addr
,
0
,
sizeof
(
reply_addr
));
reply_addr
.
sin_family
=
AF_INET
;
reply_addr
.
sin_port
=
htons
(
7921
);
reply_addr
.
sin_addr
.
s_addr
=
0
;
if
(
bind
(
reply
,
(
sockaddr
*
)
&
reply_addr
,
sizeof
(
reply_addr
))
==
SOCKET_ERROR
)
{
closesocket
(
reply
);
return
;
}
timeval
timeout
=
{
5
,
0
};
resp_event
=
event_new
(
broadev
,
reply
,
EV_TIMEOUT
|
EV_READ
|
EV_PERSIST
,
BroadcastReply
,
broadev
);
event_add
(
resp_event
,
&
timeout
);
//send request
SOCKADDR_IN
local
;
local
.
sin_family
=
AF_INET
;
local
.
sin_port
=
htons
(
7922
);
SOCKADDR_IN
sockTo
;
sockTo
.
sin_addr
.
s_addr
=
htonl
(
INADDR_BROADCAST
);
sockTo
.
sin_family
=
AF_INET
;
sockTo
.
sin_port
=
htons
(
7920
);
HostRequest
hReq
;
hReq
.
identifier
=
NETWORK_CLIENT_ID
;
for
(
int
i
=
0
;
i
<
8
;
++
i
)
{
if
(
host
->
h_addr_list
[
i
]
==
0
)
break
;
int
local_addr
=
*
(
unsigned
int
*
)
host
->
h_addr_list
[
i
];
local
.
sin_addr
.
s_addr
=
local_addr
;
SOCKET
sSend
=
socket
(
AF_INET
,
SOCK_DGRAM
,
IPPROTO_UDP
);
if
(
sSend
==
INVALID_SOCKET
)
break
;
BOOL
opt
=
TRUE
;
setsockopt
(
sSend
,
SOL_SOCKET
,
SO_BROADCAST
,
(
const
char
*
)
&
opt
,
sizeof
(
BOOL
));
if
(
bind
(
sSend
,
(
sockaddr
*
)
&
local
,
sizeof
(
sockaddr
))
==
SOCKET_ERROR
)
{
closesocket
(
sSend
);
break
;
}
sendto
(
sSend
,
(
const
char
*
)
&
hReq
,
sizeof
(
HostRequest
),
0
,
(
sockaddr
*
)
&
sockTo
,
sizeof
(
sockaddr
));
closesocket
(
sSend
);
}
Thread
::
NewThread
(
RefreshThread
,
broadev
);
}
int
DuelClient
::
RefreshThread
(
void
*
arg
)
{
event_base
*
broadev
=
(
event_base
*
)
arg
;
event_base_dispatch
(
broadev
);
evutil_socket_t
fd
;
event_get_assignment
(
resp_event
,
0
,
&
fd
,
0
,
0
,
0
);
evutil_closesocket
(
fd
);
event_free
(
resp_event
);
event_base_free
(
broadev
);
is_refreshing
=
false
;
}
void
DuelClient
::
BroadcastReply
(
evutil_socket_t
fd
,
short
events
,
void
*
arg
)
{
if
(
events
&
EV_TIMEOUT
)
{
event_base_loopbreak
((
event_base
*
)
arg
);
}
else
if
(
events
&
EV_READ
)
{
sockaddr_in
bc_addr
;
int
sz
=
sizeof
(
sockaddr_in
);
char
buf
[
256
];
int
ret
=
recvfrom
(
fd
,
buf
,
256
,
0
,
(
sockaddr
*
)
&
bc_addr
,
&
sz
);
HostPacket
*
pHP
=
(
HostPacket
*
)
buf
;
if
(
pHP
->
identifier
==
NETWORK_SERVER_ID
&&
pHP
->
version
==
PRO_VERSION
)
{
mainGame
->
gMutex
.
Lock
();
mainGame
->
gMutex
.
Unlock
();
}
}
}
}
}
gframe/duelclient.h
View file @
2007e1b6
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
#define DUELCLIENT_H
#define DUELCLIENT_H
#include "config.h"
#include "config.h"
#include <vector>
#include <event2/event.h>
#include <event2/event.h>
#include <event2/listener.h>
#include <event2/listener.h>
#include <event2/bufferevent.h>
#include <event2/bufferevent.h>
...
@@ -62,6 +63,15 @@ public:
...
@@ -62,6 +63,15 @@ public:
memcpy
(
p
,
buffer
,
len
);
memcpy
(
p
,
buffer
,
len
);
bufferevent_write
(
client_bev
,
duel_client_write
,
len
+
3
);
bufferevent_write
(
client_bev
,
duel_client_write
,
len
+
3
);
}
}
protected:
static
bool
is_refreshing
;
static
event
*
resp_event
;
public:
static
std
::
vector
<
HostInfo
>
hosts
;
static
void
BeginRefreshHost
();
static
int
RefreshThread
(
void
*
arg
);
static
void
BroadcastReply
(
evutil_socket_t
fd
,
short
events
,
void
*
arg
);
};
};
}
}
...
...
gframe/game.cpp
View file @
2007e1b6
...
@@ -77,8 +77,9 @@ bool Game::Initialize() {
...
@@ -77,8 +77,9 @@ bool Game::Initialize() {
env
->
addStaticText
(
dataManager
.
GetSysString
(
1220
),
rect
<
s32
>
(
10
,
30
,
220
,
50
),
false
,
false
,
wLanWindow
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1220
),
rect
<
s32
>
(
10
,
30
,
220
,
50
),
false
,
false
,
wLanWindow
);
ebNickName
=
env
->
addEditBox
(
gameConf
.
nickname
,
rect
<
s32
>
(
110
,
25
,
450
,
50
),
true
,
wLanWindow
);
ebNickName
=
env
->
addEditBox
(
gameConf
.
nickname
,
rect
<
s32
>
(
110
,
25
,
450
,
50
),
true
,
wLanWindow
);
ebNickName
->
setTextAlignment
(
irr
::
gui
::
EGUIA_UPPERLEFT
,
irr
::
gui
::
EGUIA_CENTER
);
ebNickName
->
setTextAlignment
(
irr
::
gui
::
EGUIA_UPPERLEFT
,
irr
::
gui
::
EGUIA_CENTER
);
lstHostList
=
env
->
addListBox
(
rect
<
s32
>
(
10
,
60
,
570
,
3
5
0
),
wLanWindow
,
LISTBOX_LAN_HOST
,
true
);
lstHostList
=
env
->
addListBox
(
rect
<
s32
>
(
10
,
60
,
570
,
3
2
0
),
wLanWindow
,
LISTBOX_LAN_HOST
,
true
);
lstHostList
->
setItemHeight
(
18
);
lstHostList
->
setItemHeight
(
18
);
btnLanRefresh
=
env
->
addButton
(
rect
<
s32
>
(
240
,
325
,
340
,
350
),
wLanWindow
,
BUTTON_LAN_REFRESH
,
dataManager
.
GetSysString
(
1217
));
env
->
addStaticText
(
dataManager
.
GetSysString
(
1221
),
rect
<
s32
>
(
10
,
360
,
220
,
380
),
false
,
false
,
wLanWindow
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1221
),
rect
<
s32
>
(
10
,
360
,
220
,
380
),
false
,
false
,
wLanWindow
);
ebJoinIP
=
env
->
addEditBox
(
gameConf
.
lastip
,
rect
<
s32
>
(
110
,
355
,
250
,
380
),
true
,
wLanWindow
);
ebJoinIP
=
env
->
addEditBox
(
gameConf
.
lastip
,
rect
<
s32
>
(
110
,
355
,
250
,
380
),
true
,
wLanWindow
);
ebJoinIP
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
ebJoinIP
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
...
...
gframe/game.h
View file @
2007e1b6
...
@@ -155,6 +155,7 @@ public:
...
@@ -155,6 +155,7 @@ public:
irr
::
gui
::
IGUIWindow
*
wLanWindow
;
irr
::
gui
::
IGUIWindow
*
wLanWindow
;
irr
::
gui
::
IGUIEditBox
*
ebNickName
;
irr
::
gui
::
IGUIEditBox
*
ebNickName
;
irr
::
gui
::
IGUIListBox
*
lstHostList
;
irr
::
gui
::
IGUIListBox
*
lstHostList
;
irr
::
gui
::
IGUIButton
*
btnLanRefresh
;
irr
::
gui
::
IGUIEditBox
*
ebJoinIP
;
irr
::
gui
::
IGUIEditBox
*
ebJoinIP
;
irr
::
gui
::
IGUIEditBox
*
ebJoinPort
;
irr
::
gui
::
IGUIEditBox
*
ebJoinPort
;
irr
::
gui
::
IGUIEditBox
*
ebJoinPass
;
irr
::
gui
::
IGUIEditBox
*
ebJoinPass
;
...
@@ -335,6 +336,7 @@ extern Game* mainGame;
...
@@ -335,6 +336,7 @@ extern Game* mainGame;
#define BUTTON_CREATE_HOST 113
#define BUTTON_CREATE_HOST 113
#define BUTTON_HOST_CONFIRM 114
#define BUTTON_HOST_CONFIRM 114
#define BUTTON_HOST_CANCEL 115
#define BUTTON_HOST_CANCEL 115
#define BUTTON_LAN_REFRESH 116
#define BUTTON_HS_DUELIST 120
#define BUTTON_HS_DUELIST 120
#define BUTTON_HS_OBSERVER 121
#define BUTTON_HS_OBSERVER 121
#define BUTTON_HS_START 122
#define BUTTON_HS_START 122
...
...
gframe/menu_handler.cpp
View file @
2007e1b6
...
@@ -51,6 +51,9 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
...
@@ -51,6 +51,9 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame
->
HideElement
(
mainGame
->
wLanWindow
,
false
,
mainGame
->
wMainMenu
);
mainGame
->
HideElement
(
mainGame
->
wLanWindow
,
false
,
mainGame
->
wMainMenu
);
break
;
break
;
}
}
case
BUTTON_LAN_REFRESH
:
{
break
;
}
case
BUTTON_CREATE_HOST
:
{
case
BUTTON_CREATE_HOST
:
{
mainGame
->
btnHostConfirm
->
setEnabled
(
true
);
mainGame
->
btnHostConfirm
->
setEnabled
(
true
);
mainGame
->
btnHostCancel
->
setEnabled
(
true
);
mainGame
->
btnHostCancel
->
setEnabled
(
true
);
...
@@ -154,7 +157,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
...
@@ -154,7 +157,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame
->
wCardImg
->
setVisible
(
true
);
mainGame
->
wCardImg
->
setVisible
(
true
);
mainGame
->
wDeckEdit
->
setVisible
(
true
);
mainGame
->
wDeckEdit
->
setVisible
(
true
);
mainGame
->
wFilter
->
setVisible
(
true
);
mainGame
->
wFilter
->
setVisible
(
true
);
mainGame
->
deckBuilder
.
filterList
=
deckManager
.
_lfList
[
0
].
content
;
;
mainGame
->
deckBuilder
.
filterList
=
deckManager
.
_lfList
[
0
].
content
;
mainGame
->
cbDBLFList
->
setSelected
(
0
);
mainGame
->
cbDBLFList
->
setSelected
(
0
);
mainGame
->
cbCardType
->
setSelected
(
0
);
mainGame
->
cbCardType
->
setSelected
(
0
);
mainGame
->
cbCardType2
->
setSelected
(
0
);
mainGame
->
cbCardType2
->
setSelected
(
0
);
...
...
gframe/netserver.cpp
View file @
2007e1b6
...
@@ -3,7 +3,9 @@
...
@@ -3,7 +3,9 @@
namespace
ygo
{
namespace
ygo
{
std
::
unordered_map
<
bufferevent
*
,
DuelPlayer
>
NetServer
::
users
;
std
::
unordered_map
<
bufferevent
*
,
DuelPlayer
>
NetServer
::
users
;
unsigned
short
NetServer
::
server_port
=
0
;
event_base
*
NetServer
::
net_evbase
=
0
;
event_base
*
NetServer
::
net_evbase
=
0
;
event
*
NetServer
::
broadcast_ev
=
0
;
evconnlistener
*
NetServer
::
listener
=
0
;
evconnlistener
*
NetServer
::
listener
=
0
;
DuelMode
*
NetServer
::
duel_mode
=
0
;
DuelMode
*
NetServer
::
duel_mode
=
0
;
char
NetServer
::
net_server_read
[
0x2000
];
char
NetServer
::
net_server_read
[
0x2000
];
...
@@ -18,6 +20,7 @@ bool NetServer::StartServer(unsigned short port) {
...
@@ -18,6 +20,7 @@ bool NetServer::StartServer(unsigned short port) {
return
false
;
return
false
;
sockaddr_in
sin
;
sockaddr_in
sin
;
memset
(
&
sin
,
0
,
sizeof
(
sin
));
memset
(
&
sin
,
0
,
sizeof
(
sin
));
server_port
=
port
;
sin
.
sin_family
=
AF_INET
;
sin
.
sin_family
=
AF_INET
;
sin
.
sin_addr
.
s_addr
=
htonl
(
INADDR_ANY
);
sin
.
sin_addr
.
s_addr
=
htonl
(
INADDR_ANY
);
sin
.
sin_port
=
htons
(
port
);
sin
.
sin_port
=
htons
(
port
);
...
@@ -32,13 +35,57 @@ bool NetServer::StartServer(unsigned short port) {
...
@@ -32,13 +35,57 @@ bool NetServer::StartServer(unsigned short port) {
Thread
::
NewThread
(
ServerThread
,
net_evbase
);
Thread
::
NewThread
(
ServerThread
,
net_evbase
);
return
true
;
return
true
;
}
}
bool
NetServer
::
StartBroadcast
()
{
if
(
!
net_evbase
)
return
false
;
SOCKET
udp
=
socket
(
AF_INET
,
SOCK_DGRAM
,
0
);
BOOL
opt
=
TRUE
;
setsockopt
(
udp
,
SOL_SOCKET
,
SO_BROADCAST
,
(
const
char
*
)
&
opt
,
sizeof
(
BOOL
));
sockaddr_in
addr
;
memset
(
&
addr
,
0
,
sizeof
(
addr
));
addr
.
sin_family
=
AF_INET
;
addr
.
sin_port
=
htons
(
7920
);
addr
.
sin_addr
.
s_addr
=
0
;
if
(
bind
(
udp
,
(
sockaddr
*
)
&
addr
,
sizeof
(
addr
))
==
SOCKET_ERROR
)
{
closesocket
(
udp
);
return
false
;
}
broadcast_ev
=
event_new
(
net_evbase
,
udp
,
EV_READ
|
EV_PERSIST
,
BroadcastEvent
,
NULL
);
event_add
(
broadcast_ev
,
NULL
);
}
void
NetServer
::
StopServer
()
{
void
NetServer
::
StopServer
()
{
if
(
!
net_evbase
)
if
(
!
net_evbase
)
return
;
return
;
event_base_loopexit
(
net_evbase
,
0
);
event_base_loopexit
(
net_evbase
,
0
);
}
}
void
NetServer
::
StopBroadcast
()
{
if
(
!
net_evbase
||
!
broadcast_ev
)
return
;
event_del
(
broadcast_ev
);
evutil_socket_t
fd
;
event_get_assignment
(
broadcast_ev
,
0
,
&
fd
,
0
,
0
,
0
);
evutil_closesocket
(
fd
);
event_free
(
broadcast_ev
);
broadcast_ev
=
0
;
}
void
NetServer
::
StopListen
()
{
void
NetServer
::
StopListen
()
{
evconnlistener_disable
(
listener
);
evconnlistener_disable
(
listener
);
StopBroadcast
();
}
void
NetServer
::
BroadcastEvent
(
evutil_socket_t
fd
,
short
events
,
void
*
arg
)
{
sockaddr_in
bc_addr
;
int
sz
=
sizeof
(
sockaddr_in
);
char
buf
[
256
];
int
ret
=
recvfrom
(
fd
,
buf
,
256
,
0
,
(
sockaddr
*
)
&
bc_addr
,
&
sz
);
HostRequest
*
pHR
=
(
HostRequest
*
)
buf
;
if
(
pHR
->
identifier
==
NETWORK_CLIENT_ID
)
{
HostPacket
hp
;
hp
.
identifier
=
NETWORK_SERVER_ID
;
hp
.
port
=
server_port
;
hp
.
version
=
PRO_VERSION
;
hp
.
host
=
duel_mode
->
host_info
;
sendto
(
fd
,
(
const
char
*
)
&
hp
,
sizeof
(
HostPacket
),
0
,
(
sockaddr
*
)
&
bc_addr
,
sizeof
(
bc_addr
));
}
}
}
void
NetServer
::
ServerAccept
(
evconnlistener
*
listener
,
evutil_socket_t
fd
,
sockaddr
*
address
,
int
socklen
,
void
*
ctx
)
{
void
NetServer
::
ServerAccept
(
evconnlistener
*
listener
,
evutil_socket_t
fd
,
sockaddr
*
address
,
int
socklen
,
void
*
ctx
)
{
bufferevent
*
bev
=
bufferevent_socket_new
(
net_evbase
,
fd
,
BEV_OPT_CLOSE_ON_FREE
);
bufferevent
*
bev
=
bufferevent_socket_new
(
net_evbase
,
fd
,
BEV_OPT_CLOSE_ON_FREE
);
...
@@ -86,6 +133,13 @@ int NetServer::ServerThread(void* param) {
...
@@ -86,6 +133,13 @@ int NetServer::ServerThread(void* param) {
}
}
users
.
clear
();
users
.
clear
();
evconnlistener_free
(
listener
);
evconnlistener_free
(
listener
);
if
(
broadcast_ev
)
{
evutil_socket_t
fd
;
event_get_assignment
(
broadcast_ev
,
0
,
&
fd
,
0
,
0
,
0
);
evutil_closesocket
(
fd
);
event_free
(
broadcast_ev
);
broadcast_ev
=
0
;
}
event_base_free
(
net_evbase
);
event_base_free
(
net_evbase
);
listener
=
0
;
listener
=
0
;
net_evbase
=
0
;
net_evbase
=
0
;
...
@@ -165,6 +219,7 @@ void NetServer::HandleCTOSPacket(DuelPlayer* dp, char* data, unsigned int len) {
...
@@ -165,6 +219,7 @@ void NetServer::HandleCTOSPacket(DuelPlayer* dp, char* data, unsigned int len) {
BufferIO
::
CopyWStr
(
pkt
->
name
,
duel_mode
->
name
,
20
);
BufferIO
::
CopyWStr
(
pkt
->
name
,
duel_mode
->
name
,
20
);
BufferIO
::
CopyWStr
(
pkt
->
pass
,
duel_mode
->
pass
,
20
);
BufferIO
::
CopyWStr
(
pkt
->
pass
,
duel_mode
->
pass
,
20
);
duel_mode
->
JoinGame
(
dp
,
0
,
true
);
duel_mode
->
JoinGame
(
dp
,
0
,
true
);
StartBroadcast
();
break
;
break
;
}
}
case
CTOS_JOIN_GAME
:
{
case
CTOS_JOIN_GAME
:
{
...
...
gframe/netserver.h
View file @
2007e1b6
...
@@ -13,7 +13,9 @@ namespace ygo {
...
@@ -13,7 +13,9 @@ namespace ygo {
class
NetServer
{
class
NetServer
{
private:
private:
static
std
::
unordered_map
<
bufferevent
*
,
DuelPlayer
>
users
;
static
std
::
unordered_map
<
bufferevent
*
,
DuelPlayer
>
users
;
static
unsigned
short
server_port
;
static
event_base
*
net_evbase
;
static
event_base
*
net_evbase
;
static
event
*
broadcast_ev
;
static
evconnlistener
*
listener
;
static
evconnlistener
*
listener
;
static
DuelMode
*
duel_mode
;
static
DuelMode
*
duel_mode
;
static
char
net_server_read
[
0x2000
];
static
char
net_server_read
[
0x2000
];
...
@@ -21,8 +23,11 @@ private:
...
@@ -21,8 +23,11 @@ private:
static
unsigned
short
last_sent
;
static
unsigned
short
last_sent
;
public:
public:
static
bool
StartServer
(
unsigned
short
port
);
static
bool
StartServer
(
unsigned
short
port
);
static
bool
StartBroadcast
();
static
void
StopServer
();
static
void
StopServer
();
static
void
StopBroadcast
();
static
void
StopListen
();
static
void
StopListen
();
static
void
BroadcastEvent
(
evutil_socket_t
fd
,
short
events
,
void
*
arg
);
static
void
ServerAccept
(
evconnlistener
*
listener
,
evutil_socket_t
fd
,
sockaddr
*
address
,
int
socklen
,
void
*
ctx
);
static
void
ServerAccept
(
evconnlistener
*
listener
,
evutil_socket_t
fd
,
sockaddr
*
address
,
int
socklen
,
void
*
ctx
);
static
void
ServerAcceptError
(
evconnlistener
*
listener
,
void
*
ctx
);
static
void
ServerAcceptError
(
evconnlistener
*
listener
,
void
*
ctx
);
static
void
ServerEchoRead
(
bufferevent
*
bev
,
void
*
ctx
);
static
void
ServerEchoRead
(
bufferevent
*
bev
,
void
*
ctx
);
...
...
gframe/network.cpp
deleted
100644 → 0
View file @
feb083ea
#include "network.h"
namespace
ygo
{
/*
int NetManager::GetLocalAddress() {
char hname[256];
gethostname(hname, 256);
hostent* host = gethostbyname(hname);
if(!host)
return 0;
int i = 0;
for(i = 0; i < 8; ++i) {
local_addr[i] = 0;
if(host->h_addr_list[i] == 0)
break;
local_addr[i] = *(unsigned int*)host->h_addr_list[i];
}
return i;
}
int NetManager::BroadcastServer(void* np) {
NetManager* net = (NetManager*)np;
SOCKADDR_IN sockTo;
sockTo.sin_family = AF_INET;
sockTo.sin_port = htons(7912);
int recvLen = recvfrom(net->sBHost, (char*)&net->hReq, sizeof(HostRequest), 0, 0, 0);
while(recvLen != 0 && recvLen != SOCKET_ERROR) {
if(recvLen == sizeof(HostRequest) && net->hReq.identifier == NETWORK_CLIENT_ID) {
sockTo.sin_addr.s_addr = htonl(INADDR_BROADCAST);
sendto(net->sBHost, (const char*)&net->hInfo, sizeof(HostInfo), 0, (sockaddr*)&sockTo, sizeof(sockaddr));
}
recvLen = recvfrom(net->sBHost, (char*)&net->hReq, sizeof(HostRequest), 0, 0, 0);
}
net->is_creating_host = false;
shutdown(net->sBHost, SD_BOTH);
closesocket(net->sBHost);
return 0;
}
int NetManager::BroadcastClient(void* np) {
NetManager* net = (NetManager*)np;
SOCKADDR_IN sockTo;
sockTo.sin_addr.s_addr = htonl(INADDR_BROADCAST);
sockTo.sin_family = AF_INET;
sockTo.sin_port = htons(7913);
fd_set fds;
timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
FD_ZERO(&fds);
FD_SET(net->sBClient, &fds);
sendto(net->sBClient, (const char*)&net->hReq, sizeof(HostRequest), 0, (sockaddr*)&sockTo, sizeof(sockaddr));
mainGame->is_refreshing = true;
int result = select(0, &fds, 0, 0, &tv);
std::set<int> addrset;
net->hosts.clear();
SOCKADDR_IN sockFrom;
int sz = sizeof(SOCKADDR_IN);
if(mainGame->is_closing)
return 0;
wchar_t tbuf[256];
const wchar_t* mode;
std::vector<HostInfo>::iterator it;
mainGame->gMutex.Lock();
for(it = net->hosts.begin(); it != net->hosts.end(); ++it) {
if(!it->no_check_deck && !it->no_shuffle_deck && it->start_lp == 8000 && it->start_hand == 5 && it->draw_count == 1)
mode = L"标准设定";
else mode = L"自定义设定";
}
mainGame->gMutex.Unlock();
mainGame->is_refreshing = false;
closesocket(net->sBClient);
return 0;
}
*/
}
gframe/network.h
View file @
2007e1b6
...
@@ -25,7 +25,6 @@ struct HostInfo {
...
@@ -25,7 +25,6 @@ struct HostInfo {
struct
HostPacket
{
struct
HostPacket
{
unsigned
short
identifier
;
unsigned
short
identifier
;
unsigned
short
version
;
unsigned
short
version
;
unsigned
int
address
;
unsigned
short
port
;
unsigned
short
port
;
HostInfo
host
;
HostInfo
host
;
};
};
...
...
gframe/single_duel.cpp
View file @
2007e1b6
...
@@ -112,6 +112,7 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
...
@@ -112,6 +112,7 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
if
(
dp
==
host_player
)
{
if
(
dp
==
host_player
)
{
NetServer
::
StopServer
();
NetServer
::
StopServer
();
}
else
if
(
dp
->
type
==
NETPLAYER_TYPE_OBSERVER
)
{
}
else
if
(
dp
->
type
==
NETPLAYER_TYPE_OBSERVER
)
{
observers
.
erase
(
dp
);
if
(
!
pduel
)
{
if
(
!
pduel
)
{
STOC_HS_WatchChange
scwc
;
STOC_HS_WatchChange
scwc
;
scwc
.
watch_count
=
observers
.
size
();
scwc
.
watch_count
=
observers
.
size
();
...
@@ -369,7 +370,7 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
...
@@ -369,7 +370,7 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
startbuf
,
18
);
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
startbuf
,
18
);
startbuf
[
1
]
=
1
;
startbuf
[
1
]
=
1
;
NetServer
::
SendBufferToPlayer
(
players
[
1
],
STOC_GAME_MSG
,
startbuf
,
18
);
NetServer
::
SendBufferToPlayer
(
players
[
1
],
STOC_GAME_MSG
,
startbuf
,
18
);
if
(
swapped
)
if
(
!
swapped
)
startbuf
[
1
]
=
0x10
;
startbuf
[
1
]
=
0x10
;
else
startbuf
[
1
]
=
0x11
;
else
startbuf
[
1
]
=
0x11
;
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
...
@@ -1126,7 +1127,7 @@ void SingleDuel::WaitforResponse(int playerid) {
...
@@ -1126,7 +1127,7 @@ void SingleDuel::WaitforResponse(int playerid) {
last_response
=
playerid
;
last_response
=
playerid
;
players
[
playerid
]
->
state
=
CTOS_RESPONSE
;
players
[
playerid
]
->
state
=
CTOS_RESPONSE
;
unsigned
char
msg
=
MSG_WAITING
;
unsigned
char
msg
=
MSG_WAITING
;
NetServer
::
SendPacketToPlayer
(
players
[
1
-
playerid
],
STOC_GAME_MSG
,
msg
);
NetServer
::
SendPacketToPlayer
(
players
[
1
-
playerid
],
STOC_GAME_MSG
,
msg
);
}
}
void
SingleDuel
::
RefreshMzone
(
int
player
,
int
flag
,
int
use_cache
)
{
void
SingleDuel
::
RefreshMzone
(
int
player
,
int
flag
,
int
use_cache
)
{
char
query_buffer
[
0x1000
];
char
query_buffer
[
0x1000
];
...
...
script/c23274061.lua
View file @
2007e1b6
...
@@ -9,9 +9,8 @@ function c23274061.initial_effect(c)
...
@@ -9,9 +9,8 @@ function c23274061.initial_effect(c)
--Disable
--Disable
local
e2
=
Effect
.
CreateEffect
(
c
)
local
e2
=
Effect
.
CreateEffect
(
c
)
e2
:
SetDescription
(
aux
.
Stringid
(
23274061
,
0
))
e2
:
SetDescription
(
aux
.
Stringid
(
23274061
,
0
))
e2
:
SetType
(
EFFECT_TYPE_
FIELD
+
EFFECT_TYPE_TRIGGER_F
)
e2
:
SetType
(
EFFECT_TYPE_
SINGLE
+
EFFECT_TYPE_TRIGGER_F
)
e2
:
SetCode
(
EVENT_BATTLE_END
)
e2
:
SetCode
(
EVENT_BATTLE_END
)
e2
:
SetRange
(
LOCATION_MZONE
)
e2
:
SetCondition
(
c23274061
.
condition
)
e2
:
SetCondition
(
c23274061
.
condition
)
e2
:
SetOperation
(
c23274061
.
operation
)
e2
:
SetOperation
(
c23274061
.
operation
)
c
:
RegisterEffect
(
e2
)
c
:
RegisterEffect
(
e2
)
...
...
script/c38495396.lua
View file @
2007e1b6
...
@@ -34,7 +34,7 @@ function c38495396.xyzcon(e,c)
...
@@ -34,7 +34,7 @@ function c38495396.xyzcon(e,c)
if
c
==
nil
then
return
true
end
if
c
==
nil
then
return
true
end
if
Duel
.
IsExistingMatchingCard
(
c38495396
.
ovfilter
,
c
:
GetControler
(),
LOCATION_MZONE
,
0
,
1
,
nil
)
then
return
true
end
if
Duel
.
IsExistingMatchingCard
(
c38495396
.
ovfilter
,
c
:
GetControler
(),
LOCATION_MZONE
,
0
,
1
,
nil
)
then
return
true
end
local
g
=
Duel
.
GetXyzMaterial
(
c
)
local
g
=
Duel
.
GetXyzMaterial
(
c
)
return
g
:
IsExists
(
c38495396
.
xyzfilter
,
3
,
nil
)
return
g
:
IsExists
(
c38495396
.
xyzfilter
,
2
,
nil
)
end
end
function
c38495396
.
xyzop
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
c
)
function
c38495396
.
xyzop
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
c
)
local
g
=
Duel
.
GetXyzMaterial
(
c
)
local
g
=
Duel
.
GetXyzMaterial
(
c
)
...
...
script/c4335427.lua
View file @
2007e1b6
...
@@ -12,7 +12,7 @@ function c4335427.initial_effect(c)
...
@@ -12,7 +12,7 @@ function c4335427.initial_effect(c)
c
:
RegisterEffect
(
e1
)
c
:
RegisterEffect
(
e1
)
local
e2
=
Effect
.
CreateEffect
(
c
)
local
e2
=
Effect
.
CreateEffect
(
c
)
e2
:
SetType
(
EFFECT_TYPE_SINGLE
)
e2
:
SetType
(
EFFECT_TYPE_SINGLE
)
e2
:
SetCode
(
EFFECT_CANNOT_DISABLE_SUMMON
)
e2
:
SetCode
(
EFFECT_CANNOT_DISABLE_S
PS
UMMON
)
e2
:
SetProperty
(
EFFECT_FLAG_CANNOT_DISABLE
+
EFFECT_FLAG_UNCOPYABLE
)
e2
:
SetProperty
(
EFFECT_FLAG_CANNOT_DISABLE
+
EFFECT_FLAG_UNCOPYABLE
)
c
:
RegisterEffect
(
e2
)
c
:
RegisterEffect
(
e2
)
--cannot special summon
--cannot special summon
...
...
script/c4466015.lua
View file @
2007e1b6
...
@@ -15,10 +15,10 @@ function c4466015.filter(c)
...
@@ -15,10 +15,10 @@ function c4466015.filter(c)
return
c
:
GetCounter
(
0x9
)
>
0
return
c
:
GetCounter
(
0x9
)
>
0
end
end
function
c4466015
.
target
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
chk
,
chkc
)
function
c4466015
.
target
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
chk
,
chkc
)
if
chkc
then
return
chkc
:
Is
Controler
(
1
-
tp
)
and
chkc
:
Is
Location
(
LOCAITON_MZONE
)
and
c4466015
.
filter
(
chkc
)
end
if
chkc
then
return
chkc
:
IsLocation
(
LOCAITON_MZONE
)
and
c4466015
.
filter
(
chkc
)
end
if
chk
==
0
then
return
Duel
.
IsExistingTarget
(
c4466015
.
filter
,
tp
,
0
,
LOCATION_MZONE
,
1
,
nil
)
end
if
chk
==
0
then
return
Duel
.
IsExistingTarget
(
c4466015
.
filter
,
tp
,
LOCATION_MZONE
,
LOCATION_MZONE
,
1
,
nil
)
end
Duel
.
Hint
(
HINT_SELECTMSG
,
tp
,
HINTMSG_FACEUP
)
Duel
.
Hint
(
HINT_SELECTMSG
,
tp
,
HINTMSG_FACEUP
)
local
g
=
Duel
.
SelectTarget
(
tp
,
c4466015
.
filter
,
tp
,
0
,
LOCATION_MZONE
,
1
,
1
,
nil
)
local
g
=
Duel
.
SelectTarget
(
tp
,
c4466015
.
filter
,
tp
,
LOCATION_MZONE
,
LOCATION_MZONE
,
1
,
1
,
nil
)
Duel
.
SetOperationInfo
(
0
,
CATEGORY_DAMAGE
,
nil
,
0
,
1
-
tp
,
g
:
GetFirst
():
GetCounter
(
0x9
)
*
700
)
Duel
.
SetOperationInfo
(
0
,
CATEGORY_DAMAGE
,
nil
,
0
,
1
-
tp
,
g
:
GetFirst
():
GetCounter
(
0x9
)
*
700
)
end
end
function
c4466015
.
activate
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
)
function
c4466015
.
activate
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
)
...
...
script/c5284653.lua
View file @
2007e1b6
...
@@ -3,9 +3,8 @@ function c5284653.initial_effect(c)
...
@@ -3,9 +3,8 @@ function c5284653.initial_effect(c)
--Disable
--Disable
local
e1
=
Effect
.
CreateEffect
(
c
)
local
e1
=
Effect
.
CreateEffect
(
c
)
e1
:
SetDescription
(
aux
.
Stringid
(
5284653
,
0
))
e1
:
SetDescription
(
aux
.
Stringid
(
5284653
,
0
))
e1
:
SetType
(
EFFECT_TYPE_
FIELD
+
EFFECT_TYPE_TRIGGER_F
)
e1
:
SetType
(
EFFECT_TYPE_
SINGLE
+
EFFECT_TYPE_TRIGGER_F
)
e1
:
SetCode
(
EVENT_BATTLE_END
)
e1
:
SetCode
(
EVENT_BATTLE_END
)
e1
:
SetRange
(
LOCATION_MZONE
)
e1
:
SetCondition
(
c5284653
.
condition
)
e1
:
SetCondition
(
c5284653
.
condition
)
e1
:
SetOperation
(
c5284653
.
operation
)
e1
:
SetOperation
(
c5284653
.
operation
)
c
:
RegisterEffect
(
e1
)
c
:
RegisterEffect
(
e1
)
...
...
script/c76650663.lua
View file @
2007e1b6
...
@@ -14,10 +14,11 @@ function c76650663.condition(e,tp,eg,ep,ev,re,r,rp)
...
@@ -14,10 +14,11 @@ function c76650663.condition(e,tp,eg,ep,ev,re,r,rp)
local
a
=
Duel
.
GetAttacker
()
local
a
=
Duel
.
GetAttacker
()
if
a
==
c
then
a
=
Duel
.
GetAttackTarget
()
end
if
a
==
c
then
a
=
Duel
.
GetAttackTarget
()
end
e
:
SetLabelObject
(
a
)
e
:
SetLabelObject
(
a
)
return
a
and
a
:
IsAttribute
(
ATTRIBUTE_LIGHT
)
return
a
and
a
:
IsAttribute
(
ATTRIBUTE_LIGHT
)
and
a
:
IsRelateToBattle
()
end
end
function
c76650663
.
operation
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
)
function
c76650663
.
operation
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
)
local
tc
=
e
:
GetLabelObject
()
local
tc
=
e
:
GetLabelObject
()
if
tc
:
IsFacedown
()
or
not
tc
:
IsRelateToBattle
()
then
return
end
local
e1
=
Effect
.
CreateEffect
(
e
:
GetHandler
())
local
e1
=
Effect
.
CreateEffect
(
e
:
GetHandler
())
e1
:
SetType
(
EFFECT_TYPE_SINGLE
)
e1
:
SetType
(
EFFECT_TYPE_SINGLE
)
e1
:
SetCode
(
EFFECT_DISABLE
)
e1
:
SetCode
(
EFFECT_DISABLE
)
...
...
strings.conf
View file @
2007e1b6
...
@@ -213,6 +213,7 @@
...
@@ -213,6 +213,7 @@
!
system
1214
否
!
system
1214
否
!
system
1215
开始
!
system
1215
开始
!
system
1216
消息
!
system
1216
消息
!
system
1217
刷新
!
system
1220
昵称:
!
system
1220
昵称:
!
system
1221
主机信息:
!
system
1221
主机信息:
!
system
1222
主机密码:
!
system
1222
主机密码:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment