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
bafac0e1
Commit
bafac0e1
authored
Feb 09, 2018
by
edo9300
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updated replay mode to support relay duel
parent
858ab88e
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
93 additions
and
51 deletions
+93
-51
gframe/duelclient.cpp
gframe/duelclient.cpp
+3
-8
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+8
-2
gframe/old_replay_mode.cpp
gframe/old_replay_mode.cpp
+10
-3
gframe/relay_duel.cpp
gframe/relay_duel.cpp
+59
-34
gframe/relay_duel.h
gframe/relay_duel.h
+1
-0
gframe/replay.cpp
gframe/replay.cpp
+1
-1
gframe/replay.h
gframe/replay.h
+1
-0
gframe/replay_mode.cpp
gframe/replay_mode.cpp
+10
-3
No files found.
gframe/duelclient.cpp
View file @
bafac0e1
...
@@ -416,6 +416,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
...
@@ -416,6 +416,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame
->
deckBuilder
.
pre_extrac
=
deckManager
.
current_deck
.
extra
.
size
();
mainGame
->
deckBuilder
.
pre_extrac
=
deckManager
.
current_deck
.
extra
.
size
();
mainGame
->
deckBuilder
.
pre_sidec
=
deckManager
.
current_deck
.
side
.
size
();
mainGame
->
deckBuilder
.
pre_sidec
=
deckManager
.
current_deck
.
side
.
size
();
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
deckBuilder
);
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
deckBuilder
);
mainGame
->
dInfo
.
isFirst
=
mainGame
->
dInfo
.
player_type
==
0
;
mainGame
->
gMutex
.
Unlock
();
mainGame
->
gMutex
.
Unlock
();
break
;
break
;
}
}
...
@@ -3807,13 +3808,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -3807,13 +3808,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
return
true
;
return
true
;
}
}
case
MSG_TAG_SWAP
:
{
case
MSG_TAG_SWAP
:
{
int
player
=
BufferIO
::
ReadInt8
(
pbuf
);
int
player
=
mainGame
->
LocalPlayer
(
BufferIO
::
ReadInt8
(
pbuf
));
int
newp
=
0
;
if
(
mainGame
->
dInfo
.
isRelay
)
{
newp
=
player
>>
4
;
player
=
mainGame
->
LocalPlayer
(
player
&
0xf
);
}
else
player
=
mainGame
->
LocalPlayer
(
player
);
size_t
mcount
=
(
size_t
)
BufferIO
::
ReadInt8
(
pbuf
);
size_t
mcount
=
(
size_t
)
BufferIO
::
ReadInt8
(
pbuf
);
size_t
ecount
=
(
size_t
)
BufferIO
::
ReadInt8
(
pbuf
);
size_t
ecount
=
(
size_t
)
BufferIO
::
ReadInt8
(
pbuf
);
size_t
pcount
=
(
size_t
)
BufferIO
::
ReadInt8
(
pbuf
);
size_t
pcount
=
(
size_t
)
BufferIO
::
ReadInt8
(
pbuf
);
...
@@ -3924,7 +3919,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -3924,7 +3919,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame
->
WaitFrameSignal
(
5
);
mainGame
->
WaitFrameSignal
(
5
);
}
}
if
(
mainGame
->
dInfo
.
isRelay
)
if
(
mainGame
->
dInfo
.
isRelay
)
mainGame
->
dInfo
.
current_player
[
player
]
=
newp
;
mainGame
->
dInfo
.
current_player
[
player
]
++
;
break
;
break
;
}
}
case
MSG_RELOAD_FIELD
:
{
case
MSG_RELOAD_FIELD
:
{
...
...
gframe/menu_handler.cpp
View file @
bafac0e1
...
@@ -387,15 +387,21 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
...
@@ -387,15 +387,21 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
tm
*
st
=
localtime
(
&
curtime
);
tm
*
st
=
localtime
(
&
curtime
);
myswprintf
(
infobuf
,
L"%d/%d/%d %02d:%02d:%02d
\n
"
,
st
->
tm_year
+
1900
,
st
->
tm_mon
+
1
,
st
->
tm_mday
,
st
->
tm_hour
,
st
->
tm_min
,
st
->
tm_sec
);
myswprintf
(
infobuf
,
L"%d/%d/%d %02d:%02d:%02d
\n
"
,
st
->
tm_year
+
1900
,
st
->
tm_mon
+
1
,
st
->
tm_mday
,
st
->
tm_hour
,
st
->
tm_min
,
st
->
tm_sec
);
repinfo
.
append
(
infobuf
);
repinfo
.
append
(
infobuf
);
wchar_t
namebuf
[
4
][
20
];
wchar_t
namebuf
[
6
][
20
];
ReplayMode
::
cur_replay
.
ReadName
(
namebuf
[
0
]);
ReplayMode
::
cur_replay
.
ReadName
(
namebuf
[
0
]);
ReplayMode
::
cur_replay
.
ReadName
(
namebuf
[
1
]);
ReplayMode
::
cur_replay
.
ReadName
(
namebuf
[
1
]);
if
(
ReplayMode
::
cur_replay
.
pheader
.
flag
&
REPLAY_TAG
)
{
if
(
ReplayMode
::
cur_replay
.
pheader
.
flag
&
(
REPLAY_TAG
+
REPLAY_RELAY
)
)
{
ReplayMode
::
cur_replay
.
ReadName
(
namebuf
[
2
]);
ReplayMode
::
cur_replay
.
ReadName
(
namebuf
[
2
]);
ReplayMode
::
cur_replay
.
ReadName
(
namebuf
[
3
]);
ReplayMode
::
cur_replay
.
ReadName
(
namebuf
[
3
]);
}
}
if
(
ReplayMode
::
cur_replay
.
pheader
.
flag
&
REPLAY_RELAY
)
{
ReplayMode
::
cur_replay
.
ReadName
(
namebuf
[
4
]);
ReplayMode
::
cur_replay
.
ReadName
(
namebuf
[
5
]);
}
if
(
ReplayMode
::
cur_replay
.
pheader
.
flag
&
REPLAY_TAG
)
if
(
ReplayMode
::
cur_replay
.
pheader
.
flag
&
REPLAY_TAG
)
myswprintf
(
infobuf
,
L"%ls
\n
%ls
\n
===VS===
\n
%ls
\n
%ls
\n
"
,
namebuf
[
0
],
namebuf
[
1
],
namebuf
[
2
],
namebuf
[
3
]);
myswprintf
(
infobuf
,
L"%ls
\n
%ls
\n
===VS===
\n
%ls
\n
%ls
\n
"
,
namebuf
[
0
],
namebuf
[
1
],
namebuf
[
2
],
namebuf
[
3
]);
else
if
(
ReplayMode
::
cur_replay
.
pheader
.
flag
&
REPLAY_RELAY
)
myswprintf
(
infobuf
,
L"%ls
\n
%ls
\n
%ls
\n
===VS===
\n
%ls
\n
%ls
\n
%ls
\n
"
,
namebuf
[
0
],
namebuf
[
1
],
namebuf
[
2
],
namebuf
[
3
],
namebuf
[
4
],
namebuf
[
5
]);
else
else
myswprintf
(
infobuf
,
L"%ls
\n
===VS===
\n
%ls
\n
"
,
namebuf
[
0
],
namebuf
[
1
]);
myswprintf
(
infobuf
,
L"%ls
\n
===VS===
\n
%ls
\n
"
,
namebuf
[
0
],
namebuf
[
1
]);
repinfo
.
append
(
infobuf
);
repinfo
.
append
(
infobuf
);
...
...
gframe/old_replay_mode.cpp
View file @
bafac0e1
...
@@ -18,6 +18,7 @@ namespace ygo {
...
@@ -18,6 +18,7 @@ namespace ygo {
const
ReplayHeader
&
rh
=
cur_replay
.
pheader
;
const
ReplayHeader
&
rh
=
cur_replay
.
pheader
;
mainGame
->
dInfo
.
isFirst
=
true
;
mainGame
->
dInfo
.
isFirst
=
true
;
mainGame
->
dInfo
.
isTag
=
!!
(
rh
.
flag
&
REPLAY_TAG
);
mainGame
->
dInfo
.
isTag
=
!!
(
rh
.
flag
&
REPLAY_TAG
);
mainGame
->
dInfo
.
isRelay
=
!!
(
rh
.
flag
&
REPLAY_RELAY
);
mainGame
->
dInfo
.
isSingleMode
=
!!
(
rh
.
flag
&
REPLAY_SINGLE_MODE
);
mainGame
->
dInfo
.
isSingleMode
=
!!
(
rh
.
flag
&
REPLAY_SINGLE_MODE
);
mainGame
->
dInfo
.
lua64
=
true
;
mainGame
->
dInfo
.
lua64
=
true
;
mainGame
->
dInfo
.
current_player
[
0
]
=
0
;
mainGame
->
dInfo
.
current_player
[
0
]
=
0
;
...
@@ -105,13 +106,19 @@ namespace ygo {
...
@@ -105,13 +106,19 @@ namespace ygo {
mtrandom
rnd
;
mtrandom
rnd
;
int
seed
=
rh
.
seed
;
int
seed
=
rh
.
seed
;
rnd
.
reset
(
seed
);
rnd
.
reset
(
seed
);
if
(
mainGame
->
dInfo
.
isTag
)
{
if
(
mainGame
->
dInfo
.
isRelay
)
{
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
1
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
2
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
1
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
2
]);
}
else
if
(
mainGame
->
dInfo
.
isTag
)
{
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
1
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
1
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
1
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
1
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
0
]);
}
}
else
{
else
{
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
0
]);
}
}
...
...
gframe/relay_duel.cpp
View file @
bafac0e1
...
@@ -16,7 +16,9 @@ RelayDuel::RelayDuel() {
...
@@ -16,7 +16,9 @@ RelayDuel::RelayDuel() {
for
(
int
i
=
0
;
i
<
6
;
i
++
)
for
(
int
i
=
0
;
i
<
6
;
i
++
)
players
[
i
]
=
duelist
();
players
[
i
]
=
duelist
();
startp
[
0
]
=
0
;
startp
[
0
]
=
0
;
endp
[
0
]
=
3
;
startp
[
1
]
=
3
;
startp
[
1
]
=
3
;
endp
[
1
]
=
6
;
}
}
RelayDuel
::~
RelayDuel
()
{
RelayDuel
::~
RelayDuel
()
{
}
}
...
@@ -269,6 +271,46 @@ void RelayDuel::StartDuel(DuelPlayer* dp) {
...
@@ -269,6 +271,46 @@ void RelayDuel::StartDuel(DuelPlayer* dp) {
if
(
!
((
players
[
0
].
ready
||
players
[
1
].
ready
||
players
[
2
].
ready
)
&&
if
(
!
((
players
[
0
].
ready
||
players
[
1
].
ready
||
players
[
2
].
ready
)
&&
(
players
[
3
].
ready
||
players
[
4
].
ready
||
players
[
5
].
ready
)))
(
players
[
3
].
ready
||
players
[
4
].
ready
||
players
[
5
].
ready
)))
return
;
return
;
for
(
int
i
=
0
;
i
<
3
;
i
++
)
if
(
!
players
[
i
].
player
)
{
endp
[
0
]
--
;
for
(
int
j
=
i
+
1
;
j
<
3
;
j
++
)
if
(
players
[
j
].
player
)
{
STOC_HS_PlayerChange
scpc
;
scpc
.
status
=
(
j
<<
4
)
|
i
;
for
(
int
k
=
0
;
k
<
6
;
k
++
)
if
(
players
[
k
].
player
)
NetServer
::
SendPacketToPlayer
(
players
[
k
].
player
,
STOC_HS_PLAYER_CHANGE
,
scpc
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_HS_PLAYER_CHANGE
,
scpc
);
STOC_TypeChange
sctc
;
sctc
.
type
=
(
players
[
j
].
player
==
host_player
?
0x10
:
0
)
|
i
;
NetServer
::
SendPacketToPlayer
(
players
[
j
].
player
,
STOC_TYPE_CHANGE
,
sctc
);
players
[
i
]
=
players
[
j
];
players
[
j
]
=
duelist
();
players
[
i
].
player
->
type
=
i
;
}
}
for
(
int
i
=
3
;
i
<
6
;
i
++
)
if
(
!
players
[
i
].
player
)
{
endp
[
1
]
--
;
for
(
int
j
=
i
+
1
;
j
<
6
;
j
++
)
if
(
players
[
j
].
player
)
{
STOC_HS_PlayerChange
scpc
;
scpc
.
status
=
(
j
<<
4
)
|
i
;
for
(
int
k
=
0
;
k
<
6
;
k
++
)
if
(
players
[
k
].
player
)
NetServer
::
SendPacketToPlayer
(
players
[
k
].
player
,
STOC_HS_PLAYER_CHANGE
,
scpc
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_HS_PLAYER_CHANGE
,
scpc
);
STOC_TypeChange
sctc
;
sctc
.
type
=
(
players
[
j
].
player
==
host_player
?
0x10
:
0
)
|
i
;
NetServer
::
SendPacketToPlayer
(
players
[
j
].
player
,
STOC_TYPE_CHANGE
,
sctc
);
players
[
i
]
=
players
[
j
];
players
[
j
]
=
duelist
();
players
[
i
].
player
->
type
=
i
;
}
}
NetServer
::
StopListen
();
NetServer
::
StopListen
();
game_started
=
true
;
game_started
=
true
;
//NetServer::StopBroadcast();
//NetServer::StopBroadcast();
...
@@ -279,12 +321,6 @@ void RelayDuel::StartDuel(DuelPlayer* dp) {
...
@@ -279,12 +321,6 @@ void RelayDuel::StartDuel(DuelPlayer* dp) {
(
*
oit
)
->
state
=
CTOS_LEAVE_GAME
;
(
*
oit
)
->
state
=
CTOS_LEAVE_GAME
;
NetServer
::
ReSendToPlayer
(
*
oit
);
NetServer
::
ReSendToPlayer
(
*
oit
);
}
}
for
(
startp
[
0
]
=
0
;
startp
[
0
]
<
3
;
startp
[
0
]
++
)
if
(
players
[
startp
[
0
]].
player
)
break
;
for
(
startp
[
1
]
=
3
;
startp
[
1
]
<
5
;
startp
[
1
]
++
)
if
(
players
[
startp
[
1
]].
player
)
break
;
NetServer
::
SendPacketToPlayer
(
players
[
startp
[
0
]].
player
,
STOC_SELECT_HAND
);
NetServer
::
SendPacketToPlayer
(
players
[
startp
[
0
]].
player
,
STOC_SELECT_HAND
);
NetServer
::
ReSendToPlayer
(
players
[
startp
[
1
]].
player
);
NetServer
::
ReSendToPlayer
(
players
[
startp
[
1
]].
player
);
hand_result
[
0
]
=
0
;
hand_result
[
0
]
=
0
;
...
@@ -346,10 +382,6 @@ void RelayDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
...
@@ -346,10 +382,6 @@ void RelayDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
if
(
players
[
i
].
player
)
if
(
players
[
i
].
player
)
players
[
i
].
player
->
type
=
i
;
players
[
i
].
player
->
type
=
i
;
swapped
=
true
;
swapped
=
true
;
int
starttmp0
=
startp
[
1
]
-
3
;
int
starttmp1
=
startp
[
0
]
+
3
;
startp
[
0
]
=
starttmp0
;
startp
[
1
]
=
starttmp1
;
}
}
turn_count
=
0
;
turn_count
=
0
;
cur_player
[
0
]
=
players
[
startp
[
0
]].
player
;
cur_player
[
0
]
=
players
[
startp
[
0
]].
player
;
...
@@ -358,7 +390,7 @@ void RelayDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
...
@@ -358,7 +390,7 @@ void RelayDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
ReplayHeader
rh
;
ReplayHeader
rh
;
rh
.
id
=
0x31707279
;
rh
.
id
=
0x31707279
;
rh
.
version
=
PRO_VERSION
;
rh
.
version
=
PRO_VERSION
;
rh
.
flag
=
REPLAY_
TAG
+
REPLAY_LUA64
;
rh
.
flag
=
REPLAY_
RELAY
+
REPLAY_LUA64
;
time_t
seed
=
time
(
0
);
time_t
seed
=
time
(
0
);
rh
.
seed
=
seed
;
rh
.
seed
=
seed
;
last_replay
.
BeginRecord
(
false
);
last_replay
.
BeginRecord
(
false
);
...
@@ -369,10 +401,15 @@ void RelayDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
...
@@ -369,10 +401,15 @@ void RelayDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
rh
.
id
=
0x58707279
;
rh
.
id
=
0x58707279
;
rh
.
flag
|=
REPLAY_NEWREPLAY
;
rh
.
flag
|=
REPLAY_NEWREPLAY
;
new_replay
.
WriteHeader
(
rh
);
new_replay
.
WriteHeader
(
rh
);
unsigned
short
tmp
[
20
];
BufferIO
::
CopyWStr
(
L""
,
tmp
,
20
);
for
(
int
i
=
0
;
i
<
6
;
i
++
)
for
(
int
i
=
0
;
i
<
6
;
i
++
)
if
(
players
[
i
].
player
->
name
)
{
if
(
players
[
i
].
player
)
{
last_replay
.
WriteData
(
players
[
i
].
player
->
name
,
40
,
false
);
last_replay
.
WriteData
(
players
[
i
].
player
->
name
,
40
,
false
);
new_replay
.
WriteData
(
players
[
i
].
player
->
name
,
40
,
false
);
new_replay
.
WriteData
(
players
[
i
].
player
->
name
,
40
,
false
);
}
else
{
last_replay
.
WriteData
(
tmp
,
40
,
false
);
new_replay
.
WriteData
(
tmp
,
40
,
false
);
}
}
replay_stream
.
clear
();
replay_stream
.
clear
();
if
(
!
host_info
.
no_shuffle_deck
)
{
if
(
!
host_info
.
no_shuffle_deck
)
{
...
@@ -1494,22 +1531,12 @@ int RelayDuel::Analyze(char* msgbuffer, unsigned int len) {
...
@@ -1494,22 +1531,12 @@ int RelayDuel::Analyze(char* msgbuffer, unsigned int len) {
break
;
break
;
}
}
case
MSG_TAG_SWAP
:
{
case
MSG_TAG_SWAP
:
{
pbufw
=
pbuf
;
player
=
BufferIO
::
ReadInt8
(
pbuf
);
player
=
BufferIO
::
ReadInt8
(
pbuf
);
int
newp
=
0
;
for
(
int
i
=
startp
[
player
];
i
<
(
player
==
0
)
?
3
:
6
;
i
++
)
if
(
players
[
i
].
player
==
cur_player
[
player
])
{
for
(
newp
=
i
+
1
;
newp
<
(
player
==
0
)
?
3
:
6
;
newp
++
)
if
(
players
[
newp
].
player
)
break
;
break
;
}
BufferIO
::
WriteInt8
(
pbufw
,
player
+
(
newp
<<
4
));
/*int mcount = */
BufferIO
::
ReadInt8
(
pbuf
);
/*int mcount = */
BufferIO
::
ReadInt8
(
pbuf
);
int
ecount
=
BufferIO
::
ReadInt8
(
pbuf
);
int
ecount
=
BufferIO
::
ReadInt8
(
pbuf
);
/*int pcount = */
BufferIO
::
ReadInt8
(
pbuf
);
/*int pcount = */
BufferIO
::
ReadInt8
(
pbuf
);
int
hcount
=
BufferIO
::
ReadInt8
(
pbuf
);
int
hcount
=
BufferIO
::
ReadInt8
(
pbuf
);
pbufw
+=
4
;
pbufw
=
pbuf
+
4
;
pbuf
+=
hcount
*
4
+
ecount
*
4
+
4
;
pbuf
+=
hcount
*
4
+
ecount
*
4
+
4
;
for
(
int
p
=
player
*
3
,
i
=
0
;
i
<
3
;
i
++
,
p
++
)
for
(
int
p
=
player
*
3
,
i
=
0
;
i
<
3
;
i
++
,
p
++
)
if
(
players
[
p
].
player
)
if
(
players
[
p
].
player
)
...
@@ -1531,16 +1558,15 @@ int RelayDuel::Analyze(char* msgbuffer, unsigned int len) {
...
@@ -1531,16 +1558,15 @@ int RelayDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer
::
SendBufferToPlayer
(
players
[
p
].
player
,
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
SendBufferToPlayer
(
players
[
p
].
player
,
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
NetServer
::
ReSendToPlayer
(
*
oit
);
for
(
int
i
=
startp
[
player
];
i
<
(
player
==
0
)
?
3
:
6
;
i
++
)
for
(
int
i
=
startp
[
player
];
i
<
endp
[
player
]
;
i
++
)
if
(
players
[
i
].
player
==
cur_player
[
player
])
{
if
(
players
[
i
].
player
==
cur_player
[
player
])
{
for
(
int
j
=
i
+
1
;
j
<
(
player
==
0
)
?
3
:
6
;
j
++
)
for
(
int
j
=
i
+
1
;
j
<
endp
[
player
]
;
j
++
)
if
(
players
[
j
].
player
)
{
if
(
players
[
j
].
player
)
{
cur_player
[
player
]
=
players
[
j
].
player
;
cur_player
[
player
]
=
players
[
j
].
player
;
break
;
break
;
}
}
break
;
break
;
}
}
cur_player
[
player
]
=
players
[
newp
].
player
;
PseudoRefreshDeck
(
player
);
PseudoRefreshDeck
(
player
);
RefreshExtra
(
player
);
RefreshExtra
(
player
);
RefreshMzone
(
0
,
0x81fff
,
0
);
RefreshMzone
(
0
,
0x81fff
,
0
);
...
@@ -1655,7 +1681,7 @@ void RelayDuel::RefreshMzone(int player, int flag, int use_cache) {
...
@@ -1655,7 +1681,7 @@ void RelayDuel::RefreshMzone(int player, int flag, int use_cache) {
NetServer
::
SendBufferToPlayer
(
players
[
pid
].
player
,
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
NetServer
::
SendBufferToPlayer
(
players
[
pid
].
player
,
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
ReplayPacket
p
((
char
*
)
query_buffer
,
len
+
2
);
ReplayPacket
p
((
char
*
)
query_buffer
,
len
+
2
);
replay_stream
.
push_back
(
p
);
replay_stream
.
push_back
(
p
);
for
(
int
i
=
pid
+
1
;
i
<
player
*
3
+
3
;
i
++
)
for
(
int
i
=
pid
+
1
;
i
<
endp
[
player
]
;
i
++
)
if
(
players
[
i
].
player
)
if
(
players
[
i
].
player
)
NetServer
::
ReSendToPlayer
(
players
[
i
].
player
);
NetServer
::
ReSendToPlayer
(
players
[
i
].
player
);
int
qlen
=
0
;
int
qlen
=
0
;
...
@@ -1670,7 +1696,7 @@ void RelayDuel::RefreshMzone(int player, int flag, int use_cache) {
...
@@ -1670,7 +1696,7 @@ void RelayDuel::RefreshMzone(int player, int flag, int use_cache) {
}
}
pid
=
startp
[
1
-
player
];
pid
=
startp
[
1
-
player
];
NetServer
::
SendBufferToPlayer
(
players
[
pid
].
player
,
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
NetServer
::
SendBufferToPlayer
(
players
[
pid
].
player
,
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
for
(
int
i
=
pid
+
1
;
i
<
(
1
-
player
)
*
3
+
3
;
i
++
)
for
(
int
i
=
pid
+
1
;
i
<
endp
[
1
-
player
]
;
i
++
)
if
(
players
[
i
].
player
)
if
(
players
[
i
].
player
)
NetServer
::
ReSendToPlayer
(
players
[
i
].
player
);
NetServer
::
ReSendToPlayer
(
players
[
i
].
player
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
...
@@ -1687,7 +1713,7 @@ void RelayDuel::RefreshSzone(int player, int flag, int use_cache) {
...
@@ -1687,7 +1713,7 @@ void RelayDuel::RefreshSzone(int player, int flag, int use_cache) {
NetServer
::
SendBufferToPlayer
(
players
[
pid
].
player
,
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
NetServer
::
SendBufferToPlayer
(
players
[
pid
].
player
,
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
ReplayPacket
p
((
char
*
)
query_buffer
,
len
+
2
);
ReplayPacket
p
((
char
*
)
query_buffer
,
len
+
2
);
replay_stream
.
push_back
(
p
);
replay_stream
.
push_back
(
p
);
for
(
int
i
=
pid
+
1
;
i
<
player
*
3
+
3
;
i
++
)
for
(
int
i
=
pid
+
1
;
i
<
endp
[
player
]
;
i
++
)
if
(
players
[
i
].
player
)
if
(
players
[
i
].
player
)
NetServer
::
ReSendToPlayer
(
players
[
i
].
player
);
NetServer
::
ReSendToPlayer
(
players
[
i
].
player
);
int
qlen
=
0
;
int
qlen
=
0
;
...
@@ -1702,7 +1728,7 @@ void RelayDuel::RefreshSzone(int player, int flag, int use_cache) {
...
@@ -1702,7 +1728,7 @@ void RelayDuel::RefreshSzone(int player, int flag, int use_cache) {
}
}
pid
=
startp
[
1
-
player
];
pid
=
startp
[
1
-
player
];
NetServer
::
SendBufferToPlayer
(
players
[
pid
].
player
,
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
NetServer
::
SendBufferToPlayer
(
players
[
pid
].
player
,
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
for
(
int
i
=
pid
+
1
;
i
<
(
1
-
player
)
*
3
+
3
;
i
++
)
for
(
int
i
=
pid
+
1
;
i
<
endp
[
1
-
player
]
;
i
++
)
if
(
players
[
i
].
player
)
if
(
players
[
i
].
player
)
NetServer
::
ReSendToPlayer
(
players
[
i
].
player
);
NetServer
::
ReSendToPlayer
(
players
[
i
].
player
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
...
@@ -1778,12 +1804,11 @@ void RelayDuel::RefreshSingle(int player, int location, int sequence, int flag)
...
@@ -1778,12 +1804,11 @@ void RelayDuel::RefreshSingle(int player, int location, int sequence, int flag)
if
(
location
&
LOCATION_ONFIELD
)
{
if
(
location
&
LOCATION_ONFIELD
)
{
int
pid
=
startp
[
player
];
int
pid
=
startp
[
player
];
NetServer
::
SendBufferToPlayer
(
players
[
pid
].
player
,
STOC_GAME_MSG
,
query_buffer
,
len
+
4
);
NetServer
::
SendBufferToPlayer
(
players
[
pid
].
player
,
STOC_GAME_MSG
,
query_buffer
,
len
+
4
);
for
(
int
i
=
pid
+
1
;
i
<
player
*
3
+
3
;
i
++
)
for
(
int
i
=
pid
+
1
;
i
<
endp
[
player
]
;
i
++
)
if
(
players
[
i
].
player
)
if
(
players
[
i
].
player
)
NetServer
::
ReSendToPlayer
(
players
[
i
].
player
);
NetServer
::
ReSendToPlayer
(
players
[
i
].
player
);
if
(
qbuf
[
15
]
&
POS_FACEUP
)
{
if
(
qbuf
[
15
]
&
POS_FACEUP
)
{
pid
=
startp
[
1
-
player
];
for
(
int
i
=
startp
[
1
-
player
];
i
<
endp
[
1
-
player
];
i
++
)
for
(
int
i
=
pid
;
i
<
(
1
-
player
)
*
3
+
3
;
i
++
)
if
(
players
[
i
].
player
)
if
(
players
[
i
].
player
)
NetServer
::
ReSendToPlayer
(
players
[
i
].
player
);
NetServer
::
ReSendToPlayer
(
players
[
i
].
player
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
...
@@ -1792,7 +1817,7 @@ void RelayDuel::RefreshSingle(int player, int location, int sequence, int flag)
...
@@ -1792,7 +1817,7 @@ void RelayDuel::RefreshSingle(int player, int location, int sequence, int flag)
}
else
{
}
else
{
int
pid
=
startp
[
player
];
int
pid
=
startp
[
player
];
NetServer
::
SendBufferToPlayer
(
players
[
pid
].
player
,
STOC_GAME_MSG
,
query_buffer
,
len
+
4
);
NetServer
::
SendBufferToPlayer
(
players
[
pid
].
player
,
STOC_GAME_MSG
,
query_buffer
,
len
+
4
);
for
(
int
i
=
pid
+
1
;
i
<
player
*
3
+
3
;
i
++
)
for
(
int
i
=
pid
+
1
;
i
<
endp
[
player
]
;
i
++
)
if
(
players
[
i
].
player
)
if
(
players
[
i
].
player
)
NetServer
::
ReSendToPlayer
(
players
[
i
].
player
);
NetServer
::
ReSendToPlayer
(
players
[
i
].
player
);
if
(
location
==
LOCATION_REMOVED
&&
(
qbuf
[
15
]
&
POS_FACEDOWN
))
if
(
location
==
LOCATION_REMOVED
&&
(
qbuf
[
15
]
&
POS_FACEDOWN
))
...
...
gframe/relay_duel.h
View file @
bafac0e1
...
@@ -56,6 +56,7 @@ protected:
...
@@ -56,6 +56,7 @@ protected:
};
};
duelist
players
[
6
];
duelist
players
[
6
];
unsigned
char
startp
[
2
];
unsigned
char
startp
[
2
];
unsigned
char
endp
[
2
];
DuelPlayer
*
cur_player
[
2
];
DuelPlayer
*
cur_player
[
2
];
std
::
set
<
DuelPlayer
*>
observers
;
std
::
set
<
DuelPlayer
*>
observers
;
unsigned
char
hand_result
[
2
];
unsigned
char
hand_result
[
2
];
...
...
gframe/replay.cpp
View file @
bafac0e1
...
@@ -296,7 +296,7 @@ void Replay::Rewind() {
...
@@ -296,7 +296,7 @@ void Replay::Rewind() {
bool
Replay
::
LoadYrp
()
{
bool
Replay
::
LoadYrp
()
{
if
(
pheader
.
flag
&
REPLAY_NEWREPLAY
)
{
if
(
pheader
.
flag
&
REPLAY_NEWREPLAY
)
{
pdata
+=
(
4
+
((
pheader
.
flag
&
REPLAY_TAG
)
?
160
:
80
));
pdata
+=
(
4
+
((
pheader
.
flag
&
REPLAY_
RELAY
)
?
240
:
(
pheader
.
flag
&
REPLAY_
TAG
)
?
160
:
80
));
ReplayPacket
p
;
ReplayPacket
p
;
while
(
ReadNextPacket
(
&
p
))
while
(
ReadNextPacket
(
&
p
))
if
(
p
.
message
==
OLD_REPLAY_MODE
)
{
if
(
p
.
message
==
OLD_REPLAY_MODE
)
{
...
...
gframe/replay.h
View file @
bafac0e1
...
@@ -12,6 +12,7 @@ namespace ygo {
...
@@ -12,6 +12,7 @@ namespace ygo {
#define REPLAY_SINGLE_MODE 0x8
#define REPLAY_SINGLE_MODE 0x8
#define REPLAY_LUA64 0x10
#define REPLAY_LUA64 0x10
#define REPLAY_NEWREPLAY 0x20
#define REPLAY_NEWREPLAY 0x20
#define REPLAY_RELAY 0x40
struct
ReplayHeader
{
struct
ReplayHeader
{
unsigned
int
id
;
unsigned
int
id
;
...
...
gframe/replay_mode.cpp
View file @
bafac0e1
...
@@ -60,17 +60,24 @@ int ReplayMode::ReplayThread(void* param) {
...
@@ -60,17 +60,24 @@ int ReplayMode::ReplayThread(void* param) {
const
ReplayHeader
&
rh
=
cur_replay
.
pheader
;
const
ReplayHeader
&
rh
=
cur_replay
.
pheader
;
mainGame
->
dInfo
.
isFirst
=
true
;
mainGame
->
dInfo
.
isFirst
=
true
;
mainGame
->
dInfo
.
isTag
=
!!
(
rh
.
flag
&
REPLAY_TAG
);
mainGame
->
dInfo
.
isTag
=
!!
(
rh
.
flag
&
REPLAY_TAG
);
mainGame
->
dInfo
.
isRelay
=
!!
(
rh
.
flag
&
REPLAY_RELAY
);
mainGame
->
dInfo
.
isSingleMode
=
!!
(
rh
.
flag
&
REPLAY_SINGLE_MODE
);
mainGame
->
dInfo
.
isSingleMode
=
!!
(
rh
.
flag
&
REPLAY_SINGLE_MODE
);
mainGame
->
dInfo
.
lua64
=
!!
(
rh
.
flag
&
REPLAY_LUA64
);
mainGame
->
dInfo
.
lua64
=
!!
(
rh
.
flag
&
REPLAY_LUA64
);
mainGame
->
dInfo
.
current_player
[
0
]
=
0
;
mainGame
->
dInfo
.
current_player
[
0
]
=
0
;
mainGame
->
dInfo
.
current_player
[
1
]
=
0
;
mainGame
->
dInfo
.
current_player
[
1
]
=
0
;
if
(
mainGame
->
dInfo
.
isTag
)
{
if
(
mainGame
->
dInfo
.
isRelay
)
{
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
1
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
2
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
1
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
2
]);
}
else
if
(
mainGame
->
dInfo
.
isTag
)
{
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
1
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
1
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
1
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
1
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
0
]);
}
}
else
{
else
{
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
hostname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
0
]);
cur_replay
.
ReadName
(
mainGame
->
dInfo
.
clientname
[
0
]);
}
}
...
...
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