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
赤子奈落
ygopro
Commits
3a6724a5
Commit
3a6724a5
authored
Oct 27, 2024
by
wind2009
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'upstream/master' into develop-nanahira
parents
fc09d5e9
1ff39351
Changes
11
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
185 additions
and
180 deletions
+185
-180
gframe/client_field.cpp
gframe/client_field.cpp
+2
-2
gframe/data_manager.cpp
gframe/data_manager.cpp
+88
-87
gframe/data_manager.h
gframe/data_manager.h
+21
-19
gframe/deck_con.cpp
gframe/deck_con.cpp
+6
-6
gframe/event_handler.cpp
gframe/event_handler.cpp
+7
-4
gframe/game.cpp
gframe/game.cpp
+2
-2
gframe/network.h
gframe/network.h
+19
-20
gframe/replay_mode.cpp
gframe/replay_mode.cpp
+1
-1
gframe/single_duel.h
gframe/single_duel.h
+18
-18
gframe/single_mode.cpp
gframe/single_mode.cpp
+3
-3
gframe/tag_duel.h
gframe/tag_duel.h
+18
-18
No files found.
gframe/client_field.cpp
View file @
3a6724a5
...
...
@@ -1572,10 +1572,10 @@ void ClientField::UpdateDeclarableList() {
if
(
ancard
.
size
())
return
;
}
for
(
auto
cit
=
dataManager
.
strings_begin
;
cit
!=
dataManager
.
strings_end
;
++
cit
)
{
for
(
auto
cit
=
dataManager
.
strings_begin
();
cit
!=
dataManager
.
strings_end
()
;
++
cit
)
{
if
(
cit
->
second
.
name
.
find
(
pname
)
!=
std
::
wstring
::
npos
)
{
auto
cp
=
dataManager
.
GetCodePointer
(
cit
->
first
);
if
(
cp
==
dataManager
.
datas_end
)
if
(
cp
==
dataManager
.
datas_end
()
)
continue
;
//datas.alias can be double card names or alias
if
(
is_declarable
(
cp
->
second
,
declare_opcodes
))
{
...
...
gframe/data_manager.cpp
View file @
3a6724a5
This diff is collapsed.
Click to expand it.
gframe/data_manager.h
View file @
3a6724a5
...
...
@@ -2,10 +2,9 @@
#define DATAMANAGER_H
#include "config.h"
#include "sqlite3.h"
#include "spmemvfs/spmemvfs.h"
#include "client_card.h"
#include <unordered_map>
#include <sqlite3.h>
#include "client_card.h"
namespace
ygo
{
constexpr
int
MAX_STRING_ID
=
0x7ff
;
...
...
@@ -14,25 +13,31 @@ namespace ygo {
class
DataManager
{
public:
DataManager
();
bool
ReadDB
(
sqlite3
*
pDB
);
bool
LoadDB
(
const
wchar_t
*
wfile
);
bool
LoadStrings
(
const
char
*
file
);
bool
LoadStrings
(
IReadFile
*
reader
);
void
ReadStringConfLine
(
const
char
*
linebuf
);
bool
Error
(
s
pmemvfs_db_t
*
pDB
,
sqlite3_stmt
*
pStmt
=
0
);
bool
GetData
(
unsigned
int
code
,
CardData
*
pData
);
bool
Error
(
s
qlite3
*
pDB
,
sqlite3_stmt
*
pStmt
=
nullptr
);
code_pointer
GetCodePointer
(
unsigned
int
code
)
const
;
string_pointer
GetStringPointer
(
unsigned
int
code
)
const
;
bool
GetString
(
unsigned
int
code
,
CardString
*
pStr
);
const
wchar_t
*
GetName
(
unsigned
int
code
);
const
wchar_t
*
GetText
(
unsigned
int
code
);
const
wchar_t
*
GetDesc
(
unsigned
int
strCode
);
const
wchar_t
*
GetSysString
(
int
code
);
const
wchar_t
*
GetVictoryString
(
int
code
);
const
wchar_t
*
GetCounterName
(
int
code
);
const
wchar_t
*
GetSetName
(
int
code
);
std
::
vector
<
unsigned
int
>
GetSetCodes
(
std
::
wstring
setname
);
code_pointer
datas_begin
();
code_pointer
datas_end
();
string_pointer
strings_begin
();
string_pointer
strings_end
();
bool
GetData
(
unsigned
int
code
,
CardData
*
pData
)
const
;
bool
GetString
(
unsigned
int
code
,
CardString
*
pStr
)
const
;
const
wchar_t
*
GetName
(
unsigned
int
code
)
const
;
const
wchar_t
*
GetText
(
unsigned
int
code
)
const
;
const
wchar_t
*
GetDesc
(
unsigned
int
strCode
)
const
;
const
wchar_t
*
GetSysString
(
int
code
)
const
;
const
wchar_t
*
GetVictoryString
(
int
code
)
const
;
const
wchar_t
*
GetCounterName
(
int
code
)
const
;
const
wchar_t
*
GetSetName
(
int
code
)
const
;
std
::
vector
<
unsigned
int
>
GetSetCodes
(
std
::
wstring
setname
)
const
;
const
wchar_t
*
GetNumString
(
int
num
,
bool
bracket
=
false
);
const
wchar_t
*
FormatLocation
(
int
location
,
int
sequence
);
const
wchar_t
*
FormatLocation
(
int
location
,
int
sequence
)
const
;
const
wchar_t
*
FormatAttribute
(
int
attribute
);
const
wchar_t
*
FormatRace
(
int
race
);
const
wchar_t
*
FormatType
(
int
type
);
...
...
@@ -43,10 +48,7 @@ public:
std
::
unordered_map
<
unsigned
int
,
std
::
wstring
>
_victoryStrings
;
std
::
unordered_map
<
unsigned
int
,
std
::
wstring
>
_setnameStrings
;
std
::
unordered_map
<
unsigned
int
,
std
::
wstring
>
_sysStrings
;
code_pointer
datas_begin
;
code_pointer
datas_end
;
string_pointer
strings_begin
;
string_pointer
strings_end
;
char
errmsg
[
512
]{};
wchar_t
numStrings
[
301
][
4
]{};
wchar_t
numBuffer
[
6
]{};
...
...
gframe/deck_con.cpp
View file @
3a6724a5
...
...
@@ -1058,7 +1058,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
dragx
=
event
.
MouseInput
.
X
;
dragy
=
event
.
MouseInput
.
Y
;
draging_pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
if
(
draging_pointer
==
dataManager
.
datas_end
)
if
(
draging_pointer
==
dataManager
.
datas_end
()
)
break
;
if
(
hovered_pos
==
4
)
{
if
(
!
check_limit
(
draging_pointer
))
...
...
@@ -1112,7 +1112,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if
(
hovered_pos
==
0
||
hovered_seq
==
-
1
)
break
;
auto
pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
if
(
pointer
==
dataManager
.
datas_end
)
if
(
pointer
==
dataManager
.
datas_end
()
)
break
;
soundManager
.
PlaySoundEffect
(
SOUND_CARD_DROP
);
if
(
hovered_pos
==
1
)
{
...
...
@@ -1147,7 +1147,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
pop_side
(
hovered_seq
);
}
else
{
auto
pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
if
(
pointer
==
dataManager
.
datas_end
)
if
(
pointer
==
dataManager
.
datas_end
()
)
break
;
if
(
!
check_limit
(
pointer
))
break
;
...
...
@@ -1182,7 +1182,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if
(
is_draging
)
break
;
auto
pointer
=
dataManager
.
GetCodePointer
(
hovered_code
);
if
(
pointer
==
dataManager
.
datas_end
)
if
(
pointer
==
dataManager
.
datas_end
()
)
break
;
if
(
!
check_limit
(
pointer
))
break
;
...
...
@@ -1452,10 +1452,10 @@ void DeckBuilder::FilterCards() {
query_elements
.
push_back
(
element
);
}
}
for
(
code_pointer
ptr
=
dataManager
.
datas_begin
;
ptr
!=
dataManager
.
datas_end
;
++
ptr
)
{
for
(
code_pointer
ptr
=
dataManager
.
datas_begin
();
ptr
!=
dataManager
.
datas_end
()
;
++
ptr
)
{
const
CardDataC
&
data
=
ptr
->
second
;
auto
strpointer
=
dataManager
.
GetStringPointer
(
ptr
->
first
);
if
(
strpointer
==
dataManager
.
strings_end
)
if
(
strpointer
==
dataManager
.
strings_end
()
)
continue
;
const
CardString
&
text
=
strpointer
->
second
;
if
(
data
.
type
&
TYPE_TOKEN
)
...
...
gframe/event_handler.cpp
View file @
3a6724a5
...
...
@@ -2586,11 +2586,14 @@ void ClientField::ShowCardInfoInList(ClientCard* pcard, irr::gui::IGUIElement* e
}
}
void
ClientField
::
SetResponseSelectedCards
()
const
{
unsigned
char
respbuf
[
SIZE_RETURN_VALUE
];
respbuf
[
0
]
=
selected_cards
.
size
();
for
(
size_t
i
=
0
;
i
<
selected_cards
.
size
();
++
i
)
unsigned
char
respbuf
[
SIZE_RETURN_VALUE
]{};
int
len
=
(
int
)
selected_cards
.
size
();
if
(
len
>
UINT8_MAX
)
len
=
UINT8_MAX
;
respbuf
[
0
]
=
(
unsigned
char
)
len
;
for
(
int
i
=
0
;
i
<
len
;
++
i
)
respbuf
[
i
+
1
]
=
selected_cards
[
i
]
->
select_seq
;
DuelClient
::
SetResponseB
(
respbuf
,
selected_cards
.
size
()
+
1
);
DuelClient
::
SetResponseB
(
respbuf
,
len
+
1
);
}
void
ClientField
::
SetResponseSelectedOption
()
const
{
if
(
mainGame
->
dInfo
.
curMsg
==
MSG_SELECT_OPTION
)
{
...
...
gframe/game.cpp
View file @
3a6724a5
...
...
@@ -1823,7 +1823,7 @@ void Game::ShowCardInfo(int code, bool resize) {
return
;
wchar_t
formatBuffer
[
256
];
auto
cit
=
dataManager
.
GetCodePointer
(
code
);
bool
is_valid
=
(
cit
!=
dataManager
.
datas_end
);
bool
is_valid
=
(
cit
!=
dataManager
.
datas_end
()
);
imgCard
->
setImage
(
imageManager
.
GetTexture
(
code
,
true
));
if
(
is_valid
)
{
auto
&
cd
=
cit
->
second
;
...
...
@@ -1840,7 +1840,7 @@ void Game::ShowCardInfo(int code, bool resize) {
if
(
is_valid
&&
!
gameConf
.
hide_setname
)
{
auto
&
cd
=
cit
->
second
;
auto
target
=
cit
;
if
(
cd
.
alias
&&
dataManager
.
GetCodePointer
(
cd
.
alias
)
!=
dataManager
.
datas_end
)
{
if
(
cd
.
alias
&&
dataManager
.
GetCodePointer
(
cd
.
alias
)
!=
dataManager
.
datas_end
()
)
{
target
=
dataManager
.
GetCodePointer
(
cd
.
alias
);
}
if
(
target
->
second
.
setcode
[
0
])
{
...
...
gframe/network.h
View file @
3a6724a5
...
...
@@ -208,26 +208,25 @@ inline unsigned int GetPosition(unsigned char* qbuf, int offset) {
class
DuelMode
{
public:
virtual
~
DuelMode
()
{}
virtual
void
Chat
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
{}
virtual
void
JoinGame
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
bool
is_creater
)
{}
virtual
void
LeaveGame
(
DuelPlayer
*
dp
)
{}
virtual
void
ToDuelist
(
DuelPlayer
*
dp
)
{}
virtual
void
ToObserver
(
DuelPlayer
*
dp
)
{}
virtual
void
PlayerReady
(
DuelPlayer
*
dp
,
bool
is_ready
)
{}
virtual
void
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
)
{}
virtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
{}
virtual
void
StartDuel
(
DuelPlayer
*
dp
)
{}
virtual
void
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
{}
virtual
void
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
)
{}
virtual
void
Process
()
{}
virtual
int
Analyze
(
char
*
msgbuffer
,
unsigned
int
len
)
{
return
0
;
}
virtual
void
Surrender
(
DuelPlayer
*
dp
)
{}
virtual
void
GetResponse
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
unsigned
int
len
)
{}
virtual
void
TimeConfirm
(
DuelPlayer
*
dp
)
{}
virtual
void
EndDuel
()
{}
DuelMode
()
=
default
;
virtual
~
DuelMode
()
=
default
;
virtual
void
Chat
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
=
0
;
virtual
void
JoinGame
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
bool
is_creater
)
=
0
;
virtual
void
LeaveGame
(
DuelPlayer
*
dp
)
=
0
;
virtual
void
ToDuelist
(
DuelPlayer
*
dp
)
=
0
;
virtual
void
ToObserver
(
DuelPlayer
*
dp
)
=
0
;
virtual
void
PlayerReady
(
DuelPlayer
*
dp
,
bool
is_ready
)
=
0
;
virtual
void
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
)
=
0
;
virtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
=
0
;
virtual
void
StartDuel
(
DuelPlayer
*
dp
)
=
0
;
virtual
void
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
=
0
;
virtual
void
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
)
=
0
;
virtual
void
Process
()
=
0
;
virtual
int
Analyze
(
unsigned
char
*
msgbuffer
,
unsigned
int
len
)
=
0
;
virtual
void
Surrender
(
DuelPlayer
*
dp
)
=
0
;
virtual
void
GetResponse
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
unsigned
int
len
)
=
0
;
virtual
void
TimeConfirm
(
DuelPlayer
*
dp
)
=
0
;
virtual
void
EndDuel
()
=
0
;
public:
event
*
etimer
{
nullptr
};
...
...
gframe/replay_mode.cpp
View file @
3a6724a5
...
...
@@ -236,7 +236,7 @@ bool ReplayMode::StartDuel() {
}
cur_replay
.
ReadData
(
filename
,
slen
);
filename
[
slen
]
=
0
;
if
(
!
preload_script
(
pduel
,
filename
,
0
))
{
if
(
!
preload_script
(
pduel
,
filename
))
{
return
false
;
}
}
...
...
gframe/single_duel.h
View file @
3a6724a5
...
...
@@ -10,24 +10,24 @@ namespace ygo {
class
SingleDuel
:
public
DuelMode
{
public:
SingleDuel
(
bool
is_match
);
virtual
~
SingleDuel
()
;
v
irtual
void
Chat
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
;
v
irtual
void
JoinGame
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
bool
is_creater
)
;
v
irtual
void
LeaveGame
(
DuelPlayer
*
dp
)
;
v
irtual
void
ToDuelist
(
DuelPlayer
*
dp
)
;
v
irtual
void
ToObserver
(
DuelPlayer
*
dp
)
;
v
irtual
void
PlayerReady
(
DuelPlayer
*
dp
,
bool
ready
)
;
v
irtual
void
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
)
;
v
irtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
;
v
irtual
void
StartDuel
(
DuelPlayer
*
dp
)
;
v
irtual
void
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
;
v
irtual
void
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
)
;
v
irtual
void
Process
()
;
v
irtual
void
Surrender
(
DuelPlayer
*
dp
)
;
virtual
int
Analyze
(
unsigned
char
*
msgbuffer
,
unsigned
int
len
)
;
v
irtual
void
GetResponse
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
unsigned
int
len
)
;
v
irtual
void
TimeConfirm
(
DuelPlayer
*
dp
)
;
v
irtual
void
EndDuel
()
;
~
SingleDuel
()
override
;
v
oid
Chat
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
override
;
v
oid
JoinGame
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
bool
is_creater
)
override
;
v
oid
LeaveGame
(
DuelPlayer
*
dp
)
override
;
v
oid
ToDuelist
(
DuelPlayer
*
dp
)
override
;
v
oid
ToObserver
(
DuelPlayer
*
dp
)
override
;
v
oid
PlayerReady
(
DuelPlayer
*
dp
,
bool
ready
)
override
;
v
oid
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
)
override
;
v
oid
UpdateDeck
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
override
;
v
oid
StartDuel
(
DuelPlayer
*
dp
)
override
;
v
oid
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
override
;
v
oid
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
)
override
;
v
oid
Process
()
override
;
v
oid
Surrender
(
DuelPlayer
*
dp
)
override
;
int
Analyze
(
unsigned
char
*
msgbuffer
,
unsigned
int
len
)
override
;
v
oid
GetResponse
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
unsigned
int
len
)
override
;
v
oid
TimeConfirm
(
DuelPlayer
*
dp
)
override
;
v
oid
EndDuel
()
override
;
void
DuelEndProc
();
void
WaitforResponse
(
int
playerid
);
...
...
gframe/single_mode.cpp
View file @
3a6724a5
...
...
@@ -63,11 +63,11 @@ int SingleMode::SinglePlayThread() {
if
(
open_file
)
{
open_file
=
false
;
slen
=
BufferIO
::
EncodeUTF8
(
open_file_name
,
filename
);
if
(
!
preload_script
(
pduel
,
filename
,
0
))
{
if
(
!
preload_script
(
pduel
,
filename
))
{
wchar_t
fname
[
256
];
myswprintf
(
fname
,
L"./single/%ls"
,
open_file_name
);
slen
=
BufferIO
::
EncodeUTF8
(
fname
,
filename
);
if
(
!
preload_script
(
pduel
,
filename
,
0
))
if
(
!
preload_script
(
pduel
,
filename
))
slen
=
0
;
}
}
else
{
...
...
@@ -75,7 +75,7 @@ int SingleMode::SinglePlayThread() {
wchar_t
fname
[
256
];
myswprintf
(
fname
,
L"./single/%ls"
,
name
);
slen
=
BufferIO
::
EncodeUTF8
(
fname
,
filename
);
if
(
!
preload_script
(
pduel
,
filename
,
0
))
if
(
!
preload_script
(
pduel
,
filename
))
slen
=
0
;
}
if
(
slen
==
0
)
{
...
...
gframe/tag_duel.h
View file @
3a6724a5
...
...
@@ -10,24 +10,24 @@ namespace ygo {
class
TagDuel
:
public
DuelMode
{
public:
TagDuel
();
virtual
~
TagDuel
()
;
v
irtual
void
Chat
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
;
v
irtual
void
JoinGame
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
bool
is_creater
)
;
v
irtual
void
LeaveGame
(
DuelPlayer
*
dp
)
;
v
irtual
void
ToDuelist
(
DuelPlayer
*
dp
)
;
v
irtual
void
ToObserver
(
DuelPlayer
*
dp
)
;
v
irtual
void
PlayerReady
(
DuelPlayer
*
dp
,
bool
ready
)
;
v
irtual
void
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
)
;
v
irtual
void
UpdateDeck
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
;
v
irtual
void
StartDuel
(
DuelPlayer
*
dp
)
;
v
irtual
void
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
;
v
irtual
void
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
)
;
v
irtual
void
Process
()
;
v
irtual
void
Surrender
(
DuelPlayer
*
dp
)
;
virtual
int
Analyze
(
unsigned
char
*
msgbuffer
,
unsigned
int
len
)
;
v
irtual
void
GetResponse
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
unsigned
int
len
)
;
v
irtual
void
TimeConfirm
(
DuelPlayer
*
dp
)
;
v
irtual
void
EndDuel
()
;
~
TagDuel
()
override
;
v
oid
Chat
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
override
;
v
oid
JoinGame
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
bool
is_creater
)
override
;
v
oid
LeaveGame
(
DuelPlayer
*
dp
)
override
;
v
oid
ToDuelist
(
DuelPlayer
*
dp
)
override
;
v
oid
ToObserver
(
DuelPlayer
*
dp
)
override
;
v
oid
PlayerReady
(
DuelPlayer
*
dp
,
bool
ready
)
override
;
v
oid
PlayerKick
(
DuelPlayer
*
dp
,
unsigned
char
pos
)
override
;
v
oid
UpdateDeck
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
int
len
)
override
;
v
oid
StartDuel
(
DuelPlayer
*
dp
)
override
;
v
oid
HandResult
(
DuelPlayer
*
dp
,
unsigned
char
res
)
override
;
v
oid
TPResult
(
DuelPlayer
*
dp
,
unsigned
char
tp
)
override
;
v
oid
Process
()
override
;
v
oid
Surrender
(
DuelPlayer
*
dp
)
override
;
int
Analyze
(
unsigned
char
*
msgbuffer
,
unsigned
int
len
)
override
;
v
oid
GetResponse
(
DuelPlayer
*
dp
,
unsigned
char
*
pdata
,
unsigned
int
len
)
override
;
v
oid
TimeConfirm
(
DuelPlayer
*
dp
)
override
;
v
oid
EndDuel
()
override
;
void
DuelEndProc
();
void
WaitforResponse
(
int
playerid
);
...
...
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