Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
S
srvpro
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
1
Issues
1
List
Boards
Labels
Service Desk
Milestones
Merge Requests
3
Merge Requests
3
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
srvpro
Commits
23b15a3e
Commit
23b15a3e
authored
Sep 02, 2021
by
nanahira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix afk=flee
parent
1cda131d
Pipeline
#5174
failed with stages
in 14 minutes and 8 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
46 additions
and
30 deletions
+46
-30
ygopro-server.coffee
ygopro-server.coffee
+22
-15
ygopro-server.js
ygopro-server.js
+24
-15
No files found.
ygopro-server.coffee
View file @
23b15a3e
...
...
@@ -556,9 +556,9 @@ init = () ->
setInterval
()
->
for
room
in
ROOM_all
when
room
and
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
and
room
.
random_type
and
room
.
last_active_time
and
room
.
waiting_for_player
and
room
.
get_disconnected_count
()
==
0
and
(
!
settings
.
modules
.
side_timeout
or
room
.
duel_stage
!=
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
)
and
!
room
.
recovered
time_passed
=
Math
.
floor
(
moment_now
.
diff
(
room
.
last_active_time
)
/
1000
)
#log.info time_passed
#log.info time_passed
, moment_now_string
if
time_passed
>=
settings
.
modules
.
random_duel
.
hang_timeout
room
.
last_active_time
=
moment_now_string
room
.
refreshLastActiveTime
()
await
ROOM_ban_player
(
room
.
waiting_for_player
.
name
,
room
.
waiting_for_player
.
ip
,
"${random_ban_reason_AFK}"
)
room
.
scores
[
room
.
waiting_for_player
.
name_vpass
]
=
-
9
#log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass]
...
...
@@ -577,7 +577,7 @@ init = () ->
time_passed
=
Math
.
floor
(
moment_now
.
diff
(
room
.
last_active_time
)
/
1000
)
#log.info time_passed
if
time_passed
>=
settings
.
modules
.
random_duel
.
hang_timeout
room
.
last_active_time
=
moment_now_string
room
.
refreshLastActiveTime
()
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
room
.
waiting_for_player
.
name
}
${kicked_by_system}"
,
ygopro
.
constants
.
COLORS
.
RED
)
room
.
scores
[
room
.
waiting_for_player
.
name_vpass
]
=
-
9
#log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass]
...
...
@@ -1100,7 +1100,7 @@ CLIENT_reconnect = global.CLIENT_reconnect = (client) ->
client
.
established
=
true
client
.
pre_establish_buffers
=
[]
if
room
.
random_type
or
room
.
arena
room
.
last_active_time
=
moment_now_string
room
.
refreshLastActiveTime
()
CLIENT_import_data
(
client
,
dinfo
.
old_client
,
room
)
CLIENT_send_reconnect_info
(
client
,
client
.
server
,
room
)
#console.log("#{client.name} ${reconnect_to_game}")
...
...
@@ -1129,7 +1129,7 @@ CLIENT_kick_reconnect = global.CLIENT_kick_reconnect = (client, deckbuf) ->
client
.
established
=
true
client
.
pre_establish_buffers
=
[]
if
room
.
random_type
or
room
.
arena
room
.
last_active_time
=
moment_now_string
room
.
refreshLastActiveTime
()
CLIENT_import_data
(
client
,
player
,
room
)
CLIENT_send_reconnect_info
(
client
,
client
.
server
,
room
)
#console.log("#{client.name} ${reconnect_to_game}")
...
...
@@ -1664,7 +1664,7 @@ class Room
@
finished
=
true
if
!
@
finished_by_death
@
scores
[
client
.
name_vpass
]
=
-
9
if
@
random_type
and
not
client
.
flee_free
and
(
!
settings
.
modules
.
reconnect
.
enabled
or
@
get_disconnected_count
()
==
0
)
if
@
random_type
and
not
client
.
flee_free
and
(
!
settings
.
modules
.
reconnect
.
enabled
or
@
get_disconnected_count
()
==
0
)
and
not
client
.
kicked_by_system
and
not
client
.
kicked_by_player
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"${random_ban_reason_flee}"
)
if
settings
.
modules
.
random_duel
.
record_match_scores
and
@
random_type
==
'M'
ROOM_player_flee
(
client
.
name_vpass
)
...
...
@@ -1802,6 +1802,12 @@ class Room
@
connect
(
client
)
return
true
refreshLastActiveTime
:
(
longAgo
)
->
if
longAgo
@
last_active_time
=
moment_long_ago_string
else
@
last_active_time
=
moment_now_string
# 网络连接
netRequestHandler
=
(
client
)
->
client
.
ip
=
client
.
remoteAddress
...
...
@@ -2570,7 +2576,7 @@ ygopro.stoc_follow 'GAME_MSG', true, (buffer, info, client, server, datas)->
return
true
else
room
.
waiting_for_player
=
client
room
.
last_active_time
=
moment_now_string
room
.
refreshLastActiveTime
()
#log.info("#{msg_name}等待#{room.waiting_for_player.name}")
#log.info 'MSG', msg_name
...
...
@@ -2952,6 +2958,7 @@ ygopro.stoc_follow 'DUEL_END', false, (buffer, info, client, server, datas)->
wait_room_start
=
(
room
,
time
)
->
if
room
and
room
.
duel_stage
==
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
and
room
.
ready_player_count_without_host
>=
room
.
max_player
-
1
#log.info('wait room start', time)
time
-=
1
if
time
unless
time
%
5
...
...
@@ -3121,7 +3128,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
return
unless
room
msg
=
_
.
trim
(
info
.
msg
)
cancel
=
_
.
startsWith
(
msg
,
"/"
)
room
.
last_active_time
=
moment_now_string
unless
cancel
or
not
(
room
.
random_type
or
room
.
arena
)
or
room
.
duel_stage
==
ygopro
.
constants
.
DUEL_STAGE
.
FINGER
or
room
.
duel_stage
==
ygopro
.
constants
.
DUEL_STAGE
.
FIRSTGO
or
room
.
duel_stage
==
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
room
.
refreshLastActiveTime
()
unless
cancel
or
not
(
room
.
random_type
or
room
.
arena
)
or
room
.
duel_stage
==
ygopro
.
constants
.
DUEL_STAGE
.
FINGER
or
room
.
duel_stage
==
ygopro
.
constants
.
DUEL_STAGE
.
FIRSTGO
or
room
.
duel_stage
==
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
cmd
=
msg
.
split
(
' '
)
switch
cmd
[
0
]
when
'/投降'
,
'/surrender'
...
...
@@ -3313,7 +3320,7 @@ ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server, datas)->
if
room
.
random_type
or
room
.
arena
if
client
.
pos
==
0
room
.
waiting_for_player
=
room
.
waiting_for_player2
room
.
last_active_time
=
moment_now_string
room
.
refreshLastActiveTime
()
if
room
.
duel_stage
==
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
and
room
.
recovering
recover_player_data
=
_
.
find
(
room
.
recover_duel_log
.
players
,
(
player
)
->
return
player
.
realName
==
client
.
name_vpass
and
buffer
.
compare
(
Buffer
.
from
(
player
.
startDeckBuffer
,
"base64"
))
==
0
...
...
@@ -3371,7 +3378,7 @@ ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server, datas)->
ygopro
.
ctos_follow
'RESPONSE'
,
false
,
(
buffer
,
info
,
client
,
server
,
datas
)
->
room
=
ROOM_all
[
client
.
rid
]
return
unless
room
and
(
room
.
random_type
or
room
.
arena
)
room
.
last_active_time
=
moment_now_string
room
.
refreshLastActiveTime
()
await
return
ygopro
.
stoc_follow
'TIME_LIMIT'
,
true
,
(
buffer
,
info
,
client
,
server
,
datas
)
->
...
...
@@ -3440,7 +3447,7 @@ ygopro.ctos_follow 'HAND_RESULT', false, (buffer, info, client, server, datas)->
if
room
.
random_type
or
room
.
arena
if
client
.
pos
==
0
room
.
waiting_for_player
=
room
.
waiting_for_player2
room
.
last_active_time
=
moment_long_ago_string
room
.
refreshLastActiveTime
(
true
)
await
return
ygopro
.
ctos_follow
'TP_RESULT'
,
false
,
(
buffer
,
info
,
client
,
server
,
datas
)
->
...
...
@@ -3449,7 +3456,7 @@ ygopro.ctos_follow 'TP_RESULT', false, (buffer, info, client, server, datas)->
client
.
selected_preduel
=
true
# room.selecting_tp = false
return
unless
room
.
random_type
or
room
.
arena
room
.
last_active_time
=
moment_now_string
room
.
refreshLastActiveTime
()
await
return
ygopro
.
stoc_follow
'CHAT'
,
true
,
(
buffer
,
info
,
client
,
server
,
datas
)
->
...
...
@@ -3488,7 +3495,7 @@ ygopro.stoc_follow 'SELECT_HAND', true, (buffer, info, client, server, datas)->
room
.
waiting_for_player
=
client
else
room
.
waiting_for_player2
=
client
room
.
last_active_time
=
moment_long_ago_string
room
.
refreshLastActiveTime
(
true
)
if
room
.
determine_firstgo
ygopro
.
ctos_send
(
server
,
"HAND_RESULT"
,
{
res
:
if
client
.
pos
==
0
then
2
else
1
...
...
@@ -3509,7 +3516,7 @@ ygopro.stoc_follow 'SELECT_TP', true, (buffer, info, client, server, datas)->
room
.
duel_stage
=
ygopro
.
constants
.
DUEL_STAGE
.
FIRSTGO
if
room
.
random_type
or
room
.
arena
room
.
waiting_for_player
=
client
room
.
last_active_time
=
moment_now_string
room
.
refreshLastActiveTime
()
if
room
.
determine_firstgo
ygopro
.
ctos_send
(
server
,
"TP_RESULT"
,
{
res
:
if
room
.
determine_firstgo
==
client
then
1
else
0
...
...
@@ -3565,7 +3572,7 @@ ygopro.stoc_follow 'CHANGE_SIDE', false, (buffer, info, client, server, datas)->
room
.
waiting_for_player
=
client
else
room
.
waiting_for_player2
=
client
room
.
last_active_time
=
moment_now_string
room
.
refreshLastActiveTime
()
await
return
ygopro
.
stoc_follow
'REPLAY'
,
true
,
(
buffer
,
info
,
client
,
server
,
datas
)
->
...
...
ygopro-server.js
View file @
23b15a3e
...
...
@@ -704,9 +704,9 @@
continue
;
}
time_passed
=
Math
.
floor
(
moment_now
.
diff
(
room
.
last_active_time
)
/
1000
);
//log.info time_passed
//log.info time_passed
, moment_now_string
if
(
time_passed
>=
settings
.
modules
.
random_duel
.
hang_timeout
)
{
room
.
last_active_time
=
moment_now_string
;
room
.
refreshLastActiveTime
()
;
await
ROOM_ban_player
(
room
.
waiting_for_player
.
name
,
room
.
waiting_for_player
.
ip
,
"
${random_ban_reason_AFK}
"
);
room
.
scores
[
room
.
waiting_for_player
.
name_vpass
]
=
-
9
;
//log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass]
...
...
@@ -731,7 +731,7 @@
time_passed
=
Math
.
floor
(
moment_now
.
diff
(
room
.
last_active_time
)
/
1000
);
//log.info time_passed
if
(
time_passed
>=
settings
.
modules
.
random_duel
.
hang_timeout
)
{
room
.
last_active_time
=
moment_now_string
;
room
.
refreshLastActiveTime
()
;
ygopro
.
stoc_send_chat_to_room
(
room
,
`
${
room
.
waiting_for_player
.
name
}
\${kicked_by_system}`
,
ygopro
.
constants
.
COLORS
.
RED
);
room
.
scores
[
room
.
waiting_for_player
.
name_vpass
]
=
-
9
;
//log.info room.waiting_for_player.name, room.scores[room.waiting_for_player.name_vpass]
...
...
@@ -1451,7 +1451,7 @@
client
.
established
=
true
;
client
.
pre_establish_buffers
=
[];
if
(
room
.
random_type
||
room
.
arena
)
{
room
.
last_active_time
=
moment_now_string
;
room
.
refreshLastActiveTime
()
;
}
CLIENT_import_data
(
client
,
dinfo
.
old_client
,
room
);
CLIENT_send_reconnect_info
(
client
,
client
.
server
,
room
);
...
...
@@ -1483,7 +1483,7 @@
client
.
established
=
true
;
client
.
pre_establish_buffers
=
[];
if
(
room
.
random_type
||
room
.
arena
)
{
room
.
last_active_time
=
moment_now_string
;
room
.
refreshLastActiveTime
()
;
}
CLIENT_import_data
(
client
,
player
,
room
);
CLIENT_send_reconnect_info
(
client
,
client
.
server
,
room
);
...
...
@@ -2212,7 +2212,7 @@
this
.
finished
=
true
;
if
(
!
this
.
finished_by_death
)
{
this
.
scores
[
client
.
name_vpass
]
=
-
9
;
if
(
this
.
random_type
&&
!
client
.
flee_free
&&
(
!
settings
.
modules
.
reconnect
.
enabled
||
this
.
get_disconnected_count
()
===
0
))
{
if
(
this
.
random_type
&&
!
client
.
flee_free
&&
(
!
settings
.
modules
.
reconnect
.
enabled
||
this
.
get_disconnected_count
()
===
0
)
&&
!
client
.
kicked_by_system
&&
!
client
.
kicked_by_player
)
{
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"
${random_ban_reason_flee}
"
);
if
(
settings
.
modules
.
random_duel
.
record_match_scores
&&
this
.
random_type
===
'
M
'
)
{
ROOM_player_flee
(
client
.
name_vpass
);
...
...
@@ -2426,6 +2426,14 @@
return
true
;
}
refreshLastActiveTime
(
longAgo
)
{
if
(
longAgo
)
{
return
this
.
last_active_time
=
moment_long_ago_string
;
}
else
{
return
this
.
last_active_time
=
moment_now_string
;
}
}
};
// 网络连接
...
...
@@ -3343,7 +3351,7 @@
return
true
;
}
else
{
room
.
waiting_for_player
=
client
;
room
.
last_active_time
=
moment_now_string
;
room
.
refreshLastActiveTime
()
;
}
}
//log.info("#{msg_name}等待#{room.waiting_for_player.name}")
...
...
@@ -3888,6 +3896,7 @@
wait_room_start
=
async
function
(
room
,
time
)
{
var
j
,
len
,
player
,
ref
;
if
(
room
&&
room
.
duel_stage
===
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
&&
room
.
ready_player_count_without_host
>=
room
.
max_player
-
1
)
{
//log.info('wait room start', time)
time
-=
1
;
if
(
time
)
{
if
(
!
(
time
%
5
))
{
...
...
@@ -4139,7 +4148,7 @@
msg
=
_
.
trim
(
info
.
msg
);
cancel
=
_
.
startsWith
(
msg
,
"
/
"
);
if
(
!
(
cancel
||
!
(
room
.
random_type
||
room
.
arena
)
||
room
.
duel_stage
===
ygopro
.
constants
.
DUEL_STAGE
.
FINGER
||
room
.
duel_stage
===
ygopro
.
constants
.
DUEL_STAGE
.
FIRSTGO
||
room
.
duel_stage
===
ygopro
.
constants
.
DUEL_STAGE
.
SIDING
))
{
room
.
last_active_time
=
moment_now_string
;
room
.
refreshLastActiveTime
()
;
}
cmd
=
msg
.
split
(
'
'
);
switch
(
cmd
[
0
])
{
...
...
@@ -4409,7 +4418,7 @@
if
(
client
.
pos
===
0
)
{
room
.
waiting_for_player
=
room
.
waiting_for_player2
;
}
room
.
last_active_time
=
moment_now_string
;
room
.
refreshLastActiveTime
()
;
}
if
(
room
.
duel_stage
===
ygopro
.
constants
.
DUEL_STAGE
.
BEGIN
&&
room
.
recovering
)
{
recover_player_data
=
_
.
find
(
room
.
recover_duel_log
.
players
,
function
(
player
)
{
...
...
@@ -4488,7 +4497,7 @@
if
(
!
(
room
&&
(
room
.
random_type
||
room
.
arena
)))
{
return
;
}
room
.
last_active_time
=
moment_now_string
;
room
.
refreshLastActiveTime
()
;
});
ygopro
.
stoc_follow
(
'
TIME_LIMIT
'
,
true
,
async
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
...
...
@@ -4587,7 +4596,7 @@
if
(
client
.
pos
===
0
)
{
room
.
waiting_for_player
=
room
.
waiting_for_player2
;
}
room
.
last_active_time
=
moment_long_ago_string
;
room
.
refreshLastActiveTime
(
true
)
;
}
});
...
...
@@ -4602,7 +4611,7 @@
if
(
!
(
room
.
random_type
||
room
.
arena
))
{
return
;
}
room
.
last_active_time
=
moment_now_string
;
room
.
refreshLastActiveTime
()
;
});
ygopro
.
stoc_follow
(
'
CHAT
'
,
true
,
async
function
(
buffer
,
info
,
client
,
server
,
datas
)
{
...
...
@@ -4659,7 +4668,7 @@
}
else
{
room
.
waiting_for_player2
=
client
;
}
room
.
last_active_time
=
moment_long_ago_string
;
room
.
refreshLastActiveTime
(
true
)
;
}
if
(
room
.
determine_firstgo
)
{
ygopro
.
ctos_send
(
server
,
"
HAND_RESULT
"
,
{
...
...
@@ -4690,7 +4699,7 @@
room
.
duel_stage
=
ygopro
.
constants
.
DUEL_STAGE
.
FIRSTGO
;
if
(
room
.
random_type
||
room
.
arena
)
{
room
.
waiting_for_player
=
client
;
room
.
last_active_time
=
moment_now_string
;
room
.
refreshLastActiveTime
()
;
}
if
(
room
.
determine_firstgo
)
{
ygopro
.
ctos_send
(
server
,
"
TP_RESULT
"
,
{
...
...
@@ -4759,7 +4768,7 @@
}
else
{
room
.
waiting_for_player2
=
client
;
}
room
.
last_active_time
=
moment_now_string
;
room
.
refreshLastActiveTime
()
;
}
});
...
...
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