Commit 0d173898 authored by 神楽坂玲奈's avatar 神楽坂玲奈

数据库更新,消息解析和卡片信息描绘微调

parent aa0ff481
No preview for this file type
...@@ -165,8 +165,18 @@ class Action ...@@ -165,8 +165,18 @@ class Action
else else
$log.error('移动操作3'){'错误的to_pos' + self.inspect} $log.error('移动操作3'){'错误的to_pos' + self.inspect}
end end
p to_field
end
if from_field == player_field.hand and !@card || !@card.known?
case @to_pos
when 0..5
player_field.hand.each{|card|card.card = Card::Unknown if card.known? and !card.monster?}
when 6..10
player_field.hand.each{|card|card.card = Card::Unknown if card.known? and card.monster?}
else
player_field.hand.each{|card|card.card = Card::Unknown if card.known?}
end
end end
super super
end end
end end
...@@ -696,6 +706,7 @@ class Action ...@@ -696,6 +706,7 @@ class Action
end end
class CardInfo < Action class CardInfo < Action
def initialize(card, card_type, atk, _def, attribute, type, level, lore) def initialize(card, card_type, atk, _def, attribute, type, level, lore)
return unless card.diy?
card.card_type = card_type card.card_type = card_type
#card.monster_type = monster_type #card.monster_type = monster_type
card.atk = atk card.atk = atk
......
...@@ -5,7 +5,7 @@ class Card ...@@ -5,7 +5,7 @@ class Card
@db = SQLite3::Database.new( "data/data.sqlite" ) @db = SQLite3::Database.new( "data/data.sqlite" )
@all = {} @all = {}
@diy = {} @diy = {}
@count = @db.get_first_value("select COUNT(*) from YGODATA") rescue 0 @count = @db.get_first_value("select COUNT(*) from `yu-gi-oh`") rescue 0
@db.results_as_hash = true @db.results_as_hash = true
PicPath = if RUBY_PLATFORM["win"] || RUBY_PLATFORM["ming"] PicPath = if RUBY_PLATFORM["win"] || RUBY_PLATFORM["ming"]
require 'win32/registry' require 'win32/registry'
...@@ -19,9 +19,9 @@ class Card ...@@ -19,9 +19,9 @@ class Card
def find(id, order_by=nil) def find(id, order_by=nil)
case id case id
when Integer when Integer
@all[id] || old_new(@db.get_first_row("select * from YGODATA where id = #{id}")) @all[id] || old_new(@db.get_first_row("select * from `yu-gi-oh` where id = #{id}"))
when Symbol when Symbol
row = @db.get_first_row("select * from YGODATA where name = '#{id}'") row = @db.get_first_row("select * from `yu-gi-oh` where name = '#{id}'")
if row if row
@all[row['id'].to_i] || old_new(row) @all[row['id'].to_i] || old_new(row)
else else
...@@ -32,7 +32,7 @@ class Card ...@@ -32,7 +32,7 @@ class Card
when nil when nil
Card::Unknown Card::Unknown
else else
sql = "select * from YGODATA where " << id sql = "select * from `yu-gi-oh` where " << id
sql << " order by #{order_by}" if order_by sql << " order by #{order_by}" if order_by
$log.debug('查询卡片执行SQL'){sql} $log.debug('查询卡片执行SQL'){sql}
@db.execute(sql).collect {|row|@all[row['id'].to_i] || old_new(row)} @db.execute(sql).collect {|row|@all[row['id'].to_i] || old_new(row)}
...@@ -40,7 +40,7 @@ class Card ...@@ -40,7 +40,7 @@ class Card
end end
def all def all
if @all.size != @count if @all.size != @count
sql = "select * from YGODATA where id not in (#{@all.keys.join(', ')})" sql = "select * from `yu-gi-oh` where id not in (#{@all.keys.join(', ')})"
@db.execute(sql).each{|row|old_new(row)} @db.execute(sql).each{|row|old_new(row)}
end end
@all @all
...@@ -52,8 +52,7 @@ class Card ...@@ -52,8 +52,7 @@ class Card
def new(id) def new(id)
find(id) find(id)
end end
def load_from_ycff3(db = RUBY_PLATFORM["win"] || RUBY_PLATFORM["ming"] ? (require 'win32/registry';Win32::Registry::HKEY_CURRENT_USER.open('Software\OCGSOFT\YFCC'){|reg|reg['Path']+"YGODATA/YGODAT.dat"} rescue '') : '')
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')
conn.open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + db + ";Jet OLEDB:Database Password=paradisefox@sohu.com" ) conn.open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + db + ";Jet OLEDB:Database Password=paradisefox@sohu.com" )
...@@ -65,33 +64,33 @@ class Card ...@@ -65,33 +64,33 @@ class Card
records = WIN32OLE.new('ADODB.Recordset') records = WIN32OLE.new('ADODB.Recordset')
records.open("YGODATA", conn) records.open("YGODATA", conn)
records.MoveNext #跳过首行那个空白卡
sql = "" sql = ""
while !records.EOF while !records.EOF
sql << "INSERT INTO YGODATA VALUES( sql << "INSERT INTO `yu-gi-oh` VALUES(
#{records.Fields.Item("CardID").value}, #{records.Fields.Item("CardID").value-1},
'#{records.Fields.Item("CardPass").value}', '#{records.Fields.Item("CardPass").value}',
'#{records.Fields.Item("SCCardName").value}', '#{records.Fields.Item("SCCardName").value}',
'#{records.Fields.Item("SCCardType").value}', '#{records.Fields.Item("SCCardType").value == "XYZ怪兽" ? "超量怪兽" : records.Fields.Item("SCCardType").value}',
'#{records.Fields.Item("SCDCardType").value.empty? ? "NULL" : records.Fields.Item("SCDCardType").value}', #{records.Fields.Item("SCDCardType").value == '    ' ? "NULL" : "'#{records.Fields.Item("SCDCardType").value}'"},
#{records.Fields.Item("CardATK").value || "NULL"}, #{records.Fields.Item("CardATK").value || "NULL"},
#{records.Fields.Item("CardDef").value || "NULL"}, #{records.Fields.Item("CardDef").value || "NULL"},
'#{records.Fields.Item("SCCardAttribute").value.empty? ? "NULL" : records.Fields.Item("SCCardAttribute").value}', #{records.Fields.Item("SCCardAttribute").value == '    ' ? "NULL" : "'#{records.Fields.Item("SCCardAttribute").value}'"},
'#{records.Fields.Item("SCCardRace").value.empty? ? "NULL" : records.Fields.Item("SCCardRace").value}', #{records.Fields.Item("SCCardRace").value == '    ' ? "NULL" : "'#{records.Fields.Item("SCCardRace").value}'"},
#{records.Fields.Item("CardStarNum").value || "NULL"}, #{records.Fields.Item("CardStarNum").value || "NULL"},
'#{records.Fields.Item("SCCardDepict").value}', '#{records.Fields.Item("SCCardDepict").value}',
#{case records.Fields.Item("ENCardBan").value; when "Normal"; 3; when "SubConfine"; 2; when "Confine"; 1; else; 0; end}, #{case records.Fields.Item("ENCardBan").value; when "Normal"; 3; when "SubConfine"; 2; when "Confine"; 1; else; 0; end},
'#{records.Fields.Item("CardEfficeType").value}', '#{records.Fields.Item("CardEfficeType").value}',
'#{records.Fields.Item("CardPhal").value.split(",").collect{|stat|stats[stat.to_i]}.join("\t")}', '#{records.Fields.Item("CardPhal").value.split(",").collect{|stat|stats[stat.to_i]}.join("\t")}',
'#{records.Fields.Item("CardCamp").value.gsub("、", "\t")}', '#{records.Fields.Item("CardCamp").value.gsub("、", "\t")}',
'#{records.Fields.Item("CardISTKEN").value.zero? ? "NULL" : ("1\t" * records.Fields.Item("CardISTKEN").value).chomp("\t")}' #{records.Fields.Item("CardISTKEN").value}
);" );"
records.MoveNext records.MoveNext
end end
@db.execute('begin transaction') @db.execute('begin transaction')
@db.execute('DROP TABLE "main"."YGODATA";') rescue nil @db.execute('DROP INDEX if exists "main"."name";')
@db.execute('CREATE TABLE "YGODATA" ( @db.execute('DROP TABLE if exists "main"."yu-gi-oh";')
@db.execute('CREATE TABLE "yu-gi-oh" (
"id" INTEGER NOT NULL, "id" INTEGER NOT NULL,
"number" TEXT NOT NULL, "number" TEXT NOT NULL,
"name" TEXT NOT NULL, "name" TEXT NOT NULL,
...@@ -107,13 +106,13 @@ class Card ...@@ -107,13 +106,13 @@ class Card
"stats" TEXT NOT NULL, "stats" TEXT NOT NULL,
"archettypes" TEXT NOT NULL, "archettypes" TEXT NOT NULL,
"mediums" TEXT NOT NULL, "mediums" TEXT NOT NULL,
"tokens" TEXT, "tokens" INTEGER NOT NULL,
PRIMARY KEY ("id") PRIMARY KEY ("id")
);') );')
@db.execute_batch(sql) @db.execute_batch(sql)
@db.execute('CREATE UNIQUE INDEX "main"."name" ON "yu-gi-oh" ("name");')
@db.execute('commit transaction') @db.execute('commit transaction')
@count = @db.get_first_value("select COUNT(*) from `yu-gi-oh`") #重建计数
@count = @db.get_first_value("select COUNT(*) from YGODATA") #重建计数
@all.clear #清空缓存 @all.clear #清空缓存
end end
end end
...@@ -150,7 +149,7 @@ class Card ...@@ -150,7 +149,7 @@ class Card
@stats = hash['stats'].split("\t").collect{|stat|stat.to_i} @stats = hash['stats'].split("\t").collect{|stat|stat.to_i}
@archettypes = hash['archettypes'].split("\t").collect{|archettype|stat.to_sym} @archettypes = hash['archettypes'].split("\t").collect{|archettype|stat.to_sym}
@mediums = hash['mediums'].split("\t").collect{|medium|medium.to_sym} @mediums = hash['mediums'].split("\t").collect{|medium|medium.to_sym}
@tokens = hash['tokens'] && hash['tokens'].split("\t").collect{|token|token.to_i} @tokens = hash['tokens'].to_i
@token = hash['token'] @token = hash['token']
Card.cache[@id] = self Card.cache[@id] = self
...@@ -159,7 +158,7 @@ class Card ...@@ -159,7 +158,7 @@ class Card
@image ||= Surface.load("graphics/field/card.jpg").display_format @image ||= Surface.load("graphics/field/card.jpg").display_format
end end
def image def image
@image ||= Surface.load("#{PicPath}/#{@id-1}.jpg").display_format rescue create_image @image ||= Surface.load("#{PicPath}/#{@id}.jpg").display_format rescue create_image
end end
def image_small def image_small
@image_small ||= image.transform_surface(0xFF000000,0,54.0/image.w, 81.0/image.h,Surface::TRANSFORM_SAFE).copy_rect(1, 1, 54, 81).display_format @image_small ||= image.transform_surface(0xFF000000,0,54.0/image.w, 81.0/image.h,Surface::TRANSFORM_SAFE).copy_rect(1, 1, 54, 81).display_format
...@@ -193,6 +192,9 @@ class Card ...@@ -193,6 +192,9 @@ class Card
def diy? def diy?
number == :"00000000" number == :"00000000"
end end
def known?
self != Unknown
end
def inspect def inspect
"[#{card_type}][#{name}]" "[#{card_type}][#{name}]"
end end
...@@ -200,3 +202,4 @@ class Card ...@@ -200,3 +202,4 @@ class Card
Unknown.instance_eval{@image = CardBack; @image_small = CardBack_Small} Unknown.instance_eval{@image = CardBack; @image_small = CardBack_Small}
end end
require_relative 'cardcreater' require_relative 'cardcreater'
#Card.load_from_ycff3
\ No newline at end of file
...@@ -10,7 +10,6 @@ class Card ...@@ -10,7 +10,6 @@ class Card
#AtkDef_Value_Font = TTF.open("graphics/cardcreater/Lucida Sans Unicode.ttf", 12) #AtkDef_Value_Font = TTF.open("graphics/cardcreater/Lucida Sans Unicode.ttf", 12)
AtkDef_Value_Font = TTF.open("graphics/cardcreater/Lucida Sans Unicode.ttf", 8) AtkDef_Value_Font = TTF.open("graphics/cardcreater/Lucida Sans Unicode.ttf", 8)
def create_image def create_image
#载入背景图 #载入背景图
result = if monster? result = if monster?
Surface.load "graphics/cardcreater/back/#{card_type}/#{attribute} #{level}.jpg" Surface.load "graphics/cardcreater/back/#{card_type}/#{attribute} #{level}.jpg"
......
...@@ -27,9 +27,6 @@ class Game_Card ...@@ -27,9 +27,6 @@ class Game_Card
@atk = @card.atk @atk = @card.atk
@def = @card.def @def = @card.def
end end
def known?
@card != Card::Unknown
end
def image_small def image_small
if @position == :set and !$game.player_field.hand.include?(self) if @position == :set and !$game.player_field.hand.include?(self)
Card.find(nil).image_small Card.find(nil).image_small
......
...@@ -187,7 +187,7 @@ class Action ...@@ -187,7 +187,7 @@ class Action
when /^┊(.*)┊$/m when /^┊(.*)┊$/m
Chat.new from_player, $1 Chat.new from_player, $1
when /^※\[(.*)\]\n(.*)\n注释.*$/m when /^※\[(.*)\]\n(.*)\n注释.*$/m
card = Card.find($1.to_sym) p card = Card.find($1.to_sym)
case $2 case $2
when /(.+怪兽),种族:(.+),属性:(.+),星级:(\d+),攻击:(\d+|?),防御:(\d+|?),效果:(.+)/ when /(.+怪兽),种族:(.+),属性:(.+),星级:(\d+),攻击:(\d+|?),防御:(\d+|?),效果:(.+)/
CardInfo.new(card, $1.to_sym, $5 == "?" ? nil : $5.to_i, $6 == "?" ? nil : $6.to_i, $3.to_sym, $2.to_sym, $4.to_sym, $7) CardInfo.new(card, $1.to_sym, $5 == "?" ? nil : $5.to_i, $6 == "?" ? nil : $6.to_i, $3.to_sym, $2.to_sym, $4.to_sym, $7)
......
...@@ -99,15 +99,15 @@ class Iduel < Game ...@@ -99,15 +99,15 @@ class Iduel < Game
#@conn.connect Socket.pack_sockaddr_in(Port, Server) #@conn.connect Socket.pack_sockaddr_in(Port, Server)
recv @conn.gets(RS) while @conn recv @conn.gets(RS) while @conn
rescue => exception rescue => exception
Game_Event.push Game_Event::Error.new(exception.class.to_s, exception.message)
$log.error('iduel-connect-1') {[exception.inspect, *exception.backtrace].join("\n")} $log.error('iduel-connect-1') {[exception.inspect, *exception.backtrace].join("\n")}
Game_Event.push Game_Event::Error.new(exception.class.to_s, exception.message)
ensure ensure
self.exit self.exit
end end
end end
rescue => exception rescue => exception
Game_Event.push Game_Event::Error.new("网络错误", "连接服务器失败")
$log.error('iduel-connect-2') {[exception.inspect, *exception.backtrace].join("\n")} $log.error('iduel-connect-2') {[exception.inspect, *exception.backtrace].join("\n")}
Game_Event.push Game_Event::Error.new("网络错误", "连接服务器失败")
end end
end end
def checknum(head, *args) def checknum(head, *args)
......
...@@ -30,14 +30,14 @@ class Replay ...@@ -30,14 +30,14 @@ class Replay
result.player1 = User.new($2 ? $2.to_i : :player, $1) if contents =~ Player_Filter result.player1 = User.new($2 ? $2.to_i : :player, $1) if contents =~ Player_Filter
result.player2 = User.new($2 ? $2.to_i : :opponent, $1) if contents =~ Opponent_Filter result.player2 = User.new($2 ? $2.to_i : :opponent, $1) if contents =~ Opponent_Filter
from_players = contents.scan(Delimiter).collect do |matched| from_players = contents.scan(Delimiter).collect do |matched|
id = matched[1].to_i id = matched[1] || :player
name = matched[0] name = matched[0]
if result.player1 and result.player1.id == id if result.player1 and result.player1.id == id
true true
elsif result.player2 and result.player2.id == id elsif result.player2 and result.player2.id == id
false false
elsif result.player1.nil? elsif result.player1.nil?
result.player1 = User.new(id, name) result.player1 = User.new(id , name)
true true
elsif result.player2.nil? elsif result.player2.nil?
result.player2 = User.new(id, name) result.player2 = User.new(id, name)
...@@ -48,8 +48,9 @@ class Replay ...@@ -48,8 +48,9 @@ class Replay
end end
end end
end end
result.player1 ||= User.new(0, "我") result.player1 ||= User.new(:player, "我")
result.player2 ||= User.new(1, "对手") result.player2 ||= User.new(:opponent, "对手")
p result.player1, result.player2
lines = contents.split(Delimiter) lines = contents.split(Delimiter)
lines.shift #split后,在第一个操作之前会多出一个空白元素 lines.shift #split后,在第一个操作之前会多出一个空白元素
if from_players.empty? if from_players.empty?
......
...@@ -22,7 +22,7 @@ class NBX < Game ...@@ -22,7 +22,7 @@ class NBX < Game
Game_Event.push Game_Event::Host.new(@room) Game_Event.push Game_Event::Host.new(@room)
send(nil, "NewRoom", @room.player1.name) send(nil, "NewRoom", @room.player1.name)
@conn_room_server = TCPServer.new '0.0.0.0', Port #为了照顾NBX强制IPv4 @conn_room_server = TCPServer.new '0.0.0.0', Port #为了照顾NBX强制IPv4
@accept_room = Thread.new{Thread.start(@conn_room_server.accept) {|client| accept(client)} while @conn_room_server} @accept_room = Thread.new{Thread.start(@conn_room_server.accept) {|client| accept(client)} rescue p @conn_room_server while @conn_room_server}
end end
def action(action) def action(action)
if @room.player2 if @room.player2
......
...@@ -4,7 +4,7 @@ class Window_CardInfo < Window ...@@ -4,7 +4,7 @@ class Window_CardInfo < Window
def initialize(x,y) def initialize(x,y)
super(x,y,1024-x,524,300) super(x,y,1024-x,524,300)
@font = TTF.open("fonts/WenQuanYi Micro Hei.ttf", 16) @font = TTF.open("fonts/WenQuanYi Micro Hei.ttf", 16)
self.card = Game_Card.new Card.find(1)#new 'name' => :test, 'number' => :"000000", 'lore' => "test2", 'card_type' => :通常魔法, 'stats' => "", 'archettypes' => "", "mediums" => "", "tokens" => "" self.card = Game_Card.new Card.find('name' => :mycard, 'number' => :"000000", 'lore' => "提示:\n快捷键:\nF10退出房间\nF12 返回主界面", 'card_type' => :" ", 'stats' => "", 'archettypes' => "", "mediums" => "", "tokens" => 0)
end end
def card=(card) def card=(card)
return if card.nil? or card == @card or !card.known? return if card.nil? or card == @card or !card.known?
...@@ -18,6 +18,12 @@ class Window_CardInfo < Window ...@@ -18,6 +18,12 @@ class Window_CardInfo < Window
return return
end end
char = @card.lore[@lore_start] char = @card.lore[@lore_start]
@lore_start += 1
if char == "\n"
@lore_pos[0] = 0
@lore_pos[1] += WLH
return
end
width = @font.text_size(char)[0] width = @font.text_size(char)[0]
if @lore_pos[0] + width > @width if @lore_pos[0] + width > @width
@lore_pos[0] = 0 @lore_pos[0] = 0
...@@ -25,9 +31,6 @@ class Window_CardInfo < Window ...@@ -25,9 +31,6 @@ class Window_CardInfo < Window
end end
@font.draw_blended_utf8(@contents, char, @lore_pos[0], @lore_pos[1], 0xFF, 0xFF, 0xFF) @font.draw_blended_utf8(@contents, char, @lore_pos[0], @lore_pos[1], 0xFF, 0xFF, 0xFF)
@lore_pos[0] += width @lore_pos[0] += width
@lore_start += 1
end end
end end
def refresh def refresh
......
...@@ -45,11 +45,11 @@ class Window_Field < Window ...@@ -45,11 +45,11 @@ class Window_Field < Window
end end
if !@field.removed.empty? if !@field.removed.empty?
@items[:removed] = Removed_Pos + Card_Size @items[:removed] = Removed_Pos + Card_Size
@cards[:removed] = @field.removed.first @cards[:removed] = @field.removed.last
end end
if !@field.graveyard.empty? if !@field.graveyard.empty?
@items[:graveyard] = Graveyard_Pos + Card_Size @items[:graveyard] = Graveyard_Pos + Card_Size
@cards[:graveyard] = @field.graveyard.first @cards[:graveyard] = @field.graveyard.last
end end
@field.field.each_with_index do |card, index| @field.field.each_with_index do |card, index|
...@@ -143,18 +143,21 @@ class Window_Field < Window ...@@ -143,18 +143,21 @@ class Window_Field < Window
refresh_action_window refresh_action_window
end end
def refresh_cardinfo_window def refresh_cardinfo_window
$scene.cardinfo_window.card = @card = case @index @card = case @index
when :deck when :deck
@field.deck.first @field.deck.last
when :extra when :extra
@field.extra.first @field.extra.first
when :graveyard when :graveyard
@field.graveyard.first @field.graveyard.last
when :removed
@field.removed.last
when 0..10 when 0..10
@field.field[@index] @field.field[@index]
when Integer #手卡 when Integer #手卡
@field.hand[@index-11] @field.hand[@index-11]
end end
$scene.cardinfo_window.card = @card unless @index == :deck
end end
def refresh_action_window def refresh_action_window
return unless @action_window return unless @action_window
......
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