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
3eb58e51
Commit
3eb58e51
authored
Dec 16, 2015
by
mercury233
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add auto ban player
parent
e12b29de
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
111 additions
and
13 deletions
+111
-13
room.coffee
room.coffee
+36
-0
room.js
room.js
+56
-2
ygopro-server.coffee
ygopro-server.coffee
+9
-5
ygopro-server.js
ygopro-server.js
+10
-6
No files found.
room.coffee
View file @
3eb58e51
...
...
@@ -5,6 +5,22 @@ spawn = require('child_process').spawn
spawnSync
=
require
(
'child_process'
).
spawnSync
ygopro
=
require
'./ygopro.js'
bunyan
=
require
'bunyan'
moment
=
require
'moment'
moment
.
locale
(
'zh-cn'
,
{
relativeTime
:
{
future
:
'%s内'
,
past
:
'%s前'
,
s
:
'%d秒'
,
m
:
'1分钟'
,
mm
:
'%d分钟'
,
h
:
'1小时'
,
hh
:
'%d小时'
,
d
:
'1天'
,
dd
:
'%d天'
,
M
:
'1个月'
,
MM
:
'%d个月'
,
y
:
'1年'
,
yy
:
'%d年'
}})
settings
=
require
'./config.json'
log
=
bunyan
.
createLogger
name
:
"mycard-room"
...
...
@@ -35,6 +51,18 @@ class Room
@
all
=
[]
@
players_oppentlist
=
{}
@
players_banned
=
[]
@
ban_player
:
(
name
,
ip
,
reason
)
->
log
.
info
(
"banned"
,
name
,
ip
,
reason
)
bannedplayer
=
_
.
find
Room
.
players_banned
,
(
bannedplayer
)
->
ip
==
bannedplayer
.
ip
if
bannedplayer
bannedplayer
.
time
=
moment
(
bannedplayer
.
time
).
add
(
Math
.
pow
(
2
,
bannedplayer
.
count
)
*
30
,
's'
)
bannedplayer
.
count
=
bannedplayer
.
count
+
1
bannedplayer
.
reason
=
reason
else
Room
.
players_banned
.
push
{
"ip"
:
ip
,
"time"
:
moment
().
add
(
30
,
's'
),
"count"
:
1
,
"reason"
:
reason
}
@
find_or_create_by_name
:
(
name
,
player_ip
)
->
if
settings
.
modules
.
enable_random_duel
and
(
name
==
''
or
name
.
toUpperCase
()
==
'S'
or
name
.
toUpperCase
()
==
'M'
or
name
.
toUpperCase
()
==
'T'
)
...
...
@@ -47,6 +75,10 @@ class Room
return
new
Room
(
name
)
@
find_or_create_random
:
(
type
,
player_ip
)
->
bannedplayer
=
_
.
find
Room
.
players_banned
,
(
bannedplayer
)
->
return
player_ip
==
bannedplayer
.
ip
if
bannedplayer
and
moment
()
<
bannedplayer
.
time
return
{
"error"
:
"因为您在近期游戏中
#{
bannedplayer
.
reason
}
,您已被禁止使用随机对战功能,将在
#{
moment
(
bannedplayer
.
time
).
fromNow
(
true
)
}
后解封"
}
max_player
=
if
type
==
'T'
then
4
else
2
result
=
_
.
find
@
all
,
(
room
)
->
room
.
random_type
!=
''
and
!
room
.
started
and
((
type
==
''
and
room
.
random_type
!=
'T'
)
or
room
.
random_type
==
type
)
and
room
.
get_playing_player
().
length
<
max_player
and
room
.
get_host
().
remoteAddress
!=
Room
.
players_oppentlist
[
player_ip
]
...
...
@@ -293,6 +325,7 @@ class Room
connect
:
(
client
)
->
@
players
.
push
client
client
.
ip
=
client
.
remoteAddress
if
@
random_type
host_player
=
@
get_host
()
if
host_player
&&
(
host_player
!=
client
)
...
...
@@ -320,6 +353,9 @@ class Room
else
index
=
_
.
indexOf
(
@
players
,
client
)
@
players
.
splice
(
index
,
1
)
unless
index
==
-
1
#log.info(@started,@disconnector,client.room.random_type)
if
@
started
and
@
disconnector
!=
'server'
and
client
.
room
.
random_type
Room
.
ban_player
(
client
.
name
,
client
.
ip
,
"强退"
)
if
@
players
.
length
ygopro
.
stoc_send_chat_to_room
this
,
"
#{
client
.
name
}
#{
'离开了游戏'
}#{
if
error
then
":
#{
error
}
"
else
''
}
"
#client.room = null
...
...
room.js
View file @
3eb58e51
// Generated by CoffeeScript 1.10.0
(
function
()
{
var
Room
,
_
,
bunyan
,
get_memory_usage
,
log
,
settings
,
spawn
,
spawnSync
,
ygopro
;
var
Room
,
_
,
bunyan
,
get_memory_usage
,
log
,
moment
,
settings
,
spawn
,
spawnSync
,
ygopro
;
_
=
require
(
'
underscore
'
);
...
...
@@ -16,6 +16,26 @@
bunyan
=
require
(
'
bunyan
'
);
moment
=
require
(
'
moment
'
);
moment
.
locale
(
'
zh-cn
'
,
{
relativeTime
:
{
future
:
'
%s内
'
,
past
:
'
%s前
'
,
s
:
'
%d秒
'
,
m
:
'
1分钟
'
,
mm
:
'
%d分钟
'
,
h
:
'
1小时
'
,
hh
:
'
%d小时
'
,
d
:
'
1天
'
,
dd
:
'
%d天
'
,
M
:
'
1个月
'
,
MM
:
'
%d个月
'
,
y
:
'
1年
'
,
yy
:
'
%d年
'
}
});
settings
=
require
(
'
./config.json
'
);
log
=
bunyan
.
createLogger
({
...
...
@@ -45,6 +65,28 @@
Room
.
players_oppentlist
=
{};
Room
.
players_banned
=
[];
Room
.
ban_player
=
function
(
name
,
ip
,
reason
)
{
var
bannedplayer
;
log
.
info
(
"
banned
"
,
name
,
ip
,
reason
);
bannedplayer
=
_
.
find
(
Room
.
players_banned
,
function
(
bannedplayer
)
{
return
ip
===
bannedplayer
.
ip
;
});
if
(
bannedplayer
)
{
bannedplayer
.
time
=
moment
(
bannedplayer
.
time
).
add
(
Math
.
pow
(
2
,
bannedplayer
.
count
)
*
30
,
'
s
'
);
bannedplayer
.
count
=
bannedplayer
.
count
+
1
;
return
bannedplayer
.
reason
=
reason
;
}
else
{
return
Room
.
players_banned
.
push
({
"
ip
"
:
ip
,
"
time
"
:
moment
().
add
(
30
,
'
s
'
),
"
count
"
:
1
,
"
reason
"
:
reason
});
}
};
Room
.
find_or_create_by_name
=
function
(
name
,
player_ip
)
{
var
room
;
if
(
settings
.
modules
.
enable_random_duel
&&
(
name
===
''
||
name
.
toUpperCase
()
===
'
S
'
||
name
.
toUpperCase
()
===
'
M
'
||
name
.
toUpperCase
()
===
'
T
'
))
{
...
...
@@ -60,7 +102,15 @@
};
Room
.
find_or_create_random
=
function
(
type
,
player_ip
)
{
var
max_player
,
name
,
result
;
var
bannedplayer
,
max_player
,
name
,
result
;
bannedplayer
=
_
.
find
(
Room
.
players_banned
,
function
(
bannedplayer
)
{
return
player_ip
===
bannedplayer
.
ip
;
});
if
(
bannedplayer
&&
moment
()
<
bannedplayer
.
time
)
{
return
{
"
error
"
:
"
因为您在近期游戏中
"
+
bannedplayer
.
reason
+
"
,您已被禁止使用随机对战功能,将在
"
+
(
moment
(
bannedplayer
.
time
).
fromNow
(
true
))
+
"
后解封
"
};
}
max_player
=
type
===
'
T
'
?
4
:
2
;
result
=
_
.
find
(
this
.
all
,
function
(
room
)
{
return
room
.
random_type
!==
''
&&
!
room
.
started
&&
((
type
===
''
&&
room
.
random_type
!==
'
T
'
)
||
room
.
random_type
===
type
)
&&
room
.
get_playing_player
().
length
<
max_player
&&
room
.
get_host
().
remoteAddress
!==
Room
.
players_oppentlist
[
player_ip
];
...
...
@@ -377,6 +427,7 @@
Room
.
prototype
.
connect
=
function
(
client
)
{
var
host_player
;
this
.
players
.
push
(
client
);
client
.
ip
=
client
.
remoteAddress
;
if
(
this
.
random_type
)
{
host_player
=
this
.
get_host
();
if
(
host_player
&&
(
host_player
!==
client
))
{
...
...
@@ -413,6 +464,9 @@
if
(
index
!==
-
1
)
{
this
.
players
.
splice
(
index
,
1
);
}
if
(
this
.
started
&&
this
.
disconnector
!==
'
server
'
&&
client
.
room
.
random_type
)
{
Room
.
ban_player
(
client
.
name
,
client
.
ip
,
"
强退
"
);
}
if
(
this
.
players
.
length
)
{
ygopro
.
stoc_send_chat_to_room
(
this
,
client
.
name
+
"
"
+
'
离开了游戏
'
+
(
error
?
"
:
"
+
error
:
''
));
}
else
{
...
...
ygopro-server.coffee
View file @
3eb58e51
...
...
@@ -88,6 +88,7 @@ net.createServer (client) ->
server
.
on
'close'
,
(
had_error
)
->
#log.info "server closed", client.name, had_error
tribute
(
server
)
client
.
room
.
disconnector
=
'server'
server
.
closed
=
true
unless
server
.
closed
unless
client
.
closed
ygopro
.
stoc_send_chat
(
client
,
"服务器关闭了连接"
,
11
)
...
...
@@ -97,6 +98,7 @@ net.createServer (client) ->
server
.
on
'error'
,
(
error
)
->
#log.info "server error", client.name, error
tribute
(
server
)
client
.
room
.
disconnector
=
'server'
server
.
closed
=
error
unless
client
.
closed
ygopro
.
stoc_send_chat
(
client
,
"服务器错误:
#{
error
}
"
,
11
)
...
...
@@ -298,23 +300,24 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
else
#log.info 'join_game',info.pass, client.name
client
.
room
=
Room
.
find_or_create_by_name
(
info
.
pass
,
client
.
remoteAddress
)
if
!
client
.
room
room
=
Room
.
find_or_create_by_name
(
info
.
pass
,
client
.
remoteAddress
)
if
!
room
ygopro
.
stoc_send_chat
(
client
,
"服务器已经爆满,请稍候再试"
,
11
)
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,{
msg
:
1
code
:
2
}
client
.
end
()
else
if
client
.
room
.
error
ygopro
.
stoc_send_chat
(
client
,
client
.
room
.
error
,
11
)
else
if
room
.
error
ygopro
.
stoc_send_chat
(
client
,
room
.
error
,
11
)
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,{
msg
:
1
code
:
2
}
client
.
end
()
else
if
client
.
room
.
started
else
if
room
.
started
if
settings
.
modules
.
post_start_watching
client
.
room
=
room
client
.
is_post_watcher
=
true
ygopro
.
stoc_send_chat_to_room
client
.
room
,
"
#{
client
.
name
}
加入了观战"
client
.
room
.
watchers
.
push
client
...
...
@@ -329,6 +332,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
}
client
.
end
()
else
client
.
room
=
room
client
.
room
.
connect
(
client
)
return
...
...
ygopro-server.js
View file @
3eb58e51
...
...
@@ -109,6 +109,7 @@
});
server
.
on
(
'
close
'
,
function
(
had_error
)
{
tribute
(
server
);
client
.
room
.
disconnector
=
'
server
'
;
if
(
!
server
.
closed
)
{
server
.
closed
=
true
;
}
...
...
@@ -119,6 +120,7 @@
});
server
.
on
(
'
error
'
,
function
(
error
)
{
tribute
(
server
);
client
.
room
.
disconnector
=
'
server
'
;
server
.
closed
=
error
;
if
(
!
client
.
closed
)
{
ygopro
.
stoc_send_chat
(
client
,
"
服务器错误:
"
+
error
,
11
);
...
...
@@ -260,7 +262,7 @@
});
ygopro
.
ctos_follow
(
'
JOIN_GAME
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
var
k
,
len
,
ref
;
var
k
,
len
,
ref
,
room
;
if
(
settings
.
modules
.
stop
)
{
ygopro
.
stoc_send_chat
(
client
,
settings
.
modules
.
stop
,
11
);
ygopro
.
stoc_send
(
client
,
'
ERROR_MSG
'
,
{
...
...
@@ -313,23 +315,24 @@
});
client
.
end
();
}
else
{
client
.
room
=
Room
.
find_or_create_by_name
(
info
.
pass
,
client
.
remoteAddress
);
if
(
!
client
.
room
)
{
room
=
Room
.
find_or_create_by_name
(
info
.
pass
,
client
.
remoteAddress
);
if
(
!
room
)
{
ygopro
.
stoc_send_chat
(
client
,
"
服务器已经爆满,请稍候再试
"
,
11
);
ygopro
.
stoc_send
(
client
,
'
ERROR_MSG
'
,
{
msg
:
1
,
code
:
2
});
client
.
end
();
}
else
if
(
client
.
room
.
error
)
{
ygopro
.
stoc_send_chat
(
client
,
client
.
room
.
error
,
11
);
}
else
if
(
room
.
error
)
{
ygopro
.
stoc_send_chat
(
client
,
room
.
error
,
11
);
ygopro
.
stoc_send
(
client
,
'
ERROR_MSG
'
,
{
msg
:
1
,
code
:
2
});
client
.
end
();
}
else
if
(
client
.
room
.
started
)
{
}
else
if
(
room
.
started
)
{
if
(
settings
.
modules
.
post_start_watching
)
{
client
.
room
=
room
;
client
.
is_post_watcher
=
true
;
ygopro
.
stoc_send_chat_to_room
(
client
.
room
,
client
.
name
+
"
加入了观战
"
);
client
.
room
.
watchers
.
push
(
client
);
...
...
@@ -348,6 +351,7 @@
client
.
end
();
}
}
else
{
client
.
room
=
room
;
client
.
room
.
connect
(
client
);
}
}
...
...
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