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
YGOPRO-520DIY
ygopro
Commits
dfce1705
Commit
dfce1705
authored
May 08, 2012
by
argon.sun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix
parent
2304847f
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
383 additions
and
180 deletions
+383
-180
gframe/duelclient.cpp
gframe/duelclient.cpp
+142
-51
gframe/game.cpp
gframe/game.cpp
+25
-19
gframe/game.h
gframe/game.h
+21
-17
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+11
-11
gframe/network.h
gframe/network.h
+0
-20
gframe/tag_duel.cpp
gframe/tag_duel.cpp
+179
-59
ocgcore/processor.cpp
ocgcore/processor.cpp
+2
-0
strings.conf
strings.conf
+3
-3
No files found.
gframe/duelclient.cpp
View file @
dfce1705
...
...
@@ -143,7 +143,7 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) {
mainGame
->
btnJoinHost
->
setEnabled
(
true
);
mainGame
->
btnJoinCancel
->
setEnabled
(
true
);
mainGame
->
gMutex
.
Lock
();
mainGame
->
HideElement
(
mainGame
->
wHost
Singl
e
);
mainGame
->
HideElement
(
mainGame
->
wHost
Prepar
e
);
mainGame
->
ShowElement
(
mainGame
->
wLanWindow
);
if
(
events
&
BEV_EVENT_EOF
)
mainGame
->
env
->
addMessageBox
(
L""
,
dataManager
.
GetSysString
(
1401
));
...
...
@@ -324,6 +324,23 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
str
.
append
(
msgbuf
);
}
mainGame
->
gMutex
.
Lock
();
if
(
pkt
->
info
.
mode
==
2
)
{
mainGame
->
dInfo
.
is_tag
=
true
;
mainGame
->
chkHostPrepReady
[
2
]
->
setVisible
(
true
);
mainGame
->
chkHostPrepReady
[
3
]
->
setVisible
(
true
);
mainGame
->
stHostPrepDuelist
[
2
]
->
setVisible
(
true
);
mainGame
->
stHostPrepDuelist
[
3
]
->
setVisible
(
true
);
mainGame
->
btnHostPrepKick
[
2
]
->
setVisible
(
true
);
mainGame
->
btnHostPrepKick
[
3
]
->
setVisible
(
true
);
}
else
{
mainGame
->
dInfo
.
is_tag
=
false
;
mainGame
->
chkHostPrepReady
[
2
]
->
setVisible
(
false
);
mainGame
->
chkHostPrepReady
[
3
]
->
setVisible
(
false
);
mainGame
->
stHostPrepDuelist
[
2
]
->
setVisible
(
false
);
mainGame
->
stHostPrepDuelist
[
3
]
->
setVisible
(
false
);
mainGame
->
btnHostPrepKick
[
2
]
->
setVisible
(
false
);
mainGame
->
btnHostPrepKick
[
3
]
->
setVisible
(
false
);
}
mainGame
->
dInfo
.
time_limit
=
pkt
->
info
.
time_limit
;
mainGame
->
dInfo
.
time_left
[
0
]
=
0
;
mainGame
->
dInfo
.
time_left
[
1
]
=
0
;
...
...
@@ -333,17 +350,19 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame
->
deckBuilder
.
filterList
=
lit
->
content
;
if
(
mainGame
->
deckBuilder
.
filterList
==
0
)
mainGame
->
deckBuilder
.
filterList
=
deckManager
.
_lfList
[
0
].
content
;
mainGame
->
stHostSingleDuelist
[
0
]
->
setText
(
L""
);
mainGame
->
stHostSingleDuelist
[
1
]
->
setText
(
L""
);
mainGame
->
stHostSingleOB
->
setText
(
L""
);
mainGame
->
SetStaticText
(
mainGame
->
stHostSingleRule
,
180
,
mainGame
->
guiFont
,
(
wchar_t
*
)
str
.
c_str
());
mainGame
->
stHostPrepDuelist
[
0
]
->
setText
(
L""
);
mainGame
->
stHostPrepDuelist
[
1
]
->
setText
(
L""
);
mainGame
->
stHostPrepDuelist
[
2
]
->
setText
(
L""
);
mainGame
->
stHostPrepDuelist
[
3
]
->
setText
(
L""
);
mainGame
->
stHostPrepOB
->
setText
(
L""
);
mainGame
->
SetStaticText
(
mainGame
->
stHostPrepRule
,
180
,
mainGame
->
guiFont
,
(
wchar_t
*
)
str
.
c_str
());
mainGame
->
RefreshDeck
(
mainGame
->
cbDeckSelect
);
mainGame
->
cbDeckSelect
->
setEnabled
(
true
);
if
(
mainGame
->
wCreateHost
->
isVisible
())
mainGame
->
HideElement
(
mainGame
->
wCreateHost
);
else
if
(
mainGame
->
wLanWindow
->
isVisible
())
mainGame
->
HideElement
(
mainGame
->
wLanWindow
);
mainGame
->
ShowElement
(
mainGame
->
wHost
Singl
e
);
mainGame
->
ShowElement
(
mainGame
->
wHost
Prepar
e
);
mainGame
->
gMutex
.
Unlock
();
break
;
}
...
...
@@ -351,31 +370,54 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
STOC_TypeChange
*
pkt
=
(
STOC_TypeChange
*
)
pdata
;
selftype
=
pkt
->
type
&
0xf
;
is_host
=
(
pkt
->
type
>>
4
)
&
0xf
;
if
(
!
mainGame
->
dInfo
.
is_tag
)
{
if
(
is_host
)
{
mainGame
->
btnHostSingle
Start
->
setVisible
(
true
);
mainGame
->
btnHostSingle
Kick
[
0
]
->
setEnabled
(
true
);
mainGame
->
btnHostSingle
Kick
[
1
]
->
setEnabled
(
true
);
mainGame
->
btnHostPrep
Start
->
setVisible
(
true
);
mainGame
->
btnHostPrep
Kick
[
0
]
->
setEnabled
(
true
);
mainGame
->
btnHostPrep
Kick
[
1
]
->
setEnabled
(
true
);
}
else
{
mainGame
->
btnHostSingle
Start
->
setVisible
(
false
);
mainGame
->
btnHostSingle
Kick
[
0
]
->
setEnabled
(
false
);
mainGame
->
btnHostSingle
Kick
[
1
]
->
setEnabled
(
false
);
}
mainGame
->
chkHostSingle
Ready
[
0
]
->
setEnabled
(
false
);
mainGame
->
chkHostSingle
Ready
[
0
]
->
setChecked
(
false
);
mainGame
->
chkHostSingle
Ready
[
1
]
->
setEnabled
(
false
);
mainGame
->
chkHostSingle
Ready
[
1
]
->
setChecked
(
false
);
mainGame
->
btnHostPrep
Start
->
setVisible
(
false
);
mainGame
->
btnHostPrep
Kick
[
0
]
->
setEnabled
(
false
);
mainGame
->
btnHostPrep
Kick
[
1
]
->
setEnabled
(
false
);
}
mainGame
->
chkHostPrep
Ready
[
0
]
->
setEnabled
(
false
);
mainGame
->
chkHostPrep
Ready
[
0
]
->
setChecked
(
false
);
mainGame
->
chkHostPrep
Ready
[
1
]
->
setEnabled
(
false
);
mainGame
->
chkHostPrep
Ready
[
1
]
->
setChecked
(
false
);
if
(
selftype
<
2
)
{
mainGame
->
chkHostSingleReady
[
selftype
]
->
setEnabled
(
true
);
mainGame
->
btnHostSingleDuelist
->
setEnabled
(
false
);
mainGame
->
btnHostSingleOB
->
setEnabled
(
true
);
mainGame
->
chkHostPrepReady
[
selftype
]
->
setEnabled
(
true
);
mainGame
->
btnHostPrepDuelist
->
setEnabled
(
false
);
mainGame
->
btnHostPrepOB
->
setEnabled
(
true
);
}
else
{
mainGame
->
btnHostPrepDuelist
->
setEnabled
(
true
);
mainGame
->
btnHostPrepOB
->
setEnabled
(
false
);
}
}
else
{
mainGame
->
btnHostSingleDuelist
->
setEnabled
(
true
);
mainGame
->
btnHostSingleOB
->
setEnabled
(
false
);
mainGame
->
btnHostPrepDuelist
->
setEnabled
(
true
);
if
(
is_host
)
{
mainGame
->
btnHostPrepStart
->
setVisible
(
true
);
for
(
int
i
=
0
;
i
<
4
;
++
i
)
mainGame
->
btnHostPrepKick
[
i
]
->
setEnabled
(
true
);
}
else
{
mainGame
->
btnHostPrepStart
->
setVisible
(
false
);
for
(
int
i
=
0
;
i
<
4
;
++
i
)
mainGame
->
btnHostPrepKick
[
i
]
->
setEnabled
(
false
);
}
for
(
int
i
=
0
;
i
<
4
;
++
i
)
{
mainGame
->
chkHostPrepReady
[
i
]
->
setEnabled
(
false
);
mainGame
->
chkHostPrepReady
[
i
]
->
setChecked
(
false
);
}
if
(
selftype
<
4
)
{
mainGame
->
chkHostPrepReady
[
selftype
]
->
setEnabled
(
true
);
mainGame
->
btnHostPrepOB
->
setEnabled
(
true
);
}
else
{
mainGame
->
btnHostPrepOB
->
setEnabled
(
false
);
}
}
break
;
}
case
STOC_DUEL_START
:
{
mainGame
->
HideElement
(
mainGame
->
wHost
Singl
e
);
mainGame
->
HideElement
(
mainGame
->
wHost
Prepar
e
);
mainGame
->
WaitFrameSignal
(
11
);
mainGame
->
gMutex
.
Lock
();
mainGame
->
dField
.
Clear
();
...
...
@@ -402,17 +444,38 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame
->
wChat
->
setVisible
(
true
);
mainGame
->
imgCard
->
setImage
(
imageManager
.
tCover
);
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
dField
);
if
(
!
mainGame
->
dInfo
.
is_tag
)
{
if
(
selftype
>
1
)
{
mainGame
->
dInfo
.
isObserver
=
true
;
mainGame
->
btnLeaveGame
->
setText
(
dataManager
.
GetSysString
(
1350
));
mainGame
->
btnLeaveGame
->
setVisible
(
true
);
}
if
(
selftype
!=
1
)
{
BufferIO
::
CopyWStr
(
mainGame
->
stHostSingleDuelist
[
0
]
->
getText
(),
mainGame
->
dInfo
.
hostname
,
20
);
BufferIO
::
CopyWStr
(
mainGame
->
stHostSingleDuelist
[
1
]
->
getText
(),
mainGame
->
dInfo
.
clientname
,
20
);
BufferIO
::
CopyWStr
(
mainGame
->
stHostPrepDuelist
[
0
]
->
getText
(),
mainGame
->
dInfo
.
hostname
,
20
);
BufferIO
::
CopyWStr
(
mainGame
->
stHostPrepDuelist
[
1
]
->
getText
(),
mainGame
->
dInfo
.
clientname
,
20
);
}
else
{
BufferIO
::
CopyWStr
(
mainGame
->
stHostPrepDuelist
[
1
]
->
getText
(),
mainGame
->
dInfo
.
hostname
,
20
);
BufferIO
::
CopyWStr
(
mainGame
->
stHostPrepDuelist
[
0
]
->
getText
(),
mainGame
->
dInfo
.
clientname
,
20
);
}
}
else
{
BufferIO
::
CopyWStr
(
mainGame
->
stHostSingleDuelist
[
1
]
->
getText
(),
mainGame
->
dInfo
.
hostname
,
20
);
BufferIO
::
CopyWStr
(
mainGame
->
stHostSingleDuelist
[
0
]
->
getText
(),
mainGame
->
dInfo
.
clientname
,
20
);
if
(
selftype
>
3
)
{
mainGame
->
dInfo
.
isObserver
=
true
;
mainGame
->
btnLeaveGame
->
setText
(
dataManager
.
GetSysString
(
1350
));
mainGame
->
btnLeaveGame
->
setVisible
(
true
);
}
if
(
selftype
>
1
&&
selftype
<
4
)
{
BufferIO
::
CopyWStr
(
mainGame
->
stHostPrepDuelist
[
2
]
->
getText
(),
mainGame
->
dInfo
.
hostname
,
20
);
BufferIO
::
CopyWStr
(
mainGame
->
stHostPrepDuelist
[
3
]
->
getText
(),
mainGame
->
dInfo
.
hostname_tag
,
20
);
BufferIO
::
CopyWStr
(
mainGame
->
stHostPrepDuelist
[
0
]
->
getText
(),
mainGame
->
dInfo
.
clientname
,
20
);
BufferIO
::
CopyWStr
(
mainGame
->
stHostPrepDuelist
[
1
]
->
getText
(),
mainGame
->
dInfo
.
clientname_tag
,
20
);
}
else
{
BufferIO
::
CopyWStr
(
mainGame
->
stHostPrepDuelist
[
0
]
->
getText
(),
mainGame
->
dInfo
.
hostname
,
20
);
BufferIO
::
CopyWStr
(
mainGame
->
stHostPrepDuelist
[
1
]
->
getText
(),
mainGame
->
dInfo
.
hostname_tag
,
20
);
BufferIO
::
CopyWStr
(
mainGame
->
stHostPrepDuelist
[
2
]
->
getText
(),
mainGame
->
dInfo
.
clientname
,
20
);
BufferIO
::
CopyWStr
(
mainGame
->
stHostPrepDuelist
[
3
]
->
getText
(),
mainGame
->
dInfo
.
clientname_tag
,
20
);
}
mainGame
->
dInfo
.
tag_player
[
0
]
=
false
;
mainGame
->
dInfo
.
tag_player
[
1
]
=
false
;
}
mainGame
->
gMutex
.
Unlock
();
break
;
...
...
@@ -470,13 +533,35 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
case
STOC_CHAT
:
{
STOC_Chat
*
pkt
=
(
STOC_Chat
*
)
pdata
;
wchar_t
msg
[
256
];
if
(
pkt
->
player
<
2
)
{
if
(
pkt
->
player
<
4
)
{
if
(
mainGame
->
chkIgnore1
->
isChecked
())
break
;
BufferIO
::
CopyWStr
(
pkt
->
msg
,
msg
,
256
);
msg
[(
len
-
3
)
/
2
]
=
0
;
mainGame
->
gMutex
.
Lock
();
if
(
!
mainGame
->
dInfo
.
is_tag
)
mainGame
->
AddChatMsg
(
msg
,
mainGame
->
LocalPlayer
(
pkt
->
player
));
else
{
if
(
mainGame
->
dInfo
.
isFirst
)
{
if
(
pkt
->
player
==
0
)
mainGame
->
AddChatMsg
(
msg
,
0
);
else
if
(
pkt
->
player
==
1
)
mainGame
->
AddChatMsg
(
msg
,
2
);
else
if
(
pkt
->
player
==
2
)
mainGame
->
AddChatMsg
(
msg
,
1
);
else
mainGame
->
AddChatMsg
(
msg
,
3
);
}
else
{
if
(
pkt
->
player
==
0
)
mainGame
->
AddChatMsg
(
msg
,
1
);
else
if
(
pkt
->
player
==
1
)
mainGame
->
AddChatMsg
(
msg
,
3
);
else
if
(
pkt
->
player
==
2
)
mainGame
->
AddChatMsg
(
msg
,
0
);
else
mainGame
->
AddChatMsg
(
msg
,
2
);
}
}
mainGame
->
gMutex
.
Unlock
();
}
else
if
(
pkt
->
player
==
8
)
{
//system custom message.
if
(
mainGame
->
chkIgnore1
->
isChecked
())
...
...
@@ -492,19 +577,19 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
BufferIO
::
CopyWStr
(
pkt
->
msg
,
msg
,
256
);
msg
[(
len
-
3
)
/
2
]
=
0
;
mainGame
->
gMutex
.
Lock
();
mainGame
->
AddChatMsg
(
msg
,
2
);
mainGame
->
AddChatMsg
(
msg
,
10
);
mainGame
->
gMutex
.
Unlock
();
}
break
;
}
case
STOC_HS_PLAYER_ENTER
:
{
STOC_HS_PlayerEnter
*
pkt
=
(
STOC_HS_PlayerEnter
*
)
pdata
;
if
(
pkt
->
pos
>
1
)
if
(
pkt
->
pos
>
3
)
break
;
wchar_t
name
[
20
];
BufferIO
::
CopyWStr
(
pkt
->
name
,
name
,
20
);
mainGame
->
gMutex
.
Lock
();
mainGame
->
stHost
Single
Duelist
[
pkt
->
pos
]
->
setText
(
name
);
mainGame
->
stHost
Prep
Duelist
[
pkt
->
pos
]
->
setText
(
name
);
mainGame
->
gMutex
.
Unlock
();
break
;
}
...
...
@@ -512,23 +597,23 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
STOC_HS_PlayerChange
*
pkt
=
(
STOC_HS_PlayerChange
*
)
pdata
;
unsigned
char
pos
=
(
pkt
->
status
>>
4
)
&
0xf
;
unsigned
char
state
=
pkt
->
status
&
0xf
;
if
(
pos
>
1
)
if
(
pos
>
3
)
break
;
mainGame
->
gMutex
.
Lock
();
if
(
state
==
PLAYERCHANGE_READY
)
{
mainGame
->
chkHost
Single
Ready
[
pos
]
->
setChecked
(
true
);
mainGame
->
chkHost
Prep
Ready
[
pos
]
->
setChecked
(
true
);
}
else
if
(
state
==
PLAYERCHANGE_NOTREADY
)
{
mainGame
->
chkHost
Single
Ready
[
pos
]
->
setChecked
(
false
);
mainGame
->
chkHost
Prep
Ready
[
pos
]
->
setChecked
(
false
);
}
else
if
(
state
==
PLAYERCHANGE_LEAVE
)
{
mainGame
->
stHost
Single
Duelist
[
pos
]
->
setText
(
L""
);
mainGame
->
chkHost
Single
Ready
[
pos
]
->
setChecked
(
false
);
mainGame
->
stHost
Prep
Duelist
[
pos
]
->
setText
(
L""
);
mainGame
->
chkHost
Prep
Ready
[
pos
]
->
setChecked
(
false
);
}
else
if
(
state
==
PLAYERCHANGE_OBSERVE
)
{
watching
++
;
wchar_t
watchbuf
[
32
];
myswprintf
(
watchbuf
,
L"%ls%d"
,
dataManager
.
GetSysString
(
1253
),
watching
);
mainGame
->
stHost
Single
Duelist
[
pos
]
->
setText
(
L""
);
mainGame
->
chkHost
Single
Ready
[
pos
]
->
setChecked
(
false
);
mainGame
->
stHost
Single
OB
->
setText
(
watchbuf
);
mainGame
->
stHost
Prep
Duelist
[
pos
]
->
setText
(
L""
);
mainGame
->
chkHost
Prep
Ready
[
pos
]
->
setChecked
(
false
);
mainGame
->
stHost
Prep
OB
->
setText
(
watchbuf
);
}
mainGame
->
gMutex
.
Unlock
();
break
;
...
...
@@ -539,7 +624,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
wchar_t
watchbuf
[
32
];
myswprintf
(
watchbuf
,
L"%ls%d"
,
dataManager
.
GetSysString
(
1253
),
watching
);
mainGame
->
gMutex
.
Lock
();
mainGame
->
stHost
Single
OB
->
setText
(
watchbuf
);
mainGame
->
stHost
Prep
OB
->
setText
(
watchbuf
);
mainGame
->
gMutex
.
Unlock
();
break
;
}
...
...
@@ -1543,10 +1628,16 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
case
MSG_NEW_TURN
:
{
int
player
=
mainGame
->
LocalPlayer
(
BufferIO
::
ReadInt8
(
pbuf
));
mainGame
->
dInfo
.
turn
++
;
if
(
mainGame
->
dInfo
.
turn
==
5
&&
!
mainGame
->
dInfo
.
isReplay
&&
!
mainGame
->
dInfo
.
isObserver
)
{
if
(
!
mainGame
->
dInfo
.
is_tag
&&
mainGame
->
dInfo
.
turn
==
5
&&
!
mainGame
->
dInfo
.
isReplay
&&
!
mainGame
->
dInfo
.
isObserver
)
{
mainGame
->
btnLeaveGame
->
setText
(
dataManager
.
GetSysString
(
1351
));
mainGame
->
btnLeaveGame
->
setVisible
(
true
);
}
if
(
mainGame
->
dInfo
.
is_tag
&&
mainGame
->
dInfo
.
turn
!=
1
)
{
if
(
player
==
0
)
mainGame
->
dInfo
.
tag_player
[
0
]
=
!
mainGame
->
dInfo
.
tag_player
[
0
];
else
mainGame
->
dInfo
.
tag_player
[
1
]
=
!
mainGame
->
dInfo
.
tag_player
[
1
];
}
myswprintf
(
mainGame
->
dInfo
.
strTurn
,
L"Turn:%d"
,
mainGame
->
dInfo
.
turn
);
mainGame
->
showcardcode
=
10
;
mainGame
->
showcarddif
=
30
;
...
...
gframe/game.cpp
View file @
dfce1705
...
...
@@ -139,26 +139,24 @@ bool Game::Initialize() {
btnHostConfirm
=
env
->
addButton
(
rect
<
s32
>
(
260
,
355
,
370
,
380
),
wCreateHost
,
BUTTON_HOST_CONFIRM
,
dataManager
.
GetSysString
(
1211
));
btnHostCancel
=
env
->
addButton
(
rect
<
s32
>
(
260
,
385
,
370
,
410
),
wCreateHost
,
BUTTON_HOST_CANCEL
,
dataManager
.
GetSysString
(
1212
));
//host(single)
wHostSingle
=
env
->
addWindow
(
rect
<
s32
>
(
270
,
120
,
750
,
420
),
false
,
dataManager
.
GetSysString
(
1250
));
wHostSingle
->
getCloseButton
()
->
setVisible
(
false
);
wHostSingle
->
setVisible
(
false
);
btnHostSingleDuelist
=
env
->
addButton
(
rect
<
s32
>
(
10
,
30
,
110
,
55
),
wHostSingle
,
BUTTON_HS_DUELIST
,
dataManager
.
GetSysString
(
1251
));
stHostSingleDuelist
[
0
]
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
40
,
65
,
240
,
85
),
true
,
false
,
wHostSingle
);
btnHostSingleKick
[
0
]
=
env
->
addButton
(
rect
<
s32
>
(
10
,
65
,
30
,
85
),
wHostSingle
,
BUTTON_HS_KICK
,
L"X"
);
chkHostSingleReady
[
0
]
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
250
,
65
,
270
,
85
),
wHostSingle
,
CHECKBOX_HS_READY
,
L""
);
chkHostSingleReady
[
0
]
->
setEnabled
(
false
);
stHostSingleDuelist
[
1
]
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
40
,
90
,
240
,
110
),
true
,
false
,
wHostSingle
);
btnHostSingleKick
[
1
]
=
env
->
addButton
(
rect
<
s32
>
(
10
,
90
,
30
,
110
),
wHostSingle
,
BUTTON_HS_KICK
,
L"X"
);
chkHostSingleReady
[
1
]
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
250
,
90
,
270
,
110
),
wHostSingle
,
CHECKBOX_HS_READY
,
L""
);
chkHostSingleReady
[
1
]
->
setEnabled
(
false
);
btnHostSingleOB
=
env
->
addButton
(
rect
<
s32
>
(
10
,
120
,
110
,
145
),
wHostSingle
,
BUTTON_HS_OBSERVER
,
dataManager
.
GetSysString
(
1252
));
wHostPrepare
=
env
->
addWindow
(
rect
<
s32
>
(
270
,
120
,
750
,
440
),
false
,
dataManager
.
GetSysString
(
1250
));
wHostPrepare
->
getCloseButton
()
->
setVisible
(
false
);
wHostPrepare
->
setVisible
(
false
);
btnHostPrepDuelist
=
env
->
addButton
(
rect
<
s32
>
(
10
,
30
,
110
,
55
),
wHostPrepare
,
BUTTON_HP_DUELIST
,
dataManager
.
GetSysString
(
1251
));
for
(
int
i
=
0
;
i
<
4
;
++
i
)
{
stHostPrepDuelist
[
i
]
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
40
,
65
+
i
*
25
,
240
,
85
+
i
*
25
),
true
,
false
,
wHostPrepare
);
btnHostPrepKick
[
i
]
=
env
->
addButton
(
rect
<
s32
>
(
10
,
65
+
i
*
25
,
30
,
85
+
i
*
25
),
wHostPrepare
,
BUTTON_HP_KICK
,
L"X"
);
chkHostPrepReady
[
i
]
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
250
,
65
+
i
*
25
,
270
,
85
+
i
*
25
),
wHostPrepare
,
CHECKBOX_HP_READY
,
L""
);
chkHostPrepReady
[
i
]
->
setEnabled
(
false
);
}
btnHostPrepOB
=
env
->
addButton
(
rect
<
s32
>
(
10
,
170
,
110
,
195
),
wHostPrepare
,
BUTTON_HP_OBSERVER
,
dataManager
.
GetSysString
(
1252
));
myswprintf
(
dataManager
.
strBuffer
,
L"%ls%d"
,
dataManager
.
GetSysString
(
1253
),
0
);
stHost
SingleOB
=
env
->
addStaticText
(
dataManager
.
strBuffer
,
rect
<
s32
>
(
10
,
150
,
270
,
170
),
false
,
false
,
wHostSingl
e
);
stHost
SingleRule
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
280
,
30
,
460
,
230
),
false
,
true
,
wHostSingl
e
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1254
),
rect
<
s32
>
(
10
,
185
,
110
,
205
),
false
,
false
,
wHostSingl
e
);
cbDeckSelect
=
env
->
addComboBox
(
rect
<
s32
>
(
120
,
180
,
270
,
205
),
wHostSingl
e
);
btnHost
SingleStart
=
env
->
addButton
(
rect
<
s32
>
(
230
,
260
,
340
,
285
),
wHostSingle
,
BUTTON_HS
_START
,
dataManager
.
GetSysString
(
1215
));
btnHost
SingleCancel
=
env
->
addButton
(
rect
<
s32
>
(
350
,
260
,
460
,
285
),
wHostSingle
,
BUTTON_HS
_CANCEL
,
dataManager
.
GetSysString
(
1212
));
stHost
PrepOB
=
env
->
addStaticText
(
dataManager
.
strBuffer
,
rect
<
s32
>
(
10
,
200
,
270
,
220
),
false
,
false
,
wHostPrepar
e
);
stHost
PrepRule
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
280
,
30
,
460
,
230
),
false
,
true
,
wHostPrepar
e
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1254
),
rect
<
s32
>
(
10
,
235
,
110
,
255
),
false
,
false
,
wHostPrepar
e
);
cbDeckSelect
=
env
->
addComboBox
(
rect
<
s32
>
(
120
,
230
,
270
,
255
),
wHostPrepar
e
);
btnHost
PrepStart
=
env
->
addButton
(
rect
<
s32
>
(
230
,
280
,
340
,
305
),
wHostPrepare
,
BUTTON_HP
_START
,
dataManager
.
GetSysString
(
1215
));
btnHost
PrepCancel
=
env
->
addButton
(
rect
<
s32
>
(
350
,
280
,
460
,
305
),
wHostPrepare
,
BUTTON_HP
_CANCEL
,
dataManager
.
GetSysString
(
1212
));
//img
wCardImg
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
1
,
1
,
199
,
273
),
true
,
false
,
0
,
-
1
,
true
);
wCardImg
->
setBackgroundColor
(
0xc0c0c0c0
);
...
...
@@ -782,6 +780,14 @@ void Game::AddChatMsg(wchar_t* msg, int player) {
chatMsg
[
0
].
append
(
dInfo
.
clientname
);
chatMsg
[
0
].
append
(
L": "
);
break
;
case
2
:
//host tag
chatMsg
[
0
].
append
(
dInfo
.
hostname_tag
);
chatMsg
[
0
].
append
(
L": "
);
break
;
case
3
:
//client tag
chatMsg
[
0
].
append
(
dInfo
.
clientname_tag
);
chatMsg
[
0
].
append
(
L": "
);
break
;
case
8
:
//system custom message, no prefix.
chatMsg
[
0
].
append
(
L"[System]: "
);
break
;
...
...
gframe/game.h
View file @
dfce1705
...
...
@@ -32,11 +32,15 @@ struct DuelInfo {
bool
isObserver
;
bool
isFirst
;
bool
is_shuffling
;
bool
is_tag
;
bool
tag_player
[
2
];
int
lp
[
2
];
int
turn
;
short
curMsg
;
wchar_t
hostname
[
20
];
wchar_t
clientname
[
20
];
wchar_t
hostname_tag
[
20
];
wchar_t
clientname_tag
[
20
];
wchar_t
strLP
[
2
][
16
];
wchar_t
strTurn
[
8
];
wchar_t
*
vic_string
;
...
...
@@ -195,18 +199,18 @@ public:
irr
::
gui
::
IGUICheckBox
*
chkNoShuffleDeck
;
irr
::
gui
::
IGUIButton
*
btnHostConfirm
;
irr
::
gui
::
IGUIButton
*
btnHostCancel
;
//host
(single)
irr
::
gui
::
IGUIWindow
*
wHost
Singl
e
;
irr
::
gui
::
IGUIButton
*
btnHost
Single
Duelist
;
irr
::
gui
::
IGUIButton
*
btnHost
Single
OB
;
irr
::
gui
::
IGUIStaticText
*
stHost
SingleDuelist
[
2
];
irr
::
gui
::
IGUICheckBox
*
chkHost
SingleReady
[
2
];
irr
::
gui
::
IGUIButton
*
btnHost
SingleKick
[
2
];
//host
panel
irr
::
gui
::
IGUIWindow
*
wHost
Prepar
e
;
irr
::
gui
::
IGUIButton
*
btnHost
Prep
Duelist
;
irr
::
gui
::
IGUIButton
*
btnHost
Prep
OB
;
irr
::
gui
::
IGUIStaticText
*
stHost
PrepDuelist
[
4
];
irr
::
gui
::
IGUICheckBox
*
chkHost
PrepReady
[
4
];
irr
::
gui
::
IGUIButton
*
btnHost
PrepKick
[
4
];
irr
::
gui
::
IGUIComboBox
*
cbDeckSelect
;
irr
::
gui
::
IGUIStaticText
*
stHost
Single
Rule
;
irr
::
gui
::
IGUIStaticText
*
stHost
Single
OB
;
irr
::
gui
::
IGUIButton
*
btnHost
Single
Start
;
irr
::
gui
::
IGUIButton
*
btnHost
Single
Cancel
;
irr
::
gui
::
IGUIStaticText
*
stHost
Prep
Rule
;
irr
::
gui
::
IGUIStaticText
*
stHost
Prep
OB
;
irr
::
gui
::
IGUIButton
*
btnHost
Prep
Start
;
irr
::
gui
::
IGUIButton
*
btnHost
Prep
Cancel
;
//replay
irr
::
gui
::
IGUIWindow
*
wReplay
;
irr
::
gui
::
IGUIListBox
*
lstReplayList
;
...
...
@@ -365,12 +369,12 @@ extern Game* mainGame;
#define BUTTON_HOST_CONFIRM 114
#define BUTTON_HOST_CANCEL 115
#define BUTTON_LAN_REFRESH 116
#define BUTTON_H
S
_DUELIST 120
#define BUTTON_H
S
_OBSERVER 121
#define BUTTON_H
S
_START 122
#define BUTTON_H
S
_CANCEL 123
#define BUTTON_H
S
_KICK 124
#define CHECKBOX_H
S
_READY 125
#define BUTTON_H
P
_DUELIST 120
#define BUTTON_H
P
_OBSERVER 121
#define BUTTON_H
P
_START 122
#define BUTTON_H
P
_CANCEL 123
#define BUTTON_H
P
_KICK 124
#define CHECKBOX_H
P
_READY 125
#define LISTBOX_REPLAY_LIST 130
#define BUTTON_LOAD_REPLAY 131
#define BUTTON_CANCEL_REPLAY 132
...
...
gframe/menu_handler.cpp
View file @
dfce1705
...
...
@@ -84,16 +84,16 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame
->
ShowElement
(
mainGame
->
wLanWindow
);
break
;
}
case
BUTTON_H
S
_DUELIST
:
{
case
BUTTON_H
P
_DUELIST
:
{
DuelClient
::
SendPacketToServer
(
CTOS_HS_TODUELIST
);
break
;
}
case
BUTTON_H
S
_OBSERVER
:
{
case
BUTTON_H
P
_OBSERVER
:
{
DuelClient
::
SendPacketToServer
(
CTOS_HS_TOOBSERVER
);
break
;
}
case
BUTTON_H
S
_KICK
:
{
int
id
=
caller
-
static_cast
<
IGUIElement
*>
(
mainGame
->
btnHost
Single
Kick
[
0
]);
case
BUTTON_H
P
_KICK
:
{
int
id
=
caller
-
static_cast
<
IGUIElement
*>
(
mainGame
->
btnHost
Prep
Kick
[
0
]);
CTOS_Kick
csk
;
if
(
id
==
0
)
csk
.
pos
=
0
;
...
...
@@ -101,19 +101,19 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
DuelClient
::
SendPacketToServer
(
CTOS_HS_KICK
,
csk
);
break
;
}
case
BUTTON_H
S
_START
:
{
if
(
!
mainGame
->
chkHost
Single
Ready
[
0
]
->
isChecked
()
||
!
mainGame
->
chkHost
SingleReady
[
0
]
->
isChecked
())
case
BUTTON_H
P
_START
:
{
if
(
!
mainGame
->
chkHost
Prep
Ready
[
0
]
->
isChecked
()
||
!
mainGame
->
chkHost
PrepReady
[
1
]
->
isChecked
())
break
;
DuelClient
::
SendPacketToServer
(
CTOS_HS_START
);
break
;
}
case
BUTTON_H
S
_CANCEL
:
{
case
BUTTON_H
P
_CANCEL
:
{
DuelClient
::
StopClient
();
mainGame
->
btnCreateHost
->
setEnabled
(
true
);
mainGame
->
btnJoinHost
->
setEnabled
(
true
);
mainGame
->
btnJoinCancel
->
setEnabled
(
true
);
mainGame
->
HideElement
(
mainGame
->
wHost
Singl
e
);
mainGame
->
HideElement
(
mainGame
->
wHost
Prepar
e
);
mainGame
->
ShowElement
(
mainGame
->
wLanWindow
);
if
(
exit_on_return
)
mainGame
->
device
->
closeDevice
();
...
...
@@ -234,10 +234,10 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
}
case
irr
:
:
gui
::
EGET_CHECKBOX_CHANGED
:
{
switch
(
id
)
{
case
CHECKBOX_H
S
_READY
:
{
case
CHECKBOX_H
P
_READY
:
{
if
(
!
caller
->
isEnabled
())
break
;
mainGame
->
env
->
setFocus
(
mainGame
->
wHost
Singl
e
);
mainGame
->
env
->
setFocus
(
mainGame
->
wHost
Prepar
e
);
if
(
static_cast
<
irr
::
gui
::
IGUICheckBox
*>
(
caller
)
->
isChecked
())
{
if
(
mainGame
->
cbDeckSelect
->
getSelected
()
==
-
1
||
!
deckManager
.
LoadDeck
(
mainGame
->
cbDeckSelect
->
getItem
(
mainGame
->
cbDeckSelect
->
getSelected
())))
{
...
...
gframe/network.h
View file @
dfce1705
...
...
@@ -95,17 +95,6 @@ struct STOC_HS_PlayerChange {
struct
STOC_HS_WatchChange
{
unsigned
short
watch_count
;
};
struct
STOC_HT_PlayerEnter
{
unsigned
short
name
[
20
];
unsigned
char
pos
;
};
struct
STOC_HT_PlayerChange
{
//pos<<4 | state
unsigned
char
status
;
};
struct
STOC_HT_WatchChange
{
unsigned
short
watch_count
;
};
class
DuelMode
;
...
...
@@ -186,12 +175,6 @@ public:
#define CTOS_HS_NOTREADY 0x23
#define CTOS_HS_KICK 0x24
#define CTOS_HS_START 0x25
#define CTOS_HT_TODUELIST 0x30
#define CTOS_HT_TOOBSERVER 0x31
#define CTOS_HT_READY 0x32
#define CTOS_HT_NOTREADY 0x33
#define CTOS_HT_KICK 0x34
#define CTOS_HT_START 0x35
#define STOC_GAME_MSG 0x1
#define STOC_ERROR_MSG 0x2
...
...
@@ -213,9 +196,6 @@ public:
#define STOC_HS_PLAYER_ENTER 0x20
#define STOC_HS_PLAYER_CHANGE 0x21
#define STOC_HS_WATCH_CHANGE 0x22
#define STOC_HT_PLAYER_ENTER 0x30
#define STOC_HT_PLAYER_CHANGE 0x31
#define STOC_HT_WATCH_CHANGE 0x32
#define PLAYERCHANGE_READY 0x1
#define PLAYERCHANGE_NOTREADY 0x2
...
...
gframe/tag_duel.cpp
View file @
dfce1705
...
...
@@ -63,7 +63,7 @@ void TagDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) {
STOC_TypeChange
sctc
;
sctc
.
type
=
(
host_player
==
dp
)
?
0x10
:
0
;
if
(
!
players
[
0
]
||
!
players
[
1
]
||
!
players
[
2
]
||
!
players
[
3
])
{
STOC_H
T
_PlayerEnter
scpe
;
STOC_H
S
_PlayerEnter
scpe
;
BufferIO
::
CopyWStr
(
dp
->
name
,
scpe
.
name
,
20
);
if
(
!
players
[
0
])
scpe
.
pos
=
0
;
...
...
@@ -75,9 +75,9 @@ void TagDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) {
scpe
.
pos
=
3
;
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
])
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_H
T
_PLAYER_ENTER
,
scpe
);
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_H
S
_PLAYER_ENTER
,
scpe
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
T
_PLAYER_ENTER
,
scpe
);
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
S
_PLAYER_ENTER
,
scpe
);
players
[
scpe
.
pos
]
=
dp
;
dp
->
type
=
scpe
.
pos
;
sctc
.
type
|=
scpe
.
pos
;
...
...
@@ -85,13 +85,13 @@ void TagDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) {
observers
.
insert
(
dp
);
dp
->
type
=
NETPLAYER_TYPE_OBSERVER
;
sctc
.
type
|=
NETPLAYER_TYPE_OBSERVER
;
STOC_H
T
_WatchChange
scwc
;
STOC_H
S
_WatchChange
scwc
;
scwc
.
watch_count
=
observers
.
size
();
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
])
NetServer
::
SendPacketToPlayer
(
players
[
1
],
STOC_H
T
_WATCH_CHANGE
,
scwc
);
NetServer
::
SendPacketToPlayer
(
players
[
1
],
STOC_H
S
_WATCH_CHANGE
,
scwc
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
T
_WATCH_CHANGE
,
scwc
);
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
S
_WATCH_CHANGE
,
scwc
);
}
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_JOIN_GAME
,
scjg
);
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_TYPE_CHANGE
,
sctc
);
...
...
@@ -100,17 +100,17 @@ void TagDuel::JoinGame(DuelPlayer* dp, void* pdata, bool is_creater) {
STOC_HS_PlayerEnter
scpe
;
BufferIO
::
CopyWStr
(
players
[
i
]
->
name
,
scpe
.
name
,
20
);
scpe
.
pos
=
0
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_H
T
_PLAYER_ENTER
,
scpe
);
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_H
S
_PLAYER_ENTER
,
scpe
);
if
(
ready
[
i
])
{
STOC_HS_PlayerChange
scpc
;
scpc
.
status
=
PLAYERCHANGE_READY
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_H
T
_PLAYER_CHANGE
,
scpc
);
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_H
S
_PLAYER_CHANGE
,
scpc
);
}
}
if
(
observers
.
size
())
{
STOC_H
T
_WatchChange
scwc
;
STOC_H
S
_WatchChange
scwc
;
scwc
.
watch_count
=
observers
.
size
();
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_H
T
_WATCH_CHANGE
,
scwc
);
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_H
S
_WATCH_CHANGE
,
scwc
);
}
}
void
TagDuel
::
LeaveGame
(
DuelPlayer
*
dp
)
{
...
...
@@ -120,21 +120,21 @@ void TagDuel::LeaveGame(DuelPlayer* dp) {
}
else
if
(
dp
->
type
==
NETPLAYER_TYPE_OBSERVER
)
{
observers
.
erase
(
dp
);
if
(
!
pduel
)
{
STOC_H
T
_WatchChange
scwc
;
STOC_H
S
_WatchChange
scwc
;
scwc
.
watch_count
=
observers
.
size
();
}
NetServer
::
DisconnectPlayer
(
dp
);
}
else
{
if
(
!
pduel
)
{
STOC_H
T
_PlayerChange
scpc
;
STOC_H
S
_PlayerChange
scpc
;
players
[
dp
->
type
]
=
0
;
ready
[
dp
->
type
]
=
false
;
scpc
.
status
=
(
dp
->
type
<<
4
)
|
PLAYERCHANGE_LEAVE
;
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
])
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_H
T
_PLAYER_CHANGE
,
scpc
);
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_H
S
_PLAYER_CHANGE
,
scpc
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
T
_PLAYER_CHANGE
,
scpc
);
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
S
_PLAYER_CHANGE
,
scpc
);
NetServer
::
DisconnectPlayer
(
dp
);
}
else
{
EndDuel
();
...
...
@@ -151,7 +151,7 @@ void TagDuel::ToDuelist(DuelPlayer* dp) {
return
;
if
(
dp
->
type
==
NETPLAYER_TYPE_OBSERVER
)
{
observers
.
erase
(
dp
);
STOC_H
T
_PlayerEnter
scpe
;
STOC_H
S
_PlayerEnter
scpe
;
BufferIO
::
CopyWStr
(
dp
->
name
,
scpe
.
name
,
20
);
if
(
!
players
[
0
])
dp
->
type
=
0
;
...
...
@@ -163,31 +163,33 @@ void TagDuel::ToDuelist(DuelPlayer* dp) {
dp
->
type
=
3
;
players
[
dp
->
type
]
=
dp
;
scpe
.
pos
=
dp
->
type
;
STOC_H
T
_WatchChange
scwc
;
STOC_H
S
_WatchChange
scwc
;
scwc
.
watch_count
=
observers
.
size
();
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
])
{
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_H
T
_PLAYER_ENTER
,
scpe
);
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_H
T
_WATCH_CHANGE
,
scwc
);
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_H
S
_PLAYER_ENTER
,
scpe
);
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_H
S
_WATCH_CHANGE
,
scwc
);
}
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
{
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
T
_PLAYER_ENTER
,
scpe
);
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
T
_WATCH_CHANGE
,
scwc
);
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
S
_PLAYER_ENTER
,
scpe
);
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
S
_WATCH_CHANGE
,
scwc
);
}
STOC_TypeChange
sctc
;
sctc
.
type
=
(
dp
==
host_player
?
0x10
:
0
)
|
dp
->
type
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_TYPE_CHANGE
,
sctc
);
}
else
{
if
(
ready
[
dp
->
type
])
return
;
uint8
dptype
=
(
dp
->
type
+
1
)
%
4
;
while
(
players
[
dptype
])
dptype
=
(
dp
->
type
+
1
)
%
4
;
STOC_H
T
_PlayerChange
scpc
;
STOC_H
S
_PlayerChange
scpc
;
scpc
.
status
=
(
dp
->
type
<<
4
)
|
dptype
;
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
])
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_H
T
_PLAYER_CHANGE
,
scpc
);
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_H
S
_PLAYER_CHANGE
,
scpc
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
T
_PLAYER_CHANGE
,
scpc
);
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
S
_PLAYER_CHANGE
,
scpc
);
STOC_TypeChange
sctc
;
sctc
.
type
=
(
dp
==
host_player
?
0x10
:
0
)
|
dp
->
type
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_TYPE_CHANGE
,
sctc
);
...
...
@@ -200,13 +202,13 @@ void TagDuel::ToDuelist(DuelPlayer* dp) {
void
TagDuel
::
ToObserver
(
DuelPlayer
*
dp
)
{
if
(
dp
->
type
>
3
)
return
;
STOC_H
T
_PlayerChange
scpc
;
STOC_H
S
_PlayerChange
scpc
;
scpc
.
status
=
(
dp
->
type
<<
4
)
|
PLAYERCHANGE_OBSERVE
;
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
])
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_H
T
_PLAYER_CHANGE
,
scpc
);
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_H
S
_PLAYER_CHANGE
,
scpc
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
T
_PLAYER_CHANGE
,
scpc
);
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
S
_PLAYER_CHANGE
,
scpc
);
players
[
dp
->
type
]
=
0
;
dp
->
type
=
NETPLAYER_TYPE_OBSERVER
;
observers
.
insert
(
dp
);
...
...
@@ -222,9 +224,9 @@ void TagDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
bool
allow_tcg
=
host_info
.
rule
==
1
||
host_info
.
rule
==
2
;
int
res
=
host_info
.
no_check_deck
?
false
:
deckManager
.
CheckLFList
(
pdeck
[
dp
->
type
],
host_info
.
lflist
,
allow_ocg
,
allow_tcg
);
if
(
res
)
{
STOC_H
T
_PlayerChange
scpc
;
STOC_H
S
_PlayerChange
scpc
;
scpc
.
status
=
(
dp
->
type
<<
4
)
|
PLAYERCHANGE_NOTREADY
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_H
T
_PLAYER_CHANGE
,
scpc
);
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_H
S
_PLAYER_CHANGE
,
scpc
);
STOC_ErrorMsg
scem
;
scem
.
msg
=
ERRMSG_DECKERROR
;
scem
.
code
=
res
;
...
...
@@ -233,13 +235,13 @@ void TagDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
}
}
ready
[
dp
->
type
]
=
is_ready
;
STOC_H
T
_PlayerChange
scpc
;
STOC_H
S
_PlayerChange
scpc
;
scpc
.
status
=
(
dp
->
type
<<
4
)
|
(
is_ready
?
PLAYERCHANGE_READY
:
PLAYERCHANGE_NOTREADY
);
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
]
&&
players
[
i
]
!=
dp
)
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_H
T
_PLAYER_CHANGE
,
scpc
);
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_H
S
_PLAYER_CHANGE
,
scpc
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
T
_PLAYER_CHANGE
,
scpc
);
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_H
S
_PLAYER_CHANGE
,
scpc
);
}
void
TagDuel
::
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
)
{
if
(
dp
!=
host_player
||
dp
==
players
[
pos
]
||
!
players
[
pos
])
...
...
@@ -334,6 +336,9 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
std
::
swap
(
pdeck
[
1
],
pdeck
[
3
]);
swapped
=
true
;
}
tp_player
=
0
;
cur_player
[
0
]
=
players
[
1
];
cur_player
[
1
]
=
players
[
3
];
dp
->
state
=
CTOS_RESPONSE
;
ReplayHeader
rh
;
rh
.
id
=
0x31707279
;
...
...
@@ -778,14 +783,30 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
time_limit
[
1
]
=
host_info
.
time_limit
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
if
(
tp_player
==
0
)
{
if
(
cur_player
[
0
]
==
players
[
0
])
cur_player
[
0
]
=
players
[
1
];
else
cur_player
[
0
]
=
players
[
0
];
}
else
{
if
(
cur_player
[
1
]
==
players
[
2
])
cur_player
[
1
]
=
players
[
3
];
else
cur_player
[
1
]
=
players
[
2
];
}
tp_player
=
1
-
tp_player
;
break
;
}
case
MSG_NEW_PHASE
:
{
pbuf
++
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
RefreshMzone
(
0
);
...
...
@@ -809,15 +830,19 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
16
;
if
(
cl
==
LOCATION_REMOVED
&&
(
cp
&
POS_FACEDOWN
))
{
BufferIO
::
WriteInt32
(
pbufw
,
0
);
NetServer
::
SendBufferToPlayer
(
players
[
cc
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
-
cc
]);
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
}
else
{
NetServer
::
SendBufferToPlayer
(
players
[
cc
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
cc
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
if
(
!
(
cl
&
0xb0
)
&&
!
((
cl
&
0xc
)
&&
(
cp
&
POS_FACEUP
)))
BufferIO
::
WriteInt32
(
pbufw
,
0
);
NetServer
::
SendBufferToPlayer
(
players
[
1
-
cc
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
]
!=
cur_player
[
cc
])
NetServer
::
SendBufferToPlayer
(
players
[
i
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
}
...
...
@@ -834,6 +859,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
9
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
if
((
pp
&
POS_FACEDOWN
)
&&
(
cp
&
POS_FACEUP
))
...
...
@@ -845,6 +872,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
4
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -853,6 +882,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
16
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -861,6 +892,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
4
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -869,6 +902,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
8
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -876,6 +911,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case
MSG_SUMMONED
:
{
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
RefreshMzone
(
0
);
...
...
@@ -888,6 +925,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
8
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -895,6 +934,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case
MSG_SPSUMMONED
:
{
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
RefreshMzone
(
0
);
...
...
@@ -908,6 +949,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
8
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -915,6 +958,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case
MSG_FLIPSUMMONED
:
{
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
RefreshMzone
(
0
);
...
...
@@ -927,6 +972,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
16
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -935,6 +982,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
++
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
RefreshMzone
(
0
);
...
...
@@ -949,6 +998,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
++
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -957,6 +1008,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
++
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
RefreshMzone
(
0
);
...
...
@@ -970,6 +1023,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case
MSG_CHAIN_END
:
{
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
RefreshMzone
(
0
);
...
...
@@ -984,6 +1039,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
++
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -992,6 +1049,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
++
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1008,6 +1067,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
count
*
4
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1017,6 +1078,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
count
*
4
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1026,10 +1089,12 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
count
=
BufferIO
::
ReadInt8
(
pbuf
);
pbufw
=
pbuf
;
pbuf
+=
count
*
4
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
for
(
int
i
=
0
;
i
<
count
;
++
i
)
BufferIO
::
WriteInt32
(
pbufw
,
0
);
NetServer
::
SendBufferToPlayer
(
players
[
1
-
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
]
!=
cur_player
[
player
])
NetServer
::
SendBufferToPlayer
(
players
[
i
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1038,6 +1103,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
5
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1046,6 +1113,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
5
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1054,6 +1123,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
8
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1062,6 +1133,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
5
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1070,6 +1143,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
4
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1078,6 +1153,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
8
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1086,6 +1163,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
8
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1094,6 +1173,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
5
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1102,6 +1183,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
6
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1110,6 +1193,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
6
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1118,6 +1203,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
8
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1126,6 +1213,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
18
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1133,6 +1222,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case
MSG_ATTACK_DISABLED
:
{
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1140,6 +1231,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case
MSG_DAMAGE_STEP_START
:
{
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
RefreshMzone
(
0
);
...
...
@@ -1149,6 +1242,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case
MSG_DAMAGE_STEP_END
:
{
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
RefreshMzone
(
0
);
...
...
@@ -1158,7 +1253,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case
MSG_MISSED_EFFECT
:
{
player
=
pbuf
[
0
];
pbuf
+=
8
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
break
;
}
case
MSG_TOSS_COIN
:
{
...
...
@@ -1167,6 +1262,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
count
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1177,6 +1274,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
count
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1185,20 +1284,20 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
player
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
5
;
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_ANNOUNCE_ATTRIB
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
5
;
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_ANNOUNCE_CARD
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_ANNOUNCE_NUMBER
:
{
...
...
@@ -1206,13 +1305,15 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
count
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
4
*
count
;
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_CARD_HINT
:
{
pbuf
+=
9
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
...
...
@@ -1229,9 +1330,10 @@ void TagDuel::GetResponse(DuelPlayer* dp, void* pdata, unsigned int len) {
set_responseb
(
pduel
,
resb
);
players
[
dp
->
type
]
->
state
=
0xff
;
if
(
host_info
.
time_limit
)
{
if
(
time_limit
[
dp
->
type
]
>=
time_elapsed
)
time_limit
[
dp
->
type
]
-=
time_elapsed
;
else
time_limit
[
dp
->
type
]
=
0
;
int
resp_type
=
dp
->
type
<
2
?
0
:
1
;
if
(
time_limit
[
resp_type
]
>=
time_elapsed
)
time_limit
[
resp_type
]
-=
time_elapsed
;
else
time_limit
[
resp_type
]
=
0
;
event_del
(
etimer
);
}
Process
();
...
...
@@ -1246,6 +1348,8 @@ void TagDuel::EndDuel() {
memcpy
(
pbuf
,
last_replay
.
comp_data
,
last_replay
.
comp_size
);
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_REPLAY
,
replaybuf
,
sizeof
(
ReplayHeader
)
+
last_replay
.
comp_size
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
end_duel
(
pduel
);
...
...
@@ -1254,23 +1358,27 @@ void TagDuel::EndDuel() {
void
TagDuel
::
WaitforResponse
(
int
playerid
)
{
last_response
=
playerid
;
unsigned
char
msg
=
MSG_WAITING
;
NetServer
::
SendPacketToPlayer
(
players
[
1
-
playerid
],
STOC_GAME_MSG
,
msg
);
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
]
!=
cur_player
[
playerid
])
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_GAME_MSG
,
msg
);
if
(
host_info
.
time_limit
)
{
STOC_TimeLimit
sctl
;
sctl
.
player
=
playerid
;
sctl
.
left_time
=
time_limit
[
playerid
];
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_TIME_LIMIT
,
sctl
);
NetServer
::
SendPacketToPlayer
(
players
[
1
],
STOC_TIME_LIMIT
,
sctl
);
players
[
playerid
]
->
state
=
CTOS_TIME_CONFIRM
;
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
cur_player
[
playerid
]
->
state
=
CTOS_TIME_CONFIRM
;
}
else
players
[
playerid
]
->
state
=
CTOS_RESPONSE
;
cur_player
[
playerid
]
->
state
=
CTOS_RESPONSE
;
}
void
TagDuel
::
TimeConfirm
(
DuelPlayer
*
dp
)
{
if
(
host_info
.
time_limit
==
0
)
return
;
if
(
dp
->
type
!=
last_response
)
return
;
players
[
last_response
]
->
state
=
CTOS_RESPONSE
;
cur_player
[
last_response
]
->
state
=
CTOS_RESPONSE
;
time_elapsed
=
0
;
timeval
timeout
=
{
1
,
0
};
event_add
(
etimer
,
&
timeout
);
...
...
@@ -1282,7 +1390,7 @@ void TagDuel::RefreshMzone(int player, int flag, int use_cache) {
BufferIO
::
WriteInt8
(
qbuf
,
player
);
BufferIO
::
WriteInt8
(
qbuf
,
LOCATION_MZONE
);
int
len
=
query_field_card
(
pduel
,
player
,
LOCATION_MZONE
,
flag
,
(
unsigned
char
*
)
qbuf
,
use_cache
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
int
clen
=
BufferIO
::
ReadInt32
(
qbuf
);
if
(
clen
==
4
)
...
...
@@ -1291,7 +1399,9 @@ void TagDuel::RefreshMzone(int player, int flag, int use_cache) {
memset
(
qbuf
,
0
,
clen
-
4
);
qbuf
+=
clen
-
4
;
}
NetServer
::
SendBufferToPlayer
(
players
[
1
-
player
],
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
]
!=
cur_player
[
player
])
NetServer
::
SendBufferToPlayer
(
players
[
i
],
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
ReSendToPlayer
(
*
pit
);
}
...
...
@@ -1302,7 +1412,7 @@ void TagDuel::RefreshSzone(int player, int flag, int use_cache) {
BufferIO
::
WriteInt8
(
qbuf
,
player
);
BufferIO
::
WriteInt8
(
qbuf
,
LOCATION_SZONE
);
int
len
=
query_field_card
(
pduel
,
player
,
LOCATION_SZONE
,
flag
,
(
unsigned
char
*
)
qbuf
,
use_cache
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
for
(
int
i
=
0
;
i
<
6
;
++
i
)
{
int
clen
=
BufferIO
::
ReadInt32
(
qbuf
);
if
(
clen
==
4
)
...
...
@@ -1311,7 +1421,9 @@ void TagDuel::RefreshSzone(int player, int flag, int use_cache) {
memset
(
qbuf
,
0
,
clen
-
4
);
qbuf
+=
clen
-
4
;
}
NetServer
::
SendBufferToPlayer
(
players
[
1
-
player
],
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
]
!=
cur_player
[
player
])
NetServer
::
SendBufferToPlayer
(
players
[
i
],
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
ReSendToPlayer
(
*
pit
);
}
...
...
@@ -1322,7 +1434,7 @@ void TagDuel::RefreshHand(int player, int flag, int use_cache) {
BufferIO
::
WriteInt8
(
qbuf
,
player
);
BufferIO
::
WriteInt8
(
qbuf
,
LOCATION_HAND
);
int
len
=
query_field_card
(
pduel
,
player
,
LOCATION_HAND
,
flag
|
QUERY_IS_PUBLIC
,
(
unsigned
char
*
)
qbuf
,
use_cache
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
int
qlen
=
0
,
slen
,
qflag
;
while
(
qlen
<
len
)
{
slen
=
BufferIO
::
ReadInt32
(
qbuf
);
...
...
@@ -1332,7 +1444,9 @@ void TagDuel::RefreshHand(int player, int flag, int use_cache) {
qbuf
+=
slen
-
4
;
qlen
+=
slen
;
}
NetServer
::
SendBufferToPlayer
(
players
[
1
-
player
],
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
]
!=
cur_player
[
player
])
NetServer
::
SendBufferToPlayer
(
players
[
i
],
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
ReSendToPlayer
(
*
pit
);
}
...
...
@@ -1345,6 +1459,8 @@ void TagDuel::RefreshGrave(int player, int flag, int use_cache) {
int
len
=
query_field_card
(
pduel
,
player
,
LOCATION_GRAVE
,
flag
,
(
unsigned
char
*
)
qbuf
,
use_cache
);
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
ReSendToPlayer
(
*
pit
);
}
...
...
@@ -1355,7 +1471,7 @@ void TagDuel::RefreshExtra(int player, int flag, int use_cache) {
BufferIO
::
WriteInt8
(
qbuf
,
player
);
BufferIO
::
WriteInt8
(
qbuf
,
LOCATION_EXTRA
);
int
len
=
query_field_card
(
pduel
,
player
,
LOCATION_EXTRA
,
flag
,
(
unsigned
char
*
)
qbuf
,
use_cache
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
query_buffer
,
len
+
3
);
}
void
TagDuel
::
RefreshSingle
(
int
player
,
int
location
,
int
sequence
,
int
flag
)
{
char
query_buffer
[
0x1000
];
...
...
@@ -1367,9 +1483,11 @@ void TagDuel::RefreshSingle(int player, int location, int sequence, int flag) {
int
len
=
query_card
(
pduel
,
player
,
location
,
sequence
,
flag
,
(
unsigned
char
*
)
qbuf
,
0
);
if
(
location
==
LOCATION_REMOVED
&&
(
qbuf
[
15
]
&
POS_FACEDOWN
))
return
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
query_buffer
,
len
+
4
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
query_buffer
,
len
+
4
);
if
((
location
&
0x90
)
||
((
location
&
0x2c
)
&&
(
qbuf
[
15
]
&
POS_FACEUP
)))
{
NetServer
::
ReSendToPlayer
(
players
[
1
-
player
]);
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
]
!=
cur_player
[
player
])
NetServer
::
ReSendToPlayer
(
players
[
i
]);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
ReSendToPlayer
(
*
pit
);
}
...
...
@@ -1403,6 +1521,8 @@ void TagDuel::SingleTimer(evutil_socket_t fd, short events, void* arg) {
wbuf
[
2
]
=
0x3
;
NetServer
::
SendBufferToPlayer
(
sd
->
players
[
0
],
STOC_GAME_MSG
,
wbuf
,
3
);
NetServer
::
ReSendToPlayer
(
sd
->
players
[
1
]);
NetServer
::
ReSendToPlayer
(
sd
->
players
[
2
]);
NetServer
::
ReSendToPlayer
(
sd
->
players
[
3
]);
sd
->
EndDuel
();
sd
->
DuelEndProc
();
event_del
(
sd
->
etimer
);
...
...
ocgcore/processor.cpp
View file @
dfce1705
...
...
@@ -3519,6 +3519,8 @@ int32 field::process_turn(uint16 step, uint8 turn_player) {
(
*
rit
)
->
recharge
();
infos
.
turn_id
++
;
infos
.
turn_player
=
turn_player
;
if
(
core
.
duel_options
&
DUEL_TAG_MODE
)
tag_swap
(
turn_player
);
pduel
->
write_buffer8
(
MSG_NEW_TURN
);
pduel
->
write_buffer8
(
turn_player
);
if
(
is_player_affected_by_effect
(
infos
.
turn_player
,
EFFECT_SKIP_TURN
))
{
...
...
strings.conf
View file @
dfce1705
...
...
@@ -309,9 +309,9 @@
!
system
1349
录像信息:
!
system
1350
离开
!
system
1351
投降
!
system
1390
等待
对方
行动中...
!
system
1391
等待
对方
行动中....
!
system
1392
等待
对方
行动中.....
!
system
1390
等待行动中...
!
system
1391
等待行动中....
!
system
1392
等待行动中.....
!
system
1400
无法连接到主机。
!
system
1401
连接已断开。
!
system
1402
网络传输发生错误。
...
...
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