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
1
Merge Requests
1
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
nanahira
ygopro
Commits
d74a3ea3
Commit
d74a3ea3
authored
Nov 27, 2017
by
edo9300
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'refs/remotes/Fluorohydride/master'
parents
755f2be6
78dd1715
Changes
17
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
462 additions
and
181 deletions
+462
-181
gframe/deck_con.cpp
gframe/deck_con.cpp
+7
-0
gframe/deck_manager.cpp
gframe/deck_manager.cpp
+70
-24
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
-1
gframe/game.h
gframe/game.h
+4
-1
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
-101
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
+73
-26
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
No files found.
gframe/deck_con.cpp
View file @
d74a3ea3
...
@@ -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
();
...
@@ -222,6 +225,10 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
...
@@ -222,6 +225,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 @
d74a3ea3
#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>
...
@@ -70,7 +71,7 @@ int DeckManager::TypeCount(std::vector<code_pointer> cards, int type) {
...
@@ -70,7 +71,7 @@ int DeckManager::TypeCount(std::vector<code_pointer> cards, int type) {
}
}
return
count
;
return
count
;
}
}
int
DeckManager
::
Check
LFList
(
Deck
&
deck
,
int
lfhash
,
bool
allow_ocg
,
bool
allow_tcg
,
bool
doubled
,
int
forbiddentypes
)
{
int
DeckManager
::
Check
Deck
(
Deck
&
deck
,
int
lfhash
,
bool
allow_ocg
,
bool
allow_tcg
,
bool
doubled
,
int
forbiddentypes
)
{
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
)
{
...
@@ -82,61 +83,103 @@ int DeckManager::CheckLFList(Deck& deck, int lfhash, bool allow_ocg, bool allow_
...
@@ -82,61 +83,103 @@ 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
((
mainGame
->
dInfo
.
extraval
&
0x1
)
&&
(
deck
.
main
.
size
()
!=
20
||
deck
.
extra
.
size
()
>
5
))
bool
speed
=
mainGame
->
dInfo
.
extraval
&
0x1
;
return
1
;
if
(
doubled
){
if
(
TypeCount
(
deck
.
main
,
forbiddentypes
)
>
0
||
TypeCount
(
deck
.
extra
,
forbiddentypes
)
>
0
||
TypeCount
(
deck
.
side
,
forbiddentypes
)
>
0
)
if
(
speed
){
return
1
;
if
(
deck
.
main
.
size
()
<
40
||
deck
.
main
.
size
()
>
60
)
if
(
!
(
mainGame
->
dInfo
.
extraval
&
0x1
)
&&
deck
.
main
.
size
()
<
40
||
(
!
doubled
&&
(
deck
.
main
.
size
()
>
60
||
deck
.
extra
.
size
()
>
15
||
deck
.
side
.
size
()
>
15
))
return
(
DECKERROR_MAINCOUNT
<<
28
)
+
deck
.
main
.
size
();
||
(
doubled
&&
(
deck
.
main
.
size
()
!=
100
||
deck
.
extra
.
size
()
>
30
||
deck
.
side
.
size
()
>
30
)))
if
(
deck
.
extra
.
size
()
>
10
)
return
1
;
return
(
DECKERROR_EXTRACOUNT
<<
28
)
+
deck
.
extra
.
size
();
if
(
deck
.
side
.
size
())
return
(
DECKERROR_SIDECOUNT
<<
28
)
+
deck
.
side
.
size
();
}
else
{
if
(
deck
.
main
.
size
()
!=
100
)
return
(
DECKERROR_MAINCOUNT
<<
28
)
+
deck
.
main
.
size
();
if
(
deck
.
extra
.
size
()
>
30
)
return
(
DECKERROR_EXTRACOUNT
<<
28
)
+
deck
.
extra
.
size
();
if
(
deck
.
side
.
size
()
>
30
)
return
(
DECKERROR_SIDECOUNT
<<
28
)
+
deck
.
side
.
size
();
}
}
else
{
if
(
speed
){
if
(
deck
.
main
.
size
()
<
20
||
deck
.
main
.
size
()
>
30
)
return
(
DECKERROR_MAINCOUNT
<<
28
)
+
deck
.
main
.
size
();
if
(
deck
.
extra
.
size
()
>
5
)
return
(
DECKERROR_EXTRACOUNT
<<
28
)
+
deck
.
extra
.
size
();
if
(
deck
.
side
.
size
())
return
(
DECKERROR_SIDECOUNT
<<
28
)
+
deck
.
side
.
size
();
}
else
{
if
(
deck
.
main
.
size
()
<
40
||
deck
.
main
.
size
()
>
60
)
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
mainc2
,
int
sidec2
,
bool
doubled
)
{
int
DeckManager
::
LoadDeck
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
,
int
mainc2
,
int
sidec2
,
bool
doubled
)
{
deck
.
clear
();
deck
.
clear
();
int
code
;
int
code
;
int
d
=
1
;
int
d
=
1
;
if
(
doubled
)
if
(
doubled
)
d
=
2
;
d
=
2
;
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
*
d
)
{
else
if
(
cd
.
type
&
(
TYPE_FUSION
|
TYPE_SYNCHRO
|
TYPE_XYZ
|
TYPE_LINK
)
&&
deck
.
extra
.
size
()
<
15
*
d
)
{
...
@@ -147,8 +190,10 @@ void DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, int main
...
@@ -147,8 +190,10 @@ void DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, int main
}
}
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
*
d
)
if
(
deck
.
side
.
size
()
<
15
*
d
)
...
@@ -175,6 +220,7 @@ void DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, int main
...
@@ -175,6 +220,7 @@ void DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, int main
if
(
deck
.
side
.
size
()
<
30
)
if
(
deck
.
side
.
size
()
<
30
)
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 @
d74a3ea3
...
@@ -37,9 +37,9 @@ public:
...
@@ -37,9 +37,9 @@ 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
,
bool
doubled
,
int
forbiddentypes
=
0
);
int
Check
Deck
(
Deck
&
deck
,
int
lfhash
,
bool
allow_ocg
,
bool
allow_tcg
,
bool
doubled
,
int
forbiddentypes
=
0
);
int
TypeCount
(
std
::
vector
<
code_pointer
>
cards
,
int
type
);
int
TypeCount
(
std
::
vector
<
code_pointer
>
cards
,
int
type
);
void
LoadDeck
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
,
int
mainc2
=
0
,
int
sidec2
=
0
,
bool
doubled
=
false
);
int
LoadDeck
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
,
int
mainc2
=
0
,
int
sidec2
=
0
,
bool
doubled
=
false
);
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 @
d74a3ea3
...
@@ -253,13 +253,52 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
...
@@ -253,13 +253,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
->
cbDeckSelect2
->
setEnabled
(
true
);
mainGame
->
cbDeckSelect2
->
setEnabled
(
true
);
mainGame
->
gMutex
.
Unlock
();
mainGame
->
gMutex
.
Unlock
();
...
@@ -329,6 +368,9 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
...
@@ -329,6 +368,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
);
...
@@ -642,6 +684,9 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
...
@@ -642,6 +684,9 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame
->
btnM2
->
setVisible
(
false
);
mainGame
->
btnM2
->
setVisible
(
false
);
mainGame
->
btnEP
->
setVisible
(
false
);
mainGame
->
btnEP
->
setVisible
(
false
);
mainGame
->
btnShuffle
->
setVisible
(
false
);
mainGame
->
btnShuffle
->
setVisible
(
false
);
mainGame
->
btnSideShuffle
->
setVisible
(
false
);
mainGame
->
btnSideSort
->
setVisible
(
false
);
mainGame
->
btnSideReload
->
setVisible
(
false
);
mainGame
->
wChat
->
setVisible
(
true
);
mainGame
->
wChat
->
setVisible
(
true
);
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
dField
);
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
dField
);
// reset master rule 4 phase button position
// reset master rule 4 phase button position
...
@@ -3700,7 +3745,6 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -3700,7 +3745,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
;
...
@@ -3864,7 +3908,7 @@ void DuelClient::SendResponse() {
...
@@ -3864,7 +3908,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 @
d74a3ea3
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
#include <dirent.h>
#include <dirent.h>
#endif
#endif
unsigned
short
PRO_VERSION
=
0x134
0
;
unsigned
short
PRO_VERSION
=
0x134
1
;
namespace
ygo
{
namespace
ygo
{
...
@@ -504,6 +504,12 @@ bool Game::Initialize() {
...
@@ -504,6 +504,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
);
...
@@ -1596,6 +1602,9 @@ void Game::OnResize()
...
@@ -1596,6 +1602,9 @@ void Game::OnResize()
stSearch
->
setRelativePosition
(
ResizeWin
(
205
,
74
,
280
,
94
));
stSearch
->
setRelativePosition
(
ResizeWin
(
205
,
74
,
280
,
94
));
stScale
->
setRelativePosition
(
ResizeWin
(
110
,
74
,
150
,
94
));
stScale
->
setRelativePosition
(
ResizeWin
(
110
,
74
,
150
,
94
));
btnSideOK
->
setRelativePosition
(
Resize
(
510
,
40
,
820
,
80
));
btnSideOK
->
setRelativePosition
(
Resize
(
510
,
40
,
820
,
80
));
btnSideShuffle
->
setRelativePosition
(
Resize
(
310
,
100
,
370
,
130
));
btnSideSort
->
setRelativePosition
(
Resize
(
375
,
100
,
435
,
130
));
btnSideReload
->
setRelativePosition
(
Resize
(
440
,
100
,
500
,
130
));
btnDeleteDeck
->
setRelativePosition
(
Resize
(
225
,
95
,
290
,
120
));
btnDeleteDeck
->
setRelativePosition
(
Resize
(
225
,
95
,
290
,
120
));
wLanWindow
->
setRelativePosition
(
ResizeWin
(
220
,
100
,
800
,
520
));
wLanWindow
->
setRelativePosition
(
ResizeWin
(
220
,
100
,
800
,
520
));
...
...
gframe/game.h
View file @
d74a3ea3
...
@@ -414,6 +414,9 @@ public:
...
@@ -414,6 +414,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
;
irr
::
gui
::
IGUIStaticText
*
stBanlist
;
irr
::
gui
::
IGUIStaticText
*
stBanlist
;
irr
::
gui
::
IGUIStaticText
*
stDeck
;
irr
::
gui
::
IGUIStaticText
*
stDeck
;
...
@@ -600,7 +603,7 @@ extern Game* mainGame;
...
@@ -600,7 +603,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 @
d74a3ea3
...
@@ -225,6 +225,15 @@ public:
...
@@ -225,6 +225,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 @
d74a3ea3
...
@@ -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 @
d74a3ea3
...
@@ -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 @
d74a3ea3
This diff is collapsed.
Click to expand it.
gframe/replay_mode.h
View file @
d74a3ea3
...
@@ -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 @
d74a3ea3
...
@@ -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
,
host_info
.
doubled
,
host_info
.
forbiddentypes
);
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
,
host_info
.
doubled
,
host_info
.
forbiddentypes
);
}
}
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
,
0
,
0
,
host_info
.
doubled
);
deck
_error
[
dp
->
type
]
=
deck
Manager
.
LoadDeck
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
,
0
,
0
,
host_info
.
doubled
);
}
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 @
d74a3ea3
...
@@ -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 @
d74a3ea3
...
@@ -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
);
...
@@ -48,25 +44,45 @@ int SingleMode::SinglePlayThread(void* param) {
...
@@ -48,25 +44,45 @@ int SingleMode::SinglePlayThread(void* param) {
set_message_handler
((
message_handler
)
MessageHandler
);
set_message_handler
((
message_handler
)
MessageHandler
);
pduel
=
create_duel
(
rnd
.
rand
());
pduel
=
create_duel
(
rnd
.
rand
());
mainGame
->
dInfo
.
lua64
=
true
;
mainGame
->
dInfo
.
lua64
=
true
;
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
;
mainGame
->
dInfo
.
startlp
=
8000
;
mainGame
->
dInfo
.
startlp
=
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
);
...
@@ -87,11 +103,27 @@ int SingleMode::SinglePlayThread(void* param) {
...
@@ -87,11 +103,27 @@ 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
);
unsigned
short
buffer
[
20
];
BufferIO
::
CopyWStr
(
mainGame
->
dInfo
.
hostname
,
buffer
,
20
);
last_replay
.
WriteData
(
buffer
,
40
,
false
);
BufferIO
::
CopyWStr
(
mainGame
->
dInfo
.
clientname
,
buffer
,
20
);
last_replay
.
WriteData
(
buffer
,
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
;
...
@@ -101,6 +133,21 @@ int SingleMode::SinglePlayThread(void* param) {
...
@@ -101,6 +133,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 @
d74a3ea3
#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 @
d74a3ea3
...
@@ -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
,
host_info
.
doubled
,
host_info
.
forbiddentypes
);
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
,
host_info
.
doubled
,
host_info
.
forbiddentypes
);
}
}
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
,
0
,
0
,
host_info
.
doubled
);
deck
_error
[
dp
->
type
]
=
deck
Manager
.
LoadDeck
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
,
0
,
0
,
host_info
.
doubled
);
}
}
void
TagDuel
::
StartDuel
(
DuelPlayer
*
dp
)
{
void
TagDuel
::
StartDuel
(
DuelPlayer
*
dp
)
{
if
(
dp
!=
host_player
)
if
(
dp
!=
host_player
)
...
...
gframe/tag_duel.h
View file @
d74a3ea3
...
@@ -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
;
...
...
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