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
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
ygopro
Commits
6143a504
Commit
6143a504
authored
Jan 30, 2024
by
nanahira
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of github.com:Fluorohydride/ygopro into develop
parents
d1065dc3
2a9f0903
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
209 additions
and
189 deletions
+209
-189
gframe/client_card.cpp
gframe/client_card.cpp
+17
-13
gframe/client_card.h
gframe/client_card.h
+1
-0
gframe/client_field.cpp
gframe/client_field.cpp
+13
-11
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
-6
gframe/game.h
gframe/game.h
+83
-83
gframe/materials.h
gframe/materials.h
+4
-4
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+10
-4
gframe/network.h
gframe/network.h
+16
-22
gframe/replay_mode.cpp
gframe/replay_mode.cpp
+1
-1
lflist.conf
lflist.conf
+16
-17
strings.conf
strings.conf
+3
-11
No files found.
gframe/client_card.cpp
View file @
6143a504
...
...
@@ -7,9 +7,13 @@ namespace ygo {
ClientCard
::~
ClientCard
()
{
ClearTarget
();
if
(
equipTarget
)
if
(
equipTarget
)
{
equipTarget
->
is_showequip
=
false
;
equipTarget
->
equipped
.
erase
(
this
);
for
(
auto
card
:
equipped
)
{
equipTarget
=
nullptr
;
}
for
(
auto
&
card
:
equipped
)
{
card
->
is_showequip
=
false
;
card
->
equipTarget
=
nullptr
;
}
equipped
.
clear
();
...
...
@@ -21,8 +25,9 @@ ClientCard::~ClientCard() {
else
++
it
;
}
overlayTarget
=
nullptr
;
}
for
(
auto
card
:
overlayed
)
{
for
(
auto
&
card
:
overlayed
)
{
card
->
overlayTarget
=
nullptr
;
}
overlayed
.
clear
();
...
...
@@ -206,10 +211,6 @@ void ClientCard::ClearData() {
rscstring
[
0
]
=
0
;
lscstring
[
0
]
=
0
;
counters
.
clear
();
for
(
auto
card
:
equipped
)
{
card
->
equipTarget
=
nullptr
;
}
equipped
.
clear
();
}
bool
ClientCard
::
client_card_sort
(
ClientCard
*
c1
,
ClientCard
*
c2
)
{
if
(
c1
->
is_selected
!=
c2
->
is_selected
)
...
...
@@ -220,23 +221,26 @@ bool ClientCard::client_card_sort(ClientCard* c1, ClientCard* c2) {
return
cp1
<
cp2
;
if
(
c1
->
location
!=
c2
->
location
)
return
c1
->
location
<
c2
->
location
;
if
(
c1
->
location
&
LOCATION_OVERLAY
)
if
(
c1
->
overlayTarget
!=
c2
->
overlayTarget
)
if
(
c1
->
location
&
LOCATION_OVERLAY
)
{
if
(
c1
->
overlayTarget
!=
c2
->
overlayTarget
)
return
c1
->
overlayTarget
->
sequence
<
c2
->
overlayTarget
->
sequence
;
else
return
c1
->
sequence
<
c2
->
sequence
;
else
return
c1
->
sequence
<
c2
->
sequence
;
}
else
{
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
();
});
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
();
});
if
(
it1
!=
mainGame
->
dField
.
chains
.
rend
()
||
it2
!=
mainGame
->
dField
.
chains
.
rend
())
{
return
it1
<
it2
;
}
return
c1
->
sequence
>
c2
->
sequence
;
}
else
}
else
return
c1
->
sequence
<
c2
->
sequence
;
}
}
...
...
gframe/client_card.h
View file @
6143a504
...
...
@@ -33,6 +33,7 @@ struct CardString {
std
::
wstring
desc
[
16
];
};
typedef
std
::
unordered_map
<
unsigned
int
,
CardDataC
>::
const_iterator
code_pointer
;
typedef
std
::
unordered_map
<
unsigned
int
,
CardString
>::
const_iterator
string_pointer
;
class
ClientCard
{
public:
...
...
gframe/client_field.cpp
View file @
6143a504
...
...
@@ -19,39 +19,39 @@ ClientField::ClientField() {
}
ClientField
::~
ClientField
()
{
for
(
int
i
=
0
;
i
<
2
;
++
i
)
{
for
(
auto
card
:
deck
[
i
])
{
for
(
auto
&
card
:
deck
[
i
])
{
delete
card
;
}
deck
[
i
].
clear
();
for
(
auto
card
:
hand
[
i
])
{
for
(
auto
&
card
:
hand
[
i
])
{
delete
card
;
}
hand
[
i
].
clear
();
for
(
auto
card
:
mzone
[
i
])
{
for
(
auto
&
card
:
mzone
[
i
])
{
if
(
card
)
delete
card
;
card
=
nullptr
;
}
for
(
auto
card
:
szone
[
i
])
{
for
(
auto
&
card
:
szone
[
i
])
{
if
(
card
)
delete
card
;
card
=
nullptr
;
}
for
(
auto
card
:
grave
[
i
])
{
for
(
auto
&
card
:
grave
[
i
])
{
delete
card
;
}
grave
[
i
].
clear
();
for
(
auto
card
:
remove
[
i
])
{
for
(
auto
&
card
:
remove
[
i
])
{
delete
card
;
}
remove
[
i
].
clear
();
for
(
auto
card
:
extra
[
i
])
{
for
(
auto
&
card
:
extra
[
i
])
{
delete
card
;
}
extra
[
i
].
clear
();
}
for
(
auto
card
:
overlay_cards
)
{
for
(
auto
&
card
:
overlay_cards
)
{
delete
card
;
}
overlay_cards
.
clear
();
...
...
@@ -1578,9 +1578,11 @@ void ClientField::UpdateDeclarableList() {
if
(
ancard
.
size
())
return
;
}
for
(
auto
cit
=
dataManager
.
_strings
.
begin
();
cit
!=
dataManager
.
_strings
.
end
();
++
cit
)
{
if
(
cit
->
second
.
name
.
find
(
pname
)
!=
std
::
wstring
::
npos
||
mainGame
->
CheckRegEx
(
cit
->
second
.
name
,
pname
))
{
auto
cp
=
dataManager
.
GetCodePointer
(
cit
->
first
);
//verified by _strings
for
(
auto
cit
=
dataManager
.
strings_begin
;
cit
!=
dataManager
.
strings_end
;
++
cit
)
{
if
(
cit
->
second
.
name
.
find
(
pname
)
!=
std
::
wstring
::
npos
)
{
auto
cp
=
dataManager
.
GetCodePointer
(
cit
->
first
);
if
(
cp
==
dataManager
.
datas_end
)
continue
;
//datas.alias can be double card names or alias
if
(
is_declarable
(
cp
->
second
,
declare_opcodes
))
{
if
(
pname
==
cit
->
second
.
name
||
mainGame
->
CheckRegEx
(
cit
->
second
.
name
,
pname
,
true
))
{
//exact match
...
...
gframe/data_manager.cpp
View file @
6143a504
...
...
@@ -83,6 +83,10 @@ bool DataManager::LoadDB(const wchar_t* wfile) {
sqlite3_finalize
(
pStmt
);
spmemvfs_close_db
(
&
db
);
spmemvfs_env_fini
();
datas_begin
=
_datas
.
begin
();
datas_end
=
_datas
.
end
();
strings_begin
=
_strings
.
begin
();
strings_end
=
_strings
.
end
();
return
true
;
}
bool
DataManager
::
LoadStrings
(
const
char
*
file
)
{
...
...
@@ -148,10 +152,10 @@ bool DataManager::Error(spmemvfs_db_t* pDB, sqlite3_stmt* pStmt) {
return
false
;
}
bool
DataManager
::
GetData
(
unsigned
int
code
,
CardData
*
pData
)
{
auto
cdit
=
_datas
.
find
(
code
);
code_pointer
cdit
=
_datas
.
find
(
code
);
if
(
cdit
==
_datas
.
end
())
return
false
;
auto
data
=
cdit
->
second
;
auto
&
data
=
cdit
->
second
;
if
(
pData
)
{
pData
->
code
=
data
.
code
;
pData
->
alias
=
data
.
alias
;
...
...
@@ -168,9 +172,12 @@ bool DataManager::GetData(unsigned int code, CardData* pData) {
}
return
true
;
}
code_pointer
DataManager
::
GetCodePointer
(
int
code
)
{
code_pointer
DataManager
::
GetCodePointer
(
unsigned
int
code
)
const
{
return
_datas
.
find
(
code
);
}
string_pointer
DataManager
::
GetStringPointer
(
unsigned
int
code
)
const
{
return
_strings
.
find
(
code
);
}
bool
DataManager
::
GetString
(
int
code
,
CardString
*
pStr
)
{
auto
csit
=
_strings
.
find
(
code
);
if
(
csit
==
_strings
.
end
())
{
...
...
gframe/data_manager.h
View file @
6143a504
...
...
@@ -11,14 +11,20 @@ namespace ygo {
class
DataManager
{
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
LoadStrings
(
const
char
*
file
);
bool
LoadStrings
(
IReadFile
*
reader
);
void
ReadStringConfLine
(
const
char
*
linebuf
);
bool
Error
(
spmemvfs_db_t
*
pDB
,
sqlite3_stmt
*
pStmt
=
0
);
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
);
const
wchar_t
*
GetName
(
int
code
);
const
wchar_t
*
GetText
(
int
code
);
...
...
@@ -36,12 +42,14 @@ public:
const
wchar_t
*
FormatSetName
(
unsigned
long
long
setcode
);
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
>
_victoryStrings
;
std
::
unordered_map
<
unsigned
int
,
std
::
wstring
>
_setnameStrings
;
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
numBuffer
[
6
];
...
...
@@ -58,6 +66,10 @@ public:
static
byte
*
ScriptReaderExSingle
(
const
char
*
path
,
const
char
*
script_name
,
int
*
slen
,
int
pre_len
=
2
);
static
byte
*
ScriptReader
(
const
char
*
script_name
,
int
*
slen
);
static
IFileSystem
*
FileSystem
;
private:
std
::
unordered_map
<
unsigned
int
,
CardDataC
>
_datas
;
std
::
unordered_map
<
unsigned
int
,
CardString
>
_strings
;
};
extern
DataManager
dataManager
;
...
...
gframe/deck_con.cpp
View file @
6143a504
...
...
@@ -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
)
{
unsigned
long
long
sc
=
data
.
setcode
;
if
(
data
.
alias
)
{
auto
aptr
=
dataManager
.
_datas
.
find
(
data
.
alias
);
if
(
aptr
!=
dataManager
.
_datas
.
end
()
)
auto
aptr
=
dataManager
.
GetCodePointer
(
data
.
alias
);
if
(
aptr
!=
dataManager
.
datas_end
)
sc
=
aptr
->
second
.
setcode
;
}
bool
res
=
false
;
...
...
@@ -1071,7 +1071,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
dragx
=
event
.
MouseInput
.
X
;
dragy
=
event
.
MouseInput
.
Y
;
draging_pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
if
(
draging_pointer
==
dataManager
.
_datas
.
end
()
)
if
(
draging_pointer
==
dataManager
.
datas_end
)
break
;
if
(
hovered_pos
==
4
)
{
if
(
!
check_limit
(
draging_pointer
))
...
...
@@ -1125,7 +1125,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if
(
hovered_pos
==
0
||
hovered_seq
==
-
1
)
break
;
auto
pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
if
(
pointer
==
dataManager
.
_datas
.
end
()
)
if
(
pointer
==
dataManager
.
datas_end
)
break
;
soundManager
.
PlaySoundEffect
(
SOUND_CARD_DROP
);
if
(
hovered_pos
==
1
)
{
...
...
@@ -1160,7 +1160,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
pop_side
(
hovered_seq
);
}
else
{
auto
pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
if
(
pointer
==
dataManager
.
_datas
.
end
()
)
if
(
pointer
==
dataManager
.
datas_end
)
break
;
if
(
!
check_limit
(
pointer
))
break
;
...
...
@@ -1195,6 +1195,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if
(
is_draging
)
break
;
auto
pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
if
(
pointer
==
dataManager
.
datas_end
)
break
;
if
(
!
check_limit
(
pointer
))
break
;
soundManager
.
PlaySoundEffect
(
SOUND_CARD_PICK
);
...
...
@@ -1462,9 +1464,11 @@ void DeckBuilder::FilterCards() {
query_elements
.
push_back
(
element
);
}
}
auto
strpointer
=
dataManager
.
_strings
.
begin
();
for
(
code_pointer
ptr
=
dataManager
.
_datas
.
begin
();
ptr
!=
dataManager
.
_datas
.
end
();
++
ptr
,
++
strpointer
)
{
for
(
code_pointer
ptr
=
dataManager
.
datas_begin
;
ptr
!=
dataManager
.
datas_end
;
++
ptr
)
{
const
CardDataC
&
data
=
ptr
->
second
;
auto
strpointer
=
dataManager
.
GetStringPointer
(
ptr
->
first
);
if
(
strpointer
==
dataManager
.
strings_end
)
continue
;
const
CardString
&
text
=
strpointer
->
second
;
if
(
data
.
type
&
TYPE_TOKEN
)
continue
;
...
...
gframe/deck_manager.cpp
View file @
6143a504
...
...
@@ -164,7 +164,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
))
{
if
(
deck
.
extra
.
size
()
>=
YGOPRO_MAX_EXTRA
)
continue
;
deck
.
extra
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
//verified by GetData()
deck
.
extra
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
}
else
if
(
deck
.
main
.
size
()
<
YGOPRO_MAX_DECK
)
{
deck
.
main
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
}
...
...
@@ -178,7 +178,7 @@ int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, bool is_p
if
(
cd
.
type
&
TYPE_TOKEN
)
continue
;
if
(
deck
.
side
.
size
()
<
YGOPRO_MAX_SIDE
)
deck
.
side
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
//verified by GetData()
deck
.
side
.
push_back
(
dataManager
.
GetCodePointer
(
code
));
}
return
errorcode
;
}
...
...
gframe/event_handler.cpp
View file @
6143a504
...
...
@@ -2282,6 +2282,7 @@ void ClientField::GetHoverField(int x, int y) {
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
)
{
// deprecated szone[7]
if
(
boardy
>=
matManager
.
vFieldSzone
[
1
][
7
][
rule
][
2
].
Pos
.
Y
&&
boardy
<=
matManager
.
vFieldSzone
[
1
][
7
][
rule
][
0
].
Pos
.
Y
)
{
hovered_controler
=
1
;
hovered_location
=
LOCATION_SZONE
;
...
...
@@ -2313,7 +2314,8 @@ void ClientField::GetHoverField(int x, int y) {
hovered_controler
=
1
;
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
)
{
hovered_controler
=
0
;
hovered_location
=
LOCATION_SZONE
;
...
...
gframe/game.cpp
View file @
6143a504
...
...
@@ -116,9 +116,6 @@ bool Game::Initialize() {
is_building
=
false
;
menuHandler
.
prev_operation
=
0
;
menuHandler
.
prev_sel
=
-
1
;
for
(
int
i
=
0
;
i
<
8
;
++
i
)
{
chatTiming
[
i
]
=
0
;
}
deckManager
.
LoadLFList
();
driver
=
device
->
getVideoDriver
();
driver
->
setTextureCreationFlag
(
irr
::
video
::
ETCF_CREATE_MIP_MAPS
,
false
);
...
...
@@ -1317,7 +1314,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
)
{
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
());
}
}
...
...
@@ -1790,8 +1787,8 @@ void Game::ShowCardInfo(int code, bool resize) {
if
(
!
gameConf
.
hide_setname
)
{
unsigned
long
long
sc
=
cd
.
setcode
;
if
(
cd
.
alias
)
{
auto
aptr
=
dataManager
.
_datas
.
find
(
cd
.
alias
);
if
(
aptr
!=
dataManager
.
_datas
.
end
()
)
auto
aptr
=
dataManager
.
GetCodePointer
(
cd
.
alias
);
if
(
aptr
!=
dataManager
.
datas_end
)
sc
=
aptr
->
second
.
setcode
;
}
if
(
sc
)
{
...
...
gframe/game.h
View file @
6143a504
...
...
@@ -10,65 +10,85 @@
#include <vector>
#include <list>
#ifndef YGOPRO_DEFAULT_DUEL_RULE
#define YGOPRO_DEFAULT_DUEL_RULE 5
#endif
#ifndef YGOPRO_MAX_DECK
#define YGOPRO_MAX_DECK 60
#endif
#ifndef YGOPRO_MIN_DECK
#define YGOPRO_MIN_DECK 40
#endif
#ifndef YGOPRO_MAX_EXTRA
#define YGOPRO_MAX_EXTRA 15
#endif
#ifndef YGOPRO_MAX_SIDE
#define YGOPRO_MAX_SIDE 15
#endif
namespace
ygo
{
struct
Config
{
bool
use_d3d
;
bool
use_image_scale
;
unsigned
short
antialias
;
unsigned
short
serverport
;
unsigned
char
textfontsize
;
wchar_t
lasthost
[
100
];
unsigned
short
lastport
;
wchar_t
nickname
[
20
];
wchar_t
gamename
[
20
];
wchar_t
lastcategory
[
64
];
wchar_t
lastdeck
[
64
];
wchar_t
textfont
[
256
];
wchar_t
numfont
[
256
];
wchar_t
roompass
[
20
];
bool
use_d3d
{
false
};
bool
use_image_scale
{
true
};
unsigned
short
antialias
{
0
};
unsigned
short
serverport
{
7911
};
unsigned
char
textfontsize
{
14
};
wchar_t
lasthost
[
100
]{};
int
lastport
{
0
};
wchar_t
nickname
[
20
]{};
wchar_t
gamename
[
20
]{};
wchar_t
lastcategory
[
64
]{};
wchar_t
lastdeck
[
64
]{};
wchar_t
textfont
[
256
]{};
wchar_t
numfont
[
256
]{};
wchar_t
roompass
[
20
]{};
wchar_t
bot_deck_path
[
64
]{};
wchar_t
locale
[
64
];
wchar_t
bot_deck_path
[
64
];
//settings
int
chkMAutoPos
;
int
chkSTAutoPos
;
int
chkRandomPos
;
int
chkAutoChain
;
int
chkWaitChain
;
int
chkDefaultShowChain
;
int
chkIgnore1
;
int
chkIgnore2
;
int
use_lflist
;
int
default_lflist
;
int
default_rule
;
int
hide_setname
;
int
hide_hint_button
;
int
control_mode
;
int
draw_field_spell
;
int
separate_clear_button
;
int
auto_search_limit
;
int
search_multiple_keywords
;
int
search_regex
;
int
chkIgnoreDeckChanges
;
int
defaultOT
;
int
enable_bot_mode
;
int
quick_animation
;
bool
window_maximized
;
int
window_width
;
int
window_height
;
bool
resize_popup_menu
;
int
auto_save_replay
;
int
draw_single_chain
;
int
hide_player_name
;
int
prefer_expansion_script
;
int
ask_mset
;
bool
enable_sound
;
bool
enable_music
;
double
sound_volume
;
double
music_volume
;
int
music_mode
;
int
chkEnablePScale
;
int
skin_index
;
int
chkMAutoPos
{
0
}
;
int
chkSTAutoPos
{
1
}
;
int
chkRandomPos
{
0
}
;
int
chkAutoChain
{
0
}
;
int
chkWaitChain
{
0
}
;
int
chkDefaultShowChain
{
0
}
;
int
chkIgnore1
{
0
}
;
int
chkIgnore2
{
0
}
;
int
use_lflist
{
1
}
;
int
default_lflist
{
0
}
;
int
default_rule
{
YGOPRO_DEFAULT_DUEL_RULE
}
;
int
hide_setname
{
0
}
;
int
hide_hint_button
{
0
}
;
int
control_mode
{
0
}
;
int
draw_field_spell
{
1
}
;
int
separate_clear_button
{
1
}
;
int
auto_search_limit
{
-
1
}
;
int
search_multiple_keywords
{
1
}
;
int
chkIgnoreDeckChanges
{
0
}
;
int
defaultOT
{
1
}
;
int
enable_bot_mode
{
0
}
;
int
quick_animation
{
0
}
;
int
auto_save_replay
{
0
}
;
int
draw_single_chain
{
0
}
;
int
hide_player_name
{
0
}
;
int
prefer_expansion_script
{
0
}
;
bool
enable_sound
{
true
}
;
bool
enable_music
{
true
}
;
double
sound_volume
{
0.5
}
;
double
music_volume
{
0.5
}
;
int
music_mode
{
1
}
;
bool
window_maximized
{
false
}
;
int
window_width
{
1024
}
;
int
window_height
{
640
}
;
bool
resize_popup_menu
{
false
}
;
int
search_regex
{
0
}
;
int
chkEnablePScale
{
1
}
;
int
skin_index
{
-
1
}
;
int
ask_mset
{
0
}
;
};
struct
DuelInfo
{
...
...
@@ -112,13 +132,13 @@ struct DuelInfo {
};
struct
BotInfo
{
wchar_t
name
[
256
];
wchar_t
command
[
256
];
wchar_t
desc
[
256
];
bool
support_master_rule_3
;
bool
support_new_master_rule
;
bool
support_master_rule_2020
;
bool
select_deckfile
;
wchar_t
name
[
256
]
{}
;
wchar_t
command
[
256
]
{}
;
wchar_t
desc
[
256
]
{}
;
bool
support_master_rule_3
{
false
}
;
bool
support_new_master_rule
{
false
}
;
bool
support_master_rule_2020
{
false
}
;
bool
select_deckfile
{
false
}
;
};
struct
FadingUnit
{
...
...
@@ -240,8 +260,8 @@ public:
int
hideChatTimer
;
bool
hideChat
;
int
chatTiming
[
8
];
int
chatType
[
8
];
int
chatTiming
[
8
]
{}
;
int
chatType
[
8
]
{}
;
unsigned
short
linePatternD3D
;
unsigned
short
linePatternGL
;
int
waitFrame
;
...
...
@@ -887,26 +907,6 @@ extern Game* mainGame;
#define AVAIL_SC 0x8
#define AVAIL_OCGTCG (AVAIL_OCG|AVAIL_TCG)
#ifndef YGOPRO_DEFAULT_DUEL_RULE
#define YGOPRO_DEFAULT_DUEL_RULE 5
#endif
#ifndef YGOPRO_MAX_DECK
#define YGOPRO_MAX_DECK 60
#endif
#ifndef YGOPRO_MIN_DECK
#define YGOPRO_MIN_DECK 40
#endif
#ifndef YGOPRO_MAX_EXTRA
#define YGOPRO_MAX_EXTRA 15
#endif
#ifndef YGOPRO_MAX_SIDE
#define YGOPRO_MAX_SIDE 15
#endif
#define CARD_ARTWORK_VERSIONS_OFFSET 10
#define MAX_LAYER_COUNT 6
#endif // GAME_H
gframe/materials.h
View file @
6143a504
...
...
@@ -22,11 +22,11 @@ public:
S3DVertex
vFieldSpell2
[
4
];
//S3DVertex vBackLine[76];
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
vFieldRemove
[
2
][
2
][
4
];
S3DVertex
vFieldMzone
[
2
][
7
][
4
];
S3DVertex
vFieldSzone
[
2
][
8
][
2
][
4
];
S3DVertex
vFieldRemove
[
2
][
2
][
4
];
//[player][rule]
S3DVertex
vFieldMzone
[
2
][
7
][
4
];
//[player][sequence]
S3DVertex
vFieldSzone
[
2
][
8
][
2
][
4
];
//[player][sequence][rule]
irr
::
core
::
vector3df
vFieldContiAct
[
4
];
S3DVertex
vArrow
[
40
];
SColor
c2d
[
4
];
...
...
gframe/menu_handler.cpp
View file @
6143a504
...
...
@@ -298,11 +298,17 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
for
(
int
i
=
0
;
i
<
max
;
++
i
)
{
int
main
=
replay
.
ReadInt32
();
Deck
tmp_deck
;
for
(
int
j
=
0
;
j
<
main
;
++
j
)
tmp_deck
.
main
.
push_back
(
dataManager
.
GetCodePointer
(
replay
.
ReadInt32
()));
for
(
int
j
=
0
;
j
<
main
;
++
j
)
{
auto
card
=
dataManager
.
GetCodePointer
(
replay
.
ReadInt32
());
if
(
card
!=
dataManager
.
datas_end
)
tmp_deck
.
main
.
push_back
(
card
);
}
int
extra
=
replay
.
ReadInt32
();
for
(
int
j
=
0
;
j
<
extra
;
++
j
)
tmp_deck
.
extra
.
push_back
(
dataManager
.
GetCodePointer
(
replay
.
ReadInt32
()));
for
(
int
j
=
0
;
j
<
extra
;
++
j
)
{
auto
card
=
dataManager
.
GetCodePointer
(
replay
.
ReadInt32
());
if
(
card
!=
dataManager
.
datas_end
)
tmp_deck
.
extra
.
push_back
(
card
);
}
FileSystem
::
SafeFileName
(
namebuf
[
i
]);
myswprintf
(
filename
,
L"deck/%ls-%d %ls.ydk"
,
ex_filename
,
i
+
1
,
namebuf
[
i
]);
deckManager
.
SaveDeck
(
tmp_deck
,
filename
);
...
...
gframe/network.h
View file @
6143a504
...
...
@@ -12,16 +12,16 @@
namespace
ygo
{
struct
HostInfo
{
unsigned
int
lflist
;
unsigned
char
rule
;
unsigned
char
mode
;
unsigned
char
duel_rule
;
bool
no_check_deck
;
bool
no_shuffle_deck
;
unsigned
int
start_lp
;
unsigned
char
start_hand
;
unsigned
char
draw_count
;
unsigned
short
time_limit
;
unsigned
int
lflist
{
0
}
;
unsigned
char
rule
{
0
}
;
unsigned
char
mode
{
0
}
;
unsigned
char
duel_rule
{
0
}
;
bool
no_check_deck
{
false
}
;
bool
no_shuffle_deck
{
false
}
;
unsigned
int
start_lp
{
0
}
;
unsigned
char
start_hand
{
0
}
;
unsigned
char
draw_count
{
0
}
;
unsigned
short
time_limit
{
0
}
;
};
struct
HostPacket
{
unsigned
short
identifier
;
...
...
@@ -99,22 +99,16 @@ struct STOC_HS_WatchChange {
class
DuelMode
;
struct
DuelPlayer
{
unsigned
short
name
[
20
];
DuelMode
*
game
;
unsigned
char
type
;
unsigned
char
state
;
bufferevent
*
bev
;
DuelPlayer
()
{
game
=
0
;
type
=
0
;
state
=
0
;
bev
=
0
;
}
unsigned
short
name
[
20
]{};
DuelMode
*
game
{
nullptr
};
unsigned
char
type
{
0
};
unsigned
char
state
{
0
};
bufferevent
*
bev
{
0
};
};
class
DuelMode
{
public:
DuelMode
()
:
host_player
(
0
),
pduel
(
0
),
duel_stage
(
0
)
{}
DuelMode
()
:
host_player
(
nullptr
),
pduel
(
0
),
duel_stage
(
0
)
{}
virtual
~
DuelMode
()
{}
virtual
void
Chat
(
DuelPlayer
*
dp
,
void
*
pdata
,
int
len
)
{}
virtual
void
JoinGame
(
DuelPlayer
*
dp
,
void
*
pdata
,
bool
is_creater
)
{}
...
...
gframe/replay_mode.cpp
View file @
6143a504
...
...
@@ -301,7 +301,7 @@ void ReplayMode::Restart(bool refresh) {
std
::
swap
(
mainGame
->
dInfo
.
hostname
,
mainGame
->
dInfo
.
clientname
);
std
::
swap
(
mainGame
->
dInfo
.
hostname_tag
,
mainGame
->
dInfo
.
clientname_tag
);
}
skip_turn
=
0
;
skip_turn
=
0
;
}
void
ReplayMode
::
Undo
()
{
if
(
skip_step
>
0
||
current_step
==
0
)
...
...
lflist.conf
View file @
6143a504
#[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
#forbidden
91869203
0
--アマゾネスの射手
...
...
@@ -139,11 +138,11 @@
33508719
1
--メタモルポット
89399912
1
--嵐征竜-テンペスト
92746535
1
--竜剣士ラスター
P
19613556
1
--大嵐
77103950
1
--壱世壊=ペルレイノ
33782437
1
--一時休戦
61292243
1
--
EMERGENCY
!
01845204
1
--簡易融合
61292243
1
--
EMERGENCY
!
19613556
1
--大嵐
81439173
1
--おろかな埋葬
84211599
1
--金満で謙虚な壺
23701465
1
--原初の種
...
...
@@ -168,8 +167,8 @@
92107604
1
--神碑の泉
27970830
1
--六武の門
02295440
1
--ワン・フォー・ワン
82732705
1
--スキルドレイン
90846359
1
--群雄割拠
82732705
1
--スキルドレイン
35316708
1
--刻の封印
21076084
1
--トリックスター・リンカーネイション
23002292
1
--レッド・リブート
...
...
@@ -184,16 +183,16 @@
35726888
2
--おろかな副葬
67723438
2
--緊急テレポート
35261759
2
--強欲で貪欲な壺
12580477
2
--サンダー・ボルト
04031928
2
--心変わり
12580477
2
--サンダー・ボルト
48130397
2
--超融合
11110587
2
--隣の芝刈り
242
07889
2
--センサー万別
242
24830
2
--墓穴の指名者
55584558
2
--ピュアリィ・デリシャスメモリー
56700100
2
--ピュアリィ・マイフレンド
92714517
2
--ビッグウェルカム・ラビュリンス
24224830
2
--墓穴の指名者
14532163
2
--ライトニング・ストーム
24207889
2
--センサー万別
92714517
2
--ビッグウェルカム・ラビュリンス
!
2024
.
1
TCG
#forbidden
...
...
@@ -213,10 +212,12 @@
93369354
0
--
Fishborg
Blaster
67441435
0
--
Glow
-
Up
Bulb
75732622
0
--
Grinder
Golem
25926710
0
--
Kelbek
the
Ancient
Vanguard
57421866
0
--
Level
Eater
34206604
0
--
Magical
Scientist
31178212
0
--
Majespecter
Unicorn
-
Kirin
21377582
0
--
Master
Peace
,
the
True
Dracoslaying
King
36521307
0
--
Mathmech
Circular
23434538
0
--
Maxx
"C"
96782886
0
--
Mind
Master
07563579
0
--
Performage
Plushfire
...
...
@@ -235,11 +236,10 @@
59537380
0
--
Guardragon
Agarpain
86148577
0
--
Guardragon
Elpy
24094258
0
--
Heavymetalfoes
Electrumite
25926710
0
--
Kelbek
the
Ancient
Vanguard
59934749
0
--
Isolde
,
Two
Tales
of
the
Noble
Knights
39064822
0
--
Knightmare
Goblin
03679218
0
--
Knightmare
Mermaid
85243784
0
--
Linkross
36521307
0
--
Mathmech
Circular
44097050
0
--
Mecha
Phantom
Beast
Auroradon
25725326
0
--
Prank
-
Kids
Meow
-
Meow
-
Mu
70369116
0
--
Predaplant
Verte
Anaconda
...
...
@@ -251,7 +251,6 @@
83152482
0
--
Union
Carrier
03040496
0
--
Chaos
Ruler
,
the
Chaotic
Magical
Dragon
63101919
0
--
Tempest
Magician
59934749
0
--
Isolde
,
Two
Tales
of
the
Noble
Knights
48626373
0
--
Kashtira
Arise
-
Heart
34086406
0
--
Lavalval
Chain
04423206
0
--
M
-
X
-
Saber
Invoker
...
...
@@ -340,12 +339,12 @@
78872731
1
--
Zoodiac
Ratpier
39512984
1
--
Gem
-
Knight
Master
Diamond
73539069
1
--
Striker
Dragon
93896655
1
--
Sunavalon
Dryas
65563871
1
--
Sunvine
Healer
25862681
1
--
Ancient
Fairy
Dragon
65536818
1
--
Denglong
,
First
of
the
Yang
Zing
94677445
1
--
Ib
the
World
Chalice
Justiciar
74586817
1
--
PSY
-
Framelord
Omega
39880350
1
--
Sunavalon
Dryas
65563871
1
--
Sunvine
Healer
90953320
1
--
T
.
G
.
Hyper
Librarian
27552504
1
--
Beatrice
,
Lady
of
the
Eternal
00581014
1
--
Daigusto
Emeral
...
...
@@ -361,7 +360,6 @@
81439173
1
--
Foolish
Burial
27970830
1
--
Gateway
of
the
Six
75500286
1
--
Gold
Sarcophagus
53334471
1
--
Gozen
Match
18144506
1
--
Harpie
'
s
Feather
Duster
66957584
1
--
Infernity
Launcher
01845204
1
--
Instant
Fusion
...
...
@@ -374,22 +372,23 @@
55584558
1
--
Purrely
Delicious
Memory
58577036
1
--
Reasoning
32807846
1
--
Reinforcement
of
the
Army
90846359
1
--
Rivalry
of
Warlords
24940422
1
--
Sekka
'
s
Light
73468603
1
--
Set
Rotation
52340444
1
--
Sky
Striker
Mecha
-
Hornet
Drones
71344451
1
--
Slash
Draw
45986603
1
--
Snatch
Steal
73628505
1
--
Terraforming
24207889
1
--
There
Can
Be
Only
One
53334471
1
--
Gozen
Match
32723153
1
--
Magical
Explosion
03734202
1
--
Naturia
Sacred
Tree
90846359
1
--
Rivalry
of
Warlords
24207889
1
--
There
Can
Be
Only
One
35316708
1
--
Time
Seal
#semi limit
09411399
2
--
Destiny
HERO
-
Malicious
82385847
2
--
Dinowrestler
Pankratops
14532163
2
--
Lightning
Storm
81275020
2
--
Speedroid
Terrortop
14532163
2
--
Lightning
Storm
21347668
2
--
Purrely
Sleepy
Memory
92107604
2
--
Runick
Fountain
63166095
2
--
Sky
Striker
Mobilize
-
Engage
!
...
...
strings.conf
View file @
6143a504
...
...
@@ -318,11 +318,8 @@
!
system
1260
大师规则
!
system
1261
大师规则2
!
system
1262
大师规则3
!
system
1263
新大师规则
!
system
1264
大师规则
2020
!
system
1267
语言(重启后生效)
!
system
1268
盖放怪兽前询问
!
system
1269
数字灵摆图片
!
system
1263
新大师规则(
2017
)
!
system
1264
大师规则(
2020
)
!
system
1270
卡片信息
!
system
1271
消息记录
!
system
1272
清除记录
...
...
@@ -343,7 +340,7 @@
!
system
1287
只有连锁
1
也显示连锁动画
!
system
1288
禁限卡表
!
system
1289
隐藏玩家昵称
!
system
1290
忽略对方发言
!
system
1290
禁用聊天功能
!
system
1291
忽略观战者发言
!
system
1292
忽略时点
!
system
1293
显示时点
...
...
@@ -407,7 +404,6 @@
!
system
1352
主要信息:
!
system
1353
播放起始于回合:
!
system
1354
开局默认显示所有时点
!
system
1355
是否确定盖放[%
ls
]?
!
system
1356
此操作将放弃对当前卡组的修改,是否继续?
!
system
1357
不提示保留对卡组的修改
!
system
1358
键入关键字后自动进行搜索
...
...
@@ -433,10 +429,6 @@
!
system
1382
人机信息:
!
system
1384
电脑锁定出剪刀
!
system
1385
列表为空,可能未安装合适的人机
!
system
1386
使用正则表达式搜索卡片
!
system
1387
卡组代码
!
system
1388
Ctrl
+
A
全选,
Ctrl
+
C
复制,
Ctrl
+
V
粘贴
!
system
1389
卡组代码无效。
!
system
1390
等待行动中...
!
system
1391
等待行动中....
!
system
1392
等待行动中.....
...
...
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