Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
REIKAI
ygopro
Commits
f02cefe0
Commit
f02cefe0
authored
Jan 30, 2012
by
argon.sun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
match
parent
fa14238e
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
245 additions
and
40 deletions
+245
-40
gframe/deck_con.cpp
gframe/deck_con.cpp
+97
-15
gframe/deck_con.h
gframe/deck_con.h
+3
-0
gframe/duelclient.cpp
gframe/duelclient.cpp
+48
-7
gframe/game.cpp
gframe/game.cpp
+4
-1
gframe/game.h
gframe/game.h
+4
-1
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+2
-0
gframe/netserver.cpp
gframe/netserver.cpp
+3
-3
gframe/network.h
gframe/network.h
+3
-0
gframe/single_duel.cpp
gframe/single_duel.cpp
+68
-9
gframe/single_duel.h
gframe/single_duel.h
+6
-1
script/c21143940.lua
script/c21143940.lua
+1
-1
script/c39512984.lua
script/c39512984.lua
+1
-1
strings.conf
strings.conf
+4
-0
system.conf
system.conf
+1
-1
No files found.
gframe/deck_con.cpp
View file @
f02cefe0
...
...
@@ -4,6 +4,7 @@
#include "deck_manager.h"
#include "image_manager.h"
#include "game.h"
#include "duelclient.h"
#include <algorithm>
namespace
ygo
{
...
...
@@ -282,6 +283,25 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
mainGame
->
HideElement
(
mainGame
->
wCategories
);
break
;
}
case
BUTTON_SIDE_OK
:
{
if
(
deckManager
.
current_deck
.
main
.
size
()
!=
pre_mainc
||
deckManager
.
current_deck
.
extra
.
size
()
!=
pre_extrac
||
deckManager
.
current_deck
.
side
.
size
()
!=
pre_sidec
)
{
mainGame
->
env
->
addMessageBox
(
L""
,
dataManager
.
GetSysString
(
1410
));
break
;
}
char
deckbuf
[
1024
];
char
*
pdeck
=
deckbuf
;
BufferIO
::
WriteInt32
(
pdeck
,
deckManager
.
current_deck
.
main
.
size
()
+
deckManager
.
current_deck
.
extra
.
size
());
BufferIO
::
WriteInt32
(
pdeck
,
deckManager
.
current_deck
.
side
.
size
());
for
(
int
i
=
0
;
i
<
deckManager
.
current_deck
.
main
.
size
();
++
i
)
BufferIO
::
WriteInt32
(
pdeck
,
deckManager
.
current_deck
.
main
[
i
]
->
first
);
for
(
int
i
=
0
;
i
<
deckManager
.
current_deck
.
extra
.
size
();
++
i
)
BufferIO
::
WriteInt32
(
pdeck
,
deckManager
.
current_deck
.
extra
[
i
]
->
first
);
for
(
int
i
=
0
;
i
<
deckManager
.
current_deck
.
side
.
size
();
++
i
)
BufferIO
::
WriteInt32
(
pdeck
,
deckManager
.
current_deck
.
side
[
i
]
->
first
);
DuelClient
::
SendBufferToServer
(
CTOS_UPDATE_DECK
,
deckbuf
,
pdeck
-
deckbuf
);
break
;
}
}
break
;
}
...
...
@@ -425,25 +445,87 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if
(
!
is_draging
)
break
;
is_draging
=
false
;
if
((
hovered_pos
==
1
&&
(
draging_pointer
->
second
.
type
&
0x802040
))
||
(
hovered_pos
==
2
&&
!
(
draging_pointer
->
second
.
type
&
0x802040
)))
hovered_pos
=
0
;
if
((
hovered_pos
==
1
||
(
hovered_pos
==
0
&&
click_pos
==
1
))
&&
deckManager
.
current_deck
.
main
.
size
()
<
60
)
{
if
(
hovered_seq
<
deckManager
.
current_deck
.
main
.
size
())
deckManager
.
current_deck
.
main
.
insert
(
deckManager
.
current_deck
.
main
.
begin
()
+
hovered_seq
,
draging_pointer
);
else
deckManager
.
current_deck
.
main
.
push_back
(
draging_pointer
);
}
else
if
((
hovered_pos
==
2
||
(
hovered_pos
==
0
&&
click_pos
==
2
))
&&
deckManager
.
current_deck
.
extra
.
size
()
<
15
)
{
if
(
hovered_seq
<
deckManager
.
current_deck
.
extra
.
size
())
deckManager
.
current_deck
.
extra
.
insert
(
deckManager
.
current_deck
.
extra
.
begin
()
+
hovered_seq
,
draging_pointer
);
else
deckManager
.
current_deck
.
extra
.
push_back
(
draging_pointer
);
}
else
if
((
hovered_pos
==
3
||
(
hovered_pos
==
0
&&
click_pos
==
3
))
&&
deckManager
.
current_deck
.
side
.
size
()
<
15
)
{
if
(
hovered_seq
<
deckManager
.
current_deck
.
side
.
size
())
deckManager
.
current_deck
.
side
.
insert
(
deckManager
.
current_deck
.
side
.
begin
()
+
hovered_seq
,
draging_pointer
);
else
deckManager
.
current_deck
.
side
.
push_back
(
draging_pointer
);
if
(
!
mainGame
->
is_siding
)
{
if
((
hovered_pos
==
1
&&
(
draging_pointer
->
second
.
type
&
0x802040
))
||
(
hovered_pos
==
2
&&
!
(
draging_pointer
->
second
.
type
&
0x802040
)))
hovered_pos
=
0
;
if
((
hovered_pos
==
1
||
(
hovered_pos
==
0
&&
click_pos
==
1
))
&&
deckManager
.
current_deck
.
main
.
size
()
<
60
)
{
if
(
hovered_seq
<
deckManager
.
current_deck
.
main
.
size
()
&&
hovered_pos
)
deckManager
.
current_deck
.
main
.
insert
(
deckManager
.
current_deck
.
main
.
begin
()
+
hovered_seq
,
draging_pointer
);
else
deckManager
.
current_deck
.
main
.
push_back
(
draging_pointer
);
}
else
if
((
hovered_pos
==
2
||
(
hovered_pos
==
0
&&
click_pos
==
2
))
&&
deckManager
.
current_deck
.
extra
.
size
()
<
15
)
{
if
(
hovered_seq
<
deckManager
.
current_deck
.
extra
.
size
()
&&
hovered_pos
)
deckManager
.
current_deck
.
extra
.
insert
(
deckManager
.
current_deck
.
extra
.
begin
()
+
hovered_seq
,
draging_pointer
);
else
deckManager
.
current_deck
.
extra
.
push_back
(
draging_pointer
);
}
else
if
((
hovered_pos
==
3
||
(
hovered_pos
==
0
&&
click_pos
==
3
))
&&
deckManager
.
current_deck
.
side
.
size
()
<
15
)
{
if
(
hovered_seq
<
deckManager
.
current_deck
.
side
.
size
()
&&
hovered_pos
)
deckManager
.
current_deck
.
side
.
insert
(
deckManager
.
current_deck
.
side
.
begin
()
+
hovered_seq
,
draging_pointer
);
else
deckManager
.
current_deck
.
side
.
push_back
(
draging_pointer
);
}
}
else
{
if
((
hovered_pos
==
1
&&
(
draging_pointer
->
second
.
type
&
0x802040
))
||
(
hovered_pos
==
2
&&
!
(
draging_pointer
->
second
.
type
&
0x802040
))
||
hovered_pos
==
4
)
{
if
(
click_pos
==
1
)
deckManager
.
current_deck
.
main
.
push_back
(
draging_pointer
);
else
if
(
click_pos
==
2
)
deckManager
.
current_deck
.
extra
.
push_back
(
draging_pointer
);
else
if
(
click_pos
==
3
)
deckManager
.
current_deck
.
side
.
push_back
(
draging_pointer
);
break
;
}
if
(
hovered_pos
==
1
)
{
if
(
click_pos
==
1
)
{
if
(
hovered_seq
<
deckManager
.
current_deck
.
main
.
size
())
deckManager
.
current_deck
.
main
.
insert
(
deckManager
.
current_deck
.
main
.
begin
()
+
hovered_seq
,
draging_pointer
);
else
deckManager
.
current_deck
.
main
.
push_back
(
draging_pointer
);
}
else
if
(
hovered_seq
<
deckManager
.
current_deck
.
main
.
size
())
{
deckManager
.
current_deck
.
side
.
push_back
(
deckManager
.
current_deck
.
main
[
hovered_seq
]);
deckManager
.
current_deck
.
main
[
hovered_seq
]
=
draging_pointer
;
}
else
deckManager
.
current_deck
.
side
.
push_back
(
draging_pointer
);
}
else
if
(
hovered_pos
==
2
)
{
if
(
click_pos
==
2
)
{
if
(
hovered_seq
<
deckManager
.
current_deck
.
main
.
size
())
deckManager
.
current_deck
.
extra
.
insert
(
deckManager
.
current_deck
.
extra
.
begin
()
+
hovered_seq
,
draging_pointer
);
else
deckManager
.
current_deck
.
extra
.
push_back
(
draging_pointer
);
}
else
if
(
hovered_seq
<
deckManager
.
current_deck
.
extra
.
size
())
{
deckManager
.
current_deck
.
side
.
push_back
(
deckManager
.
current_deck
.
extra
[
hovered_seq
]);
deckManager
.
current_deck
.
extra
[
hovered_seq
]
=
draging_pointer
;
}
else
deckManager
.
current_deck
.
side
.
push_back
(
draging_pointer
);
}
else
if
(
hovered_pos
==
3
||
(
hovered_pos
==
0
&&
click_pos
==
3
))
{
if
(
click_pos
==
3
)
{
if
(
hovered_seq
<
deckManager
.
current_deck
.
side
.
size
())
deckManager
.
current_deck
.
extra
.
insert
(
deckManager
.
current_deck
.
side
.
begin
()
+
hovered_seq
,
draging_pointer
);
else
deckManager
.
current_deck
.
side
.
push_back
(
draging_pointer
);
}
else
if
(
hovered_seq
<
deckManager
.
current_deck
.
side
.
size
())
{
auto
swaping_pointer
=
deckManager
.
current_deck
.
side
[
hovered_seq
];
if
(
click_pos
==
1
)
{
if
(
swaping_pointer
->
second
.
type
&
0x802040
)
deckManager
.
current_deck
.
main
.
push_back
(
draging_pointer
);
else
{
deckManager
.
current_deck
.
main
.
push_back
(
swaping_pointer
);
deckManager
.
current_deck
.
side
[
hovered_seq
]
=
draging_pointer
;
}
}
else
{
if
(
!
(
swaping_pointer
->
second
.
type
&
0x802040
))
deckManager
.
current_deck
.
extra
.
push_back
(
draging_pointer
);
else
{
deckManager
.
current_deck
.
extra
.
push_back
(
swaping_pointer
);
deckManager
.
current_deck
.
side
[
hovered_seq
]
=
draging_pointer
;
}
}
}
else
{
if
(
click_pos
==
1
)
deckManager
.
current_deck
.
main
.
push_back
(
draging_pointer
);
else
deckManager
.
current_deck
.
extra
.
push_back
(
draging_pointer
);
}
}
}
break
;
}
case
irr
:
:
EMIE_RMOUSE_LEFT_UP
:
{
if
(
mainGame
->
wCategories
->
isVisible
())
if
(
mainGame
->
wCategories
->
isVisible
()
||
mainGame
->
is_siding
)
break
;
if
(
hovered_pos
==
0
||
hovered_seq
==
-
1
)
break
;
...
...
gframe/deck_con.h
View file @
f02cefe0
...
...
@@ -33,6 +33,9 @@ public:
bool
is_draging
;
int
dragx
;
int
dragy
;
int
pre_mainc
;
int
pre_extrac
;
int
pre_sidec
;
code_pointer
draging_pointer
;
std
::
unordered_map
<
int
,
int
>*
filterList
;
...
...
gframe/duelclient.cpp
View file @
f02cefe0
...
...
@@ -117,7 +117,7 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) {
mainGame
->
env
->
addMessageBox
(
L""
,
dataManager
.
GetSysString
(
1400
));
mainGame
->
gMutex
.
Unlock
();
}
else
if
(
connect_state
==
2
)
{
if
(
!
mainGame
->
dInfo
.
isStarted
)
{
if
(
!
mainGame
->
dInfo
.
isStarted
&&
!
mainGame
->
is_building
)
{
mainGame
->
btnCreateHost
->
setEnabled
(
true
);
mainGame
->
btnJoinHost
->
setEnabled
(
true
);
mainGame
->
btnJoinCancel
->
setEnabled
(
true
);
...
...
@@ -132,18 +132,14 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) {
mainGame
->
gMutex
.
Unlock
();
}
else
{
mainGame
->
gMutex
.
Lock
();
mainGame
->
stMessage
->
setText
(
dataManager
.
GetSysString
(
1502
));
mainGame
->
env
->
addMessageBox
(
L""
,
dataManager
.
GetSysString
(
1502
));
mainGame
->
btnCreateHost
->
setEnabled
(
true
);
mainGame
->
btnJoinHost
->
setEnabled
(
true
);
mainGame
->
btnJoinCancel
->
setEnabled
(
true
);
mainGame
->
gMutex
.
Unlock
();
mainGame
->
PopupElement
(
mainGame
->
wMessage
);
mainGame
->
localAction
.
Reset
();
mainGame
->
localAction
.
Wait
();
mainGame
->
gMutex
.
Lock
();
mainGame
->
CloseDuelWindow
();
mainGame
->
gMutex
.
Unlock
();
mainGame
->
dInfo
.
isStarted
=
false
;
mainGame
->
is_building
=
false
;
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
menuHandler
);
mainGame
->
ShowElement
(
mainGame
->
wLanWindow
);
}
...
...
@@ -198,6 +194,12 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame
->
gMutex
.
Unlock
();
break
;
}
case
ERRMSG_SIDEERROR
:
{
mainGame
->
gMutex
.
Lock
();
mainGame
->
env
->
addMessageBox
(
L""
,
dataManager
.
GetSysString
(
1408
));
mainGame
->
gMutex
.
Unlock
();
break
;
}
}
break
;
}
...
...
@@ -222,6 +224,35 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
case
STOC_TP_RESULT
:
{
break
;
}
case
STOC_CHANGE_SIDE
:
{
mainGame
->
gMutex
.
Lock
();
mainGame
->
dInfo
.
isStarted
=
false
;
mainGame
->
dField
.
Clear
();
mainGame
->
is_building
=
true
;
mainGame
->
is_siding
=
true
;
mainGame
->
wPhase
->
setVisible
(
false
);
mainGame
->
wDeckEdit
->
setVisible
(
false
);
mainGame
->
wFilter
->
setVisible
(
false
);
mainGame
->
btnSideOK
->
setVisible
(
true
);
mainGame
->
deckBuilder
.
result_string
[
0
]
=
L'0'
;
mainGame
->
deckBuilder
.
result_string
[
1
]
=
0
;
mainGame
->
deckBuilder
.
results
.
clear
();
mainGame
->
deckBuilder
.
is_draging
=
false
;
mainGame
->
deckBuilder
.
pre_mainc
=
deckManager
.
current_deck
.
main
.
size
();
mainGame
->
deckBuilder
.
pre_extrac
=
deckManager
.
current_deck
.
extra
.
size
();
mainGame
->
deckBuilder
.
pre_sidec
=
deckManager
.
current_deck
.
side
.
size
();
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
deckBuilder
);
mainGame
->
gMutex
.
Unlock
();
break
;
}
case
STOC_WAITING_SIDE
:
{
mainGame
->
gMutex
.
Lock
();
mainGame
->
dField
.
Clear
();
mainGame
->
stHintMsg
->
setText
(
dataManager
.
GetSysString
(
1409
));
mainGame
->
stHintMsg
->
setVisible
(
true
);
mainGame
->
gMutex
.
Unlock
();
break
;
}
case
STOC_JOIN_GAME
:
{
STOC_JoinGame
*
pkt
=
(
STOC_JoinGame
*
)
pdata
;
std
::
wstring
str
;
...
...
@@ -252,6 +283,14 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
str
.
append
(
msgbuf
);
}
mainGame
->
gMutex
.
Lock
();
mainGame
->
deckBuilder
.
filterList
=
0
;
for
(
auto
lit
=
deckManager
.
_lfList
.
begin
();
lit
!=
deckManager
.
_lfList
.
end
();
++
lit
)
if
(
lit
->
hash
==
pkt
->
info
.
lflist
)
mainGame
->
deckBuilder
.
filterList
=
lit
->
content
;
if
(
mainGame
->
deckBuilder
.
filterList
==
0
)
mainGame
->
deckBuilder
.
filterList
=
deckManager
.
_lfList
[
0
].
content
;
mainGame
->
stHostSingleDuelist
[
0
]
->
setText
(
L""
);
mainGame
->
stHostSingleDuelist
[
1
]
->
setText
(
L""
);
mainGame
->
SetStaticText
(
mainGame
->
stHostSingleRule
,
180
,
mainGame
->
guiFont
,
(
wchar_t
*
)
str
.
c_str
());
mainGame
->
RefreshDeck
(
mainGame
->
cbDeckSelect
);
if
(
mainGame
->
wCreateHost
->
isVisible
())
...
...
@@ -297,9 +336,11 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame
->
gMutex
.
Lock
();
mainGame
->
dField
.
Clear
();
mainGame
->
dInfo
.
isStarted
=
true
;
mainGame
->
is_building
=
false
;
mainGame
->
wCardImg
->
setVisible
(
true
);
mainGame
->
wInfos
->
setVisible
(
true
);
mainGame
->
wPhase
->
setVisible
(
true
);
mainGame
->
btnSideOK
->
setVisible
(
false
);
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
dField
);
if
(
selftype
!=
1
)
{
BufferIO
::
CopyWStr
(
mainGame
->
stHostSingleDuelist
[
0
]
->
getText
(),
mainGame
->
dInfo
.
hostname
,
20
);
...
...
gframe/game.cpp
View file @
f02cefe0
...
...
@@ -109,7 +109,7 @@ bool Game::Initialize() {
env
->
addStaticText
(
dataManager
.
GetSysString
(
1227
),
rect
<
s32
>
(
20
,
90
,
220
,
110
),
false
,
false
,
wCreateHost
);
cbMatchMode
=
env
->
addComboBox
(
rect
<
s32
>
(
140
,
85
,
300
,
110
),
wCreateHost
);
cbMatchMode
->
addItem
(
dataManager
.
GetSysString
(
1244
));
//
cbMatchMode->addItem(dataManager.GetSysString(1245));
cbMatchMode
->
addItem
(
dataManager
.
GetSysString
(
1245
));
chkEnablePriority
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
20
,
150
,
360
,
170
),
wCreateHost
,
-
1
,
dataManager
.
GetSysString
(
1236
));
env
->
addStaticText
(
dataManager
.
GetSysString
(
1228
),
rect
<
s32
>
(
20
,
120
,
320
,
140
),
false
,
false
,
wCreateHost
);
chkNoCheckDeck
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
20
,
180
,
170
,
200
),
wCreateHost
,
-
1
,
dataManager
.
GetSysString
(
1229
));
...
...
@@ -351,6 +351,8 @@ bool Game::Initialize() {
btnClearDeck
=
env
->
addButton
(
rect
<
s32
>
(
225
,
95
,
290
,
116
),
wDeckEdit
,
BUTTON_CLEAR_DECK
,
dataManager
.
GetSysString
(
1304
));
btnSortDeck
=
env
->
addButton
(
rect
<
s32
>
(
155
,
95
,
220
,
116
),
wDeckEdit
,
BUTTON_SORT_DECK
,
dataManager
.
GetSysString
(
1305
));
btnDBExit
=
env
->
addButton
(
rect
<
s32
>
(
10
,
95
,
90
,
116
),
wDeckEdit
,
BUTTON_DBEXIT
,
dataManager
.
GetSysString
(
1306
));
btnSideOK
=
env
->
addButton
(
rect
<
s32
>
(
510
,
40
,
820
,
80
),
0
,
BUTTON_SIDE_OK
,
dataManager
.
GetSysString
(
1334
));
btnSideOK
->
setVisible
(
false
);
//filters
wFilter
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
610
,
8
,
1020
,
130
),
true
,
false
,
0
,
-
1
,
true
);
wFilter
->
setVisible
(
false
);
...
...
@@ -760,6 +762,7 @@ void Game::CloseDuelWindow() {
wQuery
->
setVisible
(
false
);
wReplayControl
->
setVisible
(
false
);
stHintMsg
->
setVisible
(
false
);
btnSideOK
->
setVisible
(
false
);
lstLog
->
clear
();
logParam
.
clear
();
ClearTextures
();
...
...
gframe/game.h
View file @
f02cefe0
...
...
@@ -108,7 +108,8 @@ public:
bool
ignore_chain
;
bool
is_building
;
bool
is_siding
;
ClientField
dField
;
DeckBuilder
deckBuilder
;
MenuHandler
menuHandler
;
...
...
@@ -274,6 +275,7 @@ public:
irr
::
gui
::
IGUIButton
*
btnSaveDeck
;
irr
::
gui
::
IGUIButton
*
btnSaveDeckAs
;
irr
::
gui
::
IGUIButton
*
btnDBExit
;
irr
::
gui
::
IGUIButton
*
btnSideOK
;
irr
::
gui
::
IGUIEditBox
*
ebDeckname
;
//filter
irr
::
gui
::
IGUIStaticText
*
wFilter
;
...
...
@@ -395,6 +397,7 @@ extern Game* mainGame;
#define BUTTON_SAVE_DECK_AS 305
#define BUTTON_DBEXIT 306
#define BUTTON_SORT_DECK 307
#define BUTTON_SIDE_OK 308
#define COMBOBOX_MAINTYPE 310
#define BUTTON_EFFECT_FILTER 311
#define BUTTON_START_FILTER 312
...
...
gframe/menu_handler.cpp
View file @
f02cefe0
...
...
@@ -154,10 +154,12 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
deckManager
.
LoadDeck
(
mainGame
->
cbDBDecks
->
getItem
(
mainGame
->
cbDBDecks
->
getSelected
()));
mainGame
->
HideElement
(
mainGame
->
wMainMenu
);
mainGame
->
is_building
=
true
;
mainGame
->
is_siding
=
false
;
mainGame
->
wInfos
->
setVisible
(
true
);
mainGame
->
wCardImg
->
setVisible
(
true
);
mainGame
->
wDeckEdit
->
setVisible
(
true
);
mainGame
->
wFilter
->
setVisible
(
true
);
mainGame
->
btnSideOK
->
setVisible
(
false
);
mainGame
->
deckBuilder
.
filterList
=
deckManager
.
_lfList
[
0
].
content
;
mainGame
->
cbDBLFList
->
setSelected
(
0
);
mainGame
->
cbCardType
->
setSelected
(
0
);
...
...
gframe/netserver.cpp
View file @
f02cefe0
...
...
@@ -205,9 +205,9 @@ void NetServer::HandleCTOSPacket(DuelPlayer* dp, char* data, unsigned int len) {
return
;
CTOS_CreateGame
*
pkt
=
(
CTOS_CreateGame
*
)
pdata
;
if
(
pkt
->
info
.
mode
==
MODE_SINGLE
)
{
duel_mode
=
new
SingleDuel
;
}
else
if
(
pkt
->
info
.
mode
==
MODE_
SINGLE
)
{
duel_mode
=
new
SingleDuel
;
duel_mode
=
new
SingleDuel
(
false
)
;
}
else
if
(
pkt
->
info
.
mode
==
MODE_
MATCH
)
{
duel_mode
=
new
SingleDuel
(
true
)
;
}
if
(
pkt
->
info
.
rule
>
3
)
pkt
->
info
.
rule
=
0
;
...
...
gframe/network.h
View file @
f02cefe0
...
...
@@ -163,6 +163,8 @@ public:
#define STOC_SELECT_TP 0x4
#define STOC_HAND_RESULT 0x5
#define STOC_TP_RESULT 0x6
#define STOC_CHANGE_SIDE 0x7
#define STOC_WAITING_SIDE 0x8
#define STOC_CREATE_GAME 0x11
#define STOC_JOIN_GAME 0x12
#define STOC_TYPE_CHANGE 0x13
...
...
@@ -181,6 +183,7 @@ public:
#define ERRMSG_JOINERROR 0x1
#define ERRMSG_DECKERROR 0x2
#define ERRMSG_SIDEERROR 0x3
#define MODE_SINGLE 0x0
#define MODE_MATCH 0x1
...
...
gframe/single_duel.cpp
View file @
f02cefe0
...
...
@@ -8,11 +8,14 @@
namespace
ygo
{
SingleDuel
::
SingleDuel
()
{
SingleDuel
::
SingleDuel
(
bool
is_match
)
{
match_mode
=
is_match
;
for
(
int
i
=
0
;
i
<
2
;
++
i
)
{
players
[
i
]
=
0
;
ready
[
i
]
=
false
;
}
duel_count
=
0
;
memset
(
match_result
,
0
,
3
);
}
SingleDuel
::~
SingleDuel
()
{
}
...
...
@@ -221,12 +224,29 @@ void SingleDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
LeaveGame
(
players
[
pos
]);
}
void
SingleDuel
::
UpdateDeck
(
DuelPlayer
*
dp
,
void
*
pdata
)
{
if
(
dp
->
type
>
1
)
if
(
dp
->
type
>
1
||
ready
[
dp
->
type
]
)
return
;
char
*
deckbuf
=
(
char
*
)
pdata
;
int
mainc
=
BufferIO
::
ReadInt32
(
deckbuf
);
int
sidec
=
BufferIO
::
ReadInt32
(
deckbuf
);
deckManager
.
LoadDeck
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
);
if
(
duel_count
==
0
)
{
deckManager
.
LoadDeck
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
);
}
else
{
if
(
deckManager
.
LoadSide
(
pdeck
[
dp
->
type
],
(
int
*
)
deckbuf
,
mainc
,
sidec
))
{
ready
[
dp
->
type
]
=
true
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_DUEL_START
);
if
(
ready
[
0
]
&&
ready
[
1
])
{
NetServer
::
SendPacketToPlayer
(
players
[
tp_player
],
STOC_SELECT_TP
);
players
[
1
-
tp_player
]
->
state
=
0xff
;
players
[
tp_player
]
->
state
=
CTOS_TP_RESULT
;
}
}
else
{
STOC_ErrorMsg
scem
;
scem
.
msg
=
ERRMSG_SIDEERROR
;
scem
.
code
=
0
;
NetServer
::
SendPacketToPlayer
(
dp
,
STOC_ERROR_MSG
,
scem
);
}
}
}
void
SingleDuel
::
StartDuel
(
DuelPlayer
*
dp
)
{
if
(
dp
!=
host_player
)
...
...
@@ -274,12 +294,14 @@ void SingleDuel::HandResult(DuelPlayer* dp, unsigned char res) {
||
(
hand_result
[
0
]
==
2
&&
hand_result
[
1
]
==
3
)
||
(
hand_result
[
0
]
==
3
&&
hand_result
[
1
]
==
1
))
{
NetServer
::
SendPacketToPlayer
(
players
[
1
],
CTOS_TP_RESULT
);
tp_player
=
1
;
players
[
0
]
->
state
=
0xff
;
players
[
1
]
->
state
=
CTOS_TP_RESULT
;
}
else
{
NetServer
::
SendPacketToPlayer
(
players
[
0
],
CTOS_TP_RESULT
);
players
[
1
]
->
state
=
0xff
;
players
[
0
]
->
state
=
CTOS_TP_RESULT
;
tp_player
=
0
;
}
}
}
...
...
@@ -288,6 +310,8 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
return
;
bool
swapped
=
false
;
mtrandom
rnd
;
pplayer
[
0
]
=
players
[
0
];
pplayer
[
1
]
=
players
[
1
];
if
((
tp
&&
dp
->
type
==
1
)
||
(
!
tp
&&
dp
->
type
==
0
))
{
DuelPlayer
*
p
=
players
[
0
];
players
[
0
]
=
players
[
1
];
...
...
@@ -398,8 +422,37 @@ void SingleDuel::Process() {
}
}
if
(
stop
==
2
)
{
EndDuel
();
NetServer
::
StopServer
();
if
(
!
match_mode
)
{
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_DUEL_END
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
NetServer
::
StopServer
();
}
else
{
int
winc
[
3
]
=
{
0
,
0
,
0
};
for
(
int
i
=
0
;
i
<
duel_count
;
++
i
)
winc
[
match_result
[
i
]]
++
;
if
(
winc
[
0
]
==
2
||
(
winc
[
0
]
==
1
&&
winc
[
2
]
==
2
))
{
}
else
if
(
winc
[
1
]
==
2
||
(
winc
[
1
]
==
1
&&
winc
[
2
]
==
2
))
{
}
else
if
(
winc
[
2
]
==
3
||
(
winc
[
0
]
==
1
&&
winc
[
1
]
==
1
&&
winc
[
2
]
==
1
))
{
}
else
{
if
(
players
[
0
]
!=
pplayer
[
0
])
{
players
[
0
]
=
pplayer
[
0
];
players
[
1
]
=
pplayer
[
1
];
Deck
d
=
pdeck
[
0
];
pdeck
[
0
]
=
pdeck
[
1
];
pdeck
[
1
]
=
d
;
}
ready
[
0
]
=
false
;
ready
[
1
]
=
false
;
players
[
0
]
->
state
=
CTOS_UPDATE_DECK
;
players
[
1
]
->
state
=
CTOS_UPDATE_DECK
;
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_CHANGE_SIDE
);
NetServer
::
SendPacketToPlayer
(
players
[
1
],
STOC_CHANGE_SIDE
);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
SendPacketToPlayer
(
*
oit
,
STOC_WAITING_SIDE
);
}
}
}
}
int
SingleDuel
::
Analyze
(
char
*
msgbuffer
,
unsigned
int
len
)
{
...
...
@@ -444,6 +497,16 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
type
=
BufferIO
::
ReadInt8
(
pbuf
);
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
SendBufferToPlayer
(
players
[
1
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
if
(
player
>
1
)
{
match_result
[
duel_count
++
]
=
2
;
tp_player
=
1
-
tp_player
;
}
else
if
(
players
[
player
]
==
pplayer
[
player
])
{
match_result
[
duel_count
++
]
=
player
;
tp_player
=
1
-
player
;
}
else
{
match_result
[
duel_count
++
]
=
1
-
player
;
tp_player
=
player
;
}
EndDuel
();
return
2
;
}
...
...
@@ -1116,10 +1179,6 @@ void SingleDuel::EndDuel() {
memcpy
(
pbuf
,
last_replay
.
comp_data
,
last_replay
.
comp_size
);
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_REPLAY
,
replaybuf
,
sizeof
(
ReplayHeader
)
+
last_replay
.
comp_size
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_DUEL_END
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
end_duel
(
pduel
);
...
...
gframe/single_duel.h
View file @
f02cefe0
...
...
@@ -9,7 +9,7 @@ namespace ygo {
class
SingleDuel
:
public
DuelMode
{
public:
SingleDuel
();
SingleDuel
(
bool
is_match
);
virtual
~
SingleDuel
();
virtual
void
JoinGame
(
DuelPlayer
*
dp
,
void
*
pdata
,
bool
is_creater
);
virtual
void
LeaveGame
(
DuelPlayer
*
dp
);
...
...
@@ -38,12 +38,17 @@ public:
protected:
DuelPlayer
*
players
[
2
];
DuelPlayer
*
pplayer
[
2
];
bool
ready
[
2
];
Deck
pdeck
[
2
];
unsigned
char
hand_result
[
2
];
unsigned
char
last_response
;
std
::
set
<
DuelPlayer
*>
observers
;
Replay
last_replay
;
bool
match_mode
;
unsigned
char
duel_count
;
unsigned
char
tp_player
;
unsigned
char
match_result
[
3
];
};
}
...
...
script/c21143940.lua
View file @
f02cefe0
...
...
@@ -27,7 +27,7 @@ end
function
c21143940
.
activate
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
)
local
tc
=
Duel
.
GetFirstTarget
()
if
not
tc
:
IsRelateToEffect
(
e
)
then
return
end
Duel
.
SendtoGrave
(
tc
,
REASON_EFFECT
)
if
Duel
.
SendtoGrave
(
tc
,
REASON_EFFECT
)
==
0
then
return
end
Duel
.
Hint
(
HINT_SELECTMSG
,
tp
,
HINTMSG_SPSUMMON
)
local
sg
=
Duel
.
SelectMatchingCard
(
tp
,
c21143940
.
tfilter
,
tp
,
LOCATION_EXTRA
,
0
,
1
,
1
,
nil
,
tc
:
GetAttribute
(),
e
,
tp
)
if
sg
:
GetCount
()
>
0
then
...
...
script/c39512984.lua
View file @
f02cefe0
...
...
@@ -32,7 +32,7 @@ function c39512984.splimit(e,se,sp,st)
return
not
e
:
GetHandler
():
IsLocation
(
LOCATION_EXTRA
)
or
bit
.
band
(
st
,
SUMMON_TYPE_FUSION
)
==
SUMMON_TYPE_FUSION
end
function
c39512984
.
atkup
(
e
,
c
)
return
Duel
.
GetMatchingGroupCount
(
Card
.
IsSetCard
,
c
:
GetControler
(),
LOCATION_GRAVE
,
0
,
nil
,
0x
10
47
)
*
100
return
Duel
.
GetMatchingGroupCount
(
Card
.
IsSetCard
,
c
:
GetControler
(),
LOCATION_GRAVE
,
0
,
nil
,
0x47
)
*
100
end
function
c39512984
.
filter
(
c
)
return
c
:
IsLevelBelow
(
7
)
and
c
:
IsSetCard
(
0x1047
)
and
c
:
IsType
(
TYPE_FUSION
)
and
c
:
IsAbleToRemoveAsCost
()
...
...
strings.conf
View file @
f02cefe0
...
...
@@ -282,6 +282,7 @@
!
system
1331
额外卡组:
!
system
1332
副卡组:
!
system
1333
搜索结果:
!
system
1334
副卡组更换完成
!
system
1340
是否保存录像?
!
system
1341
保存
!
system
1342
录像文件:
...
...
@@ -303,6 +304,9 @@
!
system
1405
主机拒绝了连接。
!
system
1406
无效卡组。
!
system
1407
「%
ls
」的数量不符合当前设定。
!
system
1408
更换副卡组失败。
!
system
1409
等待更换副卡组中...
!
system
1410
卡组数量与先前不符合。
!
system
1500
决斗结束。
!
system
1501
录像结束。
!
system
1502
连接已断开。
...
...
system.conf
View file @
f02cefe0
...
...
@@ -7,5 +7,5 @@ lastdeck = tgagent
textfont
=
c
:/
windows
/
fonts
/
simsun
.
ttc
numfont
=
c
:/
windows
/
fonts
/
arialbd
.
ttf
serverport
=
7911
lastip
=
192
.
168
.
2
.
100
lastip
=
192
.
168
.
3
.
235
lastport
=
7911
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