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
d9f8f64b
Commit
d9f8f64b
authored
Jul 07, 2019
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://github.com/Fluorohydride/ygopro
parents
7facf87d
6641bb30
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
267 additions
and
220 deletions
+267
-220
gframe/CGUIImageButton.cpp
gframe/CGUIImageButton.cpp
+23
-0
gframe/CGUIImageButton.h
gframe/CGUIImageButton.h
+4
-0
gframe/client_field.cpp
gframe/client_field.cpp
+4
-64
gframe/client_field.h
gframe/client_field.h
+2
-5
gframe/duelclient.cpp
gframe/duelclient.cpp
+107
-44
gframe/duelclient.h
gframe/duelclient.h
+5
-0
gframe/event_handler.cpp
gframe/event_handler.cpp
+4
-4
gframe/game.cpp
gframe/game.cpp
+7
-7
gframe/netserver.cpp
gframe/netserver.cpp
+1
-1
gframe/network.h
gframe/network.h
+10
-2
gframe/replay_mode.cpp
gframe/replay_mode.cpp
+14
-16
gframe/single_duel.cpp
gframe/single_duel.cpp
+40
-33
gframe/single_duel.h
gframe/single_duel.h
+1
-2
gframe/single_mode.cpp
gframe/single_mode.cpp
+7
-18
gframe/tag_duel.cpp
gframe/tag_duel.cpp
+22
-18
gframe/tag_duel.h
gframe/tag_duel.h
+1
-2
ocgcore
ocgcore
+1
-1
script
script
+1
-1
strings.conf
strings.conf
+13
-2
No files found.
gframe/CGUIImageButton.cpp
View file @
d9f8f64b
...
@@ -97,8 +97,10 @@ void Draw2DImageQuad(video::IVideoDriver* driver, video::ITexture* image, core::
...
@@ -97,8 +97,10 @@ void Draw2DImageQuad(video::IVideoDriver* driver, video::ITexture* image, core::
CGUIImageButton
::
CGUIImageButton
(
IGUIEnvironment
*
environment
,
IGUIElement
*
parent
,
s32
id
,
core
::
rect
<
s32
>
rectangle
)
CGUIImageButton
::
CGUIImageButton
(
IGUIEnvironment
*
environment
,
IGUIElement
*
parent
,
s32
id
,
core
::
rect
<
s32
>
rectangle
)
:
CGUIButton
(
environment
,
parent
,
id
,
rectangle
)
{
:
CGUIButton
(
environment
,
parent
,
id
,
rectangle
)
{
isDrawImage
=
true
;
isDrawImage
=
true
;
isFixedSize
=
false
;
imageRotation
=
0.0
f
;
imageRotation
=
0.0
f
;
imageScale
=
core
::
vector2df
(
1.0
f
,
1.0
f
);
imageScale
=
core
::
vector2df
(
1.0
f
,
1.0
f
);
imageSize
=
core
::
dimension2di
(
rectangle
.
getWidth
(),
rectangle
.
getHeight
());
}
}
CGUIImageButton
*
CGUIImageButton
::
addImageButton
(
IGUIEnvironment
*
env
,
const
core
::
rect
<
s32
>&
rectangle
,
IGUIElement
*
parent
,
s32
id
)
{
CGUIImageButton
*
CGUIImageButton
::
addImageButton
(
IGUIEnvironment
*
env
,
const
core
::
rect
<
s32
>&
rectangle
,
IGUIElement
*
parent
,
s32
id
)
{
CGUIImageButton
*
button
=
new
CGUIImageButton
(
env
,
parent
?
parent
:
0
,
id
,
rectangle
);
CGUIImageButton
*
button
=
new
CGUIImageButton
(
env
,
parent
?
parent
:
0
,
id
,
rectangle
);
...
@@ -129,6 +131,23 @@ void CGUIImageButton::draw() {
...
@@ -129,6 +131,23 @@ void CGUIImageButton::draw() {
irr
::
gui
::
Draw2DImageRotation
(
driver
,
Image
,
ImageRect
,
pos
,
center
,
imageRotation
,
imageScale
);
irr
::
gui
::
Draw2DImageRotation
(
driver
,
Image
,
ImageRect
,
pos
,
center
,
imageRotation
,
imageScale
);
IGUIElement
::
draw
();
IGUIElement
::
draw
();
}
}
void
CGUIImageButton
::
setImage
(
video
::
ITexture
*
image
)
{
if
(
image
)
image
->
grab
();
if
(
Image
)
Image
->
drop
();
Image
=
image
;
if
(
image
)
{
ImageRect
=
core
::
rect
<
s32
>
(
core
::
position2d
<
s32
>
(
0
,
0
),
image
->
getOriginalSize
());
if
(
isFixedSize
)
imageScale
=
core
::
vector2df
((
irr
::
f32
)
imageSize
.
Width
/
image
->
getSize
().
Width
,
(
irr
::
f32
)
imageSize
.
Height
/
image
->
getSize
().
Height
);
}
if
(
!
PressedImage
)
setPressedImage
(
Image
);
}
void
CGUIImageButton
::
setDrawImage
(
bool
b
)
{
void
CGUIImageButton
::
setDrawImage
(
bool
b
)
{
isDrawImage
=
b
;
isDrawImage
=
b
;
}
}
...
@@ -138,6 +157,10 @@ void CGUIImageButton::setImageRotation(f32 r) {
...
@@ -138,6 +157,10 @@ void CGUIImageButton::setImageRotation(f32 r) {
void
CGUIImageButton
::
setImageScale
(
core
::
vector2df
s
)
{
void
CGUIImageButton
::
setImageScale
(
core
::
vector2df
s
)
{
imageScale
=
s
;
imageScale
=
s
;
}
}
void
CGUIImageButton
::
setImageSize
(
core
::
dimension2di
s
)
{
isFixedSize
=
true
;
imageSize
=
s
;
}
IGUIFont
*
CGUIImageButton
::
getOverrideFont
(
void
)
const
IGUIFont
*
CGUIImageButton
::
getOverrideFont
(
void
)
const
{
{
...
...
gframe/CGUIImageButton.h
View file @
d9f8f64b
...
@@ -17,16 +17,20 @@ public:
...
@@ -17,16 +17,20 @@ public:
CGUIImageButton
(
IGUIEnvironment
*
environment
,
IGUIElement
*
parent
,
s32
id
,
core
::
rect
<
s32
>
rectangle
);
CGUIImageButton
(
IGUIEnvironment
*
environment
,
IGUIElement
*
parent
,
s32
id
,
core
::
rect
<
s32
>
rectangle
);
static
CGUIImageButton
*
addImageButton
(
IGUIEnvironment
*
env
,
const
core
::
rect
<
s32
>&
rectangle
,
IGUIElement
*
parent
,
s32
id
);
static
CGUIImageButton
*
addImageButton
(
IGUIEnvironment
*
env
,
const
core
::
rect
<
s32
>&
rectangle
,
IGUIElement
*
parent
,
s32
id
);
virtual
void
draw
();
virtual
void
draw
();
virtual
void
setImage
(
video
::
ITexture
*
image
=
0
);
virtual
void
setDrawImage
(
bool
b
);
virtual
void
setDrawImage
(
bool
b
);
virtual
void
setImageRotation
(
f32
r
);
virtual
void
setImageRotation
(
f32
r
);
virtual
void
setImageScale
(
core
::
vector2df
s
);
virtual
void
setImageScale
(
core
::
vector2df
s
);
virtual
void
setImageSize
(
core
::
dimension2di
s
);
virtual
IGUIFont
*
getOverrideFont
(
void
)
const
;
virtual
IGUIFont
*
getOverrideFont
(
void
)
const
;
virtual
IGUIFont
*
getActiveFont
()
const
;
virtual
IGUIFont
*
getActiveFont
()
const
;
private:
private:
bool
isDrawImage
;
bool
isDrawImage
;
bool
isFixedSize
;
f32
imageRotation
;
f32
imageRotation
;
core
::
vector2df
imageScale
;
core
::
vector2df
imageScale
;
core
::
dimension2di
imageSize
;
};
};
}
}
...
...
gframe/client_field.cpp
View file @
d9f8f64b
...
@@ -1271,13 +1271,6 @@ bool ClientField::check_sum(std::set<ClientCard*>::const_iterator index, std::se
...
@@ -1271,13 +1271,6 @@ bool ClientField::check_sum(std::set<ClientCard*>::const_iterator index, std::se
||
check_sum
(
index
,
end
,
acc
,
count
);
||
check_sum
(
index
,
end
,
acc
,
count
);
}
}
template
<
class
T
>
template
<
class
T
>
static
bool
is_declarable
(
T
const
&
cd
,
int
declarable_type
)
{
if
(
!
(
cd
.
type
&
declarable_type
))
return
false
;
return
cd
.
code
==
CARD_MARINE_DOLPHIN
||
cd
.
code
==
CARD_TWINKLE_MOSS
||
(
!
cd
.
alias
&&
(
cd
.
type
&
(
TYPE_MONSTER
+
TYPE_TOKEN
))
!=
(
TYPE_MONSTER
+
TYPE_TOKEN
));
}
template
<
class
T
>
static
bool
is_declarable
(
T
const
&
cd
,
const
std
::
vector
<
int
>&
opcode
)
{
static
bool
is_declarable
(
T
const
&
cd
,
const
std
::
vector
<
int
>&
opcode
)
{
std
::
stack
<
int
>
stack
;
std
::
stack
<
int
>
stack
;
for
(
auto
it
=
opcode
.
begin
();
it
!=
opcode
.
end
();
++
it
)
{
for
(
auto
it
=
opcode
.
begin
();
it
!=
opcode
.
end
();
++
it
)
{
...
@@ -1418,59 +1411,12 @@ static bool is_declarable(T const& cd, const std::vector<int>& opcode) {
...
@@ -1418,59 +1411,12 @@ static bool is_declarable(T const& cd, const std::vector<int>& opcode) {
return
cd
.
code
==
CARD_MARINE_DOLPHIN
||
cd
.
code
==
CARD_TWINKLE_MOSS
return
cd
.
code
==
CARD_MARINE_DOLPHIN
||
cd
.
code
==
CARD_TWINKLE_MOSS
||
(
!
cd
.
alias
&&
(
cd
.
type
&
(
TYPE_MONSTER
+
TYPE_TOKEN
))
!=
(
TYPE_MONSTER
+
TYPE_TOKEN
));
||
(
!
cd
.
alias
&&
(
cd
.
type
&
(
TYPE_MONSTER
+
TYPE_TOKEN
))
!=
(
TYPE_MONSTER
+
TYPE_TOKEN
));
}
}
void
ClientField
::
UpdateDeclarableCodeType
()
{
void
ClientField
::
UpdateDeclarableList
()
{
const
wchar_t
*
pname
=
mainGame
->
ebANCard
->
getText
();
int
trycode
=
BufferIO
::
GetVal
(
pname
);
CardString
cstr
;
CardData
cd
;
if
(
dataManager
.
GetString
(
trycode
,
&
cstr
)
&&
dataManager
.
GetData
(
trycode
,
&
cd
)
&&
is_declarable
(
cd
,
declarable_type
))
{
mainGame
->
lstANCard
->
clear
();
ancard
.
clear
();
mainGame
->
lstANCard
->
addItem
(
cstr
.
name
.
c_str
());
ancard
.
push_back
(
trycode
);
return
;
}
if
(
pname
[
0
]
==
0
)
{
std
::
vector
<
int
>
cache
;
cache
.
swap
(
ancard
);
int
sel
=
mainGame
->
lstANCard
->
getSelected
();
int
selcode
=
(
sel
==
-
1
)
?
0
:
cache
[
sel
];
mainGame
->
lstANCard
->
clear
();
for
(
const
auto
&
trycode
:
cache
)
{
if
(
dataManager
.
GetString
(
trycode
,
&
cstr
)
&&
dataManager
.
GetData
(
trycode
,
&
cd
)
&&
is_declarable
(
cd
,
declarable_type
))
{
ancard
.
push_back
(
trycode
);
mainGame
->
lstANCard
->
addItem
(
cstr
.
name
.
c_str
());
if
(
trycode
==
selcode
)
mainGame
->
lstANCard
->
setSelected
(
cstr
.
name
.
c_str
());
}
}
if
(
!
ancard
.
empty
())
return
;
}
mainGame
->
lstANCard
->
clear
();
ancard
.
clear
();
for
(
auto
cit
=
dataManager
.
_strings
.
begin
();
cit
!=
dataManager
.
_strings
.
end
();
++
cit
)
{
if
(
cit
->
second
.
name
.
find
(
pname
)
!=
std
::
wstring
::
npos
)
{
auto
cp
=
dataManager
.
GetCodePointer
(
cit
->
first
);
//verified by _strings
//datas.alias can be double card names or alias
if
(
is_declarable
(
cp
->
second
,
declarable_type
))
{
if
(
pname
==
cit
->
second
.
name
)
{
//exact match
mainGame
->
lstANCard
->
insertItem
(
0
,
cit
->
second
.
name
.
c_str
(),
-
1
);
ancard
.
insert
(
ancard
.
begin
(),
cit
->
first
);
}
else
{
mainGame
->
lstANCard
->
addItem
(
cit
->
second
.
name
.
c_str
());
ancard
.
push_back
(
cit
->
first
);
}
}
}
}
}
void
ClientField
::
UpdateDeclarableCodeOpcode
()
{
const
wchar_t
*
pname
=
mainGame
->
ebANCard
->
getText
();
const
wchar_t
*
pname
=
mainGame
->
ebANCard
->
getText
();
int
trycode
=
BufferIO
::
GetVal
(
pname
);
int
trycode
=
BufferIO
::
GetVal
(
pname
);
CardString
cstr
;
CardString
cstr
;
CardData
cd
;
CardData
cd
;
if
(
dataManager
.
GetString
(
trycode
,
&
cstr
)
&&
dataManager
.
GetData
(
trycode
,
&
cd
)
&&
is_declarable
(
cd
,
opcode
))
{
if
(
dataManager
.
GetString
(
trycode
,
&
cstr
)
&&
dataManager
.
GetData
(
trycode
,
&
cd
)
&&
is_declarable
(
cd
,
declare_opcodes
))
{
mainGame
->
lstANCard
->
clear
();
mainGame
->
lstANCard
->
clear
();
ancard
.
clear
();
ancard
.
clear
();
mainGame
->
lstANCard
->
addItem
(
cstr
.
name
.
c_str
());
mainGame
->
lstANCard
->
addItem
(
cstr
.
name
.
c_str
());
...
@@ -1484,7 +1430,7 @@ void ClientField::UpdateDeclarableCodeOpcode() {
...
@@ -1484,7 +1430,7 @@ void ClientField::UpdateDeclarableCodeOpcode() {
int
selcode
=
(
sel
==
-
1
)
?
0
:
cache
[
sel
];
int
selcode
=
(
sel
==
-
1
)
?
0
:
cache
[
sel
];
mainGame
->
lstANCard
->
clear
();
mainGame
->
lstANCard
->
clear
();
for
(
const
auto
&
trycode
:
cache
)
{
for
(
const
auto
&
trycode
:
cache
)
{
if
(
dataManager
.
GetString
(
trycode
,
&
cstr
)
&&
dataManager
.
GetData
(
trycode
,
&
cd
)
&&
is_declarable
(
cd
,
opcode
))
{
if
(
dataManager
.
GetString
(
trycode
,
&
cstr
)
&&
dataManager
.
GetData
(
trycode
,
&
cd
)
&&
is_declarable
(
cd
,
declare_opcodes
))
{
ancard
.
push_back
(
trycode
);
ancard
.
push_back
(
trycode
);
mainGame
->
lstANCard
->
addItem
(
cstr
.
name
.
c_str
());
mainGame
->
lstANCard
->
addItem
(
cstr
.
name
.
c_str
());
if
(
trycode
==
selcode
)
if
(
trycode
==
selcode
)
...
@@ -1500,7 +1446,7 @@ void ClientField::UpdateDeclarableCodeOpcode() {
...
@@ -1500,7 +1446,7 @@ void ClientField::UpdateDeclarableCodeOpcode() {
if
(
cit
->
second
.
name
.
find
(
pname
)
!=
std
::
wstring
::
npos
)
{
if
(
cit
->
second
.
name
.
find
(
pname
)
!=
std
::
wstring
::
npos
)
{
auto
cp
=
dataManager
.
GetCodePointer
(
cit
->
first
);
//verified by _strings
auto
cp
=
dataManager
.
GetCodePointer
(
cit
->
first
);
//verified by _strings
//datas.alias can be double card names or alias
//datas.alias can be double card names or alias
if
(
is_declarable
(
cp
->
second
,
opcode
))
{
if
(
is_declarable
(
cp
->
second
,
declare_opcodes
))
{
if
(
pname
==
cit
->
second
.
name
)
{
//exact match
if
(
pname
==
cit
->
second
.
name
)
{
//exact match
mainGame
->
lstANCard
->
insertItem
(
0
,
cit
->
second
.
name
.
c_str
(),
-
1
);
mainGame
->
lstANCard
->
insertItem
(
0
,
cit
->
second
.
name
.
c_str
(),
-
1
);
ancard
.
insert
(
ancard
.
begin
(),
cit
->
first
);
ancard
.
insert
(
ancard
.
begin
(),
cit
->
first
);
...
@@ -1512,10 +1458,4 @@ void ClientField::UpdateDeclarableCodeOpcode() {
...
@@ -1512,10 +1458,4 @@ void ClientField::UpdateDeclarableCodeOpcode() {
}
}
}
}
}
}
void
ClientField
::
UpdateDeclarableCode
()
{
if
(
opcode
.
size
()
==
0
)
UpdateDeclarableCodeType
();
else
UpdateDeclarableCodeOpcode
();
}
}
}
gframe/client_field.h
View file @
d9f8f64b
...
@@ -60,14 +60,13 @@ public:
...
@@ -60,14 +60,13 @@ public:
bool
select_panalmode
;
bool
select_panalmode
;
bool
select_ready
;
bool
select_ready
;
int
announce_count
;
int
announce_count
;
int
declarable_type
;
int
select_counter_count
;
int
select_counter_count
;
int
select_counter_type
;
int
select_counter_type
;
std
::
vector
<
ClientCard
*>
selectable_cards
;
std
::
vector
<
ClientCard
*>
selectable_cards
;
std
::
vector
<
ClientCard
*>
selected_cards
;
std
::
vector
<
ClientCard
*>
selected_cards
;
std
::
set
<
ClientCard
*>
selectsum_cards
;
std
::
set
<
ClientCard
*>
selectsum_cards
;
std
::
vector
<
ClientCard
*>
selectsum_all
;
std
::
vector
<
ClientCard
*>
selectsum_all
;
std
::
vector
<
int
>
opcode
;
std
::
vector
<
int
>
declare_opcodes
;
std
::
vector
<
ClientCard
*>
display_cards
;
std
::
vector
<
ClientCard
*>
display_cards
;
std
::
vector
<
int
>
sort_list
;
std
::
vector
<
int
>
sort_list
;
std
::
map
<
int
,
int
>
player_desc_hints
[
2
];
std
::
map
<
int
,
int
>
player_desc_hints
[
2
];
...
@@ -112,9 +111,7 @@ public:
...
@@ -112,9 +111,7 @@ public:
void
check_sel_sum_t
(
const
std
::
set
<
ClientCard
*>&
left
,
int
acc
);
void
check_sel_sum_t
(
const
std
::
set
<
ClientCard
*>&
left
,
int
acc
);
bool
check_sum
(
std
::
set
<
ClientCard
*>::
const_iterator
index
,
std
::
set
<
ClientCard
*>::
const_iterator
end
,
int
acc
,
int
count
);
bool
check_sum
(
std
::
set
<
ClientCard
*>::
const_iterator
index
,
std
::
set
<
ClientCard
*>::
const_iterator
end
,
int
acc
,
int
count
);
void
UpdateDeclarableCodeType
();
void
UpdateDeclarableList
();
void
UpdateDeclarableCodeOpcode
();
void
UpdateDeclarableCode
();
irr
::
gui
::
IGUIElement
*
panel
;
irr
::
gui
::
IGUIElement
*
panel
;
std
::
vector
<
int
>
ancard
;
std
::
vector
<
int
>
ancard
;
...
...
gframe/duelclient.cpp
View file @
d9f8f64b
...
@@ -23,8 +23,12 @@ bufferevent* DuelClient::client_bev = 0;
...
@@ -23,8 +23,12 @@ bufferevent* DuelClient::client_bev = 0;
char
DuelClient
::
duel_client_read
[
0x2000
];
char
DuelClient
::
duel_client_read
[
0x2000
];
char
DuelClient
::
duel_client_write
[
0x2000
];
char
DuelClient
::
duel_client_write
[
0x2000
];
bool
DuelClient
::
is_closing
=
false
;
bool
DuelClient
::
is_closing
=
false
;
bool
DuelClient
::
is_swapping
=
false
;
int
DuelClient
::
select_hint
=
0
;
int
DuelClient
::
select_hint
=
0
;
int
DuelClient
::
select_unselect_hint
=
0
;
int
DuelClient
::
select_unselect_hint
=
0
;
int
DuelClient
::
last_select_hint
=
0
;
char
DuelClient
::
last_successful_msg
[
2048
];
unsigned
int
DuelClient
::
last_successful_msg_length
=
0
;
wchar_t
DuelClient
::
event_string
[
256
];
wchar_t
DuelClient
::
event_string
[
256
];
mtrandom
DuelClient
::
rnd
;
mtrandom
DuelClient
::
rnd
;
...
@@ -863,6 +867,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -863,6 +867,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
char
*
pbuf
=
msg
;
char
*
pbuf
=
msg
;
wchar_t
textBuffer
[
256
];
wchar_t
textBuffer
[
256
];
mainGame
->
dInfo
.
curMsg
=
BufferIO
::
ReadUInt8
(
pbuf
);
mainGame
->
dInfo
.
curMsg
=
BufferIO
::
ReadUInt8
(
pbuf
);
if
(
mainGame
->
dInfo
.
curMsg
!=
MSG_RETRY
)
{
memcpy
(
last_successful_msg
,
msg
,
len
);
last_successful_msg_length
=
len
;
}
mainGame
->
wCmdMenu
->
setVisible
(
false
);
mainGame
->
wCmdMenu
->
setVisible
(
false
);
if
(
!
mainGame
->
dInfo
.
isReplay
&&
mainGame
->
dInfo
.
curMsg
!=
MSG_WAITING
&&
mainGame
->
dInfo
.
curMsg
!=
MSG_CARD_SELECTED
)
{
if
(
!
mainGame
->
dInfo
.
isReplay
&&
mainGame
->
dInfo
.
curMsg
!=
MSG_WAITING
&&
mainGame
->
dInfo
.
curMsg
!=
MSG_CARD_SELECTED
)
{
mainGame
->
waitFrame
=
-
1
;
mainGame
->
waitFrame
=
-
1
;
...
@@ -882,35 +890,97 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -882,35 +890,97 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
}
}
if
(
mainGame
->
dInfo
.
time_player
==
1
)
if
(
mainGame
->
dInfo
.
time_player
==
1
)
mainGame
->
dInfo
.
time_player
=
2
;
mainGame
->
dInfo
.
time_player
=
2
;
if
(
is_swapping
)
{
mainGame
->
gMutex
.
Lock
();
mainGame
->
dField
.
ReplaySwap
();
mainGame
->
gMutex
.
Unlock
();
is_swapping
=
false
;
}
switch
(
mainGame
->
dInfo
.
curMsg
)
{
switch
(
mainGame
->
dInfo
.
curMsg
)
{
case
MSG_RETRY
:
{
case
MSG_RETRY
:
{
if
(
last_successful_msg_length
)
{
char
*
p
=
last_successful_msg
;
auto
last_msg
=
BufferIO
::
ReadUInt8
(
p
);
int
err_desc
=
1421
;
switch
(
last_msg
)
{
case
MSG_ANNOUNCE_CARD
:
err_desc
=
1422
;
break
;
case
MSG_ANNOUNCE_ATTRIB
:
err_desc
=
1423
;
break
;
case
MSG_ANNOUNCE_RACE
:
err_desc
=
1424
;
break
;
case
MSG_ANNOUNCE_NUMBER
:
err_desc
=
1425
;
break
;
case
MSG_SELECT_EFFECTYN
:
case
MSG_SELECT_YESNO
:
case
MSG_SELECT_OPTION
:
err_desc
=
1426
;
break
;
case
MSG_SELECT_CARD
:
case
MSG_SELECT_UNSELECT_CARD
:
case
MSG_SELECT_TRIBUTE
:
case
MSG_SELECT_SUM
:
case
MSG_SORT_CARD
:
err_desc
=
1427
;
break
;
case
MSG_SELECT_CHAIN
:
err_desc
=
1428
;
break
;
case
MSG_SELECT_PLACE
:
case
MSG_SELECT_DISFIELD
:
err_desc
=
1429
;
break
;
case
MSG_SELECT_POSITION
:
err_desc
=
1430
;
break
;
case
MSG_SELECT_COUNTER
:
err_desc
=
1431
;
break
;
default:
break
;
}
mainGame
->
gMutex
.
Lock
();
mainGame
->
stMessage
->
setText
(
dataManager
.
GetDesc
(
err_desc
));
mainGame
->
PopupElement
(
mainGame
->
wMessage
);
mainGame
->
gMutex
.
Unlock
();
mainGame
->
actionSignal
.
Reset
();
mainGame
->
actionSignal
.
Wait
();
select_hint
=
last_select_hint
;
return
ClientAnalyze
(
last_successful_msg
,
last_successful_msg_length
);
}
mainGame
->
gMutex
.
Lock
();
mainGame
->
gMutex
.
Lock
();
mainGame
->
stMessage
->
setText
(
L"Error occurs."
);
mainGame
->
stMessage
->
setText
(
L"Error occurs."
);
mainGame
->
PopupElement
(
mainGame
->
wMessage
);
mainGame
->
PopupElement
(
mainGame
->
wMessage
);
mainGame
->
gMutex
.
Unlock
();
mainGame
->
gMutex
.
Unlock
();
mainGame
->
actionSignal
.
Reset
();
mainGame
->
actionSignal
.
Reset
();
mainGame
->
actionSignal
.
Wait
();
mainGame
->
actionSignal
.
Wait
();
mainGame
->
closeDoneSignal
.
Reset
();
if
(
!
mainGame
->
dInfo
.
isSingleMode
)
{
mainGame
->
closeSignal
.
Set
();
mainGame
->
closeDoneSignal
.
Reset
();
mainGame
->
closeDoneSignal
.
Wait
();
mainGame
->
closeSignal
.
Set
();
mainGame
->
gMutex
.
Lock
();
mainGame
->
closeDoneSignal
.
Wait
();
mainGame
->
dInfo
.
isStarted
=
false
;
mainGame
->
gMutex
.
Lock
();
mainGame
->
dInfo
.
isFinished
=
false
;
mainGame
->
dInfo
.
isStarted
=
false
;
mainGame
->
btnCreateHost
->
setEnabled
(
true
);
mainGame
->
dInfo
.
isFinished
=
false
;
mainGame
->
btnJoinHost
->
setEnabled
(
true
);
mainGame
->
btnCreateHost
->
setEnabled
(
true
);
mainGame
->
btnJoinCancel
->
setEnabled
(
true
);
mainGame
->
btnJoinHost
->
setEnabled
(
true
);
mainGame
->
btnStartBot
->
setEnabled
(
true
);
mainGame
->
btnJoinCancel
->
setEnabled
(
true
);
mainGame
->
btnBotCancel
->
setEnabled
(
true
);
mainGame
->
btnStartBot
->
setEnabled
(
true
);
mainGame
->
stTip
->
setVisible
(
false
);
mainGame
->
btnBotCancel
->
setEnabled
(
true
);
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
menuHandler
);
mainGame
->
stTip
->
setVisible
(
false
);
if
(
bot_mode
)
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
menuHandler
);
mainGame
->
ShowElement
(
mainGame
->
wSinglePlay
);
if
(
bot_mode
)
else
mainGame
->
ShowElement
(
mainGame
->
wSinglePlay
);
mainGame
->
ShowElement
(
mainGame
->
wLanWindow
);
else
mainGame
->
gMutex
.
Unlock
();
mainGame
->
ShowElement
(
mainGame
->
wLanWindow
);
event_base_loopbreak
(
client_base
);
mainGame
->
gMutex
.
Unlock
();
if
(
exit_on_return
)
event_base_loopbreak
(
client_base
);
mainGame
->
device
->
closeDevice
();
if
(
exit_on_return
)
mainGame
->
device
->
closeDevice
();
}
return
false
;
return
false
;
}
}
case
MSG_HINT
:
{
case
MSG_HINT
:
{
...
@@ -935,6 +1005,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -935,6 +1005,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
}
}
case
HINT_SELECTMSG
:
{
case
HINT_SELECTMSG
:
{
select_hint
=
data
;
select_hint
=
data
;
last_select_hint
=
data
;
break
;
break
;
}
}
case
HINT_OPSELECTED
:
{
case
HINT_OPSELECTED
:
{
...
@@ -1078,6 +1149,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -1078,6 +1149,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame
->
dField
.
Initial
(
mainGame
->
LocalPlayer
(
1
),
deckc
,
extrac
);
mainGame
->
dField
.
Initial
(
mainGame
->
LocalPlayer
(
1
),
deckc
,
extrac
);
mainGame
->
dInfo
.
turn
=
0
;
mainGame
->
dInfo
.
turn
=
0
;
mainGame
->
dInfo
.
is_shuffling
=
false
;
mainGame
->
dInfo
.
is_shuffling
=
false
;
select_hint
=
0
;
select_unselect_hint
=
0
;
last_select_hint
=
0
;
last_successful_msg_length
=
0
;
if
(
mainGame
->
dInfo
.
isReplaySwapped
)
{
if
(
mainGame
->
dInfo
.
isReplaySwapped
)
{
std
::
swap
(
mainGame
->
dInfo
.
hostname
,
mainGame
->
dInfo
.
clientname
);
std
::
swap
(
mainGame
->
dInfo
.
hostname
,
mainGame
->
dInfo
.
clientname
);
std
::
swap
(
mainGame
->
dInfo
.
hostname_tag
,
mainGame
->
dInfo
.
clientname_tag
);
std
::
swap
(
mainGame
->
dInfo
.
hostname_tag
,
mainGame
->
dInfo
.
clientname_tag
);
...
@@ -2093,8 +2168,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -2093,8 +2168,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
}
}
mainGame
->
WaitFrameSignal
(
11
);
mainGame
->
WaitFrameSignal
(
11
);
}
}
for
(
auto
cit
=
mainGame
->
dField
.
hand
[
player
].
begin
();
cit
!=
mainGame
->
dField
.
hand
[
player
].
end
();
++
cit
)
for
(
auto
cit
=
mainGame
->
dField
.
hand
[
player
].
begin
();
cit
!=
mainGame
->
dField
.
hand
[
player
].
end
();
++
cit
)
{
(
*
cit
)
->
SetCode
(
BufferIO
::
ReadInt32
(
pbuf
));
(
*
cit
)
->
SetCode
(
BufferIO
::
ReadInt32
(
pbuf
));
(
*
cit
)
->
desc_hints
.
clear
();
}
if
(
!
mainGame
->
dInfo
.
isReplay
||
!
mainGame
->
dInfo
.
isReplaySkiping
)
{
if
(
!
mainGame
->
dInfo
.
isReplay
||
!
mainGame
->
dInfo
.
isReplaySkiping
)
{
for
(
auto
cit
=
mainGame
->
dField
.
hand
[
player
].
begin
();
cit
!=
mainGame
->
dField
.
hand
[
player
].
end
();
++
cit
)
{
for
(
auto
cit
=
mainGame
->
dField
.
hand
[
player
].
begin
();
cit
!=
mainGame
->
dField
.
hand
[
player
].
end
();
++
cit
)
{
(
*
cit
)
->
is_hovered
=
false
;
(
*
cit
)
->
is_hovered
=
false
;
...
@@ -3399,8 +3476,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -3399,8 +3476,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
}
}
case
MSG_ANNOUNCE_CARD
:
{
case
MSG_ANNOUNCE_CARD
:
{
/*int player = */
mainGame
->
LocalPlayer
(
BufferIO
::
ReadInt8
(
pbuf
));
/*int player = */
mainGame
->
LocalPlayer
(
BufferIO
::
ReadInt8
(
pbuf
));
mainGame
->
dField
.
declarable_type
=
BufferIO
::
ReadInt32
(
pbuf
);
int
count
=
BufferIO
::
ReadUInt8
(
pbuf
);
mainGame
->
dField
.
opcode
.
clear
();
mainGame
->
dField
.
declare_opcodes
.
clear
();
for
(
int
i
=
0
;
i
<
count
;
++
i
)
mainGame
->
dField
.
declare_opcodes
.
push_back
(
BufferIO
::
ReadInt32
(
pbuf
));
if
(
select_hint
)
if
(
select_hint
)
myswprintf
(
textBuffer
,
L"%ls"
,
dataManager
.
GetDesc
(
select_hint
));
myswprintf
(
textBuffer
,
L"%ls"
,
dataManager
.
GetDesc
(
select_hint
));
else
myswprintf
(
textBuffer
,
dataManager
.
GetSysString
(
564
));
else
myswprintf
(
textBuffer
,
dataManager
.
GetSysString
(
564
));
...
@@ -3408,7 +3487,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -3408,7 +3487,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame
->
gMutex
.
Lock
();
mainGame
->
gMutex
.
Lock
();
mainGame
->
ebANCard
->
setText
(
L""
);
mainGame
->
ebANCard
->
setText
(
L""
);
mainGame
->
wANCard
->
setText
(
textBuffer
);
mainGame
->
wANCard
->
setText
(
textBuffer
);
mainGame
->
dField
.
UpdateDeclarable
Code
();
mainGame
->
dField
.
UpdateDeclarable
List
();
mainGame
->
PopupElement
(
mainGame
->
wANCard
);
mainGame
->
PopupElement
(
mainGame
->
wANCard
);
mainGame
->
gMutex
.
Unlock
();
mainGame
->
gMutex
.
Unlock
();
return
false
;
return
false
;
...
@@ -3433,25 +3512,6 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -3433,25 +3512,6 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame
->
gMutex
.
Unlock
();
mainGame
->
gMutex
.
Unlock
();
return
false
;
return
false
;
}
}
case
MSG_ANNOUNCE_CARD_FILTER
:
{
/*int player = */
mainGame
->
LocalPlayer
(
BufferIO
::
ReadInt8
(
pbuf
));
int
count
=
BufferIO
::
ReadUInt8
(
pbuf
);
mainGame
->
dField
.
declarable_type
=
0
;
mainGame
->
dField
.
opcode
.
clear
();
for
(
int
i
=
0
;
i
<
count
;
++
i
)
mainGame
->
dField
.
opcode
.
push_back
(
BufferIO
::
ReadInt32
(
pbuf
));
if
(
select_hint
)
myswprintf
(
textBuffer
,
L"%ls"
,
dataManager
.
GetDesc
(
select_hint
));
else
myswprintf
(
textBuffer
,
dataManager
.
GetSysString
(
564
));
select_hint
=
0
;
mainGame
->
gMutex
.
Lock
();
mainGame
->
ebANCard
->
setText
(
L""
);
mainGame
->
wANCard
->
setText
(
textBuffer
);
mainGame
->
dField
.
UpdateDeclarableCode
();
mainGame
->
PopupElement
(
mainGame
->
wANCard
);
mainGame
->
gMutex
.
Unlock
();
return
false
;
}
case
MSG_CARD_HINT
:
{
case
MSG_CARD_HINT
:
{
int
c
=
mainGame
->
LocalPlayer
(
BufferIO
::
ReadInt8
(
pbuf
));
int
c
=
mainGame
->
LocalPlayer
(
BufferIO
::
ReadInt8
(
pbuf
));
int
l
=
BufferIO
::
ReadInt8
(
pbuf
);
int
l
=
BufferIO
::
ReadInt8
(
pbuf
);
...
@@ -3735,6 +3795,9 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -3735,6 +3795,9 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
}
}
return
true
;
return
true
;
}
}
void
DuelClient
::
SwapField
()
{
is_swapping
=
true
;
}
void
DuelClient
::
SetResponseI
(
int
respI
)
{
void
DuelClient
::
SetResponseI
(
int
respI
)
{
*
((
int
*
)
response_buf
)
=
respI
;
*
((
int
*
)
response_buf
)
=
respI
;
response_len
=
4
;
response_len
=
4
;
...
...
gframe/duelclient.h
View file @
d9f8f64b
...
@@ -29,8 +29,12 @@ private:
...
@@ -29,8 +29,12 @@ private:
static
char
duel_client_read
[
0x2000
];
static
char
duel_client_read
[
0x2000
];
static
char
duel_client_write
[
0x2000
];
static
char
duel_client_write
[
0x2000
];
static
bool
is_closing
;
static
bool
is_closing
;
static
bool
is_swapping
;
static
int
select_hint
;
static
int
select_hint
;
static
int
select_unselect_hint
;
static
int
select_unselect_hint
;
static
int
last_select_hint
;
static
char
last_successful_msg
[
2048
];
static
unsigned
int
last_successful_msg_length
;
static
wchar_t
event_string
[
256
];
static
wchar_t
event_string
[
256
];
static
mtrandom
rnd
;
static
mtrandom
rnd
;
public:
public:
...
@@ -42,6 +46,7 @@ public:
...
@@ -42,6 +46,7 @@ public:
static
int
ClientThread
(
void
*
param
);
static
int
ClientThread
(
void
*
param
);
static
void
HandleSTOCPacketLan
(
char
*
data
,
unsigned
int
len
);
static
void
HandleSTOCPacketLan
(
char
*
data
,
unsigned
int
len
);
static
int
ClientAnalyze
(
char
*
msg
,
unsigned
int
len
);
static
int
ClientAnalyze
(
char
*
msg
,
unsigned
int
len
);
static
void
SwapField
();
static
void
SetResponseI
(
int
respI
);
static
void
SetResponseI
(
int
respI
);
static
void
SetResponseB
(
void
*
respB
,
unsigned
char
len
);
static
void
SetResponseB
(
void
*
respB
,
unsigned
char
len
);
static
void
SendResponse
();
static
void
SendResponse
();
...
...
gframe/event_handler.cpp
View file @
d9f8f64b
...
@@ -91,8 +91,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
...
@@ -91,8 +91,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
soundManager
.
PlaySoundEffect
(
SOUND_BUTTON
);
soundManager
.
PlaySoundEffect
(
SOUND_BUTTON
);
if
(
mainGame
->
dInfo
.
isReplay
)
if
(
mainGame
->
dInfo
.
isReplay
)
ReplayMode
::
SwapField
();
ReplayMode
::
SwapField
();
else
if
(
mainGame
->
dInfo
.
player_type
==
7
)
else
if
(
mainGame
->
dInfo
.
player_type
==
7
)
mainGame
->
dField
.
ReplaySwap
();
DuelClient
::
SwapField
();
break
;
break
;
}
}
case
BUTTON_REPLAY_UNDO
:
{
case
BUTTON_REPLAY_UNDO
:
{
...
@@ -963,7 +963,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
...
@@ -963,7 +963,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case
irr
:
:
gui
::
EGET_EDITBOX_CHANGED
:
{
case
irr
:
:
gui
::
EGET_EDITBOX_CHANGED
:
{
switch
(
id
)
{
switch
(
id
)
{
case
EDITBOX_ANCARD
:
{
case
EDITBOX_ANCARD
:
{
UpdateDeclarable
Code
();
UpdateDeclarable
List
();
break
;
break
;
}
}
}
}
...
@@ -972,7 +972,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
...
@@ -972,7 +972,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case
irr
:
:
gui
::
EGET_EDITBOX_ENTER
:
{
case
irr
:
:
gui
::
EGET_EDITBOX_ENTER
:
{
switch
(
id
)
{
switch
(
id
)
{
case
EDITBOX_ANCARD
:
{
case
EDITBOX_ANCARD
:
{
UpdateDeclarable
Code
();
UpdateDeclarable
List
();
break
;
break
;
}
}
}
}
...
...
gframe/game.cpp
View file @
d9f8f64b
...
@@ -10,7 +10,7 @@
...
@@ -10,7 +10,7 @@
#include "netserver.h"
#include "netserver.h"
#include "single_mode.h"
#include "single_mode.h"
const
unsigned
short
PRO_VERSION
=
0x134
A
;
const
unsigned
short
PRO_VERSION
=
0x134
B
;
namespace
ygo
{
namespace
ygo
{
...
@@ -414,15 +414,15 @@ bool Game::Initialize() {
...
@@ -414,15 +414,15 @@ bool Game::Initialize() {
wPosSelect
->
getCloseButton
()
->
setVisible
(
false
);
wPosSelect
->
getCloseButton
()
->
setVisible
(
false
);
wPosSelect
->
setVisible
(
false
);
wPosSelect
->
setVisible
(
false
);
btnPSAU
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
10
,
45
,
150
,
185
),
wPosSelect
,
BUTTON_POS_AU
);
btnPSAU
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
10
,
45
,
150
,
185
),
wPosSelect
,
BUTTON_POS_AU
);
btnPSAU
->
setImageS
cale
(
core
::
vector2df
(
0.5
,
0.5
));
btnPSAU
->
setImageS
ize
(
core
::
dimension2di
(
CARD_IMG_WIDTH
*
0.5
f
,
CARD_IMG_HEIGHT
*
0.5
f
));
btnPSAD
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
155
,
45
,
295
,
185
),
wPosSelect
,
BUTTON_POS_AD
);
btnPSAD
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
155
,
45
,
295
,
185
),
wPosSelect
,
BUTTON_POS_AD
);
btnPSAD
->
setImageS
cale
(
core
::
vector2df
(
0.5
,
0.5
));
btnPSAD
->
setImageS
ize
(
core
::
dimension2di
(
CARD_IMG_WIDTH
*
0.5
f
,
CARD_IMG_HEIGHT
*
0.5
f
));
btnPSAD
->
setImage
(
imageManager
.
tCover
[
2
]);
btnPSAD
->
setImage
(
imageManager
.
tCover
[
2
]);
btnPSDU
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
300
,
45
,
440
,
185
),
wPosSelect
,
BUTTON_POS_DU
);
btnPSDU
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
300
,
45
,
440
,
185
),
wPosSelect
,
BUTTON_POS_DU
);
btnPSDU
->
setImageS
cale
(
core
::
vector2df
(
0.5
,
0.5
));
btnPSDU
->
setImageS
ize
(
core
::
dimension2di
(
CARD_IMG_WIDTH
*
0.5
f
,
CARD_IMG_HEIGHT
*
0.5
f
));
btnPSDU
->
setImageRotation
(
270
);
btnPSDU
->
setImageRotation
(
270
);
btnPSDD
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
445
,
45
,
585
,
185
),
wPosSelect
,
BUTTON_POS_DD
);
btnPSDD
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
445
,
45
,
585
,
185
),
wPosSelect
,
BUTTON_POS_DD
);
btnPSDD
->
setImageS
cale
(
core
::
vector2df
(
0.5
,
0.5
));
btnPSDD
->
setImageS
ize
(
core
::
dimension2di
(
CARD_IMG_WIDTH
*
0.5
f
,
CARD_IMG_HEIGHT
*
0.5
f
));
btnPSDD
->
setImageRotation
(
270
);
btnPSDD
->
setImageRotation
(
270
);
btnPSDD
->
setImage
(
imageManager
.
tCover
[
2
]);
btnPSDD
->
setImage
(
imageManager
.
tCover
[
2
]);
//card select
//card select
...
@@ -434,7 +434,7 @@ bool Game::Initialize() {
...
@@ -434,7 +434,7 @@ bool Game::Initialize() {
stCardPos
[
i
]
->
setBackgroundColor
(
0xffffffff
);
stCardPos
[
i
]
->
setBackgroundColor
(
0xffffffff
);
stCardPos
[
i
]
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
stCardPos
[
i
]
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
btnCardSelect
[
i
]
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
30
+
125
*
i
,
55
,
150
+
125
*
i
,
225
),
wCardSelect
,
BUTTON_CARD_0
+
i
);
btnCardSelect
[
i
]
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
30
+
125
*
i
,
55
,
150
+
125
*
i
,
225
),
wCardSelect
,
BUTTON_CARD_0
+
i
);
btnCardSelect
[
i
]
->
setImageS
cale
(
core
::
vector2df
(
0.6
f
,
0.6
f
));
btnCardSelect
[
i
]
->
setImageS
ize
(
core
::
dimension2di
(
CARD_IMG_WIDTH
*
0.6
f
,
CARD_IMG_HEIGHT
*
0.6
f
));
}
}
scrCardList
=
env
->
addScrollBar
(
true
,
rect
<
s32
>
(
30
,
235
,
650
,
255
),
wCardSelect
,
SCROLL_CARD_SELECT
);
scrCardList
=
env
->
addScrollBar
(
true
,
rect
<
s32
>
(
30
,
235
,
650
,
255
),
wCardSelect
,
SCROLL_CARD_SELECT
);
btnSelectOK
=
env
->
addButton
(
rect
<
s32
>
(
300
,
265
,
380
,
290
),
wCardSelect
,
BUTTON_CARD_SEL_OK
,
dataManager
.
GetSysString
(
1211
));
btnSelectOK
=
env
->
addButton
(
rect
<
s32
>
(
300
,
265
,
380
,
290
),
wCardSelect
,
BUTTON_CARD_SEL_OK
,
dataManager
.
GetSysString
(
1211
));
...
@@ -447,7 +447,7 @@ bool Game::Initialize() {
...
@@ -447,7 +447,7 @@ bool Game::Initialize() {
stDisplayPos
[
i
]
->
setBackgroundColor
(
0xffffffff
);
stDisplayPos
[
i
]
->
setBackgroundColor
(
0xffffffff
);
stDisplayPos
[
i
]
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
stDisplayPos
[
i
]
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
btnCardDisplay
[
i
]
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
30
+
125
*
i
,
55
,
150
+
125
*
i
,
225
),
wCardDisplay
,
BUTTON_DISPLAY_0
+
i
);
btnCardDisplay
[
i
]
=
irr
::
gui
::
CGUIImageButton
::
addImageButton
(
env
,
rect
<
s32
>
(
30
+
125
*
i
,
55
,
150
+
125
*
i
,
225
),
wCardDisplay
,
BUTTON_DISPLAY_0
+
i
);
btnCardDisplay
[
i
]
->
setImageS
cale
(
core
::
vector2df
(
0.6
f
,
0.6
f
));
btnCardDisplay
[
i
]
->
setImageS
ize
(
core
::
dimension2di
(
CARD_IMG_WIDTH
*
0.6
f
,
CARD_IMG_HEIGHT
*
0.6
f
));
}
}
scrDisplayList
=
env
->
addScrollBar
(
true
,
rect
<
s32
>
(
30
,
235
,
650
,
255
),
wCardDisplay
,
SCROLL_CARD_DISPLAY
);
scrDisplayList
=
env
->
addScrollBar
(
true
,
rect
<
s32
>
(
30
,
235
,
650
,
255
),
wCardDisplay
,
SCROLL_CARD_DISPLAY
);
btnDisplayOK
=
env
->
addButton
(
rect
<
s32
>
(
300
,
265
,
380
,
290
),
wCardDisplay
,
BUTTON_CARD_DISP_OK
,
dataManager
.
GetSysString
(
1211
));
btnDisplayOK
=
env
->
addButton
(
rect
<
s32
>
(
300
,
265
,
380
,
290
),
wCardDisplay
,
BUTTON_CARD_DISP_OK
,
dataManager
.
GetSysString
(
1211
));
...
...
gframe/netserver.cpp
View file @
d9f8f64b
...
@@ -197,7 +197,7 @@ void NetServer::HandleCTOSPacket(DuelPlayer* dp, char* data, unsigned int len) {
...
@@ -197,7 +197,7 @@ void NetServer::HandleCTOSPacket(DuelPlayer* dp, char* data, unsigned int len) {
case
CTOS_UPDATE_DECK
:
{
case
CTOS_UPDATE_DECK
:
{
if
(
!
dp
->
game
)
if
(
!
dp
->
game
)
return
;
return
;
duel_mode
->
UpdateDeck
(
dp
,
pdata
);
duel_mode
->
UpdateDeck
(
dp
,
pdata
,
len
-
1
);
break
;
break
;
}
}
case
CTOS_HAND_RESULT
:
{
case
CTOS_HAND_RESULT
:
{
...
...
gframe/network.h
View file @
d9f8f64b
...
@@ -114,7 +114,7 @@ struct DuelPlayer {
...
@@ -114,7 +114,7 @@ struct DuelPlayer {
class
DuelMode
{
class
DuelMode
{
public:
public:
DuelMode
()
:
host_player
(
0
),
pduel
(
0
)
{}
DuelMode
()
:
host_player
(
0
),
pduel
(
0
)
,
duel_stage
(
0
)
{}
virtual
~
DuelMode
()
{}
virtual
~
DuelMode
()
{}
virtual
void
Chat
(
DuelPlayer
*
dp
,
void
*
pdata
,
int
len
)
{}
virtual
void
Chat
(
DuelPlayer
*
dp
,
void
*
pdata
,
int
len
)
{}
virtual
void
JoinGame
(
DuelPlayer
*
dp
,
void
*
pdata
,
bool
is_creater
)
{}
virtual
void
JoinGame
(
DuelPlayer
*
dp
,
void
*
pdata
,
bool
is_creater
)
{}
...
@@ -123,7 +123,7 @@ public:
...
@@ -123,7 +123,7 @@ public:
virtual
void
ToObserver
(
DuelPlayer
*
dp
)
{}
virtual
void
ToObserver
(
DuelPlayer
*
dp
)
{}
virtual
void
PlayerReady
(
DuelPlayer
*
dp
,
bool
is_ready
)
{}
virtual
void
PlayerReady
(
DuelPlayer
*
dp
,
bool
is_ready
)
{}
virtual
void
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
)
{}
virtual
void
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
)
{}
virtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
)
{}
virtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
,
unsigned
int
len
)
{}
virtual
void
StartDuel
(
DuelPlayer
*
dp
)
{}
virtual
void
StartDuel
(
DuelPlayer
*
dp
)
{}
virtual
void
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
{}
virtual
void
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
{}
virtual
void
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
)
{}
virtual
void
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
)
{}
...
@@ -140,6 +140,7 @@ public:
...
@@ -140,6 +140,7 @@ public:
event
*
etimer
;
event
*
etimer
;
DuelPlayer
*
host_player
;
DuelPlayer
*
host_player
;
HostInfo
host_info
;
HostInfo
host_info
;
int
duel_stage
;
unsigned
long
pduel
;
unsigned
long
pduel
;
wchar_t
name
[
20
];
wchar_t
name
[
20
];
wchar_t
pass
[
20
];
wchar_t
pass
[
20
];
...
@@ -219,4 +220,11 @@ public:
...
@@ -219,4 +220,11 @@ public:
#define MODE_SINGLE 0x0
#define MODE_SINGLE 0x0
#define MODE_MATCH 0x1
#define MODE_MATCH 0x1
#define MODE_TAG 0x2
#define MODE_TAG 0x2
#define DUEL_STAGE_BEGIN 0
#define DUEL_STAGE_FINGER 1
#define DUEL_STAGE_FIRSTGO 2
#define DUEL_STAGE_DUELING 3
#define DUEL_STAGE_SIDING 4
#define DUEL_STAGE_END 5
#endif //NETWORK_H
#endif //NETWORK_H
gframe/replay_mode.cpp
View file @
d9f8f64b
...
@@ -101,6 +101,8 @@ int ReplayMode::ReplayThread(void* param) {
...
@@ -101,6 +101,8 @@ int ReplayMode::ReplayThread(void* param) {
if
(
is_restarting
)
{
if
(
is_restarting
)
{
mainGame
->
gMutex
.
Lock
();
mainGame
->
gMutex
.
Lock
();
is_restarting
=
false
;
is_restarting
=
false
;
mainGame
->
dInfo
.
isReplaySkiping
=
true
;
Restart
(
false
);
int
step
=
current_step
-
1
;
int
step
=
current_step
-
1
;
if
(
step
<
0
)
if
(
step
<
0
)
step
=
0
;
step
=
0
;
...
@@ -109,10 +111,13 @@ int ReplayMode::ReplayThread(void* param) {
...
@@ -109,10 +111,13 @@ int ReplayMode::ReplayThread(void* param) {
skip_step
=
0
;
skip_step
=
0
;
int
len
=
get_message
(
pduel
,
(
byte
*
)
engineBuffer
);
int
len
=
get_message
(
pduel
,
(
byte
*
)
engineBuffer
);
if
(
len
>
0
)
{
if
(
len
>
0
)
{
mainGame
->
gMutex
.
Unlock
();
is_continuing
=
ReplayAnalyze
(
engineBuffer
,
len
);
is_continuing
=
ReplayAnalyze
(
engineBuffer
,
len
);
mainGame
->
gMutex
.
Lock
();
}
}
}
else
{
ReplayRefreshDeck
(
0
);
ReplayRefreshDeck
(
1
);
ReplayRefreshExtra
(
0
);
ReplayRefreshExtra
(
1
);
}
}
if
(
step
==
0
)
{
if
(
step
==
0
)
{
Pause
(
true
,
false
);
Pause
(
true
,
false
);
...
@@ -171,14 +176,14 @@ bool ReplayMode::StartDuel() {
...
@@ -171,14 +176,14 @@ bool ReplayMode::StartDuel() {
int
extra
=
cur_replay
.
ReadInt32
();
int
extra
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
extra
;
++
i
)
for
(
int
i
=
0
;
i
<
extra
;
++
i
)
new_card
(
pduel
,
cur_replay
.
ReadInt32
(),
0
,
0
,
LOCATION_EXTRA
,
0
,
POS_FACEDOWN_DEFENSE
);
new_card
(
pduel
,
cur_replay
.
ReadInt32
(),
0
,
0
,
LOCATION_EXTRA
,
0
,
POS_FACEDOWN_DEFENSE
);
mainGame
->
dField
.
Initial
(
0
,
main
,
extra
);
mainGame
->
dField
.
Initial
(
mainGame
->
LocalPlayer
(
0
)
,
main
,
extra
);
main
=
cur_replay
.
ReadInt32
();
main
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
main
;
++
i
)
for
(
int
i
=
0
;
i
<
main
;
++
i
)
new_card
(
pduel
,
cur_replay
.
ReadInt32
(),
1
,
1
,
LOCATION_DECK
,
0
,
POS_FACEDOWN_DEFENSE
);
new_card
(
pduel
,
cur_replay
.
ReadInt32
(),
1
,
1
,
LOCATION_DECK
,
0
,
POS_FACEDOWN_DEFENSE
);
extra
=
cur_replay
.
ReadInt32
();
extra
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
extra
;
++
i
)
for
(
int
i
=
0
;
i
<
extra
;
++
i
)
new_card
(
pduel
,
cur_replay
.
ReadInt32
(),
1
,
1
,
LOCATION_EXTRA
,
0
,
POS_FACEDOWN_DEFENSE
);
new_card
(
pduel
,
cur_replay
.
ReadInt32
(),
1
,
1
,
LOCATION_EXTRA
,
0
,
POS_FACEDOWN_DEFENSE
);
mainGame
->
dField
.
Initial
(
1
,
main
,
extra
);
mainGame
->
dField
.
Initial
(
mainGame
->
LocalPlayer
(
1
)
,
main
,
extra
);
}
else
{
}
else
{
int
main
=
cur_replay
.
ReadInt32
();
int
main
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
main
;
++
i
)
for
(
int
i
=
0
;
i
<
main
;
++
i
)
...
@@ -186,7 +191,7 @@ bool ReplayMode::StartDuel() {
...
@@ -186,7 +191,7 @@ bool ReplayMode::StartDuel() {
int
extra
=
cur_replay
.
ReadInt32
();
int
extra
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
extra
;
++
i
)
for
(
int
i
=
0
;
i
<
extra
;
++
i
)
new_card
(
pduel
,
cur_replay
.
ReadInt32
(),
0
,
0
,
LOCATION_EXTRA
,
0
,
POS_FACEDOWN_DEFENSE
);
new_card
(
pduel
,
cur_replay
.
ReadInt32
(),
0
,
0
,
LOCATION_EXTRA
,
0
,
POS_FACEDOWN_DEFENSE
);
mainGame
->
dField
.
Initial
(
0
,
main
,
extra
);
mainGame
->
dField
.
Initial
(
mainGame
->
LocalPlayer
(
0
)
,
main
,
extra
);
main
=
cur_replay
.
ReadInt32
();
main
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
main
;
++
i
)
for
(
int
i
=
0
;
i
<
main
;
++
i
)
new_tag_card
(
pduel
,
cur_replay
.
ReadInt32
(),
0
,
LOCATION_DECK
);
new_tag_card
(
pduel
,
cur_replay
.
ReadInt32
(),
0
,
LOCATION_DECK
);
...
@@ -199,7 +204,7 @@ bool ReplayMode::StartDuel() {
...
@@ -199,7 +204,7 @@ bool ReplayMode::StartDuel() {
extra
=
cur_replay
.
ReadInt32
();
extra
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
extra
;
++
i
)
for
(
int
i
=
0
;
i
<
extra
;
++
i
)
new_card
(
pduel
,
cur_replay
.
ReadInt32
(),
1
,
1
,
LOCATION_EXTRA
,
0
,
POS_FACEDOWN_DEFENSE
);
new_card
(
pduel
,
cur_replay
.
ReadInt32
(),
1
,
1
,
LOCATION_EXTRA
,
0
,
POS_FACEDOWN_DEFENSE
);
mainGame
->
dField
.
Initial
(
1
,
main
,
extra
);
mainGame
->
dField
.
Initial
(
mainGame
->
LocalPlayer
(
1
)
,
main
,
extra
);
main
=
cur_replay
.
ReadInt32
();
main
=
cur_replay
.
ReadInt32
();
for
(
int
i
=
0
;
i
<
main
;
++
i
)
for
(
int
i
=
0
;
i
<
main
;
++
i
)
new_tag_card
(
pduel
,
cur_replay
.
ReadInt32
(),
1
,
LOCATION_DECK
);
new_tag_card
(
pduel
,
cur_replay
.
ReadInt32
(),
1
,
LOCATION_DECK
);
...
@@ -267,13 +272,11 @@ void ReplayMode::Restart(bool refresh) {
...
@@ -267,13 +272,11 @@ void ReplayMode::Restart(bool refresh) {
//mainGame->dInfo.isReplay = true;
//mainGame->dInfo.isReplay = true;
}
}
skip_turn
=
0
;
skip_turn
=
0
;
is_restarting
=
true
;
}
}
void
ReplayMode
::
Undo
()
{
void
ReplayMode
::
Undo
()
{
if
(
skip_step
>
0
||
current_step
==
0
)
if
(
skip_step
>
0
||
current_step
==
0
)
return
;
return
;
mainGame
->
dInfo
.
isReplaySkiping
=
true
;
is_restarting
=
true
;
Restart
(
false
);
Pause
(
false
,
false
);
Pause
(
false
,
false
);
}
}
bool
ReplayMode
::
ReplayAnalyze
(
char
*
msg
,
unsigned
int
len
)
{
bool
ReplayMode
::
ReplayAnalyze
(
char
*
msg
,
unsigned
int
len
)
{
...
@@ -767,13 +770,8 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
...
@@ -767,13 +770,8 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
pbuf
+=
5
;
pbuf
+=
5
;
return
ReadReplayResponse
();
return
ReadReplayResponse
();
}
}
case
MSG_ANNOUNCE_CARD
:
{
case
MSG_ANNOUNCE_CARD
:
player
=
BufferIO
::
ReadInt8
(
pbuf
);
case
MSG_ANNOUNCE_NUMBER
:
{
pbuf
+=
4
;
return
ReadReplayResponse
();
}
case
MSG_ANNOUNCE_NUMBER
:
case
MSG_ANNOUNCE_CARD_FILTER
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
player
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
ReadUInt8
(
pbuf
);
count
=
BufferIO
::
ReadUInt8
(
pbuf
);
pbuf
+=
4
*
count
;
pbuf
+=
4
*
count
;
...
...
gframe/single_duel.cpp
View file @
d9f8f64b
...
@@ -8,7 +8,6 @@
...
@@ -8,7 +8,6 @@
namespace
ygo
{
namespace
ygo
{
SingleDuel
::
SingleDuel
(
bool
is_match
)
{
SingleDuel
::
SingleDuel
(
bool
is_match
)
{
game_started
=
false
;
match_mode
=
is_match
;
match_mode
=
is_match
;
match_kill
=
0
;
match_kill
=
0
;
for
(
int
i
=
0
;
i
<
2
;
++
i
)
{
for
(
int
i
=
0
;
i
<
2
;
++
i
)
{
...
@@ -139,7 +138,7 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
...
@@ -139,7 +138,7 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
NetServer
::
StopServer
();
NetServer
::
StopServer
();
}
else
if
(
dp
->
type
==
NETPLAYER_TYPE_OBSERVER
)
{
}
else
if
(
dp
->
type
==
NETPLAYER_TYPE_OBSERVER
)
{
observers
.
erase
(
dp
);
observers
.
erase
(
dp
);
if
(
!
game_started
)
{
if
(
duel_stage
==
DUEL_STAGE_BEGIN
)
{
STOC_HS_WatchChange
scwc
;
STOC_HS_WatchChange
scwc
;
scwc
.
watch_count
=
observers
.
size
();
scwc
.
watch_count
=
observers
.
size
();
if
(
players
[
0
])
if
(
players
[
0
])
...
@@ -151,7 +150,7 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
...
@@ -151,7 +150,7 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
}
}
NetServer
::
DisconnectPlayer
(
dp
);
NetServer
::
DisconnectPlayer
(
dp
);
}
else
{
}
else
{
if
(
!
game_started
&&
duel_count
==
0
)
{
if
(
duel_stage
==
DUEL_STAGE_BEGIN
)
{
STOC_HS_PlayerChange
scpc
;
STOC_HS_PlayerChange
scpc
;
players
[
dp
->
type
]
=
0
;
players
[
dp
->
type
]
=
0
;
ready
[
dp
->
type
]
=
false
;
ready
[
dp
->
type
]
=
false
;
...
@@ -164,26 +163,28 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
...
@@ -164,26 +163,28 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_HS_PLAYER_CHANGE
,
scpc
);
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_HS_PLAYER_CHANGE
,
scpc
);
NetServer
::
DisconnectPlayer
(
dp
);
NetServer
::
DisconnectPlayer
(
dp
);
}
else
{
}
else
{
if
(
!
game_started
)
{
if
(
duel_stage
==
DUEL_STAGE_SIDING
)
{
if
(
!
ready
[
0
])
if
(
!
ready
[
0
])
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_DUEL_START
);
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_DUEL_START
);
if
(
!
ready
[
1
])
if
(
!
ready
[
1
])
NetServer
::
SendPacketToPlayer
(
players
[
1
],
STOC_DUEL_START
);
NetServer
::
SendPacketToPlayer
(
players
[
1
],
STOC_DUEL_START
);
}
}
unsigned
char
wbuf
[
3
];
if
(
duel_stage
!=
DUEL_STAGE_END
)
{
wbuf
[
0
]
=
MSG_WIN
;
unsigned
char
wbuf
[
3
];
wbuf
[
1
]
=
1
-
dp
->
type
;
wbuf
[
0
]
=
MSG_WIN
;
wbuf
[
2
]
=
0
;
wbuf
[
1
]
=
1
-
dp
->
type
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
wbuf
,
3
);
wbuf
[
2
]
=
0x4
;
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
wbuf
,
3
);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
*
oit
);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
EndDuel
();
NetServer
::
ReSendToPlayer
(
*
oit
);
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_DUEL_END
);
EndDuel
();
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_DUEL_END
);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
*
oit
);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
StopServer
();
NetServer
::
ReSendToPlayer
(
*
oit
);
}
NetServer
::
DisconnectPlayer
(
dp
);
}
}
}
}
}
}
...
@@ -280,12 +281,20 @@ void SingleDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
...
@@ -280,12 +281,20 @@ void SingleDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
return
;
return
;
LeaveGame
(
players
[
pos
]);
LeaveGame
(
players
[
pos
]);
}
}
void
SingleDuel
::
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
)
{
void
SingleDuel
::
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
,
unsigned
int
len
)
{
if
(
dp
->
type
>
1
||
ready
[
dp
->
type
])
if
(
dp
->
type
>
1
||
ready
[
dp
->
type
])
return
;
return
;
char
*
deckbuf
=
(
char
*
)
pdata
;
char
*
deckbuf
=
(
char
*
)
pdata
;
int
mainc
=
BufferIO
::
ReadInt32
(
deckbuf
);
int
mainc
=
BufferIO
::
ReadInt32
(
deckbuf
);
int
sidec
=
BufferIO
::
ReadInt32
(
deckbuf
);
int
sidec
=
BufferIO
::
ReadInt32
(
deckbuf
);
// verify data
if
((
unsigned
)
mainc
+
(
unsigned
)
sidec
>
(
len
-
8
)
/
4
)
{
STOC_ErrorMsg
scem
;
scem
.
msg
=
ERRMSG_DECKERROR
;
scem
.
code
=
0
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_ERROR_MSG
,
scem
);
return
;
}
if
(
duel_count
==
0
)
{
if
(
duel_count
==
0
)
{
deck_error
[
dp
->
type
]
=
deckManager
.
LoadDeck
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
);
deck_error
[
dp
->
type
]
=
deckManager
.
LoadDeck
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
);
}
else
{
}
else
{
...
@@ -296,6 +305,7 @@ void SingleDuel::UpdateDeck(DuelPlayer* dp, void* pdata) {
...
@@ -296,6 +305,7 @@ void SingleDuel::UpdateDeck(DuelPlayer* dp, void* pdata) {
NetServer
::
SendPacketToPlayer
(
players
[
tp_player
],
STOC_SELECT_TP
);
NetServer
::
SendPacketToPlayer
(
players
[
tp_player
],
STOC_SELECT_TP
);
players
[
1
-
tp_player
]
->
state
=
0xff
;
players
[
1
-
tp_player
]
->
state
=
0xff
;
players
[
tp_player
]
->
state
=
CTOS_TP_RESULT
;
players
[
tp_player
]
->
state
=
CTOS_TP_RESULT
;
duel_stage
=
DUEL_STAGE_FIRSTGO
;
}
}
}
else
{
}
else
{
STOC_ErrorMsg
scem
;
STOC_ErrorMsg
scem
;
...
@@ -312,7 +322,6 @@ void SingleDuel::StartDuel(DuelPlayer* dp) {
...
@@ -312,7 +322,6 @@ void SingleDuel::StartDuel(DuelPlayer* dp) {
return
;
return
;
NetServer
::
StopListen
();
NetServer
::
StopListen
();
//NetServer::StopBroadcast();
//NetServer::StopBroadcast();
game_started
=
true
;
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_DUEL_START
);
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_DUEL_START
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
{
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
{
...
@@ -325,6 +334,7 @@ void SingleDuel::StartDuel(DuelPlayer* dp) {
...
@@ -325,6 +334,7 @@ void SingleDuel::StartDuel(DuelPlayer* dp) {
hand_result
[
1
]
=
0
;
hand_result
[
1
]
=
0
;
players
[
0
]
->
state
=
CTOS_HAND_RESULT
;
players
[
0
]
->
state
=
CTOS_HAND_RESULT
;
players
[
1
]
->
state
=
CTOS_HAND_RESULT
;
players
[
1
]
->
state
=
CTOS_HAND_RESULT
;
duel_stage
=
DUEL_STAGE_FINGER
;
}
}
void
SingleDuel
::
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
{
void
SingleDuel
::
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
{
if
(
res
>
3
)
if
(
res
>
3
)
...
@@ -352,21 +362,24 @@ void SingleDuel::HandResult(DuelPlayer* dp, unsigned char res) {
...
@@ -352,21 +362,24 @@ void SingleDuel::HandResult(DuelPlayer* dp, unsigned char res) {
}
else
if
((
hand_result
[
0
]
==
1
&&
hand_result
[
1
]
==
2
)
}
else
if
((
hand_result
[
0
]
==
1
&&
hand_result
[
1
]
==
2
)
||
(
hand_result
[
0
]
==
2
&&
hand_result
[
1
]
==
3
)
||
(
hand_result
[
0
]
==
2
&&
hand_result
[
1
]
==
3
)
||
(
hand_result
[
0
]
==
3
&&
hand_result
[
1
]
==
1
))
{
||
(
hand_result
[
0
]
==
3
&&
hand_result
[
1
]
==
1
))
{
NetServer
::
SendPacketToPlayer
(
players
[
1
],
CTOS_TP_RESULT
);
NetServer
::
SendPacketToPlayer
(
players
[
1
],
STOC_SELECT_TP
);
tp_player
=
1
;
tp_player
=
1
;
players
[
0
]
->
state
=
0xff
;
players
[
0
]
->
state
=
0xff
;
players
[
1
]
->
state
=
CTOS_TP_RESULT
;
players
[
1
]
->
state
=
CTOS_TP_RESULT
;
duel_stage
=
DUEL_STAGE_FIRSTGO
;
}
else
{
}
else
{
NetServer
::
SendPacketToPlayer
(
players
[
0
],
CTOS_TP_RESULT
);
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_SELECT_TP
);
players
[
1
]
->
state
=
0xff
;
players
[
1
]
->
state
=
0xff
;
players
[
0
]
->
state
=
CTOS_TP_RESULT
;
players
[
0
]
->
state
=
CTOS_TP_RESULT
;
tp_player
=
0
;
tp_player
=
0
;
duel_stage
=
DUEL_STAGE_FIRSTGO
;
}
}
}
}
}
}
void
SingleDuel
::
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
)
{
void
SingleDuel
::
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
)
{
if
(
dp
->
state
!=
CTOS_TP_RESULT
)
if
(
dp
->
state
!=
CTOS_TP_RESULT
)
return
;
return
;
duel_stage
=
DUEL_STAGE_DUELING
;
bool
swapped
=
false
;
bool
swapped
=
false
;
mtrandom
rnd
;
mtrandom
rnd
;
pplayer
[
0
]
=
players
[
0
];
pplayer
[
0
]
=
players
[
0
];
...
@@ -489,7 +502,7 @@ void SingleDuel::DuelEndProc() {
...
@@ -489,7 +502,7 @@ void SingleDuel::DuelEndProc() {
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
NetServer
::
ReSendToPlayer
(
*
oit
);
NetServer
::
StopServer
()
;
duel_stage
=
DUEL_STAGE_END
;
}
else
{
}
else
{
int
winc
[
3
]
=
{
0
,
0
,
0
};
int
winc
[
3
]
=
{
0
,
0
,
0
};
for
(
int
i
=
0
;
i
<
duel_count
;
++
i
)
for
(
int
i
=
0
;
i
<
duel_count
;
++
i
)
...
@@ -502,7 +515,7 @@ void SingleDuel::DuelEndProc() {
...
@@ -502,7 +515,7 @@ void SingleDuel::DuelEndProc() {
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
NetServer
::
ReSendToPlayer
(
*
oit
);
NetServer
::
StopServer
()
;
duel_stage
=
DUEL_STAGE_END
;
}
else
{
}
else
{
if
(
players
[
0
]
!=
pplayer
[
0
])
{
if
(
players
[
0
]
!=
pplayer
[
0
])
{
players
[
0
]
=
pplayer
[
0
];
players
[
0
]
=
pplayer
[
0
];
...
@@ -521,6 +534,7 @@ void SingleDuel::DuelEndProc() {
...
@@ -521,6 +534,7 @@ void SingleDuel::DuelEndProc() {
NetServer
::
SendPacketToPlayer
(
players
[
1
],
STOC_CHANGE_SIDE
);
NetServer
::
SendPacketToPlayer
(
players
[
1
],
STOC_CHANGE_SIDE
);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
SendPacketToPlayer
(
*
oit
,
STOC_WAITING_SIDE
);
NetServer
::
SendPacketToPlayer
(
*
oit
,
STOC_WAITING_SIDE
);
duel_stage
=
DUEL_STAGE_SIDING
;
}
}
}
}
}
}
...
@@ -1337,15 +1351,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
...
@@ -1337,15 +1351,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
return
1
;
}
}
case
MSG_ANNOUNCE_CARD
:
{
case
MSG_ANNOUNCE_CARD
:
player
=
BufferIO
::
ReadInt8
(
pbuf
);
case
MSG_ANNOUNCE_NUMBER
:
{
WaitforResponse
(
player
);
pbuf
+=
4
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_ANNOUNCE_NUMBER
:
case
MSG_ANNOUNCE_CARD_FILTER
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
player
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
ReadUInt8
(
pbuf
);
count
=
BufferIO
::
ReadUInt8
(
pbuf
);
pbuf
+=
4
*
count
;
pbuf
+=
4
*
count
;
...
...
gframe/single_duel.h
View file @
d9f8f64b
...
@@ -18,7 +18,7 @@ public:
...
@@ -18,7 +18,7 @@ public:
virtual
void
ToObserver
(
DuelPlayer
*
dp
);
virtual
void
ToObserver
(
DuelPlayer
*
dp
);
virtual
void
PlayerReady
(
DuelPlayer
*
dp
,
bool
ready
);
virtual
void
PlayerReady
(
DuelPlayer
*
dp
,
bool
ready
);
virtual
void
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
);
virtual
void
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
);
virtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
);
virtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
,
unsigned
int
len
);
virtual
void
StartDuel
(
DuelPlayer
*
dp
);
virtual
void
StartDuel
(
DuelPlayer
*
dp
);
virtual
void
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
);
virtual
void
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
);
virtual
void
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
);
virtual
void
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
);
...
@@ -53,7 +53,6 @@ protected:
...
@@ -53,7 +53,6 @@ protected:
Replay
last_replay
;
Replay
last_replay
;
bool
match_mode
;
bool
match_mode
;
int
match_kill
;
int
match_kill
;
bool
game_started
;
unsigned
char
duel_count
;
unsigned
char
duel_count
;
unsigned
char
tp_player
;
unsigned
char
tp_player
;
unsigned
char
match_result
[
3
];
unsigned
char
match_result
[
3
];
...
...
gframe/single_mode.cpp
View file @
d9f8f64b
...
@@ -177,13 +177,11 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
...
@@ -177,13 +177,11 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
mainGame
->
dInfo
.
curMsg
=
BufferIO
::
ReadUInt8
(
pbuf
);
mainGame
->
dInfo
.
curMsg
=
BufferIO
::
ReadUInt8
(
pbuf
);
switch
(
mainGame
->
dInfo
.
curMsg
)
{
switch
(
mainGame
->
dInfo
.
curMsg
)
{
case
MSG_RETRY
:
{
case
MSG_RETRY
:
{
mainGame
->
gMutex
.
Lock
();
if
(
!
DuelClient
::
ClientAnalyze
(
offset
,
pbuf
-
offset
))
{
mainGame
->
stMessage
->
setText
(
L"Error occurs."
);
mainGame
->
singleSignal
.
Reset
();
mainGame
->
PopupElement
(
mainGame
->
wMessage
);
mainGame
->
singleSignal
.
Wait
();
mainGame
->
gMutex
.
Unlock
();
}
mainGame
->
actionSignal
.
Reset
();
break
;
mainGame
->
actionSignal
.
Wait
();
return
false
;
}
}
case
MSG_HINT
:
{
case
MSG_HINT
:
{
/*int type = */
BufferIO
::
ReadInt8
(
pbuf
);
/*int type = */
BufferIO
::
ReadInt8
(
pbuf
);
...
@@ -681,17 +679,8 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
...
@@ -681,17 +679,8 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
}
}
break
;
break
;
}
}
case
MSG_ANNOUNCE_CARD
:
{
case
MSG_ANNOUNCE_CARD
:
player
=
BufferIO
::
ReadInt8
(
pbuf
);
case
MSG_ANNOUNCE_NUMBER
:
{
pbuf
+=
4
;
if
(
!
DuelClient
::
ClientAnalyze
(
offset
,
pbuf
-
offset
))
{
mainGame
->
singleSignal
.
Reset
();
mainGame
->
singleSignal
.
Wait
();
}
break
;
}
case
MSG_ANNOUNCE_NUMBER
:
case
MSG_ANNOUNCE_CARD_FILTER
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
player
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
ReadUInt8
(
pbuf
);
count
=
BufferIO
::
ReadUInt8
(
pbuf
);
pbuf
+=
4
*
count
;
pbuf
+=
4
*
count
;
...
...
gframe/tag_duel.cpp
View file @
d9f8f64b
...
@@ -8,7 +8,6 @@
...
@@ -8,7 +8,6 @@
namespace
ygo
{
namespace
ygo
{
TagDuel
::
TagDuel
()
{
TagDuel
::
TagDuel
()
{
game_started
=
false
;
for
(
int
i
=
0
;
i
<
4
;
++
i
)
{
for
(
int
i
=
0
;
i
<
4
;
++
i
)
{
players
[
i
]
=
0
;
players
[
i
]
=
0
;
ready
[
i
]
=
false
;
ready
[
i
]
=
false
;
...
@@ -119,7 +118,7 @@ void TagDuel::LeaveGame(DuelPlayer* dp) {
...
@@ -119,7 +118,7 @@ void TagDuel::LeaveGame(DuelPlayer* dp) {
NetServer
::
StopServer
();
NetServer
::
StopServer
();
}
else
if
(
dp
->
type
==
NETPLAYER_TYPE_OBSERVER
)
{
}
else
if
(
dp
->
type
==
NETPLAYER_TYPE_OBSERVER
)
{
observers
.
erase
(
dp
);
observers
.
erase
(
dp
);
if
(
!
game_started
)
{
if
(
duel_stage
==
DUEL_STAGE_BEGIN
)
{
STOC_HS_WatchChange
scwc
;
STOC_HS_WatchChange
scwc
;
scwc
.
watch_count
=
observers
.
size
();
scwc
.
watch_count
=
observers
.
size
();
for
(
int
i
=
0
;
i
<
4
;
++
i
)
for
(
int
i
=
0
;
i
<
4
;
++
i
)
...
@@ -130,7 +129,7 @@ void TagDuel::LeaveGame(DuelPlayer* dp) {
...
@@ -130,7 +129,7 @@ void TagDuel::LeaveGame(DuelPlayer* dp) {
}
}
NetServer
::
DisconnectPlayer
(
dp
);
NetServer
::
DisconnectPlayer
(
dp
);
}
else
{
}
else
{
if
(
!
game_started
)
{
if
(
duel_stage
==
DUEL_STAGE_BEGIN
)
{
STOC_HS_PlayerChange
scpc
;
STOC_HS_PlayerChange
scpc
;
players
[
dp
->
type
]
=
0
;
players
[
dp
->
type
]
=
0
;
ready
[
dp
->
type
]
=
false
;
ready
[
dp
->
type
]
=
false
;
...
@@ -141,10 +140,11 @@ void TagDuel::LeaveGame(DuelPlayer* dp) {
...
@@ -141,10 +140,11 @@ void TagDuel::LeaveGame(DuelPlayer* dp) {
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
for
(
auto
pit
=
observers
.
begin
();
pit
!=
observers
.
end
();
++
pit
)
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_HS_PLAYER_CHANGE
,
scpc
);
NetServer
::
SendPacketToPlayer
(
*
pit
,
STOC_HS_PLAYER_CHANGE
,
scpc
);
NetServer
::
DisconnectPlayer
(
dp
);
NetServer
::
DisconnectPlayer
(
dp
);
}
else
{
}
else
if
(
duel_stage
!=
DUEL_STAGE_END
)
{
EndDuel
();
EndDuel
();
DuelEndProc
();
DuelEndProc
();
}
}
NetServer
::
DisconnectPlayer
(
dp
);
}
}
}
}
void
TagDuel
::
ToDuelist
(
DuelPlayer
*
dp
)
{
void
TagDuel
::
ToDuelist
(
DuelPlayer
*
dp
)
{
...
@@ -256,12 +256,20 @@ void TagDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
...
@@ -256,12 +256,20 @@ void TagDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
return
;
return
;
LeaveGame
(
players
[
pos
]);
LeaveGame
(
players
[
pos
]);
}
}
void
TagDuel
::
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
)
{
void
TagDuel
::
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
,
unsigned
int
len
)
{
if
(
dp
->
type
>
3
||
ready
[
dp
->
type
])
if
(
dp
->
type
>
3
||
ready
[
dp
->
type
])
return
;
return
;
char
*
deckbuf
=
(
char
*
)
pdata
;
char
*
deckbuf
=
(
char
*
)
pdata
;
int
mainc
=
BufferIO
::
ReadInt32
(
deckbuf
);
int
mainc
=
BufferIO
::
ReadInt32
(
deckbuf
);
int
sidec
=
BufferIO
::
ReadInt32
(
deckbuf
);
int
sidec
=
BufferIO
::
ReadInt32
(
deckbuf
);
// verify data
if
((
unsigned
)
mainc
+
(
unsigned
)
sidec
>
(
len
-
8
)
/
4
)
{
STOC_ErrorMsg
scem
;
scem
.
msg
=
ERRMSG_DECKERROR
;
scem
.
code
=
0
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_ERROR_MSG
,
scem
);
return
;
}
deck_error
[
dp
->
type
]
=
deckManager
.
LoadDeck
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
);
deck_error
[
dp
->
type
]
=
deckManager
.
LoadDeck
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
);
}
}
void
TagDuel
::
StartDuel
(
DuelPlayer
*
dp
)
{
void
TagDuel
::
StartDuel
(
DuelPlayer
*
dp
)
{
...
@@ -270,7 +278,6 @@ void TagDuel::StartDuel(DuelPlayer* dp) {
...
@@ -270,7 +278,6 @@ void TagDuel::StartDuel(DuelPlayer* dp) {
if
(
!
ready
[
0
]
||
!
ready
[
1
]
||
!
ready
[
2
]
||
!
ready
[
3
])
if
(
!
ready
[
0
]
||
!
ready
[
1
]
||
!
ready
[
2
]
||
!
ready
[
3
])
return
;
return
;
NetServer
::
StopListen
();
NetServer
::
StopListen
();
game_started
=
true
;
//NetServer::StopBroadcast();
//NetServer::StopBroadcast();
for
(
int
i
=
0
;
i
<
4
;
++
i
)
for
(
int
i
=
0
;
i
<
4
;
++
i
)
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_DUEL_START
);
NetServer
::
SendPacketToPlayer
(
players
[
i
],
STOC_DUEL_START
);
...
@@ -284,6 +291,7 @@ void TagDuel::StartDuel(DuelPlayer* dp) {
...
@@ -284,6 +291,7 @@ void TagDuel::StartDuel(DuelPlayer* dp) {
hand_result
[
1
]
=
0
;
hand_result
[
1
]
=
0
;
players
[
0
]
->
state
=
CTOS_HAND_RESULT
;
players
[
0
]
->
state
=
CTOS_HAND_RESULT
;
players
[
2
]
->
state
=
CTOS_HAND_RESULT
;
players
[
2
]
->
state
=
CTOS_HAND_RESULT
;
duel_stage
=
DUEL_STAGE_FINGER
;
}
}
void
TagDuel
::
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
{
void
TagDuel
::
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
{
if
(
res
>
3
||
dp
->
state
!=
CTOS_HAND_RESULT
)
if
(
res
>
3
||
dp
->
state
!=
CTOS_HAND_RESULT
)
...
@@ -314,19 +322,22 @@ void TagDuel::HandResult(DuelPlayer* dp, unsigned char res) {
...
@@ -314,19 +322,22 @@ void TagDuel::HandResult(DuelPlayer* dp, unsigned char res) {
}
else
if
((
hand_result
[
0
]
==
1
&&
hand_result
[
1
]
==
2
)
}
else
if
((
hand_result
[
0
]
==
1
&&
hand_result
[
1
]
==
2
)
||
(
hand_result
[
0
]
==
2
&&
hand_result
[
1
]
==
3
)
||
(
hand_result
[
0
]
==
2
&&
hand_result
[
1
]
==
3
)
||
(
hand_result
[
0
]
==
3
&&
hand_result
[
1
]
==
1
))
{
||
(
hand_result
[
0
]
==
3
&&
hand_result
[
1
]
==
1
))
{
NetServer
::
SendPacketToPlayer
(
players
[
2
],
CTOS_TP_RESULT
);
NetServer
::
SendPacketToPlayer
(
players
[
2
],
STOC_SELECT_TP
);
players
[
0
]
->
state
=
0xff
;
players
[
0
]
->
state
=
0xff
;
players
[
2
]
->
state
=
CTOS_TP_RESULT
;
players
[
2
]
->
state
=
CTOS_TP_RESULT
;
duel_stage
=
DUEL_STAGE_FIRSTGO
;
}
else
{
}
else
{
NetServer
::
SendPacketToPlayer
(
players
[
0
],
CTOS_TP_RESULT
);
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_SELECT_TP
);
players
[
2
]
->
state
=
0xff
;
players
[
2
]
->
state
=
0xff
;
players
[
0
]
->
state
=
CTOS_TP_RESULT
;
players
[
0
]
->
state
=
CTOS_TP_RESULT
;
duel_stage
=
DUEL_STAGE_FIRSTGO
;
}
}
}
}
}
}
void
TagDuel
::
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
)
{
void
TagDuel
::
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
)
{
if
(
dp
->
state
!=
CTOS_TP_RESULT
)
if
(
dp
->
state
!=
CTOS_TP_RESULT
)
return
;
return
;
duel_stage
=
DUEL_STAGE_DUELING
;
bool
swapped
=
false
;
bool
swapped
=
false
;
mtrandom
rnd
;
mtrandom
rnd
;
pplayer
[
0
]
=
players
[
0
];
pplayer
[
0
]
=
players
[
0
];
...
@@ -492,7 +503,7 @@ void TagDuel::DuelEndProc() {
...
@@ -492,7 +503,7 @@ void TagDuel::DuelEndProc() {
NetServer
::
ReSendToPlayer
(
players
[
3
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
NetServer
::
ReSendToPlayer
(
*
oit
);
NetServer
::
StopServer
()
;
duel_stage
=
DUEL_STAGE_END
;
}
}
void
TagDuel
::
Surrender
(
DuelPlayer
*
dp
)
{
void
TagDuel
::
Surrender
(
DuelPlayer
*
dp
)
{
return
;
return
;
...
@@ -1386,15 +1397,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
...
@@ -1386,15 +1397,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
return
1
;
}
}
case
MSG_ANNOUNCE_CARD
:
{
case
MSG_ANNOUNCE_CARD
:
player
=
BufferIO
::
ReadInt8
(
pbuf
);
case
MSG_ANNOUNCE_NUMBER
:
{
pbuf
+=
4
;
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
cur_player
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_ANNOUNCE_NUMBER
:
case
MSG_ANNOUNCE_CARD_FILTER
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
player
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
ReadUInt8
(
pbuf
);
count
=
BufferIO
::
ReadUInt8
(
pbuf
);
pbuf
+=
4
*
count
;
pbuf
+=
4
*
count
;
...
...
gframe/tag_duel.h
View file @
d9f8f64b
...
@@ -18,7 +18,7 @@ public:
...
@@ -18,7 +18,7 @@ public:
virtual
void
ToObserver
(
DuelPlayer
*
dp
);
virtual
void
ToObserver
(
DuelPlayer
*
dp
);
virtual
void
PlayerReady
(
DuelPlayer
*
dp
,
bool
ready
);
virtual
void
PlayerReady
(
DuelPlayer
*
dp
,
bool
ready
);
virtual
void
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
);
virtual
void
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
);
virtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
);
virtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
,
unsigned
int
len
);
virtual
void
StartDuel
(
DuelPlayer
*
dp
);
virtual
void
StartDuel
(
DuelPlayer
*
dp
);
virtual
void
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
);
virtual
void
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
);
virtual
void
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
);
virtual
void
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
);
...
@@ -52,7 +52,6 @@ protected:
...
@@ -52,7 +52,6 @@ protected:
unsigned
char
hand_result
[
2
];
unsigned
char
hand_result
[
2
];
unsigned
char
last_response
;
unsigned
char
last_response
;
Replay
last_replay
;
Replay
last_replay
;
bool
game_started
;
unsigned
char
turn_count
;
unsigned
char
turn_count
;
unsigned
short
time_limit
[
2
];
unsigned
short
time_limit
[
2
];
unsigned
short
time_elapsed
;
unsigned
short
time_elapsed
;
...
...
ocgcore
@
f79332d7
Subproject commit
79345ca980c5c933dbec08a0b0f6fb1af1a8da20
Subproject commit
f79332d76d1b5774fe0105e541d34c7b40e3e54a
script
@
573645ee
Subproject commit
35562e466d6ae7816bf32a2cc2b5bc37deed4aaa
Subproject commit
573645ee990be70d8e7c7ae2fa8a8fad33e9d62e
strings.conf
View file @
d9f8f64b
...
@@ -36,12 +36,13 @@
...
@@ -36,12 +36,13 @@
!
system
64
二重状态
!
system
64
二重状态
!
system
65
使用效果
!
system
65
使用效果
!
system
66
持续公开
!
system
66
持续公开
!
system
67
原本持有者为对方
!
system
70
怪兽卡
!
system
70
怪兽卡
!
system
71
魔法卡
!
system
71
魔法卡
!
system
72
陷阱卡
!
system
72
陷阱卡
!
system
80
进入战斗阶段
!
system
80
进入战斗阶段
!
system
81
进入结束阶段
!
system
81
进入结束阶段
!
system
90
是否不解放怪
物
通常召唤?
!
system
90
是否不解放怪
兽
通常召唤?
!
system
91
是否使用额外的召唤机会?
!
system
91
是否使用额外的召唤机会?
!
system
92
是否要解放对方怪兽进行上级召唤?
!
system
92
是否要解放对方怪兽进行上级召唤?
!
system
93
是否要继续选择素材?
!
system
93
是否要继续选择素材?
...
@@ -438,7 +439,17 @@
...
@@ -438,7 +439,17 @@
!
system
1418
额外卡组数量应不超过
15
张,当前卡组数量为%
d
张。
!
system
1418
额外卡组数量应不超过
15
张,当前卡组数量为%
d
张。
!
system
1419
副卡组数量应不超过
15
张,当前卡组数量为%
d
张。
!
system
1419
副卡组数量应不超过
15
张,当前卡组数量为%
d
张。
!
system
1420
有额外卡组卡片存在于主卡组,可能是额外卡组数量超过
15
张。
!
system
1420
有额外卡组卡片存在于主卡组,可能是额外卡组数量超过
15
张。
!
system
1421
宣言的卡不符合条件,或无法被主机识别。
!
system
1421
操作无效,请重试。
!
system
1422
宣言的卡不符合条件,或无法被主机识别。
!
system
1423
宣言的属性不符合条件。
!
system
1424
宣言的种族不符合条件
!
system
1425
宣言的数字不符合条件。
!
system
1426
选择的选项不符合条件
!
system
1427
选择的卡片不符合条件。
!
system
1428
选择的连锁不符合条件。
!
system
1429
选择的位置不符合条件。
!
system
1430
选择的表示形式不符合条件。
!
system
1431
选择的指示物不符合条件。
!
system
1500
决斗结束。
!
system
1500
决斗结束。
!
system
1501
录像结束。
!
system
1501
录像结束。
!
system
1502
连接已断开。
!
system
1502
连接已断开。
...
...
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