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
Commits
26eb016b
Commit
26eb016b
authored
Feb 09, 2024
by
nanahira
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'server' of github.com:mycard/ygopro into server
parents
5d73c060
0d57a9e2
Changes
19
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
227 additions
and
225 deletions
+227
-225
gframe/client_card.cpp
gframe/client_card.cpp
+17
-13
gframe/client_card.h
gframe/client_card.h
+7
-6
gframe/client_field.cpp
gframe/client_field.cpp
+12
-10
gframe/client_field.h
gframe/client_field.h
+2
-2
gframe/data_manager.cpp
gframe/data_manager.cpp
+10
-3
gframe/data_manager.h
gframe/data_manager.h
+16
-4
gframe/deck_con.cpp
gframe/deck_con.cpp
+11
-7
gframe/deck_manager.cpp
gframe/deck_manager.cpp
+2
-2
gframe/event_handler.cpp
gframe/event_handler.cpp
+3
-1
gframe/game.cpp
gframe/game.cpp
+3
-57
gframe/game.h
gframe/game.h
+70
-70
gframe/materials.h
gframe/materials.h
+4
-4
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+10
-4
gframe/network.h
gframe/network.h
+1
-2
gframe/replay_mode.cpp
gframe/replay_mode.cpp
+1
-1
gframe/single_duel.cpp
gframe/single_duel.cpp
+32
-14
gframe/single_duel.h
gframe/single_duel.h
+7
-6
lflist.conf
lflist.conf
+16
-17
strings.conf
strings.conf
+3
-2
No files found.
gframe/client_card.cpp
View file @
26eb016b
...
@@ -7,9 +7,13 @@ namespace ygo {
...
@@ -7,9 +7,13 @@ namespace ygo {
ClientCard
::~
ClientCard
()
{
ClientCard
::~
ClientCard
()
{
ClearTarget
();
ClearTarget
();
if
(
equipTarget
)
if
(
equipTarget
)
{
equipTarget
->
is_showequip
=
false
;
equipTarget
->
equipped
.
erase
(
this
);
equipTarget
->
equipped
.
erase
(
this
);
for
(
auto
card
:
equipped
)
{
equipTarget
=
nullptr
;
}
for
(
auto
&
card
:
equipped
)
{
card
->
is_showequip
=
false
;
card
->
equipTarget
=
nullptr
;
card
->
equipTarget
=
nullptr
;
}
}
equipped
.
clear
();
equipped
.
clear
();
...
@@ -21,8 +25,9 @@ ClientCard::~ClientCard() {
...
@@ -21,8 +25,9 @@ ClientCard::~ClientCard() {
else
else
++
it
;
++
it
;
}
}
overlayTarget
=
nullptr
;
}
}
for
(
auto
card
:
overlayed
)
{
for
(
auto
&
card
:
overlayed
)
{
card
->
overlayTarget
=
nullptr
;
card
->
overlayTarget
=
nullptr
;
}
}
overlayed
.
clear
();
overlayed
.
clear
();
...
@@ -206,10 +211,6 @@ void ClientCard::ClearData() {
...
@@ -206,10 +211,6 @@ void ClientCard::ClearData() {
rscstring
[
0
]
=
0
;
rscstring
[
0
]
=
0
;
lscstring
[
0
]
=
0
;
lscstring
[
0
]
=
0
;
counters
.
clear
();
counters
.
clear
();
for
(
auto
card
:
equipped
)
{
card
->
equipTarget
=
nullptr
;
}
equipped
.
clear
();
}
}
bool
ClientCard
::
client_card_sort
(
ClientCard
*
c1
,
ClientCard
*
c2
)
{
bool
ClientCard
::
client_card_sort
(
ClientCard
*
c1
,
ClientCard
*
c2
)
{
if
(
c1
->
is_selected
!=
c2
->
is_selected
)
if
(
c1
->
is_selected
!=
c2
->
is_selected
)
...
@@ -220,23 +221,26 @@ bool ClientCard::client_card_sort(ClientCard* c1, ClientCard* c2) {
...
@@ -220,23 +221,26 @@ bool ClientCard::client_card_sort(ClientCard* c1, ClientCard* c2) {
return
cp1
<
cp2
;
return
cp1
<
cp2
;
if
(
c1
->
location
!=
c2
->
location
)
if
(
c1
->
location
!=
c2
->
location
)
return
c1
->
location
<
c2
->
location
;
return
c1
->
location
<
c2
->
location
;
if
(
c1
->
location
&
LOCATION_OVERLAY
)
if
(
c1
->
location
&
LOCATION_OVERLAY
)
{
if
(
c1
->
overlayTarget
!=
c2
->
overlayTarget
)
if
(
c1
->
overlayTarget
!=
c2
->
overlayTarget
)
return
c1
->
overlayTarget
->
sequence
<
c2
->
overlayTarget
->
sequence
;
return
c1
->
overlayTarget
->
sequence
<
c2
->
overlayTarget
->
sequence
;
else
return
c1
->
sequence
<
c2
->
sequence
;
else
return
c1
->
sequence
<
c2
->
sequence
;
}
else
{
else
{
if
(
c1
->
location
&
(
LOCATION_DECK
|
LOCATION_GRAVE
|
LOCATION_REMOVED
|
LOCATION_EXTRA
))
{
if
(
c1
->
location
&
(
LOCATION_DECK
|
LOCATION_GRAVE
|
LOCATION_REMOVED
|
LOCATION_EXTRA
))
{
auto
it1
=
std
::
find_if
(
mainGame
->
dField
.
chains
.
rbegin
(),
mainGame
->
dField
.
chains
.
rend
(),
[
c1
](
const
aut
o
&
ch
)
{
auto
it1
=
std
::
find_if
(
mainGame
->
dField
.
chains
.
rbegin
(),
mainGame
->
dField
.
chains
.
rend
(),
[
c1
](
const
ChainInf
o
&
ch
)
{
return
c1
==
ch
.
chain_card
||
ch
.
target
.
find
(
c1
)
!=
ch
.
target
.
end
();
return
c1
==
ch
.
chain_card
||
ch
.
target
.
find
(
c1
)
!=
ch
.
target
.
end
();
});
});
auto
it2
=
std
::
find_if
(
mainGame
->
dField
.
chains
.
rbegin
(),
mainGame
->
dField
.
chains
.
rend
(),
[
c2
](
const
aut
o
&
ch
)
{
auto
it2
=
std
::
find_if
(
mainGame
->
dField
.
chains
.
rbegin
(),
mainGame
->
dField
.
chains
.
rend
(),
[
c2
](
const
ChainInf
o
&
ch
)
{
return
c2
==
ch
.
chain_card
||
ch
.
target
.
find
(
c2
)
!=
ch
.
target
.
end
();
return
c2
==
ch
.
chain_card
||
ch
.
target
.
find
(
c2
)
!=
ch
.
target
.
end
();
});
});
if
(
it1
!=
mainGame
->
dField
.
chains
.
rend
()
||
it2
!=
mainGame
->
dField
.
chains
.
rend
())
{
if
(
it1
!=
mainGame
->
dField
.
chains
.
rend
()
||
it2
!=
mainGame
->
dField
.
chains
.
rend
())
{
return
it1
<
it2
;
return
it1
<
it2
;
}
}
return
c1
->
sequence
>
c2
->
sequence
;
return
c1
->
sequence
>
c2
->
sequence
;
}
else
}
else
return
c1
->
sequence
<
c2
->
sequence
;
return
c1
->
sequence
<
c2
->
sequence
;
}
}
}
}
...
...
gframe/client_card.h
View file @
26eb016b
...
@@ -33,6 +33,7 @@ struct CardString {
...
@@ -33,6 +33,7 @@ struct CardString {
std
::
wstring
desc
[
16
];
std
::
wstring
desc
[
16
];
};
};
typedef
std
::
unordered_map
<
unsigned
int
,
CardDataC
>::
const_iterator
code_pointer
;
typedef
std
::
unordered_map
<
unsigned
int
,
CardDataC
>::
const_iterator
code_pointer
;
typedef
std
::
unordered_map
<
unsigned
int
,
CardString
>::
const_iterator
string_pointer
;
class
ClientCard
{
class
ClientCard
{
public:
public:
...
@@ -93,12 +94,12 @@ public:
...
@@ -93,12 +94,12 @@ public:
std
::
set
<
ClientCard
*>
ownerTarget
;
std
::
set
<
ClientCard
*>
ownerTarget
;
std
::
map
<
int
,
int
>
counters
;
std
::
map
<
int
,
int
>
counters
;
std
::
map
<
int
,
int
>
desc_hints
;
std
::
map
<
int
,
int
>
desc_hints
;
wchar_t
atkstring
[
16
]{
0
};
wchar_t
atkstring
[
16
]{};
wchar_t
defstring
[
16
]{
0
};
wchar_t
defstring
[
16
]{};
wchar_t
lvstring
[
16
]{
0
};
wchar_t
lvstring
[
16
]{};
wchar_t
linkstring
[
16
]{
0
};
wchar_t
linkstring
[
16
]{};
wchar_t
lscstring
[
16
]{
0
};
wchar_t
lscstring
[
16
]{};
wchar_t
rscstring
[
16
]{
0
};
wchar_t
rscstring
[
16
]{};
ClientCard
()
=
default
;
ClientCard
()
=
default
;
~
ClientCard
();
~
ClientCard
();
...
...
gframe/client_field.cpp
View file @
26eb016b
...
@@ -19,39 +19,39 @@ ClientField::ClientField() {
...
@@ -19,39 +19,39 @@ ClientField::ClientField() {
}
}
ClientField
::~
ClientField
()
{
ClientField
::~
ClientField
()
{
for
(
int
i
=
0
;
i
<
2
;
++
i
)
{
for
(
int
i
=
0
;
i
<
2
;
++
i
)
{
for
(
auto
card
:
deck
[
i
])
{
for
(
auto
&
card
:
deck
[
i
])
{
delete
card
;
delete
card
;
}
}
deck
[
i
].
clear
();
deck
[
i
].
clear
();
for
(
auto
card
:
hand
[
i
])
{
for
(
auto
&
card
:
hand
[
i
])
{
delete
card
;
delete
card
;
}
}
hand
[
i
].
clear
();
hand
[
i
].
clear
();
for
(
auto
card
:
mzone
[
i
])
{
for
(
auto
&
card
:
mzone
[
i
])
{
if
(
card
)
if
(
card
)
delete
card
;
delete
card
;
card
=
nullptr
;
card
=
nullptr
;
}
}
for
(
auto
card
:
szone
[
i
])
{
for
(
auto
&
card
:
szone
[
i
])
{
if
(
card
)
if
(
card
)
delete
card
;
delete
card
;
card
=
nullptr
;
card
=
nullptr
;
}
}
for
(
auto
card
:
grave
[
i
])
{
for
(
auto
&
card
:
grave
[
i
])
{
delete
card
;
delete
card
;
}
}
grave
[
i
].
clear
();
grave
[
i
].
clear
();
for
(
auto
card
:
remove
[
i
])
{
for
(
auto
&
card
:
remove
[
i
])
{
delete
card
;
delete
card
;
}
}
remove
[
i
].
clear
();
remove
[
i
].
clear
();
for
(
auto
card
:
extra
[
i
])
{
for
(
auto
&
card
:
extra
[
i
])
{
delete
card
;
delete
card
;
}
}
extra
[
i
].
clear
();
extra
[
i
].
clear
();
}
}
for
(
auto
card
:
overlay_cards
)
{
for
(
auto
&
card
:
overlay_cards
)
{
delete
card
;
delete
card
;
}
}
overlay_cards
.
clear
();
overlay_cards
.
clear
();
...
@@ -1555,9 +1555,11 @@ void ClientField::UpdateDeclarableList() {
...
@@ -1555,9 +1555,11 @@ void ClientField::UpdateDeclarableList() {
}
}
mainGame
->
lstANCard
->
clear
();
mainGame
->
lstANCard
->
clear
();
ancard
.
clear
();
ancard
.
clear
();
for
(
auto
cit
=
dataManager
.
_strings
.
begin
();
cit
!=
dataManager
.
_strings
.
end
()
;
++
cit
)
{
for
(
auto
cit
=
dataManager
.
strings_begin
;
cit
!=
dataManager
.
strings_end
;
++
cit
)
{
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
);
if
(
cp
==
dataManager
.
datas_end
)
continue
;
//datas.alias can be double card names or alias
//datas.alias can be double card names or alias
if
(
is_declarable
(
cp
->
second
,
declare_opcodes
))
{
if
(
is_declarable
(
cp
->
second
,
declare_opcodes
))
{
if
(
pname
==
cit
->
second
.
name
||
trycode
==
cit
->
first
)
{
//exact match or last used
if
(
pname
==
cit
->
second
.
name
||
trycode
==
cit
->
first
)
{
//exact match or last used
...
...
gframe/client_field.h
View file @
26eb016b
...
@@ -46,7 +46,7 @@ public:
...
@@ -46,7 +46,7 @@ public:
std
::
vector
<
int
>
select_options
;
std
::
vector
<
int
>
select_options
;
std
::
vector
<
int
>
select_options_index
;
std
::
vector
<
int
>
select_options_index
;
std
::
vector
<
ChainInfo
>
chains
;
std
::
vector
<
ChainInfo
>
chains
;
int
extra_p_count
[
2
]{
0
};
int
extra_p_count
[
2
]{};
size_t
selected_option
{
0
};
size_t
selected_option
{
0
};
ClientCard
*
attacker
{
nullptr
};
ClientCard
*
attacker
{
nullptr
};
...
@@ -77,7 +77,7 @@ public:
...
@@ -77,7 +77,7 @@ public:
bool
remove_act
{
false
};
bool
remove_act
{
false
};
bool
deck_act
{
false
};
bool
deck_act
{
false
};
bool
extra_act
{
false
};
bool
extra_act
{
false
};
bool
pzone_act
[
2
]{
false
};
bool
pzone_act
[
2
]{};
bool
conti_act
{
false
};
bool
conti_act
{
false
};
bool
chain_forced
{
false
};
bool
chain_forced
{
false
};
ChainInfo
current_chain
;
ChainInfo
current_chain
;
...
...
gframe/data_manager.cpp
View file @
26eb016b
...
@@ -111,6 +111,10 @@ bool DataManager::LoadDB(const wchar_t* wfile) {
...
@@ -111,6 +111,10 @@ bool DataManager::LoadDB(const wchar_t* wfile) {
spmemvfs_close_db
(
&
db
);
spmemvfs_close_db
(
&
db
);
spmemvfs_env_fini
();
spmemvfs_env_fini
();
#endif
#endif
datas_begin
=
_datas
.
begin
();
datas_end
=
_datas
.
end
();
strings_begin
=
_strings
.
begin
();
strings_end
=
_strings
.
end
();
return
true
;
return
true
;
}
}
bool
DataManager
::
LoadStrings
(
const
char
*
file
)
{
bool
DataManager
::
LoadStrings
(
const
char
*
file
)
{
...
@@ -189,10 +193,10 @@ bool DataManager::Error(spmemvfs_db_t* pDB, sqlite3_stmt* pStmt) {
...
@@ -189,10 +193,10 @@ bool DataManager::Error(spmemvfs_db_t* pDB, sqlite3_stmt* pStmt) {
}
}
#endif //YGOPRO_SERVER_MODE
#endif //YGOPRO_SERVER_MODE
bool
DataManager
::
GetData
(
unsigned
int
code
,
CardData
*
pData
)
{
bool
DataManager
::
GetData
(
unsigned
int
code
,
CardData
*
pData
)
{
auto
cdit
=
_datas
.
find
(
code
);
code_pointer
cdit
=
_datas
.
find
(
code
);
if
(
cdit
==
_datas
.
end
())
if
(
cdit
==
_datas
.
end
())
return
false
;
return
false
;
auto
data
=
cdit
->
second
;
auto
&
data
=
cdit
->
second
;
if
(
pData
)
{
if
(
pData
)
{
pData
->
code
=
data
.
code
;
pData
->
code
=
data
.
code
;
pData
->
alias
=
data
.
alias
;
pData
->
alias
=
data
.
alias
;
...
@@ -209,9 +213,12 @@ bool DataManager::GetData(unsigned int code, CardData* pData) {
...
@@ -209,9 +213,12 @@ bool DataManager::GetData(unsigned int code, CardData* pData) {
}
}
return
true
;
return
true
;
}
}
code_pointer
DataManager
::
GetCodePointer
(
int
code
)
{
code_pointer
DataManager
::
GetCodePointer
(
unsigned
int
code
)
const
{
return
_datas
.
find
(
code
);
return
_datas
.
find
(
code
);
}
}
string_pointer
DataManager
::
GetStringPointer
(
unsigned
int
code
)
const
{
return
_strings
.
find
(
code
);
}
bool
DataManager
::
GetString
(
int
code
,
CardString
*
pStr
)
{
bool
DataManager
::
GetString
(
int
code
,
CardString
*
pStr
)
{
auto
csit
=
_strings
.
find
(
code
);
auto
csit
=
_strings
.
find
(
code
);
if
(
csit
==
_strings
.
end
())
{
if
(
csit
==
_strings
.
end
())
{
...
...
gframe/data_manager.h
View file @
26eb016b
...
@@ -13,7 +13,12 @@ namespace ygo {
...
@@ -13,7 +13,12 @@ namespace ygo {
class
DataManager
{
class
DataManager
{
public:
public:
DataManager
()
:
_datas
(
16384
),
_strings
(
16384
)
{}
DataManager
()
:
_datas
(
16384
),
_strings
(
16384
)
{
datas_begin
=
_datas
.
begin
();
datas_end
=
_datas
.
end
();
strings_begin
=
_strings
.
begin
();
strings_end
=
_strings
.
end
();
}
bool
LoadDB
(
const
wchar_t
*
wfile
);
bool
LoadDB
(
const
wchar_t
*
wfile
);
bool
LoadStrings
(
const
char
*
file
);
bool
LoadStrings
(
const
char
*
file
);
#ifndef YGOPRO_SERVER_MODE
#ifndef YGOPRO_SERVER_MODE
...
@@ -26,7 +31,8 @@ public:
...
@@ -26,7 +31,8 @@ public:
bool
Error
(
sqlite3
*
pDB
,
sqlite3_stmt
*
pStmt
=
0
);
bool
Error
(
sqlite3
*
pDB
,
sqlite3_stmt
*
pStmt
=
0
);
#endif //YGOPRO_SERVER_MODE
#endif //YGOPRO_SERVER_MODE
bool
GetData
(
unsigned
int
code
,
CardData
*
pData
);
bool
GetData
(
unsigned
int
code
,
CardData
*
pData
);
code_pointer
GetCodePointer
(
int
code
);
code_pointer
GetCodePointer
(
unsigned
int
code
)
const
;
string_pointer
GetStringPointer
(
unsigned
int
code
)
const
;
bool
GetString
(
int
code
,
CardString
*
pStr
);
bool
GetString
(
int
code
,
CardString
*
pStr
);
const
wchar_t
*
GetName
(
int
code
);
const
wchar_t
*
GetName
(
int
code
);
const
wchar_t
*
GetText
(
int
code
);
const
wchar_t
*
GetText
(
int
code
);
...
@@ -44,12 +50,14 @@ public:
...
@@ -44,12 +50,14 @@ public:
const
wchar_t
*
FormatSetName
(
unsigned
long
long
setcode
);
const
wchar_t
*
FormatSetName
(
unsigned
long
long
setcode
);
const
wchar_t
*
FormatLinkMarker
(
int
link_marker
);
const
wchar_t
*
FormatLinkMarker
(
int
link_marker
);
std
::
unordered_map
<
unsigned
int
,
CardDataC
>
_datas
;
std
::
unordered_map
<
unsigned
int
,
CardString
>
_strings
;
std
::
unordered_map
<
unsigned
int
,
std
::
wstring
>
_counterStrings
;
std
::
unordered_map
<
unsigned
int
,
std
::
wstring
>
_counterStrings
;
std
::
unordered_map
<
unsigned
int
,
std
::
wstring
>
_victoryStrings
;
std
::
unordered_map
<
unsigned
int
,
std
::
wstring
>
_victoryStrings
;
std
::
unordered_map
<
unsigned
int
,
std
::
wstring
>
_setnameStrings
;
std
::
unordered_map
<
unsigned
int
,
std
::
wstring
>
_setnameStrings
;
std
::
unordered_map
<
unsigned
int
,
std
::
wstring
>
_sysStrings
;
std
::
unordered_map
<
unsigned
int
,
std
::
wstring
>
_sysStrings
;
code_pointer
datas_begin
;
code_pointer
datas_end
;
string_pointer
strings_begin
;
string_pointer
strings_end
;
wchar_t
numStrings
[
301
][
4
];
wchar_t
numStrings
[
301
][
4
];
wchar_t
numBuffer
[
6
];
wchar_t
numBuffer
[
6
];
...
@@ -67,6 +75,10 @@ public:
...
@@ -67,6 +75,10 @@ public:
#if !defined(YGOPRO_SERVER_MODE) || defined(SERVER_ZIP_SUPPORT)
#if !defined(YGOPRO_SERVER_MODE) || defined(SERVER_ZIP_SUPPORT)
static
IFileSystem
*
FileSystem
;
static
IFileSystem
*
FileSystem
;
#endif
#endif
private:
std
::
unordered_map
<
unsigned
int
,
CardDataC
>
_datas
;
std
::
unordered_map
<
unsigned
int
,
CardString
>
_strings
;
};
};
extern
DataManager
dataManager
;
extern
DataManager
dataManager
;
...
...
gframe/deck_con.cpp
View file @
26eb016b
...
@@ -43,8 +43,8 @@ static int parse_filter(const wchar_t* pstr, unsigned int* type) {
...
@@ -43,8 +43,8 @@ static int parse_filter(const wchar_t* pstr, unsigned int* type) {
static
bool
check_set_code
(
const
CardDataC
&
data
,
int
set_code
)
{
static
bool
check_set_code
(
const
CardDataC
&
data
,
int
set_code
)
{
unsigned
long
long
sc
=
data
.
setcode
;
unsigned
long
long
sc
=
data
.
setcode
;
if
(
data
.
alias
)
{
if
(
data
.
alias
)
{
auto
aptr
=
dataManager
.
_datas
.
find
(
data
.
alias
);
auto
aptr
=
dataManager
.
GetCodePointer
(
data
.
alias
);
if
(
aptr
!=
dataManager
.
_datas
.
end
()
)
if
(
aptr
!=
dataManager
.
datas_end
)
sc
=
aptr
->
second
.
setcode
;
sc
=
aptr
->
second
.
setcode
;
}
}
bool
res
=
false
;
bool
res
=
false
;
...
@@ -1030,7 +1030,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
...
@@ -1030,7 +1030,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
dragx
=
event
.
MouseInput
.
X
;
dragx
=
event
.
MouseInput
.
X
;
dragy
=
event
.
MouseInput
.
Y
;
dragy
=
event
.
MouseInput
.
Y
;
draging_pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
draging_pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
if
(
draging_pointer
==
dataManager
.
_datas
.
end
()
)
if
(
draging_pointer
==
dataManager
.
datas_end
)
break
;
break
;
if
(
hovered_pos
==
4
)
{
if
(
hovered_pos
==
4
)
{
if
(
!
check_limit
(
draging_pointer
))
if
(
!
check_limit
(
draging_pointer
))
...
@@ -1084,7 +1084,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
...
@@ -1084,7 +1084,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if
(
hovered_pos
==
0
||
hovered_seq
==
-
1
)
if
(
hovered_pos
==
0
||
hovered_seq
==
-
1
)
break
;
break
;
auto
pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
auto
pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
if
(
pointer
==
dataManager
.
_datas
.
end
()
)
if
(
pointer
==
dataManager
.
datas_end
)
break
;
break
;
soundManager
.
PlaySoundEffect
(
SOUND_CARD_DROP
);
soundManager
.
PlaySoundEffect
(
SOUND_CARD_DROP
);
if
(
hovered_pos
==
1
)
{
if
(
hovered_pos
==
1
)
{
...
@@ -1119,7 +1119,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
...
@@ -1119,7 +1119,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
pop_side
(
hovered_seq
);
pop_side
(
hovered_seq
);
}
else
{
}
else
{
auto
pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
auto
pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
if
(
pointer
==
dataManager
.
_datas
.
end
()
)
if
(
pointer
==
dataManager
.
datas_end
)
break
;
break
;
if
(
!
check_limit
(
pointer
))
if
(
!
check_limit
(
pointer
))
break
;
break
;
...
@@ -1154,6 +1154,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
...
@@ -1154,6 +1154,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if
(
is_draging
)
if
(
is_draging
)
break
;
break
;
auto
pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
auto
pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
if
(
pointer
==
dataManager
.
datas_end
)
break
;
if
(
!
check_limit
(
pointer
))
if
(
!
check_limit
(
pointer
))
break
;
break
;
soundManager
.
PlaySoundEffect
(
SOUND_CARD_PICK
);
soundManager
.
PlaySoundEffect
(
SOUND_CARD_PICK
);
...
@@ -1421,9 +1423,11 @@ void DeckBuilder::FilterCards() {
...
@@ -1421,9 +1423,11 @@ void DeckBuilder::FilterCards() {
query_elements
.
push_back
(
element
);
query_elements
.
push_back
(
element
);
}
}
}
}
auto
strpointer
=
dataManager
.
_strings
.
begin
();
for
(
code_pointer
ptr
=
dataManager
.
datas_begin
;
ptr
!=
dataManager
.
datas_end
;
++
ptr
)
{
for
(
code_pointer
ptr
=
dataManager
.
_datas
.
begin
();
ptr
!=
dataManager
.
_datas
.
end
();
++
ptr
,
++
strpointer
)
{
const
CardDataC
&
data
=
ptr
->
second
;
const
CardDataC
&
data
=
ptr
->
second
;
auto
strpointer
=
dataManager
.
GetStringPointer
(
ptr
->
first
);
if
(
strpointer
==
dataManager
.
strings_end
)
continue
;
const
CardString
&
text
=
strpointer
->
second
;
const
CardString
&
text
=
strpointer
->
second
;
if
(
data
.
type
&
TYPE_TOKEN
)
if
(
data
.
type
&
TYPE_TOKEN
)
continue
;
continue
;
...
...
gframe/deck_manager.cpp
View file @
26eb016b
...
@@ -166,7 +166,7 @@ int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, bool is_p
...
@@ -166,7 +166,7 @@ int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, bool is_p
else
if
(
cd
.
type
&
(
TYPE_FUSION
|
TYPE_SYNCHRO
|
TYPE_XYZ
|
TYPE_LINK
))
{
else
if
(
cd
.
type
&
(
TYPE_FUSION
|
TYPE_SYNCHRO
|
TYPE_XYZ
|
TYPE_LINK
))
{
if
(
deck
.
extra
.
size
()
>=
15
)
if
(
deck
.
extra
.
size
()
>=
15
)
continue
;
continue
;
deck
.
extra
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
//verified by GetData()
deck
.
extra
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
}
else
if
(
deck
.
main
.
size
()
<
60
)
{
}
else
if
(
deck
.
main
.
size
()
<
60
)
{
deck
.
main
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
deck
.
main
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
}
}
...
@@ -180,7 +180,7 @@ int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, bool is_p
...
@@ -180,7 +180,7 @@ int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, bool is_p
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
));
}
}
return
errorcode
;
return
errorcode
;
}
}
...
...
gframe/event_handler.cpp
View file @
26eb016b
...
@@ -2176,6 +2176,7 @@ void ClientField::GetHoverField(int x, int y) {
...
@@ -2176,6 +2176,7 @@ void ClientField::GetHoverField(int x, int y) {
hovered_location
=
LOCATION_REMOVED
;
hovered_location
=
LOCATION_REMOVED
;
}
}
}
else
if
(
rule
==
1
&&
boardx
>=
matManager
.
vFieldSzone
[
1
][
7
][
rule
][
1
].
Pos
.
X
&&
boardx
<=
matManager
.
vFieldSzone
[
1
][
7
][
rule
][
2
].
Pos
.
X
)
{
}
else
if
(
rule
==
1
&&
boardx
>=
matManager
.
vFieldSzone
[
1
][
7
][
rule
][
1
].
Pos
.
X
&&
boardx
<=
matManager
.
vFieldSzone
[
1
][
7
][
rule
][
2
].
Pos
.
X
)
{
// deprecated szone[7]
if
(
boardy
>=
matManager
.
vFieldSzone
[
1
][
7
][
rule
][
2
].
Pos
.
Y
&&
boardy
<=
matManager
.
vFieldSzone
[
1
][
7
][
rule
][
0
].
Pos
.
Y
)
{
if
(
boardy
>=
matManager
.
vFieldSzone
[
1
][
7
][
rule
][
2
].
Pos
.
Y
&&
boardy
<=
matManager
.
vFieldSzone
[
1
][
7
][
rule
][
0
].
Pos
.
Y
)
{
hovered_controler
=
1
;
hovered_controler
=
1
;
hovered_location
=
LOCATION_SZONE
;
hovered_location
=
LOCATION_SZONE
;
...
@@ -2207,7 +2208,8 @@ void ClientField::GetHoverField(int x, int y) {
...
@@ -2207,7 +2208,8 @@ void ClientField::GetHoverField(int x, int y) {
hovered_controler
=
1
;
hovered_controler
=
1
;
hovered_location
=
LOCATION_EXTRA
;
hovered_location
=
LOCATION_EXTRA
;
}
}
}
else
if
(
rule
==
0
&&
boardx
>=
matManager
.
vFieldSzone
[
0
][
7
][
rule
][
0
].
Pos
.
X
&&
boardx
<=
matManager
.
vFieldSzone
[
0
][
7
][
rule
][
1
].
Pos
.
X
)
{
}
else
if
(
rule
==
1
&&
boardx
>=
matManager
.
vFieldSzone
[
0
][
7
][
rule
][
0
].
Pos
.
X
&&
boardx
<=
matManager
.
vFieldSzone
[
0
][
7
][
rule
][
1
].
Pos
.
X
)
{
// deprecated szone[7]
if
(
boardy
>=
matManager
.
vFieldSzone
[
0
][
7
][
rule
][
0
].
Pos
.
Y
&&
boardy
<=
matManager
.
vFieldSzone
[
0
][
7
][
rule
][
2
].
Pos
.
Y
)
{
if
(
boardy
>=
matManager
.
vFieldSzone
[
0
][
7
][
rule
][
0
].
Pos
.
Y
&&
boardy
<=
matManager
.
vFieldSzone
[
0
][
7
][
rule
][
2
].
Pos
.
Y
)
{
hovered_controler
=
0
;
hovered_controler
=
0
;
hovered_location
=
LOCATION_SZONE
;
hovered_location
=
LOCATION_SZONE
;
...
...
gframe/game.cpp
View file @
26eb016b
...
@@ -125,9 +125,6 @@ bool Game::Initialize() {
...
@@ -125,9 +125,6 @@ bool Game::Initialize() {
is_building
=
false
;
is_building
=
false
;
menuHandler
.
prev_operation
=
0
;
menuHandler
.
prev_operation
=
0
;
menuHandler
.
prev_sel
=
-
1
;
menuHandler
.
prev_sel
=
-
1
;
for
(
auto
i
:
chatTiming
)
{
i
=
0
;
}
deckManager
.
LoadLFList
();
deckManager
.
LoadLFList
();
driver
=
device
->
getVideoDriver
();
driver
=
device
->
getVideoDriver
();
driver
->
setTextureCreationFlag
(
irr
::
video
::
ETCF_CREATE_MIP_MAPS
,
false
);
driver
->
setTextureCreationFlag
(
irr
::
video
::
ETCF_CREATE_MIP_MAPS
,
false
);
...
@@ -1291,7 +1288,7 @@ void Game::RefreshDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBo
...
@@ -1291,7 +1288,7 @@ void Game::RefreshDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBo
}
}
void
Game
::
RefreshDeck
(
const
wchar_t
*
deckpath
,
const
std
::
function
<
void
(
const
wchar_t
*
)
>&
additem
)
{
void
Game
::
RefreshDeck
(
const
wchar_t
*
deckpath
,
const
std
::
function
<
void
(
const
wchar_t
*
)
>&
additem
)
{
if
(
!
mywcsncasecmp
(
deckpath
,
L"./pack"
,
6
))
{
if
(
!
mywcsncasecmp
(
deckpath
,
L"./pack"
,
6
))
{
for
(
auto
pack
:
deckBuilder
.
expansionPacks
)
{
for
(
auto
&
pack
:
deckBuilder
.
expansionPacks
)
{
additem
(
pack
.
substr
(
5
,
pack
.
size
()
-
9
).
c_str
());
additem
(
pack
.
substr
(
5
,
pack
.
size
()
-
9
).
c_str
());
}
}
}
}
...
@@ -1378,57 +1375,6 @@ void Game::LoadConfig() {
...
@@ -1378,57 +1375,6 @@ void Game::LoadConfig() {
char
strbuf
[
32
];
char
strbuf
[
32
];
char
valbuf
[
256
];
char
valbuf
[
256
];
wchar_t
wstr
[
256
];
wchar_t
wstr
[
256
];
gameConf
.
use_d3d
=
0
;
gameConf
.
use_image_scale
=
1
;
gameConf
.
antialias
=
0
;
gameConf
.
serverport
=
7911
;
gameConf
.
textfontsize
=
14
;
gameConf
.
nickname
[
0
]
=
0
;
gameConf
.
gamename
[
0
]
=
0
;
gameConf
.
lastcategory
[
0
]
=
0
;
gameConf
.
lastdeck
[
0
]
=
0
;
gameConf
.
numfont
[
0
]
=
0
;
gameConf
.
textfont
[
0
]
=
0
;
gameConf
.
lasthost
[
0
]
=
0
;
gameConf
.
lastport
[
0
]
=
0
;
gameConf
.
roompass
[
0
]
=
0
;
gameConf
.
bot_deck_path
[
0
]
=
0
;
//settings
gameConf
.
chkMAutoPos
=
0
;
gameConf
.
chkSTAutoPos
=
1
;
gameConf
.
chkRandomPos
=
0
;
gameConf
.
chkAutoChain
=
0
;
gameConf
.
chkWaitChain
=
0
;
gameConf
.
chkDefaultShowChain
=
0
;
gameConf
.
chkIgnore1
=
0
;
gameConf
.
chkIgnore2
=
0
;
gameConf
.
use_lflist
=
1
;
gameConf
.
default_lflist
=
0
;
gameConf
.
default_rule
=
DEFAULT_DUEL_RULE
;
gameConf
.
hide_setname
=
0
;
gameConf
.
hide_hint_button
=
0
;
gameConf
.
control_mode
=
0
;
gameConf
.
draw_field_spell
=
1
;
gameConf
.
separate_clear_button
=
1
;
gameConf
.
auto_search_limit
=
-
1
;
gameConf
.
search_multiple_keywords
=
1
;
gameConf
.
chkIgnoreDeckChanges
=
0
;
gameConf
.
defaultOT
=
1
;
gameConf
.
enable_bot_mode
=
0
;
gameConf
.
quick_animation
=
0
;
gameConf
.
auto_save_replay
=
0
;
gameConf
.
draw_single_chain
=
0
;
gameConf
.
hide_player_name
=
0
;
gameConf
.
prefer_expansion_script
=
0
;
gameConf
.
enable_sound
=
true
;
gameConf
.
sound_volume
=
0.5
;
gameConf
.
enable_music
=
true
;
gameConf
.
music_volume
=
0.5
;
gameConf
.
music_mode
=
1
;
gameConf
.
window_maximized
=
false
;
gameConf
.
window_width
=
1024
;
gameConf
.
window_height
=
640
;
gameConf
.
resize_popup_menu
=
false
;
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"
))
{
...
@@ -1647,8 +1593,8 @@ void Game::ShowCardInfo(int code, bool resize) {
...
@@ -1647,8 +1593,8 @@ void Game::ShowCardInfo(int code, bool resize) {
if
(
!
gameConf
.
hide_setname
)
{
if
(
!
gameConf
.
hide_setname
)
{
unsigned
long
long
sc
=
cd
.
setcode
;
unsigned
long
long
sc
=
cd
.
setcode
;
if
(
cd
.
alias
)
{
if
(
cd
.
alias
)
{
auto
aptr
=
dataManager
.
_datas
.
find
(
cd
.
alias
);
auto
aptr
=
dataManager
.
GetCodePointer
(
cd
.
alias
);
if
(
aptr
!=
dataManager
.
_datas
.
end
()
)
if
(
aptr
!=
dataManager
.
datas_end
)
sc
=
aptr
->
second
.
setcode
;
sc
=
aptr
->
second
.
setcode
;
}
}
if
(
sc
)
{
if
(
sc
)
{
...
...
gframe/game.h
View file @
26eb016b
...
@@ -13,61 +13,63 @@
...
@@ -13,61 +13,63 @@
#include <vector>
#include <vector>
#include <list>
#include <list>
#define DEFAULT_DUEL_RULE 5
namespace
ygo
{
namespace
ygo
{
#ifndef YGOPRO_SERVER_MODE
#ifndef YGOPRO_SERVER_MODE
struct
Config
{
struct
Config
{
bool
use_d3d
;
bool
use_d3d
{
false
}
;
bool
use_image_scale
;
bool
use_image_scale
{
true
}
;
unsigned
short
antialias
;
unsigned
short
antialias
{
0
}
;
unsigned
short
serverport
;
unsigned
short
serverport
{
7911
}
;
unsigned
char
textfontsize
;
unsigned
char
textfontsize
{
14
}
;
wchar_t
lasthost
[
100
];
wchar_t
lasthost
[
100
]
{}
;
wchar_t
lastport
[
10
];
wchar_t
lastport
[
10
]
{}
;
wchar_t
nickname
[
20
];
wchar_t
nickname
[
20
]
{}
;
wchar_t
gamename
[
20
];
wchar_t
gamename
[
20
]
{}
;
wchar_t
lastcategory
[
64
];
wchar_t
lastcategory
[
64
]
{}
;
wchar_t
lastdeck
[
64
];
wchar_t
lastdeck
[
64
]
{}
;
wchar_t
textfont
[
256
];
wchar_t
textfont
[
256
]
{}
;
wchar_t
numfont
[
256
];
wchar_t
numfont
[
256
]
{}
;
wchar_t
roompass
[
20
];
wchar_t
roompass
[
20
]
{}
;
wchar_t
bot_deck_path
[
64
];
wchar_t
bot_deck_path
[
64
]
{}
;
//settings
//settings
int
chkMAutoPos
;
int
chkMAutoPos
{
0
}
;
int
chkSTAutoPos
;
int
chkSTAutoPos
{
1
}
;
int
chkRandomPos
;
int
chkRandomPos
{
0
}
;
int
chkAutoChain
;
int
chkAutoChain
{
0
}
;
int
chkWaitChain
;
int
chkWaitChain
{
0
}
;
int
chkDefaultShowChain
;
int
chkDefaultShowChain
{
0
}
;
int
chkIgnore1
;
int
chkIgnore1
{
0
}
;
int
chkIgnore2
;
int
chkIgnore2
{
0
}
;
int
use_lflist
;
int
use_lflist
{
1
}
;
int
default_lflist
;
int
default_lflist
{
0
}
;
int
default_rule
;
int
default_rule
{
DEFAULT_DUEL_RULE
}
;
int
hide_setname
;
int
hide_setname
{
0
}
;
int
hide_hint_button
;
int
hide_hint_button
{
0
}
;
int
control_mode
;
int
control_mode
{
0
}
;
int
draw_field_spell
;
int
draw_field_spell
{
1
}
;
int
separate_clear_button
;
int
separate_clear_button
{
1
}
;
int
auto_search_limit
;
int
auto_search_limit
{
-
1
}
;
int
search_multiple_keywords
;
int
search_multiple_keywords
{
1
}
;
int
chkIgnoreDeckChanges
;
int
chkIgnoreDeckChanges
{
0
}
;
int
defaultOT
;
int
defaultOT
{
1
}
;
int
enable_bot_mode
;
int
enable_bot_mode
{
0
}
;
int
quick_animation
;
int
quick_animation
{
0
}
;
int
auto_save_replay
;
int
auto_save_replay
{
0
}
;
int
draw_single_chain
;
int
draw_single_chain
{
0
}
;
int
hide_player_name
;
int
hide_player_name
{
0
}
;
int
prefer_expansion_script
;
int
prefer_expansion_script
{
0
}
;
bool
enable_sound
;
bool
enable_sound
{
true
}
;
bool
enable_music
;
bool
enable_music
{
true
}
;
double
sound_volume
;
double
sound_volume
{
0.5
}
;
double
music_volume
;
double
music_volume
{
0.5
}
;
int
music_mode
;
int
music_mode
{
1
}
;
bool
window_maximized
;
bool
window_maximized
{
false
}
;
int
window_width
;
int
window_width
{
1024
}
;
int
window_height
;
int
window_height
{
640
}
;
bool
resize_popup_menu
;
bool
resize_popup_menu
{
false
}
;
};
};
struct
DuelInfo
{
struct
DuelInfo
{
...
@@ -79,35 +81,35 @@ struct DuelInfo {
...
@@ -79,35 +81,35 @@ struct DuelInfo {
bool
isTag
{
false
};
bool
isTag
{
false
};
bool
isSingleMode
{
false
};
bool
isSingleMode
{
false
};
bool
is_shuffling
{
false
};
bool
is_shuffling
{
false
};
bool
tag_player
[
2
]{
false
};
bool
tag_player
[
2
]{};
bool
isReplaySwapped
{
false
};
bool
isReplaySwapped
{
false
};
int
lp
[
2
]{
0
};
int
lp
[
2
]{};
int
start_lp
{
0
};
int
start_lp
{
0
};
int
duel_rule
{
0
};
int
duel_rule
{
0
};
int
turn
{
0
};
int
turn
{
0
};
short
curMsg
{
0
};
short
curMsg
{
0
};
wchar_t
hostname
[
20
]{
0
};
wchar_t
hostname
[
20
]{};
wchar_t
clientname
[
20
]{
0
};
wchar_t
clientname
[
20
]{};
wchar_t
hostname_tag
[
20
]{
0
};
wchar_t
hostname_tag
[
20
]{};
wchar_t
clientname_tag
[
20
]{
0
};
wchar_t
clientname_tag
[
20
]{};
wchar_t
strLP
[
2
][
16
]{
0
};
wchar_t
strLP
[
2
][
16
]{};
wchar_t
*
vic_string
{
0
};
wchar_t
*
vic_string
{
nullptr
};
unsigned
char
player_type
{
0
};
unsigned
char
player_type
{
0
};
unsigned
char
time_player
{
0
};
unsigned
char
time_player
{
0
};
unsigned
short
time_limit
{
0
};
unsigned
short
time_limit
{
0
};
unsigned
short
time_left
[
2
]{
0
};
unsigned
short
time_left
[
2
]{};
void
Clear
();
void
Clear
();
};
};
struct
BotInfo
{
struct
BotInfo
{
wchar_t
name
[
256
];
wchar_t
name
[
256
]
{}
;
wchar_t
command
[
256
];
wchar_t
command
[
256
]
{}
;
wchar_t
desc
[
256
];
wchar_t
desc
[
256
]
{}
;
bool
support_master_rule_3
;
bool
support_master_rule_3
{
false
}
;
bool
support_new_master_rule
;
bool
support_new_master_rule
{
false
}
;
bool
support_master_rule_2020
;
bool
support_master_rule_2020
{
false
}
;
bool
select_deckfile
;
bool
select_deckfile
{
false
}
;
};
};
struct
FadingUnit
{
struct
FadingUnit
{
...
@@ -226,8 +228,8 @@ public:
...
@@ -226,8 +228,8 @@ public:
int
hideChatTimer
;
int
hideChatTimer
;
bool
hideChat
;
bool
hideChat
;
int
chatTiming
[
8
];
int
chatTiming
[
8
]
{}
;
int
chatType
[
8
];
int
chatType
[
8
]
{}
;
unsigned
short
linePatternD3D
;
unsigned
short
linePatternD3D
;
unsigned
short
linePatternGL
;
unsigned
short
linePatternGL
;
int
waitFrame
;
int
waitFrame
;
...
@@ -846,8 +848,6 @@ extern unsigned int pre_seed[3];
...
@@ -846,8 +848,6 @@ extern unsigned int pre_seed[3];
#define AVAIL_SC 0x8
#define AVAIL_SC 0x8
#define AVAIL_OCGTCG (AVAIL_OCG|AVAIL_TCG)
#define AVAIL_OCGTCG (AVAIL_OCG|AVAIL_TCG)
#define DEFAULT_DUEL_RULE 5
#define CARD_ARTWORK_VERSIONS_OFFSET 10
#define CARD_ARTWORK_VERSIONS_OFFSET 10
#define MAX_LAYER_COUNT 6
#define MAX_LAYER_COUNT 6
#endif // GAME_H
#endif // GAME_H
gframe/materials.h
View file @
26eb016b
...
@@ -21,11 +21,11 @@ public:
...
@@ -21,11 +21,11 @@ public:
S3DVertex
vFieldSpell2
[
4
];
S3DVertex
vFieldSpell2
[
4
];
//S3DVertex vBackLine[76];
//S3DVertex vBackLine[76];
S3DVertex
vFieldDeck
[
2
][
4
];
S3DVertex
vFieldDeck
[
2
][
4
];
S3DVertex
vFieldGrave
[
2
][
2
][
4
];
S3DVertex
vFieldGrave
[
2
][
2
][
4
];
//[player][rule], rule = 0: dule_rule <= 3, 1: dule_rule >= 4
S3DVertex
vFieldExtra
[
2
][
4
];
S3DVertex
vFieldExtra
[
2
][
4
];
S3DVertex
vFieldRemove
[
2
][
2
][
4
];
S3DVertex
vFieldRemove
[
2
][
2
][
4
];
//[player][rule]
S3DVertex
vFieldMzone
[
2
][
7
][
4
];
S3DVertex
vFieldMzone
[
2
][
7
][
4
];
//[player][sequence]
S3DVertex
vFieldSzone
[
2
][
8
][
2
][
4
];
S3DVertex
vFieldSzone
[
2
][
8
][
2
][
4
];
//[player][sequence][rule]
irr
::
core
::
vector3df
vFieldContiAct
[
4
];
irr
::
core
::
vector3df
vFieldContiAct
[
4
];
S3DVertex
vArrow
[
40
];
S3DVertex
vArrow
[
40
];
SColor
c2d
[
4
];
SColor
c2d
[
4
];
...
...
gframe/menu_handler.cpp
View file @
26eb016b
...
@@ -314,11 +314,17 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
...
@@ -314,11 +314,17 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
for
(
int
i
=
0
;
i
<
max
;
++
i
)
{
for
(
int
i
=
0
;
i
<
max
;
++
i
)
{
int
main
=
replay
.
ReadInt32
();
int
main
=
replay
.
ReadInt32
();
Deck
tmp_deck
;
Deck
tmp_deck
;
for
(
int
j
=
0
;
j
<
main
;
++
j
)
for
(
int
j
=
0
;
j
<
main
;
++
j
)
{
tmp_deck
.
main
.
push_back
(
dataManager
.
GetCodePointer
(
replay
.
ReadInt32
()));
auto
card
=
dataManager
.
GetCodePointer
(
replay
.
ReadInt32
());
if
(
card
!=
dataManager
.
datas_end
)
tmp_deck
.
main
.
push_back
(
card
);
}
int
extra
=
replay
.
ReadInt32
();
int
extra
=
replay
.
ReadInt32
();
for
(
int
j
=
0
;
j
<
extra
;
++
j
)
for
(
int
j
=
0
;
j
<
extra
;
++
j
)
{
tmp_deck
.
extra
.
push_back
(
dataManager
.
GetCodePointer
(
replay
.
ReadInt32
()));
auto
card
=
dataManager
.
GetCodePointer
(
replay
.
ReadInt32
());
if
(
card
!=
dataManager
.
datas_end
)
tmp_deck
.
extra
.
push_back
(
card
);
}
FileSystem
::
SafeFileName
(
namebuf
[
i
]);
FileSystem
::
SafeFileName
(
namebuf
[
i
]);
myswprintf
(
filename
,
L"deck/%ls-%d %ls.ydk"
,
ex_filename
,
i
+
1
,
namebuf
[
i
]);
myswprintf
(
filename
,
L"deck/%ls-%d %ls.ydk"
,
ex_filename
,
i
+
1
,
namebuf
[
i
]);
deckManager
.
SaveDeck
(
tmp_deck
,
filename
);
deckManager
.
SaveDeck
(
tmp_deck
,
filename
);
...
...
gframe/network.h
View file @
26eb016b
...
@@ -99,9 +99,8 @@ struct STOC_HS_WatchChange {
...
@@ -99,9 +99,8 @@ struct STOC_HS_WatchChange {
class
DuelMode
;
class
DuelMode
;
struct
DuelPlayer
{
struct
DuelPlayer
{
unsigned
short
name
[
20
]{
0
};
unsigned
short
name
[
20
]{};
DuelMode
*
game
{
nullptr
};
DuelMode
*
game
{
nullptr
};
unsigned
char
player_id
{
0xff
};
unsigned
char
type
{
0
};
unsigned
char
type
{
0
};
unsigned
char
state
{
0
};
unsigned
char
state
{
0
};
bufferevent
*
bev
{
0
};
bufferevent
*
bev
{
0
};
...
...
gframe/replay_mode.cpp
View file @
26eb016b
gframe/single_duel.cpp
View file @
26eb016b
...
@@ -461,8 +461,6 @@ void SingleDuel::StartDuel(DuelPlayer* dp) {
...
@@ -461,8 +461,6 @@ 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
;
players
[
0
]
->
player_id
=
0
;
players
[
1
]
->
player_id
=
1
;
duel_stage
=
DUEL_STAGE_FINGER
;
duel_stage
=
DUEL_STAGE_FINGER
;
}
}
void
SingleDuel
::
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
{
void
SingleDuel
::
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
{
...
@@ -513,6 +511,8 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
...
@@ -513,6 +511,8 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
return
;
return
;
duel_stage
=
DUEL_STAGE_DUELING
;
duel_stage
=
DUEL_STAGE_DUELING
;
bool
swapped
=
false
;
bool
swapped
=
false
;
pplayer
[
0
]
=
players
[
0
];
pplayer
[
1
]
=
players
[
1
];
if
((
tp
&&
dp
->
type
==
1
)
||
(
!
tp
&&
dp
->
type
==
0
))
{
if
((
tp
&&
dp
->
type
==
1
)
||
(
!
tp
&&
dp
->
type
==
0
))
{
DuelPlayer
*
p
=
players
[
0
];
DuelPlayer
*
p
=
players
[
0
];
players
[
0
]
=
players
[
1
];
players
[
0
]
=
players
[
1
];
...
@@ -686,6 +686,15 @@ void SingleDuel::DuelEndProc() {
...
@@ -686,6 +686,15 @@ void SingleDuel::DuelEndProc() {
duel_stage
=
DUEL_STAGE_END
;
duel_stage
=
DUEL_STAGE_END
;
#endif
#endif
}
else
{
}
else
{
if
(
players
[
0
]
!=
pplayer
[
0
])
{
players
[
0
]
=
pplayer
[
0
];
players
[
1
]
=
pplayer
[
1
];
players
[
0
]
->
type
=
0
;
players
[
1
]
->
type
=
1
;
Deck
d
=
pdeck
[
0
];
pdeck
[
0
]
=
pdeck
[
1
];
pdeck
[
1
]
=
d
;
}
ready
[
0
]
=
false
;
ready
[
0
]
=
false
;
ready
[
1
]
=
false
;
ready
[
1
]
=
false
;
players
[
0
]
->
state
=
CTOS_UPDATE_DECK
;
players
[
0
]
->
state
=
CTOS_UPDATE_DECK
;
...
@@ -705,7 +714,7 @@ void SingleDuel::DuelEndProc() {
...
@@ -705,7 +714,7 @@ void SingleDuel::DuelEndProc() {
}
}
}
}
void
SingleDuel
::
Surrender
(
DuelPlayer
*
dp
)
{
void
SingleDuel
::
Surrender
(
DuelPlayer
*
dp
)
{
if
(
dp
->
type
>
1
||
dp
->
player_id
>
1
||
!
pduel
)
if
(
dp
->
type
>
1
||
!
pduel
)
return
;
return
;
unsigned
char
wbuf
[
3
];
unsigned
char
wbuf
[
3
];
uint32
player
=
dp
->
type
;
uint32
player
=
dp
->
type
;
...
@@ -719,9 +728,13 @@ void SingleDuel::Surrender(DuelPlayer* dp) {
...
@@ -719,9 +728,13 @@ void SingleDuel::Surrender(DuelPlayer* dp) {
#ifdef YGOPRO_SERVER_MODE
#ifdef YGOPRO_SERVER_MODE
NetServer
::
ReSendToPlayers
(
cache_recorder
,
replay_recorder
);
NetServer
::
ReSendToPlayers
(
cache_recorder
,
replay_recorder
);
#endif
#endif
match_result
[
duel_count
]
=
1
-
dp
->
player_id
;
if
(
players
[
player
]
==
pplayer
[
player
])
{
++
duel_count
;
match_result
[
duel_count
++
]
=
1
-
player
;
tp_player
=
player
;
tp_player
=
player
;
}
else
{
match_result
[
duel_count
++
]
=
player
;
tp_player
=
1
-
player
;
}
EndDuel
();
EndDuel
();
DuelEndProc
();
DuelEndProc
();
event_del
(
etimer
);
event_del
(
etimer
);
...
@@ -792,14 +805,15 @@ int SingleDuel::Analyze(unsigned char* msgbuffer, unsigned int len) {
...
@@ -792,14 +805,15 @@ int SingleDuel::Analyze(unsigned char* msgbuffer, unsigned int len) {
NetServer
::
ReSendToPlayers
(
cache_recorder
,
replay_recorder
);
NetServer
::
ReSendToPlayers
(
cache_recorder
,
replay_recorder
);
#endif
#endif
if
(
player
>
1
)
{
if
(
player
>
1
)
{
match_result
[
duel_count
]
=
2
;
match_result
[
duel_count
++
]
=
2
;
tp_player
=
1
-
tp_player
;
tp_player
=
1
-
tp_player
;
}
}
else
if
(
players
[
player
]
==
pplayer
[
player
])
{
else
{
match_result
[
duel_count
++
]
=
player
;
match_result
[
duel_count
]
=
players
[
player
]
->
player_id
;
tp_player
=
1
-
player
;
tp_player
=
1
-
player
;
}
else
{
match_result
[
duel_count
++
]
=
1
-
player
;
tp_player
=
player
;
}
}
++
duel_count
;
EndDuel
();
EndDuel
();
return
2
;
return
2
;
}
}
...
@@ -2183,9 +2197,13 @@ void SingleDuel::SingleTimer(evutil_socket_t fd, short events, void* arg) {
...
@@ -2183,9 +2197,13 @@ void SingleDuel::SingleTimer(evutil_socket_t fd, short events, void* arg) {
#ifdef YGOPRO_SERVER_MODE
#ifdef YGOPRO_SERVER_MODE
NetServer
::
ReSendToPlayers
(
sd
->
cache_recorder
,
sd
->
replay_recorder
);
NetServer
::
ReSendToPlayers
(
sd
->
cache_recorder
,
sd
->
replay_recorder
);
#endif
#endif
sd
->
match_result
[
sd
->
duel_count
]
=
sd
->
players
[
1
-
player
]
->
player_id
;
if
(
sd
->
players
[
player
]
==
sd
->
pplayer
[
player
])
{
++
sd
->
duel_count
;
sd
->
match_result
[
sd
->
duel_count
++
]
=
1
-
player
;
sd
->
tp_player
=
player
;
sd
->
tp_player
=
player
;
}
else
{
sd
->
match_result
[
sd
->
duel_count
++
]
=
player
;
sd
->
tp_player
=
1
-
player
;
}
sd
->
EndDuel
();
sd
->
EndDuel
();
sd
->
DuelEndProc
();
sd
->
DuelEndProc
();
event_del
(
sd
->
etimer
);
event_del
(
sd
->
etimer
);
...
...
gframe/single_duel.h
View file @
26eb016b
...
@@ -57,11 +57,12 @@ private:
...
@@ -57,11 +57,12 @@ private:
int
WriteUpdateData
(
int
&
player
,
int
location
,
int
&
flag
,
unsigned
char
*&
qbuf
,
int
&
use_cache
);
int
WriteUpdateData
(
int
&
player
,
int
location
,
int
&
flag
,
unsigned
char
*&
qbuf
,
int
&
use_cache
);
protected:
protected:
DuelPlayer
*
players
[
2
]{
nullptr
};
DuelPlayer
*
players
[
2
]{};
bool
ready
[
2
]{
false
};
DuelPlayer
*
pplayer
[
2
]{};
bool
ready
[
2
]{};
Deck
pdeck
[
2
];
Deck
pdeck
[
2
];
int
deck_error
[
2
]{
0
};
int
deck_error
[
2
]{};
unsigned
char
hand_result
[
2
]{
0
};
unsigned
char
hand_result
[
2
]{};
unsigned
char
last_response
{
0
};
unsigned
char
last_response
{
0
};
std
::
set
<
DuelPlayer
*>
observers
;
std
::
set
<
DuelPlayer
*>
observers
;
#ifdef YGOPRO_SERVER_MODE
#ifdef YGOPRO_SERVER_MODE
...
@@ -75,8 +76,8 @@ protected:
...
@@ -75,8 +76,8 @@ protected:
int
match_kill
{
0
};
int
match_kill
{
0
};
unsigned
char
duel_count
{
0
};
unsigned
char
duel_count
{
0
};
unsigned
char
tp_player
{
0
};
unsigned
char
tp_player
{
0
};
unsigned
char
match_result
[
3
]{
0
};
unsigned
char
match_result
[
3
]{};
short
time_limit
[
2
]{
0
};
short
time_limit
[
2
]{};
short
time_elapsed
{
0
};
short
time_elapsed
{
0
};
#ifdef YGOPRO_SERVER_MODE
#ifdef YGOPRO_SERVER_MODE
short
time_compensator
[
2
];
short
time_compensator
[
2
];
...
...
lflist.conf
View file @
26eb016b
#[2024.1][2024.1 TCG][2023.10][2023.7][2023.4][2023.1][2022.10][2022.7][2022.4][2022.1][2021.10][2021.7][2021.4][2021.1][2020.10][2020.7][2020.4][2020.1][2019.10][2019.7][2019.4][2019.1][2018.10][2018.7][2018.4][2018.1][2017.10][2017.7][2017.4][2017.1][2016.10][2016.7][2016.4][2016.1][2015.10][2015.4][2015.1][2014.10][2014.7][2014.4][2014.2][2013.9][2023.9 TCG][2023.6 TCG][2023.2 TCG][2022.12 TCG][2022.10 TCG][2022.5 TCG][2022.2 TCG][2021.10 TCG][2021.7 TCG][2021.3 TCG][2020.12 TCG][2020.9 TCG][2020.6 TCG][2020.4 TCG][2020.1 TCG][2019.10 TCG][2019.7 TCG][2019.4 TCG][2019.1 TCG][2018.12 TCG][2018.9 TCG][2018.5 TCG][2018.2 TCG][2017.11 TCG][2017.9 TCG][2017.6 TCG][2017.3 TCG][2016.8 TCG][2016.4 TCG][2015.11 TCG][2015.7 TCG][2015.4 TCG][2015.1 TCG][2014.10 TCG][2014.7 TCG][2014.4 TCG][2014.1.1 TCG][2013.10.11 TCG][2013.3.1][2012.9.1][2012.3.1][2011.9.1]
#[2024.1][2024.1 TCG][2023.10][2023.7][2023.4][2023.1][2022.10][2022.7][2022.4][2022.1][2021.10][2021.7][2021.4][2021.1][2020.10][2020.7][2020.4][2020.1][2019.10][2019.7][2019.4][2019.1][2018.10][2018.7][2018.4][2018.1][2017.10][2017.7][2017.4][2017.1][2016.10][2016.7][2016.4][2016.1][2015.10][2015.4][2015.1][2014.10][2014.7][2014.4][2014.2][2013.9][2023.9 TCG][2023.6 TCG][2023.2 TCG][2022.12 TCG][2022.10 TCG][2022.5 TCG][2022.2 TCG][2021.10 TCG][2021.7 TCG][2021.3 TCG][2020.12 TCG][2020.9 TCG][2020.6 TCG][2020.4 TCG][2020.1 TCG][2019.10 TCG][2019.7 TCG][2019.4 TCG][2019.1 TCG][2018.12 TCG][2018.9 TCG][2018.5 TCG][2018.2 TCG][2017.11 TCG][2017.9 TCG][2017.6 TCG][2017.3 TCG][2016.8 TCG][2016.4 TCG][2015.11 TCG][2015.7 TCG][2015.4 TCG][2015.1 TCG][2014.10 TCG][2014.7 TCG][2014.4 TCG][2014.1.1 TCG][2013.10.11 TCG][2013.3.1][2012.9.1][2012.3.1][2011.9.1]
!
2024
.
1
!
2024
.
1
#forbidden
#forbidden
91869203
0
--アマゾネスの射手
91869203
0
--アマゾネスの射手
...
@@ -139,11 +138,11 @@
...
@@ -139,11 +138,11 @@
33508719
1
--メタモルポット
33508719
1
--メタモルポット
89399912
1
--嵐征竜-テンペスト
89399912
1
--嵐征竜-テンペスト
92746535
1
--竜剣士ラスター
P
92746535
1
--竜剣士ラスター
P
19613556
1
--大嵐
77103950
1
--壱世壊=ペルレイノ
77103950
1
--壱世壊=ペルレイノ
33782437
1
--一時休戦
33782437
1
--一時休戦
61292243
1
--
EMERGENCY
!
01845204
1
--簡易融合
01845204
1
--簡易融合
61292243
1
--
EMERGENCY
!
19613556
1
--大嵐
81439173
1
--おろかな埋葬
81439173
1
--おろかな埋葬
84211599
1
--金満で謙虚な壺
84211599
1
--金満で謙虚な壺
23701465
1
--原初の種
23701465
1
--原初の種
...
@@ -168,8 +167,8 @@
...
@@ -168,8 +167,8 @@
92107604
1
--神碑の泉
92107604
1
--神碑の泉
27970830
1
--六武の門
27970830
1
--六武の門
02295440
1
--ワン・フォー・ワン
02295440
1
--ワン・フォー・ワン
82732705
1
--スキルドレイン
90846359
1
--群雄割拠
90846359
1
--群雄割拠
82732705
1
--スキルドレイン
35316708
1
--刻の封印
35316708
1
--刻の封印
21076084
1
--トリックスター・リンカーネイション
21076084
1
--トリックスター・リンカーネイション
23002292
1
--レッド・リブート
23002292
1
--レッド・リブート
...
@@ -184,16 +183,16 @@
...
@@ -184,16 +183,16 @@
35726888
2
--おろかな副葬
35726888
2
--おろかな副葬
67723438
2
--緊急テレポート
67723438
2
--緊急テレポート
35261759
2
--強欲で貪欲な壺
35261759
2
--強欲で貪欲な壺
12580477
2
--サンダー・ボルト
04031928
2
--心変わり
04031928
2
--心変わり
12580477
2
--サンダー・ボルト
48130397
2
--超融合
48130397
2
--超融合
11110587
2
--隣の芝刈り
11110587
2
--隣の芝刈り
242
07889
2
--センサー万別
242
24830
2
--墓穴の指名者
55584558
2
--ピュアリィ・デリシャスメモリー
55584558
2
--ピュアリィ・デリシャスメモリー
56700100
2
--ピュアリィ・マイフレンド
56700100
2
--ピュアリィ・マイフレンド
92714517
2
--ビッグウェルカム・ラビュリンス
24224830
2
--墓穴の指名者
14532163
2
--ライトニング・ストーム
14532163
2
--ライトニング・ストーム
24207889
2
--センサー万別
92714517
2
--ビッグウェルカム・ラビュリンス
!
2024
.
1
TCG
!
2024
.
1
TCG
#forbidden
#forbidden
...
@@ -213,10 +212,12 @@
...
@@ -213,10 +212,12 @@
93369354
0
--
Fishborg
Blaster
93369354
0
--
Fishborg
Blaster
67441435
0
--
Glow
-
Up
Bulb
67441435
0
--
Glow
-
Up
Bulb
75732622
0
--
Grinder
Golem
75732622
0
--
Grinder
Golem
25926710
0
--
Kelbek
the
Ancient
Vanguard
57421866
0
--
Level
Eater
57421866
0
--
Level
Eater
34206604
0
--
Magical
Scientist
34206604
0
--
Magical
Scientist
31178212
0
--
Majespecter
Unicorn
-
Kirin
31178212
0
--
Majespecter
Unicorn
-
Kirin
21377582
0
--
Master
Peace
,
the
True
Dracoslaying
King
21377582
0
--
Master
Peace
,
the
True
Dracoslaying
King
36521307
0
--
Mathmech
Circular
23434538
0
--
Maxx
"C"
23434538
0
--
Maxx
"C"
96782886
0
--
Mind
Master
96782886
0
--
Mind
Master
07563579
0
--
Performage
Plushfire
07563579
0
--
Performage
Plushfire
...
@@ -235,11 +236,10 @@
...
@@ -235,11 +236,10 @@
59537380
0
--
Guardragon
Agarpain
59537380
0
--
Guardragon
Agarpain
86148577
0
--
Guardragon
Elpy
86148577
0
--
Guardragon
Elpy
24094258
0
--
Heavymetalfoes
Electrumite
24094258
0
--
Heavymetalfoes
Electrumite
25926710
0
--
Kelbek
the
Ancient
Vanguard
59934749
0
--
Isolde
,
Two
Tales
of
the
Noble
Knights
39064822
0
--
Knightmare
Goblin
39064822
0
--
Knightmare
Goblin
03679218
0
--
Knightmare
Mermaid
03679218
0
--
Knightmare
Mermaid
85243784
0
--
Linkross
85243784
0
--
Linkross
36521307
0
--
Mathmech
Circular
44097050
0
--
Mecha
Phantom
Beast
Auroradon
44097050
0
--
Mecha
Phantom
Beast
Auroradon
25725326
0
--
Prank
-
Kids
Meow
-
Meow
-
Mu
25725326
0
--
Prank
-
Kids
Meow
-
Meow
-
Mu
70369116
0
--
Predaplant
Verte
Anaconda
70369116
0
--
Predaplant
Verte
Anaconda
...
@@ -251,7 +251,6 @@
...
@@ -251,7 +251,6 @@
83152482
0
--
Union
Carrier
83152482
0
--
Union
Carrier
03040496
0
--
Chaos
Ruler
,
the
Chaotic
Magical
Dragon
03040496
0
--
Chaos
Ruler
,
the
Chaotic
Magical
Dragon
63101919
0
--
Tempest
Magician
63101919
0
--
Tempest
Magician
59934749
0
--
Isolde
,
Two
Tales
of
the
Noble
Knights
48626373
0
--
Kashtira
Arise
-
Heart
48626373
0
--
Kashtira
Arise
-
Heart
34086406
0
--
Lavalval
Chain
34086406
0
--
Lavalval
Chain
04423206
0
--
M
-
X
-
Saber
Invoker
04423206
0
--
M
-
X
-
Saber
Invoker
...
@@ -340,12 +339,12 @@
...
@@ -340,12 +339,12 @@
78872731
1
--
Zoodiac
Ratpier
78872731
1
--
Zoodiac
Ratpier
39512984
1
--
Gem
-
Knight
Master
Diamond
39512984
1
--
Gem
-
Knight
Master
Diamond
73539069
1
--
Striker
Dragon
73539069
1
--
Striker
Dragon
93896655
1
--
Sunavalon
Dryas
65563871
1
--
Sunvine
Healer
25862681
1
--
Ancient
Fairy
Dragon
25862681
1
--
Ancient
Fairy
Dragon
65536818
1
--
Denglong
,
First
of
the
Yang
Zing
65536818
1
--
Denglong
,
First
of
the
Yang
Zing
94677445
1
--
Ib
the
World
Chalice
Justiciar
94677445
1
--
Ib
the
World
Chalice
Justiciar
74586817
1
--
PSY
-
Framelord
Omega
74586817
1
--
PSY
-
Framelord
Omega
39880350
1
--
Sunavalon
Dryas
65563871
1
--
Sunvine
Healer
90953320
1
--
T
.
G
.
Hyper
Librarian
90953320
1
--
T
.
G
.
Hyper
Librarian
27552504
1
--
Beatrice
,
Lady
of
the
Eternal
27552504
1
--
Beatrice
,
Lady
of
the
Eternal
00581014
1
--
Daigusto
Emeral
00581014
1
--
Daigusto
Emeral
...
@@ -361,7 +360,6 @@
...
@@ -361,7 +360,6 @@
81439173
1
--
Foolish
Burial
81439173
1
--
Foolish
Burial
27970830
1
--
Gateway
of
the
Six
27970830
1
--
Gateway
of
the
Six
75500286
1
--
Gold
Sarcophagus
75500286
1
--
Gold
Sarcophagus
53334471
1
--
Gozen
Match
18144506
1
--
Harpie
'
s
Feather
Duster
18144506
1
--
Harpie
'
s
Feather
Duster
66957584
1
--
Infernity
Launcher
66957584
1
--
Infernity
Launcher
01845204
1
--
Instant
Fusion
01845204
1
--
Instant
Fusion
...
@@ -374,22 +372,23 @@
...
@@ -374,22 +372,23 @@
55584558
1
--
Purrely
Delicious
Memory
55584558
1
--
Purrely
Delicious
Memory
58577036
1
--
Reasoning
58577036
1
--
Reasoning
32807846
1
--
Reinforcement
of
the
Army
32807846
1
--
Reinforcement
of
the
Army
90846359
1
--
Rivalry
of
Warlords
24940422
1
--
Sekka
'
s
Light
24940422
1
--
Sekka
'
s
Light
73468603
1
--
Set
Rotation
73468603
1
--
Set
Rotation
52340444
1
--
Sky
Striker
Mecha
-
Hornet
Drones
52340444
1
--
Sky
Striker
Mecha
-
Hornet
Drones
71344451
1
--
Slash
Draw
71344451
1
--
Slash
Draw
45986603
1
--
Snatch
Steal
45986603
1
--
Snatch
Steal
73628505
1
--
Terraforming
73628505
1
--
Terraforming
24207889
1
--
There
Can
Be
Only
One
53334471
1
--
Gozen
Match
32723153
1
--
Magical
Explosion
32723153
1
--
Magical
Explosion
03734202
1
--
Naturia
Sacred
Tree
03734202
1
--
Naturia
Sacred
Tree
90846359
1
--
Rivalry
of
Warlords
24207889
1
--
There
Can
Be
Only
One
35316708
1
--
Time
Seal
35316708
1
--
Time
Seal
#semi limit
#semi limit
09411399
2
--
Destiny
HERO
-
Malicious
09411399
2
--
Destiny
HERO
-
Malicious
82385847
2
--
Dinowrestler
Pankratops
82385847
2
--
Dinowrestler
Pankratops
14532163
2
--
Lightning
Storm
81275020
2
--
Speedroid
Terrortop
81275020
2
--
Speedroid
Terrortop
14532163
2
--
Lightning
Storm
21347668
2
--
Purrely
Sleepy
Memory
21347668
2
--
Purrely
Sleepy
Memory
92107604
2
--
Runick
Fountain
92107604
2
--
Runick
Fountain
63166095
2
--
Sky
Striker
Mobilize
-
Engage
!
63166095
2
--
Sky
Striker
Mobilize
-
Engage
!
...
...
strings.conf
View file @
26eb016b
...
@@ -318,8 +318,8 @@
...
@@ -318,8 +318,8 @@
!
system
1260
大师规则
!
system
1260
大师规则
!
system
1261
大师规则2
!
system
1261
大师规则2
!
system
1262
大师规则3
!
system
1262
大师规则3
!
system
1263
新大师规则
!
system
1263
新大师规则
(
2017
)
!
system
1264
大师规则
2020
!
system
1264
大师规则
(
2020
)
!
system
1270
卡片信息
!
system
1270
卡片信息
!
system
1271
消息记录
!
system
1271
消息记录
!
system
1272
清除记录
!
system
1272
清除记录
...
@@ -1206,3 +1206,4 @@
...
@@ -1206,3 +1206,4 @@
!
setname
0
x1a5
于贝尔 ユベル
!
setname
0
x1a5
于贝尔 ユベル
!
setname
0
x1a6
肃声 粛声
!
setname
0
x1a6
肃声 粛声
!
setname
0
x1a7
白斗气 ホワイト・オーラ
!
setname
0
x1a7
白斗气 ホワイト・オーラ
!
setname
0
x1a8
玩具 トイ
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