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
xiaoye
mycard
Commits
3bd44e28
Commit
3bd44e28
authored
Jan 19, 2012
by
神楽坂玲奈
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
重写Move#run,指示物、备注支持。添加了几个操作指令,基本能解析各种常见指令了
parent
89688fc9
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
192 additions
and
103 deletions
+192
-103
graphics/field/counter.png
graphics/field/counter.png
+0
-0
lib/action.rb
lib/action.rb
+121
-71
lib/card.rb
lib/card.rb
+4
-4
lib/game_card.rb
lib/game_card.rb
+1
-1
lib/iduel/action.rb
lib/iduel/action.rb
+43
-17
lib/iduel/replay.rb
lib/iduel/replay.rb
+1
-1
lib/nbx/action.rb
lib/nbx/action.rb
+1
-1
lib/scene_replay.rb
lib/scene_replay.rb
+0
-1
lib/window_field.rb
lib/window_field.rb
+21
-7
No files found.
graphics/field/counter.png
0 → 100644
View file @
3bd44e28
This diff was suppressed by a .gitattributes entry.
lib/action.rb
View file @
3bd44e28
...
@@ -41,13 +41,6 @@ class Action
...
@@ -41,13 +41,6 @@ class Action
super
super
end
end
end
end
class
Note
<
Action
attr_reader
:card
def
initialize
(
from_player
,
msg
,
card
)
super
(
from_player
,
msg
)
@card
=
card
end
end
class
Coin
<
Action
class
Coin
<
Action
attr_reader
:result
attr_reader
:result
def
initialize
(
from_player
,
result
=
rand
(
1
)
==
0
,
msg
=
nil
)
def
initialize
(
from_player
,
result
=
rand
(
1
)
==
0
,
msg
=
nil
)
...
@@ -75,89 +68,71 @@ class Action
...
@@ -75,89 +68,71 @@ class Action
end
end
class
Move
<
Action
class
Move
<
Action
attr_reader
:from_pos
,
:to_pos
,
:card
,
:position
attr_reader
:from_pos
,
:to_pos
,
:card
,
:position
def
initialize
(
from_player
,
from_pos
,
to_pos
=
nil
,
card
=
Card
::
Unknown
,
msg
=
nil
,
position
=
nil
)
def
initialize
(
from_player
,
from_pos
,
to_pos
=
nil
,
card
=
nil
,
msg
=
nil
,
position
=
nil
)
super
(
from_player
,
msg
)
super
(
from_player
,
msg
)
@from_pos
=
from_pos
@from_pos
=
from_pos
@to_pos
=
to_pos
@to_pos
=
to_pos
@card
=
card
@card
=
card
@position
=
position
@position
=
position
end
end
def
run
def
parse_field
(
pos
)
$log
.
debug
(
'--------------move action run--------------'
){
self
.
inspect
}
case
pos
from_field
=
case
@from_pos
when
0
..
10
,
:field
when
0
..
10
player_field
.
field
player_field
.
field
when
Integer
,
:hand
when
11
..
70
,
:hand
,
:handtop
,
:handrandom
player_field
.
hand
player_field
.
hand
when
:field
when
71
..
130
,
:deck
,
:decktop
,
:deckbottom
player_field
.
field
player_field
.
deck
when
:graveyard
when
:graveyard
player_field
.
graveyard
player_field
.
graveyard
when
:deck
player_field
.
deck
when
:extra
when
:extra
player_field
.
extra
player_field
.
extra
when
:removed
when
:removed
player_field
.
removed
player_field
.
removed
end
end
from_pos
=
if
@from_pos
.
is_a?
Integer
if
@from_pos
>
10
@from_pos
-
11
else
@from_pos
end
end
elsif
@card
==
:deck
def
run
#$log.debug('移动操作执行'){self.inspect}
from_field
=
parse_field
(
@from_pos
)
from_pos
=
case
@from_pos
when
0
..
10
@from_pos
when
11
..
70
@from_pos
-
11
when
71
..
130
@from_pos
-
71
when
:handtop
player_field
.
hand
.
size
-
1
when
:decktop
player_field
.
deck
.
size
-
1
player_field
.
deck
.
size
-
1
else
else
(
@card
.
is_a?
(
Game_Card
)
?
from_field
.
index
(
@card
)
:
from_field
.
index
{
|
card
|
card
.
card
==
@card
})
||
from_field
.
index
{
|
card
|!
card
.
known?
}
(
@card
.
is_a?
(
Game_Card
)
?
from_field
.
index
(
@card
)
:
from_field
.
index
{
|
card
|
card
.
card
==
@card
})
||
from_field
.
index
{
|
card
|!
card
.
known?
}
end
end
to_field
=
case
@to_pos
when
Integer
to_field
=
parse_field
(
@to_pos
)
player_field
.
field
when
:hand
card
=
if
from_pos
player_field
.
hand
case
@card
when
:graveyard
player_field
.
graveyard
when
:deck
,
:deckbottom
player_field
.
deck
when
:extra
player_field
.
extra
when
:removed
player_field
.
removed
end
if
from_pos
card
=
case
@card
when
Game_Card
when
Game_Card
from_field
[
from_pos
]
=
@card
@card
when
nil
,
Card
::
Unknown
if
!
from_field
[
from_pos
]
from_field
[
from_pos
]
=
Game_Card
.
new
(
Card
::
Unknown
)
$log
.
warn
(
'卡片移动'
){
'似乎凭空产生了卡片'
+
self
.
inspect
}
from_field
[
from_pos
].
position
=
:attack
end
from_field
[
from_pos
]
when
Card
when
Card
if
!
from_field
[
from_pos
]
if
from_field
[
from_pos
]
from_field
[
from_pos
]
=
Game_Card
.
new
(
@card
)
from_field
[
from_pos
].
position
=
:attack
else
from_field
[
from_pos
].
card
=
@card
from_field
[
from_pos
].
card
=
@card
else
$log
.
warn
(
'移动操作1'
){
'似乎凭空产生了卡片'
+
self
.
inspect
}
from_field
[
from_pos
]
=
Game_Card
.
new
(
@card
)
end
end
from_field
[
from_pos
]
from_field
[
from_pos
]
when
:deck
player_field
.
deck
.
last
end
if
@to_pos
if
from_field
==
player_field
.
field
from_field
[
from_pos
]
=
nil
else
else
from_field
.
delete_at
from_pos
from_field
[
from_pos
]
||
Game_Card
.
new
end
end
end
else
else
#没有来源
card
=
@card
==
:deck
?
player_field
.
deck
.
first
:
Game_Card
.
new
(
@card
)
$log
.
warn
(
'移动操作2'
){
'似乎凭空产生了卡片'
+
self
.
inspect
}
$log
.
warn
(
'卡片移动'
){
'似乎凭空产生了卡片'
+
self
.
inspect
}
Game_Card
.
new
(
@card
)
end
end
if
@position
if
@position
if
@position
==
:"face-up"
if
@position
==
:"face-up"
if
card
.
position
!=
:attack
and
(
6
..
10
).
include?
(
@to_pos
||
@from_pos
)
#里侧表示的怪兽
if
card
.
position
!=
:attack
and
(
6
..
10
).
include?
(
@to_pos
||
@from_pos
)
#里侧表示的怪兽
...
@@ -169,15 +144,27 @@ class Action
...
@@ -169,15 +144,27 @@ class Action
card
.
position
=
@position
card
.
position
=
@position
end
end
end
end
if
@to_pos
if
@to_pos
if
@to_pos
.
is_a?
Integer
if
from_pos
to_field
[
@to_pos
]
=
card
if
from_field
==
player_field
.
field
elsif
@to_pos
==
:hand
or
@to_pos
==
:deck
from_field
[
from_pos
]
=
nil
to_field
<<
card
else
else
from_field
.
delete_at
from_pos
end
end
case
@to_pos
when
0
..
10
to_field
[
@to_pos
]
=
card
when
:hand
,
:deck
,
:decktop
,
:extra
,
:graveyard
,
:removed
to_field
.
push
card
when
:deckbottom
to_field
.
unshift
card
to_field
.
unshift
card
else
$log
.
error
(
'移动操作3'
){
'错误的to_pos'
+
self
.
inspect
}
end
end
end
end
super
super
end
end
end
end
...
@@ -249,6 +236,7 @@ class Action
...
@@ -249,6 +236,7 @@ class Action
card
.
card
=
@card
card
.
card
=
@card
card
card
else
else
$log
.
warn
(
'转移控制权'
){
'似乎凭空产生了卡片'
+
self
.
inspect
}
Game_Card
.
new
(
@card
)
Game_Card
.
new
(
@card
)
end
end
...
@@ -291,7 +279,7 @@ class Action
...
@@ -291,7 +279,7 @@ class Action
class
Draw
<
Move
class
Draw
<
Move
def
initialize
(
from_player
=
true
,
msg
=
nil
)
def
initialize
(
from_player
=
true
,
msg
=
nil
)
@from_player
=
from_player
@from_player
=
from_player
super
(
from_player
,
:deck
,
:hand
,
:deck
,
msg
,
:set
)
super
(
from_player
,
:deck
top
,
:hand
,
nil
,
msg
,
:set
)
end
end
end
end
class
Counter
<
Action
class
Counter
<
Action
...
@@ -304,7 +292,7 @@ class Action
...
@@ -304,7 +292,7 @@ class Action
end
end
def
run
def
run
super
super
player_field
.
hand
+=
player_field
.
deck
.
pop
(
@count
)
player_field
.
hand
.
concat
player_field
.
deck
.
pop
(
@count
)
end
end
end
end
class
MultiMove
<
Action
class
MultiMove
<
Action
...
@@ -491,10 +479,32 @@ class Action
...
@@ -491,10 +479,32 @@ class Action
end
end
end
end
class
MultiShow
<
Action
class
MultiShow
<
Action
def
initialize
(
from_player
,
cards
)
def
initialize
(
from_player
,
from_pos
=
nil
,
cards
)
super
(
from_player
,
nil
)
super
(
from_player
,
nil
)
@from_pos
=
from_pos
@cards
=
cards
@cards
=
cards
end
end
def
run
return
if
@cards
[
0
].
is_a?
Game_Card
#本地消息,不处理
case
@from_pos
when
:hand
if
player_field
.
hand
.
size
>
@cards
.
size
player_field
.
hand
.
pop
(
player_field
.
hand
.
size
-
@cards
.
size
)
end
@cards
.
each_with_index
do
|
card
,
index
|
if
player_field
.
hand
[
index
]
player_field
.
hand
[
index
].
card
=
card
else
player_field
.
hand
[
index
]
=
Game_Card
.
new
card
end
end
when
71
..
130
cards
=
@cards
.
to_enum
player_field
.
deck
[
@from_pos
-
71
,
@cards
.
size
].
each
do
|
game_card
|
game_card
.
card
=
cards
.
next
end
end
end
end
end
class
EffectActivate
<
Move
class
EffectActivate
<
Move
def
initialize
(
from_player
,
from_pos
,
card
)
def
initialize
(
from_player
,
from_pos
,
card
)
...
@@ -615,6 +625,46 @@ class Action
...
@@ -615,6 +625,46 @@ class Action
end
end
end
end
end
end
class
Note
<
Action
def
initialize
(
from_player
,
from_pos
,
card
,
note
)
super
(
from_player
)
@from_pos
=
from_pos
@card
=
card
@note
=
note
end
def
run
card
=
if
@card
.
is_a?
Game_Card
@card
else
if
player_field
.
field
[
@from_pos
]
player_field
.
field
[
@from_pos
].
card
=
@card
else
$log
.
warn
(
'指示物操作'
){
'似乎凭空产生了卡片'
+
self
.
inspect
}
player_field
.
field
[
@from_pos
]
=
Game_Card
.
new
(
@card
)
player_field
.
field
[
@from_pos
].
position
=
:attack
end
player_field
.
field
[
@from_pos
]
end
card
.
note
=
@note
end
end
class
Token
<
SpecialSummon
def
initialize
(
from_player
,
to_pos
,
card
,
position
=
:defense
)
super
(
from_player
,
nil
,
to_pos
,
card
)
end
end
class
MultiToken
<
SpecialSummon
def
initialize
(
from_player
,
num
,
card
,
position
=
:attack
)
super
(
from_player
,
nil
,
nil
,
card
)
@num
=
num
end
def
run
@num
.
times
do
@to_pos
=
player_field
.
field
[
6
..
10
].
index
(
nil
)
+
6
super
end
end
end
class
Add
<
Action
class
Add
<
Action
def
initialize
(
from_player
,
card
)
def
initialize
(
from_player
,
card
)
super
(
from_player
)
super
(
from_player
)
...
...
lib/card.rb
View file @
3bd44e28
...
@@ -47,6 +47,7 @@ class Card
...
@@ -47,6 +47,7 @@ class Card
def
new
(
id
)
def
new
(
id
)
find
(
id
)
find
(
id
)
end
end
def
load_from_ycff3
(
db
=
"E:/game/yu-gi-oh/YGODATA/YGODAT.mdb"
)
def
load_from_ycff3
(
db
=
"E:/game/yu-gi-oh/YGODATA/YGODAT.mdb"
)
require
'win32ole'
require
'win32ole'
conn
=
WIN32OLE
.
new
(
'ADODB.Connection'
)
conn
=
WIN32OLE
.
new
(
'ADODB.Connection'
)
...
@@ -148,7 +149,6 @@ class Card
...
@@ -148,7 +149,6 @@ class Card
@token
=
hash
[
'token'
]
@token
=
hash
[
'token'
]
Card
.
cache
[
@id
]
=
self
Card
.
cache
[
@id
]
=
self
end
end
def
create_image
def
create_image
@image
||=
Surface
.
load
(
"graphics/field/card.jpg"
).
display_format
@image
||=
Surface
.
load
(
"graphics/field/card.jpg"
).
display_format
...
@@ -185,9 +185,9 @@ class Card
...
@@ -185,9 +185,9 @@ class Card
def
token?
def
token?
@token
@token
end
end
def
inspect
#
def inspect
"[
#{
card_type
}
][
#{
name
}
]"
#
"[#{card_type}][#{name}]"
end
#
end
Unknown
=
Card
.
new
(
'id'
=>
0
,
'number'
=>
:"00000000"
,
'name'
=>
""
,
'lore'
=>
''
,
'card_type'
=>
:
通常怪兽
,
'stats'
=>
""
,
'archettypes'
=>
""
,
'mediums'
=>
""
)
Unknown
=
Card
.
new
(
'id'
=>
0
,
'number'
=>
:"00000000"
,
'name'
=>
""
,
'lore'
=>
''
,
'card_type'
=>
:
通常怪兽
,
'stats'
=>
""
,
'archettypes'
=>
""
,
'mediums'
=>
""
)
Unknown
.
instance_eval
{
@image
=
CardBack
;
@image_small
=
CardBack_Small
}
Unknown
.
instance_eval
{
@image
=
CardBack
;
@image_small
=
CardBack_Small
}
end
end
\ No newline at end of file
lib/game_card.rb
View file @
3bd44e28
#encoding: UTF-8
#encoding: UTF-8
class
Game_Card
class
Game_Card
attr_accessor
:card
,
:position
,
:counters
attr_accessor
:card
,
:position
,
:counters
,
:note
attr_writer
:atk
,
:def
attr_writer
:atk
,
:def
@@count
=
0
@@count
=
0
def
initialize
(
card
=
nil
)
def
initialize
(
card
=
nil
)
...
...
lib/iduel/action.rb
View file @
3bd44e28
#encoding: UTF-8
#encoding: UTF-8
#这个文件iduel和nbx相同,编辑时推荐使用软/硬链接来保持一致
#这个文件iduel和nbx相同,编辑时推荐使用软/硬链接来保持一致
class
Action
class
Action
CardFilter
=
/(
(?:<)?(?:\[.*?\])?\[(?:.*?)\].*?(?:>)
?|一张怪兽卡|一张魔\/陷卡|一张卡|\?\?)/
CardFilter
=
/(
<?\[?Token[ \\\d]*\]?>?|<?(?:\[.*?\])?\[(?:.*?)\][ \d]*>
?|一张怪兽卡|一张魔\/陷卡|一张卡|\?\?)/
PosFilter
=
/((?:手卡|手牌|场上|魔陷区|怪兽区|墓地|额外牌堆|除外区|卡组|卡组顶端|\(\d+\)){1,2})/
PosFilter
=
/((?:手卡|手牌|场上|魔陷区|怪兽区|墓地|
墓地\|,,,,,\|\*\:\d+张\:\*|
额外牌堆|除外区|卡组|卡组顶端|\(\d+\)){1,2})/
PositionFilter
=
/(表攻|表守|里守|攻击表示|防守表示|里侧表示|背面守备表示)/
PositionFilter
=
/(表攻|表守|里守|攻击表示|防守表示|里侧表示|背面守备表示)/
PhaseFilter
=
/(抽卡`阶段|准备`阶段|主`阶段1|战斗`阶段|主`阶段2|结束`阶段)/
PhaseFilter
=
/(抽卡`阶段|准备`阶段|主`阶段1|战斗`阶段|主`阶段2|结束`阶段)/
CountersFilter
=
/(?:\()?(\d+)?(?:\))?/
CountersFilter
=
/(?:\()?(\d+)?(?:\))?/
...
@@ -25,15 +25,19 @@ class Action
...
@@ -25,15 +25,19 @@ class Action
:extra
:extra
when
"除外区"
when
"除外区"
:removed
:removed
when
"卡组顶端"
,
"卡组"
when
"卡组顶端"
:decktop
when
"卡组"
:deck
:deck
end
end
end
end
end
end
def
self
.
parse_card
(
card
)
def
self
.
parse_card
(
card
)
if
index
=
card
.
rindex
(
"["
)
if
card
[
'Token'
]
@token
||=
Card
.
new
(
'name'
=>
:Token
,
'id'
=>-
1
,
'token'
=>
true
,
'number'
=>
:"00000000"
,
'card_type'
=>
:
通常怪兽
,
'stats'
=>
""
,
'archettypes'
=>
""
,
'mediums'
=>
""
,
'lore'
=>
"这张卡作为衍生物使用。"
)
elsif
index
=
card
.
rindex
(
'['
)
index
+=
1
index
+=
1
name
=
card
[
index
,
card
.
rindex
(
"]"
)
-
index
].
to_sym
name
=
card
[
index
,
card
.
rindex
(
']'
)
-
index
].
to_sym
Card
.
find
(
name
)
Card
.
find
(
name
)
else
else
Card
.
find
(
nil
)
Card
.
find
(
nil
)
...
@@ -209,8 +213,6 @@ class Action
...
@@ -209,8 +213,6 @@ class Action
Side
.
new
from_player
Side
.
new
from_player
when
"卡组洗切"
,
"切洗卡组"
when
"卡组洗切"
,
"切洗卡组"
Shuffle
.
new
from_player
Shuffle
.
new
from_player
when
"查看卡组"
ViewDeck
.
new
from_player
when
"要连锁吗?"
when
"要连锁吗?"
ActivateAsk
.
new
from_player
ActivateAsk
.
new
from_player
when
"我要连锁!"
when
"我要连锁!"
...
@@ -218,9 +220,11 @@ class Action
...
@@ -218,9 +220,11 @@ class Action
when
"请继续吧~"
when
"请继续吧~"
ActivateAnswer
.
new
from_player
,
false
ActivateAnswer
.
new
from_player
,
false
when
"将顶牌放回卡组底部"
when
"将顶牌放回卡组底部"
ReturnToDeckBottom
.
new
(
from_player
,
:deck
)
ReturnToDeckBottom
.
new
(
from_player
,
:deck
top
)
when
/抽取\((\d+)\)张卡/
when
/抽取\((\d+)\)张卡/
MultiDraw
.
new
from_player
,
$1
.
to_i
MultiDraw
.
new
from_player
,
$1
.
to_i
when
/己方卡组第(\d+)张加入手卡/
ReturnToHand
.
new
(
from_player
,
$1
.
to_i
+
71
,
nil
)
when
/\[\d+年\d+月\d+日禁卡表\](?:<(.+)> )?先攻/
when
/\[\d+年\d+月\d+日禁卡表\](?:<(.+)> )?先攻/
FirstToGo
.
new
from_player
,
$1
FirstToGo
.
new
from_player
,
$1
when
/\[\d+年\d+月\d+日禁卡表\](?:<(.+)> )?后攻/
when
/\[\d+年\d+月\d+日禁卡表\](?:<(.+)> )?后攻/
...
@@ -229,6 +233,12 @@ class Action
...
@@ -229,6 +233,12 @@ class Action
Dice
.
new
from_player
,
$2
.
to_i
,
$1
Dice
.
new
from_player
,
$2
.
to_i
,
$1
when
/(.*)抛硬币,结果为(.+)/
when
/(.*)抛硬币,结果为(.+)/
Coin
.
new
from_player
,
$2
==
"正面"
,
$1
Coin
.
new
from_player
,
$2
==
"正面"
,
$1
when
"查看卡组"
ViewDeck
.
new
from_player
when
/查看卡组上方(\d+)张卡/
ViewDeck
.
new
from_player
,
$1
.
to_i
when
/刚才抽到的卡是:
#{
CardFilter
}
/
Show
.
new
(
from_player
,
:handtop
,
parse_card
(
$1
))
when
/从
#{
PosFilter
}
~发动
#{
CardFilter
}#{
PosFilter
}
/
when
/从
#{
PosFilter
}
~发动
#{
CardFilter
}#{
PosFilter
}
/
Activate
.
new
from_player
,
parse_pos
(
$1
),
parse_pos
(
$3
),
parse_card
(
$2
)
Activate
.
new
from_player
,
parse_pos
(
$1
),
parse_pos
(
$3
),
parse_card
(
$2
)
when
/从
#{
PosFilter
}
~召唤
#{
CardFilter
}#{
PosFilter
}
/
when
/从
#{
PosFilter
}
~召唤
#{
CardFilter
}#{
PosFilter
}
/
...
@@ -244,15 +254,23 @@ class Action
...
@@ -244,15 +254,23 @@ class Action
when
/随机将一张卡从手卡\((\d+\))~放回卡组顶端/
when
/随机将一张卡从手卡\((\d+\))~放回卡组顶端/
ReturnToDeck
.
new
(
from_player
,
$1
.
to_i
+
10
,
nil
)
ReturnToDeck
.
new
(
from_player
,
$1
.
to_i
+
10
,
nil
)
when
/随机舍弃~手卡~
#{
CardFilter
}
/
when
/随机舍弃~手卡~
#{
CardFilter
}
/
Discard
.
new
(
from_player
,
:hand
,
parse_card
(
$1
))
Discard
.
new
(
from_player
,
:hand
random
,
parse_card
(
$1
))
when
/随机将手卡的
#{
CardFilter
}
从游戏中除外/
when
/随机将手卡的
#{
CardFilter
}
从游戏中除外/
Remove
.
new
from_player
,
:hand
,
parse_card
(
$1
)
Remove
.
new
from_player
,
:hand
random
,
parse_card
(
$1
)
when
/随机显示一张手卡为:
#{
CardFilter
}
/
when
/随机显示一张手卡为:
#{
CardFilter
}
/
Show
.
new
(
from_player
,
:hand
,
parse_card
(
$1
))
Show
.
new
(
from_player
,
:hand
random
,
parse_card
(
$1
))
when
/第(\d+)张手牌为:
#{
CardFilter
}
/
when
/第(\d+)张手牌为:
#{
CardFilter
}
/
Show
.
new
(
from_player
,
$1
.
to_i
+
10
,
parse_card
(
$2
))
Show
.
new
(
from_player
,
$1
.
to_i
+
10
,
parse_card
(
$2
))
when
/\|--\+>手卡:(?:\[
#{
CardFilter
}
\])*/
when
/\|--\+>手卡:(?:\[
#{
CardFilter
}
\])*/
MultiShow
.
new
from_player
,
$&
.
scan
(
CardFilter
).
collect
{
|
matched
|
parse_card
(
matched
.
first
)}
MultiShow
.
new
from_player
,
:hand
,
$&
.
scan
(
CardFilter
).
collect
{
|
matched
|
parse_card
(
matched
.
first
)}
when
/^(?:(\d+)
#{
CardFilter
}
\n?)+$/
from_pos
=
71
cards
=
$&
.
lines
.
collect
do
|
line
|
line
=~
/(\d+)
#{
CardFilter
}
/
from_pos
||=
$1
.
to_i
+
71
parse_card
(
$2
)
end
MultiShow
.
new
from_player
,
from_pos
,
cards
when
/将
#{
PosFilter
}
的
#{
CardFilter
}
从游戏中除外/
when
/将
#{
PosFilter
}
的
#{
CardFilter
}
从游戏中除外/
Remove
.
new
from_player
,
parse_pos
(
$1
),
parse_card
(
$2
)
Remove
.
new
from_player
,
parse_pos
(
$1
),
parse_card
(
$2
)
when
/
#{
CardFilter
}
从
#{
PosFilter
}
~放回卡组顶端/
when
/
#{
CardFilter
}
从
#{
PosFilter
}
~放回卡组顶端/
...
@@ -263,7 +281,7 @@ class Action
...
@@ -263,7 +281,7 @@ class Action
ReturnToExtra
.
new
from_player
,
parse_pos
(
$2
),
parse_card
(
$1
)
ReturnToExtra
.
new
from_player
,
parse_pos
(
$2
),
parse_card
(
$1
)
when
/从
#{
PosFilter
}
取
#{
CardFilter
}
加入手卡/
when
/从
#{
PosFilter
}
取
#{
CardFilter
}
加入手卡/
ReturnToHand
.
new
from_player
,
parse_pos
(
$1
),
parse_card
(
$2
)
ReturnToHand
.
new
from_player
,
parse_pos
(
$1
),
parse_card
(
$2
)
when
/(?:己方)?
#{
PosFilter
}
.*?
#{
CardFilter
}
效果发(?:\~)?动/
when
/(?:己方)?
#{
PosFilter
}
.*?
#{
CardFilter
}
(?:选择(.*)为对象>)?
效果发(?:\~)?动/
EffectActivate
.
new
(
from_player
,
parse_pos
(
$1
),
parse_card
(
$2
))
EffectActivate
.
new
(
from_player
,
parse_pos
(
$1
),
parse_card
(
$2
))
when
/
#{
PosFilter
}#{
CardFilter
}
(?:变|改)为
#{
PositionFilter
}
/
when
/
#{
PosFilter
}#{
CardFilter
}
(?:变|改)为
#{
PositionFilter
}
/
ChangePosition
.
new
(
from_player
,
parse_pos
(
$1
),
parse_card
(
$2
),
parse_position
(
$3
))
ChangePosition
.
new
(
from_player
,
parse_pos
(
$1
),
parse_card
(
$2
),
parse_position
(
$3
))
...
@@ -304,8 +322,8 @@ class Action
...
@@ -304,8 +322,8 @@ class Action
MultiMove
.
new
(
from_player
,
from_pos
,
to_pos
,
cards
)
MultiMove
.
new
(
from_player
,
from_pos
,
to_pos
,
cards
)
when
/己方
#{
PosFilter
}#{
CardFilter
}
送入对手墓地/
when
/己方
#{
PosFilter
}#{
CardFilter
}
送入对手墓地/
SendToOpponentGraveyard
.
new
(
from_player
,
parse_pos
(
$1
),
parse_card
(
$2
))
SendToOpponentGraveyard
.
new
(
from_player
,
parse_pos
(
$1
),
parse_card
(
$2
))
when
/
#{
PosFilter
}#{
CardFilter
}
选择(我方)?-
#{
PosFilter
}
-
#{
CardFilter
}
为效果对象/
when
/
#{
PosFilter
}#{
CardFilter
}
选择(我方)?-
#{
PosFilter
}
-
(?:
#{
PositionFilter
}
\|)?
#{
CardFilter
}
为效果对象/
Target
.
new
(
from_player
,
parse_pos
(
$1
),
parse_card
(
$2
),
$3
?
true
:
false
,
parse_pos
(
$4
),
parse_card
(
$
5
))
Target
.
new
(
from_player
,
parse_pos
(
$1
),
parse_card
(
$2
),
$3
?
true
:
false
,
parse_pos
(
$4
),
parse_card
(
$
6
))
when
/
#{
PhaseFilter
}
/
when
/
#{
PhaseFilter
}
/
ChangePhase
.
new
(
from_player
,
parse_phase
(
$1
))
ChangePhase
.
new
(
from_player
,
parse_phase
(
$1
))
when
/LP(损失|回复|变成)<(-?\d+)>/
when
/LP(损失|回复|变成)<(-?\d+)>/
...
@@ -316,6 +334,12 @@ class Action
...
@@ -316,6 +334,12 @@ class Action
Attack
.
new
(
from_player
,
nil
,
nil
,
parse_card
(
$1
))
Attack
.
new
(
from_player
,
nil
,
nil
,
parse_card
(
$1
))
when
/(?:清空)?
#{
PosFilter
}#{
CardFilter
}
的指示物(?:加一|减一)?,现为
#{
CountersFilter
}
/
when
/(?:清空)?
#{
PosFilter
}#{
CardFilter
}
的指示物(?:加一|减一)?,现为
#{
CountersFilter
}
/
Counter
.
new
(
from_player
,
parse_pos
(
$1
),
parse_card
(
$2
),
:become
,
parse_counters
(
$3
))
Counter
.
new
(
from_player
,
parse_pos
(
$1
),
parse_card
(
$2
),
:become
,
parse_counters
(
$3
))
when
/己方
#{
PosFilter
}#{
CardFilter
}
修改备注为:(.*)/
Note
.
new
(
from_player
,
parse_pos
(
$1
),
parse_card
(
$2
),
$3
)
when
/~特殊召唤
#{
CardFilter
}#{
PosFilter
}
呈
#{
PositionFilter
}
/
Token
.
new
(
from_player
,
parse_pos
(
$2
),
parse_card
(
$1
),
parse_position
(
$3
))
when
/~特殊召唤(\d+)个
#{
CardFilter
}
呈
#{
PositionFilter
}
/
MultiToken
.
new
(
from_player
,
$1
.
to_i
,
parse_card
(
$2
),
parse_position
(
$3
))
when
/添加一张手牌
#{
CardFilter
}
/
when
/添加一张手牌
#{
CardFilter
}
/
Add
.
new
(
from_player
,
parse_card
(
$1
))
Add
.
new
(
from_player
,
parse_card
(
$1
))
when
/将
#{
PosFilter
}#{
CardFilter
}
撕掉!/
when
/将
#{
PosFilter
}#{
CardFilter
}
撕掉!/
...
@@ -328,8 +352,10 @@ class Action
...
@@ -328,8 +352,10 @@ class Action
end
end
result
.
id
=
id
result
.
id
=
id
result
result
when
/^(
#{
CardFilter
}
\n)*$/
when
/系统消息:.+?\(\d+\)已经退出房间/
MultiShow
.
new
from_player
,
$&
.
lines
.
collect
{
|
card
|
parse_card
(
card
)}
Reset
.
new
from_player
when
/^(
#{
CardFilter
}
\n?)*$/
MultiShow
.
new
from_player
,
nil
,
$&
.
lines
.
collect
{
|
card
|
parse_card
(
card
)}
else
else
Unknown
.
new
str
Unknown
.
new
str
end
end
...
...
lib/iduel/replay.rb
View file @
3bd44e28
...
@@ -17,7 +17,7 @@ class Replay
...
@@ -17,7 +17,7 @@ class Replay
file
.
set_encoding
"GBK"
,
"UTF-8"
,
:invalid
=>
:replace
,
:undef
=>
:replace
file
.
set_encoding
"GBK"
,
"UTF-8"
,
:invalid
=>
:replace
,
:undef
=>
:replace
result
=
self
.
new
(
file
)
result
=
self
.
new
(
file
)
contents
=
file
.
read
.
strip
contents
=
file
.
read
.
strip
if
contents
[
0
,
7
]
==
"<table>"
if
contents
[
'<td width="75%" valign="top">'
]
result
.
player1
=
User
.
new
(
$2
.
to_i
,
$1
)
if
contents
=~
HTML_Player_Filter
result
.
player1
=
User
.
new
(
$2
.
to_i
,
$1
)
if
contents
=~
HTML_Player_Filter
result
.
player2
=
User
.
new
(
$2
.
to_i
,
$1
)
if
contents
=~
HTML_Opponent_Filter
result
.
player2
=
User
.
new
(
$2
.
to_i
,
$1
)
if
contents
=~
HTML_Opponent_Filter
from_players
=
contents
.
scan
(
Regexp
.
union
(
HTML_Player_Filter
,
HTML_Opponent_Filter
)).
collect
{
|
matched
|
matched
[
0
]
?
true
:
false
}
#匹配player成功matched前两位有值,opponent成功后两位有值,["尸体", "100015", nil, nil], il, nil], [nil, nil, "游戏的徒弟", "288436"]
from_players
=
contents
.
scan
(
Regexp
.
union
(
HTML_Player_Filter
,
HTML_Opponent_Filter
)).
collect
{
|
matched
|
matched
[
0
]
?
true
:
false
}
#匹配player成功matched前两位有值,opponent成功后两位有值,["尸体", "100015", nil, nil], il, nil], [nil, nil, "游戏的徒弟", "288436"]
...
...
lib/nbx/action.rb
View file @
3bd44e28
...
@@ -435,7 +435,7 @@ class Action
...
@@ -435,7 +435,7 @@ class Action
case
from_pos
case
from_pos
when
0
..
10
when
0
..
10
#场上
#场上
when
Integer
when
11
..
70
"第
#{
@from_pos
-
10
}
张手牌为:
#{
@card
.
escape
}
"
"第
#{
@from_pos
-
10
}
张手牌为:
#{
@card
.
escape
}
"
end
end
end
end
...
...
lib/scene_replay.rb
View file @
3bd44e28
...
@@ -12,7 +12,6 @@ class Scene_Replay < Scene_Watch
...
@@ -12,7 +12,6 @@ class Scene_Replay < Scene_Watch
def
save_replay
def
save_replay
end
end
def
update
def
update
#p Time.now
if
@count
and
@count
>=
60
if
@count
and
@count
>=
60
event
=
@replay
.
get
event
=
@replay
.
get
if
event
if
event
...
...
lib/window_field.rb
View file @
3bd44e28
...
@@ -20,6 +20,7 @@ class Window_Field < Window
...
@@ -20,6 +20,7 @@ class Window_Field < Window
#Card_Size = [Card::CardBack.w, Card::CardBack.h]
#Card_Size = [Card::CardBack.w, Card::CardBack.h]
Card_Size
=
[
54
,
81
]
Card_Size
=
[
54
,
81
]
attr_accessor
:action_window
attr_accessor
:action_window
WLH
=
16
def
initialize
(
x
,
y
,
field
,
player
=
true
)
def
initialize
(
x
,
y
,
field
,
player
=
true
)
@border
=
Surface
.
load
(
'graphics/field/border.png'
)
@border
=
Surface
.
load
(
'graphics/field/border.png'
)
@border_horizontal
=
Surface
.
load
(
'graphics/field/border_horizontal.png'
)
#@border.transform_surface(0x66000000,90,1,1,Surface::TRANSFORM_SAFE|Surface::TRANSFORM_AA)#FUCK!
@border_horizontal
=
Surface
.
load
(
'graphics/field/border_horizontal.png'
)
#@border.transform_surface(0x66000000,90,1,1,Surface::TRANSFORM_SAFE|Surface::TRANSFORM_AA)#FUCK!
...
@@ -96,20 +97,33 @@ class Window_Field < Window
...
@@ -96,20 +97,33 @@ class Window_Field < Window
@contents
.
put
(
@border
,
x
-
1
,
y
-
1
)
if
status
==
1
@contents
.
put
(
@border
,
x
-
1
,
y
-
1
)
if
status
==
1
end
end
if
(
6
..
10
).
include?
(
index
)
and
@cards
[
index
].
position
!=
:set
if
(
6
..
10
).
include?
(
index
)
and
@cards
[
index
].
position
!=
:set
spacing
,
height
=
@font
.
text_size
(
'/'
)
spacing
=
@font
.
text_size
(
'/'
)[
0
]
atkdef_x
=
x
+
(
Card_Size
[
0
]
-
spacing
)
/
2
atkdef_x
=
x
+
(
Card_Size
[
0
]
-
spacing
)
/
2
atkdef_y
=
y
+
Card_Size
[
1
]
-
height
atkdef_y
=
y
+
Card_Size
[
1
]
-
WLH
@font
.
draw_blended_utf8
(
@contents
,
'/'
,
atkdef_x
,
atkdef_y
,
0xFF
,
0xFF
,
0xFF
)
draw_shaded_text
(
'/'
,
atkdef_x
,
atkdef_y
)
@font
.
draw_blended_utf8
(
@contents
,
@cards
[
index
].
atk
.
to_s
,
atkdef_x
-
@font
.
text_size
(
@cards
[
index
].
atk
.
to_s
)[
0
],
atkdef_y
,
0xFF
,
0xFF
,
0xFF
)
draw_shaded_text
(
@cards
[
index
].
atk
.
to_s
,
atkdef_x
-
@font
.
text_size
(
@cards
[
index
].
atk
.
to_s
)[
0
],
atkdef_y
)
@font
.
draw_blended_utf8
(
@contents
,
@cards
[
index
].
def
.
to_s
,
atkdef_x
+
spacing
,
atkdef_y
,
0xFF
,
0xFF
,
0xFF
)
draw_shaded_text
(
@cards
[
index
].
def
.
to_s
,
atkdef_x
+
spacing
,
atkdef_y
)
#@font.draw_blended_utf8(@contents, '/' , atkdef_x, atkdef_y, 0xFF, 0xFF, 0xFF)
#@font.draw_blended_utf8(@contents, @cards[index].atk.to_s , atkdef_x - @font.text_size(@cards[index].atk.to_s)[0], atkdef_y, 0xFF, 0xFF, 0xFF)
#@font.draw_blended_utf8(@contents, @cards[index].def.to_s , atkdef_x + spacing, atkdef_y, 0xFF, 0xFF, 0xFF)
end
if
@cards
[
index
].
note
&&
!
@cards
[
index
].
note
.
empty?
note_x
=
x
note_y
=
y
+
Card_Size
[
1
]
-
WLH
*
3
draw_shaded_text
(
@cards
[
index
].
note
,
note_x
,
note_y
)
end
end
if
@cards
[
index
].
counters
!=
0
if
@cards
[
index
].
counters
!=
0
height
||=
@font
.
text_size
(
'/'
)[
1
]
#不太规范,凑合能用
height
||=
@font
.
text_size
(
'/'
)[
1
]
#不太规范,凑合能用
counters_x
=
x
counters_x
=
x
counters_y
=
y
+
Card_Size
[
1
]
-
height
*
2
counters_y
=
y
+
Card_Size
[
1
]
-
height
*
2
@font
.
draw_blended_utf8
(
@contents
,
@cards
[
index
].
counters
.
to_s
,
counters_x
,
counters_y
,
0xFF
,
0xFF
,
0xFF
)
@@counter
||=
Surface
.
load
(
"graphics/field/counter.png"
)
@contents
.
put
@@counter
,
counters_x
,
counters_y
draw_shaded_text
(
" ×
#{
@cards
[
index
].
counters
}
"
,
counters_x
+
16
,
counters_y
)
end
end
end
def
draw_shaded_text
(
text
,
x
,
y
,
size
=
1
,
font
=
@font
)
@font
.
draw_blended_utf8
(
@contents
,
text
,
x
+
size
,
y
+
size
,
0x00
,
0x00
,
0x00
)
@font
.
draw_blended_utf8
(
@contents
,
text
,
x
,
y
,
0xFF
,
0xFF
,
0xFF
)
end
end
def
item_rect
(
index
)
def
item_rect
(
index
)
@items
[
index
]
@items
[
index
]
...
...
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