Commit fbff5c91 authored by 神楽坂玲奈's avatar 神楽坂玲奈

批量卡片操作初步

parent 0e2b5e19
通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 - bind(2)
\ No newline at end of file
...@@ -84,6 +84,8 @@ class Action ...@@ -84,6 +84,8 @@ class Action
@position = position @position = position
end end
def run def run
puts '-----------------------------------'
p self
from_field = case @from_pos from_field = case @from_pos
when 0..10 when 0..10
player_field.field player_field.field
...@@ -99,10 +101,7 @@ class Action ...@@ -99,10 +101,7 @@ class Action
player_field.extra player_field.extra
when :removed when :removed
player_field.removed player_field.removed
else
$log.warn __FILE__, '奇怪的from_field'
end end
from_pos = if @from_pos.is_a? Integer from_pos = if @from_pos.is_a? Integer
if @from_pos > 10 if @from_pos > 10
@from_pos - 11 @from_pos - 11
...@@ -110,10 +109,12 @@ class Action ...@@ -110,10 +109,12 @@ class Action
@from_pos @from_pos
end end
elsif @card == :deck elsif @card == :deck
0 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
# p from_pos, from_field
# p from_field[from_pos] if from_pos
to_field = case @to_pos to_field = case @to_pos
when Integer when Integer
player_field.field player_field.field
...@@ -138,7 +139,7 @@ class Action ...@@ -138,7 +139,7 @@ class Action
from_field[from_pos].card = @card from_field[from_pos].card = @card
from_field[from_pos] from_field[from_pos]
when :deck when :deck
player_field.deck.first player_field.deck.last
end end
if @to_pos if @to_pos
if from_field == player_field.field if from_field == player_field.field
...@@ -165,7 +166,7 @@ class Action ...@@ -165,7 +166,7 @@ class Action
if @to_pos if @to_pos
if @to_pos.is_a? Integer if @to_pos.is_a? Integer
to_field[@to_pos] = card to_field[@to_pos] = card
elsif @to_pos == :hand or @to_pos == :deckbottom elsif @to_pos == :hand or @to_pos == :deck
to_field << card to_field << card
else else
to_field.unshift card to_field.unshift card
...@@ -251,6 +252,9 @@ class Action ...@@ -251,6 +252,9 @@ class Action
@from_player = from_player @from_player = from_player
super(from_player, :deck, :hand, :deck, msg, :set) super(from_player, :deck, :hand, :deck, msg, :set)
end end
end
class Counter < Action
end end
class MultiDraw < Action class MultiDraw < Action
def initialize(from_player, count, msg=nil) def initialize(from_player, count, msg=nil)
...@@ -259,7 +263,85 @@ class Action ...@@ -259,7 +263,85 @@ class Action
end end
def run def run
super super
player_field.hand += player_field.deck.shift(@count) player_field.hand += player_field.deck.pop(@count)
end
end
class AllMonstersSendToGraveyard < SendToGraveyard
def initialize(from_player, cards)
@from_player = from_player
@cards = cards
end
def run
@cards = if @cards
@cards.collect do |card|
if card.is_a? Game_Card
card
else
index = player_field.field[6..10].index{|fieldcard|fieldcard and fieldcard.card == card} || player_field.field[6..10].index{|fieldcard|fieldcard and !fieldcard.known?}
if index
index += 6
card = player_field.field[index]
player_field.field[index] = nil
card
else
Game_Card.new(@card)
$log.warn '似乎凭空产生了卡片'
end
end
end
else
player_field.field[6..10].compact
end
player_field.field[6..10] = nil
player_field.graveyard += @cards
end
end
class AllMonstersRemove < Remove
def initialize(from_player, cards)
@from_player = from_player
@cards = cards
end
def run
@cards ||= player_field.field[6..10].compact
player_field.field[6..10] = nil
player_field.removed += @cards
end
end
class AllMonstersReturnToDeck < ReturnToDeck
def initialize(from_player, cards)
@from_player = from_player
@cards = cards
end
def run
@cards ||= player_field.field[6..10].compact
player_field.field[6..10] = nil
player_field.deck += @cards
end
end
class AllMonstersReturnToHand < ReturnToHand
def initialize(from_player, cards)
@from_player = from_player
@cards = cards
end
def run
@cards ||= player_field.field[6..10].compact
player_field.field[6..10] = nil
player_field.hand += @cards
end
end
class AllMonstersCounter < Counter
def initialize(from_player)
@from_player = from_player
end
def run
player_field.field[6..10].each_with_index do |card, index|
if card
player_field.removed << card
player_field.field[index+6] = nil
end
end
end end
end end
class RefreshField < Action class RefreshField < Action
...@@ -327,14 +409,15 @@ class Action ...@@ -327,14 +409,15 @@ class Action
end end
end end
class EffectActivate < Move class EffectActivate < Move
def initialize(from_player, from_pos, card) def initialize(from_player, from_pos, card, target_pos = nil, target_player=nil)
@from_player = from_player
if (0..10).include?(from_pos) if (0..10).include?(from_pos)
position = :"face-up" position = :"face-up"
else else
position = nil position = nil
end end
super(from_player, from_pos, nil, card, nil, position) super(from_player, from_pos, to_pos, card, nil, position)
@target_pos = target_pos
@target_player = target_player
end end
end end
class ViewDeck < Action; end class ViewDeck < Action; end
......
...@@ -152,10 +152,10 @@ attr_accessor :tokens ...@@ -152,10 +152,10 @@ attr_accessor :tokens
@image ||= Surface.load "#{PicPath}/#{@id-1}.jpg" rescue Surface.load "graphics/field/card.jpg" @image ||= Surface.load "#{PicPath}/#{@id-1}.jpg" rescue Surface.load "graphics/field/card.jpg"
end end
def image_small def image_small
@image_small ||= image.transform_surface(0xFF000000,0,54.0/image.w, 81.0/image.h,0) @image_small ||= image.transform_surface(0xFF000000,0,54.0/image.w, 81.0/image.h,Surface::TRANSFORM_SAFE)
end end
def image_horizontal def image_horizontal
@image_horizontal ||= image_small.transform_surface(0xFF000000,90,1,1,0) @image_horizontal ||= image_small.transform_surface(0xFF000000,90,1,1,Surface::TRANSFORM_SAFE)
end end
def unknown? def unknown?
@id == 1 @id == 1
...@@ -169,6 +169,9 @@ attr_accessor :tokens ...@@ -169,6 +169,9 @@ attr_accessor :tokens
def spell? def spell?
[:通常魔法, :速攻魔法, :装备魔法, :场地魔法, :仪式魔法, :永续魔法].include? card_type [:通常魔法, :速攻魔法, :装备魔法, :场地魔法, :仪式魔法, :永续魔法].include? card_type
end end
def inspect
"[#{card_type}][#{name}]"
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
...@@ -47,4 +47,7 @@ class Game_Card ...@@ -47,4 +47,7 @@ class Game_Card
end end
@card.send(method, *args) @card.send(method, *args)
end end
def inspect
"<#{object_id}#{known? ? @card.inspect : '??'}>"
end
end end
\ No newline at end of file
#encoding: UTF-8 #encoding: UTF-8
#这个文件iduel和nbx相同,编辑时推荐使用软/硬链接来保持一致 #这个文件iduel和nbx相同,编辑时推荐使用软/硬链接来保持一致
class Action class Action
CardFilter = /((?:<)?(?:\[.*?\])?\[(?:.*?)\][\s\d]*(?:>)?|一张怪兽卡|一张魔\/陷卡|\?\?)/ CardFilter = /((?:<)?(?:\[.*?\])?\[(?:.*?)\].*?(?:>)?|一张怪兽卡|一张魔\/陷卡|\?\?)/
PosFilter = /((?:手卡|手牌|场上|魔陷区|怪兽区|墓地|额外牌堆|除外区|卡组|卡组顶端|\(\d+\)){1,2})/ PosFilter = /((?:手卡|手牌|场上|魔陷区|怪兽区|墓地|额外牌堆|除外区|卡组|卡组顶端|\(\d+\)){1,2})/
PositionFilter = /(表攻|表守|里守|攻击表示|防守表示|里侧表示|背面守备表示)/ PositionFilter = /(表攻|表守|里守|攻击表示|防守表示|里侧表示|背面守备表示)/
PhaseFilter = /(抽卡`阶段|准备`阶段|主`阶段1|战斗`阶段|主`阶段2|结束`阶段)/ PhaseFilter = /(抽卡`阶段|准备`阶段|主`阶段1|战斗`阶段|主`阶段2|结束`阶段)/
...@@ -260,6 +260,9 @@ class Action ...@@ -260,6 +260,9 @@ class Action
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))
when /#{PosFilter}#{CardFilter}打开/ when /#{PosFilter}#{CardFilter}打开/
Flip.new(from_player, parse_pos($1), parse_card($2)) Flip.new(from_player, parse_pos($1), parse_card($2))
when /己方场上所有怪兽卡\|(~#{CardFilter})*~全部送往墓地/
cards = $&.scan(CardFilter).collect{|matched|parse_card matched.first}
AllMonstersSendToGraveyard.new(from_player, cards)
when /#{PhaseFilter}/ when /#{PhaseFilter}/
ChangePhase.new(from_player, parse_phase($1)) ChangePhase.new(from_player, parse_phase($1))
when /LP(损失|回复|变成)<(-?\d+)>/ when /LP(损失|回复|变成)<(-?\d+)>/
......
...@@ -36,7 +36,7 @@ class Window_Field < Window ...@@ -36,7 +36,7 @@ class Window_Field < Window
@cards.clear @cards.clear
if !@field.deck.empty? if !@field.deck.empty?
@items[:deck] = Deck_Pos + Card_Size @items[:deck] = Deck_Pos + Card_Size
@cards[:deck] = @field.deck.first @cards[:deck] = @field.deck.last
end end
if !@field.extra.empty? if !@field.extra.empty?
@items[:extra] = Extra_Pos + Card_Size @items[:extra] = Extra_Pos + Card_Size
...@@ -70,31 +70,36 @@ class Window_Field < Window ...@@ -70,31 +70,36 @@ class Window_Field < Window
end end
if !@player #对手的情况,把卡片位置翻转 if !@player #对手的情况,把卡片位置翻转
@items.each_pair do |key, value| @items.each_pair do |key, value|
value[0] = @width - value[0] - Card_Size[0] if (6..10).include?(key) and @cards[key].position != :attack
value[1] = @height - value[1] - Card_Size[1] value[0] = @width - value[0] - Card_Size[1]
value[1] = @height - value[1] - Card_Size[0]
else
value[0] = @width - value[0] - Card_Size[0]
value[1] = @height - value[1] - Card_Size[1]
end
@items[key] = value @items[key] = value
end end
end end
clear clear
@items.each_key{|index|draw_item(index)} @items.each_key{|index|draw_item(index, @index == index ? 1 : 0)}
refresh_action_window refresh_action_window
end end
def draw_item(index, status=0) def draw_item(index, status=0)
x,y = item_rect(index)
if (6..10).include?(index) and @cards[index].position != :attack if (6..10).include?(index) and @cards[index].position != :attack
@contents.put(@cards[index].image_horizontal, item_rect(index)[0], item_rect(index)[1]) @contents.put(@cards[index].image_horizontal, x, y)
@contents.put(@border_horizontal, item_rect(index)[0]-1, item_rect(index)[1]-1) if status == 1 @contents.put(@border_horizontal, x-1, y-1) if status == 1
else else
@contents.put(@cards[index].image_small, item_rect(index)[0], item_rect(index)[1]) @contents.put(@cards[index].image_small, x, y)
@contents.put(@border, item_rect(index)[0]-1, item_rect(index)[1]-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
size = @font.text_size('/') spacing, height = @font.text_size('/')
y = Field_Pos[index][1] + Card_Size[1] - size[1] x += (Card_Size[0] - spacing) / 2
size = size[0] y += Card_Size[1] - height
x = Field_Pos[index][0] + (Card_Size[0] - size) / 2
@font.draw_blended_utf8(@contents, '/' , x, y, 0xFF, 0xFF, 0xFF) @font.draw_blended_utf8(@contents, '/' , x, y, 0xFF, 0xFF, 0xFF)
@font.draw_blended_utf8(@contents, @cards[index].atk.to_s , x - @font.text_size(@cards[index].atk.to_s)[0], y, 0xFF, 0xFF, 0xFF) @font.draw_blended_utf8(@contents, @cards[index].atk.to_s , x - @font.text_size(@cards[index].atk.to_s)[0], y, 0xFF, 0xFF, 0xFF)
@font.draw_blended_utf8(@contents, @cards[index].def.to_s , x + size, y, 0xFF, 0xFF, 0xFF) @font.draw_blended_utf8(@contents, @cards[index].def.to_s , x + spacing, y, 0xFF, 0xFF, 0xFF)
end end
end end
def item_rect(index) def item_rect(index)
......
#encoding: UTF-8
require_relative 'window_list' require_relative 'window_list'
class Window_Title < Window_List class Window_Title < Window_List
Button_Count = 5 Button_Count = 5
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment