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
155a92fb
Commit
155a92fb
authored
Feb 23, 2012
by
argon.sun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
time limit
parent
6dcb7a3f
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
159 additions
and
41 deletions
+159
-41
gframe/drawing.cpp
gframe/drawing.cpp
+11
-0
gframe/duelclient.cpp
gframe/duelclient.cpp
+38
-1
gframe/game.cpp
gframe/game.cpp
+22
-10
gframe/game.h
gframe/game.h
+5
-0
gframe/netserver.cpp
gframe/netserver.cpp
+8
-6
gframe/network.h
gframe/network.h
+1
-0
gframe/replay.cpp
gframe/replay.cpp
+0
-1
gframe/single_duel.cpp
gframe/single_duel.cpp
+66
-19
gframe/single_duel.h
gframe/single_duel.h
+2
-0
script/c11975962.lua
script/c11975962.lua
+1
-1
script/c5037726.lua
script/c5037726.lua
+1
-1
script/c78156759.lua
script/c78156759.lua
+1
-1
script/c85562745.lua
script/c85562745.lua
+2
-1
strings.conf
strings.conf
+1
-0
No files found.
gframe/drawing.cpp
View file @
155a92fb
...
...
@@ -294,6 +294,12 @@ void Game::DrawMisc() {
lpcFont
->
draw
(
lpcstring
,
recti
(
400
,
162
,
922
,
210
),
lpccolor
,
true
,
false
,
0
);
}
}
if
(
!
dInfo
.
isReplay
&&
!
dInfo
.
isObserver
&&
dInfo
.
time_limit
)
{
driver
->
draw2DRectangle
(
recti
(
525
,
34
,
525
+
dInfo
.
time_left
[
0
]
*
100
/
dInfo
.
time_limit
,
44
),
0xa0e0e0e0
,
0xa0e0e0e0
,
0xa0c0c0c0
,
0xa0c0c0c0
);
driver
->
draw2DRectangleOutline
(
recti
(
525
,
34
,
625
,
44
),
0xffffffff
);
driver
->
draw2DRectangle
(
recti
(
795
-
dInfo
.
time_left
[
1
]
*
100
/
dInfo
.
time_limit
,
34
,
795
,
44
),
0xa0e0e0e0
,
0xa0e0e0e0
,
0xa0c0c0c0
,
0xa0c0c0c0
);
driver
->
draw2DRectangleOutline
(
recti
(
695
,
34
,
795
,
44
),
0xffffffff
);
}
numFont
->
draw
(
dInfo
.
strLP
[
0
],
recti
(
330
,
11
,
629
,
30
),
0xff000000
,
true
,
false
,
0
);
numFont
->
draw
(
dInfo
.
strLP
[
0
],
recti
(
330
,
12
,
631
,
30
),
0xffffff00
,
true
,
false
,
0
);
numFont
->
draw
(
dInfo
.
strLP
[
1
],
recti
(
691
,
11
,
990
,
30
),
0xff000000
,
true
,
false
,
0
);
...
...
@@ -600,6 +606,11 @@ void Game::DrawSpec() {
}
else
if
(
showcardp
<
showcarddif
)
{
lpcFont
->
draw
(
lstr
,
recti
(
671
-
pos
.
Width
/
2
,
271
,
970
,
350
),
0xff000000
);
lpcFont
->
draw
(
lstr
,
recti
(
670
-
pos
.
Width
/
2
,
270
,
970
,
350
),
0xffffffff
);
if
(
dInfo
.
vic_string
&&
(
showcardcode
==
1
||
showcardcode
==
2
))
{
driver
->
draw2DRectangle
(
0xa0000000
,
recti
(
540
,
320
,
800
,
340
));
guiFont
->
draw
(
dInfo
.
vic_string
,
recti
(
502
,
321
,
840
,
340
),
0xff000000
,
true
,
true
);
guiFont
->
draw
(
dInfo
.
vic_string
,
recti
(
500
,
320
,
840
,
340
),
0xffffffff
,
true
,
true
);
}
}
else
if
(
showcardp
<
showcarddif
+
10
)
{
int
alpha
=
((
showcarddif
+
10
-
showcardp
)
*
25
)
<<
24
;
lpcFont
->
draw
(
lstr
,
recti
(
671
-
pos
.
Width
/
2
+
(
showcardp
-
showcarddif
)
*
40
,
271
,
970
,
350
),
alpha
);
...
...
gframe/duelclient.cpp
View file @
155a92fb
...
...
@@ -111,6 +111,7 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) {
cscg
.
info
.
start_hand
=
_wtoi
(
mainGame
->
ebStartHand
->
getText
());
cscg
.
info
.
start_lp
=
_wtoi
(
mainGame
->
ebStartLP
->
getText
());
cscg
.
info
.
draw_count
=
_wtoi
(
mainGame
->
ebDrawCount
->
getText
());
cscg
.
info
.
time_limit
=
_wtoi
(
mainGame
->
ebTimeLimit
->
getText
());
cscg
.
info
.
lflist
=
mainGame
->
cbLFlist
->
getItemData
(
mainGame
->
cbLFlist
->
getSelected
());
cscg
.
info
.
enable_priority
=
mainGame
->
chkEnablePriority
->
isChecked
();
cscg
.
info
.
no_check_deck
=
mainGame
->
chkNoCheckDeck
->
isChecked
();
...
...
@@ -297,6 +298,10 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
str
.
append
(
msgbuf
);
myswprintf
(
msgbuf
,
L"%ls%ls
\n
"
,
dataManager
.
GetSysString
(
1227
),
dataManager
.
GetSysString
(
1244
+
pkt
->
info
.
mode
));
str
.
append
(
msgbuf
);
if
(
pkt
->
info
.
time_limit
)
{
myswprintf
(
msgbuf
,
L"%ls%d
\n
"
,
dataManager
.
GetSysString
(
1237
),
pkt
->
info
.
time_limit
);
str
.
append
(
msgbuf
);
}
str
.
append
(
L"==========
\n
"
);
myswprintf
(
msgbuf
,
L"%ls%d
\n
"
,
dataManager
.
GetSysString
(
1231
),
pkt
->
info
.
start_lp
);
str
.
append
(
msgbuf
);
...
...
@@ -317,6 +322,9 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
str
.
append
(
msgbuf
);
}
mainGame
->
gMutex
.
Lock
();
mainGame
->
dInfo
.
time_limit
=
pkt
->
info
.
time_limit
;
mainGame
->
dInfo
.
time_left
[
0
]
=
0
;
mainGame
->
dInfo
.
time_left
[
1
]
=
0
;
mainGame
->
deckBuilder
.
filterList
=
0
;
for
(
auto
lit
=
deckManager
.
_lfList
.
begin
();
lit
!=
deckManager
.
_lfList
.
end
();
++
lit
)
if
(
lit
->
hash
==
pkt
->
info
.
lflist
)
...
...
@@ -375,6 +383,9 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame
->
dInfo
.
strLP
[
0
][
0
]
=
0
;
mainGame
->
dInfo
.
strLP
[
1
][
0
]
=
0
;
mainGame
->
dInfo
.
turn
=
0
;
mainGame
->
dInfo
.
time_left
[
0
]
=
0
;
mainGame
->
dInfo
.
time_left
[
1
]
=
0
;
mainGame
->
dInfo
.
time_player
=
2
;
mainGame
->
is_building
=
false
;
mainGame
->
wCardImg
->
setVisible
(
true
);
mainGame
->
wInfos
->
setVisible
(
true
);
...
...
@@ -433,6 +444,15 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
}
break
;
}
case
STOC_TIME_LIMIT
:
{
STOC_TimeLimit
*
pkt
=
(
STOC_TimeLimit
*
)
pdata
;
int
lplayer
=
mainGame
->
LocalPlayer
(
pkt
->
player
);
if
(
lplayer
==
0
)
DuelClient
::
SendPacketToServer
(
CTOS_TIME_CONFIRM
);
mainGame
->
dInfo
.
time_player
=
lplayer
;
mainGame
->
dInfo
.
time_left
[
lplayer
]
=
pkt
->
left_time
;
break
;
}
case
STOC_HS_PLAYER_ENTER
:
{
STOC_HS_PlayerEnter
*
pkt
=
(
STOC_HS_PlayerEnter
*
)
pdata
;
if
(
pkt
->
pos
>
1
)
...
...
@@ -496,6 +516,8 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
mainGame
->
WaitFrameSignal
(
11
);
}
}
if
(
mainGame
->
dInfo
.
time_player
==
1
)
mainGame
->
dInfo
.
time_player
=
2
;
switch
(
mainGame
->
dInfo
.
curMsg
)
{
case
MSG_RETRY
:
{
mainGame
->
gMutex
.
Lock
();
...
...
@@ -605,16 +627,30 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
int
player
=
BufferIO
::
ReadInt8
(
pbuf
);
int
type
=
BufferIO
::
ReadInt8
(
pbuf
);
mainGame
->
showcarddif
=
110
;
mainGame
->
showcard
=
101
;
mainGame
->
showcardp
=
0
;
mainGame
->
dInfo
.
vic_string
=
0
;
wchar_t
vic_buf
[
256
];
if
(
player
==
2
)
mainGame
->
showcardcode
=
3
;
else
if
(
mainGame
->
LocalPlayer
(
player
)
==
0
)
{
mainGame
->
showcardcode
=
1
;
if
(
type
<
0x10
)
myswprintf
(
vic_buf
,
L"[%ls] %ls"
,
mainGame
->
dInfo
.
clientname
,
dataManager
.
GetVictoryString
(
type
));
else
myswprintf
(
vic_buf
,
L"%ls"
,
dataManager
.
GetVictoryString
(
type
));
mainGame
->
dInfo
.
vic_string
=
vic_buf
;
}
else
{
mainGame
->
showcardcode
=
2
;
if
(
type
<
0x10
)
myswprintf
(
vic_buf
,
L"[%ls] %ls"
,
mainGame
->
dInfo
.
hostname
,
dataManager
.
GetVictoryString
(
type
));
else
myswprintf
(
vic_buf
,
L"%ls"
,
dataManager
.
GetVictoryString
(
type
));
mainGame
->
dInfo
.
vic_string
=
vic_buf
;
}
mainGame
->
showcard
=
101
;
mainGame
->
WaitFrameSignal
(
120
);
mainGame
->
dInfo
.
vic_string
=
0
;
mainGame
->
showcard
=
0
;
break
;
}
case
MSG_WAITING
:
{
...
...
@@ -2377,6 +2413,7 @@ void DuelClient::SendResponse() {
break
;
}
}
mainGame
->
dInfo
.
time_player
=
2
;
SendBufferToServer
(
CTOS_RESPONSE
,
response_buf
,
response_len
);
}
void
DuelClient
::
BeginRefreshHost
()
{
...
...
gframe/game.cpp
View file @
155a92fb
...
...
@@ -106,21 +106,25 @@ bool Game::Initialize() {
cbMatchMode
=
env
->
addComboBox
(
rect
<
s32
>
(
140
,
85
,
300
,
110
),
wCreateHost
);
cbMatchMode
->
addItem
(
dataManager
.
GetSysString
(
1244
));
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
));
chkNoShuffleDeck
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
180
,
180
,
360
,
200
),
wCreateHost
,
-
1
,
dataManager
.
GetSysString
(
1230
));
env
->
addStaticText
(
dataManager
.
GetSysString
(
1231
),
rect
<
s32
>
(
20
,
210
,
320
,
230
),
false
,
false
,
wCreateHost
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1237
),
rect
<
s32
>
(
20
,
120
,
320
,
140
),
false
,
false
,
wCreateHost
);
myswprintf
(
strbuf
,
L"%d"
,
180
);
ebTimeLimit
=
env
->
addEditBox
(
strbuf
,
rect
<
s32
>
(
140
,
115
,
220
,
140
),
true
,
wCreateHost
);
ebTimeLimit
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1228
),
rect
<
s32
>
(
20
,
150
,
320
,
170
),
false
,
false
,
wCreateHost
);
chkEnablePriority
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
20
,
180
,
360
,
200
),
wCreateHost
,
-
1
,
dataManager
.
GetSysString
(
1236
));
chkNoCheckDeck
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
20
,
210
,
170
,
230
),
wCreateHost
,
-
1
,
dataManager
.
GetSysString
(
1229
));
chkNoShuffleDeck
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
180
,
210
,
360
,
230
),
wCreateHost
,
-
1
,
dataManager
.
GetSysString
(
1230
));
env
->
addStaticText
(
dataManager
.
GetSysString
(
1231
),
rect
<
s32
>
(
20
,
240
,
320
,
260
),
false
,
false
,
wCreateHost
);
myswprintf
(
strbuf
,
L"%d"
,
8000
);
ebStartLP
=
env
->
addEditBox
(
strbuf
,
rect
<
s32
>
(
140
,
2
10
,
220
,
23
0
),
true
,
wCreateHost
);
ebStartLP
=
env
->
addEditBox
(
strbuf
,
rect
<
s32
>
(
140
,
2
35
,
220
,
26
0
),
true
,
wCreateHost
);
ebStartLP
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1232
),
rect
<
s32
>
(
20
,
2
40
,
320
,
26
0
),
false
,
false
,
wCreateHost
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1232
),
rect
<
s32
>
(
20
,
2
70
,
320
,
29
0
),
false
,
false
,
wCreateHost
);
myswprintf
(
strbuf
,
L"%d"
,
5
);
ebStartHand
=
env
->
addEditBox
(
strbuf
,
rect
<
s32
>
(
140
,
2
40
,
220
,
26
0
),
true
,
wCreateHost
);
ebStartHand
=
env
->
addEditBox
(
strbuf
,
rect
<
s32
>
(
140
,
2
65
,
220
,
29
0
),
true
,
wCreateHost
);
ebStartHand
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1233
),
rect
<
s32
>
(
20
,
270
,
320
,
29
0
),
false
,
false
,
wCreateHost
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1233
),
rect
<
s32
>
(
20
,
300
,
320
,
32
0
),
false
,
false
,
wCreateHost
);
myswprintf
(
strbuf
,
L"%d"
,
1
);
ebDrawCount
=
env
->
addEditBox
(
strbuf
,
rect
<
s32
>
(
140
,
2
70
,
220
,
29
0
),
true
,
wCreateHost
);
ebDrawCount
=
env
->
addEditBox
(
strbuf
,
rect
<
s32
>
(
140
,
2
95
,
220
,
32
0
),
true
,
wCreateHost
);
ebDrawCount
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1234
),
rect
<
s32
>
(
10
,
360
,
220
,
380
),
false
,
false
,
wCreateHost
);
ebServerName
=
env
->
addEditBox
(
gameConf
.
gamename
,
rect
<
s32
>
(
110
,
355
,
250
,
380
),
true
,
wCreateHost
);
...
...
@@ -511,9 +515,17 @@ void Game::MainLoop() {
fps
=
0
;
cur_time
-=
1000
;
timer
->
setTime
(
0
);
if
(
dInfo
.
time_player
==
0
||
dInfo
.
time_player
==
1
)
if
(
dInfo
.
time_left
[
dInfo
.
time_player
])
dInfo
.
time_left
[
dInfo
.
time_player
]
--
;
}
}
DuelClient
::
StopClient
(
true
);
#ifdef _WIN32
Sleep
(
500
);
#else
usleep
(
500000
);
#endif
SaveConfig
();
device
->
drop
();
}
...
...
gframe/game.h
View file @
155a92fb
...
...
@@ -36,6 +36,10 @@ struct DuelInfo {
wchar_t
clientname
[
20
];
wchar_t
strLP
[
2
][
16
];
wchar_t
strTurn
[
8
];
wchar_t
*
vic_string
;
unsigned
char
time_player
;
unsigned
short
time_limit
;
unsigned
short
time_left
[
2
];
};
struct
FadingUnit
{
...
...
@@ -173,6 +177,7 @@ public:
irr
::
gui
::
IGUIComboBox
*
cbLFlist
;
irr
::
gui
::
IGUIComboBox
*
cbMatchMode
;
irr
::
gui
::
IGUIComboBox
*
cbRule
;
irr
::
gui
::
IGUIEditBox
*
ebTimeLimit
;
irr
::
gui
::
IGUIEditBox
*
ebStartLP
;
irr
::
gui
::
IGUIEditBox
*
ebStartHand
;
irr
::
gui
::
IGUIEditBox
*
ebDrawCount
;
...
...
gframe/netserver.cpp
View file @
155a92fb
...
...
@@ -142,6 +142,7 @@ int NetServer::ServerThread(void* param) {
}
users
.
clear
();
evconnlistener_free
(
listener
);
listener
=
0
;
if
(
broadcast_ev
)
{
evutil_socket_t
fd
;
event_get_assignment
(
broadcast_ev
,
0
,
&
fd
,
0
,
0
,
0
);
...
...
@@ -149,12 +150,13 @@ int NetServer::ServerThread(void* param) {
event_free
(
broadcast_ev
);
broadcast_ev
=
0
;
}
event_base_free
(
net_evbase
);
listener
=
0
;
net_evbase
=
0
;
if
(
duel_mode
)
if
(
duel_mode
)
{
event_free
(
duel_mode
->
etimer
);
delete
duel_mode
;
}
duel_mode
=
0
;
event_base_free
(
net_evbase
);
net_evbase
=
0
;
return
0
;
}
void
NetServer
::
DisconnectPlayer
(
DuelPlayer
*
dp
)
{
...
...
@@ -215,11 +217,11 @@ void NetServer::HandleCTOSPacket(DuelPlayer* dp, char* data, unsigned int len) {
CTOS_CreateGame
*
pkt
=
(
CTOS_CreateGame
*
)
pdata
;
if
(
pkt
->
info
.
mode
==
MODE_SINGLE
)
{
duel_mode
=
new
SingleDuel
(
false
);
duel_mode
->
etimer
=
event_new
(
net_evbase
,
0
,
EV_TIMEOUT
|
EV_PERSIST
,
SingleDuel
::
SingleTimer
,
duel_mode
);
}
else
if
(
pkt
->
info
.
mode
==
MODE_MATCH
)
{
duel_mode
=
new
SingleDuel
(
true
);
duel_mode
->
etimer
=
event_new
(
net_evbase
,
0
,
EV_TIMEOUT
|
EV_PERSIST
,
SingleDuel
::
SingleTimer
,
duel_mode
);
}
timeval
timeout
=
{
1
,
0
};
duel_mode
->
etimer
=
event_new
(
net_evbase
,
0
,
EV_PERSIST
,
SingleDuel
::
SingleTimer
,
duel_mode
);
if
(
pkt
->
info
.
rule
>
3
)
pkt
->
info
.
rule
=
0
;
if
(
pkt
->
info
.
mode
>
1
)
...
...
gframe/network.h
View file @
155a92fb
...
...
@@ -21,6 +21,7 @@ struct HostInfo {
unsigned
int
start_lp
;
unsigned
char
start_hand
;
unsigned
char
draw_count
;
unsigned
short
time_limit
;
};
struct
HostPacket
{
unsigned
short
identifier
;
...
...
gframe/replay.cpp
View file @
155a92fb
...
...
@@ -119,7 +119,6 @@ void Replay::EndRecord() {
pheader
.
flag
|=
REPLAY_COMPRESSED
;
size_t
propsize
=
5
;
comp_size
=
0x1000
;
printf
(
"%x
\n
"
,
comp_data
);
LzmaCompress
(
comp_data
,
&
comp_size
,
replay_data
,
pdata
-
replay_data
,
pheader
.
props
,
&
propsize
,
5
,
1
<<
24
,
3
,
0
,
2
,
32
,
1
);
is_recording
=
false
;
}
...
...
gframe/single_duel.cpp
View file @
155a92fb
...
...
@@ -371,6 +371,8 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
pdeck
[
1
].
main
[
swap
]
=
tmp
;
}
}
time_limit
[
0
]
=
host_info
.
time_limit
;
time_limit
[
1
]
=
host_info
.
time_limit
;
set_card_reader
((
card_reader
)
DataManager
::
CardReader
);
set_message_handler
((
message_handler
)
SingleDuel
::
MessageHandler
);
rnd
.
reset
(
seed
);
...
...
@@ -526,8 +528,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
unsigned
char
engType
=
BufferIO
::
ReadUInt8
(
pbuf
);
switch
(
engType
)
{
case
MSG_RETRY
:
{
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
last_response
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
last_response
);
return
1
;
}
case
MSG_HINT
:
{
...
...
@@ -588,8 +590,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
RefreshSzone
(
1
);
RefreshHand
(
0
);
RefreshHand
(
1
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_SELECT_IDLECMD
:
{
...
...
@@ -612,30 +614,30 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
RefreshSzone
(
1
);
RefreshHand
(
0
);
RefreshHand
(
1
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_SELECT_EFFECTYN
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
8
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_SELECT_YESNO
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
4
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_SELECT_OPTION
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
count
*
4
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_SELECT_CARD
:
...
...
@@ -653,31 +655,31 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
ss
=
BufferIO
::
ReadInt8
(
pbuf
);
if
(
c
!=
player
)
BufferIO
::
WriteInt32
(
pbufw
,
0
);
}
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_SELECT_CHAIN
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
9
+
count
*
11
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_SELECT_PLACE
:
case
MSG_SELECT_DISFIELD
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
5
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_SELECT_POSITION
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
5
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_SELECT_COUNTER
:
{
...
...
@@ -685,8 +687,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
3
;
count
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
count
*
8
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_SELECT_SUM
:
{
...
...
@@ -695,8 +697,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
pbuf
+=
5
;
count
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
count
*
11
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_SORT_CARD
:
...
...
@@ -704,8 +706,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
player
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
count
*
7
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_CONFIRM_DECKTOP
:
{
...
...
@@ -787,6 +789,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
RefreshSzone
(
0
);
RefreshSzone
(
1
);
pbuf
++
;
time_limit
[
0
]
=
host_info
.
time_limit
;
time_limit
[
1
]
=
host_info
.
time_limit
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
...
...
@@ -1191,29 +1195,29 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
case
MSG_ANNOUNCE_RACE
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
5
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_ANNOUNCE_ATTRIB
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
5
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_ANNOUNCE_CARD
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_ANNOUNCE_NUMBER
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
count
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
4
*
count
;
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_CARD_HINT
:
{
...
...
@@ -1235,6 +1239,12 @@ void SingleDuel::GetResponse(DuelPlayer* dp, void* pdata, unsigned int len) {
last_replay
.
WriteData
(
resb
,
len
);
set_responseb
(
pduel
,
resb
);
players
[
dp
->
type
]
->
state
=
0xff
;
if
(
host_info
.
time_limit
)
{
if
(
time_limit
[
dp
->
type
]
>=
time_elapsed
)
time_limit
[
dp
->
type
]
-=
time_elapsed
;
else
time_limit
[
dp
->
type
]
=
0
;
event_del
(
etimer
);
}
Process
();
}
void
SingleDuel
::
EndDuel
()
{
...
...
@@ -1254,12 +1264,27 @@ void SingleDuel::EndDuel() {
}
void
SingleDuel
::
WaitforResponse
(
int
playerid
)
{
last_response
=
playerid
;
players
[
playerid
]
->
state
=
CTOS_RESPONSE
;
unsigned
char
msg
=
MSG_WAITING
;
NetServer
::
SendPacketToPlayer
(
players
[
1
-
playerid
],
STOC_GAME_MSG
,
msg
);
if
(
host_info
.
time_limit
)
{
STOC_TimeLimit
sctl
;
sctl
.
player
=
playerid
;
sctl
.
left_time
=
time_limit
[
playerid
];
NetServer
::
SendPacketToPlayer
(
players
[
0
],
STOC_TIME_LIMIT
,
sctl
);
NetServer
::
SendPacketToPlayer
(
players
[
1
],
STOC_TIME_LIMIT
,
sctl
);
players
[
playerid
]
->
state
=
CTOS_TIME_CONFIRM
;
}
else
players
[
playerid
]
->
state
=
CTOS_RESPONSE
;
}
void
SingleDuel
::
TimeConfirm
(
DuelPlayer
*
dp
)
{
if
(
host_info
.
time_limit
==
0
)
return
;
if
(
dp
->
type
!=
last_response
)
return
;
players
[
last_response
]
->
state
=
CTOS_RESPONSE
;
time_elapsed
=
0
;
timeval
timeout
=
{
1
,
0
};
event_add
(
etimer
,
&
timeout
);
}
void
SingleDuel
::
RefreshMzone
(
int
player
,
int
flag
,
int
use_cache
)
{
char
query_buffer
[
0x1000
];
...
...
@@ -1363,6 +1388,28 @@ int SingleDuel::MessageHandler(long fduel, int type) {
}
void
SingleDuel
::
SingleTimer
(
evutil_socket_t
fd
,
short
events
,
void
*
arg
)
{
SingleDuel
*
sd
=
static_cast
<
SingleDuel
*>
(
arg
);
sd
->
time_elapsed
++
;
if
(
sd
->
time_elapsed
>=
sd
->
time_limit
[
sd
->
last_response
])
{
unsigned
char
wbuf
[
3
];
uint32
player
=
sd
->
last_response
;
wbuf
[
0
]
=
MSG_WIN
;
wbuf
[
1
]
=
1
-
player
;
wbuf
[
2
]
=
0x3
;
NetServer
::
SendBufferToPlayer
(
sd
->
players
[
0
],
STOC_GAME_MSG
,
wbuf
,
3
);
NetServer
::
ReSendToPlayer
(
sd
->
players
[
1
]);
for
(
auto
oit
=
sd
->
observers
.
begin
();
oit
!=
sd
->
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
if
(
sd
->
players
[
player
]
==
sd
->
pplayer
[
player
])
{
sd
->
match_result
[
sd
->
duel_count
++
]
=
1
-
player
;
sd
->
tp_player
=
player
;
}
else
{
sd
->
match_result
[
sd
->
duel_count
++
]
=
player
;
sd
->
tp_player
=
1
-
player
;
}
sd
->
EndDuel
();
sd
->
DuelEndProc
();
event_del
(
sd
->
etimer
);
}
}
}
gframe/single_duel.h
View file @
155a92fb
...
...
@@ -53,6 +53,8 @@ protected:
unsigned
char
duel_count
;
unsigned
char
tp_player
;
unsigned
char
match_result
[
3
];
unsigned
short
time_limit
[
2
];
unsigned
short
time_elapsed
;
};
}
...
...
script/c11975962.lua
View file @
155a92fb
...
...
@@ -26,7 +26,7 @@ function c11975962.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
end
function
c11975962
.
activate
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
)
local
tc
=
Duel
.
GetFirstTarget
()
if
tc
and
tc
:
Is
Faceup
()
and
tc
:
Is
RelateToEffect
(
e
)
then
if
tc
and
tc
:
IsRelateToEffect
(
e
)
then
Duel
.
Remove
(
tc
,
POS_FACEUP
,
REASON_EFFECT
)
end
end
script/c5037726.lua
View file @
155a92fb
...
...
@@ -17,7 +17,7 @@ function c5037726.cost(e,tp,eg,ep,ev,re,r,rp,chk)
Duel
.
Release
(
g
,
REASON_COST
)
end
function
c5037726
.
filter
(
c
,
e
,
tp
)
return
c
:
IsCanBeSpecialSummoned
(
e
,
0
,
tp
,
false
,
false
)
return
c
:
Is
Faceup
()
and
c
:
Is
CanBeSpecialSummoned
(
e
,
0
,
tp
,
false
,
false
)
end
function
c5037726
.
target
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
chk
,
chkc
)
if
chkc
then
return
chkc
:
IsLocation
(
LOCATION_REMOVED
)
and
c5037726
.
filter
(
chkc
,
e
,
tp
)
end
...
...
script/c78156759.lua
View file @
155a92fb
...
...
@@ -17,7 +17,7 @@ function c78156759.initial_effect(c)
e2
:
SetCategory
(
CATEGORY_DESTROY
)
e2
:
SetType
(
EFFECT_TYPE_FIELD
+
EFFECT_TYPE_TRIGGER_F
)
e2
:
SetCode
(
EVENT_PHASE
+
PHASE_END
)
e2
:
SetProperty
(
EFFECT_FLAG_CARD_TARGET
+
EFFECT_FLAG_REPEAT
)
e2
:
SetProperty
(
EFFECT_FLAG_CARD_TARGET
)
e2
:
SetRange
(
LOCATION_MZONE
)
e2
:
SetCountLimit
(
1
)
e2
:
SetCondition
(
c78156759
.
descon
)
...
...
script/c85562745.lua
View file @
155a92fb
...
...
@@ -22,12 +22,13 @@ function c85562745.con(e,tp,eg,ep,ev,re,r,rp)
return
ep
~=
tp
and
bit
.
band
(
r
,
REASON_BATTLE
)
==
0
and
re
:
GetHandler
():
GetCode
()
~=
85562745
end
function
c85562745
.
tg
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
chk
)
if
chk
==
0
then
return
true
end
if
chk
==
0
then
return
e
:
GetHandler
():
IsRelateToEffect
(
e
)
end
Duel
.
SetTargetPlayer
(
1
-
tp
)
Duel
.
SetTargetParam
(
300
)
Duel
.
SetOperationInfo
(
0
,
CATEGORY_DAMAGE
,
nil
,
0
,
1
-
tp
,
300
)
end
function
c85562745
.
op
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
)
if
not
e
:
GetHandler
():
IsRelateToEffect
(
e
)
then
return
end
local
p
,
d
=
Duel
.
GetChainInfo
(
0
,
CHAININFO_TARGET_PLAYER
,
CHAININFO_TARGET_PARAM
)
Duel
.
Damage
(
p
,
d
,
REASON_EFFECT
)
end
strings.conf
View file @
155a92fb
...
...
@@ -236,6 +236,7 @@
!
system
1234
主机名称:
!
system
1235
主机密码:
!
system
1236
允许启动效果优先权
!
system
1237
每回合时间:
!
system
1240
OCG
!
system
1241
TCG
!
system
1242
OCG&TCG
...
...
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