Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
mycard
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
syntax_j
mycard
Commits
fe974547
Commit
fe974547
authored
Dec 18, 2011
by
神楽坂玲奈
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
iduel观战初步
parent
aebd808b
Changes
21
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
487 additions
and
409 deletions
+487
-409
lib/action.rb
lib/action.rb
+3
-0
lib/cacheable.rb
lib/cacheable.rb
+6
-3
lib/game.rb
lib/game.rb
+2
-2
lib/game_event.rb
lib/game_event.rb
+5
-2
lib/iduel/action.rb
lib/iduel/action.rb
+187
-95
lib/iduel/event.rb
lib/iduel/event.rb
+176
-173
lib/iduel/iduel.rb
lib/iduel/iduel.rb
+41
-39
lib/iduel/room.rb
lib/iduel/room.rb
+0
-30
lib/iduel/user.rb
lib/iduel/user.rb
+12
-27
lib/nbx/event.rb
lib/nbx/event.rb
+4
-4
lib/nbx/nbx.rb
lib/nbx/nbx.rb
+0
-2
lib/nbx/room.rb
lib/nbx/room.rb
+0
-2
lib/nbx/user.rb
lib/nbx/user.rb
+0
-2
lib/room.rb
lib/room.rb
+16
-1
lib/scene_duel.rb
lib/scene_duel.rb
+5
-2
lib/scene_hall.rb
lib/scene_hall.rb
+1
-1
lib/scene_login.rb
lib/scene_login.rb
+20
-19
lib/scene_watch.rb
lib/scene_watch.rb
+3
-1
lib/user.rb
lib/user.rb
+6
-2
lib/window_action.rb
lib/window_action.rb
+0
-1
lib/window_field.rb
lib/window_field.rb
+0
-1
No files found.
lib/action.rb
View file @
fe974547
...
@@ -95,6 +95,9 @@ class Action
...
@@ -95,6 +95,9 @@ class Action
player_field
.
extra
player_field
.
extra
when
:removed
when
:removed
player_field
.
removed
player_field
.
removed
else
puts
'奇怪的from_field'
puts
end
end
if
@from_pos
.
is_a?
Integer
if
@from_pos
.
is_a?
Integer
...
...
lib/cacheable.rb
View file @
fe974547
...
@@ -2,8 +2,11 @@ module Cacheable
...
@@ -2,8 +2,11 @@ module Cacheable
@@all
=
{}
@@all
=
{}
def
new
(
id
,
*
args
)
def
new
(
id
,
*
args
)
@@all
[
self
]
||=
{}
@@all
[
self
]
||=
{}
@@all
[
self
][
id
]
||=
super
()
if
result
=
@@all
[
self
][
id
]
@@all
[
self
][
id
].
set
(
id
,
*
args
)
result
.
set
(
id
,
*
args
)
@@all
[
self
][
id
]
result
else
@@all
[
self
][
id
]
=
super
(
id
,
*
args
)
end
end
end
end
end
\ No newline at end of file
lib/game.rb
View file @
fe974547
...
@@ -8,10 +8,10 @@ class Game
...
@@ -8,10 +8,10 @@ class Game
@users
=
[]
@users
=
[]
@rooms
=
[]
@rooms
=
[]
end
end
def
refresh
end
def
login
(
username
,
password
=
nil
)
def
login
(
username
,
password
=
nil
)
end
end
def
refresh
end
def
host
def
host
end
end
def
join
(
room
)
def
join
(
room
)
...
...
lib/game_event.rb
View file @
fe974547
...
@@ -98,7 +98,10 @@ class Game_Event
...
@@ -98,7 +98,10 @@ class Game_Event
$game
.
room
=
@room
$game
.
room
=
@room
end
end
end
end
class
Leave
<
Game_Event
def
initialize
end
end
class
PlayerJoin
<
Game_Event
class
PlayerJoin
<
Game_Event
attr_reader
:user
attr_reader
:user
def
initialize
(
user
)
def
initialize
(
user
)
...
@@ -114,7 +117,7 @@ class Game_Event
...
@@ -114,7 +117,7 @@ class Game_Event
class
Action
<
Game_Event
class
Action
<
Game_Event
attr_reader
:action
,
:str
attr_reader
:action
,
:str
def
initialize
(
action
,
str
=
A
ction
.
escape
)
def
initialize
(
action
,
str
=
a
ction
.
escape
)
@action
=
action
@action
=
action
@str
=
str
@str
=
str
end
end
...
...
lib/iduel/action.rb
View file @
fe974547
This diff is collapsed.
Click to expand it.
lib/iduel/event.rb
View file @
fe974547
#encoding: UTF-8
#encoding: UTF-8
Game_Event
=
Class
.
new
#避开SDL::Event问题,所以没有用class Game_Event::Event
class
Game_Event
class
Game_Event
@queue
=
[]
def
self
.
push
(
event
)
@queue
<<
event
end
def
self
.
poll
@queue
.
shift
end
def
self
.
parse
(
info
)
def
self
.
parse
(
info
)
info
=~
/^\$([A-Z])\|(.*)$/m
info
=~
/^\$([A-Z])\|(.*)$/m
case
$1
case
$1
when
"A"
when
"A"
Game_Event
::
Error
Error
when
"B"
when
"B"
Game_Event
::
LOGINOK
Login
when
"C"
when
"C"
Game_Event
::
AllUsers
AllUsers
when
"F"
when
"F"
Game_Event
::
JOINROOMOK
Join
when
"G"
when
"G"
Game_Event
::
WATCHROOMSTART
Watch
when
"H"
Leave
when
"J"
when
"J"
Game_Event
::
Action
Action
when
"K"
when
"K"
Game_Event
::
WMSG
WatchAction
when
"M"
when
"M"
Game_Event
::
QROOMOK
#TODO
QROOMOK
#TODO
when
"O"
when
"O"
Game_Event
::
PCHAT
Chat
when
"P"
when
"P"
Game_Event
::
AllRooms
AllRooms
when
"Q"
when
"Q"
Game_Event
::
NewRoom
NewRoom
when
"R"
when
"R"
Game_Event
::
QROOMOK
#卡表
QROOMOK
#卡表
else
else
Game_Event
::
UNKNOWN
Unknown
end
.
new
(
$2
)
end
.
parse
(
$2
)
end
end
end
class
Game_Event
::
LOGINOK
<
Game_Event
attr_reader
:user
,
:sessio
n
class
Logi
n
def
initializ
e
(
info
)
def
self
.
pars
e
(
info
)
info
=
info
.
split
(
","
)
info
=
info
.
split
(
","
)
#>> $B|201629,zh99997,5da9e5fa,Level-1 (总经验:183),,20101118
#>> $B|201629,zh99997,5da9e5fa,Level-1 (总经验:183),,20101118
info
[
3
]
=~
/Level-(\d)+ \(总经验:(\d+)\)/
info
[
3
]
=~
/Level-(\d)+ \(总经验:(\d+)\)/
$game
.
user
=
@user
=
Iduel
::
User
.
new
(
info
[
0
].
to_i
,
info
[
1
],
$1
.
to_i
,
$2
.
to_i
)
result
=
self
.
new
User
.
new
(
info
[
0
].
to_i
,
info
[
1
],
$1
.
to_i
,
$2
.
to_i
)
$game
.
session
=
@
session
=
info
[
2
]
$game
.
session
=
info
[
2
]
$game
.
key
=
(
$game
.
user
.
id
-
0x186a0
)
^
0x22133
$game
.
key
=
(
$game
.
user
.
id
-
0x186a0
)
^
0x22133
result
end
end
end
end
class
Game_Event
::
AllUsers
<
Game_Event
class
AllUsers
attr_reader
:users
def
self
.
parse
(
info
)
def
initialize
(
info
)
self
.
new
info
.
split
(
','
).
collect
{
|
user
|
User
.
parse
(
user
)}
@users
=
info
.
split
(
','
).
collect
do
|
user
|
Iduel
::
User
.
new
(
user
)
end
end
end
end
end
class
AllRooms
class
Game_Event
::
AllRooms
<
Game_Event
def
self
.
parse
(
info
)
attr_reader
:rooms
def
initialize
(
info
)
info
=
info
.
split
(
"|"
)
info
=
info
.
split
(
"|"
)
@
rooms
=
[]
rooms
=
[]
templist
=
@
rooms
templist
=
rooms
empty
=
false
empty
=
false
info
.
each
do
|
room
|
info
.
each
do
|
room
|
if
room
==
'~~'
if
room
==
'~~'
...
@@ -74,89 +64,87 @@ class Game_Event::AllRooms < Game_Event
...
@@ -74,89 +64,87 @@ class Game_Event::AllRooms < Game_Event
else
else
room
=
room
.
split
(
","
)
room
=
room
.
split
(
","
)
templist
<<
if
empty
templist
<<
if
empty
Iduel
::
Room
.
new
(
room
[
0
].
to_i
,
room
[
1
],
Iduel
::
User
.
new
(
room
[
2
]),
nil
,
room
[
3
]
==
"1"
,
Iduel
::
Color
[
room
[
4
].
to_i
],
nil
,
room
[
6
])
Room
.
new
(
room
[
0
].
to_i
,
room
[
1
],
User
.
parse
(
room
[
2
]),
nil
,
room
[
3
]
==
"1"
,
Room
::
Color
[
room
[
4
].
to_i
],
nil
,
room
[
6
])
else
else
Iduel
::
Room
.
new
(
room
[
0
].
to_i
,
room
[
3
],
Iduel
::
User
.
new
(
room
[
1
]),
Iduel
::
User
.
new
(
room
[
2
]),
false
,
Iduel
::
Color
[
room
[
5
].
to_i
],
room
[
3
])
Room
.
new
(
room
[
0
].
to_i
,
room
[
3
],
User
.
parse
(
room
[
1
]),
User
.
parse
(
room
[
2
]),
false
,
Room
::
Color
[
room
[
5
].
to_i
],
room
[
3
])
end
end
end
end
end
end
@rooms
=
templist
+
@
rooms
rooms
=
templist
+
rooms
$game
.
rooms
=
@
rooms
self
.
new
rooms
end
end
end
class
Game_Event
::
NOL
<
Game_Event
def
initialize
(
info
)
super
@args
=
@args
.
collect
do
|
user
|
Iduel
::
User
.
new
(
user
)
end
end
class
NewUser
def
self
.
parse
(
info
)
p
info
#super
#@args = @args.collect do |user|
# User.new(user)
#end
end
end
end
end
class
Game_Event
::
DOL
<
Game_Event
class
MissingUser
def
initialize
(
info
)
def
self
.
parse
(
info
)
super
p
info
@args
=
@args
.
collect
do
|
user
|
#super
Iduel
::
User
.
new
(
user
)
#@args = @args.collect do |user|
# User.new(user)
#end
end
end
end
end
end
class
Game_Event
::
PCHAT
<
Game_Event
class
Join
attr_reader
:user
,
:content
def
self
.
parse
(
info
)
def
initialize
(
info
)
self
.
new
Room
.
new
(
info
.
to_i
)
user
,
@content
=
info
.
split
(
","
,
2
)
@user
=
user
==
"System"
?
Iduel
::
User
.
new
(
100000
,
"iDuel管理中心"
)
:
Iduel
::
User
.
new
(
user
)
end
end
end
class
Game_Event
::
JOINROOMOK
<
Game_Event
attr_reader
:room
def
initialize
(
id
)
@room
=
Iduel
::
Room
.
new
(
id
)
end
end
end
class
Leave
class
Game_Event
::
QROOMOK
<
Game_Event
def
self
.
parse
(
info
)
end
self
.
new
class
Game_Event
::
NewRoom
<
Game_Event
end
def
initialize
(
info
)
end
class
NewRoom
def
self
.
parse
(
info
)
id
,
x
,
player1
,
player2
=
info
.
split
(
","
,
4
)
id
,
x
,
player1
,
player2
=
info
.
split
(
","
,
4
)
@room
=
Iduel
::
Room
.
new
(
id
)
room
=
Room
.
new
(
id
)
@room
.
player1
=
Iduel
::
User
.
new
(
player1
)
room
.
player1
=
User
.
parse
(
player1
)
@room
.
player2
=
Iduel
::
User
.
new
(
player2
)
room
.
player2
=
User
.
parse
(
player2
)
$game
.
rooms
<<
@room
unless
$game
.
rooms
.
include?
@
room
self
.
new
room
end
end
end
end
#"Q"
#"Q"
#"273,1,zh99998(201448),zh99997(201629)"
#"273,1,zh99998(201448),zh99997(201629)"
class
Game_Event
::
WATCHROOMSTART
<
Game_Event
class
Watch
attr_reader
:room
attr_reader
:room
def
initializ
e
(
info
)
def
self
.
pars
e
(
info
)
id
,
name
=
info
.
split
(
","
,
1
)
id
,
name
=
info
.
split
(
","
,
2
)
@room
=
Iduel
::
Room
.
new
(
id
.
to_i
,
name
,
''
,
''
,
false
,
Iduel
::
Color
[
0
])
#:name, :player1, :player2, :crypted, :color
self
.
new
Room
.
new
(
id
.
to_i
,
name
)
end
end
end
end
class
Game_Event
::
Action
<
Game_Event
class
Action
attr_reader
:action
attr_reader
:action
def
initialize
(
info
)
def
self
.
parse
(
info
)
info
[
"◎"
]
=
"●"
if
info
=~
/^\[\d+\] (?:.*\r\n){0,1}(◎)→.*▊▊▊.*$/
info
=~
/(.*)▊▊▊.*?$/
@action
=
::
Action
.
parse
info
info
=
$1
p
@action
info
[
"◎"
]
=
"●"
if
info
[
"◎"
]
self
.
new
::
Action
.
parse
info
end
end
end
class
Game_Event
::
WMSG
<
Game_Event
def
initialize
(
info
)
#black_st(212671), [109] ┊墓地,苍岩┊
#p info
#p $1, $2
info
=~
/(.+)\((\d+)\), \[(\d+)\] (.*)/m
#cchenwor(211650), [27] ◎→<[效果怪兽][盟军·次世代鸟人] 1400 400>攻击8
@args
=
[
$1
,
$2
,
$3
,
$4
]
end
end
end
class
Leave
class
Game_Event
::
WATCHSTOP
<
Game_Event
end
end
class
Chat
class
Game_Event
::
Error
<
Game_Event
attr_reader
:user
,
:content
alias
old_initialize
initialize
def
self
.
parse
(
info
)
user
,
content
=
info
.
split
(
","
,
2
)
user
=
user
==
"System"
?
User
.
new
(
100000
,
"iDuel管理中心"
)
:
User
.
parse
(
user
)
self
.
new
(
user
,
content
,
:hall
)
end
end
class
Error
attr_reader
:title
,
:message
attr_reader
:title
,
:message
def
initializ
e
(
info
)
def
self
.
pars
e
(
info
)
@title
,
@
message
=
case
info
.
to_i
title
,
message
=
case
info
.
to_i
when
0x00
when
0x00
[
"网络错误"
,
"网络连接中断"
]
[
"网络错误"
,
"网络连接中断"
]
when
0x65
when
0x65
...
@@ -190,17 +178,32 @@ class Game_Event::Error < Game_Event
...
@@ -190,17 +178,32 @@ class Game_Event::Error < Game_Event
when
0x135
when
0x135
[
"错误"
,
"请求的房间无效"
]
[
"错误"
,
"请求的房间无效"
]
end
end
#Exception.new(@message).raise
self
.
new
title
,
message
p
caller
p
@title
p
@message
#system("pause")
end
end
end
end
class
Game_Event
::
UNKNOWN
<
Game_Event
class
Unknown
def
initializ
e
(
*
args
)
def
self
.
pars
e
(
*
args
)
puts
'--------UnK
nown Iduel Event-------'
puts
'--------Unk
nown Iduel Event-------'
p
$1
,
$2
,
args
p
$1
,
$2
,
args
system
(
"pause"
)
end
end
#以下iduel专有
class
WatchAction
<
Action
attr_reader
:user
def
initialize
(
action
,
str
,
user
)
@user
=
user
super
(
action
,
str
)
@action
.
from_player
=
@user
==
$game
.
room
.
player1
end
def
self
.
parse
(
info
)
info
=~
/(.+)\((\d+)\), (.*)/m
self
.
new
::
Action
.
parse
(
$3
),
$3
,
User
.
new
(
$2
.
to_i
,
$1
)
end
end
class
QROOMOK
<
Game_Event
end
end
end
end
\ No newline at end of file
lib/iduel/iduel.rb
View file @
fe974547
...
@@ -5,81 +5,83 @@ class Iduel < Game
...
@@ -5,81 +5,83 @@ class Iduel < Game
Port
=
38522
Port
=
38522
RS
=
"
\xA1\xE9
"
.
force_encoding
"GBK"
RS
=
"
\xA1\xE9
"
.
force_encoding
"GBK"
Color
=
[[
0
,
0
,
0
],
[
255
,
0
,
0
],
[
0
,
255
,
0
],
[
0
,
0
,
255
],
[
255
,
165
,
0
]]
attr_accessor
:session
attr_accessor
:session
attr_accessor
:key
attr_accessor
:key
def
initialize
def
initialize
super
require
'socket'
require
'socket'
require
'digest/md5'
require
'digest/md5'
require
'open-uri'
require
'open-uri'
require_relative
'action'
require_relative
'action'
require_relative
'event'
require_relative
'event'
require_relative
'user'
require_relative
'user'
require_relative
'room'
@conn
=
TCPSocket
.
open
(
Server
,
Port
)
@conn
=
TCPSocket
.
open
(
Server
,
Port
)
@conn
.
set_encoding
"GBK"
@conn
.
set_encoding
"GBK"
Thread
.
abort_on_exception
=
true
Thread
.
abort_on_exception
=
true
@recv
=
Thread
.
new
{
recv
@conn
.
gets
(
RS
)
while
@conn
}
@recv
=
Thread
.
new
{
recv
@conn
.
gets
(
RS
)
while
@conn
}
end
end
def
login
(
username
,
password
)
md5
=
Digest
::
MD5
.
hexdigest
(
password
)
send
(
0
,
username
,
md5
,
checknum
(
"LOGINMSG"
,
username
,
md5
),
VERSION
)
end
def
refresh
send
(
1
,
@key
,
checknum
(
"UPINFOMSG"
,
@session
))
end
def
host
(
name
,
password
=
""
,
lv
=
0
,
color
=
0
)
send
(
6
,
@key
,
name
,
password
,
checknum
(
"JOINROOMMSG"
,
@session
+
name
+
password
+
"0"
),
0
,
color
,
lv
,
0
,
nil
,
nil
)
#TODO:v.ak, v.al
end
def
join
(
room
,
password
=
""
)
send
(
6
,
@key
,
room
.
id
,
password
,
checknum
(
"JOINROOMMSG"
,
@session
+
room
.
id
.
to_s
+
password
+
"1"
),
1
)
end
def
watch
(
room
,
password
=
""
)
send
(
5
,
@key
,
room
.
id
,
password
,
checknum
(
"WATCHROOMMSG"
,
"
#{
@session
}#{
room
.
id
}#{
password
}
"
))
end
def
leave
if
@room
.
include?
@user
#
else
send
(
"QUITWATCHROOM"
,
@key
,
checknum
(
"QUITWATCHROOM"
,
@session
))
end
end
def
action
(
action
)
send
(
2
,
"
#{
checknum
(
"RMSG"
,
@session
)
}
@
#{
@key
}
"
,
"
#{
action
.
escape
}
▊▊▊000000"
)
if
@room
.
include?
@user
#TODO:iduel校验字串
end
def
exit
send
(
11
,
@key
,
checknum
(
"ULO"
,
"
#{
@session
}
"
))
@recv
.
exit
@conn
.
close
@conn
=
nil
end
def
send
(
head
,
*
args
)
def
send
(
head
,
*
args
)
info
=
"#
#{
head
.
to_s
(
16
).
upcase
}
|
#{
args
.
join
(
','
)
}
"
.
encode
(
"GBK"
)
+
RS
info
=
"#
#{
head
.
to_s
(
16
).
upcase
}
|
#{
args
.
join
(
','
)
}
"
.
encode
(
"GBK"
)
+
RS
puts
"<<
#{
info
}
"
puts
"<<
#{
info
}
"
(
@conn
.
write
info
)
rescue
Event
.
push
Event
::
Error
.
new
(
0
)
(
@conn
.
write
info
)
rescue
Game_Event
.
push
Game_
Event
::
Error
.
new
(
0
)
end
end
def
recv
(
info
)
def
recv
(
info
)
if
info
.
nil?
if
info
.
nil?
@conn
.
close
@conn
.
close
@conn
=
nil
@conn
=
nil
Event
::
Error
.
new
(
0
)
Game_
Event
::
Error
.
new
(
0
)
else
else
info
.
chomp!
(
RS
)
info
.
chomp!
(
RS
)
info
.
encode!
"UTF-8"
,
:invalid
=>
:replace
,
:undef
=>
:replace
info
.
encode!
"UTF-8"
,
:invalid
=>
:replace
,
:undef
=>
:replace
puts
">>
#{
info
}
"
puts
">>
#{
info
}
"
Event
.
push
Event
.
parse
info
Game_Event
.
push
Game_
Event
.
parse
info
end
end
end
end
def
close
$game
.
quit
@recv
.
exit
@conn
.
close
@conn
=
nil
end
def
checknum
(
head
,
*
args
)
def
checknum
(
head
,
*
args
)
Digest
::
MD5
.
hexdigest
(
"[
#{
head
}
]_
#{
args
.
join
(
'_'
)
}
_SCNERO"
)
Digest
::
MD5
.
hexdigest
(
"[
#{
head
}
]_
#{
args
.
join
(
'_'
)
}
_SCNERO"
)
end
end
def
login
(
username
,
password
)
md5
=
Digest
::
MD5
.
hexdigest
(
password
)
send
(
0
,
username
,
md5
,
checknum
(
"LOGINMSG"
,
username
,
md5
),
VERSION
)
end
def
refresh
send
(
1
,
@key
,
checknum
(
"UPINFOMSG"
,
@session
))
end
def
join
(
room
,
password
=
""
)
send
(
6
,
@key
,
room
.
id
,
password
,
checknum
(
"JOINROOMMSG"
,
@session
+
room
.
id
.
to_s
+
password
+
"1"
),
1
)
end
def
qroom
(
room
)
def
qroom
(
room
)
send
(
10
,
@key
,
room
.
id
,
checknum
(
"QROOM"
,
@session
+
room
.
id
.
to_s
))
send
(
10
,
@key
,
room
.
id
,
checknum
(
"QROOM"
,
@session
+
room
.
id
.
to_s
))
end
end
def
action
(
action
)
send
(
2
,
"
#{
checknum
(
"RMSG"
,
@session
)
}
@
#{
@key
}
"
,
"
#{
action
.
escape
}
▊▊▊000000"
)
#TODO:iduel校验字串
end
def
host
(
name
,
password
=
""
,
lv
=
0
,
color
=
0
)
send
(
6
,
@key
,
name
,
password
,
checknum
(
"JOINROOMMSG"
,
@session
+
name
+
password
+
"0"
),
0
,
color
,
lv
,
0
,
nil
,
nil
)
#TODO:v.ak, v.al
end
def
watch
(
room
,
password
=
""
)
send
(
5
,
@key
,
room
.
id
,
password
,
checknum
(
"WATCHROOMMSG"
,
"
#{
@session
}#{
room
.
id
}#{
password
}
"
))
end
def
chat
(
msg
)
def
chat
(
msg
)
send
(
4
,
@key
,
msg
,
checknum
(
"CHATP"
,
@session
))
send
(
4
,
@key
,
msg
,
checknum
(
"CHATP"
,
@session
))
#4|241019,test,2368c6b89b3e2eedb92e1b624a2a157c
#4|241019,test,2368c6b89b3e2eedb92e1b624a2a157c
end
end
def
quitwatchroom
send
(
"QUITWATCHROOM"
,
@key
,
checknum
(
"QUITWATCHROOM"
,
@session
))
end
def
quit
send
(
11
,
@key
,
checknum
(
"ULO"
,
"
#{
@session
}
"
))
end
end
end
\ No newline at end of file
lib/iduel/room.rb
deleted
100644 → 0
View file @
aebd808b
class
Iduel
::
Room
@@all
=
[]
attr_accessor
:id
,
:name
,
:player1
,
:player2
,
:private
,
:color
class
<<
self
alias
old_new
new
def
new
(
id
,
*
args
)
id
=
id
.
to_i
room
=
@@all
.
find
{
|
room
|
room
.
id
==
id
}
if
room
room
else
room
=
old_new
(
id
,
*
args
)
@@all
<<
room
room
end
end
end
def
initialize
(
id
,
name
,
player1
,
player2
,
private
,
color
,
session
=
nil
,
forbid
=
nil
)
@id
=
id
@name
=
name
@player1
=
player1
@player2
=
player2
@private
=
private
@color
=
color
@forbid
=
forbid
@session
=
session
end
alias
full?
player2
alias
private
?
private
end
\ No newline at end of file
lib/iduel/user.rb
View file @
fe974547
class
Iduel
::
User
class
User
@@all
=
[]
attr_accessor
:level
,
:exp
attr_accessor
:id
,
:name
,
:level
,
:exp
def
self
.
parse
(
info
)
class
<<
self
info
=~
/(.+)\((\d+)\)/
alias
old_new
new
new
$2
.
to_i
,
$1
def
new
(
id
,
name
=
""
,
level
=
nil
,
exp
=
nil
)
if
id
.
is_a?
String
and
id
=~
/(.*)\((\d+)\)/
id
=
$2
.
to_i
name
=
$1
else
id
=
id
.
to_i
end
user
=
@@all
.
find
{
|
user
|
user
.
id
==
id
}
if
user
user
.
name
=
name
if
name
user
.
level
=
level
if
level
user
.
exp
=
exp
if
exp
user
else
user
=
old_new
(
id
,
name
,
level
,
exp
)
@@all
<<
user
user
end
end
end
end
def
initialize
(
id
,
name
=
""
,
level
=
nil
,
exp
=
nil
)
def
initialize
(
id
,
name
=
""
,
level
=
nil
,
exp
=
nil
)
@id
=
id
@id
=
id
@name
=
name
@name
=
name
@level
=
level
@level
=
level
@exp
=
exp
@exp
=
exp
#@status = :waiting
end
#@room = nil
def
set
(
id
,
name
=
:keep
,
level
=
:keep
,
exp
=
:keep
)
@id
=
id
unless
id
==
:keep
@name
=
name
unless
name
==
:keep
@level
=
level
unless
level
==
:keep
@exp
=
exp
unless
exp
==
:keep
end
end
def
avatar
(
size
=
:small
)
def
avatar
(
size
=
:small
)
cache
=
"graphics/avatars/
#{
@id
}
_
#{
size
}
.png"
cache
=
"graphics/avatars/
#{
@id
}
_
#{
size
}
.png"
...
@@ -57,6 +42,6 @@ class Iduel::User
...
@@ -57,6 +42,6 @@ class Iduel::User
result
result
end
end
def
room
def
room
$game
.
rooms
.
find
{
|
room
|
room
.
player1
==
self
or
room
.
player2
==
self
}
$game
.
rooms
.
find
{
|
room
|
room
.
include?
self
}
end
end
end
end
\ No newline at end of file
lib/nbx/event.rb
View file @
fe974547
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
class
Game_Event
class
Game_Event
def
self
.
parse
(
info
,
host
=
nil
)
def
self
.
parse
(
info
,
host
=
nil
)
result
=
(
if
host
#来自大厅的udp消息
if
host
#来自大厅的udp消息
info
=~
/^(\w*)\|(.*)$/m
info
=~
/^(\w*)\|(.*)$/m
case
$1
case
$1
when
"NewUser"
when
"NewUser"
...
@@ -31,9 +31,7 @@ class Game_Event
...
@@ -31,9 +31,7 @@ class Game_Event
else
else
Error
Error
end
.
parse
(
$1
)
end
.
parse
(
$1
)
end
)
end
p
info
,
result
result
end
end
...
@@ -79,6 +77,8 @@ class Game_Event
...
@@ -79,6 +77,8 @@ class Game_Event
self
.
new
::
Action
.
parse
(
info
),
info
self
.
new
::
Action
.
parse
(
info
),
info
end
end
end
end
#以下NBX专有
class
VerInf
class
VerInf
def
self
.
parse
(
info
)
def
self
.
parse
(
info
)
...
...
lib/nbx/nbx.rb
View file @
fe974547
...
@@ -10,8 +10,6 @@ class NBX < Game
...
@@ -10,8 +10,6 @@ class NBX < Game
require
'open-uri'
require
'open-uri'
require_relative
'action'
require_relative
'action'
require_relative
'event'
require_relative
'event'
require_relative
'user'
require_relative
'room'
@conn_hall
=
UDPSocket
.
new
@conn_hall
=
UDPSocket
.
new
@conn_hall
.
setsockopt
(
Socket
::
SOL_SOCKET
,
Socket
::
SO_BROADCAST
,
true
)
@conn_hall
.
setsockopt
(
Socket
::
SOL_SOCKET
,
Socket
::
SO_BROADCAST
,
true
)
...
...
lib/nbx/room.rb
deleted
100644 → 0
View file @
aebd808b
#class NBX::Room < Room
#end
\ No newline at end of file
lib/nbx/user.rb
deleted
100644 → 0
View file @
aebd808b
#class NBX::User < User
#end
\ No newline at end of file
lib/room.rb
View file @
fe974547
class
Room
class
Room
Color
=
[[
0
,
0
,
0
],
[
255
,
0
,
0
],
[
0
,
255
,
0
],
[
0
,
0
,
255
],
[
255
,
165
,
0
]]
extend
Cacheable
extend
Cacheable
attr_accessor
:id
,
:name
,
:player1
,
:player2
,
:private
,
:color
,
:forbid
attr_accessor
:id
,
:name
,
:player1
,
:player2
,
:private
,
:color
,
:forbid
def
set
(
id
,
name
,
player1
,
player2
=
nil
,
private
=
false
,
color
=
[
0
,
0
,
0
]
,
forbid
=
nil
)
def
initialize
(
id
,
name
=
""
,
player1
=
nil
,
player2
=
nil
,
private
=
false
,
color
=
[
0
,
0
,
0
],
session
=
nil
,
forbid
=
nil
)
@id
=
id
@id
=
id
@name
=
name
@name
=
name
@player1
=
player1
@player1
=
player1
@player2
=
player2
@player2
=
player2
@private
=
private
@private
=
private
@color
=
color
@color
=
color
@session
=
session
@forbid
=
forbid
@forbid
=
forbid
end
end
def
set
(
id
=
:keep
,
name
=
:keep
,
player1
=
:keep
,
player2
=
:keep
,
private
=
:keep
,
color
=
:keep
,
session
=
nil
,
forbid
=
:keep
)
@id
=
id
unless
id
==
:keep
@name
=
name
unless
name
==
:keep
@player1
=
player1
unless
player1
==
:keep
@player2
=
player2
unless
player2
==
:keep
@private
=
private
unless
private
==
:keep
@color
=
color
unless
color
==
:keep
@session
=
session
unless
session
==
:keep
@forbid
=
forbid
unless
forbid
==
:keep
end
def
include?
(
user
)
@player1
==
user
or
@player2
==
user
end
alias
full?
player2
alias
full?
player2
alias
private
?
private
alias
private
?
private
end
end
\ No newline at end of file
lib/scene_duel.rb
View file @
fe974547
...
@@ -21,9 +21,10 @@ class Scene_Duel < Scene
...
@@ -21,9 +21,10 @@ class Scene_Duel < Scene
attr_reader
:player_field_window
attr_reader
:player_field_window
attr_reader
:opponent_field_window
attr_reader
:opponent_field_window
attr_reader
:fieldback_window
attr_reader
:fieldback_window
def
initialize
(
room
)
def
initialize
(
room
,
deck
=
nil
)
super
()
super
()
@room
=
room
@room
=
room
@deck
=
deck
end
end
def
start
def
start
$game
.
refresh
if
$game
$game
.
refresh
if
$game
...
@@ -37,7 +38,7 @@ class Scene_Duel < Scene
...
@@ -37,7 +38,7 @@ class Scene_Duel < Scene
@phases_window
=
Window_Phases
.
new
(
124
,
357
)
@phases_window
=
Window_Phases
.
new
(
124
,
357
)
@turn_player
=
true
@turn_player
=
true
$game
.
player_field
=
Game_Field
.
new
Deck
.
load
(
"test1.TXT"
)
$game
.
player_field
=
Game_Field
.
new
@deck
$game
.
opponent_field
=
Game_Field
.
new
$game
.
opponent_field
=
Game_Field
.
new
@fieldback_window
=
Window_FieldBack
.
new
(
130
,
174
)
@fieldback_window
=
Window_FieldBack
.
new
(
130
,
174
)
...
@@ -135,6 +136,8 @@ class Scene_Duel < Scene
...
@@ -135,6 +136,8 @@ class Scene_Duel < Scene
@opponent_field_window
.
refresh
@opponent_field_window
.
refresh
when
Game_Event
::
Error
when
Game_Event
::
Error
Widget_Msgbox
.
new
(
event
.
title
,
event
.
message
){
$scene
=
Scene_Title
.
new
}
Widget_Msgbox
.
new
(
event
.
title
,
event
.
message
){
$scene
=
Scene_Title
.
new
}
when
Game_Event
::
Leave
$scene
=
Scene_Hall
.
new
end
end
end
end
def
update
def
update
...
...
lib/scene_hall.rb
View file @
fe974547
...
@@ -80,7 +80,7 @@ class Scene_Hall < Scene
...
@@ -80,7 +80,7 @@ class Scene_Hall < Scene
@roomlist
.
list
=
$game
.
rooms
@roomlist
.
list
=
$game
.
rooms
when
Game_Event
::
Join
when
Game_Event
::
Join
require_relative
'scene_duel'
require_relative
'scene_duel'
$scene
=
Scene_Duel
.
new
(
event
.
room
)
$scene
=
Scene_Duel
.
new
(
event
.
room
,
Deck
.
load
(
"test1.TXT"
)
)
when
Game_Event
::
Watch
when
Game_Event
::
Watch
require_relative
'scene_watch'
require_relative
'scene_watch'
$scene
=
Scene_Watch
.
new
(
event
.
room
)
$scene
=
Scene_Watch
.
new
(
event
.
room
)
...
...
lib/scene_login.rb
View file @
fe974547
...
@@ -16,24 +16,25 @@ class Scene_Login < Scene
...
@@ -16,24 +16,25 @@ class Scene_Login < Scene
end
end
end
end
def
login
def
login
@font
.
draw_blended_utf8
(
$screen
,
Vocab_Logging
,
0
,
0
,
255
,
0
,
255
)
@font
.
draw_blended_utf8
(
$screen
,
Vocab_Logging
,
0
,
0
,
255
,
0
,
255
)
$screen
.
update_rect
(
0
,
0
,
100
,
24
)
$game
=
Iduel
.
new
$game
=
Iduel
.
new
$game
.
login
(
@username
,
@password
)
$game
.
login
(
@username
,
@password
)
end
end
def
update
def
update
while
event
=
Event
.
poll
while
event
=
Game_Event
.
poll
handle_game
(
event
)
end
super
end
def
handle
(
event
)
case
event
case
event
when
Event
::
Quit
when
Event
::
Quit
$scene
=
nil
$scene
=
nil
end
end
end
end
def
handle_game
(
event
)
while
event
=
Game_Event
.
poll
case
event
case
event
when
Game_Event
::
LOGINOK
when
Game_Event
::
Login
require_relative
'scene_hall'
require_relative
'scene_hall'
$scene
=
Scene_Hall
.
new
$scene
=
Scene_Hall
.
new
when
Game_Event
::
Error
when
Game_Event
::
Error
...
@@ -42,5 +43,5 @@ class Scene_Login < Scene
...
@@ -42,5 +43,5 @@ class Scene_Login < Scene
p
event
p
event
end
end
end
end
end
end
end
lib/scene_watch.rb
View file @
fe974547
...
@@ -5,6 +5,8 @@
...
@@ -5,6 +5,8 @@
#==============================================================================
#==============================================================================
require_relative
'scene_duel'
require_relative
'scene_duel'
class
Scene_Watch
<
Scene_Duel
class
Scene_Watch
<
Scene_Duel
def
action
(
action
)
action
.
run
end
end
end
lib/user.rb
View file @
fe974547
class
User
class
User
attr_accessor
:id
,
:name
attr_accessor
:id
,
:name
extend
Cacheable
extend
Cacheable
def
set
(
id
,
name
=
""
)
def
initialize
(
id
,
name
=
""
)
@id
=
id
@id
=
id
@name
=
name
if
name
@name
=
name
end
def
set
(
id
,
name
=
:keep
)
@id
=
id
@name
=
name
unless
name
==
:keep
end
end
def
avatar
(
size
=
:small
)
def
avatar
(
size
=
:small
)
Surface
.
new
(
SWSURFACE
,
1
,
1
,
32
,
0
,
0
,
0
,
0
)
Surface
.
new
(
SWSURFACE
,
1
,
1
,
32
,
0
,
0
,
0
,
0
)
...
...
lib/window_action.rb
View file @
fe974547
...
@@ -25,7 +25,6 @@ class Window_Action < Window_List
...
@@ -25,7 +25,6 @@ class Window_Action < Window_List
@list_available
=
list
.
values
@list_available
=
list
.
values
@height
=
@viewport
[
3
]
=
@list
.
size
*
WLH
+
15
*
2
@height
=
@viewport
[
3
]
=
@list
.
size
*
WLH
+
15
*
2
@item_max
=
@list
.
size
@item_max
=
@list
.
size
p
list
@index
=
@list_available
.
find_index
(
true
)
||
0
@index
=
@list_available
.
find_index
(
true
)
||
0
refresh
refresh
@visible
=
true
@visible
=
true
...
...
lib/window_field.rb
View file @
fe974547
...
@@ -78,7 +78,6 @@ class Window_Field < Window
...
@@ -78,7 +78,6 @@ class Window_Field < Window
Surface
.
transform_draw
(
@cards
[
index
].
image_small
,
@contents
,
90
,
1
,
1
,
0
,
0
,
@items
[
index
][
0
]
+
Card_Size
[
1
],
@items
[
index
][
1
],
Surface
::
TRANSFORM_SAFE
)
Surface
.
transform_draw
(
@cards
[
index
].
image_small
,
@contents
,
90
,
1
,
1
,
0
,
0
,
@items
[
index
][
0
]
+
Card_Size
[
1
],
@items
[
index
][
1
],
Surface
::
TRANSFORM_SAFE
)
@contents
.
put
(
@border_horizontal
,
@items
[
index
][
0
]
-
1
,
@items
[
index
][
1
]
-
1
)
if
status
==
1
@contents
.
put
(
@border_horizontal
,
@items
[
index
][
0
]
-
1
,
@items
[
index
][
1
]
-
1
)
if
status
==
1
else
else
p
index
,
@cards
[
index
]
@contents
.
put
(
@cards
[
index
].
image_small
,
@items
[
index
][
0
],
@items
[
index
][
1
])
@contents
.
put
(
@cards
[
index
].
image_small
,
@items
[
index
][
0
],
@items
[
index
][
1
])
@contents
.
put
(
@border
,
@items
[
index
][
0
]
-
1
,
@items
[
index
][
1
]
-
1
)
if
status
==
1
@contents
.
put
(
@border
,
@items
[
index
][
0
]
-
1
,
@items
[
index
][
1
]
-
1
)
if
status
==
1
end
end
...
...
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