Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro-2pick
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
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
MyCard
ygopro-2pick
Commits
edca1eff
Commit
edca1eff
authored
Nov 20, 2017
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://github.com/Fluorohydride/ygopro
into test
parents
895e94cd
988e5916
Changes
19
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
443 additions
and
179 deletions
+443
-179
gframe/deck_con.cpp
gframe/deck_con.cpp
+7
-0
gframe/deck_manager.cpp
gframe/deck_manager.cpp
+43
-19
gframe/deck_manager.h
gframe/deck_manager.h
+2
-2
gframe/duelclient.cpp
gframe/duelclient.cpp
+52
-8
gframe/game.cpp
gframe/game.cpp
+10
-4
gframe/game.h
gframe/game.h
+5
-2
gframe/network.h
gframe/network.h
+9
-0
gframe/replay.cpp
gframe/replay.cpp
+1
-1
gframe/replay.h
gframe/replay.h
+1
-0
gframe/replay_mode.cpp
gframe/replay_mode.cpp
+199
-99
gframe/replay_mode.h
gframe/replay_mode.h
+1
-0
gframe/single_duel.cpp
gframe/single_duel.cpp
+13
-6
gframe/single_duel.h
gframe/single_duel.h
+1
-0
gframe/single_mode.cpp
gframe/single_mode.cpp
+69
-25
gframe/single_mode.h
gframe/single_mode.h
+5
-5
gframe/tag_duel.cpp
gframe/tag_duel.cpp
+13
-6
gframe/tag_duel.h
gframe/tag_duel.h
+1
-0
strings.conf
strings.conf
+10
-1
system.conf
system.conf
+1
-1
No files found.
gframe/deck_con.cpp
View file @
edca1eff
...
@@ -69,6 +69,9 @@ void DeckBuilder::Initialize() {
...
@@ -69,6 +69,9 @@ void DeckBuilder::Initialize() {
mainGame
->
btnLeaveGame
->
setVisible
(
true
);
mainGame
->
btnLeaveGame
->
setVisible
(
true
);
mainGame
->
btnLeaveGame
->
setText
(
dataManager
.
GetSysString
(
1306
));
mainGame
->
btnLeaveGame
->
setText
(
dataManager
.
GetSysString
(
1306
));
mainGame
->
btnSideOK
->
setVisible
(
false
);
mainGame
->
btnSideOK
->
setVisible
(
false
);
mainGame
->
btnSideShuffle
->
setVisible
(
false
);
mainGame
->
btnSideSort
->
setVisible
(
false
);
mainGame
->
btnSideReload
->
setVisible
(
false
);
filterList
=
deckManager
.
_lfList
[
0
].
content
;
filterList
=
deckManager
.
_lfList
[
0
].
content
;
mainGame
->
cbDBLFList
->
setSelected
(
0
);
mainGame
->
cbDBLFList
->
setSelected
(
0
);
ClearSearch
();
ClearSearch
();
...
@@ -243,6 +246,10 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
...
@@ -243,6 +246,10 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
DuelClient
::
SendBufferToServer
(
CTOS_UPDATE_DECK
,
deckbuf
,
pdeck
-
deckbuf
);
DuelClient
::
SendBufferToServer
(
CTOS_UPDATE_DECK
,
deckbuf
,
pdeck
-
deckbuf
);
break
;
break
;
}
}
case
BUTTON_SIDE_RELOAD
:
{
deckManager
.
LoadDeck
(
mainGame
->
cbDeckSelect
->
getItem
(
mainGame
->
cbDeckSelect
->
getSelected
()));
break
;
}
case
BUTTON_MSG_OK
:
{
case
BUTTON_MSG_OK
:
{
mainGame
->
HideElement
(
mainGame
->
wMessage
);
mainGame
->
HideElement
(
mainGame
->
wMessage
);
mainGame
->
actionSignal
.
Set
();
mainGame
->
actionSignal
.
Set
();
...
...
gframe/deck_manager.cpp
View file @
edca1eff
#include "deck_manager.h"
#include "deck_manager.h"
#include "data_manager.h"
#include "data_manager.h"
#include "network.h"
#include "game.h"
#include "game.h"
#include <algorithm>
#include <algorithm>
...
@@ -61,7 +62,7 @@ wchar_t* DeckManager::GetLFListName(int lfhash) {
...
@@ -61,7 +62,7 @@ wchar_t* DeckManager::GetLFListName(int lfhash) {
}
}
return
(
wchar_t
*
)
dataManager
.
unknown_string
;
return
(
wchar_t
*
)
dataManager
.
unknown_string
;
}
}
int
DeckManager
::
Check
LFList
(
Deck
&
deck
,
int
lfhash
,
bool
allow_ocg
,
bool
allow_tcg
)
{
int
DeckManager
::
Check
Deck
(
Deck
&
deck
,
int
lfhash
,
bool
allow_ocg
,
bool
allow_tcg
)
{
std
::
unordered_map
<
int
,
int
>
ccount
;
std
::
unordered_map
<
int
,
int
>
ccount
;
std
::
unordered_map
<
int
,
int
>*
list
=
0
;
std
::
unordered_map
<
int
,
int
>*
list
=
0
;
for
(
size_t
i
=
0
;
i
<
_lfList
.
size
();
++
i
)
{
for
(
size_t
i
=
0
;
i
<
_lfList
.
size
();
++
i
)
{
...
@@ -73,53 +74,73 @@ int DeckManager::CheckLFList(Deck& deck, int lfhash, bool allow_ocg, bool allow_
...
@@ -73,53 +74,73 @@ int DeckManager::CheckLFList(Deck& deck, int lfhash, bool allow_ocg, bool allow_
if
(
!
list
)
if
(
!
list
)
return
0
;
return
0
;
int
dc
=
0
;
int
dc
=
0
;
if
(
deck
.
main
.
size
()
<
40
||
deck
.
main
.
size
()
>
60
||
deck
.
extra
.
size
()
>
15
||
deck
.
side
.
size
()
>
15
)
if
(
deck
.
main
.
size
()
<
40
||
deck
.
main
.
size
()
>
60
)
return
1
;
return
(
DECKERROR_MAINCOUNT
<<
28
)
+
deck
.
main
.
size
();
if
(
deck
.
extra
.
size
()
>
15
)
return
(
DECKERROR_EXTRACOUNT
<<
28
)
+
deck
.
extra
.
size
();
if
(
deck
.
side
.
size
()
>
15
)
return
(
DECKERROR_SIDECOUNT
<<
28
)
+
deck
.
side
.
size
();
for
(
size_t
i
=
0
;
i
<
deck
.
main
.
size
();
++
i
)
{
for
(
size_t
i
=
0
;
i
<
deck
.
main
.
size
();
++
i
)
{
code_pointer
cit
=
deck
.
main
[
i
];
code_pointer
cit
=
deck
.
main
[
i
];
if
((
!
allow_ocg
&&
(
cit
->
second
.
ot
==
0x1
))
||
(
!
allow_tcg
&&
(
cit
->
second
.
ot
==
0x2
)))
if
(
!
allow_ocg
&&
(
cit
->
second
.
ot
==
0x1
))
return
cit
->
first
;
return
(
DECKERROR_OCGONLY
<<
28
)
+
cit
->
first
;
if
(
!
allow_tcg
&&
(
cit
->
second
.
ot
==
0x2
))
return
(
DECKERROR_TCGONLY
<<
28
)
+
cit
->
first
;
if
(
cit
->
second
.
type
&
(
TYPE_FUSION
|
TYPE_SYNCHRO
|
TYPE_XYZ
|
TYPE_TOKEN
|
TYPE_LINK
))
if
(
cit
->
second
.
type
&
(
TYPE_FUSION
|
TYPE_SYNCHRO
|
TYPE_XYZ
|
TYPE_TOKEN
|
TYPE_LINK
))
return
1
;
return
(
DECKERROR_EXTRACOUNT
<<
28
)
;
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
ccount
[
code
]
++
;
ccount
[
code
]
++
;
dc
=
ccount
[
code
];
dc
=
ccount
[
code
];
if
(
dc
>
3
)
return
(
DECKERROR_CARDCOUNT
<<
28
)
+
cit
->
first
;
auto
it
=
list
->
find
(
code
);
auto
it
=
list
->
find
(
code
);
if
(
dc
>
3
||
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
)
if
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
return
cit
->
first
;
return
(
DECKERROR_LFLIST
<<
28
)
+
cit
->
first
;
}
}
for
(
size_t
i
=
0
;
i
<
deck
.
extra
.
size
();
++
i
)
{
for
(
size_t
i
=
0
;
i
<
deck
.
extra
.
size
();
++
i
)
{
code_pointer
cit
=
deck
.
extra
[
i
];
code_pointer
cit
=
deck
.
extra
[
i
];
if
((
!
allow_ocg
&&
(
cit
->
second
.
ot
==
0x1
))
||
(
!
allow_tcg
&&
(
cit
->
second
.
ot
==
0x2
)))
if
(
!
allow_ocg
&&
(
cit
->
second
.
ot
==
0x1
))
return
cit
->
first
;
return
(
DECKERROR_OCGONLY
<<
28
)
+
cit
->
first
;
if
(
!
allow_tcg
&&
(
cit
->
second
.
ot
==
0x2
))
return
(
DECKERROR_TCGONLY
<<
28
)
+
cit
->
first
;
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
ccount
[
code
]
++
;
ccount
[
code
]
++
;
dc
=
ccount
[
code
];
dc
=
ccount
[
code
];
if
(
dc
>
3
)
return
(
DECKERROR_CARDCOUNT
<<
28
)
+
cit
->
first
;
auto
it
=
list
->
find
(
code
);
auto
it
=
list
->
find
(
code
);
if
(
dc
>
3
||
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
)
if
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
return
cit
->
first
;
return
(
DECKERROR_LFLIST
<<
28
)
+
cit
->
first
;
}
}
for
(
size_t
i
=
0
;
i
<
deck
.
side
.
size
();
++
i
)
{
for
(
size_t
i
=
0
;
i
<
deck
.
side
.
size
();
++
i
)
{
code_pointer
cit
=
deck
.
side
[
i
];
code_pointer
cit
=
deck
.
side
[
i
];
if
((
!
allow_ocg
&&
(
cit
->
second
.
ot
==
0x1
))
||
(
!
allow_tcg
&&
(
cit
->
second
.
ot
==
0x2
)))
if
(
!
allow_ocg
&&
(
cit
->
second
.
ot
==
0x1
))
return
cit
->
first
;
return
(
DECKERROR_OCGONLY
<<
28
)
+
cit
->
first
;
if
(
!
allow_tcg
&&
(
cit
->
second
.
ot
==
0x2
))
return
(
DECKERROR_TCGONLY
<<
28
)
+
cit
->
first
;
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
int
code
=
cit
->
second
.
alias
?
cit
->
second
.
alias
:
cit
->
first
;
ccount
[
code
]
++
;
ccount
[
code
]
++
;
dc
=
ccount
[
code
];
dc
=
ccount
[
code
];
if
(
dc
>
3
)
return
(
DECKERROR_CARDCOUNT
<<
28
)
+
cit
->
first
;
auto
it
=
list
->
find
(
code
);
auto
it
=
list
->
find
(
code
);
if
(
dc
>
3
||
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
)
if
(
it
!=
list
->
end
()
&&
dc
>
it
->
second
)
return
cit
->
first
;
return
(
DECKERROR_LFLIST
<<
28
)
+
cit
->
first
;
}
}
return
0
;
return
0
;
}
}
void
DeckManager
::
LoadDeck
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
)
{
int
DeckManager
::
LoadDeck
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
)
{
deck
.
clear
();
deck
.
clear
();
int
code
;
int
code
;
int
errorcode
=
0
;
CardData
cd
;
CardData
cd
;
for
(
int
i
=
0
;
i
<
mainc
;
++
i
)
{
for
(
int
i
=
0
;
i
<
mainc
;
++
i
)
{
code
=
dbuf
[
i
];
code
=
dbuf
[
i
];
if
(
!
dataManager
.
GetData
(
code
,
&
cd
))
if
(
!
dataManager
.
GetData
(
code
,
&
cd
))
{
errorcode
=
code
;
continue
;
continue
;
}
if
(
cd
.
type
&
TYPE_TOKEN
)
if
(
cd
.
type
&
TYPE_TOKEN
)
continue
;
continue
;
else
if
(
cd
.
type
&
(
TYPE_FUSION
|
TYPE_SYNCHRO
|
TYPE_XYZ
|
TYPE_LINK
)
&&
deck
.
extra
.
size
()
<
15
)
{
else
if
(
cd
.
type
&
(
TYPE_FUSION
|
TYPE_SYNCHRO
|
TYPE_XYZ
|
TYPE_LINK
)
&&
deck
.
extra
.
size
()
<
15
)
{
...
@@ -130,13 +151,16 @@ void DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec) {
...
@@ -130,13 +151,16 @@ void DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec) {
}
}
for
(
int
i
=
0
;
i
<
sidec
;
++
i
)
{
for
(
int
i
=
0
;
i
<
sidec
;
++
i
)
{
code
=
dbuf
[
mainc
+
i
];
code
=
dbuf
[
mainc
+
i
];
if
(
!
dataManager
.
GetData
(
code
,
&
cd
))
if
(
!
dataManager
.
GetData
(
code
,
&
cd
))
{
errorcode
=
code
;
continue
;
continue
;
}
if
(
cd
.
type
&
TYPE_TOKEN
)
if
(
cd
.
type
&
TYPE_TOKEN
)
continue
;
continue
;
if
(
deck
.
side
.
size
()
<
15
)
if
(
deck
.
side
.
size
()
<
15
)
deck
.
side
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
//verified by GetData()
deck
.
side
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
//verified by GetData()
}
}
return
errorcode
;
}
}
bool
DeckManager
::
LoadSide
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
)
{
bool
DeckManager
::
LoadSide
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
)
{
std
::
unordered_map
<
int
,
int
>
pcount
;
std
::
unordered_map
<
int
,
int
>
pcount
;
...
...
gframe/deck_manager.h
View file @
edca1eff
...
@@ -37,8 +37,8 @@ public:
...
@@ -37,8 +37,8 @@ public:
void
LoadLFList
();
void
LoadLFList
();
wchar_t
*
GetLFListName
(
int
lfhash
);
wchar_t
*
GetLFListName
(
int
lfhash
);
int
Check
LFList
(
Deck
&
deck
,
int
lfhash
,
bool
allow_ocg
,
bool
allow_tcg
);
int
Check
Deck
(
Deck
&
deck
,
int
lfhash
,
bool
allow_ocg
,
bool
allow_tcg
);
void
LoadDeck
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
);
int
LoadDeck
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
);
bool
LoadSide
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
);
bool
LoadSide
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
);
FILE
*
OpenDeckFile
(
const
wchar_t
*
file
,
const
char
*
mode
);
FILE
*
OpenDeckFile
(
const
wchar_t
*
file
,
const
char
*
mode
);
bool
LoadDeck
(
const
wchar_t
*
file
);
bool
LoadDeck
(
const
wchar_t
*
file
);
...
...
gframe/duelclient.cpp
View file @
edca1eff
...
@@ -217,13 +217,52 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
...
@@ -217,13 +217,52 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
}
}
case
ERRMSG_DECKERROR
:
{
case
ERRMSG_DECKERROR
:
{
mainGame
->
gMutex
.
Lock
();
mainGame
->
gMutex
.
Lock
();
if
(
pkt
->
code
==
1
)
unsigned
int
code
=
pkt
->
code
&
0xFFFFFFF
;
mainGame
->
env
->
addMessageBox
(
L""
,
dataManager
.
GetSysString
(
1406
));
int
flag
=
pkt
->
code
>>
28
;
else
{
wchar_t
msgbuf
[
256
];
wchar_t
msgbuf
[
256
];
switch
(
flag
)
myswprintf
(
msgbuf
,
dataManager
.
GetSysString
(
1407
),
dataManager
.
GetName
(
pkt
->
code
));
{
mainGame
->
env
->
addMessageBox
(
L""
,
msgbuf
);
case
DECKERROR_LFLIST
:
{
myswprintf
(
msgbuf
,
dataManager
.
GetSysString
(
1407
),
dataManager
.
GetName
(
code
));
break
;
}
case
DECKERROR_OCGONLY
:
{
myswprintf
(
msgbuf
,
dataManager
.
GetSysString
(
1413
),
dataManager
.
GetName
(
code
));
break
;
}
case
DECKERROR_TCGONLY
:
{
myswprintf
(
msgbuf
,
dataManager
.
GetSysString
(
1414
),
dataManager
.
GetName
(
code
));
break
;
}
case
DECKERROR_UNKNOWNCARD
:
{
myswprintf
(
msgbuf
,
dataManager
.
GetSysString
(
1415
),
dataManager
.
GetName
(
code
),
code
);
break
;
}
}
case
DECKERROR_CARDCOUNT
:
{
myswprintf
(
msgbuf
,
dataManager
.
GetSysString
(
1416
),
dataManager
.
GetName
(
code
));
break
;
}
case
DECKERROR_MAINCOUNT
:
{
myswprintf
(
msgbuf
,
dataManager
.
GetSysString
(
1417
),
code
);
break
;
}
case
DECKERROR_EXTRACOUNT
:
{
if
(
code
>
0
)
myswprintf
(
msgbuf
,
dataManager
.
GetSysString
(
1418
),
code
);
else
myswprintf
(
msgbuf
,
dataManager
.
GetSysString
(
1420
));
break
;
}
case
DECKERROR_SIDECOUNT
:
{
myswprintf
(
msgbuf
,
dataManager
.
GetSysString
(
1419
),
code
);
break
;
}
default:
{
myswprintf
(
msgbuf
,
dataManager
.
GetSysString
(
1406
));
break
;
}
}
mainGame
->
env
->
addMessageBox
(
L""
,
msgbuf
);
mainGame
->
cbDeckSelect
->
setEnabled
(
true
);
mainGame
->
cbDeckSelect
->
setEnabled
(
true
);
mainGame
->
gMutex
.
Unlock
();
mainGame
->
gMutex
.
Unlock
();
break
;
break
;
...
@@ -285,6 +324,9 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
...
@@ -285,6 +324,9 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame
->
wSort
->
setVisible
(
false
);
mainGame
->
wSort
->
setVisible
(
false
);
mainGame
->
stTip
->
setVisible
(
false
);
mainGame
->
stTip
->
setVisible
(
false
);
mainGame
->
btnSideOK
->
setVisible
(
true
);
mainGame
->
btnSideOK
->
setVisible
(
true
);
mainGame
->
btnSideShuffle
->
setVisible
(
true
);
mainGame
->
btnSideSort
->
setVisible
(
true
);
mainGame
->
btnSideReload
->
setVisible
(
true
);
if
(
mainGame
->
dInfo
.
player_type
<
7
)
if
(
mainGame
->
dInfo
.
player_type
<
7
)
mainGame
->
btnLeaveGame
->
setVisible
(
false
);
mainGame
->
btnLeaveGame
->
setVisible
(
false
);
mainGame
->
btnSpectatorSwap
->
setVisible
(
false
);
mainGame
->
btnSpectatorSwap
->
setVisible
(
false
);
...
@@ -487,6 +529,9 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
...
@@ -487,6 +529,9 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame
->
wInfos
->
setVisible
(
true
);
mainGame
->
wInfos
->
setVisible
(
true
);
mainGame
->
wPhase
->
setVisible
(
true
);
mainGame
->
wPhase
->
setVisible
(
true
);
mainGame
->
btnSideOK
->
setVisible
(
false
);
mainGame
->
btnSideOK
->
setVisible
(
false
);
mainGame
->
btnSideShuffle
->
setVisible
(
false
);
mainGame
->
btnSideSort
->
setVisible
(
false
);
mainGame
->
btnSideReload
->
setVisible
(
false
);
mainGame
->
btnPhaseStatus
->
setVisible
(
false
);
mainGame
->
btnPhaseStatus
->
setVisible
(
false
);
mainGame
->
btnBP
->
setVisible
(
false
);
mainGame
->
btnBP
->
setVisible
(
false
);
mainGame
->
btnM2
->
setVisible
(
false
);
mainGame
->
btnM2
->
setVisible
(
false
);
...
@@ -3368,7 +3413,6 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -3368,7 +3413,6 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
ClientCard
*
xcard
=
new
ClientCard
;
ClientCard
*
xcard
=
new
ClientCard
;
ccard
->
overlayed
.
push_back
(
xcard
);
ccard
->
overlayed
.
push_back
(
xcard
);
mainGame
->
dField
.
overlay_cards
.
insert
(
xcard
);
mainGame
->
dField
.
overlay_cards
.
insert
(
xcard
);
mainGame
->
gMutex
.
Unlock
();
xcard
->
overlayTarget
=
ccard
;
xcard
->
overlayTarget
=
ccard
;
xcard
->
location
=
0x80
;
xcard
->
location
=
0x80
;
xcard
->
sequence
=
ccard
->
overlayed
.
size
()
-
1
;
xcard
->
sequence
=
ccard
->
overlayed
.
size
()
-
1
;
...
@@ -3522,7 +3566,7 @@ void DuelClient::SendResponse() {
...
@@ -3522,7 +3566,7 @@ void DuelClient::SendResponse() {
}
}
}
}
if
(
mainGame
->
dInfo
.
isSingleMode
)
{
if
(
mainGame
->
dInfo
.
isSingleMode
)
{
SingleMode
::
SetResponse
(
response_buf
);
SingleMode
::
SetResponse
(
response_buf
,
response_len
);
mainGame
->
singleSignal
.
Set
();
mainGame
->
singleSignal
.
Set
();
}
else
{
}
else
{
mainGame
->
dInfo
.
time_player
=
2
;
mainGame
->
dInfo
.
time_player
=
2
;
...
...
gframe/game.cpp
View file @
edca1eff
...
@@ -479,6 +479,12 @@ bool Game::Initialize() {
...
@@ -479,6 +479,12 @@ bool Game::Initialize() {
btnClearDeck
=
env
->
addButton
(
rect
<
s32
>
(
115
,
99
,
165
,
120
),
wDeckEdit
,
BUTTON_CLEAR_DECK
,
dataManager
.
GetSysString
(
1304
));
btnClearDeck
=
env
->
addButton
(
rect
<
s32
>
(
115
,
99
,
165
,
120
),
wDeckEdit
,
BUTTON_CLEAR_DECK
,
dataManager
.
GetSysString
(
1304
));
btnSideOK
=
env
->
addButton
(
rect
<
s32
>
(
510
,
40
,
820
,
80
),
0
,
BUTTON_SIDE_OK
,
dataManager
.
GetSysString
(
1334
));
btnSideOK
=
env
->
addButton
(
rect
<
s32
>
(
510
,
40
,
820
,
80
),
0
,
BUTTON_SIDE_OK
,
dataManager
.
GetSysString
(
1334
));
btnSideOK
->
setVisible
(
false
);
btnSideOK
->
setVisible
(
false
);
btnSideShuffle
=
env
->
addButton
(
rect
<
s32
>
(
310
,
100
,
370
,
130
),
0
,
BUTTON_SHUFFLE_DECK
,
dataManager
.
GetSysString
(
1307
));
btnSideShuffle
->
setVisible
(
false
);
btnSideSort
=
env
->
addButton
(
rect
<
s32
>
(
375
,
100
,
435
,
130
),
0
,
BUTTON_SORT_DECK
,
dataManager
.
GetSysString
(
1305
));
btnSideSort
->
setVisible
(
false
);
btnSideReload
=
env
->
addButton
(
rect
<
s32
>
(
440
,
100
,
500
,
130
),
0
,
BUTTON_SIDE_RELOAD
,
dataManager
.
GetSysString
(
1309
));
btnSideReload
->
setVisible
(
false
);
//
//
scrFilter
=
env
->
addScrollBar
(
false
,
recti
(
999
,
161
,
1019
,
629
),
0
,
SCROLL_FILTER
);
scrFilter
=
env
->
addScrollBar
(
false
,
recti
(
999
,
161
,
1019
,
629
),
0
,
SCROLL_FILTER
);
scrFilter
->
setLargeStep
(
10
);
scrFilter
->
setLargeStep
(
10
);
...
@@ -1035,12 +1041,12 @@ void Game::LoadConfig() {
...
@@ -1035,12 +1041,12 @@ void Game::LoadConfig() {
gameConf
.
separate_clear_button
=
1
;
gameConf
.
separate_clear_button
=
1
;
gameConf
.
auto_search_limit
=
0
;
gameConf
.
auto_search_limit
=
0
;
gameConf
.
chkIgnoreDeckChanges
=
0
;
gameConf
.
chkIgnoreDeckChanges
=
0
;
gameConf
.
defaultOT
=
1
;
gameConf
.
enable_sound
=
true
;
gameConf
.
enable_sound
=
true
;
gameConf
.
sound_volume
=
0.5
;
gameConf
.
sound_volume
=
0.5
;
gameConf
.
enable_music
=
true
;
gameConf
.
enable_music
=
true
;
gameConf
.
music_volume
=
0.5
;
gameConf
.
music_volume
=
0.5
;
gameConf
.
music_mode
=
1
;
gameConf
.
music_mode
=
1
;
gameConf
.
defaultOT
=
1
;
while
(
fgets
(
linebuf
,
256
,
fp
))
{
while
(
fgets
(
linebuf
,
256
,
fp
))
{
sscanf
(
linebuf
,
"%s = %s"
,
strbuf
,
valbuf
);
sscanf
(
linebuf
,
"%s = %s"
,
strbuf
,
valbuf
);
if
(
!
strcmp
(
strbuf
,
"antialias"
))
{
if
(
!
strcmp
(
strbuf
,
"antialias"
))
{
...
@@ -1099,6 +1105,8 @@ void Game::LoadConfig() {
...
@@ -1099,6 +1105,8 @@ void Game::LoadConfig() {
gameConf
.
auto_search_limit
=
atoi
(
valbuf
);
gameConf
.
auto_search_limit
=
atoi
(
valbuf
);
}
else
if
(
!
strcmp
(
strbuf
,
"ignore_deck_changes"
))
{
}
else
if
(
!
strcmp
(
strbuf
,
"ignore_deck_changes"
))
{
gameConf
.
chkIgnoreDeckChanges
=
atoi
(
valbuf
);
gameConf
.
chkIgnoreDeckChanges
=
atoi
(
valbuf
);
}
else
if
(
!
strcmp
(
strbuf
,
"default_ot"
))
{
gameConf
.
defaultOT
=
atoi
(
valbuf
);
}
else
if
(
!
strcmp
(
strbuf
,
"enable_sound"
))
{
}
else
if
(
!
strcmp
(
strbuf
,
"enable_sound"
))
{
gameConf
.
enable_sound
=
atoi
(
valbuf
)
>
0
;
gameConf
.
enable_sound
=
atoi
(
valbuf
)
>
0
;
}
else
if
(
!
strcmp
(
strbuf
,
"sound_volume"
))
{
}
else
if
(
!
strcmp
(
strbuf
,
"sound_volume"
))
{
...
@@ -1109,8 +1117,6 @@ void Game::LoadConfig() {
...
@@ -1109,8 +1117,6 @@ void Game::LoadConfig() {
gameConf
.
music_volume
=
atof
(
valbuf
)
/
100
;
gameConf
.
music_volume
=
atof
(
valbuf
)
/
100
;
}
else
if
(
!
strcmp
(
strbuf
,
"music_mode"
))
{
}
else
if
(
!
strcmp
(
strbuf
,
"music_mode"
))
{
gameConf
.
music_mode
=
atoi
(
valbuf
);
gameConf
.
music_mode
=
atoi
(
valbuf
);
}
else
if
(
!
strcmp
(
strbuf
,
"default_ot"
))
{
gameConf
.
defaultOT
=
atoi
(
valbuf
);
}
else
{
}
else
{
// options allowing multiple words
// options allowing multiple words
sscanf
(
linebuf
,
"%s = %240[^
\n
]"
,
strbuf
,
valbuf
);
sscanf
(
linebuf
,
"%s = %240[^
\n
]"
,
strbuf
,
valbuf
);
...
@@ -1169,6 +1175,7 @@ void Game::SaveConfig() {
...
@@ -1169,6 +1175,7 @@ void Game::SaveConfig() {
fprintf
(
fp
,
"#auto_search_limit >= 0: Start search automatically when the user enters N chars
\n
"
);
fprintf
(
fp
,
"#auto_search_limit >= 0: Start search automatically when the user enters N chars
\n
"
);
fprintf
(
fp
,
"auto_search_limit = %d
\n
"
,
gameConf
.
auto_search_limit
);
fprintf
(
fp
,
"auto_search_limit = %d
\n
"
,
gameConf
.
auto_search_limit
);
fprintf
(
fp
,
"ignore_deck_changes = %d
\n
"
,
((
mainGame
->
chkIgnoreDeckChanges
->
isChecked
())
?
1
:
0
));
fprintf
(
fp
,
"ignore_deck_changes = %d
\n
"
,
((
mainGame
->
chkIgnoreDeckChanges
->
isChecked
())
?
1
:
0
));
fprintf
(
fp
,
"default_ot = %d
\n
"
,
gameConf
.
defaultOT
);
fprintf
(
fp
,
"enable_sound = %d
\n
"
,
((
mainGame
->
chkEnableSound
->
isChecked
())
?
1
:
0
));
fprintf
(
fp
,
"enable_sound = %d
\n
"
,
((
mainGame
->
chkEnableSound
->
isChecked
())
?
1
:
0
));
fprintf
(
fp
,
"enable_music = %d
\n
"
,
((
mainGame
->
chkEnableMusic
->
isChecked
())
?
1
:
0
));
fprintf
(
fp
,
"enable_music = %d
\n
"
,
((
mainGame
->
chkEnableMusic
->
isChecked
())
?
1
:
0
));
fprintf
(
fp
,
"#Volume of sound and music, between 0 and 100
\n
"
);
fprintf
(
fp
,
"#Volume of sound and music, between 0 and 100
\n
"
);
...
@@ -1179,7 +1186,6 @@ void Game::SaveConfig() {
...
@@ -1179,7 +1186,6 @@ void Game::SaveConfig() {
if
(
vol
<
0
)
vol
=
0
;
else
if
(
vol
>
100
)
vol
=
100
;
if
(
vol
<
0
)
vol
=
0
;
else
if
(
vol
>
100
)
vol
=
100
;
fprintf
(
fp
,
"music_volume = %d
\n
"
,
vol
);
fprintf
(
fp
,
"music_volume = %d
\n
"
,
vol
);
fprintf
(
fp
,
"music_mode = %d
\n
"
,
((
mainGame
->
chkMusicMode
->
isChecked
())
?
1
:
0
));
fprintf
(
fp
,
"music_mode = %d
\n
"
,
((
mainGame
->
chkMusicMode
->
isChecked
())
?
1
:
0
));
fprintf
(
fp
,
"default_ot = %d
\n
"
,
gameConf
.
defaultOT
);
fclose
(
fp
);
fclose
(
fp
);
}
}
void
Game
::
PlaySoundEffect
(
int
sound
)
{
void
Game
::
PlaySoundEffect
(
int
sound
)
{
...
...
gframe/game.h
View file @
edca1eff
...
@@ -40,12 +40,12 @@ struct Config {
...
@@ -40,12 +40,12 @@ struct Config {
int
separate_clear_button
;
int
separate_clear_button
;
int
auto_search_limit
;
int
auto_search_limit
;
int
chkIgnoreDeckChanges
;
int
chkIgnoreDeckChanges
;
int
defaultOT
;
bool
enable_sound
;
bool
enable_sound
;
bool
enable_music
;
bool
enable_music
;
double
sound_volume
;
double
sound_volume
;
double
music_volume
;
double
music_volume
;
int
music_mode
;
int
music_mode
;
int
defaultOT
;
};
};
struct
DuelInfo
{
struct
DuelInfo
{
...
@@ -394,6 +394,9 @@ public:
...
@@ -394,6 +394,9 @@ public:
irr
::
gui
::
IGUIButton
*
btnDeleteDeck
;
irr
::
gui
::
IGUIButton
*
btnDeleteDeck
;
irr
::
gui
::
IGUIButton
*
btnSaveDeckAs
;
irr
::
gui
::
IGUIButton
*
btnSaveDeckAs
;
irr
::
gui
::
IGUIButton
*
btnSideOK
;
irr
::
gui
::
IGUIButton
*
btnSideOK
;
irr
::
gui
::
IGUIButton
*
btnSideShuffle
;
irr
::
gui
::
IGUIButton
*
btnSideSort
;
irr
::
gui
::
IGUIButton
*
btnSideReload
;
irr
::
gui
::
IGUIEditBox
*
ebDeckname
;
irr
::
gui
::
IGUIEditBox
*
ebDeckname
;
//filter
//filter
irr
::
gui
::
IGUIStaticText
*
wFilter
;
irr
::
gui
::
IGUIStaticText
*
wFilter
;
...
@@ -565,7 +568,7 @@ extern Game* mainGame;
...
@@ -565,7 +568,7 @@ extern Game* mainGame;
#define BUTTON_SAVE_DECK 304
#define BUTTON_SAVE_DECK 304
#define BUTTON_SAVE_DECK_AS 305
#define BUTTON_SAVE_DECK_AS 305
#define BUTTON_DELETE_DECK 306
#define BUTTON_DELETE_DECK 306
//#define BUTTON_DBEXIT
307
#define BUTTON_SIDE_RELOAD
307
#define BUTTON_SORT_DECK 308
#define BUTTON_SORT_DECK 308
#define BUTTON_SIDE_OK 309
#define BUTTON_SIDE_OK 309
#define BUTTON_SHUFFLE_DECK 310
#define BUTTON_SHUFFLE_DECK 310
...
...
gframe/network.h
View file @
edca1eff
...
@@ -207,6 +207,15 @@ public:
...
@@ -207,6 +207,15 @@ public:
#define ERRMSG_SIDEERROR 0x3
#define ERRMSG_SIDEERROR 0x3
#define ERRMSG_VERERROR 0x4
#define ERRMSG_VERERROR 0x4
#define DECKERROR_LFLIST 0x1
#define DECKERROR_OCGONLY 0x2
#define DECKERROR_TCGONLY 0x3
#define DECKERROR_UNKNOWNCARD 0x4
#define DECKERROR_CARDCOUNT 0x5
#define DECKERROR_MAINCOUNT 0x6
#define DECKERROR_EXTRACOUNT 0x7
#define DECKERROR_SIDECOUNT 0x8
#define MODE_SINGLE 0x0
#define MODE_SINGLE 0x0
#define MODE_MATCH 0x1
#define MODE_MATCH 0x1
#define MODE_TAG 0x2
#define MODE_TAG 0x2
...
...
gframe/replay.cpp
View file @
edca1eff
...
@@ -226,7 +226,7 @@ short Replay::ReadInt16() {
...
@@ -226,7 +226,7 @@ short Replay::ReadInt16() {
if
(
!
is_replaying
)
if
(
!
is_replaying
)
return
-
1
;
return
-
1
;
short
ret
=
*
((
short
*
)
pdata
);
short
ret
=
*
((
short
*
)
pdata
);
pdata
+=
4
;
pdata
+=
2
;
return
ret
;
return
ret
;
}
}
char
Replay
::
ReadInt8
()
{
char
Replay
::
ReadInt8
()
{
...
...
gframe/replay.h
View file @
edca1eff
...
@@ -9,6 +9,7 @@ namespace ygo {
...
@@ -9,6 +9,7 @@ namespace ygo {
#define REPLAY_COMPRESSED 0x1
#define REPLAY_COMPRESSED 0x1
#define REPLAY_TAG 0x2
#define REPLAY_TAG 0x2
#define REPLAY_DECODED 0x4
#define REPLAY_DECODED 0x4
#define REPLAY_SINGLE_MODE 0x8
struct
ReplayHeader
{
struct
ReplayHeader
{
unsigned
int
id
;
unsigned
int
id
;
...
...
gframe/replay_mode.cpp
View file @
edca1eff
This diff is collapsed.
Click to expand it.
gframe/replay_mode.h
View file @
edca1eff
...
@@ -43,6 +43,7 @@ public:
...
@@ -43,6 +43,7 @@ public:
static
void
ReplayRefreshDeck
(
int
player
,
int
flag
=
0x181fff
);
static
void
ReplayRefreshDeck
(
int
player
,
int
flag
=
0x181fff
);
static
void
ReplayRefreshExtra
(
int
player
,
int
flag
=
0x181fff
);
static
void
ReplayRefreshExtra
(
int
player
,
int
flag
=
0x181fff
);
static
void
ReplayRefreshSingle
(
int
player
,
int
location
,
int
sequence
,
int
flag
=
0xf81fff
);
static
void
ReplayRefreshSingle
(
int
player
,
int
location
,
int
sequence
,
int
flag
=
0xf81fff
);
static
void
ReplayReload
();
static
int
MessageHandler
(
long
fduel
,
int
type
);
static
int
MessageHandler
(
long
fduel
,
int
type
);
};
};
...
...
gframe/single_duel.cpp
View file @
edca1eff
...
@@ -252,16 +252,23 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
...
@@ -252,16 +252,23 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
if
(
ready
[
dp
->
type
]
==
is_ready
)
if
(
ready
[
dp
->
type
]
==
is_ready
)
return
;
return
;
if
(
is_ready
)
{
if
(
is_ready
)
{
bool
allow_ocg
=
host_info
.
rule
==
0
||
host_info
.
rule
==
2
;
unsigned
int
deckerror
=
0
;
bool
allow_tcg
=
host_info
.
rule
==
1
||
host_info
.
rule
==
2
;
if
(
!
host_info
.
no_check_deck
)
{
int
res
=
host_info
.
no_check_deck
?
false
:
deckManager
.
CheckLFList
(
pdeck
[
dp
->
type
],
host_info
.
lflist
,
allow_ocg
,
allow_tcg
);
if
(
deck_error
[
dp
->
type
])
{
if
(
res
)
{
deckerror
=
(
DECKERROR_UNKNOWNCARD
<<
28
)
+
deck_error
[
dp
->
type
];
}
else
{
bool
allow_ocg
=
host_info
.
rule
==
0
||
host_info
.
rule
==
2
;
bool
allow_tcg
=
host_info
.
rule
==
1
||
host_info
.
rule
==
2
;
deckerror
=
deckManager
.
CheckDeck
(
pdeck
[
dp
->
type
],
host_info
.
lflist
,
allow_ocg
,
allow_tcg
);
}
}
if
(
deckerror
)
{
STOC_HS_PlayerChange
scpc
;
STOC_HS_PlayerChange
scpc
;
scpc
.
status
=
(
dp
->
type
<<
4
)
|
PLAYERCHANGE_NOTREADY
;
scpc
.
status
=
(
dp
->
type
<<
4
)
|
PLAYERCHANGE_NOTREADY
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_HS_PLAYER_CHANGE
,
scpc
);
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_HS_PLAYER_CHANGE
,
scpc
);
STOC_ErrorMsg
scem
;
STOC_ErrorMsg
scem
;
scem
.
msg
=
ERRMSG_DECKERROR
;
scem
.
msg
=
ERRMSG_DECKERROR
;
scem
.
code
=
res
;
scem
.
code
=
deckerror
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_ERROR_MSG
,
scem
);
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_ERROR_MSG
,
scem
);
return
;
return
;
}
}
...
@@ -287,7 +294,7 @@ void SingleDuel::UpdateDeck(DuelPlayer* dp, void* pdata) {
...
@@ -287,7 +294,7 @@ void SingleDuel::UpdateDeck(DuelPlayer* dp, void* pdata) {
int
mainc
=
BufferIO
::
ReadInt32
(
deckbuf
);
int
mainc
=
BufferIO
::
ReadInt32
(
deckbuf
);
int
sidec
=
BufferIO
::
ReadInt32
(
deckbuf
);
int
sidec
=
BufferIO
::
ReadInt32
(
deckbuf
);
if
(
duel_count
==
0
)
{
if
(
duel_count
==
0
)
{
deckManager
.
LoadDeck
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
);
deck
_error
[
dp
->
type
]
=
deck
Manager
.
LoadDeck
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
);
}
else
{
}
else
{
if
(
deckManager
.
LoadSide
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
))
{
if
(
deckManager
.
LoadSide
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
))
{
ready
[
dp
->
type
]
=
true
;
ready
[
dp
->
type
]
=
true
;
...
...
gframe/single_duel.h
View file @
edca1eff
...
@@ -46,6 +46,7 @@ protected:
...
@@ -46,6 +46,7 @@ protected:
DuelPlayer
*
pplayer
[
2
];
DuelPlayer
*
pplayer
[
2
];
bool
ready
[
2
];
bool
ready
[
2
];
Deck
pdeck
[
2
];
Deck
pdeck
[
2
];
int
deck_error
[
2
];
unsigned
char
hand_result
[
2
];
unsigned
char
hand_result
[
2
];
unsigned
char
last_response
;
unsigned
char
last_response
;
std
::
set
<
DuelPlayer
*>
observers
;
std
::
set
<
DuelPlayer
*>
observers
;
...
...
gframe/single_mode.cpp
View file @
edca1eff
...
@@ -10,6 +10,7 @@ namespace ygo {
...
@@ -10,6 +10,7 @@ namespace ygo {
long
SingleMode
::
pduel
=
0
;
long
SingleMode
::
pduel
=
0
;
bool
SingleMode
::
is_closing
=
false
;
bool
SingleMode
::
is_closing
=
false
;
bool
SingleMode
::
is_continuing
=
false
;
bool
SingleMode
::
is_continuing
=
false
;
Replay
SingleMode
::
last_replay
;
static
byte
buffer
[
0x20000
];
static
byte
buffer
[
0x20000
];
...
@@ -23,23 +24,18 @@ void SingleMode::StopPlay(bool is_exiting) {
...
@@ -23,23 +24,18 @@ void SingleMode::StopPlay(bool is_exiting) {
mainGame
->
actionSignal
.
Set
();
mainGame
->
actionSignal
.
Set
();
mainGame
->
singleSignal
.
Set
();
mainGame
->
singleSignal
.
Set
();
}
}
void
SingleMode
::
SetResponse
(
unsigned
char
*
resp
)
{
void
SingleMode
::
SetResponse
(
unsigned
char
*
resp
,
unsigned
int
len
)
{
if
(
!
pduel
)
if
(
!
pduel
)
return
;
return
;
last_replay
.
WriteInt8
(
len
);
last_replay
.
WriteData
(
resp
,
len
);
set_responseb
(
pduel
,
resp
);
set_responseb
(
pduel
,
resp
);
}
}
int
SingleMode
::
SinglePlayThread
(
void
*
param
)
{
int
SingleMode
::
SinglePlayThread
(
void
*
param
)
{
char
fname2
[
256
];
const
int
start_lp
=
8000
;
size_t
slen
;
const
int
start_hand
=
5
;
if
(
open_file
)
{
const
int
draw_count
=
1
;
slen
=
BufferIO
::
EncodeUTF8
(
open_file_name
,
fname2
);
const
int
opt
=
0
;
open_file
=
false
;
}
else
{
const
wchar_t
*
name
=
mainGame
->
lstSinglePlayList
->
getListItem
(
mainGame
->
lstSinglePlayList
->
getSelected
());
wchar_t
fname
[
256
];
myswprintf
(
fname
,
L"./single/%ls"
,
name
);
slen
=
BufferIO
::
EncodeUTF8
(
fname
,
fname2
);
}
mtrandom
rnd
;
mtrandom
rnd
;
time_t
seed
=
time
(
0
);
time_t
seed
=
time
(
0
);
rnd
.
reset
(
seed
);
rnd
.
reset
(
seed
);
...
@@ -47,24 +43,44 @@ int SingleMode::SinglePlayThread(void* param) {
...
@@ -47,24 +43,44 @@ int SingleMode::SinglePlayThread(void* param) {
set_card_reader
((
card_reader
)
DataManager
::
CardReader
);
set_card_reader
((
card_reader
)
DataManager
::
CardReader
);
set_message_handler
((
message_handler
)
MessageHandler
);
set_message_handler
((
message_handler
)
MessageHandler
);
pduel
=
create_duel
(
rnd
.
rand
());
pduel
=
create_duel
(
rnd
.
rand
());
set_player_info
(
pduel
,
0
,
8000
,
5
,
1
);
set_player_info
(
pduel
,
0
,
start_lp
,
start_hand
,
draw_count
);
set_player_info
(
pduel
,
1
,
8000
,
5
,
1
);
set_player_info
(
pduel
,
1
,
start_lp
,
start_hand
,
draw_count
);
mainGame
->
dInfo
.
lp
[
0
]
=
8000
;
mainGame
->
dInfo
.
lp
[
0
]
=
start_lp
;
mainGame
->
dInfo
.
lp
[
1
]
=
8000
;
mainGame
->
dInfo
.
lp
[
1
]
=
start_lp
;
myswprintf
(
mainGame
->
dInfo
.
strLP
[
0
],
L"%d"
,
mainGame
->
dInfo
.
lp
[
0
]);
myswprintf
(
mainGame
->
dInfo
.
strLP
[
0
],
L"%d"
,
mainGame
->
dInfo
.
lp
[
0
]);
myswprintf
(
mainGame
->
dInfo
.
strLP
[
1
],
L"%d"
,
mainGame
->
dInfo
.
lp
[
1
]);
myswprintf
(
mainGame
->
dInfo
.
strLP
[
1
],
L"%d"
,
mainGame
->
dInfo
.
lp
[
1
]);
BufferIO
::
CopyWStr
(
mainGame
->
ebNickName
->
getText
(),
mainGame
->
dInfo
.
hostname
,
20
);
BufferIO
::
CopyWStr
(
mainGame
->
ebNickName
->
getText
(),
mainGame
->
dInfo
.
hostname
,
20
);
mainGame
->
dInfo
.
clientname
[
0
]
=
0
;
mainGame
->
dInfo
.
clientname
[
0
]
=
0
;
mainGame
->
dInfo
.
turn
=
0
;
mainGame
->
dInfo
.
turn
=
0
;
if
(
!
preload_script
(
pduel
,
fname2
,
slen
))
{
char
filename
[
256
];
wchar_t
fname
[
256
];
size_t
slen
=
0
;
myswprintf
(
fname
,
L"./single/%ls"
,
open_file_name
);
if
(
open_file
)
{
slen
=
BufferIO
::
EncodeUTF8
(
fname
,
fname2
);
open_file
=
false
;
if
(
!
preload_script
(
pduel
,
fname2
,
slen
))
{
slen
=
BufferIO
::
EncodeUTF8
(
open_file_name
,
filename
);
end_duel
(
pduel
);
if
(
!
preload_script
(
pduel
,
filename
,
slen
))
{
return
0
;
wchar_t
fname
[
256
];
myswprintf
(
fname
,
L"./single/%ls"
,
open_file_name
);
slen
=
BufferIO
::
EncodeUTF8
(
fname
,
filename
);
if
(
!
preload_script
(
pduel
,
filename
,
slen
))
slen
=
0
;
}
}
}
else
{
const
wchar_t
*
name
=
mainGame
->
lstSinglePlayList
->
getListItem
(
mainGame
->
lstSinglePlayList
->
getSelected
());
wchar_t
fname
[
256
];
myswprintf
(
fname
,
L"./single/%ls"
,
name
);
slen
=
BufferIO
::
EncodeUTF8
(
fname
,
filename
);
if
(
!
preload_script
(
pduel
,
filename
,
slen
))
slen
=
0
;
}
if
(
slen
==
0
)
{
end_duel
(
pduel
);
return
0
;
}
}
ReplayHeader
rh
;
rh
.
id
=
0x31707279
;
rh
.
version
=
PRO_VERSION
;
rh
.
flag
=
REPLAY_SINGLE_MODE
;
rh
.
seed
=
seed
;
mainGame
->
gMutex
.
Lock
();
mainGame
->
gMutex
.
Lock
();
mainGame
->
HideElement
(
mainGame
->
wSinglePlay
);
mainGame
->
HideElement
(
mainGame
->
wSinglePlay
);
mainGame
->
wCardImg
->
setVisible
(
true
);
mainGame
->
wCardImg
->
setVisible
(
true
);
...
@@ -85,11 +101,24 @@ int SingleMode::SinglePlayThread(void* param) {
...
@@ -85,11 +101,24 @@ int SingleMode::SinglePlayThread(void* param) {
mainGame
->
dInfo
.
isSingleMode
=
true
;
mainGame
->
dInfo
.
isSingleMode
=
true
;
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
dField
);
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
dField
);
mainGame
->
gMutex
.
Unlock
();
mainGame
->
gMutex
.
Unlock
();
start_duel
(
pduel
,
0
);
char
engineBuffer
[
0x1000
];
char
engineBuffer
[
0x1000
];
is_closing
=
false
;
is_closing
=
false
;
is_continuing
=
true
;
is_continuing
=
true
;
int
len
=
0
;
int
len
=
get_message
(
pduel
,
(
byte
*
)
engineBuffer
);
if
(
len
>
0
)
is_continuing
=
SinglePlayAnalyze
(
engineBuffer
,
len
);
last_replay
.
BeginRecord
();
last_replay
.
WriteHeader
(
rh
);
last_replay
.
WriteData
(
mainGame
->
dInfo
.
hostname
,
40
,
false
);
last_replay
.
WriteData
(
mainGame
->
dInfo
.
clientname
,
40
,
false
);
last_replay
.
WriteInt32
(
start_lp
,
false
);
last_replay
.
WriteInt32
(
start_hand
,
false
);
last_replay
.
WriteInt32
(
draw_count
,
false
);
last_replay
.
WriteInt32
(
opt
,
false
);
last_replay
.
WriteInt16
(
slen
,
false
);
last_replay
.
WriteData
(
filename
,
slen
,
false
);
last_replay
.
Flush
();
start_duel
(
pduel
,
opt
);
while
(
is_continuing
)
{
while
(
is_continuing
)
{
int
result
=
process
(
pduel
);
int
result
=
process
(
pduel
);
len
=
result
&
0xffff
;
len
=
result
&
0xffff
;
...
@@ -99,6 +128,21 @@ int SingleMode::SinglePlayThread(void* param) {
...
@@ -99,6 +128,21 @@ int SingleMode::SinglePlayThread(void* param) {
is_continuing
=
SinglePlayAnalyze
(
engineBuffer
,
len
);
is_continuing
=
SinglePlayAnalyze
(
engineBuffer
,
len
);
}
}
}
}
last_replay
.
EndRecord
();
time_t
nowtime
=
time
(
NULL
);
struct
tm
*
localedtime
=
localtime
(
&
nowtime
);
char
timebuf
[
40
];
strftime
(
timebuf
,
40
,
"%Y-%m-%d %H-%M-%S"
,
localedtime
);
size_t
size
=
strlen
(
timebuf
)
+
1
;
wchar_t
timetext
[
80
];
mbstowcs
(
timetext
,
timebuf
,
size
);
mainGame
->
ebRSName
->
setText
(
timetext
);
mainGame
->
PopupElement
(
mainGame
->
wReplaySave
);
mainGame
->
gMutex
.
Unlock
();
mainGame
->
replaySignal
.
Reset
();
mainGame
->
replaySignal
.
Wait
();
if
(
mainGame
->
actionParam
)
last_replay
.
SaveReplay
(
mainGame
->
ebRSName
->
getText
());
end_duel
(
pduel
);
end_duel
(
pduel
);
if
(
!
is_closing
)
{
if
(
!
is_closing
)
{
mainGame
->
gMutex
.
Lock
();
mainGame
->
gMutex
.
Lock
();
...
...
gframe/single_mode.h
View file @
edca1eff
#ifndef SINGLE_MODE_H
#ifndef SINGLE_MODE_H
#define SINGLE_MODE_H
#define SINGLE_MODE_H
#include "config.h"
#include "replay.h"
#include "data_manager.h"
#include "deck_manager.h"
#include "../ocgcore/mtrandom.h"
namespace
ygo
{
namespace
ygo
{
...
@@ -17,7 +14,7 @@ private:
...
@@ -17,7 +14,7 @@ private:
public:
public:
static
bool
StartPlay
();
static
bool
StartPlay
();
static
void
StopPlay
(
bool
is_exiting
=
false
);
static
void
StopPlay
(
bool
is_exiting
=
false
);
static
void
SetResponse
(
unsigned
char
*
resp
);
static
void
SetResponse
(
unsigned
char
*
resp
,
unsigned
int
len
);
static
int
SinglePlayThread
(
void
*
param
);
static
int
SinglePlayThread
(
void
*
param
);
static
bool
SinglePlayAnalyze
(
char
*
msg
,
unsigned
int
len
);
static
bool
SinglePlayAnalyze
(
char
*
msg
,
unsigned
int
len
);
...
@@ -31,6 +28,9 @@ public:
...
@@ -31,6 +28,9 @@ public:
static
byte
*
ScriptReader
(
const
char
*
script_name
,
int
*
slen
);
static
byte
*
ScriptReader
(
const
char
*
script_name
,
int
*
slen
);
static
int
MessageHandler
(
long
fduel
,
int
type
);
static
int
MessageHandler
(
long
fduel
,
int
type
);
protected:
static
Replay
last_replay
;
};
};
}
}
...
...
gframe/tag_duel.cpp
View file @
edca1eff
...
@@ -222,16 +222,23 @@ void TagDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
...
@@ -222,16 +222,23 @@ void TagDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
if
(
dp
->
type
>
3
||
ready
[
dp
->
type
]
==
is_ready
)
if
(
dp
->
type
>
3
||
ready
[
dp
->
type
]
==
is_ready
)
return
;
return
;
if
(
is_ready
)
{
if
(
is_ready
)
{
bool
allow_ocg
=
host_info
.
rule
==
0
||
host_info
.
rule
==
2
;
unsigned
int
deckerror
=
0
;
bool
allow_tcg
=
host_info
.
rule
==
1
||
host_info
.
rule
==
2
;
if
(
!
host_info
.
no_check_deck
)
{
int
res
=
host_info
.
no_check_deck
?
false
:
deckManager
.
CheckLFList
(
pdeck
[
dp
->
type
],
host_info
.
lflist
,
allow_ocg
,
allow_tcg
);
if
(
deck_error
[
dp
->
type
])
{
if
(
res
)
{
deckerror
=
(
DECKERROR_UNKNOWNCARD
<<
28
)
+
deck_error
[
dp
->
type
];
}
else
{
bool
allow_ocg
=
host_info
.
rule
==
0
||
host_info
.
rule
==
2
;
bool
allow_tcg
=
host_info
.
rule
==
1
||
host_info
.
rule
==
2
;
deckerror
=
deckManager
.
CheckDeck
(
pdeck
[
dp
->
type
],
host_info
.
lflist
,
allow_ocg
,
allow_tcg
);
}
}
if
(
deckerror
)
{
STOC_HS_PlayerChange
scpc
;
STOC_HS_PlayerChange
scpc
;
scpc
.
status
=
(
dp
->
type
<<
4
)
|
PLAYERCHANGE_NOTREADY
;
scpc
.
status
=
(
dp
->
type
<<
4
)
|
PLAYERCHANGE_NOTREADY
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_HS_PLAYER_CHANGE
,
scpc
);
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_HS_PLAYER_CHANGE
,
scpc
);
STOC_ErrorMsg
scem
;
STOC_ErrorMsg
scem
;
scem
.
msg
=
ERRMSG_DECKERROR
;
scem
.
msg
=
ERRMSG_DECKERROR
;
scem
.
code
=
res
;
scem
.
code
=
deckerror
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_ERROR_MSG
,
scem
);
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_ERROR_MSG
,
scem
);
return
;
return
;
}
}
...
@@ -256,7 +263,7 @@ void TagDuel::UpdateDeck(DuelPlayer* dp, void* pdata) {
...
@@ -256,7 +263,7 @@ void TagDuel::UpdateDeck(DuelPlayer* dp, void* pdata) {
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
);
deckManager
.
LoadDeck
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
);
deck
_error
[
dp
->
type
]
=
deck
Manager
.
LoadDeck
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
);
}
}
void
TagDuel
::
StartDuel
(
DuelPlayer
*
dp
)
{
void
TagDuel
::
StartDuel
(
DuelPlayer
*
dp
)
{
if
(
dp
!=
host_player
)
if
(
dp
!=
host_player
)
...
...
gframe/tag_duel.h
View file @
edca1eff
...
@@ -48,6 +48,7 @@ protected:
...
@@ -48,6 +48,7 @@ protected:
std
::
set
<
DuelPlayer
*>
observers
;
std
::
set
<
DuelPlayer
*>
observers
;
bool
ready
[
4
];
bool
ready
[
4
];
Deck
pdeck
[
4
];
Deck
pdeck
[
4
];
int
deck_error
[
4
];
unsigned
char
hand_result
[
2
];
unsigned
char
hand_result
[
2
];
unsigned
char
last_response
;
unsigned
char
last_response
;
Replay
last_replay
;
Replay
last_replay
;
...
...
strings.conf
View file @
edca1eff
...
@@ -319,6 +319,7 @@
...
@@ -319,6 +319,7 @@
!
system
1306
退出编辑
!
system
1306
退出编辑
!
system
1307
打乱
!
system
1307
打乱
!
system
1308
删除
!
system
1308
删除
!
system
1309
重置
!
system
1310
(无)
!
system
1310
(无)
!
system
1311
种类:
!
system
1311
种类:
!
system
1312
怪兽
!
system
1312
怪兽
...
@@ -385,12 +386,20 @@
...
@@ -385,12 +386,20 @@
!
system
1404
密码错误。
!
system
1404
密码错误。
!
system
1405
主机拒绝了连接。
!
system
1405
主机拒绝了连接。
!
system
1406
无效卡组。
!
system
1406
无效卡组。
!
system
1407
「%
ls
」的数量不符合当前设定。
!
system
1407
「%
ls
」的数量不符合当前
禁限卡表
设定。
!
system
1408
更换副卡组失败。
!
system
1408
更换副卡组失败。
!
system
1409
等待更换副卡组中...
!
system
1409
等待更换副卡组中...
!
system
1410
卡组数量与先前不符合。
!
system
1410
卡组数量与先前不符合。
!
system
1411
版本不匹配(%
X
.
0
%
X
.%
X
)。
!
system
1411
版本不匹配(%
X
.
0
%
X
.%
X
)。
!
system
1412
无法解析主机地址。
!
system
1412
无法解析主机地址。
!
system
1413
「%
ls
」为
OCG
独有卡,不允许在当前设定下使用。
!
system
1414
「%
ls
」为
TCG
独有卡,不允许在当前设定下使用。
!
system
1415
卡组中「%
ls
(%
d
)」无法被主机识别。
!
system
1416
卡组中「%
ls
」的总数量超过
3
张。
!
system
1417
主卡组数量应为
40
-
60
张,当前卡组数量为%
d
张。
!
system
1418
额外卡组数量应不超过
15
张,当前卡组数量为%
d
张。
!
system
1419
副卡组数量应不超过
15
张,当前卡组数量为%
d
张。
!
system
1420
有额外卡组卡片存在于主卡组,可能是额外卡组数量超过
15
张。
!
system
1500
决斗结束。
!
system
1500
决斗结束。
!
system
1501
录像结束。
!
system
1501
录像结束。
!
system
1502
连接已断开。
!
system
1502
连接已断开。
...
...
system.conf
View file @
edca1eff
...
@@ -27,10 +27,10 @@ separate_clear_button = 1
...
@@ -27,10 +27,10 @@ separate_clear_button = 1
#auto_search_limit >= 0: Start search automatically when the user enters N chars.
#auto_search_limit >= 0: Start search automatically when the user enters N chars.
auto_search_limit
=
0
auto_search_limit
=
0
ignore_deck_changes
=
0
ignore_deck_changes
=
0
default_ot
=
1
enable_sound
=
1
enable_sound
=
1
enable_music
=
1
enable_music
=
1
#Volume of sound and music, between 0 and 100
#Volume of sound and music, between 0 and 100
sound_volume
=
50
sound_volume
=
50
music_volume
=
50
music_volume
=
50
music_mode
=
1
music_mode
=
1
default_ot
=
1
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