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

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

parent aa0ff481
No preview for this file type
......@@ -165,8 +165,18 @@ class Action
else
$log.error('移动操作3'){'错误的to_pos' + self.inspect}
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
super
end
end
......@@ -696,6 +706,7 @@ class Action
end
class CardInfo < Action
def initialize(card, card_type, atk, _def, attribute, type, level, lore)
return unless card.diy?
card.card_type = card_type
#card.monster_type = monster_type
card.atk = atk
......
......@@ -5,7 +5,7 @@ class Card
@db = SQLite3::Database.new( "data/data.sqlite" )
@all = {}
@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
PicPath = if RUBY_PLATFORM["win"] || RUBY_PLATFORM["ming"]
require 'win32/registry'
......@@ -19,9 +19,9 @@ class Card
def find(id, order_by=nil)
case id
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
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
@all[row['id'].to_i] || old_new(row)
else
......@@ -32,7 +32,7 @@ class Card
when nil
Card::Unknown
else
sql = "select * from YGODATA where " << id
sql = "select * from `yu-gi-oh` where " << id
sql << " order by #{order_by}" if order_by
$log.debug('查询卡片执行SQL'){sql}
@db.execute(sql).collect {|row|@all[row['id'].to_i] || old_new(row)}
......@@ -40,7 +40,7 @@ class Card
end
def all
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)}
end
@all
......@@ -52,8 +52,7 @@ class Card
def new(id)
find(id)
end
def load_from_ycff3(db = "E:/game/yu-gi-oh/YGODATA/YGODAT.mdb")
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 '') : '')
require 'win32ole'
conn = WIN32OLE.new('ADODB.Connection')
conn.open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + db + ";Jet OLEDB:Database Password=paradisefox@sohu.com" )
......@@ -65,33 +64,33 @@ class Card
records = WIN32OLE.new('ADODB.Recordset')
records.open("YGODATA", conn)
records.MoveNext #跳过首行那个空白卡
sql = ""
while !records.EOF
sql << "INSERT INTO YGODATA VALUES(
#{records.Fields.Item("CardID").value},
sql << "INSERT INTO `yu-gi-oh` VALUES(
#{records.Fields.Item("CardID").value-1},
'#{records.Fields.Item("CardPass").value}',
'#{records.Fields.Item("SCCardName").value}',
'#{records.Fields.Item("SCCardType").value}',
'#{records.Fields.Item("SCDCardType").value.empty? ? "NULL" : records.Fields.Item("SCDCardType").value}',
'#{records.Fields.Item("SCCardType").value == "XYZ怪兽" ? "超量怪兽" : records.Fields.Item("SCCardType").value}',
#{records.Fields.Item("SCDCardType").value == '    ' ? "NULL" : "'#{records.Fields.Item("SCDCardType").value}'"},
#{records.Fields.Item("CardATK").value || "NULL"},
#{records.Fields.Item("CardDef").value || "NULL"},
'#{records.Fields.Item("SCCardAttribute").value.empty? ? "NULL" : records.Fields.Item("SCCardAttribute").value}',
'#{records.Fields.Item("SCCardRace").value.empty? ? "NULL" : records.Fields.Item("SCCardRace").value}',
#{records.Fields.Item("SCCardAttribute").value == '    ' ? "NULL" : "'#{records.Fields.Item("SCCardAttribute").value}'"},
#{records.Fields.Item("SCCardRace").value == '    ' ? "NULL" : "'#{records.Fields.Item("SCCardRace").value}'"},
#{records.Fields.Item("CardStarNum").value || "NULL"},
'#{records.Fields.Item("SCCardDepict").value}',
#{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("CardPhal").value.split(",").collect{|stat|stats[stat.to_i]}.join("\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
end
@db.execute('begin transaction')
@db.execute('DROP TABLE "main"."YGODATA";') rescue nil
@db.execute('CREATE TABLE "YGODATA" (
@db.execute('DROP INDEX if exists "main"."name";')
@db.execute('DROP TABLE if exists "main"."yu-gi-oh";')
@db.execute('CREATE TABLE "yu-gi-oh" (
"id" INTEGER NOT NULL,
"number" TEXT NOT NULL,
"name" TEXT NOT NULL,
......@@ -107,13 +106,13 @@ class Card
"stats" TEXT NOT NULL,
"archettypes" TEXT NOT NULL,
"mediums" TEXT NOT NULL,
"tokens" TEXT,
"tokens" INTEGER NOT NULL,
PRIMARY KEY ("id")
);')
@db.execute_batch(sql)
@db.execute('CREATE UNIQUE INDEX "main"."name" ON "yu-gi-oh" ("name");')
@db.execute('commit transaction')
@count = @db.get_first_value("select COUNT(*) from YGODATA") #重建计数
@count = @db.get_first_value("select COUNT(*) from `yu-gi-oh`") #重建计数
@all.clear #清空缓存
end
end
......@@ -150,7 +149,7 @@ class Card
@stats = hash['stats'].split("\t").collect{|stat|stat.to_i}
@archettypes = hash['archettypes'].split("\t").collect{|archettype|stat.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']
Card.cache[@id] = self
......@@ -159,7 +158,7 @@ class Card
@image ||= Surface.load("graphics/field/card.jpg").display_format
end
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
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
......@@ -193,10 +192,14 @@ class Card
def diy?
number == :"00000000"
end
def known?
self != Unknown
end
def inspect
"[#{card_type}][#{name}]"
end
Unknown = Card.new('id' => 0, 'number' => :"00000000", 'attribute' => :, 'level' => 1, 'name' => "", 'lore' => '', 'card_type' => :通常怪兽, 'stats' => "", 'archettypes' => "", 'mediums' => "")
Unknown.instance_eval{@image = CardBack; @image_small = CardBack_Small}
end
require_relative 'cardcreater'
\ No newline at end of file
require_relative 'cardcreater'
#Card.load_from_ycff3
\ No newline at end of file
......@@ -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", 8)
def create_image
#载入背景图
result = if monster?
Surface.load "graphics/cardcreater/back/#{card_type}/#{attribute} #{level}.jpg"
......
......@@ -27,9 +27,6 @@ class Game_Card
@atk = @card.atk
@def = @card.def
end
def known?
@card != Card::Unknown
end
def image_small
if @position == :set and !$game.player_field.hand.include?(self)
Card.find(nil).image_small
......
......@@ -187,7 +187,7 @@ class Action
when /^┊(.*)┊$/m
Chat.new from_player, $1
when /^※\[(.*)\]\n(.*)\n注释.*$/m
card = Card.find($1.to_sym)
p card = Card.find($1.to_sym)
case $2
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)
......
......@@ -99,15 +99,15 @@ class Iduel < Game
#@conn.connect Socket.pack_sockaddr_in(Port, Server)
recv @conn.gets(RS) while @conn
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")}
Game_Event.push Game_Event::Error.new(exception.class.to_s, exception.message)
ensure
self.exit
end
end
rescue => exception
Game_Event.push Game_Event::Error.new("网络错误", "连接服务器失败")
$log.error('iduel-connect-2') {[exception.inspect, *exception.backtrace].join("\n")}
Game_Event.push Game_Event::Error.new("网络错误", "连接服务器失败")
end
end
def checknum(head, *args)
......
......@@ -30,14 +30,14 @@ class Replay
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
from_players = contents.scan(Delimiter).collect do |matched|
id = matched[1].to_i
id = matched[1] || :player
name = matched[0]
if result.player1 and result.player1.id == id
true
elsif result.player2 and result.player2.id == id
false
elsif result.player1.nil?
result.player1 = User.new(id, name)
result.player1 = User.new(id , name)
true
elsif result.player2.nil?
result.player2 = User.new(id, name)
......@@ -48,8 +48,9 @@ class Replay
end
end
end
result.player1 ||= User.new(0, "我")
result.player2 ||= User.new(1, "对手")
result.player1 ||= User.new(:player, "我")
result.player2 ||= User.new(:opponent, "对手")
p result.player1, result.player2
lines = contents.split(Delimiter)
lines.shift #split后,在第一个操作之前会多出一个空白元素
if from_players.empty?
......
......@@ -22,7 +22,7 @@ class NBX < Game
Game_Event.push Game_Event::Host.new(@room)
send(nil, "NewRoom", @room.player1.name)
@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
def action(action)
if @room.player2
......
......@@ -4,7 +4,7 @@ class Window_CardInfo < Window
def initialize(x,y)
super(x,y,1024-x,524,300)
@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
def card=(card)
return if card.nil? or card == @card or !card.known?
......@@ -18,6 +18,12 @@ class Window_CardInfo < Window
return
end
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]
if @lore_pos[0] + width > @width
@lore_pos[0] = 0
......@@ -25,9 +31,6 @@ class Window_CardInfo < Window
end
@font.draw_blended_utf8(@contents, char, @lore_pos[0], @lore_pos[1], 0xFF, 0xFF, 0xFF)
@lore_pos[0] += width
@lore_start += 1
end
end
def refresh
......@@ -45,6 +48,6 @@ class Window_CardInfo < Window
@lore_start = 0
@lore_pos = [0, 234]
# @font.draw_blended_utf8(@contents, @card.inspect, 0, 300, 0xFF, 0xFF, 0x66)
# @font.draw_blended_utf8(@contents, @card.inspect, 0, 300, 0xFF, 0xFF, 0x66)
end
end
......@@ -45,11 +45,11 @@ class Window_Field < Window
end
if !@field.removed.empty?
@items[:removed] = Removed_Pos + Card_Size
@cards[:removed] = @field.removed.first
@cards[:removed] = @field.removed.last
end
if !@field.graveyard.empty?
@items[:graveyard] = Graveyard_Pos + Card_Size
@cards[:graveyard] = @field.graveyard.first
@cards[:graveyard] = @field.graveyard.last
end
@field.field.each_with_index do |card, index|
......@@ -143,18 +143,21 @@ class Window_Field < Window
refresh_action_window
end
def refresh_cardinfo_window
$scene.cardinfo_window.card = @card = case @index
@card = case @index
when :deck
@field.deck.first
@field.deck.last
when :extra
@field.extra.first
when :graveyard
@field.graveyard.first
@field.graveyard.last
when :removed
@field.removed.last
when 0..10
@field.field[@index]
when Integer #手卡
@field.hand[@index-11]
end
$scene.cardinfo_window.card = @card unless @index == :deck
end
def refresh_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