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
9a360a96
Commit
9a360a96
authored
Apr 07, 2018
by
nanahira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
save
parent
9f232522
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
114 additions
and
9 deletions
+114
-9
2pick/pick.lua
2pick/pick.lua
+4
-6
gframe/deck_manager.cpp
gframe/deck_manager.cpp
+49
-1
gframe/deck_manager.h
gframe/deck_manager.h
+2
-0
gframe/single_duel.cpp
gframe/single_duel.cpp
+58
-2
gframe/single_duel.h
gframe/single_duel.h
+1
-0
No files found.
2pick/pick.lua
View file @
9a360a96
...
...
@@ -100,11 +100,9 @@ function Auxiliary.LoadCardPools()
end
end
function
Auxiliary
.
SaveDeck
()
for
p
=
0
,
1
do
local
g
=
Duel
.
GetFieldGroup
(
p
,
0xff
,
0
)
Duel
.
SavePickDeck
(
p
,
g
)
end
function
Auxiliary
.
SaveDeck
(
p
)
local
g
=
Duel
.
GetFieldGroup
(
p
,
0xff
,
0
)
Duel
.
SavePickDeck
(
p
,
g
)
end
function
Auxiliary
.
SinglePick
(
p
,
list
,
count
,
ex_list
,
ex_count
,
copy
,
lv_diff
,
fixed
)
if
not
Duel
.
IsPlayerNeedToPickDeck
(
p
)
then
return
end
...
...
@@ -238,9 +236,9 @@ function Auxiliary.StartPick(e)
Auxiliary
.
SinglePick
(
p
,
special_hanoi_force
,
1
,
nil
,
nil
,
true
)
end
Auxiliary
.
SaveDeck
()
for
p
=
0
,
1
do
if
Duel
.
IsPlayerNeedToPickDeck
(
p
)
then
Auxiliary
.
SaveDeck
(
p
)
Duel
.
ShuffleDeck
(
p
)
Duel
.
ResetTimeLimit
(
p
)
end
...
...
gframe/deck_manager.cpp
View file @
9a360a96
...
...
@@ -248,7 +248,27 @@ bool DeckManager::LoadDeck(const wchar_t* file) {
int
cardlist
[
128
];
bool
is_side
=
false
;
char
linebuf
[
256
];
int
win_count
=
0
;
int
lose_count
=
0
;
while
(
fgets
(
linebuf
,
256
,
fp
)
&&
ct
<
128
)
{
if
(
linebuf
[
0
]
==
'&'
)
{
win_count
++
;
if
(
win_count
>=
5
)
{
fclose
(
fp
);
DeleteDeck
(
current_deck
,
file
);
return
false
;
}
continue
;
}
if
(
linebuf
[
0
]
==
'$'
)
{
lose_count
++
;
if
(
lose_count
>=
3
)
{
fclose
(
fp
);
DeleteDeck
(
current_deck
,
file
);
return
false
;
}
continue
;
}
if
(
linebuf
[
0
]
==
'!'
)
{
is_side
=
true
;
continue
;
...
...
@@ -264,7 +284,15 @@ bool DeckManager::LoadDeck(const wchar_t* file) {
else
mainc
++
;
}
fclose
(
fp
);
LoadDeck
(
current_deck
,
cardlist
,
mainc
,
sidec
);
if
(
LoadDeck
(
current_deck
,
cardlist
,
mainc
,
sidec
)
==
0
)
{
/*
FILE* fp_a = OpenDeckFile(localfile, "a");
if(fp_a) {
fprintf(fp_a, "&\n");
fclose(fp_a);
}
*/
}
return
true
;
}
bool
DeckManager
::
SaveDeck
(
Deck
&
deck
,
const
wchar_t
*
name
)
{
...
...
@@ -298,4 +326,24 @@ bool DeckManager::DeleteDeck(Deck& deck, const wchar_t* name) {
return
result
==
0
;
#endif
}
bool
DeckManager
::
AddWinMark
(
Deck
&
deck
,
const
wchar_t
*
name
)
{
wchar_t
file
[
64
];
myswprintf
(
file
,
L"./deck/%ls.ydk"
,
name
);
FILE
*
fp
=
OpenDeckFile
(
file
,
"a"
);
if
(
!
fp
)
return
false
;
fprintf
(
fp
,
"&
\n
"
);
fclose
(
fp
);
return
true
;
}
bool
DeckManager
::
AddLoseMark
(
Deck
&
deck
,
const
wchar_t
*
name
)
{
wchar_t
file
[
64
];
myswprintf
(
file
,
L"./deck/%ls.ydk"
,
name
);
FILE
*
fp
=
OpenDeckFile
(
file
,
"a"
);
if
(
!
fp
)
return
false
;
fprintf
(
fp
,
"$
\n
"
);
fclose
(
fp
);
return
true
;
}
}
gframe/deck_manager.h
View file @
9a360a96
...
...
@@ -44,6 +44,8 @@ public:
bool
LoadDeck
(
const
wchar_t
*
file
);
bool
SaveDeck
(
Deck
&
deck
,
const
wchar_t
*
name
);
bool
DeleteDeck
(
Deck
&
deck
,
const
wchar_t
*
name
);
bool
AddWinMark
(
Deck
&
deck
,
const
wchar_t
*
name
);
bool
AddLoseMark
(
Deck
&
deck
,
const
wchar_t
*
name
);
};
extern
DeckManager
deckManager
;
...
...
gframe/single_duel.cpp
View file @
9a360a96
...
...
@@ -273,7 +273,18 @@ void SingleDuel::LeaveGame(DuelPlayer* dp) {
#ifdef YGOPRO_SERVER_MODE
NetServer
::
ReSendToPlayers
(
cache_recorder
,
replay_recorder
);
#endif
if
(
dp
==
pplayer
[
0
])
{
match_result
[
0
]
=
1
;
match_result
[
1
]
=
1
;
match_result
[
2
]
=
1
;
}
else
{
match_result
[
0
]
=
0
;
match_result
[
1
]
=
0
;
match_result
[
2
]
=
0
;
}
duel_count
=
3
;
EndDuel
();
CountPickResult
();
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_DUEL_END
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
...
...
@@ -455,6 +466,18 @@ void SingleDuel::StartDuel(DuelPlayer* dp) {
//reset 2pick deck
pick_deck_saved
[
0
]
=
false
;
pick_deck_saved
[
1
]
=
false
;
wchar_t
pname_0
[
20
];
wchar_t
pname_1
[
20
];
BufferIO
::
CopyWStr
(
players
[
0
]
->
name
,
pname_0
,
20
);
BufferIO
::
CopyWStr
(
players
[
1
]
->
name
,
pname_1
,
20
);
if
(
deckManager
.
LoadDeck
(
pname_0
)){
pick_deck_saved
[
0
]
=
true
;
pick_deck
[
0
]
=
deckManager
.
current_deck
;
}
if
(
deckManager
.
LoadDeck
(
pname_1
)){
pick_deck_saved
[
1
]
=
true
;
pick_deck
[
1
]
=
deckManager
.
current_deck
;
}
}
void
SingleDuel
::
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
{
if
(
res
>
3
)
...
...
@@ -554,8 +577,6 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
pduel
=
create_duel
(
rnd
.
rand
());
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
;
...
...
@@ -633,6 +654,7 @@ void SingleDuel::Process() {
}
void
SingleDuel
::
DuelEndProc
()
{
if
(
!
match_mode
)
{
CountPickResult
();
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_DUEL_END
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
...
...
@@ -649,6 +671,7 @@ void SingleDuel::DuelEndProc() {
||
(
winc
[
0
]
==
2
||
(
winc
[
0
]
==
1
&&
winc
[
2
]
==
2
))
||
(
winc
[
1
]
==
2
||
(
winc
[
1
]
==
1
&&
winc
[
2
]
==
2
))
||
(
winc
[
2
]
==
3
||
(
winc
[
0
]
==
1
&&
winc
[
1
]
==
1
&&
winc
[
2
]
==
1
))
)
{
CountPickResult
();
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_DUEL_END
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
...
...
@@ -749,6 +772,9 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
deckManager
.
LoadDeck
(
tdeck
,
cardlist
,
count
,
0
);
pick_deck
[
player
]
=
tdeck
;
pick_deck_saved
[
player
]
=
true
;
wchar_t
pname
[
20
];
BufferIO
::
CopyWStr
(
players
[
player
]
->
name
,
pname
,
20
);
deckManager
.
SaveDeck
(
tdeck
,
pname
);
break
;
}
case
MSG_RESET_TIME
:
{
...
...
@@ -2008,5 +2034,35 @@ void SingleDuel::SwapPickDeck() {
pick_deck_saved
[
0
]
=
pick_deck_saved
[
1
];
pick_deck_saved
[
1
]
=
pick_deck_saved_temp
;
}
void
SingleDuel
::
CountPickResult
()
{
if
(
players
[
0
]
!=
pplayer
[
0
])
{
players
[
0
]
=
pplayer
[
0
];
players
[
1
]
=
pplayer
[
1
];
players
[
0
]
->
type
=
0
;
players
[
1
]
->
type
=
1
;
Deck
d
=
pdeck
[
0
];
pdeck
[
0
]
=
pdeck
[
1
];
pdeck
[
1
]
=
d
;
SwapPickDeck
();
}
if
(
!
pick_deck_saved
[
0
]
||
!
pick_deck_saved
[
1
])
return
;
int
winc
[
3
]
=
{
0
,
0
,
0
};
for
(
int
i
=
0
;
i
<
duel_count
;
++
i
)
winc
[
match_result
[
i
]]
++
;
int
winner
;
if
(
winc
[
0
]
>
winc
[
1
])
winner
=
0
;
else
if
(
winc
[
1
]
>
winc
[
0
])
winner
=
1
;
else
return
;
wchar_t
pname_win
[
20
];
wchar_t
pname_lose
[
20
];
BufferIO
::
CopyWStr
(
players
[
winner
]
->
name
,
pname_win
,
20
);
BufferIO
::
CopyWStr
(
players
[
1
-
winner
]
->
name
,
pname_lose
,
20
);
deckManager
.
AddWinMark
(
pick_deck
[
winner
],
pname_win
);
deckManager
.
AddLoseMark
(
pick_deck
[
1
-
winner
],
pname_lose
);
}
}
gframe/single_duel.h
View file @
9a360a96
...
...
@@ -42,6 +42,7 @@ public:
static
void
SingleTimer
(
evutil_socket_t
fd
,
short
events
,
void
*
arg
);
//2pick
void
SwapPickDeck
();
void
CountPickResult
();
protected:
//2pick
...
...
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