Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro-2pick
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-2pick
Commits
eb52c94b
Commit
eb52c94b
authored
Oct 27, 2018
by
nanahira
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into server
parents
7229bfce
95a8be45
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
100 additions
and
25 deletions
+100
-25
.gitignore
.gitignore
+0
-1
gframe/event_handler.cpp
gframe/event_handler.cpp
+25
-3
gframe/game.cpp
gframe/game.cpp
+62
-17
gframe/game.h
gframe/game.h
+12
-3
script
script
+1
-1
No files found.
.gitignore
View file @
eb52c94b
...
...
@@ -77,7 +77,6 @@
/bak/
/bug.txt
/output
/replace.sh
/temp
[Tt]humbs.cdb
...
...
gframe/event_handler.cpp
View file @
eb52c94b
...
...
@@ -1008,6 +1008,9 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
mainGame
->
ClearCardInfo
(
mcard
->
controler
);
}
}
if
(
id
==
TEXT_CARD_LIST_TIP
)
{
mainGame
->
stCardListTip
->
setVisible
(
true
);
}
break
;
}
case
irr
:
:
gui
::
EGET_ELEMENT_LEFT
:
{
...
...
@@ -1023,6 +1026,9 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
SetShowMark
(
mcard
,
false
);
mainGame
->
stCardListTip
->
setVisible
(
false
);
}
if
(
id
==
TEXT_CARD_LIST_TIP
)
{
mainGame
->
stCardListTip
->
setVisible
(
false
);
}
break
;
}
default:
...
...
@@ -1920,6 +1926,18 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
break
;
}
#endif
case
SCROLL_TAB_HELPER
:
{
rect
<
s32
>
pos
=
mainGame
->
tabHelper
->
getRelativePosition
();
mainGame
->
tabHelper
->
setRelativePosition
(
recti
(
0
,
mainGame
->
scrTabHelper
->
getPos
()
*
-
1
,
pos
.
LowerRightCorner
.
X
,
pos
.
LowerRightCorner
.
Y
));
return
true
;
break
;
}
case
SCROLL_TAB_SYSTEM
:
{
rect
<
s32
>
pos
=
mainGame
->
tabSystem
->
getRelativePosition
();
mainGame
->
tabSystem
->
setRelativePosition
(
recti
(
0
,
mainGame
->
scrTabSystem
->
getPos
()
*
-
1
,
pos
.
LowerRightCorner
.
X
,
pos
.
LowerRightCorner
.
Y
));
return
true
;
break
;
}
}
break
;
}
...
...
@@ -1928,7 +1946,6 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
case
COMBOBOX_LOCALE
:
{
myswprintf
(
mainGame
->
gameConf
.
locale
,
L"%ls"
,
mainGame
->
cbLocale
->
getItem
(
mainGame
->
cbLocale
->
getSelected
()));
mainGame
->
SaveConfig
();
return
true
;
break
;
}
}
...
...
@@ -2325,9 +2342,14 @@ void ClientField::ShowCardInfoInList(ClientCard* pcard, irr::gui::IGUIElement* e
irr
::
core
::
rect
<
s32
>
ePos
=
element
->
getRelativePosition
();
s32
x
=
(
ePos
.
UpperLeftCorner
.
X
+
ePos
.
LowerRightCorner
.
X
)
/
2
;
s32
y
=
ePos
.
LowerRightCorner
.
Y
;
mainGame
->
SetStaticText
(
mainGame
->
stCardListTip
,
16
0
,
mainGame
->
guiFont
,
str
.
c_str
());
mainGame
->
SetStaticText
(
mainGame
->
stCardListTip
,
32
0
,
mainGame
->
guiFont
,
str
.
c_str
());
irr
::
core
::
dimension2d
<
unsigned
int
>
dTip
=
mainGame
->
guiFont
->
getDimension
(
mainGame
->
stCardListTip
->
getText
())
+
irr
::
core
::
dimension2d
<
unsigned
int
>
(
10
,
10
);
mainGame
->
stCardListTip
->
setRelativePosition
(
recti
(
x
-
dTip
.
Width
/
2
,
y
-
10
,
x
+
dTip
.
Width
/
2
,
y
-
10
+
dTip
.
Height
));
s32
w
=
dTip
.
Width
/
2
;
if
(
x
-
w
<
10
)
x
=
w
+
10
;
if
(
x
+
w
>
670
)
x
=
670
-
w
;
mainGame
->
stCardListTip
->
setRelativePosition
(
recti
(
x
-
w
,
y
-
10
,
x
+
w
,
y
-
10
+
dTip
.
Height
));
mainGame
->
stCardListTip
->
setVisible
(
true
);
}
}
...
...
gframe/game.cpp
View file @
eb52c94b
...
...
@@ -341,14 +341,24 @@ bool Game::Initialize() {
scrCardText
->
setSmallStep
(
1
);
scrCardText
->
setVisible
(
false
);
//log
irr
::
gui
::
IGUITab
*
tabLog
=
wInfos
->
addTab
(
dataManager
.
GetSysString
(
1271
));
irr
::
gui
::
IGUITab
*
tabLog
=
wInfos
->
addTab
(
dataManager
.
GetSysString
(
1271
));
lstLog
=
env
->
addListBox
(
rect
<
s32
>
(
10
,
10
,
290
,
290
),
tabLog
,
LISTBOX_LOG
,
false
);
lstLog
->
setItemHeight
(
18
);
btnClearLog
=
env
->
addButton
(
rect
<
s32
>
(
160
,
300
,
260
,
325
),
tabLog
,
BUTTON_CLEAR_LOG
,
dataManager
.
GetSysString
(
1272
));
//helper
irr
::
gui
::
IGUITab
*
tabHelper
=
wInfos
->
addTab
(
dataManager
.
GetSysString
(
1298
));
int
posX
=
20
;
int
posY
=
20
;
irr
::
gui
::
IGUITab
*
_tabHelper
=
wInfos
->
addTab
(
dataManager
.
GetSysString
(
1298
));
_tabHelper
->
setRelativePosition
(
recti
(
16
,
49
,
299
,
362
));
tabHelper
=
env
->
addWindow
(
recti
(
0
,
0
,
250
,
300
),
false
,
L""
,
_tabHelper
);
tabHelper
->
setDrawTitlebar
(
false
);
tabHelper
->
getCloseButton
()
->
setVisible
(
false
);
tabHelper
->
setDrawBackground
(
false
);
tabHelper
->
setDraggable
(
false
);
scrTabHelper
=
env
->
addScrollBar
(
false
,
rect
<
s32
>
(
252
,
0
,
272
,
300
),
_tabHelper
,
SCROLL_TAB_HELPER
);
scrTabHelper
->
setLargeStep
(
1
);
scrTabHelper
->
setSmallStep
(
1
);
scrTabHelper
->
setVisible
(
false
);
int
posX
=
0
;
int
posY
=
0
;
chkMAutoPos
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
260
,
posY
+
25
),
tabHelper
,
-
1
,
dataManager
.
GetSysString
(
1274
));
chkMAutoPos
->
setChecked
(
gameConf
.
chkMAutoPos
!=
0
);
posY
+=
30
;
...
...
@@ -366,9 +376,20 @@ bool Game::Initialize() {
posY
+=
30
;
chkQuickAnimation
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
260
,
posY
+
25
),
tabHelper
,
CHECKBOX_QUICK_ANIMATION
,
dataManager
.
GetSysString
(
1299
));
chkQuickAnimation
->
setChecked
(
gameConf
.
quick_animation
!=
0
);
elmTabHelperLast
=
chkQuickAnimation
;
//system
irr
::
gui
::
IGUITab
*
tabSystem
=
wInfos
->
addTab
(
dataManager
.
GetSysString
(
1273
));
posY
=
20
;
irr
::
gui
::
IGUITab
*
_tabSystem
=
wInfos
->
addTab
(
dataManager
.
GetSysString
(
1273
));
_tabSystem
->
setRelativePosition
(
recti
(
16
,
49
,
299
,
362
));
tabSystem
=
env
->
addWindow
(
recti
(
0
,
0
,
250
,
300
),
false
,
L""
,
_tabSystem
);
tabSystem
->
setDrawTitlebar
(
false
);
tabSystem
->
getCloseButton
()
->
setVisible
(
false
);
tabSystem
->
setDrawBackground
(
false
);
tabSystem
->
setDraggable
(
false
);
scrTabSystem
=
env
->
addScrollBar
(
false
,
rect
<
s32
>
(
252
,
0
,
272
,
300
),
_tabSystem
,
SCROLL_TAB_SYSTEM
);
scrTabSystem
->
setLargeStep
(
1
);
scrTabSystem
->
setSmallStep
(
1
);
scrTabSystem
->
setVisible
(
false
);
posY
=
0
;
chkIgnore1
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
260
,
posY
+
25
),
tabSystem
,
CHECKBOX_DISABLE_CHAT
,
dataManager
.
GetSysString
(
1290
));
chkIgnore1
->
setChecked
(
gameConf
.
chkIgnore1
!=
0
);
posY
+=
30
;
...
...
@@ -388,14 +409,14 @@ bool Game::Initialize() {
chkAutoSearch
->
setChecked
(
gameConf
.
auto_search_limit
>=
0
);
posY
+=
30
;
env
->
addStaticText
(
dataManager
.
GetSysString
(
1282
),
rect
<
s32
>
(
posX
+
23
,
posY
+
3
,
posX
+
120
,
posY
+
28
),
false
,
false
,
tabSystem
);
btnWinResizeS
=
env
->
addButton
(
rect
<
s32
>
(
posX
+
1
25
,
posY
,
posX
+
15
5
,
posY
+
25
),
tabSystem
,
BUTTON_WINDOW_RESIZE_S
,
dataManager
.
GetSysString
(
1283
));
btnWinResizeM
=
env
->
addButton
(
rect
<
s32
>
(
posX
+
1
60
,
posY
,
posX
+
19
0
,
posY
+
25
),
tabSystem
,
BUTTON_WINDOW_RESIZE_M
,
dataManager
.
GetSysString
(
1284
));
btnWinResizeL
=
env
->
addButton
(
rect
<
s32
>
(
posX
+
1
95
,
posY
,
posX
+
22
5
,
posY
+
25
),
tabSystem
,
BUTTON_WINDOW_RESIZE_L
,
dataManager
.
GetSysString
(
1285
));
btnWinResizeXL
=
env
->
addButton
(
rect
<
s32
>
(
posX
+
2
30
,
posY
,
posX
+
26
0
,
posY
+
25
),
tabSystem
,
BUTTON_WINDOW_RESIZE_XL
,
dataManager
.
GetSysString
(
1286
));
btnWinResizeS
=
env
->
addButton
(
rect
<
s32
>
(
posX
+
1
15
,
posY
,
posX
+
14
5
,
posY
+
25
),
tabSystem
,
BUTTON_WINDOW_RESIZE_S
,
dataManager
.
GetSysString
(
1283
));
btnWinResizeM
=
env
->
addButton
(
rect
<
s32
>
(
posX
+
1
50
,
posY
,
posX
+
18
0
,
posY
+
25
),
tabSystem
,
BUTTON_WINDOW_RESIZE_M
,
dataManager
.
GetSysString
(
1284
));
btnWinResizeL
=
env
->
addButton
(
rect
<
s32
>
(
posX
+
1
85
,
posY
,
posX
+
21
5
,
posY
+
25
),
tabSystem
,
BUTTON_WINDOW_RESIZE_L
,
dataManager
.
GetSysString
(
1285
));
btnWinResizeXL
=
env
->
addButton
(
rect
<
s32
>
(
posX
+
2
20
,
posY
,
posX
+
25
0
,
posY
+
25
),
tabSystem
,
BUTTON_WINDOW_RESIZE_XL
,
dataManager
.
GetSysString
(
1286
));
posY
+=
30
;
chkEnableSound
=
env
->
addCheckBox
(
gameConf
.
enable_sound
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
120
,
posY
+
25
),
tabSystem
,
CHECKBOX_ENABLE_SOUND
,
dataManager
.
GetSysString
(
1279
));
chkEnableSound
->
setChecked
(
gameConf
.
enable_sound
);
scrSoundVolume
=
env
->
addScrollBar
(
true
,
rect
<
s32
>
(
posX
+
1
26
,
posY
+
4
,
posX
+
26
0
,
posY
+
21
),
tabSystem
,
SCROLL_VOLUME
);
scrSoundVolume
=
env
->
addScrollBar
(
true
,
rect
<
s32
>
(
posX
+
1
16
,
posY
+
4
,
posX
+
25
0
,
posY
+
21
),
tabSystem
,
SCROLL_VOLUME
);
scrSoundVolume
->
setMax
(
100
);
scrSoundVolume
->
setMin
(
0
);
scrSoundVolume
->
setPos
(
gameConf
.
sound_volume
*
100
);
...
...
@@ -404,7 +425,7 @@ bool Game::Initialize() {
posY
+=
30
;
chkEnableMusic
=
env
->
addCheckBox
(
gameConf
.
enable_music
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
120
,
posY
+
25
),
tabSystem
,
CHECKBOX_ENABLE_MUSIC
,
dataManager
.
GetSysString
(
1280
));
chkEnableMusic
->
setChecked
(
gameConf
.
enable_music
);
scrMusicVolume
=
env
->
addScrollBar
(
true
,
rect
<
s32
>
(
posX
+
1
26
,
posY
+
4
,
posX
+
26
0
,
posY
+
21
),
tabSystem
,
SCROLL_VOLUME
);
scrMusicVolume
=
env
->
addScrollBar
(
true
,
rect
<
s32
>
(
posX
+
1
16
,
posY
+
4
,
posX
+
25
0
,
posY
+
21
),
tabSystem
,
SCROLL_VOLUME
);
scrMusicVolume
->
setMax
(
100
);
scrMusicVolume
->
setMin
(
0
);
scrMusicVolume
->
setPos
(
gameConf
.
music_volume
*
100
);
...
...
@@ -418,8 +439,9 @@ bool Game::Initialize() {
chkEnablePScale
->
setChecked
(
gameConf
.
chkEnablePScale
!=
0
);
posY
+=
30
;
env
->
addStaticText
(
dataManager
.
GetSysString
(
1288
),
rect
<
s32
>
(
posX
+
23
,
posY
+
3
,
posX
+
160
,
posY
+
28
),
false
,
false
,
tabSystem
);
cbLocale
=
env
->
addComboBox
(
rect
<
s32
>
(
posX
+
1
60
,
posY
+
4
,
posX
+
26
0
,
posY
+
21
),
tabSystem
,
COMBOBOX_LOCALE
);
cbLocale
=
env
->
addComboBox
(
rect
<
s32
>
(
posX
+
1
50
,
posY
+
4
,
posX
+
25
0
,
posY
+
21
),
tabSystem
,
COMBOBOX_LOCALE
);
RefreshLocales
();
elmTabSystemLast
=
cbLocale
;
//
wHand
=
env
->
addWindow
(
rect
<
s32
>
(
500
,
450
,
825
,
605
),
false
,
L""
);
wHand
->
getCloseButton
()
->
setVisible
(
false
);
...
...
@@ -799,7 +821,7 @@ bool Game::Initialize() {
stTip
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
stTip
->
setVisible
(
false
);
//tip for cards in select / display list
stCardListTip
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
0
,
0
,
150
,
150
),
false
,
true
,
wCardSelect
,
-
1
,
true
);
stCardListTip
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
0
,
0
,
150
,
150
),
false
,
true
,
wCardSelect
,
TEXT_CARD_LIST_TIP
,
true
);
stCardListTip
->
setBackgroundColor
(
0xc0ffffff
);
stCardListTip
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
stCardListTip
->
setVisible
(
false
);
...
...
@@ -2007,9 +2029,32 @@ void Game::OnResize() {
stHintMsg
->
setRelativePosition
(
ResizeWin
(
500
,
60
,
820
,
90
));
//sound / music volume bar
scrSoundVolume
->
setRelativePosition
(
recti
(
20
+
126
,
230
+
4
,
20
+
(
300
*
xScale
)
-
40
,
230
+
21
));
scrMusicVolume
->
setRelativePosition
(
recti
(
20
+
126
,
260
+
4
,
20
+
(
300
*
xScale
)
-
40
,
260
+
21
));
cbLocale
->
setRelativePosition
(
recti
(
20
+
160
,
350
+
4
,
20
+
(
300
*
xScale
)
-
40
,
350
+
21
));
scrSoundVolume
->
setRelativePosition
(
recti
(
scrSoundVolume
->
getRelativePosition
().
UpperLeftCorner
.
X
,
scrSoundVolume
->
getRelativePosition
().
UpperLeftCorner
.
Y
,
20
+
(
300
*
xScale
)
-
70
,
scrSoundVolume
->
getRelativePosition
().
LowerRightCorner
.
Y
));
scrMusicVolume
->
setRelativePosition
(
recti
(
scrMusicVolume
->
getRelativePosition
().
UpperLeftCorner
.
X
,
scrMusicVolume
->
getRelativePosition
().
UpperLeftCorner
.
Y
,
20
+
(
300
*
xScale
)
-
70
,
scrMusicVolume
->
getRelativePosition
().
LowerRightCorner
.
Y
));
cbLocale
->
setRelativePosition
(
recti
(
cbLocale
->
getRelativePosition
().
UpperLeftCorner
.
X
,
cbLocale
->
getRelativePosition
().
UpperLeftCorner
.
Y
,
20
+
(
300
*
xScale
)
-
70
,
cbLocale
->
getRelativePosition
().
LowerRightCorner
.
Y
));
recti
tabHelperPos
=
recti
(
0
,
0
,
300
*
xScale
-
50
,
365
*
yScale
-
65
);
tabHelper
->
setRelativePosition
(
tabHelperPos
);
scrTabHelper
->
setRelativePosition
(
recti
(
tabHelperPos
.
LowerRightCorner
.
X
+
2
,
0
,
tabHelperPos
.
LowerRightCorner
.
X
+
22
,
tabHelperPos
.
LowerRightCorner
.
Y
));
s32
tabHelperLastY
=
elmTabHelperLast
->
getRelativePosition
().
LowerRightCorner
.
Y
;
if
(
tabHelperLastY
>
tabHelperPos
.
LowerRightCorner
.
Y
)
{
scrTabHelper
->
setMax
(
tabHelperLastY
-
tabHelperPos
.
LowerRightCorner
.
Y
+
5
);
scrTabHelper
->
setPos
(
0
);
scrTabHelper
->
setVisible
(
true
);
}
else
scrTabHelper
->
setVisible
(
false
);
recti
tabSystemPos
=
recti
(
0
,
0
,
300
*
xScale
-
50
,
365
*
yScale
-
65
);
tabSystem
->
setRelativePosition
(
tabSystemPos
);
scrTabSystem
->
setRelativePosition
(
recti
(
tabSystemPos
.
LowerRightCorner
.
X
+
2
,
0
,
tabSystemPos
.
LowerRightCorner
.
X
+
22
,
tabSystemPos
.
LowerRightCorner
.
Y
));
s32
tabSystemLastY
=
elmTabSystemLast
->
getRelativePosition
().
LowerRightCorner
.
Y
;
if
(
tabSystemLastY
>
tabSystemPos
.
LowerRightCorner
.
Y
)
{
scrTabSystem
->
setMax
(
tabSystemLastY
-
tabSystemPos
.
LowerRightCorner
.
Y
+
5
);
scrTabSystem
->
setPos
(
0
);
scrTabSystem
->
setVisible
(
true
);
}
else
scrTabSystem
->
setVisible
(
false
);
if
(
gameConf
.
resize_popup_menu
)
{
int
width
=
100
*
mainGame
->
xScale
;
...
...
gframe/game.h
View file @
eb52c94b
...
...
@@ -296,12 +296,18 @@ public:
irr
::
gui
::
IGUIListBox
*
lstLog
;
irr
::
gui
::
IGUIButton
*
btnClearLog
;
irr
::
gui
::
IGUIButton
*
btnSaveLog
;
irr
::
gui
::
IGUIWindow
*
tabHelper
;
irr
::
gui
::
IGUIElement
*
elmTabHelperLast
;
irr
::
gui
::
IGUIScrollBar
*
scrTabHelper
;
irr
::
gui
::
IGUICheckBox
*
chkMAutoPos
;
irr
::
gui
::
IGUICheckBox
*
chkSTAutoPos
;
irr
::
gui
::
IGUICheckBox
*
chkRandomPos
;
irr
::
gui
::
IGUICheckBox
*
chkAutoChain
;
irr
::
gui
::
IGUICheckBox
*
chkWaitChain
;
irr
::
gui
::
IGUICheckBox
*
chkQuickAnimation
;
irr
::
gui
::
IGUIWindow
*
tabSystem
;
irr
::
gui
::
IGUIElement
*
elmTabSystemLast
;
irr
::
gui
::
IGUIScrollBar
*
scrTabSystem
;
irr
::
gui
::
IGUICheckBox
*
chkHideSetname
;
irr
::
gui
::
IGUICheckBox
*
chkHideHintButton
;
irr
::
gui
::
IGUICheckBox
*
chkIgnoreDeckChanges
;
...
...
@@ -648,6 +654,7 @@ extern HostInfo game_info;
#define BUTTON_CARD_4 234
#define SCROLL_CARD_SELECT 235
#define BUTTON_CARD_SEL_OK 236
#define TEXT_CARD_LIST_TIP 237
#define BUTTON_CMD_ACTIVATE 240
#define BUTTON_CMD_SUMMON 241
#define BUTTON_CMD_SPSUMMON 242
...
...
@@ -716,9 +723,11 @@ extern HostInfo game_info;
#define BUTTON_BOT_START 340
#define LISTBOX_BOT_LIST 341
#define CHECKBOX_BOT_OLD_RULE 342
#define LISTBOX_SINGLEPLAY_LIST 350
#define BUTTON_LOAD_SINGLEPLAY 351
#define BUTTON_CANCEL_SINGLEPLAY 352
#define LISTBOX_SINGLEPLAY_LIST 343
#define BUTTON_LOAD_SINGLEPLAY 344
#define BUTTON_CANCEL_SINGLEPLAY 345
#define SCROLL_TAB_HELPER 350
#define SCROLL_TAB_SYSTEM 351
#define CHECKBOX_AUTO_SEARCH 360
#define CHECKBOX_ENABLE_SOUND 361
#define CHECKBOX_ENABLE_MUSIC 362
...
...
script
@
d676643a
Subproject commit
cb1c66f4fcb2d7dec7557ac42b1d2b747d4d2ecf
Subproject commit
d676643a3f2c425a9fc380ae92a5a1e3e787f725
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