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
2304847f
Commit
2304847f
authored
May 07, 2012
by
argon.sun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix
parent
c8cc0f34
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
128 additions
and
59 deletions
+128
-59
gframe/duelclient.cpp
gframe/duelclient.cpp
+1
-1
gframe/tag_duel.cpp
gframe/tag_duel.cpp
+124
-56
gframe/tag_duel.h
gframe/tag_duel.h
+1
-0
script/c89882100.lua
script/c89882100.lua
+1
-1
system.conf
system.conf
+1
-1
No files found.
gframe/duelclient.cpp
View file @
2304847f
...
...
@@ -2122,7 +2122,7 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
case
MSG_LPUPDATE
:
{
int
player
=
mainGame
->
LocalPlayer
(
BufferIO
::
ReadInt8
(
pbuf
));
int
val
=
BufferIO
::
ReadInt32
(
pbuf
);
mainGame
->
lpd
=
(
val
-
mainGame
->
dInfo
.
lp
[
player
]
)
/
10
;
mainGame
->
lpd
=
(
mainGame
->
dInfo
.
lp
[
player
]
-
val
)
/
10
;
mainGame
->
lpplayer
=
player
;
mainGame
->
lpframe
=
10
;
mainGame
->
WaitFrameSignal
(
11
);
...
...
gframe/tag_duel.cpp
View file @
2304847f
...
...
@@ -178,6 +178,22 @@ void TagDuel::ToDuelist(DuelPlayer* dp) {
sctc
.
type
=
(
dp
==
host_player
?
0x10
:
0
)
|
dp
->
type
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_TYPE_CHANGE
,
sctc
);
}
else
{
uint8
dptype
=
(
dp
->
type
+
1
)
%
4
;
while
(
players
[
dptype
])
dptype
=
(
dp
->
type
+
1
)
%
4
;
STOC_HT_PlayerChange
scpc
;
scpc
.
status
=
(
dp
->
type
<<
4
)
|
dptype
;
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
])
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_HT_PLAYER_CHANGE
,
scpc
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_HT_PLAYER_CHANGE
,
scpc
);
STOC_TypeChange
sctc
;
sctc
.
type
=
(
dp
==
host_player
?
0x10
:
0
)
|
dp
->
type
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_TYPE_CHANGE
,
sctc
);
players
[
dptype
]
=
dp
;
players
[
dp
->
type
]
=
0
;
dp
->
type
=
dptype
;
}
}
...
...
@@ -186,10 +202,9 @@ void TagDuel::ToObserver(DuelPlayer* dp) {
return
;
STOC_HT_PlayerChange
scpc
;
scpc
.
status
=
(
dp
->
type
<<
4
)
|
PLAYERCHANGE_OBSERVE
;
if
(
players
[
0
])
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_HT_PLAYER_CHANGE
,
scpc
);
if
(
players
[
1
])
NetServer
::
SendPacketToPlayer
(
players
[
1
],
STOC_HT_PLAYER_CHANGE
,
scpc
);
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
])
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_HT_PLAYER_CHANGE
,
scpc
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_HT_PLAYER_CHANGE
,
scpc
);
players
[
dp
->
type
]
=
0
;
...
...
@@ -200,9 +215,7 @@ void TagDuel::ToObserver(DuelPlayer* dp) {
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_TYPE_CHANGE
,
sctc
);
}
void
TagDuel
::
PlayerReady
(
DuelPlayer
*
dp
,
bool
is_ready
)
{
if
(
dp
->
type
>
3
)
return
;
if
(
ready
[
dp
->
type
]
==
is_ready
)
if
(
dp
->
type
>
3
||
ready
[
dp
->
type
]
==
is_ready
)
return
;
if
(
is_ready
)
{
bool
allow_ocg
=
host_info
.
rule
==
0
||
host_info
.
rule
==
2
;
...
...
@@ -222,8 +235,9 @@ void TagDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
ready
[
dp
->
type
]
=
is_ready
;
STOC_HT_PlayerChange
scpc
;
scpc
.
status
=
(
dp
->
type
<<
4
)
|
(
is_ready
?
PLAYERCHANGE_READY
:
PLAYERCHANGE_NOTREADY
);
if
(
players
[
1
-
dp
->
type
])
NetServer
::
SendPacketToPlayer
(
players
[
1
-
dp
->
type
],
STOC_HT_PLAYER_CHANGE
,
scpc
);
for
(
int
i
=
0
;
i
<
4
;
++
i
)
if
(
players
[
i
]
&&
players
[
i
]
!=
dp
)
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_HT_PLAYER_CHANGE
,
scpc
);
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_HT_PLAYER_CHANGE
,
scpc
);
}
...
...
@@ -243,55 +257,58 @@ void TagDuel::UpdateDeck(DuelPlayer* dp, void* pdata) {
void
TagDuel
::
StartDuel
(
DuelPlayer
*
dp
)
{
if
(
dp
!=
host_player
)
return
;
if
(
!
ready
[
0
]
||
!
ready
[
1
])
if
(
!
ready
[
0
]
||
!
ready
[
1
]
||
!
ready
[
2
]
||
!
ready
[
3
]
)
return
;
NetServer
::
StopListen
();
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_DUEL_START
);
NetServer
::
ReSendToPlayer
(
players
[
1
]
);
for
(
int
i
=
0
;
i
<
4
;
++
i
)
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_DUEL_START
);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
{
(
*
oit
)
->
state
=
CTOS_LEAVE_GAME
;
NetServer
::
ReSendToPlayer
(
*
oit
);
}
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_SELECT_HAND
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
hand_result
[
0
]
=
0
;
hand_result
[
1
]
=
0
;
players
[
0
]
->
state
=
CTOS_HAND_RESULT
;
players
[
1
]
->
state
=
CTOS_HAND_RESULT
;
players
[
2
]
->
state
=
CTOS_HAND_RESULT
;
}
void
TagDuel
::
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
{
if
(
res
>
3
)
if
(
res
>
3
||
dp
->
state
!=
CTOS_HAND_RESULT
)
return
;
if
(
dp
->
state
!=
CTOS_HAND_RESULT
)
return
;
hand_result
[
dp
->
type
]
=
res
;
if
(
dp
->
type
==
0
)
hand_result
[
0
]
=
res
;
else
hand_result
[
1
]
=
res
;
if
(
hand_result
[
0
]
&&
hand_result
[
1
])
{
STOC_HandResult
schr
;
schr
.
res1
=
hand_result
[
0
];
schr
.
res2
=
hand_result
[
1
];
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_HAND_RESULT
,
schr
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
schr
.
res1
=
hand_result
[
1
];
schr
.
res2
=
hand_result
[
0
];
NetServer
::
SendPacketToPlayer
(
players
[
1
],
STOC_HAND_RESULT
,
schr
);
NetServer
::
SendPacketToPlayer
(
players
[
2
],
STOC_HAND_RESULT
,
schr
);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
if
(
hand_result
[
0
]
==
hand_result
[
1
])
{
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_SELECT_HAND
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
hand_result
[
0
]
=
0
;
hand_result
[
1
]
=
0
;
players
[
0
]
->
state
=
CTOS_HAND_RESULT
;
players
[
1
]
->
state
=
CTOS_HAND_RESULT
;
players
[
2
]
->
state
=
CTOS_HAND_RESULT
;
}
else
if
((
hand_result
[
0
]
==
1
&&
hand_result
[
1
]
==
2
)
||
(
hand_result
[
0
]
==
2
&&
hand_result
[
1
]
==
3
)
||
(
hand_result
[
0
]
==
3
&&
hand_result
[
1
]
==
1
))
{
NetServer
::
SendPacketToPlayer
(
players
[
1
],
CTOS_TP_RESULT
);
NetServer
::
SendPacketToPlayer
(
players
[
2
],
CTOS_TP_RESULT
);
tp_player
=
1
;
players
[
0
]
->
state
=
0xff
;
players
[
1
]
->
state
=
CTOS_TP_RESULT
;
players
[
2
]
->
state
=
CTOS_TP_RESULT
;
}
else
{
NetServer
::
SendPacketToPlayer
(
players
[
0
],
CTOS_TP_RESULT
);
players
[
1
]
->
state
=
0xff
;
players
[
2
]
->
state
=
0xff
;
players
[
0
]
->
state
=
CTOS_TP_RESULT
;
tp_player
=
0
;
}
...
...
@@ -304,15 +321,17 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
mtrandom
rnd
;
pplayer
[
0
]
=
players
[
0
];
pplayer
[
1
]
=
players
[
1
];
if
((
tp
&&
dp
->
type
==
1
)
||
(
!
tp
&&
dp
->
type
==
0
))
{
DuelPlayer
*
p
=
players
[
0
];
players
[
0
]
=
players
[
1
];
players
[
1
]
=
p
;
pplayer
[
2
]
=
players
[
2
];
pplayer
[
3
]
=
players
[
3
];
if
((
tp
&&
dp
->
type
==
2
)
||
(
!
tp
&&
dp
->
type
==
0
))
{
std
::
swap
(
players
[
0
],
players
[
2
]);
std
::
swap
(
players
[
1
],
players
[
3
]);
players
[
0
]
->
type
=
0
;
players
[
1
]
->
type
=
1
;
Deck
d
=
pdeck
[
0
];
pdeck
[
0
]
=
pdeck
[
1
];
pdeck
[
1
]
=
d
;
players
[
2
]
->
type
=
2
;
players
[
3
]
->
type
=
3
;
std
::
swap
(
pdeck
[
0
],
pdeck
[
2
]);
std
::
swap
(
pdeck
[
1
],
pdeck
[
3
]);
swapped
=
true
;
}
dp
->
state
=
CTOS_RESPONSE
;
...
...
@@ -354,11 +373,13 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
opt
|=
DUEL_ENABLE_PRIORITY
;
if
(
host_info
.
no_shuffle_deck
)
opt
|=
DUEL_PSEUDO_SHUFFLE
;
opt
|=
DUEL_TAG_MODE
;
last_replay
.
WriteInt32
(
host_info
.
start_lp
,
false
);
last_replay
.
WriteInt32
(
host_info
.
start_hand
,
false
);
last_replay
.
WriteInt32
(
host_info
.
draw_count
,
false
);
last_replay
.
WriteInt32
(
opt
,
false
);
last_replay
.
Flush
();
//
last_replay
.
WriteInt32
(
pdeck
[
0
].
main
.
size
(),
false
);
for
(
int
i
=
pdeck
[
0
].
main
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
new_card
(
pduel
,
pdeck
[
0
].
main
[
i
]
->
first
,
0
,
0
,
LOCATION_DECK
,
0
,
0
);
...
...
@@ -369,16 +390,39 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
new_card
(
pduel
,
pdeck
[
0
].
extra
[
i
]
->
first
,
0
,
0
,
LOCATION_EXTRA
,
0
,
0
);
last_replay
.
WriteInt32
(
pdeck
[
0
].
extra
[
i
]
->
first
,
false
);
}
//
last_replay
.
WriteInt32
(
pdeck
[
1
].
main
.
size
(),
false
);
for
(
int
i
=
pdeck
[
1
].
main
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
new_
card
(
pduel
,
pdeck
[
1
].
main
[
i
]
->
first
,
1
,
1
,
LOCATION_DECK
,
0
,
0
);
new_
tag_card
(
pduel
,
pdeck
[
1
].
main
[
i
]
->
first
,
0
,
LOCATION_DECK
);
last_replay
.
WriteInt32
(
pdeck
[
1
].
main
[
i
]
->
first
,
false
);
}
last_replay
.
WriteInt32
(
pdeck
[
1
].
extra
.
size
(),
false
);
for
(
int
i
=
pdeck
[
1
].
extra
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
new_
card
(
pduel
,
pdeck
[
1
].
extra
[
i
]
->
first
,
1
,
1
,
LOCATION_EXTRA
,
0
,
0
);
new_
tag_card
(
pduel
,
pdeck
[
1
].
extra
[
i
]
->
first
,
0
,
LOCATION_EXTRA
);
last_replay
.
WriteInt32
(
pdeck
[
1
].
extra
[
i
]
->
first
,
false
);
}
//
last_replay
.
WriteInt32
(
pdeck
[
2
].
main
.
size
(),
false
);
for
(
int
i
=
pdeck
[
2
].
main
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
new_card
(
pduel
,
pdeck
[
2
].
main
[
i
]
->
first
,
1
,
1
,
LOCATION_DECK
,
0
,
0
);
last_replay
.
WriteInt32
(
pdeck
[
2
].
main
[
i
]
->
first
,
false
);
}
last_replay
.
WriteInt32
(
pdeck
[
2
].
extra
.
size
(),
false
);
for
(
int
i
=
pdeck
[
2
].
extra
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
new_card
(
pduel
,
pdeck
[
2
].
extra
[
i
]
->
first
,
1
,
1
,
LOCATION_EXTRA
,
0
,
0
);
last_replay
.
WriteInt32
(
pdeck
[
2
].
extra
[
i
]
->
first
,
false
);
}
//
last_replay
.
WriteInt32
(
pdeck
[
3
].
main
.
size
(),
false
);
for
(
int
i
=
pdeck
[
3
].
main
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
new_tag_card
(
pduel
,
pdeck
[
3
].
main
[
i
]
->
first
,
0
,
LOCATION_DECK
);
last_replay
.
WriteInt32
(
pdeck
[
3
].
main
[
i
]
->
first
,
false
);
}
last_replay
.
WriteInt32
(
pdeck
[
3
].
extra
.
size
(),
false
);
for
(
int
i
=
pdeck
[
3
].
extra
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
new_tag_card
(
pduel
,
pdeck
[
3
].
extra
[
i
]
->
first
,
0
,
LOCATION_EXTRA
);
last_replay
.
WriteInt32
(
pdeck
[
3
].
extra
[
i
]
->
first
,
false
);
}
last_replay
.
Flush
();
char
startbuf
[
32
],
*
pbuf
=
startbuf
;
BufferIO
::
WriteInt8
(
pbuf
,
MSG_START
);
...
...
@@ -390,15 +434,15 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
BufferIO
::
WriteInt16
(
pbuf
,
query_field_count
(
pduel
,
1
,
0x1
));
BufferIO
::
WriteInt16
(
pbuf
,
query_field_count
(
pduel
,
1
,
0x40
));
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
startbuf
,
18
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
startbuf
[
1
]
=
1
;
NetServer
::
SendBufferToPlayer
(
players
[
1
],
STOC_GAME_MSG
,
startbuf
,
18
);
NetServer
::
SendBufferToPlayer
(
players
[
2
],
STOC_GAME_MSG
,
startbuf
,
18
);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
if
(
!
swapped
)
startbuf
[
1
]
=
0x10
;
else
startbuf
[
1
]
=
0x11
;
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
SendBufferToPlayer
(
*
oit
,
STOC_GAME_MSG
,
startbuf
,
18
);
RefreshExtra
(
0
);
RefreshExtra
(
1
);
start_duel
(
pduel
,
opt
);
Process
();
}
...
...
@@ -423,6 +467,8 @@ void TagDuel::Process() {
void
TagDuel
::
DuelEndProc
()
{
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_DUEL_END
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
NetServer
::
StopServer
();
...
...
@@ -439,7 +485,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
switch
(
engType
)
{
case
MSG_RETRY
:
{
WaitforResponse
(
last_response
);
NetServer
::
SendBufferToPlayer
(
players
[
last_response
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
last_response
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_HINT
:
{
...
...
@@ -453,14 +499,16 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case
4
:
case
5
:
case
10
:
{
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
break
;
}
case
6
:
case
7
:
case
8
:
case
9
:
{
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
;
...
...
@@ -473,6 +521,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
type
=
BufferIO
::
ReadInt8
(
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
);
EndDuel
();
...
...
@@ -491,7 +541,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
RefreshHand
(
0
);
RefreshHand
(
1
);
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_SELECT_IDLECMD
:
{
...
...
@@ -515,21 +565,21 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
RefreshHand
(
0
);
RefreshHand
(
1
);
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_SELECT_EFFECTYN
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
8
;
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_SELECT_YESNO
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
4
;
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_SELECT_OPTION
:
{
...
...
@@ -537,7 +587,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
count
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
count
*
4
;
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_SELECT_CARD
:
...
...
@@ -556,7 +606,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
if
(
c
!=
player
)
BufferIO
::
WriteInt32
(
pbufw
,
0
);
}
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_SELECT_CHAIN
:
{
...
...
@@ -564,7 +614,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
count
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
10
+
count
*
11
;
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_SELECT_PLACE
:
...
...
@@ -572,14 +622,14 @@ 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_SELECT_POSITION
:
{
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_SELECT_COUNTER
:
{
...
...
@@ -588,7 +638,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
count
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
count
*
8
;
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_SELECT_SUM
:
{
...
...
@@ -598,7 +648,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
count
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
count
*
11
;
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_SORT_CARD
:
...
...
@@ -607,7 +657,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
count
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
count
*
7
;
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_CONFIRM_DECKTOP
:
{
...
...
@@ -616,6 +666,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
count
*
7
;
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
;
...
...
@@ -625,13 +677,15 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
count
=
BufferIO
::
ReadInt8
(
pbuf
);
if
(
pbuf
[
5
]
==
LOCATION_HAND
)
{
pbuf
+=
count
*
7
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
-
player
]);
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
{
pbuf
+=
count
*
7
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
}
break
;
}
...
...
@@ -639,6 +693,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
player
=
BufferIO
::
ReadInt8
(
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
;
...
...
@@ -646,10 +702,12 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case
MSG_SHUFFLE_HAND
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
ReadInt8
(
pbuf
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
(
pbuf
-
offset
)
+
count
*
4
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
offset
,
(
pbuf
-
offset
)
+
count
*
4
);
for
(
int
i
=
0
;
i
<
count
;
++
i
)
BufferIO
::
WriteInt32
(
pbuf
,
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
);
RefreshHand
(
player
,
0x181fff
,
0
);
...
...
@@ -659,6 +717,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
;
...
...
@@ -667,6 +727,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
player
=
BufferIO
::
ReadInt8
(
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
);
RefreshGrave
(
player
);
...
...
@@ -675,6 +737,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case
MSG_REVERSE_DECK
:
{
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
;
...
...
@@ -683,6 +747,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
;
...
...
@@ -692,6 +758,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
count
*
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
);
RefreshMzone
(
0
,
0x181fff
,
0
);
...
...
gframe/tag_duel.h
View file @
2304847f
...
...
@@ -44,6 +44,7 @@ public:
protected:
DuelPlayer
*
players
[
4
];
DuelPlayer
*
pplayer
[
4
];
DuelPlayer
*
cur_player
[
2
];
std
::
set
<
DuelPlayer
*>
observers
;
bool
ready
[
4
];
Deck
pdeck
[
4
];
...
...
script/c89882100.lua
View file @
2304847f
...
...
@@ -23,7 +23,7 @@ function c89882100.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
end
function
c89882100
.
activate
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
)
local
tc
=
Duel
.
GetFirstTarget
()
if
tc
:
IsRelateToEffect
(
e
)
then
if
tc
:
Is
Facedown
()
and
tc
:
Is
RelateToEffect
(
e
)
then
Duel
.
Destroy
(
tc
,
REASON_EFFECT
)
end
end
...
...
system.conf
View file @
2304847f
...
...
@@ -5,7 +5,7 @@ antialias = 2
errorlog
=
1
nickname
=
Player
gamename
=
Game
lastdeck
=
sample
lastdeck
=
T1
textfont
=
c
:/
windows
/
fonts
/
simsun
.
ttc
14
numfont
=
c
:/
windows
/
fonts
/
arialbd
.
ttf
serverport
=
7911
...
...
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