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
d7b24732
Commit
d7b24732
authored
Aug 14, 2024
by
wind2009
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'server' into server-develop
parents
47f42d67
5a4fb607
Changes
29
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
301 additions
and
453 deletions
+301
-453
cards.cdb
cards.cdb
+0
-0
gframe/client_card.cpp
gframe/client_card.cpp
+4
-4
gframe/client_card.h
gframe/client_card.h
+1
-1
gframe/config.h
gframe/config.h
+6
-27
gframe/data_manager.cpp
gframe/data_manager.cpp
+5
-5
gframe/deck_con.cpp
gframe/deck_con.cpp
+15
-14
gframe/deck_manager.cpp
gframe/deck_manager.cpp
+109
-74
gframe/deck_manager.h
gframe/deck_manager.h
+4
-5
gframe/drawing.cpp
gframe/drawing.cpp
+7
-7
gframe/duelclient.cpp
gframe/duelclient.cpp
+11
-10
gframe/event_handler.cpp
gframe/event_handler.cpp
+2
-3
gframe/game.cpp
gframe/game.cpp
+57
-54
gframe/game.h
gframe/game.h
+13
-0
gframe/gframe.cpp
gframe/gframe.cpp
+1
-1
gframe/image_manager.cpp
gframe/image_manager.cpp
+1
-0
gframe/image_manager.h
gframe/image_manager.h
+1
-0
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+31
-30
gframe/netserver.cpp
gframe/netserver.cpp
+1
-0
gframe/network.h
gframe/network.h
+1
-1
gframe/replay.cpp
gframe/replay.cpp
+1
-0
gframe/replay_mode.cpp
gframe/replay_mode.cpp
+1
-1
gframe/single_duel.cpp
gframe/single_duel.cpp
+1
-1
gframe/single_mode.cpp
gframe/single_mode.cpp
+1
-0
gframe/sound_manager.cpp
gframe/sound_manager.cpp
+1
-0
gframe/tag_duel.cpp
gframe/tag_duel.cpp
+1
-1
lflist.conf
lflist.conf
+12
-212
ocgcore
ocgcore
+1
-1
script
script
+1
-1
strings.conf
strings.conf
+11
-0
No files found.
cards.cdb
View file @
d7b24732
No preview for this file type
gframe/client_card.cpp
View file @
d7b24732
...
...
@@ -32,12 +32,12 @@ ClientCard::~ClientCard() {
}
overlayed
.
clear
();
}
void
ClientCard
::
SetCode
(
int
code
)
{
if
((
location
==
LOCATION_HAND
)
&&
(
this
->
code
!=
(
unsigned
int
)
code
))
{
this
->
code
=
code
;
void
ClientCard
::
SetCode
(
int
x
)
{
if
((
location
==
LOCATION_HAND
)
&&
(
code
!=
(
unsigned
int
)
x
))
{
code
=
x
;
mainGame
->
dField
.
MoveCard
(
this
,
5
);
}
else
this
->
code
=
code
;
code
=
x
;
}
void
ClientCard
::
UpdateInfo
(
unsigned
char
*
buf
)
{
int
flag
=
BufferIO
::
ReadInt32
(
buf
);
...
...
gframe/client_card.h
View file @
d7b24732
...
...
@@ -99,7 +99,7 @@ public:
ClientCard
()
=
default
;
~
ClientCard
();
void
SetCode
(
int
code
);
void
SetCode
(
int
x
);
void
UpdateInfo
(
unsigned
char
*
buf
);
void
ClearTarget
();
void
ClearData
();
...
...
gframe/config.h
View file @
d7b24732
#ifndef __CONFIG_H
#define __CONFIG_H
#pragma once
#ifndef YGOPRO_CONFIG_H
#define YGOPRO_CONFIG_H
#define _IRR_STATIC_LIB_
#define IRR_COMPILE_WITH_DX9_DEV_PACK
...
...
@@ -41,46 +39,27 @@
#define SOCKADDR sockaddr
#define SOCKET_ERRNO() (errno)
#include <wchar.h>
#define mywcsncasecmp wcsncasecmp
#define mystrncasecmp strncasecmp
inline
int
_wtoi
(
const
wchar_t
*
s
)
{
wchar_t
*
endptr
;
return
(
int
)
wcstol
(
s
,
&
endptr
,
10
);
}
#endif
#include <string>
template
<
size_t
N
,
typename
...
TR
>
inline
int
myswprintf
(
wchar_t
(
&
buf
)[
N
],
const
wchar_t
*
fmt
,
TR
...
args
)
{
return
swprintf
(
buf
,
N
,
fmt
,
args
...);
}
#ifndef YGOPRO_SERVER_MODE
#include <irrlicht.h>
#ifdef __APPLE__
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#else //__APPLE__
#include <GL/gl.h>
#include <GL/glu.h>
#endif //__APPLE__
#include "CGUITTFont.h"
#include "CGUIImageButton.h"
#endif //YGOPRO_SERVER_MODE
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <thread>
#include <mutex>
#include <wchar.h>
#include <iostream>
#include <algorithm>
#include "bufferio.h"
#include "myfilesystem.h"
#include "mysignal.h"
#include "../ocgcore/ocgapi.h"
#include "../ocgcore/common.h"
#ifndef YGOPRO_SERVER_MODE
#include <irrlicht.h>
using
namespace
irr
;
using
namespace
core
;
using
namespace
scene
;
...
...
gframe/data_manager.cpp
View file @
d7b24732
...
...
@@ -156,7 +156,7 @@ bool DataManager::LoadStrings(IReadFile* reader) {
while
(
reader
->
read
(
&
ch
[
0
],
1
))
{
if
(
ch
[
0
]
==
'\0'
)
break
;
strcat
(
linebuf
,
ch
);
st
d
::
st
rcat
(
linebuf
,
ch
);
if
(
ch
[
0
]
==
'\n'
)
{
ReadStringConfLine
(
linebuf
);
linebuf
[
0
]
=
'\0'
;
...
...
@@ -174,22 +174,22 @@ void DataManager::ReadStringConfLine(const char* linebuf) {
wchar_t
strBuffer
[
4096
]{};
if
(
sscanf
(
linebuf
,
"!%63s"
,
strbuf
)
!=
1
)
return
;
if
(
!
strcmp
(
strbuf
,
"system"
))
{
if
(
!
st
d
::
st
rcmp
(
strbuf
,
"system"
))
{
if
(
sscanf
(
&
linebuf
[
7
],
"%d %240[^
\n
]"
,
&
value
,
strbuf
)
!=
2
)
return
;
BufferIO
::
DecodeUTF8
(
strbuf
,
strBuffer
);
_sysStrings
[
value
]
=
strBuffer
;
}
else
if
(
!
strcmp
(
strbuf
,
"victory"
))
{
}
else
if
(
!
st
d
::
st
rcmp
(
strbuf
,
"victory"
))
{
if
(
sscanf
(
&
linebuf
[
8
],
"%x %240[^
\n
]"
,
&
value
,
strbuf
)
!=
2
)
return
;
BufferIO
::
DecodeUTF8
(
strbuf
,
strBuffer
);
_victoryStrings
[
value
]
=
strBuffer
;
}
else
if
(
!
strcmp
(
strbuf
,
"counter"
))
{
}
else
if
(
!
st
d
::
st
rcmp
(
strbuf
,
"counter"
))
{
if
(
sscanf
(
&
linebuf
[
8
],
"%x %240[^
\n
]"
,
&
value
,
strbuf
)
!=
2
)
return
;
BufferIO
::
DecodeUTF8
(
strbuf
,
strBuffer
);
_counterStrings
[
value
]
=
strBuffer
;
}
else
if
(
!
strcmp
(
strbuf
,
"setname"
))
{
}
else
if
(
!
st
d
::
st
rcmp
(
strbuf
,
"setname"
))
{
//using tab for comment
if
(
sscanf
(
&
linebuf
[
8
],
"%x %240[^
\t\n
]"
,
&
value
,
strbuf
)
!=
2
)
return
;
...
...
gframe/deck_con.cpp
View file @
d7b24732
#include "config.h"
#include "deck_con.h"
#include "myfilesystem.h"
#include "data_manager.h"
#include "deck_manager.h"
#include "image_manager.h"
...
...
@@ -461,7 +462,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
}
for
(
int
i
=
0
;
i
<
(
int
)
mainGame
->
lstDecks
->
getItemCount
();
i
++
)
{
if
(
!
mywcsncasecmp
(
mainGame
->
lstDecks
->
getListItem
(
i
),
deckname
,
256
))
{
deckManager
.
LoadDeck
(
filepath
);
deckManager
.
Load
Current
Deck
(
filepath
);
prev_deck
=
i
;
mainGame
->
cbDBDecks
->
setSelected
(
prev_deck
);
mainGame
->
lstDecks
->
setSelected
(
prev_deck
);
...
...
@@ -495,7 +496,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
ChangeCategory
(
catesel
);
for
(
int
i
=
0
;
i
<
(
int
)
mainGame
->
lstDecks
->
getItemCount
();
i
++
)
{
if
(
!
mywcsncasecmp
(
mainGame
->
lstDecks
->
getListItem
(
i
),
newdeckname
,
256
))
{
deckManager
.
LoadDeck
(
newfilepath
);
deckManager
.
Load
Current
Deck
(
newfilepath
);
prev_deck
=
i
;
mainGame
->
cbDBDecks
->
setSelected
(
prev_deck
);
mainGame
->
lstDecks
->
setSelected
(
prev_deck
);
...
...
@@ -522,7 +523,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if
(
decksel
!=
-
1
)
{
mainGame
->
lstDecks
->
setSelected
(
decksel
);
mainGame
->
cbDBDecks
->
setSelected
(
decksel
);
deckManager
.
LoadDeck
(
mainGame
->
cbDBCategory
,
mainGame
->
cbDBDecks
);
deckManager
.
Load
Current
Deck
(
mainGame
->
cbDBCategory
,
mainGame
->
cbDBDecks
);
}
RefreshReadonly
(
prev_category
);
prev_deck
=
decksel
;
...
...
@@ -559,7 +560,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
ChangeCategory
(
catesel
);
for
(
int
i
=
0
;
i
<
(
int
)
mainGame
->
lstDecks
->
getItemCount
();
i
++
)
{
if
(
!
mywcsncasecmp
(
mainGame
->
lstDecks
->
getListItem
(
i
),
deckname
,
256
))
{
deckManager
.
LoadDeck
(
newfilepath
);
deckManager
.
Load
Current
Deck
(
newfilepath
);
prev_deck
=
i
;
mainGame
->
cbDBDecks
->
setSelected
(
prev_deck
);
mainGame
->
lstDecks
->
setSelected
(
prev_deck
);
...
...
@@ -597,7 +598,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
ChangeCategory
(
catesel
);
for
(
int
i
=
0
;
i
<
(
int
)
mainGame
->
lstDecks
->
getItemCount
();
i
++
)
{
if
(
!
mywcsncasecmp
(
mainGame
->
lstDecks
->
getListItem
(
i
),
deckname
,
256
))
{
deckManager
.
LoadDeck
(
newfilepath
);
deckManager
.
Load
Current
Deck
(
newfilepath
);
prev_deck
=
i
;
mainGame
->
cbDBDecks
->
setSelected
(
prev_deck
);
mainGame
->
lstDecks
->
setSelected
(
prev_deck
);
...
...
@@ -650,7 +651,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break
;
}
case
BUTTON_SIDE_RELOAD
:
{
deckManager
.
LoadDeck
(
mainGame
->
cbCategorySelect
,
mainGame
->
cbDeckSelect
);
deckManager
.
Load
Current
Deck
(
mainGame
->
cbCategorySelect
,
mainGame
->
cbDeckSelect
);
break
;
}
case
BUTTON_BIG_CARD_ORIG_SIZE
:
{
...
...
@@ -696,7 +697,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
sel
=
count
-
1
;
mainGame
->
cbDBDecks
->
setSelected
(
sel
);
if
(
sel
!=
-
1
)
deckManager
.
LoadDeck
(
mainGame
->
cbDBCategory
,
mainGame
->
cbDBDecks
);
deckManager
.
Load
Current
Deck
(
mainGame
->
cbDBCategory
,
mainGame
->
cbDBDecks
);
mainGame
->
stACMessage
->
setText
(
dataManager
.
GetSysString
(
1338
));
mainGame
->
PopupElement
(
mainGame
->
wACMessage
,
20
);
prev_deck
=
sel
;
...
...
@@ -710,7 +711,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
ChangeCategory
(
catesel
);
}
else
if
(
prev_operation
==
COMBOBOX_DBDECKS
)
{
int
decksel
=
mainGame
->
cbDBDecks
->
getSelected
();
deckManager
.
LoadDeck
(
mainGame
->
cbDBCategory
,
mainGame
->
cbDBDecks
);
deckManager
.
Load
Current
Deck
(
mainGame
->
cbDBCategory
,
mainGame
->
cbDBDecks
);
prev_deck
=
decksel
;
is_modified
=
false
;
}
else
if
(
prev_operation
==
BUTTON_MANAGE_DECK
)
{
...
...
@@ -827,7 +828,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
}
int
decksel
=
mainGame
->
cbDBDecks
->
getSelected
();
if
(
decksel
>=
0
)
{
deckManager
.
LoadDeck
(
mainGame
->
cbDBCategory
,
mainGame
->
cbDBDecks
);
deckManager
.
Load
Current
Deck
(
mainGame
->
cbDBCategory
,
mainGame
->
cbDBDecks
);
}
prev_deck
=
decksel
;
is_modified
=
false
;
...
...
@@ -986,7 +987,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
wchar_t
catepath
[
256
];
deckManager
.
GetCategoryPath
(
catepath
,
mainGame
->
lstCategories
->
getSelected
(),
mainGame
->
lstCategories
->
getListItem
(
mainGame
->
lstCategories
->
getSelected
()));
myswprintf
(
filepath
,
L"%ls/%ls.ydk"
,
catepath
,
mainGame
->
lstDecks
->
getListItem
(
decksel
));
deckManager
.
LoadDeck
(
filepath
,
showing_pack
);
deckManager
.
Load
Current
Deck
(
filepath
,
showing_pack
);
RefreshPackListScroll
();
prev_deck
=
decksel
;
break
;
...
...
@@ -1300,12 +1301,12 @@ void DeckBuilder::GetHoveredCard() {
}
else
if
(
x
>=
810
&&
x
<=
995
&&
y
>=
165
&&
y
<=
626
)
{
hovered_pos
=
4
;
hovered_seq
=
(
y
-
165
)
/
66
;
int
pos
=
mainGame
->
scrFilter
->
getPos
()
+
hovered_seq
;
if
(
pos
>=
(
int
)
results
.
size
())
{
int
current_
pos
=
mainGame
->
scrFilter
->
getPos
()
+
hovered_seq
;
if
(
current_
pos
>=
(
int
)
results
.
size
())
{
hovered_seq
=
-
1
;
hovered_code
=
0
;
}
else
{
hovered_code
=
results
[
pos
]
->
first
;
hovered_code
=
results
[
current_
pos
]
->
first
;
}
}
if
(
is_draging
)
{
...
...
@@ -1633,7 +1634,7 @@ void DeckBuilder::ChangeCategory(int catesel) {
mainGame
->
RefreshDeck
(
mainGame
->
cbDBCategory
,
mainGame
->
cbDBDecks
);
mainGame
->
cbDBDecks
->
setSelected
(
0
);
RefreshReadonly
(
catesel
);
deckManager
.
LoadDeck
(
mainGame
->
cbDBCategory
,
mainGame
->
cbDBDecks
);
deckManager
.
Load
Current
Deck
(
mainGame
->
cbDBCategory
,
mainGame
->
cbDBDecks
);
is_modified
=
false
;
prev_category
=
catesel
;
prev_deck
=
0
;
...
...
gframe/deck_manager.cpp
View file @
d7b24732
This diff is collapsed.
Click to expand it.
gframe/deck_manager.h
View file @
d7b24732
...
...
@@ -5,9 +5,7 @@
#include "client_card.h"
#include <unordered_map>
#include <vector>
#ifndef YGOPRO_SERVER_MODE
#include <sstream>
#endif
#ifndef YGOPRO_MAX_DECK
#define YGOPRO_MAX_DECK 60
...
...
@@ -68,20 +66,21 @@ public:
const
std
::
unordered_map
<
int
,
int
>*
GetLFListContent
(
int
lfhash
);
int
CheckDeck
(
Deck
&
deck
,
int
lfhash
,
int
rule
);
int
LoadDeck
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
,
bool
is_packlist
=
false
);
int
LoadDeck
(
Deck
&
deck
,
std
::
istringstream
&
deckStream
,
bool
is_packlist
=
false
);
bool
LoadSide
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
);
#ifndef YGOPRO_SERVER_MODE
void
GetCategoryPath
(
wchar_t
*
ret
,
int
index
,
const
wchar_t
*
text
);
void
GetDeckFile
(
wchar_t
*
ret
,
irr
::
gui
::
IGUIComboBox
*
cbCategory
,
irr
::
gui
::
IGUIComboBox
*
cbDeck
);
bool
LoadDeck
(
irr
::
gui
::
IGUIComboBox
*
cbCategory
,
irr
::
gui
::
IGUIComboBox
*
cbDeck
);
FILE
*
OpenDeckFile
(
const
wchar_t
*
file
,
const
char
*
mode
);
IReadFile
*
OpenDeckReader
(
const
wchar_t
*
file
);
bool
LoadDeck
(
const
wchar_t
*
file
,
bool
is_packlist
=
false
);
bool
Load
Deck
(
std
::
istringstream
*
deckStream
,
bool
is_packlist
=
false
);
bool
Load
Current
Deck
(
const
wchar_t
*
file
,
bool
is_packlist
=
false
);
bool
Load
CurrentDeck
(
irr
::
gui
::
IGUIComboBox
*
cbCategory
,
irr
::
gui
::
IGUIComboBox
*
cbDeck
);
bool
SaveDeck
(
Deck
&
deck
,
const
wchar_t
*
file
);
bool
DeleteDeck
(
const
wchar_t
*
file
);
bool
CreateCategory
(
const
wchar_t
*
name
);
bool
RenameCategory
(
const
wchar_t
*
oldname
,
const
wchar_t
*
newname
);
bool
DeleteCategory
(
const
wchar_t
*
name
);
bool
SaveDeckBuffer
(
const
int
deckbuf
[],
const
wchar_t
*
name
);
#endif //YGOPRO_SERVER_MODE
};
...
...
gframe/drawing.cpp
View file @
d7b24732
...
...
@@ -218,7 +218,7 @@ void Game::DrawBackGround() {
}
}
void
Game
::
DrawLinkedZones
(
ClientCard
*
pcard
)
{
int
mark
=
pcard
->
link_marker
;
auto
mark
=
pcard
->
link_marker
;
ClientCard
*
pcard2
;
if
(
dField
.
hovered_sequence
<
5
)
{
if
(
mark
&
LINK_MARKER_LEFT
&&
dField
.
hovered_sequence
>
0
)
{
...
...
@@ -235,25 +235,25 @@ void Game::DrawLinkedZones(ClientCard* pcard) {
if
((
mark
&
LINK_MARKER_TOP_LEFT
&&
dField
.
hovered_sequence
==
2
)
||
(
mark
&
LINK_MARKER_TOP
&&
dField
.
hovered_sequence
==
1
)
||
(
mark
&
LINK_MARKER_TOP_RIGHT
&&
dField
.
hovered_sequence
==
0
))
{
int
mark
=
(
dField
.
hovered_sequence
==
2
)
?
LINK_MARKER_BOTTOM_RIGHT
:
(
dField
.
hovered_sequence
==
1
)
?
LINK_MARKER_BOTTOM
:
LINK_MARKER_BOTTOM_LEFT
;
int
arrow
=
(
dField
.
hovered_sequence
==
2
)
?
LINK_MARKER_BOTTOM_RIGHT
:
(
dField
.
hovered_sequence
==
1
)
?
LINK_MARKER_BOTTOM
:
LINK_MARKER_BOTTOM_LEFT
;
pcard2
=
dField
.
mzone
[
dField
.
hovered_controler
][
5
];
if
(
!
pcard2
)
{
pcard2
=
dField
.
mzone
[
1
-
dField
.
hovered_controler
][
6
];
mark
=
(
dField
.
hovered_sequence
==
2
)
?
LINK_MARKER_TOP_LEFT
:
(
dField
.
hovered_sequence
==
1
)
?
LINK_MARKER_TOP
:
LINK_MARKER_TOP_RIGHT
;
arrow
=
(
dField
.
hovered_sequence
==
2
)
?
LINK_MARKER_TOP_LEFT
:
(
dField
.
hovered_sequence
==
1
)
?
LINK_MARKER_TOP
:
LINK_MARKER_TOP_RIGHT
;
}
CheckMutual
(
pcard2
,
mark
);
CheckMutual
(
pcard2
,
arrow
);
driver
->
drawVertexPrimitiveList
(
&
matManager
.
vFieldMzone
[
dField
.
hovered_controler
][
5
],
4
,
matManager
.
iRectangle
,
2
);
}
if
((
mark
&
LINK_MARKER_TOP_LEFT
&&
dField
.
hovered_sequence
==
4
)
||
(
mark
&
LINK_MARKER_TOP
&&
dField
.
hovered_sequence
==
3
)
||
(
mark
&
LINK_MARKER_TOP_RIGHT
&&
dField
.
hovered_sequence
==
2
))
{
int
mark
=
(
dField
.
hovered_sequence
==
4
)
?
LINK_MARKER_BOTTOM_RIGHT
:
(
dField
.
hovered_sequence
==
3
)
?
LINK_MARKER_BOTTOM
:
LINK_MARKER_BOTTOM_LEFT
;
int
arrow
=
(
dField
.
hovered_sequence
==
4
)
?
LINK_MARKER_BOTTOM_RIGHT
:
(
dField
.
hovered_sequence
==
3
)
?
LINK_MARKER_BOTTOM
:
LINK_MARKER_BOTTOM_LEFT
;
pcard2
=
dField
.
mzone
[
dField
.
hovered_controler
][
6
];
if
(
!
pcard2
)
{
pcard2
=
dField
.
mzone
[
1
-
dField
.
hovered_controler
][
5
];
mark
=
(
dField
.
hovered_sequence
==
4
)
?
LINK_MARKER_TOP_LEFT
:
(
dField
.
hovered_sequence
==
3
)
?
LINK_MARKER_TOP
:
LINK_MARKER_TOP_RIGHT
;
arrow
=
(
dField
.
hovered_sequence
==
4
)
?
LINK_MARKER_TOP_LEFT
:
(
dField
.
hovered_sequence
==
3
)
?
LINK_MARKER_TOP
:
LINK_MARKER_TOP_RIGHT
;
}
CheckMutual
(
pcard2
,
mark
);
CheckMutual
(
pcard2
,
arrow
);
driver
->
drawVertexPrimitiveList
(
&
matManager
.
vFieldMzone
[
dField
.
hovered_controler
][
6
],
4
,
matManager
.
iRectangle
,
2
);
}
}
...
...
gframe/duelclient.cpp
View file @
d7b24732
...
...
@@ -8,6 +8,7 @@
#include "game.h"
#include "replay.h"
#include "replay_mode.h"
#include <thread>
namespace
ygo
{
...
...
@@ -61,8 +62,8 @@ bool DuelClient::StartClient(unsigned int ip, unsigned short port, bool create_g
rnd
.
reset
((
uint_fast32_t
)
std
::
random_device
()());
if
(
!
create_game
)
{
timeval
timeout
=
{
5
,
0
};
event
*
resp
_event
=
event_new
(
client_base
,
0
,
EV_TIMEOUT
,
ConnectTimeout
,
0
);
event_add
(
resp
_event
,
&
timeout
);
event
*
timeout
_event
=
event_new
(
client_base
,
0
,
EV_TIMEOUT
,
ConnectTimeout
,
0
);
event_add
(
timeout
_event
,
&
timeout
);
}
std
::
thread
(
ClientThread
).
detach
();
return
true
;
...
...
@@ -144,10 +145,10 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) {
BufferIO
::
CopyWStr
(
mainGame
->
ebServerPass
->
getText
(),
cscg
.
pass
,
20
);
cscg
.
info
.
rule
=
mainGame
->
cbRule
->
getSelected
();
cscg
.
info
.
mode
=
mainGame
->
cbMatchMode
->
getSelected
();
cscg
.
info
.
start_hand
=
_wtoi
(
mainGame
->
ebStartHand
->
getText
()
);
cscg
.
info
.
start_lp
=
_wtoi
(
mainGame
->
ebStartLP
->
getText
()
);
cscg
.
info
.
draw_count
=
_wtoi
(
mainGame
->
ebDrawCount
->
getText
()
);
cscg
.
info
.
time_limit
=
_wtoi
(
mainGame
->
ebTimeLimit
->
getText
()
);
cscg
.
info
.
start_hand
=
wcstol
(
mainGame
->
ebStartHand
->
getText
(),
nullptr
,
10
);
cscg
.
info
.
start_lp
=
wcstol
(
mainGame
->
ebStartLP
->
getText
(),
nullptr
,
10
);
cscg
.
info
.
draw_count
=
wcstol
(
mainGame
->
ebDrawCount
->
getText
(),
nullptr
,
10
);
cscg
.
info
.
time_limit
=
wcstol
(
mainGame
->
ebTimeLimit
->
getText
(),
nullptr
,
10
);
cscg
.
info
.
lflist
=
mainGame
->
cbHostLFlist
->
getItemData
(
mainGame
->
cbHostLFlist
->
getSelected
());
cscg
.
info
.
duel_rule
=
mainGame
->
cbDuelRule
->
getSelected
()
+
1
;
cscg
.
info
.
no_check_deck
=
mainGame
->
chkNoCheckDeck
->
isChecked
();
...
...
@@ -1402,8 +1403,8 @@ int DuelClient::ClientAnalyze(unsigned char* msg, unsigned int len) {
else
if
(
pcard
->
location
==
LOCATION_EXTRA
)
mainGame
->
dField
.
extra_act
=
true
;
else
{
int
seq
=
mainGame
->
dInfo
.
duel_rule
>=
4
?
0
:
6
;
if
(
pcard
->
location
==
LOCATION_SZONE
&&
pcard
->
sequence
==
seq
&&
(
pcard
->
type
&
TYPE_PENDULUM
)
&&
!
pcard
->
equipTarget
)
int
left_
seq
=
mainGame
->
dInfo
.
duel_rule
>=
4
?
0
:
6
;
if
(
pcard
->
location
==
LOCATION_SZONE
&&
pcard
->
sequence
==
left_
seq
&&
(
pcard
->
type
&
TYPE_PENDULUM
)
&&
!
pcard
->
equipTarget
)
mainGame
->
dField
.
pzone_act
[
pcard
->
controler
]
=
true
;
}
}
...
...
@@ -3148,8 +3149,8 @@ int DuelClient::ClientAnalyze(unsigned char* msg, unsigned int len) {
pcard
=
mainGame
->
dField
.
GetCard
(
player
,
LOCATION_DECK
,
mainGame
->
dField
.
deck
[
player
].
size
()
-
1
);
mainGame
->
dField
.
deck
[
player
].
erase
(
mainGame
->
dField
.
deck
[
player
].
end
()
-
1
);
mainGame
->
dField
.
AddCard
(
pcard
,
player
,
LOCATION_HAND
,
0
);
for
(
size_t
i
=
0
;
i
<
mainGame
->
dField
.
hand
[
player
].
size
();
++
i
)
mainGame
->
dField
.
MoveCard
(
mainGame
->
dField
.
hand
[
player
][
i
],
10
);
for
(
int
j
=
0
;
j
<
(
int
)
mainGame
->
dField
.
hand
[
player
].
size
();
++
j
)
mainGame
->
dField
.
MoveCard
(
mainGame
->
dField
.
hand
[
player
][
j
],
10
);
mainGame
->
gMutex
.
unlock
();
mainGame
->
WaitFrameSignal
(
5
);
}
...
...
gframe/event_handler.cpp
View file @
d7b24732
...
...
@@ -1456,7 +1456,6 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
DuelClient
::
SetResponseB
(
respbuf
,
selectable_cards
.
size
()
*
2
);
DuelClient
::
SendResponse
();
}
else
{
wchar_t
formatBuffer
[
2048
];
myswprintf
(
formatBuffer
,
dataManager
.
GetSysString
(
204
),
select_counter_count
,
dataManager
.
GetCounterName
(
select_counter_type
));
mainGame
->
stHintMsg
->
setText
(
formatBuffer
);
}
...
...
@@ -1665,8 +1664,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
player_name
=
mainGame
->
dInfo
.
clientname_tag
;
}
std
::
wstring
str
(
player_name
);
const
auto
&
player_desc
_hints
=
mainGame
->
dField
.
player_desc_hints
[
mplayer
];
for
(
auto
iter
=
player_desc_hints
.
begin
();
iter
!=
player_desc
_hints
.
end
();
++
iter
)
{
const
auto
&
mplayer
_hints
=
mainGame
->
dField
.
player_desc_hints
[
mplayer
];
for
(
auto
iter
=
mplayer_hints
.
begin
();
iter
!=
mplayer
_hints
.
end
();
++
iter
)
{
myswprintf
(
formatBuffer
,
L"
\n
*%ls"
,
dataManager
.
GetDesc
(
iter
->
first
));
str
.
append
(
formatBuffer
);
}
...
...
gframe/game.cpp
View file @
d7b24732
This diff is collapsed.
Click to expand it.
gframe/game.h
View file @
d7b24732
...
...
@@ -3,15 +3,28 @@
#include "config.h"
#ifndef YGOPRO_SERVER_MODE
#ifdef __APPLE__
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#else //__APPLE__
#include <GL/gl.h>
#include <GL/glu.h>
#endif //__APPLE__
#include "CGUIImageButton.h"
#include "CGUITTFont.h"
#include "mysignal.h"
#include "client_field.h"
#include "deck_con.h"
#include "menu_handler.h"
#include <time.h>
#else
#include "netserver.h"
#endif //YGOPRO_SERVER_MODE
#include <unordered_map>
#include <vector>
#include <list>
#include <mutex>
#include <functional>
#ifndef YGOPRO_DEFAULT_DUEL_RULE
#define YGOPRO_DEFAULT_DUEL_RULE 5
...
...
gframe/gframe.cpp
View file @
d7b24732
...
...
@@ -40,7 +40,7 @@ int main(int argc, char* argv[]) {
#ifdef _WIN32
#ifndef _DEBUG
char
*
pstrext
;
if
(
argc
==
2
&&
(
pstrext
=
strrchr
(
argv
[
1
],
'.'
))
if
(
argc
==
2
&&
(
pstrext
=
st
d
::
st
rrchr
(
argv
[
1
],
'.'
))
&&
(
!
mystrncasecmp
(
pstrext
,
".ydk"
,
4
)
||
!
mystrncasecmp
(
pstrext
,
".yrp"
,
4
)))
{
wchar_t
exepath
[
MAX_PATH
];
GetModuleFileNameW
(
NULL
,
exepath
,
MAX_PATH
);
...
...
gframe/image_manager.cpp
View file @
d7b24732
#include "image_manager.h"
#include "game.h"
#include <thread>
namespace
ygo
{
...
...
gframe/image_manager.h
View file @
d7b24732
...
...
@@ -5,6 +5,7 @@
#include "data_manager.h"
#include <unordered_map>
#include <queue>
#include <mutex>
namespace
ygo
{
...
...
gframe/menu_handler.cpp
View file @
d7b24732
#include "config.h"
#include "menu_handler.h"
#include "myfilesystem.h"
#include "netserver.h"
#include "duelclient.h"
#include "deck_manager.h"
...
...
@@ -96,7 +97,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
evutil_freeaddrinfo
(
answer
);
}
}
unsigned
int
remote_port
=
_wtoi
(
mainGame
->
ebJoinPort
->
getText
()
);
unsigned
int
remote_port
=
wcstol
(
mainGame
->
ebJoinPort
->
getText
(),
nullptr
,
10
);
BufferIO
::
CopyWStr
(
pstr
,
mainGame
->
gameConf
.
lasthost
,
100
);
BufferIO
::
CopyWStr
(
mainGame
->
ebJoinPort
->
getText
(),
mainGame
->
gameConf
.
lastport
,
20
);
if
(
DuelClient
::
StartClient
(
remote_addr
,
remote_port
,
false
))
{
...
...
@@ -161,20 +162,20 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
break
;
}
case
BUTTON_HP_KICK
:
{
int
i
d
=
0
;
while
(
i
d
<
4
)
{
if
(
mainGame
->
btnHostPrepKick
[
i
d
]
==
caller
)
int
i
ndex
=
0
;
while
(
i
ndex
<
4
)
{
if
(
mainGame
->
btnHostPrepKick
[
i
ndex
]
==
caller
)
break
;
id
++
;
++
index
;
}
CTOS_Kick
csk
;
csk
.
pos
=
i
d
;
csk
.
pos
=
i
ndex
;
DuelClient
::
SendPacketToServer
(
CTOS_HS_KICK
,
csk
);
break
;
}
case
BUTTON_HP_READY
:
{
if
(
mainGame
->
cbCategorySelect
->
getSelected
()
==
-
1
||
mainGame
->
cbDeckSelect
->
getSelected
()
==
-
1
||
!
deckManager
.
LoadDeck
(
mainGame
->
cbCategorySelect
,
mainGame
->
cbDeckSelect
))
{
!
deckManager
.
Load
Current
Deck
(
mainGame
->
cbCategorySelect
,
mainGame
->
cbDeckSelect
))
{
mainGame
->
gMutex
.
lock
();
soundManager
.
PlaySoundEffect
(
SOUND_INFO
);
mainGame
->
env
->
addMessageBox
(
L""
,
dataManager
.
GetSysString
(
1406
));
...
...
@@ -252,7 +253,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame
->
dField
.
Clear
();
mainGame
->
HideElement
(
mainGame
->
wReplay
);
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
dField
);
unsigned
int
start_turn
=
_wtoi
(
mainGame
->
ebRepStartTurn
->
getText
()
);
unsigned
int
start_turn
=
wcstol
(
mainGame
->
ebRepStartTurn
->
getText
(),
nullptr
,
10
);
if
(
start_turn
==
1
)
start_turn
=
0
;
ReplayMode
::
StartReplay
(
start_turn
);
...
...
@@ -294,40 +295,40 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
if
(
mainGame
->
lstReplayList
->
getSelected
()
==
-
1
)
break
;
Replay
replay
;
wchar_t
ex_filename
[
256
];
wchar_t
namebuf
[
4
][
20
];
wchar_t
filename
[
256
];
wchar_t
ex_filename
[
256
]
{}
;
wchar_t
namebuf
[
4
][
20
]
{}
;
wchar_t
filename
[
256
]
{}
;
myswprintf
(
ex_filename
,
L"%ls"
,
mainGame
->
lstReplayList
->
getListItem
(
mainGame
->
lstReplayList
->
getSelected
()));
if
(
!
replay
.
OpenReplay
(
ex_filename
))
break
;
const
ReplayHeader
&
rh
=
replay
.
pheader
;
if
(
rh
.
flag
&
REPLAY_SINGLE_MODE
)
break
;
int
max
=
(
rh
.
flag
&
REPLAY_TAG
)
?
4
:
2
;
int
player_count
=
(
rh
.
flag
&
REPLAY_TAG
)
?
4
:
2
;
//player name
for
(
int
i
=
0
;
i
<
max
;
++
i
)
for
(
int
i
=
0
;
i
<
player_count
;
++
i
)
replay
.
ReadName
(
namebuf
[
i
]);
//skip pre infos
for
(
int
i
=
0
;
i
<
4
;
++
i
)
replay
.
ReadInt32
();
//deck
for
(
int
i
=
0
;
i
<
max
;
++
i
)
{
std
::
vector
<
int
>
deckbuf
;
for
(
int
i
=
0
;
i
<
player_count
;
++
i
)
{
deckbuf
.
clear
();
int
main
=
replay
.
ReadInt32
();
Deck
tmp_deck
;
deckbuf
.
push_back
(
main
)
;
for
(
int
j
=
0
;
j
<
main
;
++
j
)
{
auto
card
=
dataManager
.
GetCodePointer
(
replay
.
ReadInt32
());
if
(
card
!=
dataManager
.
datas_end
)
tmp_deck
.
main
.
push_back
(
card
);
deckbuf
.
push_back
(
replay
.
ReadInt32
());
}
int
extra
=
replay
.
ReadInt32
();
deckbuf
.
push_back
(
extra
);
for
(
int
j
=
0
;
j
<
extra
;
++
j
)
{
auto
card
=
dataManager
.
GetCodePointer
(
replay
.
ReadInt32
());
if
(
card
!=
dataManager
.
datas_end
)
tmp_deck
.
extra
.
push_back
(
card
);
deckbuf
.
push_back
(
replay
.
ReadInt32
());
}
deckbuf
.
push_back
(
0
);
FileSystem
::
SafeFileName
(
namebuf
[
i
]);
myswprintf
(
filename
,
L"deck/%ls-%d %ls.ydk"
,
ex_filename
,
i
+
1
,
namebuf
[
i
]);
deckManager
.
SaveDeck
(
tmp_deck
,
filename
);
deckManager
.
SaveDeck
Buffer
(
deckbuf
.
data
()
,
filename
);
}
mainGame
->
stACMessage
->
setText
(
dataManager
.
GetSysString
(
1335
));
mainGame
->
PopupElement
(
mainGame
->
wACMessage
,
20
);
...
...
@@ -425,7 +426,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
}
case
BUTTON_DECK_EDIT
:
{
mainGame
->
RefreshCategoryDeck
(
mainGame
->
cbDBCategory
,
mainGame
->
cbDBDecks
);
if
(
open_file
&&
deckManager
.
LoadDeck
(
open_file_name
))
{
if
(
open_file
&&
deckManager
.
Load
Current
Deck
(
open_file_name
))
{
#ifdef WIN32
wchar_t
*
dash
=
wcsrchr
(
open_file_name
,
L'\\'
);
#else
...
...
@@ -463,7 +464,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
}
open_file
=
false
;
}
else
if
(
mainGame
->
cbDBCategory
->
getSelected
()
!=
-
1
&&
mainGame
->
cbDBDecks
->
getSelected
()
!=
-
1
)
{
deckManager
.
LoadDeck
(
mainGame
->
cbDBCategory
,
mainGame
->
cbDBDecks
);
deckManager
.
Load
Current
Deck
(
mainGame
->
cbDBCategory
,
mainGame
->
cbDBDecks
);
mainGame
->
ebDeckname
->
setText
(
L""
);
}
mainGame
->
HideElement
(
mainGame
->
wMainMenu
);
...
...
@@ -546,7 +547,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
tm
*
st
=
localtime
(
&
curtime
);
wcsftime
(
infobuf
,
256
,
L"%Y/%m/%d %H:%M:%S
\n
"
,
st
);
repinfo
.
append
(
infobuf
);
wchar_t
namebuf
[
4
][
20
];
wchar_t
namebuf
[
4
][
20
]
{}
;
ReplayMode
::
cur_replay
.
ReadName
(
namebuf
[
0
]);
ReplayMode
::
cur_replay
.
ReadName
(
namebuf
[
1
]);
if
(
ReplayMode
::
cur_replay
.
pheader
.
flag
&
REPLAY_TAG
)
{
...
...
@@ -586,9 +587,9 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
std
::
wstring
message
=
L""
;
bool
in_message
=
false
;
while
(
fgets
(
linebuf
,
1024
,
fp
))
{
if
(
!
strncmp
(
linebuf
,
"--[[message"
,
11
))
{
size_t
len
=
strlen
(
linebuf
);
char
*
msgend
=
strrchr
(
linebuf
,
']'
);
if
(
!
st
d
::
st
rncmp
(
linebuf
,
"--[[message"
,
11
))
{
size_t
len
=
st
d
::
st
rlen
(
linebuf
);
char
*
msgend
=
st
d
::
st
rrchr
(
linebuf
,
']'
);
if
(
len
<=
13
)
{
in_message
=
true
;
continue
;
...
...
@@ -599,7 +600,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
break
;
}
}
if
(
!
strncmp
(
linebuf
,
"]]"
,
2
))
{
if
(
!
st
d
::
st
rncmp
(
linebuf
,
"]]"
,
2
))
{
in_message
=
false
;
break
;
}
...
...
@@ -632,7 +633,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame
->
env
->
setFocus
(
mainGame
->
wHostPrepare
);
if
(
static_cast
<
irr
::
gui
::
IGUICheckBox
*>
(
caller
)
->
isChecked
())
{
if
(
mainGame
->
cbCategorySelect
->
getSelected
()
==
-
1
||
mainGame
->
cbDeckSelect
->
getSelected
()
==
-
1
||
!
deckManager
.
LoadDeck
(
mainGame
->
cbCategorySelect
,
mainGame
->
cbDeckSelect
))
{
!
deckManager
.
Load
Current
Deck
(
mainGame
->
cbCategorySelect
,
mainGame
->
cbDeckSelect
))
{
mainGame
->
gMutex
.
lock
();
static_cast
<
irr
::
gui
::
IGUICheckBox
*>
(
caller
)
->
setChecked
(
false
);
soundManager
.
PlaySoundEffect
(
SOUND_INFO
);
...
...
gframe/netserver.cpp
View file @
d7b24732
#include "netserver.h"
#include "single_duel.h"
#include "tag_duel.h"
#include <thread>
namespace
ygo
{
std
::
unordered_map
<
bufferevent
*
,
DuelPlayer
>
NetServer
::
users
;
...
...
gframe/network.h
View file @
d7b24732
...
...
@@ -256,7 +256,7 @@ public:
#define NETPLAYER_TYPE_OBSERVER 7
#define CTOS_RESPONSE 0x1 // byte array
#define CTOS_UPDATE_DECK 0x2 //
int32_t array
#define CTOS_UPDATE_DECK 0x2 //
mainc, sidec, int32_t[mainc + sidec]
#define CTOS_HAND_RESULT 0x3 // CTOS_HandResult
#define CTOS_TP_RESULT 0x4 // CTOS_TPResult
#define CTOS_PLAYER_INFO 0x10 // CTOS_PlayerInfo
...
...
gframe/replay.cpp
View file @
d7b24732
#include "replay.h"
#include "myfilesystem.h"
#include "lzma/LzmaLib.h"
namespace
ygo
{
...
...
gframe/replay_mode.cpp
View file @
d7b24732
...
...
@@ -3,6 +3,7 @@
#include "game.h"
#include "../ocgcore/common.h"
#include "../ocgcore/mtrandom.h"
#include <thread>
namespace
ygo
{
...
...
@@ -273,7 +274,6 @@ void ReplayMode::EndDuel() {
}
void
ReplayMode
::
Restart
(
bool
refresh
)
{
end_duel
(
pduel
);
mainGame
->
dInfo
.
isInDuel
=
false
;
mainGame
->
dInfo
.
isStarted
=
false
;
mainGame
->
dInfo
.
isInDuel
=
false
;
mainGame
->
dInfo
.
isFinished
=
true
;
...
...
gframe/single_duel.cpp
View file @
d7b24732
...
...
@@ -577,7 +577,7 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
#ifdef YGOPRO_SERVER_MODE
preload_script
(
pduel
,
"./script/special.lua"
,
0
);
#endif
int
opt
=
(
int
)
host_info
.
duel_rule
<<
16
;
unsigned
int
opt
=
(
unsigned
int
)
host_info
.
duel_rule
<<
16
;
if
(
host_info
.
no_shuffle_deck
)
opt
|=
DUEL_PSEUDO_SHUFFLE
;
last_replay
.
WriteInt32
(
host_info
.
start_lp
,
false
);
...
...
gframe/single_mode.cpp
View file @
d7b24732
...
...
@@ -3,6 +3,7 @@
#include "game.h"
#include "../ocgcore/common.h"
#include "../ocgcore/mtrandom.h"
#include <thread>
namespace
ygo
{
...
...
gframe/sound_manager.cpp
View file @
d7b24732
#include "sound_manager.h"
#include "myfilesystem.h"
#ifdef IRRKLANG_STATIC
#include "../ikpmp3/ikpMP3.h"
#endif
...
...
gframe/tag_duel.cpp
View file @
d7b24732
...
...
@@ -557,7 +557,7 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
#endif
set_player_info
(
pduel
,
0
,
host_info
.
start_lp
,
host_info
.
start_hand
,
host_info
.
draw_count
);
set_player_info
(
pduel
,
1
,
host_info
.
start_lp
,
host_info
.
start_hand
,
host_info
.
draw_count
);
int
opt
=
(
int
)
host_info
.
duel_rule
<<
16
;
unsigned
int
opt
=
(
unsigned
int
)
host_info
.
duel_rule
<<
16
;
if
(
host_info
.
no_shuffle_deck
)
opt
|=
DUEL_PSEUDO_SHUFFLE
;
opt
|=
DUEL_TAG_MODE
;
...
...
lflist.conf
View file @
d7b24732
This diff is collapsed.
Click to expand it.
ocgcore
@
54ecda46
Subproject commit
4556ba569eaaccd89b608f055b955e008c7d9e2
a
Subproject commit
54ecda46aecdc97ea5dbc628984387561da28e5
a
script
@
d9a0efd5
Subproject commit
7012f0135111e9f5c79887d9a4110ee95f8a8067
Subproject commit
d9a0efd58ebb808d50c7e219e217f7aa0a0caadf
strings.conf
View file @
d7b24732
...
...
@@ -557,6 +557,7 @@
!
victory
0
x20
「真艾克佐迪亚」特殊胜利
!
victory
0
x21
「混沌虚数
No
.
1000
梦幻虚光神 原数天灵·原数天地」特殊胜利
!
victory
0
x22
「席取-六双丸」特殊胜利
!
victory
0
x23
「火器的祝台」特殊胜利
!
victory
0
xffff
由于「%
ls
」获得比赛胜利
#counters
!
counter
0
x1
魔力指示物
...
...
@@ -661,6 +662,7 @@
!
counter
0
x6a
响鸣指示物
!
counter
0
x6b
狂乱指示物
!
counter
0
x6c
访问指示物
!
counter
0
x6d
祝台指示物
#setnames, using tab for comment
!
setname
0
x1
正义盟军
A
・
O
・
J
!
setname
0
x2
次世代 ジェネクス
...
...
@@ -1225,3 +1227,12 @@
!
setname
0
x1b4
时空 タキオン
!
setname
0
x1b5
蓝泪 青い涙
!
setname
0
x1b6
石版
!
setname
0
x1b7
拟箱掳尸
Mimighoul
!
setname
0
x1b8
鲨 シャーク
!
setname
0
x11b8
鲨龙兽 シャーク・ドレイク
!
setname
0
x1b9
原石
!
setname
0
x1ba
六武式
!
setname
0
x1bb
金属化 メタル化
!
setname
0
x1bc
魔瞳 モルガナイト
!
setname
0
x1bd
蓟花 アザミナ
!
setname
0
x1be
祝台
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