Commit 25cfc5d9 authored by Peter Xin's avatar Peter Xin

init commit

parents
.idea
DataEditorX
MagicSetEditor
ygopro-images/*
ygopro-images-raw/*.jpg
*.mse-set
*.log
Authorize.rb
\ No newline at end of file
# Commands Reflector
module Commands
module_function
def execute(command)
end
def change_password(password)
end
end
\ No newline at end of file
# git commands
require File.dirname(__FILE__) + '/Global.rb'
module Git
module_function
def pull
return `cd #{global.git_path} && git pull`
end
def push
return `cd #{global.answer_path} && git push`
end
def commit
end
def hook
end
end
\ No newline at end of file
# Global Settings
module Global
class << self
attr_accessor :language
attr_accessor :git_path
attr_accessor :git_uri
attr_accessor :database_name
attr_accessor :image_type
attr_accessor :records_name
attr_accessor :answer_path
attr_accessor :answer_uri
attr_accessor :mse_path
attr_accessor :mse_set_path
end
self.language = 'cn'
self.git_path = 'ygopro-images-raw'
self.git_uri = 'https://github.com/mycard/ygopro-images-raw.git'
self.database_name = 'cards-%s.cdb'
self.image_type = '.jpg'
self.records_name = "records.json"
self.answer_path = "ygopro-images"
self.answer_uri = "https://github.com/mycard/ygo-images.git"
self.mse_path = "MagicSetEditor2"
self.mse_set_path = "mse-sets"
module_function
def full_database_path
return File.join self.git_path, sprintf(self.database_name, self.language)
end
def full_image_path
return self.git_path
end
def full_answer_path
return self.answer_path
end
def full_image_name(id)
id = id.to_i.to_s
return File.join self.full_image_path, id + self.image_type
end
def full_mse_path
return File.join self.mse_path, 'mse.com'
end
end
\ No newline at end of file
# Judge the hash.
# offer the CSV version and JSON Version.
# Use the JSON Version.
require 'JSON'
require File.dirname(__FILE__) + '/Authorize.rb'
require File.dirname(__FILE__) + '/Global.rb'
require File.dirname(__FILE__) + '/Log.rb'
require File.dirname(__FILE__) + '/Sqlite.rb'
module HashJudger
module_function
def load
begin
content = File.open(Global.records_name, "r") {|f| f.read}
return JSON.parse content
rescue Exception => e
Log.logger.error e.inspect
return {}
end
end
def save(document)
file = File.open Global.records_name, "w"
file.write document.to_json
file.close
end
def generate_hash(image_id, server_data)
image_path = Global.full_image_name image_id
if !File.exist? image_path
Log.logger.info("Unexist file #{image_path} for id #{image_id}. Skip.")
return nil
end
data = server_data.join '|'
return [Authorize.md5_file(image_path), Authorize.md5(data)]
end
def generate_document(sql_data)
answer = {}
for data in sql_data
id = data[0]
hash = self.generate_hash id, data
answer[id.to_s] = hash if hash != nil
end
return answer
end
def compare
# 读取两组数据
old_data = self.load
new_data = generate_document(Sqlite.load)
# 生成编号序列
# 添加
adds = new_data.keys - old_data.keys
if adds == []
Log.logger.info "No cards added."
else
Log.logger.info "Following cards added:"
adds.each {|id| Log.logger.info "#{[id]}"}
end
# 移除
removes = old_data.keys - new_data.keys
if removes == []
Log.logger.info "No cards remvoed."
else
Log.logger.info "Following cards removed:"
removes.each {|id| Log.logger.info "#{[id]}"}
end
# 公共部分
commons = new_data.keys & old_data.keys
changes = []
Log.logger.info "Following cards changed"
# 逐个比较
for id in commons
old_piece = old_data[id]
new_piece = new_data[id]
if old_piece[0] != new_piece[0] and old_piece[1] != new_piece[1]
Log.logger.info "[#{id}] Both changed"
changes.push id
elsif old_piece[0] != new_piece[0]
Log.logger.info "[#{id}] image changed"
changes.push id
elsif old_piece[1] != new_piece[1]
Log.logger.info "[#{id}] data changed"
changes.push id
end
end
Log.logger.info "Oooooops but no data or file changed." if changes == []
# 保存新数据
self.save new_data
# 返还
return [adds, removes, changes]
end
end
\ No newline at end of file
require File.dirname(__FILE__) + '/Global.rb'
class LanguageConstants
attr_accessor :term_monster
attr_accessor :term_spell
attr_accessor :term_trap
attr_accessor :term_normal
attr_accessor :term_effect
attr_accessor :term_fusion
attr_accessor :term_ritual
attr_accessor :term_trapmonster
attr_accessor :term_spirit
attr_accessor :term_union
attr_accessor :term_dual
attr_accessor :term_tuner
attr_accessor :term_synchro
attr_accessor :term_token
attr_accessor :term_quickplay
attr_accessor :term_continuous
attr_accessor :term_equip
attr_accessor :term_field
attr_accessor :term_counter
attr_accessor :term_flip
attr_accessor :term_cartoon
attr_accessor :term_xyz
attr_accessor :term_pendulum
attr_accessor :pendulum_effect_head
attr_accessor :monster_effect_head
attr_accessor :term_races # 偷个鸡
class << self
attr_accessor :languages
def current
return languages[Global.language]
end
end
self.languages = {}
end
language_chinese = LanguageConstants.new
language_chinese.term_monster = "怪兽卡"
language_chinese.term_spell = "魔法卡"
language_chinese.term_trap = "陷阱卡"
language_chinese.term_normal = "通常"
language_chinese.term_effect = "效果"
language_chinese.term_fusion = "融合"
language_chinese.term_ritual = "仪式"
language_chinese.term_trapmonster = "陷阱怪兽"
language_chinese.term_spirit = "灵魂"
language_chinese.term_union = "同盟"
language_chinese.term_dual = "二重"
language_chinese.term_tuner = "调整"
language_chinese.term_synchro = "同调"
language_chinese.term_token = "衍生物"
language_chinese.term_quickplay = "速攻"
language_chinese.term_continuous = "永续"
language_chinese.term_equip = "装备"
language_chinese.term_field = "场地"
language_chinese.term_counter = "反击"
language_chinese.term_flip = "反转"
language_chinese.term_cartoon = "卡通"
language_chinese.term_xyz = "XYZ"
language_chinese.term_pendulum = "灵摆"
language_chinese.pendulum_effect_head = /←\d 【灵摆】 \d→(\n)?/
language_chinese.monster_effect_head = "\n【怪兽效果】\n"
language_chinese.term_races = [
"",
"战士族",
"魔法使族",
"天使族",
"恶魔族",
"不死族",
"机械族",
"水族",
"炎族",
"岩石族",
"鸟兽族",
"植物族",
"昆虫族",
"雷族",
"龙族",
"兽族",
"兽战士族",
"恐龙族",
"鱼族",
"海龙族",
"爬虫族",
"念动力族",
"幻兽神族",
"创世神族",
"幻龙族"
] # K 社你敢出个原生双种族怪试试?
language_japanese = LanguageConstants.new
language_japanese.term_monster = "モンスター"
language_japanese.term_spell = "魔法カード"
language_japanese.term_trap = "罠カード"
language_japanese.term_normal = "通常"
language_japanese.term_effect = "効果"
language_japanese.term_fusion = "融合"
language_japanese.term_ritual = "儀式"
language_japanese.term_trapmonster = "罠モンスター"
language_japanese.term_spirit = "スピリット"
language_japanese.term_union = "ユニオン"
language_japanese.term_dual = "デュアル"
language_japanese.term_tuner = "チューナー"
language_japanese.term_synchro = "シンクロ"
language_japanese.term_token = "トークン"
language_japanese.term_quickplay = "速攻"
language_japanese.term_continuous = "永続"
language_japanese.term_equip = "装備"
language_japanese.term_field = "フィールド"
language_japanese.term_counter = "カウンター"
language_japanese.term_flip = "リバース"
language_japanese.term_cartoon = "トゥーン"
language_japanese.term_xyz = "エクシーズ"
language_japanese.term_pendulum = "ペンデュラム"
language_japanese.pendulum_effect_head = /【Pスケール:青(.*)/赤(.*)】(\n)?/
language_japanese.monster_effect_head = /(\n)?【モンスター効果】\n/
language_japanese.term_races = [
"",
"戦士族",
"魔法使い族",
"天使族",
"悪魔族",
"アンデット族",
"機械族",
"水族",
"炎族",
"岩石族",
"鳥獣族",
"植物族",
"昆虫族",
"雷族",
"ドラゴン族",
"獣族",
"獣戦士族",
"恐竜族",
"魚族",
"海竜族",
"爬虫類族",
"サイキック族",
"幻神獣族",
"創造神族",
"幻竜族"
]
LanguageConstants.languages['cn'] = language_chinese
LanguageConstants.languages['jp'] = language_japanese
\ No newline at end of file
# Log
require 'logger'
module Log
class << self
attr_accessor :logger
end
self.logger = Logger.new 'generator.log'
end
\ No newline at end of file
# mse set constants
module MSEConstants
module MSEConfig
Tag = "mse"
TagHead = "head"
TagEnd = "end"
TagCn2Tw = "cn2tw"
TagSpell = "spell"
TagTrap = "trap"
TagRegPendulum = "pendulum-text"
TagRegMonster = "monster-text"
TagMaxCount = "maxcount"
TagRace = "race"
TagType = "type"
TagWidth = "width"
TagHeight = "height"
TagReimage = "reimage"
TagPendWidth = "pwidth"
TagPendHeight = "pheight"
TagImage = "imagepath"
TagReplace = "replace"
TagText = "text"
TagRep = "%%"
SepLine = " "
FileConfigName = "Chinese-Simplified"
PathImage = "Images"
Head = "mse version: 0.3.8\r\ngame: yugioh\r\nstylesheet: standard\r\nset info:\r\n\tlanguage: %s\r\n\tedition: \r\n\tST mark is text: yes\r\n\tpendulum image is small: yes\r\n\thide gamecode: yes\r\n"
End = "version control:\n\ttype: none\napprentice code: "
Width = 319
Height = 317
PWidth = 363
PHeight = 275
end
module MSETags
TagCard = "card"
TagCardType = "card type"
TagName = "name"
TagAttribute = "attribute"
TagLevel = "level"
TagImage = "image"
TagType1 = "type 1" # 种族
TagType2 = "type 2" # 效果1
TagType3 = "type 3" # 效果2
TagType4 = "type 4" # 效果3
TagText = "rule text"
TagAtk = "attack"
TagDef = "defense"
TagNumber = "number"
TagRarity = "rarity"
TagPendulum = "pendulum"
TagPScale1 = "pendulum scale 1"
TagPScale2 = "pendulum scale 2"
TagPEndText = "pendulum text"
TagCode = "gamecode"
UnknownAtkDef = "?"
UnknownAtkDefValue = -2
TagRepText = "%text%"
TagRepPText = "%ptext%"
end
module MSEAttribute
None = "none"
Dark = "dark"
Divine = "divine"
Earth = "earth"
Fire = "fire"
Light = "light"
Water = "water"
Wind = "wind"
Spell = "spell"
Trap = "trap"
end
module MSESpellTrap
Equip = "+"
Quickplay = "$"
Field = "&"
Continuous = "%"
Ritual = "#"
Counter = "!"
Normal = "^"
Level = "*"
Model = "<sym-auto>%s</sym-auto>"
def self.model(para)
return sprintf Model, para
end
end
module MSECardType
Normal = "normal monster"
Effect = "effect monster"
Xyz = "xyz monster"
Ritual = "ritual monster"
Fusion = "fusion monster"
Token = "token monster"
Token2 = "token card"
Synchro = "synchro monster"
Spell = "spell card"
Trap = "trap card"
end
SetFileName = "set"
SingleFileMaxCount = 200
end
require File.dirname(__FILE__) + '/MSEConstants.rb'
require File.dirname(__FILE__) + '/YGOCoreJudgers.rb'
require File.dirname(__FILE__) + '/Global.rb'
require File.dirname(__FILE__) + '/Log.rb'
module MSETranslator
module_function
def write_set(file, set)
file.write(sprintf(MSEConstants::MSEConfig::Head, Global.language.upcase))
for card in set
self.write_card(file, card)
end
file.write(MSEConstants::MSEConfig::End)
end
def write_card(file, card)
if (YGOCoreJudgers.is_monster(card))
self.write_monster(file, card)
else
self.write_spell(file, card)
end
end
def write_monster(file, card)
file.write "\n#{MSEConstants::MSETags::TagCard}:\n"
file.write self.generate_line MSEConstants::MSETags::TagCardType, YGOCoreJudgers.get_cardtype_str(card)
file.write self.generate_line MSEConstants::MSETags::TagName, YGOCoreJudgers.get_name(card)
file.write self.generate_line MSEConstants::MSETags::TagAttribute, YGOCoreJudgers.get_attribute_str(card)
file.write self.generate_line MSEConstants::MSETags::TagLevel, YGOCoreJudgers.get_level_str(card)
file.write self.generate_line MSEConstants::MSETags::TagImage, YGOCoreJudgers.get_image_str(card)
types = YGOCoreJudgers.get_cardtypes_str card
file.write self.generate_line MSEConstants::MSETags::TagType1, types[0]
file.write self.generate_line MSEConstants::MSETags::TagType2, types[1]
file.write self.generate_line MSEConstants::MSETags::TagType3, types[2]
file.write self.generate_line MSEConstants::MSETags::TagType4, types[3]
# pack id. Ignored.
if YGOCoreJudgers.is_pendulum card
pendulum_effect, monster_effect = self.split_effect(YGOCoreJudgers.get_desc(card))
file.write self.generate_text MSEConstants::MSETags::TagText, monster_effect
file.write self.generate_line MSEConstants::MSETags::TagPendulum, "medium"
file.write self.generate_line MSEConstants::MSETags::TagPScale1, YGOCoreJudgers.get_pendulum_scale(card)
file.write self.generate_line MSEConstants::MSETags::TagPScale2, YGOCoreJudgers.get_pendulum_scale(card)
file.write self.generate_text MSEConstants::MSETags::TagPEndText, pendulum_effect
else
file.write self.generate_text MSEConstants::MSETags::TagText, YGOCoreJudgers.get_desc(card)
end
file.write self.generate_line MSEConstants::MSETags::TagAtk, YGOCoreJudgers.get_attack(card)
file.write self.generate_line MSEConstants::MSETags::TagDef, YGOCoreJudgers.get_defense(card)
file.write self.generate_line MSEConstants::MSETags::TagCode, YGOCoreJudgers.get_id_str(card)
end
def write_spell(file, card)
file.write "\n#{MSEConstants::MSETags::TagCard}:\n"
file.write self.generate_line MSEConstants::MSETags::TagCardType, YGOCoreJudgers.get_cardtype_str(card)
file.write self.generate_line MSEConstants::MSETags::TagName, YGOCoreJudgers.get_name(card)
file.write self.generate_line MSEConstants::MSETags::TagAttribute, YGOCoreJudgers.get_attribute_str(card)
file.write self.generate_line MSEConstants::MSETags::TagLevel, YGOCoreJudgers.get_level_str(card)
file.write self.generate_line MSEConstants::MSETags::TagImage, YGOCoreJudgers.get_image_str(card)
file.write self.generate_text MSEConstants::MSETags::TagText, YGOCoreJudgers.get_desc(card)
file.write self.generate_line MSEConstants::MSETags::TagCode, YGOCoreJudgers.get_id_str(card)
end
LineHead = "\t"#" "
def generate_line(key, word)
"#{LineHead}#{key}: #{word}\n"
end
def reline(word)
word = word.gsub "\n\r", "\n"
word = word.gsub "\r\n", "\n"
word = word.gsub "\r", ""
word = word.gsub "\n\n", "\n"
# 这是特别处理。
word = word.gsub "。\n", "。" if Global.language == "jp"
word
end
def generate_text(key, word)
word = self.reline word
ans = LineHead + key + ":\n"
lines = word.split "\n"
lines.each {|line| ans += "#{LineHead}#{LineHead}#{line}\n"}
ans
end
def split_effect(word)
word = reline word
words = word.split LanguageConstants.current.monster_effect_head
return ["", words[0]] if words.count <= 1
pendulum_effect = words[0].split(LanguageConstants.current.pendulum_effect_head).last
pendulum_effect = "" if pendulum_effect == nil
return [pendulum_effect, words[1]]
end
def generate_mse(data, key = "")
require 'zip'
path = File.join Global.mse_set_path, "data#{key}-#{Global.language}.mse-set"
clear_data = []
Zip::File.open(path, Zip::File::CREATE) do |zipfile|
for card in data
id = YGOCoreJudgers.get_id card
image_name = Global.full_image_name(id)
if File.exist? image_name
zipfile.add id.to_s + Global.image_type, image_name
clear_data.push card
else
Log.logger.warn "#{YGOCoreJudgers.get_log_str(card)} has no proper image for. Skipped."
end
end
zipfile.get_output_stream(MSEConstants::SetFileName) { |os| write_set(os, clear_data) }
end
Log.logger.info("Finished a pack named data#{key}-#{Global.language}.mse-set with following #{clear_data.count} cards:")
clear_data.each {|card| Log.logger.info(YGOCoreJudgers.get_log_str(card))}
end
def generate_mse_all(datas)
for i in 0...datas.size
generate_mse(datas[i], i)
end
end
def export_mse(full_file_name)
mse = Global.full_mse_path
command = "wine #{mse} --export #{full_file_name} #{Global.full_answer_path}/{card.gamecode}.jpg"
Log.logger.info "exporting #{full_file_name} command is: #{command}"
`#{command}`
end
def export_mse_all
Dir.glob("#{Global.mse_set_path}/*.mse-set") {|set| self.export_mse(set)}
end
end
\ No newline at end of file
# sinatra server core
require "sinatra"
post '/command' do
end
post '/hook' do
end
\ No newline at end of file
require 'sqlite3'
require File.dirname(__FILE__) + '/Git.rb'
require File.dirname(__FILE__) + '/Global.rb'
require File.dirname(__FILE__) + '/Log.rb'
require File.dirname(__FILE__) + '/MSEConstants.rb'
module Sqlite
def self.load
begin
db = SQLite3::Database.new Global.full_database_path
db.execute "select * from datas join texts on datas.id == texts.id"
rescue Exception => e
Log.logger.error e.inspect
nil
end
end
def self.split(data)
size = MSEConstants::SingleFileMaxCount
count = (data.size - 1) / size + 1
ans = []
for i in 0...count
range = Range.new(i * size, (i + 1) * size - 1)
ans.push data[range]
end
ans
end
end
# This is a test file.
def unit_test1
require './Sqlite.rb'
data = Sqlite.load
require './MSETranslator.rb'
MSETranslator.generate_mse(data)
end
def unit_test2
require './Sqlite.rb'
Global.language = 'cn'
data = Sqlite.split Sqlite.load
data = [data[10]]
require './MSETranslator.rb'
MSETranslator.generate_mse_all(data)
end
def unit_test3
require './MSETranslator.rb'
MSETranslator.export_mse_all
end
unit_test3
\ No newline at end of file
REGEDIT4
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
# ygocore constants
module YGOCoreConstants
module Attribute
Earth = 0x01
Water = 0x02
Fire = 0x04
Wind = 0x08
Light = 0x10
Dark = 0x20
Divine = 0x40
end
module Race
None = 0
Warrior = 0x1 # 战士
SpellCaster = 0x2 # 魔法使
Fairy = 0x4 # 天使
Fiend = 0x8 # 恶魔
Zombie = 0x10 # 不死
Machine = 0x20 # 机械
Aqua = 0x40 # 水
Pyro = 0x80 # 炎
Rock = 0x100 # 岩石
WindBeast = 0x200 # 鸟兽
Plant = 0x400 # 植物
Insect = 0x800 # 昆虫
Thunder = 0x1000 # 雷
Dragon = 0x2000 # 龙
Beast = 0x4000 # 兽
BeastWarrior = 0x8000 # 兽战士
Dinasour = 0x10000 # 恐龙
Fish = 0x20000 # 鱼
Seaserpent = 0x40000 # 海龙
Reptile = 0x80000 # 爬虫
Psycho = 0x100000 # 念动力
Devine = 0x200000 # 幻兽神
Creatorgod = 0x400000 # 创世神
Wyrm = 0x800000 # 幻龙
end
module Rule
None = 0
Ocg = 1
Tcg = 2
OT = 3
DIY = 4
end
module Type
Monster = 0x1 # 怪兽
Spell = 0x2 # 魔法
Trap = 0x4 # 陷阱
Normal = 0x10 # 通常
Effect = 0x20 # 效果
Fusion = 0x40 # 融合
Ritual = 0x80 # 仪式
TrapMonster = 0x100 # 陷阱怪兽
Spirit = 0x200 # 灵魂
Union = 0x400 # 同盟
Dual = 0x800 # 二重
Tuner = 0x1000 # 调整
Synchro = 0x2000 # 同调
Token = 0x4000 # 衍生物
Quickplay = 0x10000 # 速攻
Continuous = 0x20000 # 永续
Equip = 0x40000 # 装备
Field = 0x80000 # 场地
Counter = 0x100000 # 反击
Flip = 0x200000 # 反转
Cartoon = 0x400000 # 卡通
Xyz = 0x800000 # Xyz
Pendulum = 0x1000000 # 灵摆
end
PendulumLeftMod = 65536
PendulumRightMod = 16777216
end
=begin
CREATE TABLE datas(
0 - id integer primary key,
1 - ot integer,
2 - alias integer,
3 - setcode integer,
4 - type integer,
5 - atk integer,
6 - def integer,
7 - level integer,
8 - race integer,
9 - attribute integer,
10 - category integer);
CREATE TABLE texts(
11 - id integer primary key,
12 - name text,
13 - desc text,
str1 text,
str2 text,
str3 text,
str4 text,
str5 text,
str6 text,
str7 text,
str8 text,
str9 text,
str10 text,
str11 text,
str12 text,
str13 text,
str14 text,
str15 text,
str16 text);
select * from datas join
=end
require File.dirname(__FILE__) + '/YgocoreConstants.rb'
require File.dirname(__FILE__) + '/MSEConstants.rb'
require File.dirname(__FILE__) + '/LanguageConstants.rb'
module YGOCoreJudgers
ColumnID = 0
ColumnType = 4
ColumnAtk = 5
ColumnDef = 6
ColumnLevel = 7
ColumnRace = 8
ColumnAttribute = 9
ColumnName = 12
ColumnDesc = 13
module_function
def is_monster(card)
return card[ColumnType] & YGOCoreConstants::Type::Monster != 0
end
def is_spell(card)
return card[ColumnType] & YGOCoreConstants::Type::Spell != 0
end
def is_trap(card)
return card[ColumnType] & YGOCoreConstants::Type::Trap != 0
end
def is_normal(card)
return card[ColumnType] & YGOCoreConstants::Type::Normal != 0
end
def is_effect(card)
return card[ColumnType] & YGOCoreConstants::Type::Effect != 0
end
def is_fusion(card)
return card[ColumnType] & YGOCoreConstants::Type::Fusion != 0
end
def is_ritual(card)
return card[ColumnType] & YGOCoreConstants::Type::Ritual != 0
end
def is_spirit(card)
return card[ColumnType] & YGOCoreConstants::Type::Spirit != 0
end
def is_union(card)
return card[ColumnType] & YGOCoreConstants::Type::Union != 0
end
def is_dual(card)
return card[ColumnType] & YGOCoreConstants::Type::Dual != 0
end
def is_tuner(card)
return card[ColumnType] & YGOCoreConstants::Type::Tuner != 0
end
def is_sync(card)
return card[ColumnType] & YGOCoreConstants::Type::Synchro != 0
end
def is_token(card)
return card[ColumnType] & YGOCoreConstants::Type::Token != 0
end
def is_quickplay(card)
return card[ColumnType] & YGOCoreConstants::Type::Quickplay != 0
end
def is_continuous(card)
return card[ColumnType] & YGOCoreConstants::Type::Continuous != 0
end
def is_equip(card)
return card[ColumnType] & YGOCoreConstants::Type::Equip != 0
end
def is_field(card)
return card[ColumnType] & YGOCoreConstants::Type::Field != 0
end
def is_counter(card)
return card[ColumnType] & YGOCoreConstants::Type::Counter != 0
end
def is_flip(card)
return card[ColumnType] & YGOCoreConstants::Type::Flip != 0
end
def is_cartoon(card)
return card[ColumnType] & YGOCoreConstants::Type::Cartoon != 0
end
def is_xyz(card)
return card[ColumnType] & YGOCoreConstants::Type::Xyz != 0
end
def is_pendulum(card)
return card[ColumnType] & YGOCoreConstants::Type::Pendulum != 0
end
def get_id(card)
return card[ColumnID].to_i
end
def get_id_str(card)
return sprintf "%08d", self.get_id(card)
end
def get_desc(card)
return card[ColumnDesc]
end
def get_name(card)
return card[ColumnName]
end
def get_attack(card)
return card[ColumnAtk].to_i
end
def get_defense(card)
return card[ColumnDef].to_i
end
def get_level(card)
return card[ColumnLevel].to_i % YGOCoreConstants::PendulumLeftMod
end
def get_monster_level_str(card)
return MSEConstants::MSESpellTrap::Level * self.get_level(card)
end
def get_spell_level_str(card)
appendix = ""
if self.is_equip card
appendix = MSEConstants::MSESpellTrap::Equip
elsif self.is_quickplay card
appendix = MSEConstants::MSESpellTrap::Quickplay
elsif self.is_field card
appendix = MSEConstants::MSESpellTrap::Field
elsif self.is_continuous card
appendix = MSEConstants::MSESpellTrap::Continuous
elsif self.is_ritual card
appendix = MSEConstants::MSESpellTrap::Ritual
else
appendix = MSEConstants::MSESpellTrap::Normal
end
return MSEConstants::MSESpellTrap.model appendix
return "【" + LanguageConstants.current.term_spell + appendix + "】"
end
def get_trap_level_str(card)
appendix = ""
if self.is_continuous card
appendix = MSEConstants::MSESpellTrap::Continuous
elsif self.is_counter card
appendix = MSEConstants::MSESpellTrap::Counter
else
appendix = MSEConstants::MSESpellTrap::Normal
end
return MSEConstants::MSESpellTrap.model appendix
return "【" + LanguageConstants.current.term_trap + appendix + "】"
end
def get_level_str(card)
if self.is_monster(card)
get_monster_level_str card
elsif self.is_spell(card)
get_spell_level_str card
elsif self.is_trap(card)
get_trap_level_str card
end
end
def get_race(card)
return card[ColumnRace].to_i
end
def get_race_str(card)
race = self.get_race card
if race == YGOCoreConstants::Race::None
return LanguageConstants.current.term_races[0]
else
index = Math.log race, 2 # 我不管我就是要偷鸡!
return LanguageConstants.current.term_races[index.floor + 1]
end
end
def get_pendulum_scale(card)
return card[ColumnLevel] / YGOCoreConstants::PendulumRightMod
end
def get_image_str(card)
id = self.get_id(card)
return "#{id}#{Global.image_type}"
end
def get_monster_attribute(card)
return card[ColumnAttribute].to_i
end
def get_monster_attribute_str(card)
attribute = self.get_monster_attribute card
if attribute & YGOCoreConstants::Attribute::Earth != 0
return MSEConstants::MSEAttribute::Earth
elsif attribute & YGOCoreConstants::Attribute::Water != 0
return MSEConstants::MSEAttribute::Water
elsif attribute & YGOCoreConstants::Attribute::Fire != 0
return MSEConstants::MSEAttribute::Fire
elsif attribute & YGOCoreConstants::Attribute::Wind != 0
return MSEConstants::MSEAttribute::Wind
elsif attribute & YGOCoreConstants::Attribute::Light != 0
return MSEConstants::MSEAttribute::Light
elsif attribute & YGOCoreConstants::Attribute::Dark != 0
return MSEConstants::MSEAttribute::Dark
elsif attribute & YGOCoreConstants::Attribute::Divine != 0
return MSEConstants::MSEAttribute::Divine
else
return MSEConstants::MSEAttribute::None
end
end
def get_spell_attribute_str(card)
return MSEConstants::MSEAttribute::Spell
end
def get_trap_attribute_str(card)
return MSEConstants::MSEAttribute::Trap
end
def get_attribute_str(card)
if self.is_monster(card)
return self.get_monster_attribute_str(card)
elsif self.is_spell(card)
return self.get_spell_attribute_str(card)
elsif self.is_trap(card)
return self.get_trap_attribute_str(card)
else
MSEConstants::MSEAttribute::None
end
end
def get_cardtype_str(card)
if self.is_spell card
return MSEConstants::MSECardType::Spell
elsif self.is_trap card
return MSEConstants::MSECardType::Trap
elsif self.is_monster card
if self.is_token card
race = self.get_race card
if race == 0
return MSEConstants::MSECardType::Token2
else
return MSEConstants::MSECardType::Token
end
elsif self.is_normal card
return MSEConstants::MSECardType::Normal
elsif self.is_xyz card
return MSEConstants::MSECardType::Xyz
elsif self.is_ritual card
return MSEConstants::MSECardType::Ritual
elsif self.is_fusion card
return MSEConstants::MSECardType::Fusion
elsif self.is_sync card
return MSEConstants::MSECardType::Synchro
elsif self.is_effect card
return MSEConstants::MSECardType::Effect
end
else
return ""
end
end
def get_cardtypes_str(card)
return ["", "", "", ""] if !(self.is_monster card)
types = [self.get_race_str(card)]
# 黑蓝紫白绿
types.push LanguageConstants.current.term_xyz if self.is_xyz card
types.push LanguageConstants.current.term_ritual if self.is_ritual card
types.push LanguageConstants.current.term_fusion if self.is_fusion card
types.push LanguageConstants.current.term_synchro if self.is_sync card
types.push LanguageConstants.current.term_pendulum if self.is_pendulum card
# 子类别
types.push LanguageConstants.current.term_spirit if self.is_spirit card
types.push LanguageConstants.current.term_union if self.is_union card
types.push LanguageConstants.current.term_dual if self.is_dual card
types.push LanguageConstants.current.term_tuner if self.is_tuner card
types.push LanguageConstants.current.term_cartoon if self.is_cartoon card
# 效果 - 通常
types.push LanguageConstants.current.term_effect if self.is_effect card
types.push "" until types.size == 4
types
end
def get_log_str(card)
"[#{self.get_id_str(card)}]#{self.get_name(card)}"
end
end
\ No newline at end of file
{"10000000":["ed546e4a04e346ab216441beb40c7ba6","a3c0ab8b81eee764046310247384c248"],"10000020":["ec19f75668b3bac5f8ff4bde3e3b18b5","897bf484903747ff7545d54f05d0e968"],"10000030":["2311b6ff32cbd2ab91e866256b414e91","c22cdae70027f6c335cd50eeee0b8fd2"]}
\ No newline at end of file
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