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
2791e83a
Commit
2791e83a
authored
Apr 07, 2018
by
nanahira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2pick
parent
13eea9a1
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
84 additions
and
4 deletions
+84
-4
gframe/deck_manager.cpp
gframe/deck_manager.cpp
+2
-0
gframe/single_duel.cpp
gframe/single_duel.cpp
+75
-4
gframe/single_duel.h
gframe/single_duel.h
+7
-0
No files found.
gframe/deck_manager.cpp
View file @
2791e83a
...
...
@@ -199,6 +199,7 @@ int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec) {
return
errorcode
;
}
bool
DeckManager
::
LoadSide
(
Deck
&
deck
,
int
*
dbuf
,
int
mainc
,
int
sidec
)
{
/*
std::unordered_map<int, int> pcount;
std::unordered_map<int, int> ncount;
for(size_t i = 0; i < deck.main.size(); ++i)
...
...
@@ -221,6 +222,7 @@ bool DeckManager::LoadSide(Deck& deck, int* dbuf, int mainc, int sidec) {
if(cdit->second != pcount[cdit->first])
return false;
deck = ndeck;
*/
return
true
;
}
FILE
*
DeckManager
::
OpenDeckFile
(
const
wchar_t
*
file
,
const
char
*
mode
)
{
...
...
gframe/single_duel.cpp
View file @
2791e83a
...
...
@@ -19,6 +19,7 @@ SingleDuel::SingleDuel(bool is_match) {
for
(
int
i
=
0
;
i
<
2
;
++
i
)
{
players
[
i
]
=
0
;
ready
[
i
]
=
false
;
pick_deck_saved
[
i
]
=
false
;
}
duel_count
=
0
;
memset
(
match_result
,
0
,
3
);
...
...
@@ -26,6 +27,10 @@ SingleDuel::SingleDuel(bool is_match) {
cache_recorder
=
0
;
replay_recorder
=
0
;
#endif
//2pick
int
cardlist
[
128
];
cardlist
[
0
]
=
89631139
;
deckManager
.
LoadDeck
(
default_deck
,
cardlist
,
1
,
0
);
}
SingleDuel
::~
SingleDuel
()
{
}
...
...
@@ -355,7 +360,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
return
;
if
(
is_ready
)
{
unsigned
int
deckerror
=
0
;
if
(
!
host_info
.
no_check_deck
)
{
/*
if(!host_info.no_check_deck) {
if(deck_error[dp->type]) {
deckerror = (DECKERROR_UNKNOWNCARD << 28) + deck_error[dp->type];
} else {
...
...
@@ -363,7 +368,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
bool allow_tcg = host_info.rule == 1 || host_info.rule == 2;
deckerror = deckManager.CheckDeck(pdeck[dp->type], host_info.lflist, allow_ocg, allow_tcg);
}
}
}
*/
if
(
deckerror
)
{
STOC_HS_PlayerChange
scpc
;
scpc
.
status
=
(
dp
->
type
<<
4
)
|
PLAYERCHANGE_NOTREADY
;
...
...
@@ -447,6 +452,9 @@ void SingleDuel::StartDuel(DuelPlayer* dp) {
hand_result
[
1
]
=
0
;
players
[
0
]
->
state
=
CTOS_HAND_RESULT
;
players
[
1
]
->
state
=
CTOS_HAND_RESULT
;
//reset 2pick deck
pick_deck_saved
[
0
]
=
false
;
pick_deck_saved
[
1
]
=
false
;
}
void
SingleDuel
::
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
{
if
(
res
>
3
)
...
...
@@ -505,8 +513,16 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
Deck
d
=
pdeck
[
0
];
pdeck
[
0
]
=
pdeck
[
1
];
pdeck
[
1
]
=
d
;
SwapPickDeck
();
swapped
=
true
;
}
//2pick deck check
for
(
int
i
=
0
;
i
<
2
;
i
++
)
{
if
(
pick_deck_saved
[
i
])
pdeck
[
i
]
=
pick_deck
[
i
];
else
pdeck
[
i
]
=
default_deck
;
}
dp
->
state
=
CTOS_RESPONSE
;
ReplayHeader
rh
;
rh
.
id
=
0x31707279
;
...
...
@@ -536,8 +552,10 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
set_message_handler
((
message_handler
)
SingleDuel
::
MessageHandler
);
rnd
.
reset
(
seed
);
pduel
=
create_duel
(
rnd
.
rand
());
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
);
set_player_info
(
pduel
,
0
,
host_info
.
start_lp
,
host_info
.
start_hand
,
host_info
.
draw_count
,
!
pick_deck_saved
[
0
]);
set_player_info
(
pduel
,
1
,
host_info
.
start_lp
,
host_info
.
start_hand
,
host_info
.
draw_count
,
!
pick_deck_saved
[
1
]);
pick_deck_saved
[
0
]
=
false
;
pick_deck_saved
[
1
]
=
false
;
int
opt
=
(
int
)
host_info
.
duel_rule
<<
16
;
if
(
host_info
.
no_shuffle_deck
)
opt
|=
DUEL_PSEUDO_SHUFFLE
;
...
...
@@ -648,13 +666,16 @@ void SingleDuel::DuelEndProc() {
Deck
d
=
pdeck
[
0
];
pdeck
[
0
]
=
pdeck
[
1
];
pdeck
[
1
]
=
d
;
SwapPickDeck
();
}
/*
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
);
#ifdef YGOPRO_SERVER_MODE
...
...
@@ -663,6 +684,21 @@ void SingleDuel::DuelEndProc() {
if
(
replay_recorder
)
NetServer
::
SendPacketToPlayer
(
replay_recorder
,
STOC_WAITING_SIDE
);
#endif
//duel start
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_DUEL_START
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
/*
for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
#ifdef YGOPRO_SERVER_MODE
NetServer::ReSendToPlayers(cache_recorder, replay_recorder);
#endif
*/
//choose tp
NetServer
::
SendPacketToPlayer
(
players
[
tp_player
],
STOC_SELECT_TP
);
players
[
1
-
tp_player
]
->
state
=
0xff
;
players
[
tp_player
]
->
state
=
CTOS_TP_RESULT
;
}
}
}
...
...
@@ -699,6 +735,33 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
offset
=
pbuf
;
unsigned
char
engType
=
BufferIO
::
ReadUInt8
(
pbuf
);
switch
(
engType
)
{
//2pick
case
MSG_SAVE_PICK_DECK
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
ReadInt8
(
pbuf
);
int
cardlist
[
128
];
int
counter
=
0
;
Deck
tdeck
;
for
(
int
i
=
0
;
i
<
count
;
i
++
)
{
int
code
=
BufferIO
::
ReadInt32
(
pbuf
);
cardlist
[
counter
++
]
=
code
;
}
deckManager
.
LoadDeck
(
tdeck
,
cardlist
,
count
,
0
);
pick_deck
[
player
]
=
tdeck
;
pick_deck_saved
[
player
]
=
true
;
break
;
}
case
MSG_RESET_TIME
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
int
time
=
BufferIO
::
ReadInt8
(
pbuf
);
if
(
host_info
.
time_limit
)
{
if
(
time
)
time_limit
[
player
]
=
time
;
else
time_limit
[
player
]
=
host_info
.
time_limit
;
}
break
;
}
case
MSG_RETRY
:
{
WaitforResponse
(
last_response
);
NetServer
::
SendBufferToPlayer
(
players
[
last_response
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
...
...
@@ -1935,5 +1998,13 @@ void SingleDuel::SingleTimer(evutil_socket_t fd, short events, void* arg) {
event_del
(
sd
->
etimer
);
}
}
void
SingleDuel
::
SwapPickDeck
()
{
Deck
d
=
pick_deck
[
0
];
pick_deck
[
0
]
=
pick_deck
[
1
];
pick_deck
[
1
]
=
d
;
bool
pick_deck_saved_temp
=
pick_deck_saved
[
0
];
pick_deck_saved
[
0
]
=
pick_deck_saved
[
1
];
pick_deck_saved
[
1
]
=
pick_deck_saved_temp
;
}
}
gframe/single_duel.h
View file @
2791e83a
...
...
@@ -40,8 +40,15 @@ public:
static
int
MessageHandler
(
long
fduel
,
int
type
);
static
void
SingleTimer
(
evutil_socket_t
fd
,
short
events
,
void
*
arg
);
//2pick
void
SwapPickDeck
();
protected:
//2pick
Deck
default_deck
;
Deck
pick_deck
[
2
];
bool
pick_deck_saved
[
2
];
DuelPlayer
*
players
[
2
];
DuelPlayer
*
pplayer
[
2
];
bool
ready
[
2
];
...
...
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