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
f1501466
Commit
f1501466
authored
Dec 31, 2016
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://github.com/Fluorohydride/ygopro
into server
parents
268a5c1a
0e7a5dc8
Changes
22
Show whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
440 additions
and
177 deletions
+440
-177
gframe/client_field.cpp
gframe/client_field.cpp
+26
-24
gframe/client_field.h
gframe/client_field.h
+1
-1
gframe/config.h
gframe/config.h
+2
-0
gframe/data_manager.cpp
gframe/data_manager.cpp
+1
-1
gframe/deck_con.cpp
gframe/deck_con.cpp
+2
-1
gframe/deck_manager.cpp
gframe/deck_manager.cpp
+18
-17
gframe/deck_manager.h
gframe/deck_manager.h
+1
-0
gframe/duelclient.cpp
gframe/duelclient.cpp
+2
-2
gframe/duelclient.h
gframe/duelclient.h
+1
-1
gframe/event_handler.cpp
gframe/event_handler.cpp
+17
-17
gframe/game.cpp
gframe/game.cpp
+12
-12
gframe/game.h
gframe/game.h
+3
-3
gframe/gframe.cpp
gframe/gframe.cpp
+90
-33
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+64
-35
gframe/replay.cpp
gframe/replay.cpp
+15
-6
gframe/replay_mode.cpp
gframe/replay_mode.cpp
+2
-0
gframe/single_mode.cpp
gframe/single_mode.cpp
+12
-4
lflist.conf
lflist.conf
+167
-17
ocgcore
ocgcore
+1
-1
script
script
+1
-1
strings.conf
strings.conf
+1
-0
system.conf
system.conf
+1
-1
No files found.
gframe/client_field.cpp
View file @
f1501466
...
...
@@ -1183,11 +1183,10 @@ bool ClientField::ShowSelectSum(bool panelmode) {
}
bool
ClientField
::
CheckSelectSum
()
{
std
::
set
<
ClientCard
*>
selable
;
std
::
set
<
ClientCard
*>::
iterator
sit
;
for
(
size_t
i
=
0
;
i
<
selectsum_all
.
size
();
++
i
)
{
selectsum_all
[
i
]
->
is_selectable
=
false
;
selectsum_all
[
i
]
->
is_selected
=
false
;
selable
.
insert
(
selectsum_all
[
i
]);
for
(
auto
sit
=
selectsum_all
.
begin
();
sit
!=
selectsum_all
.
end
();
++
sit
)
{
(
*
sit
)
->
is_selectable
=
false
;
(
*
sit
)
->
is_selected
=
false
;
selable
.
insert
(
*
sit
);
}
for
(
size_t
i
=
0
;
i
<
selected_cards
.
size
();
++
i
)
{
if
((
int
)
i
<
must_select_count
)
...
...
@@ -1201,34 +1200,37 @@ bool ClientField::CheckSelectSum() {
if
(
select_mode
==
0
)
{
bool
ret
=
check_sel_sum_s
(
selable
,
0
,
select_sumval
);
selectable_cards
.
clear
();
for
(
sit
=
selectsum_cards
.
begin
();
sit
!=
selectsum_cards
.
end
();
++
sit
)
{
for
(
auto
sit
=
selectsum_cards
.
begin
();
sit
!=
selectsum_cards
.
end
();
++
sit
)
{
(
*
sit
)
->
is_selectable
=
true
;
selectable_cards
.
push_back
(
*
sit
);
}
return
ret
;
}
else
{
int
op1
,
op2
,
mm
=
-
1
,
ms
,
m
,
max
=
0
,
sumc
=
0
,
sums
;
int
mm
=
-
1
,
mx
=
-
1
,
max
=
0
,
sumc
=
0
;
bool
ret
=
false
;
for
(
size_t
i
=
0
;
i
<
selected_cards
.
size
();
++
i
)
{
op1
=
selected_cards
[
i
]
->
opParam
&
0xffff
;
op2
=
selected_cards
[
i
]
->
opParam
>>
16
;
m
=
(
op2
>
0
&&
op1
>
op2
)
?
op2
:
op1
;
max
+=
op2
>
op1
?
op2
:
op1
;
if
(
mm
==
-
1
||
m
<
mm
)
mm
=
m
;
sumc
+=
m
;
for
(
auto
sit
=
selected_cards
.
begin
();
sit
!=
selected_cards
.
end
();
++
sit
)
{
int
op1
=
(
*
sit
)
->
opParam
&
0xffff
;
int
op2
=
(
*
sit
)
->
opParam
>>
16
;
int
opmin
=
(
op2
>
0
&&
op1
>
op2
)
?
op2
:
op1
;
int
opmax
=
op2
>
op1
?
op2
:
op1
;
if
(
mm
==
-
1
||
opmin
<
mm
)
mm
=
opmin
;
if
(
mx
==
-
1
||
opmax
<
mx
)
mx
=
opmax
;
sumc
+=
opmin
;
max
+=
opmax
;
}
if
(
select_sumval
<=
sumc
)
return
true
;
if
(
select_sumval
<=
max
)
if
(
select_sumval
<=
max
&&
select_sumval
>
max
-
mx
)
ret
=
true
;
for
(
sit
=
selable
.
begin
();
sit
!=
selable
.
end
();
++
sit
)
{
op1
=
(
*
sit
)
->
opParam
&
0xffff
;
op2
=
(
*
sit
)
->
opParam
>>
16
;
m
=
op1
;
sums
=
sumc
;
for
(
auto
sit
=
selable
.
begin
();
sit
!=
selable
.
end
();
++
sit
)
{
int
op1
=
(
*
sit
)
->
opParam
&
0xffff
;
int
op2
=
(
*
sit
)
->
opParam
>>
16
;
int
m
=
op1
;
int
sums
=
sumc
;
sums
+=
m
;
ms
=
mm
;
int
ms
=
mm
;
if
(
ms
==
-
1
||
m
<
ms
)
ms
=
m
;
if
(
sums
>=
select_sumval
)
{
...
...
@@ -1259,14 +1261,14 @@ bool ClientField::CheckSelectSum() {
}
}
selectable_cards
.
clear
();
for
(
sit
=
selectsum_cards
.
begin
();
sit
!=
selectsum_cards
.
end
();
++
sit
)
{
for
(
auto
sit
=
selectsum_cards
.
begin
();
sit
!=
selectsum_cards
.
end
();
++
sit
)
{
(
*
sit
)
->
is_selectable
=
true
;
selectable_cards
.
push_back
(
*
sit
);
}
return
ret
;
}
}
bool
ClientField
::
check_min
(
std
::
set
<
ClientCard
*>&
left
,
std
::
set
<
ClientCard
*>::
iterator
index
,
int
min
,
int
max
)
{
bool
ClientField
::
check_min
(
const
std
::
set
<
ClientCard
*>&
left
,
std
::
set
<
ClientCard
*>::
const_
iterator
index
,
int
min
,
int
max
)
{
if
(
index
==
left
.
end
())
return
false
;
int
op1
=
(
*
index
)
->
opParam
&
0xffff
;
...
...
gframe/client_field.h
View file @
f1501466
...
...
@@ -103,7 +103,7 @@ public:
void FadeCard(ClientCard* pcard, int alpha, int frame);
bool ShowSelectSum(bool panelmode);
bool CheckSelectSum();
bool check_min(
std::set<ClientCard*>& left, std::set<ClientCard*>::
iterator index, int min, int max);
bool check_min(
const std::set<ClientCard*>& left, std::set<ClientCard*>::const_
iterator index, int min, int max);
bool check_sel_sum_s(const std::set<ClientCard*>& left, int index, int acc);
void check_sel_sum_t(const std::set<ClientCard*>& left, int acc);
bool check_sum(std::set<ClientCard*>::const_iterator index, std::set<ClientCard*>::const_iterator end, int acc, int count);
...
...
gframe/config.h
View file @
f1501466
...
...
@@ -81,5 +81,7 @@ using namespace gui;
extern
const
unsigned
short
PRO_VERSION
;
extern
int
enable_log
;
extern
bool
exit_on_return
;
extern
bool
open_file
;
extern
wchar_t
open_file_name
[
256
];
#endif
gframe/data_manager.cpp
View file @
f1501466
...
...
@@ -9,7 +9,7 @@ DataManager dataManager;
bool
DataManager
::
LoadDB
(
const
char
*
file
)
{
sqlite3
*
pDB
;
if
(
sqlite3_open
(
file
,
&
pDB
)
!=
SQLITE_OK
)
if
(
sqlite3_open
_v2
(
file
,
&
pDB
,
SQLITE_OPEN_READONLY
,
0
)
!=
SQLITE_OK
)
return
Error
(
pDB
);
sqlite3_stmt
*
pStmt
;
const
char
*
sql
=
"select * from datas"
;
...
...
gframe/deck_con.cpp
View file @
f1501466
...
...
@@ -88,7 +88,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break
;
}
case
BUTTON_SAVE_DECK
:
{
if
(
deckManager
.
SaveDeck
(
deckManager
.
current_deck
,
mainGame
->
cbDBDecks
->
getItem
(
mainGame
->
cbDBDecks
->
getSelected
())))
{
int
sel
=
mainGame
->
cbDBDecks
->
getSelected
();
if
(
sel
>-
1
&&
deckManager
.
SaveDeck
(
deckManager
.
current_deck
,
mainGame
->
cbDBDecks
->
getItem
(
sel
)))
{
mainGame
->
stACMessage
->
setText
(
dataManager
.
GetSysString
(
1335
));
mainGame
->
PopupElement
(
mainGame
->
wACMessage
,
20
);
}
...
...
gframe/deck_manager.cpp
View file @
f1501466
...
...
@@ -168,21 +168,28 @@ bool DeckManager::LoadSide(Deck& deck, int* dbuf, int mainc, int sidec) {
deck
=
ndeck
;
return
true
;
}
bool
DeckManager
::
LoadDeck
(
const
wchar_t
*
file
)
{
int
sp
=
0
,
ct
=
0
,
mainc
=
0
,
sidec
=
0
,
code
;
wchar_t
deck
[
64
];
myswprintf
(
deck
,
L"./deck/%ls.ydk"
,
file
);
int
cardlist
[
128
];
bool
is_side
=
false
;
FILE
*
DeckManager
::
OpenDeckFile
(
const
wchar_t
*
file
,
const
char
*
mode
)
{
#ifdef WIN32
FILE
*
fp
=
_wfopen
(
deck
,
L"r"
);
FILE
*
fp
=
_wfopen
(
file
,
(
wchar_t
*
)
mode
);
#else
char
deckfn
[
256
];
BufferIO
::
EncodeUTF8
(
deck
,
deckfn
);
FILE
*
fp
=
fopen
(
deckfn
,
"r"
);
char
file2
[
256
];
BufferIO
::
EncodeUTF8
(
file
,
file2
);
FILE
*
fp
=
fopen
(
file2
,
mode
);
#endif
return
fp
;
}
bool
DeckManager
::
LoadDeck
(
const
wchar_t
*
file
)
{
int
sp
=
0
,
ct
=
0
,
mainc
=
0
,
sidec
=
0
,
code
;
wchar_t
localfile
[
64
];
myswprintf
(
localfile
,
L"./deck/%ls.ydk"
,
file
);
FILE
*
fp
=
OpenDeckFile
(
localfile
,
"r"
);
if
(
!
fp
)
{
fp
=
OpenDeckFile
(
file
,
"r"
);
}
if
(
!
fp
)
return
false
;
int
cardlist
[
128
];
bool
is_side
=
false
;
char
linebuf
[
256
];
fseek
(
fp
,
0
,
SEEK_END
);
int
fsize
=
ftell
(
fp
);
...
...
@@ -211,13 +218,7 @@ bool DeckManager::LoadDeck(const wchar_t* file) {
bool
DeckManager
::
SaveDeck
(
Deck
&
deck
,
const
wchar_t
*
name
)
{
wchar_t
file
[
64
];
myswprintf
(
file
,
L"./deck/%ls.ydk"
,
name
);
#ifdef WIN32
FILE
*
fp
=
_wfopen
(
file
,
L"w"
);
#else
char
filefn
[
256
];
BufferIO
::
EncodeUTF8
(
file
,
filefn
);
FILE
*
fp
=
fopen
(
filefn
,
"w"
);
#endif
FILE
*
fp
=
OpenDeckFile
(
file
,
"w"
);
if
(
!
fp
)
return
false
;
fprintf
(
fp
,
"#created by ...
\n
#main
\n
"
);
...
...
gframe/deck_manager.h
View file @
f1501466
...
...
@@ -40,6 +40,7 @@ public:
int
CheckLFList
(
Deck
&
deck
,
int
lfhash
,
bool
allow_ocg
,
bool
allow_tcg
);
void
LoadDeck
(
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
);
bool
LoadDeck
(
const
wchar_t
*
file
);
bool
SaveDeck
(
Deck
&
deck
,
const
wchar_t
*
name
);
bool
DeleteDeck
(
Deck
&
deck
,
const
wchar_t
*
name
);
...
...
gframe/duelclient.cpp
View file @
f1501466
...
...
@@ -944,7 +944,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
desc
=
BufferIO
::
ReadInt32
(
pbuf
);
pcard
=
mainGame
->
dField
.
GetCard
(
con
,
loc
,
seq
);
mainGame
->
dField
.
activatable_cards
.
push_back
(
pcard
);
mainGame
->
dField
.
activatable_descs
.
push_back
(
std
::
make_pair
(
desc
,
0
));
mainGame
->
dField
.
activatable_descs
.
push_back
(
std
::
make_pair
(
desc
,
0
));
pcard
->
cmdFlag
|=
COMMAND_ACTIVATE
;
if
(
pcard
->
location
==
LOCATION_GRAVE
)
mainGame
->
dField
.
grave_act
=
true
;
...
...
@@ -3275,7 +3275,7 @@ void DuelClient::SetResponseI(int respI) {
*
((
int
*
)
response_buf
)
=
respI
;
response_len
=
4
;
}
void
DuelClient
::
SetResponseB
(
unsigned
char
*
respB
,
unsigned
char
len
)
{
void
DuelClient
::
SetResponseB
(
void
*
respB
,
unsigned
char
len
)
{
memcpy
(
response_buf
,
respB
,
len
);
response_len
=
len
;
}
...
...
gframe/duelclient.h
View file @
f1501466
...
...
@@ -42,7 +42,7 @@ public:
static
void
HandleSTOCPacketLan
(
char
*
data
,
unsigned
int
len
);
static
int
ClientAnalyze
(
char
*
msg
,
unsigned
int
len
);
static
void
SetResponseI
(
int
respI
);
static
void
SetResponseB
(
unsigned
char
*
respB
,
unsigned
char
len
);
static
void
SetResponseB
(
void
*
respB
,
unsigned
char
len
);
static
void
SendResponse
();
static
void
SendPacketToServer
(
unsigned
char
proto
)
{
char
*
p
=
duel_client_write
;
...
...
gframe/event_handler.cpp
View file @
f1501466
...
...
@@ -386,19 +386,17 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case
BUTTON_OPTION_OK
:
{
if
(
mainGame
->
dInfo
.
curMsg
==
MSG_SELECT_OPTION
)
{
DuelClient
::
SetResponseI
(
selected_option
);
}
else
if
(
mainGame
->
dInfo
.
curMsg
==
MSG_SELECT_IDLECMD
)
{
}
else
{
int
index
=
0
;
while
(
activatable_cards
[
index
]
!=
command_card
||
activatable_descs
[
index
].
first
!=
select_options
[
selected_option
])
index
++
;
if
(
mainGame
->
dInfo
.
curMsg
==
MSG_SELECT_IDLECMD
)
{
DuelClient
::
SetResponseI
((
index
<<
16
)
+
5
);
}
else
if
(
mainGame
->
dInfo
.
curMsg
==
MSG_SELECT_BATTLECMD
)
{
int
index
=
0
;
while
(
activatable_cards
[
index
]
!=
command_card
||
activatable_descs
[
index
].
first
!=
select_options
[
selected_option
])
index
++
;
DuelClient
::
SetResponseI
(
index
<<
16
);
}
else
{
int
index
=
0
;
while
(
activatable_cards
[
index
]
!=
command_card
||
activatable_descs
[
index
].
first
!=
select_options
[
selected_option
])
index
++
;
DuelClient
::
SetResponseI
(
index
);
}
}
mainGame
->
HideElement
(
mainGame
->
wOptions
,
true
);
break
;
}
...
...
@@ -487,7 +485,10 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
break
;
}
case
POSITION_HINT
:
{
selectable_cards
.
insert
(
selectable_cards
.
end
(),
conti_cards
.
begin
(),
conti_cards
.
end
());
selectable_cards
=
conti_cards
;
std
::
sort
(
selectable_cards
.
begin
(),
selectable_cards
.
end
());
auto
eit
=
std
::
unique
(
selectable_cards
.
begin
(),
selectable_cards
.
end
());
selectable_cards
.
erase
(
eit
,
selectable_cards
.
end
());
conti_selecting
=
true
;
break
;
}
...
...
@@ -1326,7 +1327,6 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
int
command_flag
=
0
;
if
(
conti_cards
.
size
()
==
0
)
break
;
if
(
conti_cards
.
size
())
command_flag
|=
COMMAND_OPERATION
;
list_command
=
1
;
ShowMenu
(
command_flag
,
x
,
y
);
...
...
@@ -1453,12 +1453,12 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
clicked_card
->
is_selectable
=
false
;
select_counter_count
--
;
if
(
select_counter_count
==
0
)
{
unsigned
char
respbuf
[
64
];
unsigned
short
int
respbuf
[
32
];
for
(
size_t
i
=
0
;
i
<
selectable_cards
.
size
();
++
i
)
respbuf
[
i
]
=
(
selectable_cards
[
i
]
->
opParam
>>
16
)
-
(
selectable_cards
[
i
]
->
opParam
&
0xffff
);
mainGame
->
stHintMsg
->
setVisible
(
false
);
ClearSelect
();
DuelClient
::
SetResponseB
(
respbuf
,
selectable_cards
.
size
());
DuelClient
::
SetResponseB
(
respbuf
,
selectable_cards
.
size
()
*
2
);
DuelClient
::
SendResponse
();
}
else
{
wchar_t
formatBuffer
[
2048
];
...
...
@@ -1860,7 +1860,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case
irr
:
:
EET_KEY_INPUT_EVENT
:
{
switch
(
event
.
KeyInput
.
Key
)
{
case
irr
:
:
KEY_KEY_A
:
{
if
(
mainGame
->
gameConf
.
control_mode
==
0
)
{
if
(
mainGame
->
gameConf
.
control_mode
==
0
&&
!
mainGame
->
HasFocus
(
EGUIET_EDIT_BOX
)
)
{
mainGame
->
always_chain
=
event
.
KeyInput
.
PressedDown
;
mainGame
->
ignore_chain
=
false
;
mainGame
->
chain_when_avail
=
false
;
...
...
@@ -1869,7 +1869,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
break
;
}
case
irr
:
:
KEY_KEY_S
:
{
if
(
mainGame
->
gameConf
.
control_mode
==
0
)
{
if
(
mainGame
->
gameConf
.
control_mode
==
0
&&
!
mainGame
->
HasFocus
(
EGUIET_EDIT_BOX
)
)
{
mainGame
->
ignore_chain
=
event
.
KeyInput
.
PressedDown
;
mainGame
->
always_chain
=
false
;
mainGame
->
chain_when_avail
=
false
;
...
...
@@ -1878,7 +1878,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
break
;
}
case
irr
:
:
KEY_KEY_D
:
{
if
(
mainGame
->
gameConf
.
control_mode
==
0
)
{
if
(
mainGame
->
gameConf
.
control_mode
==
0
&&
!
mainGame
->
HasFocus
(
EGUIET_EDIT_BOX
)
)
{
mainGame
->
chain_when_avail
=
event
.
KeyInput
.
PressedDown
;
mainGame
->
always_chain
=
false
;
mainGame
->
ignore_chain
=
false
;
...
...
gframe/game.cpp
View file @
f1501466
...
...
@@ -20,7 +20,7 @@
#include <unistd.h>
#endif
const
unsigned
short
PRO_VERSION
=
0x133
C
;
const
unsigned
short
PRO_VERSION
=
0x133
D
;
namespace
ygo
{
...
...
@@ -109,11 +109,11 @@ bool Game::Initialize() {
imageManager.SetDevice(device);
if(!imageManager.Initial())
return false;
LoadExpansionDB();
if(!dataManager.LoadDB("cards.cdb"))
return false;
if(!dataManager.LoadStrings("strings.conf"))
return false;
RefreshExpansionDB();
dataManager.LoadStrings("./expansions/strings.conf");
env = device->getGUIEnvironment();
numFont = irr::gui::CGUITTFont::createTTFont(env, gameConf.numfont, 16);
...
...
@@ -154,12 +154,12 @@ bool Game::Initialize() {
lstHostList->setItemHeight(18);
btnLanRefresh = env->addButton(rect<s32>(240, 325, 340, 350), wLanWindow, BUTTON_LAN_REFRESH, dataManager.GetSysString(1217));
env->addStaticText(dataManager.GetSysString(1221), rect<s32>(10, 360, 220, 380), false, false, wLanWindow);
ebJoin
IP = env->addEditBox(gameConf.lastip, rect<s32>(110, 355, 2
50, 380), true, wLanWindow);
ebJoin
IP
->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
ebJoinPort = env->addEditBox(gameConf.lastport, rect<s32>(
260, 355, 3
20, 380), true, wLanWindow);
ebJoin
Host = env->addEditBox(gameConf.lasthost, rect<s32>(110, 355, 3
50, 380), true, wLanWindow);
ebJoin
Host
->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
ebJoinPort = env->addEditBox(gameConf.lastport, rect<s32>(
360, 355, 4
20, 380), true, wLanWindow);
ebJoinPort->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
env->addStaticText(dataManager.GetSysString(1222), rect<s32>(10, 390, 220, 410), false, false, wLanWindow);
ebJoinPass = env->addEditBox(gameConf.roompass, rect<s32>(110, 385,
3
20, 410), true, wLanWindow);
ebJoinPass = env->addEditBox(gameConf.roompass, rect<s32>(110, 385,
4
20, 410), true, wLanWindow);
ebJoinPass->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
btnJoinHost = env->addButton(rect<s32>(460, 355, 570, 380), wLanWindow, BUTTON_JOIN_HOST, dataManager.GetSysString(1223));
btnJoinCancel = env->addButton(rect<s32>(460, 385, 570, 410), wLanWindow, BUTTON_JOIN_CANCEL, dataManager.GetSysString(1212));
...
...
@@ -771,7 +771,7 @@ void Game::SetStaticText(irr::gui::IGUIStaticText* pControl, u32 cWidth, irr::gu
dataManager.strBuffer[pbuffer] = 0;
pControl->setText(dataManager.strBuffer);
}
void Game::
Refresh
ExpansionDB() {
void Game::
Load
ExpansionDB() {
#ifdef _WIN32
char fpath[1000];
WIN32_FIND_DATAW fdataw;
...
...
@@ -922,7 +922,7 @@ void Game::LoadConfig() {
gameConf.lastdeck[0] = 0;
gameConf.numfont[0] = 0;
gameConf.textfont[0] = 0;
gameConf.last
ip
[0] = 0;
gameConf.last
host
[0] = 0;
gameConf.lastport[0] = 0;
gameConf.roompass[0] = 0;
//settings
...
...
@@ -960,9 +960,9 @@ void Game::LoadConfig() {
BufferIO::CopyWStr(wstr, gameConf.numfont, 256);
} else if(!strcmp(strbuf, "serverport")) {
gameConf.serverport = atoi(valbuf);
} else if(!strcmp(strbuf, "last
ip
")) {
} else if(!strcmp(strbuf, "last
host
")) {
BufferIO::DecodeUTF8(valbuf, wstr);
BufferIO::CopyWStr(wstr, gameConf.last
ip
, 20);
BufferIO::CopyWStr(wstr, gameConf.last
host
, 20);
} else if(!strcmp(strbuf, "lastport")) {
BufferIO::DecodeUTF8(valbuf, wstr);
BufferIO::CopyWStr(wstr, gameConf.lastport, 20);
...
...
@@ -1027,8 +1027,8 @@ void Game::SaveConfig() {
BufferIO::EncodeUTF8(gameConf.numfont, linebuf);
fprintf(fp, "numfont = %s\n", linebuf);
fprintf(fp, "serverport = %d\n", gameConf.serverport);
BufferIO::EncodeUTF8(gameConf.last
ip
, linebuf);
fprintf(fp, "last
ip
= %s\n", linebuf);
BufferIO::EncodeUTF8(gameConf.last
host
, linebuf);
fprintf(fp, "last
host
= %s\n", linebuf);
BufferIO::EncodeUTF8(gameConf.lastport, linebuf);
fprintf(fp, "lastport = %s\n", linebuf);
//settings
...
...
gframe/game.h
View file @
f1501466
...
...
@@ -16,7 +16,7 @@ struct Config {
unsigned
short
antialias
;
unsigned
short
serverport
;
unsigned
char
textfontsize
;
wchar_t
last
ip
[
2
0
];
wchar_t
last
host
[
10
0
];
wchar_t
lastport
[
10
];
wchar_t
nickname
[
20
];
wchar_t
gamename
[
20
];
...
...
@@ -84,7 +84,7 @@ public:
void BuildProjectionMatrix(irr::core::matrix4& mProjection, f32 left, f32 right, f32 bottom, f32 top, f32 znear, f32 zfar);
void InitStaticText(irr::gui::IGUIStaticText* pControl, u32 cWidth, u32 cHeight, irr::gui::CGUITTFont* font, const wchar_t* text);
void SetStaticText(irr::gui::IGUIStaticText* pControl, u32 cWidth, irr::gui::CGUITTFont* font, const wchar_t* text, u32 pos = 0);
void
Refresh
ExpansionDB();
void
Load
ExpansionDB();
void RefreshDeck(irr::gui::IGUIComboBox* cbDeck);
void RefreshReplay();
void RefreshSingleplay();
...
...
@@ -223,7 +223,7 @@ public:
irr::gui::IGUIEditBox* ebNickName;
irr::gui::IGUIListBox* lstHostList;
irr::gui::IGUIButton* btnLanRefresh;
irr::gui::IGUIEditBox* ebJoin
IP
;
irr::gui::IGUIEditBox* ebJoin
Host
;
irr::gui::IGUIEditBox* ebJoinPort;
irr::gui::IGUIEditBox* ebJoinPass;
irr::gui::IGUIButton* btnJoinHost;
...
...
gframe/gframe.cpp
View file @
f1501466
...
...
@@ -6,7 +6,34 @@
int
enable_log
=
1
;
bool
exit_on_return
=
false
;
bool
runasserver
=
true
;
bool
open_file
=
false
;
wchar_t
open_file_name
[
256
]
=
L""
;
void
GetParameter
(
char
*
param
,
const
char
*
arg
)
{
#ifdef _WIN32
wchar_t
arg1
[
260
];
MultiByteToWideChar
(
CP_ACP
,
0
,
arg
,
-
1
,
arg1
,
260
);
BufferIO
::
EncodeUTF8
(
arg1
,
param
);
#else
strcpy
(
param
,
arg1
);
#endif
}
void
GetParameterW
(
wchar_t
*
param
,
const
char
*
arg
)
{
#ifdef _WIN32
MultiByteToWideChar
(
CP_ACP
,
0
,
arg
,
-
1
,
param
,
260
);
#else
BufferIO
::
DecodeUTF8
(
arg
,
param
);
#endif
}
/*
void ClickButton(irr::gui::IGUIElement* btn) {
irr::SEvent event;
event.EventType = irr::EET_GUI_EVENT;
event.GUIEvent.EventType = irr::gui::EGET_BUTTON_CLICKED;
event.GUIEvent.Caller = btn;
ygo::mainGame->device->postEventFromUser(event);
}
*/
int
main
(
int
argc
,
char
*
argv
[])
{
#ifdef _WIN32
WORD
wVersionRequested
;
...
...
@@ -58,41 +85,71 @@ int main(int argc, char* argv[]) {
for(int i = 1; i < argc; ++i) {
if(argv[i][0] == '-' && argv[i][1] == 'e') {
#ifdef _WIN32
wchar_t fname[260];
MultiByteToWideChar(CP_ACP, 0, &argv[i][2], -1, fname, 260);
char fname2[260];
BufferIO::EncodeUTF8(fname, fname2);
ygo::dataManager.LoadDB(fname2);
#else
ygo::dataManager.LoadDB(&argv[i][2]);
#endif
} else if(!strcmp(argv[i], "-j") || !strcmp(argv[i], "-d") || !strcmp(argv[i], "-r") || !strcmp(argv[i], "-s")) {
char param[128];
GetParameter(param, &argv[i][2]);
ygo::dataManager.LoadDB(param);
}
if(!strcmp(argv[i], "-e")) { // extra database
++i;
char param[128];
GetParameter(param, &argv[i][0]);
ygo::dataManager.LoadDB(param);
continue;
} else if(!strcmp(argv[i], "-n")) { // nickName
++i;
wchar_t param[128];
GetParameterW(param, &argv[i][0]);
ygo::mainGame->ebNickName->setText(param);
continue;
} else if(!strcmp(argv[i], "-h")) { // Host address
++i;
wchar_t param[128];
GetParameterW(param, &argv[i][0]);
ygo::mainGame->ebJoinHost->setText(param);
continue;
} else if(!strcmp(argv[i], "-p")) { // host Port
++i;
wchar_t param[128];
GetParameterW(param, &argv[i][0]);
ygo::mainGame->ebJoinPort->setText(param);
continue;
} else if(!strcmp(argv[i], "-w")) { // host passWord
++i;
wchar_t param[128];
GetParameterW(param, &argv[i][0]);
ygo::mainGame->ebJoinPass->setText(param);
continue;
} else if(!strcmp(argv[i], "-x")) { // eXit on return
exit_on_return = true;
irr::SEvent event;
event.EventType = irr::EET_GUI_EVENT;
event.GUIEvent.EventType = irr::gui::EGET_BUTTON_CLICKED;
if(!strcmp(argv[i], "-j")) {
ygo::mainGame->HideElement(ygo::mainGame->wMainMenu);
event.GUIEvent.Caller = ygo::mainGame->btnJoinHost;
ygo::mainGame->device->postEventFromUser(event);
} else if(!strcmp(argv[i], "-d")) {
event.GUIEvent.Caller = ygo::mainGame->btnDeckEdit;
ygo::mainGame->device->postEventFromUser(event);
} else if(!strcmp(argv[i], "-r")) {
event.GUIEvent.Caller = ygo::mainGame->btnReplayMode;
ygo::mainGame->device->postEventFromUser(event);
ygo::mainGame->lstReplayList->setSelected(0);
event.GUIEvent.Caller = ygo::mainGame->btnLoadReplay;
ygo::mainGame->device->postEventFromUser(event);
} else if(!strcmp(argv[i], "-s")) {
event.GUIEvent.Caller = ygo::mainGame->btnServerMode;
ygo::mainGame->device->postEventFromUser(event);
ygo::mainGame->lstSinglePlayList->setSelected(0);
event.GUIEvent.Caller = ygo::mainGame->btnLoadSinglePlay;
ygo::mainGame->device->postEventFromUser(event);
} else if(!strcmp(argv[i], "-j")) { // Join host
ClickButton(ygo::mainGame->btnLanMode);
ClickButton(ygo::mainGame->btnJoinHost);
break;
} else if(!strcmp(argv[i], "-d")) { // Deck
if(i < argc) {
open_file = true;
GetParameterW(open_file_name, &argv[i + 1][0]);
}
ClickButton(ygo::mainGame->btnDeckEdit);
break;
} else if(!strcmp(argv[i], "-r")) { // Replay
if(i < argc) {
open_file = true;
GetParameterW(open_file_name, &argv[i + 1][0]);
}
ClickButton(ygo::mainGame->btnReplayMode);
if(open_file)
ClickButton(ygo::mainGame->btnLoadReplay);
break;
} else if(!strcmp(argv[i], "-s")) { // Single
if(i < argc) {
open_file = true;
GetParameterW(open_file_name, &argv[i + 1][0]);
}
ClickButton(ygo::mainGame->btnServerMode);
if(open_file)
ClickButton(ygo::mainGame->btnLoadSinglePlay);
break;
}
}
ygo::mainGame->MainLoop();
...
...
gframe/menu_handler.cpp
View file @
f1501466
...
...
@@ -31,38 +31,36 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
break
;
}
case
BUTTON_JOIN_HOST
:
{
#if WINVER >= 0x0600
struct
addrinfo
hints
,
*
servinfo
;
memset
(
&
hints
,
0
,
sizeof
(
struct
addrinfo
));
hints
.
ai_family
=
AF_INET
;
/* Allow IPv4 or IPv6 */
hints
.
ai_socktype
=
SOCK_STREAM
;
/* Datagram socket */
hints
.
ai_flags
=
AI_PASSIVE
;
/* For wildcard IP address */
hints
.
ai_protocol
=
0
;
/* Any protocol */
hints
.
ai_canonname
=
NULL
;
hints
.
ai_addr
=
NULL
;
hints
.
ai_next
=
NULL
;
int
status
;
char
hostname
[
100
];
char
ip
[
20
];
const
wchar_t
*
pstr
=
mainGame
->
ebJoinIP
->
getText
();
BufferIO
::
CopyWStr
(
pstr
,
hostname
,
100
);
if
((
status
=
getaddrinfo
(
hostname
,
NULL
,
&
hints
,
&
servinfo
))
==
-
1
)
{
fprintf
(
stderr
,
"getaddrinfo error: %s
\n
"
,
gai_strerror
(
status
));
//error handling
const
wchar_t
*
pstr
=
mainGame
->
ebJoinHost
->
getText
();
BufferIO
::
CopyWStr
(
pstr
,
ip
,
16
);
}
else
inet_ntop
(
AF_INET
,
&
(((
struct
sockaddr_in
*
)
servinfo
->
ai_addr
)
->
sin_addr
),
ip
,
20
);
freeaddrinfo
(
servinfo
);
#else
unsigned
int
remote_addr
=
htonl
(
inet_addr
(
ip
));
if
(
remote_addr
==
-
1
)
{
char
hostname
[
100
];
char
ip
[
20
];
const
wchar_t
*
pstr
=
mainGame
->
ebJoinIP
->
getText
();
char
port
[
6
];
BufferIO
::
CopyWStr
(
pstr
,
hostname
,
100
);
BufferIO
::
CopyWStr
(
pstr
,
ip
,
16
);
#endif
unsigned
int
remote_addr
=
htonl
(
inet_addr
(
ip
));
BufferIO
::
CopyWStr
(
mainGame
->
ebJoinPort
->
getText
(),
port
,
6
);
struct
evutil_addrinfo
hints
;
struct
evutil_addrinfo
*
answer
=
NULL
;
memset
(
&
hints
,
0
,
sizeof
(
hints
));
hints
.
ai_family
=
AF_INET
;
hints
.
ai_socktype
=
SOCK_STREAM
;
hints
.
ai_protocol
=
IPPROTO_TCP
;
hints
.
ai_flags
=
EVUTIL_AI_ADDRCONFIG
;
int
status
=
evutil_getaddrinfo
(
hostname
,
port
,
&
hints
,
&
answer
);
if
(
status
!=
0
)
{
mainGame
->
gMutex
.
Lock
();
mainGame
->
env
->
addMessageBox
(
L""
,
dataManager
.
GetSysString
(
1412
));
mainGame
->
gMutex
.
Unlock
();
break
;
}
else
{
sockaddr_in
*
sin
=
((
struct
sockaddr_in
*
)
answer
->
ai_addr
);
evutil_inet_ntop
(
AF_INET
,
&
(
sin
->
sin_addr
),
ip
,
20
);
remote_addr
=
htonl
(
inet_addr
(
ip
));
}
}
unsigned
int
remote_port
=
_wtoi
(
mainGame
->
ebJoinPort
->
getText
());
BufferIO
::
CopyWStr
(
pstr
,
mainGame
->
gameConf
.
last
ip
,
2
0
);
BufferIO
::
CopyWStr
(
pstr
,
mainGame
->
gameConf
.
last
host
,
10
0
);
BufferIO
::
CopyWStr
(
mainGame
->
ebJoinPort
->
getText
(),
mainGame
->
gameConf
.
lastport
,
20
);
if
(
DuelClient
::
StartClient
(
remote_addr
,
remote_port
,
false
))
{
mainGame
->
btnCreateHost
->
setEnabled
(
false
);
...
...
@@ -74,6 +72,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
case
BUTTON_JOIN_CANCEL
:
{
mainGame
->
HideElement
(
mainGame
->
wLanWindow
);
mainGame
->
ShowElement
(
mainGame
->
wMainMenu
);
if
(
exit_on_return
)
mainGame
->
device
->
closeDevice
();
break
;
}
case
BUTTON_LAN_REFRESH
:
{
...
...
@@ -160,10 +160,15 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
break
;
}
case
BUTTON_LOAD_REPLAY
:
{
if
(
open_file
)
{
ReplayMode
::
cur_replay
.
OpenReplay
(
open_file_name
);
open_file
=
false
;
}
else
{
if
(
mainGame
->
lstReplayList
->
getSelected
()
==
-
1
)
break
;
if
(
!
ReplayMode
::
cur_replay
.
OpenReplay
(
mainGame
->
lstReplayList
->
getListItem
(
mainGame
->
lstReplayList
->
getSelected
())))
break
;
}
mainGame
->
imgCard
->
setImage
(
imageManager
.
tCover
[
0
]);
mainGame
->
wCardImg
->
setVisible
(
true
);
mainGame
->
wInfos
->
setVisible
(
true
);
...
...
@@ -198,7 +203,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
break
;
}
case
BUTTON_LOAD_SINGLEPLAY
:
{
if
(
mainGame
->
lstSinglePlayList
->
getSelected
()
==
-
1
)
if
(
!
open_file
&&
mainGame
->
lstSinglePlayList
->
getSelected
()
==
-
1
)
break
;
mainGame
->
singleSignal
.
SetNoWait
(
false
);
SingleMode
::
StartPlay
();
...
...
@@ -211,8 +216,32 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
}
case
BUTTON_DECK_EDIT
:
{
mainGame
->
RefreshDeck
(
mainGame
->
cbDBDecks
);
if
(
mainGame
->
cbDBDecks
->
getSelected
()
!=
-
1
)
if
(
open_file
&&
deckManager
.
LoadDeck
(
open_file_name
))
{
#ifdef WIN32
wchar_t
*
dash
=
wcsrchr
(
open_file_name
,
L'\\'
);
#else
wchar_t
*
dash
=
wcsrchr
(
open_file_name
,
L'/'
);
#endif
wchar_t
*
dot
=
wcsrchr
(
open_file_name
,
L'.'
);
if
(
dash
&&
dot
)
{
wchar_t
deck_name
[
256
];
wcsncpy
(
deck_name
,
dash
+
1
,
dot
-
dash
-
1
);
deck_name
[
dot
-
dash
-
1
]
=
L'\0'
;
mainGame
->
ebDeckname
->
setText
(
deck_name
);
mainGame
->
cbDBDecks
->
setSelected
(
-
1
);
}
else
{
for
(
size_t
i
=
0
;
i
<
mainGame
->
cbDBDecks
->
getItemCount
();
++
i
)
{
if
(
!
wcscmp
(
mainGame
->
cbDBDecks
->
getItem
(
i
),
open_file_name
))
{
mainGame
->
cbDBDecks
->
setSelected
(
i
);
break
;
}
}
}
open_file
=
false
;
}
else
if
(
mainGame
->
cbDBDecks
->
getSelected
()
!=
-
1
)
{
deckManager
.
LoadDeck
(
mainGame
->
cbDBDecks
->
getItem
(
mainGame
->
cbDBDecks
->
getSelected
()));
mainGame
->
ebDeckname
->
setText
(
L""
);
}
mainGame
->
HideElement
(
mainGame
->
wMainMenu
);
mainGame
->
is_building
=
true
;
mainGame
->
is_siding
=
false
;
...
...
@@ -266,7 +295,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
int
port
=
DuelClient
::
hosts
[
sel
].
port
;
wchar_t
buf
[
20
];
myswprintf
(
buf
,
L"%d.%d.%d.%d"
,
addr
&
0xff
,
(
addr
>>
8
)
&
0xff
,
(
addr
>>
16
)
&
0xff
,
(
addr
>>
24
)
&
0xff
);
mainGame
->
ebJoin
IP
->
setText
(
buf
);
mainGame
->
ebJoin
Host
->
setText
(
buf
);
myswprintf
(
buf
,
L"%d"
,
port
);
mainGame
->
ebJoinPort
->
setText
(
buf
);
break
;
...
...
gframe/replay.cpp
View file @
f1501466
...
...
@@ -195,6 +195,14 @@ void Replay::SaveReplay(const wchar_t* name) {
fclose
(
fp
);
}
bool
Replay
::
OpenReplay
(
const
wchar_t
*
name
)
{
#ifdef WIN32
fp
=
_wfopen
(
name
,
L"rb"
);
#else
char
name2
[
256
];
BufferIO
::
EncodeUTF8
(
name
,
name2
);
fp
=
fopen
(
name2
,
"rb"
);
#endif
if
(
!
fp
)
{
wchar_t
fname
[
256
];
myswprintf
(
fname
,
L"./replay/%ls"
,
name
);
#ifdef WIN32
...
...
@@ -204,6 +212,7 @@ bool Replay::OpenReplay(const wchar_t* name) {
BufferIO
::
EncodeUTF8
(
fname
,
fname2
);
fp
=
fopen
(
fname2
,
"rb"
);
#endif
}
if
(
!
fp
)
return
false
;
fseek
(
fp
,
0
,
SEEK_END
);
...
...
gframe/replay_mode.cpp
View file @
f1501466
...
...
@@ -185,6 +185,8 @@ int ReplayMode::ReplayThread(void* param) {
mainGame
->
ShowElement
(
mainGame
->
wReplay
);
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
menuHandler
);
mainGame
->
gMutex
.
Unlock
();
if
(
exit_on_return
)
mainGame
->
device
->
closeDevice
();
}
return
0
;
}
...
...
gframe/single_mode.cpp
View file @
f1501466
...
...
@@ -29,11 +29,17 @@ void SingleMode::SetResponse(unsigned char* resp) {
set_responseb
(
pduel
,
resp
);
}
int
SingleMode
::
SinglePlayThread
(
void
*
param
)
{
char
fname2
[
256
];
size_t
slen
;
if
(
open_file
)
{
slen
=
BufferIO
::
EncodeUTF8
(
open_file_name
,
fname2
);
open_file
=
false
;
}
else
{
const
wchar_t
*
name
=
mainGame
->
lstSinglePlayList
->
getListItem
(
mainGame
->
lstSinglePlayList
->
getSelected
());
wchar_t
fname
[
256
];
myswprintf
(
fname
,
L"./single/%ls"
,
name
);
char
fname2
[
256
]
;
size_t
slen
=
BufferIO
::
EncodeUTF8
(
fname
,
fname2
);
slen
=
BufferIO
::
EncodeUTF8
(
fname
,
fname2
)
;
}
mtrandom
rnd
;
time_t
seed
=
time
(
0
);
rnd
.
reset
(
seed
);
...
...
@@ -103,6 +109,8 @@ int SingleMode::SinglePlayThread(void* param) {
mainGame
->
ShowElement
(
mainGame
->
wSinglePlay
);
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
menuHandler
);
mainGame
->
gMutex
.
Unlock
();
if
(
exit_on_return
)
mainGame
->
device
->
closeDevice
();
}
return
0
;
}
...
...
lflist.conf
View file @
f1501466
#[201
6.10][2016.8 TCG
][2016.7][2016.4][2016.1][2015.10][2015.4][2015.1][2014.10][2014.7][2014.4][2014.2][2013.9][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][无]
!
201
6
.
10
#[201
7.1][2016.8 TCG][2016.10
][2016.7][2016.4][2016.1][2015.10][2015.4][2015.1][2014.10][2014.7][2014.4][2014.2][2013.9][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][无]
!
201
7
.
1
#forbidden
20663556
0
--イレカエル
44910027
0
--ヴィクトリー・ドラゴン
...
...
@@ -11,7 +11,6 @@
90411554
0
--巌征竜-レドックス
17412721
0
--旧神ノーデン
78010363
0
--黒き森のウィッチ
07391448
0
--ゴヨウ·ガーディアン
34124316
0
--サイバーポッド
21593977
0
--処刑人-マキュラ
16923472
0
--ゼンマイハンター
...
...
@@ -20,15 +19,14 @@
33184167
0
--同族感染ウィルス
54719828
0
--
No
.
16
色の支配者ショック・ルーラー
26400609
0
--瀑征竜-タイダル
50321796
0
--氷結界の龍 ブリューナク
78706415
0
--ファイバーポッド
93369354
0
--フィッシュボーグ-ガンナー
31178212
0
--マジェスペクター・ユニコーン
34206604
0
--魔導サイエンティスト
96782886
0
--メンタルマスター
03078576
0
--八汰烏
34086406
0
--ラヴァルバル・チェイン
89399912
0
--嵐征竜-テンペスト
14878871
0
--レスキューキャット
57421866
0
--レベル・スティーラー
41482598
0
--悪夢の蜃気楼
44763025
0
--いたずら好きな双子悪魔
...
...
@@ -42,7 +40,6 @@
12580477
0
--サンダー·ボルト
23557835
0
--次元融合
57953380
0
--生還の宝札
87910978
0
--洗脳-ブレインコントロール
60682203
0
--大寒波
69243953
0
--蝶の短剣-エルマ
79571449
0
--天使の施し
...
...
@@ -50,12 +47,10 @@
42703248
0
--ハリケーン
34906152
0
--マスドライバー
46448938
0
--魔導書の神判
77565204
0
--未来融合-フューチャー·フュージョン
46411259
0
--突然変異
85602018
0
--遺言状
27174286
0
--異次元からの帰還
93016201
0
--王宮の弾圧
61740673
0
--王宮の勅命
03280747
0
--第六感
64697231
0
--ダスト·シュート
80604091
0
--血の代償
...
...
@@ -68,14 +63,14 @@
50720316
1
--
E
·
HERO
シャドー·ミスト
40318957
1
--
EM
ドクロバット・ジョーカー
47075569
1
--
EM
ペンデュラム・マジシャン
07391448
1
--ゴヨウ·ガーディアン
74586817
1
--
PSY
フレームロード・Ω
06602300
1
--重爆撃禽 ボム・フェネクス
28985331
1
--終末の騎士
00423585
1
--召喚僧サモンプリースト
78868119
1
--深海のディーヴァ
31560081
1
--聖なる魔術師
81275020
1
--
SR
ベイゴマックス
65192027
1
--ダーク·アームド·ドラゴン
15341821
1
--ダンディライオン
90953320
1
--
TG
ハイパー·ライブラリアン
69015963
1
--デビル・フランケン
16226786
1
--深淵の暗殺者
...
...
@@ -84,7 +79,9 @@
18239909
1
--爆竜剣士イグニスター
P
84764038
1
--彼岸の悪鬼 スカラマリオン
83531441
1
--彼岸の旅人 ダンテ
70583986
1
--氷結界の虎王ドゥローレン
52687916
1
--氷結界の龍 トリシューラ
50321796
1
--氷結界の龍 ブリューナク
33396948
1
--封印されしエクゾディア
07902349
1
--封印されし者の左腕
70903634
1
--封印されし者の右腕
...
...
@@ -92,14 +89,16 @@
08124921
1
--封印されし者の右足
26674724
1
--ブリューナクの影霊衣
10802915
1
--魔界発現世行きデスガイド
31178212
1
--マジェスペクター・ユニコーン
33508719
1
--メタモルポット
90809975
1
--餅カエル
89463537
1
--ユニコールの影霊衣
92746535
1
--竜剣士ラスター
P
14878871
1
--レスキューキャット
88264978
1
--レッドアイズ·ダークネスメタルドラゴン
48976825
1
--異次元からの埋葬
33782437
1
--一時休戦
66957584
1
--インフェルニティガン
57103969
1
--炎舞-「天璣」
81439173
1
--おろかな埋葬
23701465
1
--原初の種
96729612
1
--儀式の準備
...
...
@@ -107,6 +106,7 @@
45305419
1
--継承の印
17639150
1
--機殻の生贄
83764718
1
--死者蘇生
87910978
1
--洗脳-ブレインコントロール
32807846
1
--増援
54447022
1
--ソウル・チャージ
48130397
1
--超融合
...
...
@@ -119,13 +119,16 @@
53208660
1
--ペンデュラム・コール
93600443
1
--マスク・チェンジ・セカンド
15854426
1
--霞の谷の神風
77565204
1
--未来融合-フューチャー·フュージョン
58577036
1
--名推理
66399653
1
--ユニオン格納庫
31222701
1
--揺れる眼差し
23171610
1
--リミッター解除
14733538
1
--竜呼相打つ
62265044
1
--竜の渓谷
02295440
1
--ワン·フォー·ワン
05851097
1
--虚無空間
61740673
1
--王宮の勅命
84749824
1
--神の警告
41420027
1
--神の宣告
36468556
1
--停戦協定
...
...
@@ -134,18 +137,14 @@
#semi limit
85103922
2
--アーティファクト-モラルタ
45222299
2
--イビリチュア·ガストクラーケ
68184115
2
--甲虫装機 ダンセル
74311226
2
--海皇の竜騎隊
72989439
2
--カオス·ソルジャー -開闢の使者-
72714461
2
--慧眼の魔術師
31560081
2
--聖なる魔術師
15341821
2
--ダンディライオン
45206713
2
--
DD
スワラル・スライム
19580308
2
--
DD
ラミア
70583986
2
--氷結界の虎王ドゥローレン
91110378
2
--光天使スローネ
41386308
2
--マスマティシャン
92826944
2
--馬頭鬼
10028593
2
--輪廻天狗
06417578
2
--神の写し身との接触
84171830
2
--真帝王領域
91623717
2
--連鎖爆撃
43040603
2
--モンスターゲート
...
...
@@ -329,6 +328,157 @@
29843091
2
--おジャマトリオ
36468556
2
--停戦協定
!
2016
.
10
#forbidden
20663556
0
--イレカエル
44910027
0
--ヴィクトリー・ドラゴン
20366274
0
--エルシャドール・ネフィリム
53804307
0
--焔征竜-ブラスター
68819554
0
--
Em
ダメージ・ジャグラー
07563579
0
--
Em
ヒグルミ
17330916
0
--
EM
モンキーボード
90411554
0
--巌征竜-レドックス
17412721
0
--旧神ノーデン
78010363
0
--黒き森のウィッチ
07391448
0
--ゴヨウ·ガーディアン
34124316
0
--サイバーポッド
21593977
0
--処刑人-マキュラ
16923472
0
--ゼンマイハンター
56570271
0
--
D
-
HERO
ディスクガイ
18326736
0
--星守の騎士 プトレマイオス
33184167
0
--同族感染ウィルス
54719828
0
--
No
.
16
色の支配者ショック・ルーラー
26400609
0
--瀑征竜-タイダル
50321796
0
--氷結界の龍 ブリューナク
78706415
0
--ファイバーポッド
93369354
0
--フィッシュボーグ-ガンナー
34206604
0
--魔導サイエンティスト
96782886
0
--メンタルマスター
03078576
0
--八汰烏
34086406
0
--ラヴァルバル・チェイン
89399912
0
--嵐征竜-テンペスト
14878871
0
--レスキューキャット
57421866
0
--レベル・スティーラー
41482598
0
--悪夢の蜃気楼
44763025
0
--いたずら好きな双子悪魔
19613556
0
--大嵐
17375316
0
--押収
74191942
0
--苦渋の選択
42829885
0
--強引な番兵
45986603
0
--強奪
55144522
0
--強欲な壺
04031928
0
--心変わり
12580477
0
--サンダー·ボルト
23557835
0
--次元融合
57953380
0
--生還の宝札
87910978
0
--洗脳-ブレインコントロール
60682203
0
--大寒波
69243953
0
--蝶の短剣-エルマ
79571449
0
--天使の施し
70828912
0
--早すぎた埋葬
42703248
0
--ハリケーン
34906152
0
--マスドライバー
46448938
0
--魔導書の神判
77565204
0
--未来融合-フューチャー·フュージョン
46411259
0
--突然変異
85602018
0
--遺言状
27174286
0
--異次元からの帰還
93016201
0
--王宮の弾圧
61740673
0
--王宮の勅命
03280747
0
--第六感
64697231
0
--ダスト·シュート
80604091
0
--血の代償
35316708
0
--刻の封印
17178486
0
--ライフチェンジャー
28566710
0
--ラストバトル!
#limit
64034255
1
--
A
·ジェネクス·バードマン
40044918
1
--
E
·
HERO
エアーマン
50720316
1
--
E
·
HERO
シャドー·ミスト
40318957
1
--
EM
ドクロバット・ジョーカー
47075569
1
--
EM
ペンデュラム・マジシャン
74586817
1
--
PSY
フレームロード・Ω
06602300
1
--重爆撃禽 ボム・フェネクス
28985331
1
--終末の騎士
00423585
1
--召喚僧サモンプリースト
78868119
1
--深海のディーヴァ
31560081
1
--聖なる魔術師
65192027
1
--ダーク·アームド·ドラゴン
15341821
1
--ダンディライオン
90953320
1
--
TG
ハイパー·ライブラリアン
69015963
1
--デビル・フランケン
16226786
1
--深淵の暗殺者
90307777
1
--影霊衣の術士 シュリット
28297833
1
--ネクロフェイス
18239909
1
--爆竜剣士イグニスター
P
84764038
1
--彼岸の悪鬼 スカラマリオン
83531441
1
--彼岸の旅人 ダンテ
52687916
1
--氷結界の龍 トリシューラ
33396948
1
--封印されしエクゾディア
07902349
1
--封印されし者の左腕
70903634
1
--封印されし者の右腕
44519536
1
--封印されし者の左足
08124921
1
--封印されし者の右足
26674724
1
--ブリューナクの影霊衣
10802915
1
--魔界発現世行きデスガイド
31178212
1
--マジェスペクター・ユニコーン
33508719
1
--メタモルポット
89463537
1
--ユニコールの影霊衣
92746535
1
--竜剣士ラスター
P
88264978
1
--レッドアイズ·ダークネスメタルドラゴン
48976825
1
--異次元からの埋葬
33782437
1
--一時休戦
66957584
1
--インフェルニティガン
81439173
1
--おろかな埋葬
23701465
1
--原初の種
96729612
1
--儀式の準備
67723438
1
--緊急テレポート
45305419
1
--継承の印
17639150
1
--機殻の生贄
83764718
1
--死者蘇生
32807846
1
--増援
54447022
1
--ソウル・チャージ
48130397
1
--超融合
72892473
1
--手札抹殺
67169062
1
--貪欲な壺
97211663
1
--影霊衣の反魂術
18144506
1
--ハーピィの羽根帚
22842126
1
--汎神の帝王
53129443
1
--ブラック·ホール
53208660
1
--ペンデュラム・コール
93600443
1
--マスク・チェンジ・セカンド
15854426
1
--霞の谷の神風
58577036
1
--名推理
31222701
1
--揺れる眼差し
23171610
1
--リミッター解除
14733538
1
--竜呼相打つ
62265044
1
--竜の渓谷
02295440
1
--ワン·フォー·ワン
05851097
1
--虚無空間
84749824
1
--神の警告
41420027
1
--神の宣告
36468556
1
--停戦協定
83555666
1
--破壊輪
32723153
1
--マジカル·エクスプロージョン
#semi limit
85103922
2
--アーティファクト-モラルタ
45222299
2
--イビリチュア·ガストクラーケ
68184115
2
--甲虫装機 ダンセル
74311226
2
--海皇の竜騎隊
72989439
2
--カオス·ソルジャー -開闢の使者-
72714461
2
--慧眼の魔術師
45206713
2
--
DD
スワラル・スライム
19580308
2
--
DD
ラミア
70583986
2
--氷結界の虎王ドゥローレン
91110378
2
--光天使スローネ
41386308
2
--マスマティシャン
92826944
2
--馬頭鬼
10028593
2
--輪廻天狗
06417578
2
--神の写し身との接触
84171830
2
--真帝王領域
91623717
2
--連鎖爆撃
43040603
2
--モンスターゲート
!
2016
.
7
#forbidden
20663556
0
--イレカエル
...
...
ocgcore
@
d9661fca
Subproject commit
43ef40d604e457656207a3621e03b3275a895484
Subproject commit
d9661fcaa0a839786d17c9262bce636b82a7f126
script
@
fc34bc5c
Subproject commit
e4dd89044a9068a2dfe521ecc2a262bd1d18176f
Subproject commit
fc34bc5cf0b20f7e4f753f7b5afa3c28de30a3bb
strings.conf
View file @
f1501466
...
...
@@ -363,6 +363,7 @@
!
system
1409
等待更换副卡组中...
!
system
1410
卡组数量与先前不符合。
!
system
1411
版本不匹配(%
X
.
0
%
X
.%
X
)。
!
system
1412
无法解析主机地址。
!
system
1500
决斗结束。
!
system
1501
录像结束。
!
system
1502
连接已断开。
...
...
system.conf
View file @
f1501466
...
...
@@ -9,7 +9,7 @@ lastdeck = new
textfont
=
c
:/
windows
/
fonts
/
simsun
.
ttc
14
numfont
=
c
:/
windows
/
fonts
/
arialbd
.
ttf
serverport
=
7911
last
ip
=
127
.
0
.
0
.
1
last
host
=
127
.
0
.
0
.
1
lastport
=
7911
autopos
=
1
randompos
=
0
...
...
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