赞 | 1 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 0 |
最后登录 | 2022-9-2 |
在线时间 | 7 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 95
- 在线时间
- 7 小时
- 注册时间
- 2022-6-9
- 帖子
- 2
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 奉先 于 2022-7-29 22:02 编辑
此腳本在網上找回來
如何修改參數 令前綴(is_maho?) 已知 影響此項由 make_prefix function 的 prefix_lv 參數決定
令前綴 裝備中的NOTE : 對應我想要的橙等級
class Array def data @data.to_s end end module Options # # # #RANK 0 1 2 3 4 5 6 7 8 9 #特性 f = [[ 0, 3, 10, 15, 30, 40, 70, 90,150,190], #白/无 [ 10, 11, 15, 20, 33, 43, 72, 92,152,192], #绿 [ 30, 31, 33, 35, 40, 50, 77, 97,156,196], #蓝 [ 70, 71, 73, 74, 79, 81, 90,110,167,207], #紫 [150,151,153,154,158,161,169,174,190,230]] #橙 a = Table.new(10,5) 10.times{|x| 5.times{|y| a[x,y] = f[y][x] }} #<=以上内容请不要修改=======================================================> S初始评价 = a S使用耐久 = false S每级强化评价 = 1 S宝石评价_白 = 1 S宝石评价_绿 = 2 S宝石评价_蓝 = 4 S宝石评价_紫 = 8 S宝石评价_橙 = 16 S品质_白 = 0 S品质_绿 = 10 S品质_蓝 = 30 S品质_紫 = 70 S品质_橙 = 150 S品质掉率_绿 = 0 #315 S品质掉率_蓝 = 0 #63 S品质掉率_紫 = 0 #9 S品质掉率_橙 = 100000 #1 S嵌孔掉率_1 = 315 S嵌孔掉率_2 = 100 S嵌孔掉率_3 = 63 S嵌孔掉率_4 = 18 S嵌孔掉率_5 = 4 #<=以下内容请不要修改=======================================================> def self.dataA S初始评价 end def self.dataB S每级强化评价 end def self.dataC [S品质_白, S品质_绿, S品质_蓝, S品质_紫, S品质_橙] end def self.dataD [S品质掉率_橙, S品质掉率_紫, S品质掉率_蓝, S品质掉率_绿] end def self.dataE [S嵌孔掉率_5, S嵌孔掉率_4, S嵌孔掉率_3, S嵌孔掉率_2, S嵌孔掉率_1] end def self.dataF [S宝石评价_白, S宝石评价_绿, S宝石评价_蓝, S宝石评价_紫, S宝石评价_橙] end def self.cf(a, b) self.dataA[a, b] end def self.lf(e=0) self.dataD.each_with_index do |r, i| return 4-i if (r * ( r ** -0.05 + 0.4 ) ** e).to_i >= rand(1000) end return 0 end def self.qf(e=0) self.dataE.each_with_index do |r, i| return 5-i if (r * ( r ** -0.05 + 0.4 ) ** e).to_i >= rand(1000) end return 0 end end module RPG class BaseItem def is_maho? note.include?("<前缀>") end def is_item? self.is_a?(RPG::Item) && is_gem? end def is_gem? note.include?("<宝石>") end def rank lv = note[/<品质\s*(.*)>/, 1].to_s ["白","绿","蓝","紫","橙", ""].index(lv) % 5 #"白","绿","蓝","紫","橙", "" %5 end def rank_lv note[/<RANK\s*(\d*)>/, 1].to_i end def features @features + features_note end def kind_id self.class.to_s + self.id.to_s end def features_note note.scan(/<特性 (.*) (.*)>/).inject([]) do |r, i| case i[0] when "吸收" r.push RPG::BaseItem::Feature.new(22,10,(i[1].to_i)/100.0) end end end end end module Vocab def self.xparam(id) ["命中率","回避率","会心率","会心回避率","魔法回避率","魔法反射率","反击率","HP再生率","MP再生率","TP再生率","生命吸收"][id] end def self.sparam(id) ["受到攻击的几率","防御效果率","恢复效果率","药物知识","MP消费率","TP消耗率","物理伤害率","魔法伤害率","针板伤害率","经验获得率"][id] end def self.zparam(id) ["遇敌机率减半","随机遇敌无效","偷袭无效","先发攻击率提升","获得2倍现金","物品获得机率翻倍"][id] end def self.elements(id) $data_system.elements[id] end def self.weapon_types(id) $data_system.weapon_types[id] end def self.armor_types(id) $data_system.armor_types[id] end end module DataManager def self.create_game_objects $game_temp = Game_Temp.new $game_system = Game_System.new $game_timer = Game_Timer.new $game_message = Game_Message.new $game_switches = Game_Switches.new $game_variables = Game_Variables.new $game_self_switches = Game_SelfSwitches.new $game_actors = Game_Actors.new $game_party = Game_Party.new $game_troop = Game_Troop.new $game_map = Game_Map.new $game_player = Game_Player.new $game_items = Game_Items.new end def self.make_save_contents contents = {} contents[:system] = $game_system contents[:timer] = $game_timer contents[:message] = $game_message contents[:switches] = $game_switches contents[:variables] = $game_variables contents[:self_switches] = $game_self_switches contents[:actors] = $game_actors contents[:party] = $game_party contents[:troop] = $game_troop contents[:map] = $game_map contents[:player] = $game_player contents[:items] = $game_items contents end def self.extract_save_contents(contents) $game_system = contents[:system] $game_timer = contents[:timer] $game_message = contents[:message] $game_switches = contents[:switches] $game_variables = contents[:variables] $game_self_switches = contents[:self_switches] $game_actors = contents[:actors] $game_party = contents[:party] $game_troop = contents[:troop] $game_map = contents[:map] $game_player = contents[:player] $game_items = contents[:items] end end module BattleManager def self.gain_drop_items $game_troop.make_drop_items.each do |item| $game_party.add_item(item, 1, true) $game_message.add(sprintf(Vocab::ObtainItem, item.name)) end wait_for_message end end class Game_Items < Array def idForNewItem(item, rand=false) if item.is_a?(RPG::Item) || item.is_gem? item = Game_UsableItem.new(item) else item = Game_EquipItem.new(item, rand) end self.push item return self.size - 1 end def items self.collect {|item| item.is_item? } end def gems self.collect {|item| item.is_gem? } end def weapons self.collect {|item| item.is_weapon? } end def armors self.collect {|item| item.is_armor? } end end class Game_BaoItem def initialize(id = nil) @id = id end def add_item(id) @id = id end def unadd_item @id = nil end def name item ? item.name : "空插槽" end def rank item ? item.rank : 0 end def features item.features if item end def item $game_items[@id] if @id end end class Game_Item def initialize(item) @item = item @id = $game_items.size end def is_a?(kind); item.is_a?(kind); end def is_item?; item.is_a?(RPG::Item) || is_gem?; end def is_gem?; item.is_gem?; end def is_weapon?; item.is_a?(RPG::Weapon) && !is_gem?; end def is_armor?; item.is_a?(RPG::Armor); end def is_equip?; is_weapon? || is_armor?; end def item @item end def id @id end def id=(id) @id = id end def rank item.rank end def item_id item.id end def kind_id item.class.to_s + item.id.to_s end def note item.note end def price item.price end def icon_index item.icon_index end def description item.description end def features item.features end end class Game_UsableItem < Game_Item def initialize(item) super(item) @number = 0 end def number @number end def number=(n) @number = n end def performance Options.dataC[item.rank] end def name; item.name; end #物品名 def itype_id; item.itype_id; end #贵重品值 def scope; item.scope; end #使用范围 def occasion; item.occasion; end #使用时刻 def effects; item.effects; end #使用效果 def damage; item.damage; end #使用伤害 def repeats; item.repeats; end #连续回数 def success_rate; item.success_rate; end #成功率 def tp_gain; item.tp_gain; end #获得TP def animation_id; item.animation_id; end #动画编号 def speed; item.speed; end #速度補正 def key_item?; itype_id == 2; end #贵重品判定 def consumable; item.consumable; end #消耗判定 def for_opponent?; [1, 2, 3, 4, 5, 6].include?(scope); end def for_friend?; [7, 8, 9, 10, 11].include?(scope); end def for_dead_friend?; [9, 10].include?(scope); end def for_user?; scope == 11; end def for_one?; [1, 3, 7, 9, 11].include?(scope); end def for_random?; [3, 4, 5, 6].include?(scope); end def number_of_targets; for_random? ? scope - 2 : 0; end def for_all?; [2, 8, 10].include?(scope); end def need_selection?; [1, 7, 9].include?(scope); end def battle_ok?; [0, 1].include?(occasion); end def menu_ok?; [0, 2].include?(occasion); end def certain?; @hit_type == 0; end #技能用? def physical?; @hit_type == 1; end #技能用? def magical?; @hit_type == 2; end #技能用? end class Game_EquipItem < Game_Item def initialize(item, rand = true) super(item) @lv = rand ? make_lv : 0 @params = make_params(rand) @prefix = 0 @prefix_lv = 0 @dongshu = [] make_prefix if rand make_dongshu if rand make_naijiu(rand) end def dongshu @dongshu end def wtype_id; item.wtype_id; end #武器类型 def atype_id; item.atype_id; end #防具类型 def etype_id; item.etype_id; end #装备部位 def animation_id; item.animation_id; end def lv; @lv; end def naijiu; @naijiu; end def naijiu_max; @naijiu_max; end def lv_up @lv += 1 end def make_naijiu(rand) @naijiu_max = 100 @naijiu = rand ? rand(51)+50 : @naijiu_max end def make_dongshu n = Options.qf(0) n.times{add_ds} end def add_ds @dongshu.push Game_BaoItem.new end def make_lv u = 0 max_lv = 5 + 0 #提高0 可提高强化等级 max_le = 200 + 0 #提高0 可提高强化概率 max_lv.times{ return u if rand(max_le) < 100 u += 1 } u end def make_params(rand) return item.params unless rand item.params.collect do |param| num = ([(param).abs, 1].max**-0.5*param).truncate ts = param - num + rand(num*2+1) ts == 0 ? param : ts end end def make_prefix @prefix_lv = Options.lf(0) return if @prefix_lv == 0 items = pzqz(@prefix_lv) @prefix = items[rand(items.size)].id end def features base_features + ds_features end def base_features item.features + prefix_item_features end def ds_features result = [] @dongshu.each {|item| if item.item features = item.features if is_armor? data = $data_armors.compact.find {|i| i.name == item.name } features = data.features if data end result += features end } result end def prefix_item_features @prefix > 0 ? prefix_item.features : [] end def prefix_item equip = $data_weapons[@prefix] if is_armor? data = $data_armors.compact.find {|i| i.name == equip.name } equip = data if data end equip end def allqz $data_weapons.select {|item| item ? item.is_maho? : false} end def pzqz(n) n = 5 #TEST allqz.select{|item| item.rank == n} end def ds prefix_item.description if @prefix > 0 end def name tn = "" tn = tn + prefix_item.name + "的" if @prefix > 0 tn += item.name tn += (@lv == 0 ? "" : sprintf("%+d", @lv)) tn end def price all_lv_price = (@lv * @lv + @lv)*(50+base_performance*2)/2 super + all_lv_price + 2 ** @prefix_lv * 1000 end def params r = 0.0 @params.each_with_index do |e, i| if e > 0 case i when 0 r += 0.8 when 1 r += 0.9 else r += 1 end end end #g = @params.inject(0) {|r, i| i > 0 ? r + 1 : r } r = (r == 0 ? 0 : r ** -0.6 / 2.0) 8.times.collect do |i| pa = @params[i] case i when 0 (pa + @lv * pa * [pa.abs, 1].max ** -0.5 * r * (pa < 0 ? 0.2 : 2)).round when 1 (pa + @lv * pa * [pa.abs, 1].max ** -0.5 * r * (pa < 0 ? 0.12 : 1.2)).round else (pa + @lv * pa * [pa.abs, 1].max ** -0.5 * r * (pa < 0 ? 0.1 : 1)).round end end #@params.collect do |param| #end end def rank case performance when 0...10 ; 0 when 10...30 ; 1 when 30...70 ; 2 when 70...150 ; 3 when 150...310 ; 4 when 310...999 ; 5 end end def dakongg 2 ** dongshu.size * (100+base_performance*10) end def lv_price (@lv + 1) * (100+base_performance) end def base_performance Options.cf(item.rank_lv, @prefix_lv) end def ds_performance @dongshu.inject(0) {|r, i| r + Options.dataF[i.rank] } end def performance @lv + base_performance + ds_performance end end class Game_Party < Game_Unit def initialize super @gold = 0 @steps = 0 @last_item = Game_BaseItem.new @menu_actor_id = 0 @target_actor_id = 0 @actors = [] @items = [] end def consume_item(item) lose_item(item.id, 1) if item.is_a?(RPG::Item) && item.consumable end def item_number(item) return unless item n = 0 all_items.each do |i| if i.kind_id == item.kind_id n += i.is_item? ? i.number : 1 end end n end def setup_battle_test_items $data_items.each do |item| add_item(item, max_item_number(item)) if item && !item.name.empty? end end def has_item?(item, include_equip = false) return true if item_number(item) > 0 #return include_equip ? members_equip_include?(item) : false end def members_equip_include?(item) msgbox "判定队伍成员是否装备着指定物品" members.any? {|actor| actor.equips.any?{|it|it.item_id == item.item_id }} end def add_item(item, amount, rand = true) return unless item return if amount == 0 return unadd_item(item, amount) if amount < 0 if item.class == RPG::Item gain_item($game_items.idForNewItem(item), amount) else amount.times{ gain_item($game_items.idForNewItem(item, rand)) } end $game_map.need_refresh = true end def unadd_item(item, amount) amount.abs.times do all_items.each do |i| if i.kind_id == item.kind_id lose_item(i.id, 1) break end end end $game_map.need_refresh = true end def add_shopitem(item, number) if item.is_item? $game_items.push item gain_item($game_items.size-1, number) else id = item.item_id item = item.is_weapon? ? $data_weapons[id] : $data_armors[id] add_item(item, number, false) end end def gain_item(id, n=1) return unless id if $game_items[id].is_item? items.each do |item| if $game_items[id].kind_id == item.kind_id maxn = [item.number + n, 99].min - item.number n -= maxn item.number += maxn end end if n > 0 $game_items[id].number = n @items.push(id) end else @items.push(id) end all_items_sort end def lose_item(id, n=1) return unless id if $game_items[id].is_item? items.reverse_each do |item| if $game_items[id].kind_id == item.kind_id maxn = [item.number, n].min item.number -= maxn n -= maxn @items.delete(item.id) if item.number == 0 end end else @items.delete(id) end end def all_items_sort @items.sort!{|a, b|$game_items[a].item_id - $game_items[b].item_id} end def items @items.collect {|id| $game_items[id] }.select {|item| item.is_item? } end def gems @items.collect {|id| $game_items[id] }.select {|item| item.is_gem? } end def weapons @items.collect {|id| $game_items[id] }.select {|item| item.is_weapon? } end def armors @items.collect {|id| $game_items[id] }.select {|item| item.is_armor? } end end class Game_Battler < Game_BattlerBase def make_damage_value(user, item) value = item.damage.eval(user, self, $game_variables) value *= item_element_rate(user, item) value *= pdr if item.physical? value *= mdr if item.magical? value *= rec if item.damage.recover? value = apply_critical(value) if @result.critical value = apply_variance(value, item.damage.variance) value = apply_guard(value) @result.make_damage(value.to_i, user, item) end end class Game_Actor < Game_Battler def init_equips(equips) @equips = Array.new(equip_slots.size) equips.each_with_index do |item_id, i| next if item_id == 0 etype_id = equip_slots[i] item = etype_id == 0 ? $data_weapons[item_id] : $data_armors[item_id] @equips[i] = $game_items.idForNewItem(item, false) end refresh end def param_rate(param_id) features_sum_pi(FEATURE_PARAM, param_id) end def sparam(sparam_id) features_sum_pi(FEATURE_SPARAM, sparam_id) end def features_sum_pi(code, id) r_features_pi(code, id) * r_features_sum(code, id) end def r_features_pi(code, id) rsum_features_with_id(code, id).inject(1.0) {|r, ft| r += (ft.value-1) } end def r_features_sum(code, id) rpi_features_with_id(code, id).inject(1.0) {|r, ft| r *= ft.value } end def rsum_features_with_id(code, id) rsum_all_features.select {|ft| ft.code == code && ft.data_id == id } end def rpi_features_with_id(code, id) rpi_all_features.select {|ft| ft.code == code && ft.data_id == id } end def rsum_all_features rsum_feature_objects.inject([]) {|r, obj| r + obj.features } end def rpi_all_features rpi_feature_objects.inject([]) {|r, obj| r + obj.features } end def rsum_feature_objects [actor] + [self.class] + equips.compact end def rpi_feature_objects states end def equip_slots return [0,0,2,3,4,4] if dual_wield? return [0,1,2,3,4,4] end def weapons @equips.select {|i| i ? $game_items[i].is_weapon? : false }.collect {|i| $game_items[i] } end def armors @equips.select {|i| i ? $game_items[i].is_armor? : false }.collect {|i| $game_items[i] } end def equips @equips.collect {|i| i ? $game_items[i] : nil } end def equip_change_ok?(slot_id) return true return false if equip_type_fixed?(equip_slots[slot_id]) return false if equip_type_sealed?(equip_slots[slot_id]) return true end def release_unequippable_items(item_gain = true) equips.each_with_index do |item, i| next if item if !equippable?(item) || item.etype_id != equip_slots[i] trade_item_with_party(nil, @equips[i]) if item_gain end end end def clear_equipments equip_slots.size.times do |i| change_equip(i, nil) if equip_change_ok?(i) end end def change_equip(slot_id, item) return unless trade_item_with_party(item, equips[slot_id]) return if item && equip_slots[slot_id] != item.etype_id @equips[slot_id] = item ? item.id : nil refresh end def force_change_equip(slot_id, item) @equips[slot_id] = item ? item.id : nil release_unequippable_items(false) refresh end def trade_item_with_party(new_item, old_item) return false if new_item && !$game_party.has_item?(new_item) $game_party.gain_item(old_item ? old_item.id : nil) $game_party.lose_item(new_item ? new_item.id : nil) return true end def change_equip_by_id(slot_id, item_id) msgbox "变更装备(用 ID 指定)" if equip_slots[slot_id] == 0 change_equip(slot_id, item_id) else change_equip(slot_id, item_id) end end end class Game_Action def clear @item = nil @target_index = -1 @value = 0 end def set_skill(skill_id) @item = $data_skills[skill_id] self end def set_item(item) @item = item self end def item @item end end class Game_ActionResult def make_damage(value, user, item) @critical = false if value == 0 @hp_damage = value if item.damage.to_hp? @mp_damage = value if item.damage.to_mp? @mp_damage = [@battler.mp, @mp_damage].min @hp_drain = make_drain_hp(user, item) @mp_drain = @mp_damage if item.damage.drain? @hp_drain = [@battler.hp, @hp_drain].min @success = true if item.damage.to_hp? || @mp_damage != 0 end def make_drain_hp(user, item) hp_damage = (@hp_damage * @battler.element_rate(2)).to_i return hp_damage if item.damage.drain? return (hp_damage * [user.xparam(10), 1].min).to_i if user.xparam(10) > 0 return 0 end alias celica_hp_damage_text hp_damage_text def hp_damage_text celica_hp_damage_text if @hp_damage > 0 fmt = @battler.actor? ? Vocab::ActorDamage : Vocab::EnemyDamage sprintf(fmt, @battler.name, @hp_damage) elsif @hp_damage < 0 fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery sprintf(fmt, @battler.name, Vocab::hp, -hp_damage) else fmt = @battler.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage sprintf(fmt, @battler.name) end end def hp_drain_text fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain sprintf("吸收了%s点%s", @hp_drain, Vocab::hp) end end class Game_Interpreter def command_126 value = operate_value(@params[1], @params[2], @params[3]) $game_party.add_item($data_items[@params[0]], value) end def command_127 value = operate_value(@params[1], @params[2], @params[3]) $game_party.add_item($data_weapons[@params[0]], value, true) end def command_128 value = operate_value(@params[1], @params[2], @params[3]) $game_party.add_item($data_armors[@params[0]], value, true) end def 开启强化画面 SceneManager.call(Scene_MakeEquip) end end class Window_Base < Window def draw_item_name(item, x, y, enabled = true, width = 300) return unless item draw_icon(item.icon_index, x, y, enabled) change_color(performance_color(item), enabled) draw_text(x + 24, y, width, line_height, item.name) end def performance_color(item) return text_color(0) if item.is_a?(RPG::Skill) pf = item.performance if pf < 10 performance_rank(0) elsif pf < 30 performance_rank(1) elsif pf < 70 performance_rank(2) elsif pf < 150 performance_rank(3) elsif pf < 310 performance_rank(4) else performance_rank(5) end end def performance_rank(n) #白 绿 蓝 紫 橙 粉 text_color([ 0,28, 9,30,20,27][n]) end end class Window_Selectable < Window_Base def active=(active) super update_cursor call_update_help call_update_equiphelp end def index=(index) @index = index update_cursor call_update_help call_update_equiphelp end def call_update_equiphelp update_equiphelp if active && @equiphelp_window end def update_equiphelp @equiphelp_window.clear end def drx x + index % col_max * (item_width + spacing) + item_width / 4 end def dry y + index / col_max * item_height + item_height - oy end def equiphelp_window=(equiphelp_window) @equiphelp_window = equiphelp_window call_update_equiphelp end end class Window_EquipHelp < Window_Base def initialize super(0,0,200,600) self.opacity = 0 end def standard_padding return 0 end def item @item end def set_item(window, item) @item = item @window = window refresh end def clear contents.clear end def refresh clear return unless item @dy = 0 draw_start #描画上外框 draw_name #描画物品名 if item.is_equip? draw_equip_kind #描画装备类型 draw_equip_attack_type #描画武器攻击类型 draw_equip_params #描画装备能力值 draw_equip_features #描画装备特性 draw_equip_dongshu #描画装备插槽 draw_description #描画说明 elsif item.is_gem? draw_gem_type #描画宝石类型 draw_gem_features #描画宝石特性 else draw_item_type #描画物品类型 draw_item_effects #描画物品使用效果 end draw_price #描画售格 draw_end #描画下外框 move_coordinate #移动坐标 end def draw_start pf_color = performance_color(item) contents.fill_rect(2,0,200-4,600,pf_color) contents.fill_rect(0,2,200,600-4,pf_color) contents.fill_rect(2+2,2,200-4-4,600-4,Color.new(0,0,64,160)) contents.fill_rect(2,2+2,200-4,600-4-4,Color.new(0,0,64,160)) end def draw_name contents.font.size = 16 contents.font.name = "宋体" contents.font.bold = true contents.font.color = performance_color(item) contents.draw_text(6,6+@dy*16,200+8,16,item.name,0) contents.font.size = 15 contents.font.name = "黑体" contents.font.bold = false contents.font.color = text_color(0) @dy += 1 end def draw_description if item.ds if item.ds != "" contents.font.color = text_color(21) contents.draw_text(6, 6+@dy*16, 200, 16, item.ds) contents.font.color = text_color(0) @dy += 1 end end end def draw_price str = item.price == 0 ? "无法出售" : "售价:#{item.price / 2}" contents.draw_text(6, 6+@dy*16, 200, 16, str) @dy += 1 end def draw_gem_type contents.draw_text(6, 6+@dy*16, 200, 16, "宝石", 0) @dy += 1 end def draw_gem_features item2 = $data_armors.compact.find {|t| t.name == item.name } contents.font.color = text_color(25) if item2 contents.draw_text(6, 6+@dy*16, 200, 16, "镶嵌武器") else contents.draw_text(6, 6+@dy*16, 200, 16, "镶嵌通用") end @dy += 1 item.features.each do |ft| str = feature_text(ft) next unless str contents.font.color = text_color(24) contents.draw_text(6, 6+@dy*16, 200, 16, str) @dy += 1 end if item2 contents.font.color = text_color(25) contents.draw_text(6, 6+@dy*16, 200, 16, "镶嵌防具") @dy += 1 item2.features.each do |ft| str = feature_text(ft) next unless str contents.font.color = text_color(24) contents.draw_text(6, 6+@dy*16, 200, 16, str) @dy += 1 end end contents.font.color = text_color(0) end def draw_item_type str = item.consumable ? "消耗品" : "非消耗品" contents.draw_text(6, 6+@dy*16, 200, 16, str, 0) @dy += 1 end def draw_item_effects contents.font.color = text_color(24) item.effects.each do |ft| str = "特性显示未定义" case ft.code when 11 str = "回复#{ft.value2.to_i}点#{Vocab::hp}" if ft.value2 != 0 str = "回复#{(ft.value1*100).to_i.to_s}%#{Vocab::hp}" if ft.value1 != 0 when 12 str = "回复#{ft.value2.to_i}点#{Vocab::mp}" if ft.value2 != 0 str = "回复#{(ft.value1*100).to_i.to_s}%#{Vocab::mp}" if ft.value1 != 0 when 13 str = "回复#{ft.value2.to_i}点#{Vocab::tp}" if ft.value2 != 0 str = "回复#{(ft.value1*100).to_i.to_s}%#{Vocab::tp}" if ft.value1 != 0 when 21 str = "附加 #{$data_states[ft.data_id].name}" when 22 str = "解除 #{$data_states[ft.data_id].name}" when 31 when 32 when 33 when 34 when 41 when 42 str = "#{Vocab::param(ft.data_id)}永久增加#{ft.value1.to_i}点" when 43 str = "永久习得 #{$data_skills[ft.data_id].name}" when 44 next end contents.draw_text(6, 6+@dy*16, 200, 16, str) @dy += 1 end contents.font.color = text_color(0) end def draw_equip_kind if item.is_a?(RPG::Armor) strA = Vocab::etype(item.etype_id) strB = Vocab::armor_types(item.atype_id) else bo = (item.features.select{|ft| ft.code == 54 }).any?{|ft| ft.data_id == 1} strA = bo ? "双手" : "单手" strB = Vocab::weapon_types(item.wtype_id) end contents.draw_text(6, 6+@dy*16, 200, 16, strA, 0) contents.draw_text(6, 6+@dy*16, 200-12, 16, strB, 2) @dy += 1 end def draw_equip_attack_type str = "" (item.features.select{|ft| ft.code == 31 }).each do |ft| ts = Vocab::elements(ft.data_id) str += (ts + " ") unless str.include?(ts) end if str != "" contents.font.color = text_color(24) contents.draw_text(6, 6+@dy*16, 200, 16, str) contents.font.color = text_color(0) @dy += 1 end end def draw_equip_params item.params.each_with_index do |param, index| if param != 0 str = sprintf("%+d #{Vocab::param(index)}",param) contents.draw_text(6, 6+@dy*16, 200, 16, str) @dy += 1 end end end def draw_equip_features contents.font.color = text_color(24) item.base_features.each do |ft| next if ft.code == 31 str = feature_text(ft) next unless str contents.draw_text(6, 6+@dy*16, 200, 16, str) @dy += 1 end contents.font.color = text_color(0) end def draw_equip_dongshu item.dongshu.each do |i| rect1 = Rect.new(6+1, 6+@dy*16+1, 14, 14) rect2 = Rect.new(120, 96, 8, 8) contents.stretch_blt(rect1, windowskin, rect2, 128) if i.item color = performance_color(i.item) contents.font.color = color bitmap = Cache.system("Iconset") rect2 = Rect.new(i.item.icon_index % 16 * 24, i.item.icon_index / 16 * 24, 24, 24) contents.stretch_blt(rect1, bitmap, rect2) else contents.font.color = text_color(0) contents.font.color.alpha = 160 end contents.draw_text(6+16, 6+@dy*16, 200, 16, i.name) @dy += 1 if i.item if item.is_armor? data = $data_armors.compact.find {|t| t.name == i.name } i = data if data end contents.font.color = text_color(24) i.features.each do |ft| next if ft.code == 31 str = feature_text(ft) #next unless str contents.draw_text(6+16, 6+@dy*16, 200, 16, str) @dy += 1 end end end contents.font.color = text_color(0) end def draw_end pf_color = performance_color(item) contents.clear_rect(0,10+@dy*16,200,600) contents.fill_rect(0,8+@dy*16,200,2,pf_color) contents.fill_rect(4,8+@dy*16,200-8,2,Color.new(0,0,64,160)) contents.fill_rect(2,10+@dy*16,200-4,2,pf_color) end def move_coordinate self.x = @window.drx self.y = @window.dry endy = self.y + 12+@dy*16 - @window.y self.y -= [endy - @window.height + 6, 0].max self.y = [self.y, 0].max end def feature_text(ft) str = "特性显示未定义" case ft.code when 11 str = (ft.value*100).to_i.to_s + "%" + Vocab::elements(ft.data_id) + "有效度" when 12 str = (ft.value*100).to_i.to_s + "%" + Vocab::param(ft.data_id) + "弱化有效度" when 13 str = (ft.value*100).to_i.to_s + "%" + $data_states[ft.data_id].name + "有效度" when 14 str = $data_states[ft.data_id].name + "状态无效化" when 21 #str = (ft.value*100).to_i.to_s + "% " + Vocab::param(ft.data_id) str = sprintf("%+d%%#{Vocab::param(ft.data_id)}", (ft.value*100-100).to_i) when 22 return if ft.value == 0 str = sprintf("%+d%%#{Vocab::xparam(ft.data_id)}", (ft.value*100).to_i) when 23 #str = (ft.value*100).to_i.to_s + "% " + Vocab::sparam(ft.data_id) str = sprintf("%+d%%#{Vocab::xparam(ft.data_id)}", (ft.value*100-100).to_i) when 31 str = "攻击属性附加 " + Vocab::elements(ft.data_id) when 32 str = "+" + (ft.value*100).to_i.to_s + "%附加" + $data_states[ft.data_id].name + "状态" when 33 str = sprintf("%+d 攻击速度", ft.value.to_i) when 34 str = sprintf("%+d 攻击回数", ft.value.to_i) when 41 when 42 when 43 str = "习得#{$data_skills[ft.data_id].name}" when 44 str = "禁用#{$data_skills[ft.data_id].name}" when 51 when 52 when 53 when 54 when 55 when 61 str = sprintf("%+d 行动回数", ft.value.to_i) when 62 when 63 when 64 str = Vocab.zparam(ft.data_id) end end end class Window_ItemList < Window_Selectable def include?(item) return unless item case @category when :item item.is_gem? || (item.is_item? && !item.key_item?) when :weapon item.is_weapon? when :armor item.is_armor? when :key_item !item.is_gem? && item.is_item? && item.key_item? else false end end def draw_item(index) item = @data[index] if item rect = item_rect(index) rect.width -= 4 draw_item_name(item, rect.x, rect.y)#, enable?(item)) draw_item_number(rect, item) end end def draw_item_number(rect, item) #draw_text(rect, sprintf(":%2d", item.number), 2) if item.is_allitem? draw_text(rect, sprintf(":%2d", item.number), 2) if item.is_item? end def update_equiphelp @equiphelp_window.set_item(self, item) end end class Window_EquipStatus < Window_Base def visible_line_number return 8 end end class Window_EquipSlot < Window_Selectable def visible_line_number 6 end def drx super + 92 end def update_equiphelp @equiphelp_window.set_item(self, item) end end class Window_EquipItem < Window_ItemList def include?(item) return true if item == nil return false unless item.is_equip? return false if @slot_id < 0 return false if item.etype_id != @actor.equip_slots[@slot_id] return @actor.equippable?(item) end end class Window_ShopBuy < Window_Selectable def window_width return 400 end def make_item_list @data = [] @price = {} @shop_goods.each do |goods| case goods[0] when 0; item = $data_items[goods[1]] when 1; item = $data_weapons[goods[1]] when 2; item = $data_armors[goods[1]] end if item if item.is_a?(RPG::Item) || item.is_gem? item = Game_UsableItem.new(item) else item = Game_EquipItem.new(item, false) end @data.push(item) @price[item] = goods[2] == 0 ? item.price : goods[3] end end end def enable?(item) item && price(item) <= @money end def update_equiphelp @equiphelp_window.set_item(self, item) end end class Window_ShopNumber < Window_Selectable def window_width return 400 end def dry y + item_y + line_height end def update_equiphelp @equiphelp_window.set_item(self, @item) end def figures return 3 end end class Window_ShopStatus < Window_Base def refresh contents.clear draw_possession(4, 0) return unless @item draw_equip_info(4, line_height * 2) if @item.is_equip? end end class Window_BattleLog < Window_Selectable def display_hp_damage(target, item) return if target.result.hp_damage == 0 && item && !item.damage.to_hp? if target.result.hp_damage > 0 target.perform_damage_effect end Sound.play_recovery if target.result.hp_damage < 0 add_text(target.result.hp_damage_text) wait if target.result.hp_drain > 0 add_text(target.result.hp_drain_text) wait end end end class Window_MakeCommand < Window_HorzCommand def initialize(window_width) @window_width = window_width super(0, 0) end def window_width @window_width end def col_max return 4 end def make_command_list add_command("强化装备", :a) add_command("镶嵌装备", :b) add_command("合成装备", :c, false) add_command("离开", :cancel) end def current_item_enabled? index == 2 ? false : true end end class Window_MakeA_ItemLise < Window_ItemList def initialize(x, y, width, height) super(x, y, width, height) end def col_max return 1 end def current_item_enabled? return false unless item item.lv_price <= $game_party.gold end def make_item_list @data = $game_party.equip_items end def status_window=(status_window) @status_window = status_window call_update_help end def update_help super @help_window.set_item(item) if @help_window @status_window.item = item if @status_window end def update_equiphelp @equiphelp_window.set_item(self, item) end end class Window_MakeA_Ok < Window_Command def initialize super(Graphics.width/2-60, Graphics.height/2) self.hide.deactivate end def window_width 120 end def col_max return 1 end def alignment return 1 end def make_command_list add_command("强化", :ok) add_command("取消", :cancel) end end class Window_MakeA_Status < Window_Base def initialize(x, y, width, height) super(x, y, width, height) @item = nil @page_index = 0 refresh end def refresh contents.clear return unless @item draw_A(4, 0) draw_B(4, 0) draw_C(4, 0) end def item=(item) @item = item refresh end def draw_A(x, y) change_color(system_color) draw_text(x, line_height*(y+0), 300, 24, "强化费用") change_color(normal_color) draw_text(x, line_height*(y+1), 300, 24, @item.lv_price, 2) end def draw_B(x, y) change_color(system_color) draw_text(x, line_height*(y+2), 300, 24, "强化材料") end def draw_C(x, y) change_color(system_color) draw_text(x, line_height*(y+6), 300, 24, "属性变化") end end class Window_MakeB_ItemLise < Window_ItemList def initialize(x, y, width, height) super(x, y, width, height) end def col_max return 1 end def current_item_enabled? true end def make_item_list(syt) if syt == "A" @data = $game_party.equip_items else @data = $game_party.gems end @data.push(nil) end def status_window=(status_window) @status_window = status_window call_update_help end def update_help super @help_window.set_item(item) if @help_window @status_window.item = item if @status_window end def refresh(syt) make_item_list(syt) create_contents draw_all_items select(0) end def clear @data = [] select(-1) create_contents draw_all_items end def update_equiphelp @equiphelp_window.set_item(self, item) end end class Window_MakeB_Ok < Window_Selectable def initialize(x, y, width, height) super(x, y, width, height) self.hide.deactivate @item = nil end def window_width end def item_max item ? 1 + [item.dongshu.size+1, 5].min : 1 end def refresh contents.clear change_color(system_color) y = 0 draw_text(4, y, 92, line_height, "装备") if item draw_item_name(item, 64, 0) item.dongshu.each{|d| y += 1 change_color(system_color) draw_text(4, y*line_height, 92, line_height, "插槽") change_color(normal_color) draw_item_name(d.item, 64, y*line_height) #dest_rect = Rect.new(64, (1+i)*line_height+4, 240, 16) #src_bitmap = self.windowskin #src_rect = Rect.new(120,96+8,8,8) #contents.stretch_blt(dest_rect, src_bitmap, src_rect, 128) #change_color(normal_color) #draw_text(64, (1+i)*line_height, 240, line_height, "不可更改",1) #draw_text(64, (1+i)*line_height, 92, line_height, d.name) } if item.dongshu.size < 5 y += 1 change_color(system_color) draw_text(4, y*line_height, 92, line_height, "打孔") change_color(normal_color) draw_text(64+24, y*line_height, 240, line_height, "花费: #{item.dakongg}") end y += 2 gold = 50 + item.base_performance * 5 change_color(normal_color) draw_text(0, y*line_height, 240, line_height, "镶嵌宝石花费: #{gold}") y += 1 draw_text(0, y*line_height, 240, line_height, "取出宝石花费: #{gold*2}") else change_color(normal_color, false) draw_text(64, 0,142, line_height, "请选择一件装备") end end def item @item end def item=(item) @item = item refresh end def kind index == 0 ? 0 : index == item_max-1 && item.dongshu.size != 5 ? 2 : 1 end def eq_gem(ritem) if eitem && ritem return if eitem.kind_id == ritem.kind_id end gold = 50 + item.base_performance * 5 if ritem if eitem $game_party.gain_item(eitem.id) $game_party.lose_gold(gold * 2) end item.dongshu[index-1].add_item(ritem.id) $game_party.lose_gold(50 + item.base_performance * 5) $game_party.lose_item(ritem.id) else if eitem $game_party.lose_gold(gold * 2) $game_party.gain_item(eitem.id) item.dongshu[index-1].unadd_item end end refresh end def add_ds $game_party.lose_gold(item.dakongg) item.add_ds refresh end def current_item_enabled? case kind when 0 true when 1 50 + item.base_performance * 5 <= $game_party.gold when 2 item.dakongg <= $game_party.gold end end def eitem case kind when 0 item when 1 item.dongshu[index-1].item if item end end def update_equiphelp @equiphelp_window.set_item(self, eitem) end end class Window_MakeB_Status < Window_Base def initialize(x, y, width, height) super(x, y, width, height) @item = nil @page_index = 0 refresh end def refresh contents.clear return unless @item #draw_A(4, 0) end def item=(item) @item = item #refresh end def draw_A(x, y) @item.dongshu.each_with_index{|item,index| contents.fill_rect(x+1,line_height * (y+5+index)+1,22,22, Color.new(128,128,128)) } end end =begin 合成解释 1.种类保留 ├不同部位的合成 => 合成失败,获得材料 └同部位的合成 => 保留高等级的一件,特性按以下方式计算 └有配方的情况按配方,特性按以下方式计算 2.特性保留 ├强化等级 => 高强化等级 + 低强化等级的高强化等级的一半每1 │ max = [a.lv, b.lv].max │ min = [a.lv, b.lv].min │ lv = max + (min/(max/2)).ceil │ ├前缀 => 相加, 超2个的情况随机保留最大等级2个 └嵌孔数 => 保留嵌孔少的一个 └宝石 => 随机保留最大等级 =end class Scene_MenuBase < Scene_Base def create_help_window @help_window = Window_Help.new @help_window.viewport = @viewport end def create_equiphelp_window @equiphelp_window = Window_EquipHelp.new @equiphelp_window.viewport = @viewport @equiphelp_window.z += 1000 end end class Scene_Item < Scene_ItemBase def start super create_help_window create_equiphelp_window create_category_window create_item_window end def create_category_window @category_window = Window_ItemCategory.new @category_window.viewport = @viewport @category_window.help_window = @help_window @category_window.equiphelp_window = @equiphelp_window @category_window.y = @help_window.height @category_window.set_handler(:ok, method(:on_category_ok)) @category_window.set_handler(:cancel, method(:return_scene)) end def create_item_window wy = @category_window.y + @category_window.height wh = Graphics.height - wy @item_window = Window_ItemList.new(0, wy, Graphics.width, wh) @item_window.viewport = @viewport @item_window.help_window = @help_window @item_window.equiphelp_window = @equiphelp_window @item_window.set_handler(:ok, method(:on_item_ok)) @item_window.set_handler(:cancel, method(:on_item_cancel)) @category_window.item_window = @item_window end end class Scene_Equip < Scene_MenuBase def start super create_help_window create_equiphelp_window create_status_window create_command_window create_slot_window create_item_window end def create_command_window wx = @status_window.width wy = @help_window.height ww = Graphics.width - @status_window.width @command_window = Window_EquipCommand.new(wx, wy, ww) @command_window.viewport = @viewport @command_window.help_window = @help_window @command_window.equiphelp_window = @equiphelp_window @command_window.set_handler(:equip, method(:command_equip)) @command_window.set_handler(:optimize, method(:command_optimize)) @command_window.set_handler(:clear, method(:command_clear)) @command_window.set_handler(:cancel, method(:return_scene)) @command_window.set_handler(:pagedown, method(:next_actor)) @command_window.set_handler(:pageup, method(:prev_actor)) end def create_item_window wx = 0 wy = @slot_window.y + @slot_window.height ww = Graphics.width wh = Graphics.height - wy @item_window = Window_EquipItem.new(wx, wy, ww, wh) @item_window.viewport = @viewport @item_window.help_window = @help_window @item_window.equiphelp_window = @equiphelp_window @item_window.status_window = @status_window @item_window.actor = @actor @item_window.set_handler(:ok, method(:on_item_ok)) @item_window.set_handler(:cancel, method(:on_item_cancel)) @slot_window.item_window = @item_window end def create_slot_window wx = @status_window.width wy = @command_window.y + @command_window.height ww = Graphics.width - @status_window.width @slot_window = Window_EquipSlot.new(wx, wy, ww) @slot_window.viewport = @viewport @slot_window.help_window = @help_window @slot_window.equiphelp_window = @equiphelp_window @slot_window.status_window = @status_window @slot_window.actor = @actor @slot_window.set_handler(:ok, method(:on_slot_ok)) @slot_window.set_handler(:cancel, method(:on_slot_cancel)) end end class Scene_MakeEquip < Scene_MenuBase def start super create_help_window create_equiphelp_window create_gold_window create_command_window create_dummy_window create_A_window create_B_window end def create_gold_window @gold_window = Window_Gold.new @gold_window.viewport = @viewport @gold_window.x = Graphics.width - @gold_window.width @gold_window.y = @help_window.height end def create_command_window @command_window = Window_MakeCommand.new(@gold_window.x) @command_window.viewport = @viewport @command_window.y = @help_window.height @command_window.equiphelp_window = @equiphelp_window @command_window.set_handler(:a, method(:command_A)) @command_window.set_handler(:b, method(:command_B)) @command_window.set_handler(:c, method(:command_C)) @command_window.set_handler(:cancel, method(:return_scene)) end def create_dummy_window wy = @command_window.y + @command_window.height wh = Graphics.height - wy @dummy_window = Window_Base.new(0, wy, Graphics.width, wh) @dummy_window.viewport = @viewport end def create_A_window @makeA_status_window = Window_MakeA_Status.new(400, 120, 400, 480) @makeA_status_window.viewport = @viewport @makeA_status_window.hide @makeA_itemlist_window = Window_MakeA_ItemLise.new(0, 120, 400, 480) @makeA_itemlist_window.viewport = @viewport @makeA_itemlist_window.help_window = @help_window @makeA_itemlist_window.equiphelp_window = @equiphelp_window @makeA_itemlist_window.status_window = @makeA_status_window @makeA_itemlist_window.hide @makeA_itemlist_window.set_handler(:ok, method(:on_A_ok)) @makeA_itemlist_window.set_handler(:cancel, method(:on_A_cancel)) @makeA_ok_window = Window_MakeA_Ok.new @makeA_ok_window.viewport = @viewport @makeA_ok_window.set_handler(:ok, method(:on_A_ok_ok)) @makeA_ok_window.set_handler(:cancel, method(:on_A_ok_cancel)) end def create_B_window @makeB_status_window = Window_MakeB_Status.new(800, 120, 400, 480) @makeB_status_window.viewport = @viewport @makeB_status_window.hide @makeB_itemlist_window = Window_MakeB_ItemLise.new(400, 120, 400, 480) @makeB_itemlist_window.viewport = @viewport @makeB_itemlist_window.help_window = @help_window @makeB_itemlist_window.equiphelp_window = @equiphelp_window @makeB_itemlist_window.status_window = @makeB_status_window @makeB_itemlist_window.hide @makeB_itemlist_window.set_handler(:ok, method(:on_B_ok)) @makeB_itemlist_window.set_handler(:cancel, method(:on_B_cancel)) @makeB_ok_window = Window_MakeB_Ok.new(0, 120, 400, 480) @makeB_ok_window.viewport = @viewport @makeB_ok_window.equiphelp_window = @equiphelp_window @makeB_ok_window.set_handler(:ok, method(:on_B_ok_ok)) @makeB_ok_window.set_handler(:cancel, method(:on_B_ok_cancel)) end def command_A @dummy_window.hide @makeA_itemlist_window.show.activate @makeA_itemlist_window.refresh @makeA_itemlist_window.select(0) @makeA_status_window.show end def command_B @dummy_window.hide @makeB_itemlist_window.show #@makeB_itemlist_window.refresh #@makeA_itemlist_window.select(0) #@makeB_status_window.show @makeB_ok_window.show.activate @makeB_ok_window.refresh @makeB_ok_window.select(0) end def command_C @dummy_window.hide @category_window.show.activate @sell_window.show @sell_window.unselect @sell_window.refresh end def on_A_ok @item = @makeA_itemlist_window.item @makeA_itemlist_window.deactivate @makeA_ok_window.show.activate end def on_A_cancel @command_window.activate @dummy_window.show @makeA_itemlist_window.hide @makeA_status_window.hide @makeA_status_window.item = nil @help_window.clear @equiphelp_window.clear end def on_A_ok_ok $game_party.lose_gold(@item.lv_price) @item.lv_up @makeA_itemlist_window.activate @makeA_itemlist_window.refresh @makeA_ok_window.hide @gold_window.refresh end def on_A_ok_cancel @makeA_itemlist_window.activate @makeA_ok_window.hide end def on_B_ok case @makeB_ok_window.kind when 0 @makeB_ok_window.item = @makeB_itemlist_window.item when 1 @makeB_ok_window.eq_gem(@makeB_itemlist_window.item) @gold_window.refresh when 2 end on_B_cancel end def on_B_cancel @makeB_ok_window.activate @makeB_itemlist_window.clear @help_window.clear #@equiphelp_window.clear end def on_B_ok_ok case @makeB_ok_window.kind when 0 @makeB_ok_window.deactivate @makeB_itemlist_window.activate @makeB_itemlist_window.refresh("A") when 1 @makeB_ok_window.deactivate @makeB_itemlist_window.activate @makeB_itemlist_window.refresh("B") when 2 @makeB_ok_window.add_ds @makeB_ok_window.activate end @gold_window.refresh end def on_B_ok_cancel @command_window.activate @dummy_window.show @makeB_ok_window.item = nil @makeB_ok_window.hide @makeB_itemlist_window.hide @help_window.clear #@equiphelp_window.clear end def money @gold_window.value end def currency_unit @gold_window.currency_unit end def buying_price @buy_window.price(@item) end def selling_price @item.price / 2 end end class Scene_Shop < Scene_MenuBase def start super create_help_window create_equiphelp_window create_gold_window create_command_window create_dummy_window create_number_window create_status_window create_buy_window create_category_window create_sell_window end def create_command_window @command_window = Window_ShopCommand.new(@gold_window.x, @purchase_only) @command_window.viewport = @viewport @command_window.y = @help_window.height @command_window.equiphelp_window = @equiphelp_window @command_window.set_handler(:buy, method(:command_buy)) @command_window.set_handler(:sell, method(:command_sell)) @command_window.set_handler(:cancel, method(:return_scene)) end def create_number_window wy = @dummy_window.y wh = @dummy_window.height @number_window = Window_ShopNumber.new(0, wy, wh) @number_window.viewport = @viewport @number_window.equiphelp_window = @equiphelp_window @number_window.hide @number_window.set_handler(:ok, method(:on_number_ok)) @number_window.set_handler(:cancel, method(:on_number_cancel)) end def create_buy_window wy = @dummy_window.y wh = @dummy_window.height @buy_window = Window_ShopBuy.new(0, wy, wh, @goods) @buy_window.viewport = @viewport @buy_window.help_window = @help_window @buy_window.equiphelp_window = @equiphelp_window @buy_window.status_window = @status_window @buy_window.hide @buy_window.set_handler(:ok, method(:on_buy_ok)) @buy_window.set_handler(:cancel, method(:on_buy_cancel)) end def create_category_window @category_window = Window_ItemCategory.new @category_window.viewport = @viewport @category_window.help_window = @help_window @category_window.equiphelp_window = @equiphelp_window @category_window.y = @dummy_window.y @category_window.hide.deactivate @category_window.set_handler(:ok, method(:on_category_ok)) @category_window.set_handler(:cancel, method(:on_category_cancel)) end def create_sell_window wy = @category_window.y + @category_window.height wh = Graphics.height - wy @sell_window = Window_ShopSell.new(0, wy, Graphics.width, wh) @sell_window.viewport = @viewport @sell_window.help_window = @help_window @sell_window.equiphelp_window = @equiphelp_window @sell_window.hide @sell_window.set_handler(:ok, method(:on_sell_ok)) @sell_window.set_handler(:cancel, method(:on_sell_cancel)) @category_window.item_window = @sell_window end def del_on_buy_cancel @command_window.activate @dummy_window.show @buy_window.hide @status_window.hide @status_window.item = nil @help_window.clear @equiphelp_window.clear end def del_on_sell_cancel @sell_window.unselect @category_window.activate @status_window.item = nil @help_window.clear @equiphelp_window.clear end def do_buy(number) $game_party.lose_gold(number * buying_price) $game_party.add_shopitem(@item, number) end def do_sell(number) $game_party.gain_gold(number * selling_price) $game_party.lose_item(@item.id, number) end def max_buy buying_price == 0 ? 99 : [99, money / buying_price].min end def max_sell @item.is_item? ? $game_party.item_number(@item) : 1 end end class Scene_Battle < Scene_Base def on_item_ok @item = @item_window.item BattleManager.actor.input.set_item(@item) if !@item.need_selection? @item_window.hide next_command elsif @item.for_opponent? select_enemy_selection else select_actor_selection end $game_party.last_item.object = @item end end
class Array
def data
@data.to_s
end
end
module Options
#
#
#
#RANK 0 1 2 3 4 5 6 7 8 9 #特性
f = [[ 0, 3, 10, 15, 30, 40, 70, 90,150,190], #白/无
[ 10, 11, 15, 20, 33, 43, 72, 92,152,192], #绿
[ 30, 31, 33, 35, 40, 50, 77, 97,156,196], #蓝
[ 70, 71, 73, 74, 79, 81, 90,110,167,207], #紫
[150,151,153,154,158,161,169,174,190,230]] #橙
a = Table.new(10,5)
10.times{|x| 5.times{|y| a[x,y] = f[y][x] }}
#<=以上内容请不要修改=======================================================>
S初始评价 = a
S使用耐久 = false
S每级强化评价 = 1
S宝石评价_白 = 1
S宝石评价_绿 = 2
S宝石评价_蓝 = 4
S宝石评价_紫 = 8
S宝石评价_橙 = 16
S品质_白 = 0
S品质_绿 = 10
S品质_蓝 = 30
S品质_紫 = 70
S品质_橙 = 150
S品质掉率_绿 = 0 #315
S品质掉率_蓝 = 0 #63
S品质掉率_紫 = 0 #9
S品质掉率_橙 = 100000 #1
S嵌孔掉率_1 = 315
S嵌孔掉率_2 = 100
S嵌孔掉率_3 = 63
S嵌孔掉率_4 = 18
S嵌孔掉率_5 = 4
#<=以下内容请不要修改=======================================================>
def self.dataA
S初始评价
end
def self.dataB
S每级强化评价
end
def self.dataC
[S品质_白, S品质_绿, S品质_蓝, S品质_紫, S品质_橙]
end
def self.dataD
[S品质掉率_橙, S品质掉率_紫, S品质掉率_蓝, S品质掉率_绿]
end
def self.dataE
[S嵌孔掉率_5, S嵌孔掉率_4, S嵌孔掉率_3, S嵌孔掉率_2, S嵌孔掉率_1]
end
def self.dataF
[S宝石评价_白, S宝石评价_绿, S宝石评价_蓝, S宝石评价_紫, S宝石评价_橙]
end
def self.cf(a, b)
self.dataA[a, b]
end
def self.lf(e=0)
self.dataD.each_with_index do |r, i|
return 4-i if (r * ( r ** -0.05 + 0.4 ) ** e).to_i >= rand(1000)
end
return 0
end
def self.qf(e=0)
self.dataE.each_with_index do |r, i|
return 5-i if (r * ( r ** -0.05 + 0.4 ) ** e).to_i >= rand(1000)
end
return 0
end
end
module RPG
class BaseItem
def is_maho?
note.include?("<前缀>")
end
def is_item?
self.is_a?(RPG::Item) && is_gem?
end
def is_gem?
note.include?("<宝石>")
end
def rank
lv = note[/<品质\s*(.*)>/, 1].to_s
["白","绿","蓝","紫","橙", ""].index(lv) % 5 #"白","绿","蓝","紫","橙", "" %5
end
def rank_lv
note[/<RANK\s*(\d*)>/, 1].to_i
end
def features
@features + features_note
end
def kind_id
self.class.to_s + self.id.to_s
end
def features_note
note.scan(/<特性 (.*) (.*)>/).inject([]) do |r, i|
case i[0]
when "吸收"
r.push RPG::BaseItem::Feature.new(22,10,(i[1].to_i)/100.0)
end
end
end
end
end
module Vocab
def self.xparam(id)
["命中率","回避率","会心率","会心回避率","魔法回避率","魔法反射率","反击率","HP再生率","MP再生率","TP再生率","生命吸收"][id]
end
def self.sparam(id)
["受到攻击的几率","防御效果率","恢复效果率","药物知识","MP消费率","TP消耗率","物理伤害率","魔法伤害率","针板伤害率","经验获得率"][id]
end
def self.zparam(id)
["遇敌机率减半","随机遇敌无效","偷袭无效","先发攻击率提升","获得2倍现金","物品获得机率翻倍"][id]
end
def self.elements(id)
$data_system.elements[id]
end
def self.weapon_types(id)
$data_system.weapon_types[id]
end
def self.armor_types(id)
$data_system.armor_types[id]
end
end
module DataManager
def self.create_game_objects
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_timer = Game_Timer.new
$game_message = Game_Message.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
$game_items = Game_Items.new
end
def self.make_save_contents
contents = {}
contents[:system] = $game_system
contents[:timer] = $game_timer
contents[:message] = $game_message
contents[:switches] = $game_switches
contents[:variables] = $game_variables
contents[:self_switches] = $game_self_switches
contents[:actors] = $game_actors
contents[:party] = $game_party
contents[:troop] = $game_troop
contents[:map] = $game_map
contents[:player] = $game_player
contents[:items] = $game_items
contents
end
def self.extract_save_contents(contents)
$game_system = contents[:system]
$game_timer = contents[:timer]
$game_message = contents[:message]
$game_switches = contents[:switches]
$game_variables = contents[:variables]
$game_self_switches = contents[:self_switches]
$game_actors = contents[:actors]
$game_party = contents[:party]
$game_troop = contents[:troop]
$game_map = contents[:map]
$game_player = contents[:player]
$game_items = contents[:items]
end
end
module BattleManager
def self.gain_drop_items
$game_troop.make_drop_items.each do |item|
$game_party.add_item(item, 1, true)
$game_message.add(sprintf(Vocab::ObtainItem, item.name))
end
wait_for_message
end
end
class Game_Items < Array
def idForNewItem(item, rand=false)
if item.is_a?(RPG::Item) || item.is_gem?
item = Game_UsableItem.new(item)
else
item = Game_EquipItem.new(item, rand)
end
self.push item
return self.size - 1
end
def items
self.collect {|item| item.is_item? }
end
def gems
self.collect {|item| item.is_gem? }
end
def weapons
self.collect {|item| item.is_weapon? }
end
def armors
self.collect {|item| item.is_armor? }
end
end
class Game_BaoItem
def initialize(id = nil)
@id = id
end
def add_item(id)
@id = id
end
def unadd_item
@id = nil
end
def name
item ? item.name : "空插槽"
end
def rank
item ? item.rank : 0
end
def features
item.features if item
end
def item
$game_items[@id] if @id
end
end
class Game_Item
def initialize(item)
@item = item
@id = $game_items.size
end
def is_a?(kind); item.is_a?(kind); end
def is_item?; item.is_a?(RPG::Item) || is_gem?; end
def is_gem?; item.is_gem?; end
def is_weapon?; item.is_a?(RPG::Weapon) && !is_gem?; end
def is_armor?; item.is_a?(RPG::Armor); end
def is_equip?; is_weapon? || is_armor?; end
def item
@item
end
def id
@id
end
def id=(id)
@id = id
end
def rank
item.rank
end
def item_id
item.id
end
def kind_id
item.class.to_s + item.id.to_s
end
def note
item.note
end
def price
item.price
end
def icon_index
item.icon_index
end
def description
item.description
end
def features
item.features
end
end
class Game_UsableItem < Game_Item
def initialize(item)
super(item)
@number = 0
end
def number
@number
end
def number=(n)
@number = n
end
def performance
Options.dataC[item.rank]
end
def name; item.name; end #物品名
def itype_id; item.itype_id; end #贵重品值
def scope; item.scope; end #使用范围
def occasion; item.occasion; end #使用时刻
def effects; item.effects; end #使用效果
def damage; item.damage; end #使用伤害
def repeats; item.repeats; end #连续回数
def success_rate; item.success_rate; end #成功率
def tp_gain; item.tp_gain; end #获得TP
def animation_id; item.animation_id; end #动画编号
def speed; item.speed; end #速度補正
def key_item?; itype_id == 2; end #贵重品判定
def consumable; item.consumable; end #消耗判定
def for_opponent?; [1, 2, 3, 4, 5, 6].include?(scope); end
def for_friend?; [7, 8, 9, 10, 11].include?(scope); end
def for_dead_friend?; [9, 10].include?(scope); end
def for_user?; scope == 11; end
def for_one?; [1, 3, 7, 9, 11].include?(scope); end
def for_random?; [3, 4, 5, 6].include?(scope); end
def number_of_targets; for_random? ? scope - 2 : 0; end
def for_all?; [2, 8, 10].include?(scope); end
def need_selection?; [1, 7, 9].include?(scope); end
def battle_ok?; [0, 1].include?(occasion); end
def menu_ok?; [0, 2].include?(occasion); end
def certain?; @hit_type == 0; end #技能用?
def physical?; @hit_type == 1; end #技能用?
def magical?; @hit_type == 2; end #技能用?
end
class Game_EquipItem < Game_Item
def initialize(item, rand = true)
super(item)
@lv = rand ? make_lv : 0
@params = make_params(rand)
@prefix = 0
@prefix_lv = 0
@dongshu = []
make_prefix if rand
make_dongshu if rand
make_naijiu(rand)
end
def dongshu
@dongshu
end
def wtype_id; item.wtype_id; end #武器类型
def atype_id; item.atype_id; end #防具类型
def etype_id; item.etype_id; end #装备部位
def animation_id; item.animation_id; end
def lv; @lv; end
def naijiu; @naijiu; end
def naijiu_max; @naijiu_max; end
def lv_up
@lv += 1
end
def make_naijiu(rand)
@naijiu_max = 100
@naijiu = rand ? rand(51)+50 : @naijiu_max
end
def make_dongshu
n = Options.qf(0)
n.times{add_ds}
end
def add_ds
@dongshu.push Game_BaoItem.new
end
def make_lv
u = 0
max_lv = 5 + 0 #提高0 可提高强化等级
max_le = 200 + 0 #提高0 可提高强化概率
max_lv.times{
return u if rand(max_le) < 100
u += 1
}
u
end
def make_params(rand)
return item.params unless rand
item.params.collect do |param|
num = ([(param).abs, 1].max**-0.5*param).truncate
ts = param - num + rand(num*2+1)
ts == 0 ? param : ts
end
end
def make_prefix
@prefix_lv = Options.lf(0)
return if @prefix_lv == 0
items = pzqz(@prefix_lv)
@prefix = items[rand(items.size)].id
end
def features
base_features + ds_features
end
def base_features
item.features + prefix_item_features
end
def ds_features
result = []
@dongshu.each {|item|
if item.item
features = item.features
if is_armor?
data = $data_armors.compact.find {|i| i.name == item.name }
features = data.features if data
end
result += features
end
}
result
end
def prefix_item_features
@prefix > 0 ? prefix_item.features : []
end
def prefix_item
equip = $data_weapons[@prefix]
if is_armor?
data = $data_armors.compact.find {|i| i.name == equip.name }
equip = data if data
end
equip
end
def allqz
$data_weapons.select {|item| item ? item.is_maho? : false}
end
def pzqz(n)
n = 5 #TEST
allqz.select{|item| item.rank == n}
end
def ds
prefix_item.description if @prefix > 0
end
def name
tn = ""
tn = tn + prefix_item.name + "的" if @prefix > 0
tn += item.name
tn += (@lv == 0 ? "" : sprintf("%+d", @lv))
tn
end
def price
all_lv_price = (@lv * @lv + @lv)*(50+base_performance*2)/2
super + all_lv_price + 2 ** @prefix_lv * 1000
end
def params
r = 0.0
@params.each_with_index do |e, i|
if e > 0
case i
when 0
r += 0.8
when 1
r += 0.9
else
r += 1
end
end
end
#g = @params.inject(0) {|r, i| i > 0 ? r + 1 : r }
r = (r == 0 ? 0 : r ** -0.6 / 2.0)
8.times.collect do |i|
pa = @params[i]
case i
when 0
(pa + @lv * pa * [pa.abs, 1].max ** -0.5 * r * (pa < 0 ? 0.2 : 2)).round
when 1
(pa + @lv * pa * [pa.abs, 1].max ** -0.5 * r * (pa < 0 ? 0.12 : 1.2)).round
else
(pa + @lv * pa * [pa.abs, 1].max ** -0.5 * r * (pa < 0 ? 0.1 : 1)).round
end
end
#@params.collect do |param|
#end
end
def rank
case performance
when 0...10 ; 0
when 10...30 ; 1
when 30...70 ; 2
when 70...150 ; 3
when 150...310 ; 4
when 310...999 ; 5
end
end
def dakongg
2 ** dongshu.size * (100+base_performance*10)
end
def lv_price
(@lv + 1) * (100+base_performance)
end
def base_performance
Options.cf(item.rank_lv, @prefix_lv)
end
def ds_performance
@dongshu.inject(0) {|r, i| r + Options.dataF[i.rank] }
end
def performance
@lv + base_performance + ds_performance
end
end
class Game_Party < Game_Unit
def initialize
super
@gold = 0
@steps = 0
@last_item = Game_BaseItem.new
@menu_actor_id = 0
@target_actor_id = 0
@actors = []
@items = []
end
def consume_item(item)
lose_item(item.id, 1) if item.is_a?(RPG::Item) && item.consumable
end
def item_number(item)
return unless item
n = 0
all_items.each do |i|
if i.kind_id == item.kind_id
n += i.is_item? ? i.number : 1
end
end
n
end
def setup_battle_test_items
$data_items.each do |item|
add_item(item, max_item_number(item)) if item && !item.name.empty?
end
end
def has_item?(item, include_equip = false)
return true if item_number(item) > 0
#return include_equip ? members_equip_include?(item) : false
end
def members_equip_include?(item)
msgbox "判定队伍成员是否装备着指定物品"
members.any? {|actor| actor.equips.any?{|it|it.item_id == item.item_id }}
end
def add_item(item, amount, rand = true)
return unless item
return if amount == 0
return unadd_item(item, amount) if amount < 0
if item.class == RPG::Item
gain_item($game_items.idForNewItem(item), amount)
else
amount.times{ gain_item($game_items.idForNewItem(item, rand)) }
end
$game_map.need_refresh = true
end
def unadd_item(item, amount)
amount.abs.times do
all_items.each do |i|
if i.kind_id == item.kind_id
lose_item(i.id, 1)
break
end
end
end
$game_map.need_refresh = true
end
def add_shopitem(item, number)
if item.is_item?
$game_items.push item
gain_item($game_items.size-1, number)
else
id = item.item_id
item = item.is_weapon? ? $data_weapons[id] : $data_armors[id]
add_item(item, number, false)
end
end
def gain_item(id, n=1)
return unless id
if $game_items[id].is_item?
items.each do |item|
if $game_items[id].kind_id == item.kind_id
maxn = [item.number + n, 99].min - item.number
n -= maxn
item.number += maxn
end
end
if n > 0
$game_items[id].number = n
@items.push(id)
end
else
@items.push(id)
end
all_items_sort
end
def lose_item(id, n=1)
return unless id
if $game_items[id].is_item?
items.reverse_each do |item|
if $game_items[id].kind_id == item.kind_id
maxn = [item.number, n].min
item.number -= maxn
n -= maxn
@items.delete(item.id) if item.number == 0
end
end
else
@items.delete(id)
end
end
def all_items_sort
@items.sort!{|a, b|$game_items[a].item_id - $game_items[b].item_id}
end
def items
@items.collect {|id| $game_items[id] }.select {|item| item.is_item? }
end
def gems
@items.collect {|id| $game_items[id] }.select {|item| item.is_gem? }
end
def weapons
@items.collect {|id| $game_items[id] }.select {|item| item.is_weapon? }
end
def armors
@items.collect {|id| $game_items[id] }.select {|item| item.is_armor? }
end
end
class Game_Battler < Game_BattlerBase
def make_damage_value(user, item)
value = item.damage.eval(user, self, $game_variables)
value *= item_element_rate(user, item)
value *= pdr if item.physical?
value *= mdr if item.magical?
value *= rec if item.damage.recover?
value = apply_critical(value) if @result.critical
value = apply_variance(value, item.damage.variance)
value = apply_guard(value)
@result.make_damage(value.to_i, user, item)
end
end
class Game_Actor < Game_Battler
def init_equips(equips)
@equips = Array.new(equip_slots.size)
equips.each_with_index do |item_id, i|
next if item_id == 0
etype_id = equip_slots[i]
item = etype_id == 0 ? $data_weapons[item_id] : $data_armors[item_id]
@equips[i] = $game_items.idForNewItem(item, false)
end
refresh
end
def param_rate(param_id)
features_sum_pi(FEATURE_PARAM, param_id)
end
def sparam(sparam_id)
features_sum_pi(FEATURE_SPARAM, sparam_id)
end
def features_sum_pi(code, id)
r_features_pi(code, id) * r_features_sum(code, id)
end
def r_features_pi(code, id)
rsum_features_with_id(code, id).inject(1.0) {|r, ft| r += (ft.value-1) }
end
def r_features_sum(code, id)
rpi_features_with_id(code, id).inject(1.0) {|r, ft| r *= ft.value }
end
def rsum_features_with_id(code, id)
rsum_all_features.select {|ft| ft.code == code && ft.data_id == id }
end
def rpi_features_with_id(code, id)
rpi_all_features.select {|ft| ft.code == code && ft.data_id == id }
end
def rsum_all_features
rsum_feature_objects.inject([]) {|r, obj| r + obj.features }
end
def rpi_all_features
rpi_feature_objects.inject([]) {|r, obj| r + obj.features }
end
def rsum_feature_objects
[actor] + [self.class] + equips.compact
end
def rpi_feature_objects
states
end
def equip_slots
return [0,0,2,3,4,4] if dual_wield?
return [0,1,2,3,4,4]
end
def weapons
@equips.select {|i| i ? $game_items[i].is_weapon? : false }.collect {|i| $game_items[i] }
end
def armors
@equips.select {|i| i ? $game_items[i].is_armor? : false }.collect {|i| $game_items[i] }
end
def equips
@equips.collect {|i| i ? $game_items[i] : nil }
end
def equip_change_ok?(slot_id)
return true
return false if equip_type_fixed?(equip_slots[slot_id])
return false if equip_type_sealed?(equip_slots[slot_id])
return true
end
def release_unequippable_items(item_gain = true)
equips.each_with_index do |item, i|
next if item
if !equippable?(item) || item.etype_id != equip_slots[i]
trade_item_with_party(nil, @equips[i]) if item_gain
end
end
end
def clear_equipments
equip_slots.size.times do |i|
change_equip(i, nil) if equip_change_ok?(i)
end
end
def change_equip(slot_id, item)
return unless trade_item_with_party(item, equips[slot_id])
return if item && equip_slots[slot_id] != item.etype_id
@equips[slot_id] = item ? item.id : nil
refresh
end
def force_change_equip(slot_id, item)
@equips[slot_id] = item ? item.id : nil
release_unequippable_items(false)
refresh
end
def trade_item_with_party(new_item, old_item)
return false if new_item && !$game_party.has_item?(new_item)
$game_party.gain_item(old_item ? old_item.id : nil)
$game_party.lose_item(new_item ? new_item.id : nil)
return true
end
def change_equip_by_id(slot_id, item_id)
msgbox "变更装备(用 ID 指定)"
if equip_slots[slot_id] == 0
change_equip(slot_id, item_id)
else
change_equip(slot_id, item_id)
end
end
end
class Game_Action
def clear
@item = nil
@target_index = -1
@value = 0
end
def set_skill(skill_id)
@item = $data_skills[skill_id]
self
end
def set_item(item)
@item = item
self
end
def item
@item
end
end
class Game_ActionResult
def make_damage(value, user, item)
@critical = false if value == 0
@hp_damage = value if item.damage.to_hp?
@mp_damage = value if item.damage.to_mp?
@mp_damage = [@battler.mp, @mp_damage].min
@hp_drain = make_drain_hp(user, item)
@mp_drain = @mp_damage if item.damage.drain?
@hp_drain = [@battler.hp, @hp_drain].min
@success = true if item.damage.to_hp? || @mp_damage != 0
end
def make_drain_hp(user, item)
hp_damage = (@hp_damage * @battler.element_rate(2)).to_i
return hp_damage if item.damage.drain?
return (hp_damage * [user.xparam(10), 1].min).to_i if user.xparam(10) > 0
return 0
end
alias celica_hp_damage_text hp_damage_text
def hp_damage_text
celica_hp_damage_text
if @hp_damage > 0
fmt = @battler.actor? ? Vocab::ActorDamage : Vocab::EnemyDamage
sprintf(fmt, @battler.name, @hp_damage)
elsif @hp_damage < 0
fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
sprintf(fmt, @battler.name, Vocab::hp, -hp_damage)
else
fmt = @battler.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
sprintf(fmt, @battler.name)
end
end
def hp_drain_text
fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
sprintf("吸收了%s点%s", @hp_drain, Vocab::hp)
end
end
class Game_Interpreter
def command_126
value = operate_value(@params[1], @params[2], @params[3])
$game_party.add_item($data_items[@params[0]], value)
end
def command_127
value = operate_value(@params[1], @params[2], @params[3])
$game_party.add_item($data_weapons[@params[0]], value, true)
end
def command_128
value = operate_value(@params[1], @params[2], @params[3])
$game_party.add_item($data_armors[@params[0]], value, true)
end
def 开启强化画面
SceneManager.call(Scene_MakeEquip)
end
end
class Window_Base < Window
def draw_item_name(item, x, y, enabled = true, width = 300)
return unless item
draw_icon(item.icon_index, x, y, enabled)
change_color(performance_color(item), enabled)
draw_text(x + 24, y, width, line_height, item.name)
end
def performance_color(item)
return text_color(0) if item.is_a?(RPG::Skill)
pf = item.performance
if pf < 10
performance_rank(0)
elsif pf < 30
performance_rank(1)
elsif pf < 70
performance_rank(2)
elsif pf < 150
performance_rank(3)
elsif pf < 310
performance_rank(4)
else
performance_rank(5)
end
end
def performance_rank(n)
#白 绿 蓝 紫 橙 粉
text_color([ 0,28, 9,30,20,27][n])
end
end
class Window_Selectable < Window_Base
def active=(active)
super
update_cursor
call_update_help
call_update_equiphelp
end
def index=(index)
@index = index
update_cursor
call_update_help
call_update_equiphelp
end
def call_update_equiphelp
update_equiphelp if active && @equiphelp_window
end
def update_equiphelp
@equiphelp_window.clear
end
def drx
x + index % col_max * (item_width + spacing) + item_width / 4
end
def dry
y + index / col_max * item_height + item_height - oy
end
def equiphelp_window=(equiphelp_window)
@equiphelp_window = equiphelp_window
call_update_equiphelp
end
end
class Window_EquipHelp < Window_Base
def initialize
super(0,0,200,600)
self.opacity = 0
end
def standard_padding
return 0
end
def item
@item
end
def set_item(window, item)
@item = item
@window = window
refresh
end
def clear
contents.clear
end
def refresh
clear
return unless item
@dy = 0
draw_start #描画上外框
draw_name #描画物品名
if item.is_equip?
draw_equip_kind #描画装备类型
draw_equip_attack_type #描画武器攻击类型
draw_equip_params #描画装备能力值
draw_equip_features #描画装备特性
draw_equip_dongshu #描画装备插槽
draw_description #描画说明
elsif item.is_gem?
draw_gem_type #描画宝石类型
draw_gem_features #描画宝石特性
else
draw_item_type #描画物品类型
draw_item_effects #描画物品使用效果
end
draw_price #描画售格
draw_end #描画下外框
move_coordinate #移动坐标
end
def draw_start
pf_color = performance_color(item)
contents.fill_rect(2,0,200-4,600,pf_color)
contents.fill_rect(0,2,200,600-4,pf_color)
contents.fill_rect(2+2,2,200-4-4,600-4,Color.new(0,0,64,160))
contents.fill_rect(2,2+2,200-4,600-4-4,Color.new(0,0,64,160))
end
def draw_name
contents.font.size = 16
contents.font.name = "宋体"
contents.font.bold = true
contents.font.color = performance_color(item)
contents.draw_text(6,6+@dy*16,200+8,16,item.name,0)
contents.font.size = 15
contents.font.name = "黑体"
contents.font.bold = false
contents.font.color = text_color(0)
@dy += 1
end
def draw_description
if item.ds
if item.ds != ""
contents.font.color = text_color(21)
contents.draw_text(6, 6+@dy*16, 200, 16, item.ds)
contents.font.color = text_color(0)
@dy += 1
end
end
end
def draw_price
str = item.price == 0 ? "无法出售" : "售价:#{item.price / 2}"
contents.draw_text(6, 6+@dy*16, 200, 16, str)
@dy += 1
end
def draw_gem_type
contents.draw_text(6, 6+@dy*16, 200, 16, "宝石", 0)
@dy += 1
end
def draw_gem_features
item2 = $data_armors.compact.find {|t| t.name == item.name }
contents.font.color = text_color(25)
if item2
contents.draw_text(6, 6+@dy*16, 200, 16, "镶嵌武器")
else
contents.draw_text(6, 6+@dy*16, 200, 16, "镶嵌通用")
end
@dy += 1
item.features.each do |ft|
str = feature_text(ft)
next unless str
contents.font.color = text_color(24)
contents.draw_text(6, 6+@dy*16, 200, 16, str)
@dy += 1
end
if item2
contents.font.color = text_color(25)
contents.draw_text(6, 6+@dy*16, 200, 16, "镶嵌防具")
@dy += 1
item2.features.each do |ft|
str = feature_text(ft)
next unless str
contents.font.color = text_color(24)
contents.draw_text(6, 6+@dy*16, 200, 16, str)
@dy += 1
end
end
contents.font.color = text_color(0)
end
def draw_item_type
str = item.consumable ? "消耗品" : "非消耗品"
contents.draw_text(6, 6+@dy*16, 200, 16, str, 0)
@dy += 1
end
def draw_item_effects
contents.font.color = text_color(24)
item.effects.each do |ft|
str = "特性显示未定义"
case ft.code
when 11
str = "回复#{ft.value2.to_i}点#{Vocab::hp}" if ft.value2 != 0
str = "回复#{(ft.value1*100).to_i.to_s}%#{Vocab::hp}" if ft.value1 != 0
when 12
str = "回复#{ft.value2.to_i}点#{Vocab::mp}" if ft.value2 != 0
str = "回复#{(ft.value1*100).to_i.to_s}%#{Vocab::mp}" if ft.value1 != 0
when 13
str = "回复#{ft.value2.to_i}点#{Vocab::tp}" if ft.value2 != 0
str = "回复#{(ft.value1*100).to_i.to_s}%#{Vocab::tp}" if ft.value1 != 0
when 21
str = "附加 #{$data_states[ft.data_id].name}"
when 22
str = "解除 #{$data_states[ft.data_id].name}"
when 31
when 32
when 33
when 34
when 41
when 42
str = "#{Vocab::param(ft.data_id)}永久增加#{ft.value1.to_i}点"
when 43
str = "永久习得 #{$data_skills[ft.data_id].name}"
when 44
next
end
contents.draw_text(6, 6+@dy*16, 200, 16, str)
@dy += 1
end
contents.font.color = text_color(0)
end
def draw_equip_kind
if item.is_a?(RPG::Armor)
strA = Vocab::etype(item.etype_id)
strB = Vocab::armor_types(item.atype_id)
else
bo = (item.features.select{|ft| ft.code == 54 }).any?{|ft| ft.data_id == 1}
strA = bo ? "双手" : "单手"
strB = Vocab::weapon_types(item.wtype_id)
end
contents.draw_text(6, 6+@dy*16, 200, 16, strA, 0)
contents.draw_text(6, 6+@dy*16, 200-12, 16, strB, 2)
@dy += 1
end
def draw_equip_attack_type
str = ""
(item.features.select{|ft| ft.code == 31 }).each do |ft|
ts = Vocab::elements(ft.data_id)
str += (ts + " ") unless str.include?(ts)
end
if str != ""
contents.font.color = text_color(24)
contents.draw_text(6, 6+@dy*16, 200, 16, str)
contents.font.color = text_color(0)
@dy += 1
end
end
def draw_equip_params
item.params.each_with_index do |param, index|
if param != 0
str = sprintf("%+d #{Vocab::param(index)}",param)
contents.draw_text(6, 6+@dy*16, 200, 16, str)
@dy += 1
end
end
end
def draw_equip_features
contents.font.color = text_color(24)
item.base_features.each do |ft|
next if ft.code == 31
str = feature_text(ft)
next unless str
contents.draw_text(6, 6+@dy*16, 200, 16, str)
@dy += 1
end
contents.font.color = text_color(0)
end
def draw_equip_dongshu
item.dongshu.each do |i|
rect1 = Rect.new(6+1, 6+@dy*16+1, 14, 14)
rect2 = Rect.new(120, 96, 8, 8)
contents.stretch_blt(rect1, windowskin, rect2, 128)
if i.item
color = performance_color(i.item)
contents.font.color = color
bitmap = Cache.system("Iconset")
rect2 = Rect.new(i.item.icon_index % 16 * 24, i.item.icon_index / 16 * 24, 24, 24)
contents.stretch_blt(rect1, bitmap, rect2)
else
contents.font.color = text_color(0)
contents.font.color.alpha = 160
end
contents.draw_text(6+16, 6+@dy*16, 200, 16, i.name)
@dy += 1
if i.item
if item.is_armor?
data = $data_armors.compact.find {|t| t.name == i.name }
i = data if data
end
contents.font.color = text_color(24)
i.features.each do |ft|
next if ft.code == 31
str = feature_text(ft)
#next unless str
contents.draw_text(6+16, 6+@dy*16, 200, 16, str)
@dy += 1
end
end
end
contents.font.color = text_color(0)
end
def draw_end
pf_color = performance_color(item)
contents.clear_rect(0,10+@dy*16,200,600)
contents.fill_rect(0,8+@dy*16,200,2,pf_color)
contents.fill_rect(4,8+@dy*16,200-8,2,Color.new(0,0,64,160))
contents.fill_rect(2,10+@dy*16,200-4,2,pf_color)
end
def move_coordinate
self.x = @window.drx
self.y = @window.dry
endy = self.y + 12+@dy*16 - @window.y
self.y -= [endy - @window.height + 6, 0].max
self.y = [self.y, 0].max
end
def feature_text(ft)
str = "特性显示未定义"
case ft.code
when 11
str = (ft.value*100).to_i.to_s + "%" + Vocab::elements(ft.data_id) + "有效度"
when 12
str = (ft.value*100).to_i.to_s + "%" + Vocab::param(ft.data_id) + "弱化有效度"
when 13
str = (ft.value*100).to_i.to_s + "%" + $data_states[ft.data_id].name + "有效度"
when 14
str = $data_states[ft.data_id].name + "状态无效化"
when 21
#str = (ft.value*100).to_i.to_s + "% " + Vocab::param(ft.data_id)
str = sprintf("%+d%%#{Vocab::param(ft.data_id)}", (ft.value*100-100).to_i)
when 22
return if ft.value == 0
str = sprintf("%+d%%#{Vocab::xparam(ft.data_id)}", (ft.value*100).to_i)
when 23
#str = (ft.value*100).to_i.to_s + "% " + Vocab::sparam(ft.data_id)
str = sprintf("%+d%%#{Vocab::xparam(ft.data_id)}", (ft.value*100-100).to_i)
when 31
str = "攻击属性附加 " + Vocab::elements(ft.data_id)
when 32
str = "+" + (ft.value*100).to_i.to_s + "%附加" + $data_states[ft.data_id].name + "状态"
when 33
str = sprintf("%+d 攻击速度", ft.value.to_i)
when 34
str = sprintf("%+d 攻击回数", ft.value.to_i)
when 41
when 42
when 43
str = "习得#{$data_skills[ft.data_id].name}"
when 44
str = "禁用#{$data_skills[ft.data_id].name}"
when 51
when 52
when 53
when 54
when 55
when 61
str = sprintf("%+d 行动回数", ft.value.to_i)
when 62
when 63
when 64
str = Vocab.zparam(ft.data_id)
end
end
end
class Window_ItemList < Window_Selectable
def include?(item)
return unless item
case @category
when :item
item.is_gem? || (item.is_item? && !item.key_item?)
when :weapon
item.is_weapon?
when :armor
item.is_armor?
when :key_item
!item.is_gem? && item.is_item? && item.key_item?
else
false
end
end
def draw_item(index)
item = @data[index]
if item
rect = item_rect(index)
rect.width -= 4
draw_item_name(item, rect.x, rect.y)#, enable?(item))
draw_item_number(rect, item)
end
end
def draw_item_number(rect, item)
#draw_text(rect, sprintf(":%2d", item.number), 2) if item.is_allitem?
draw_text(rect, sprintf(":%2d", item.number), 2) if item.is_item?
end
def update_equiphelp
@equiphelp_window.set_item(self, item)
end
end
class Window_EquipStatus < Window_Base
def visible_line_number
return 8
end
end
class Window_EquipSlot < Window_Selectable
def visible_line_number
6
end
def drx
super + 92
end
def update_equiphelp
@equiphelp_window.set_item(self, item)
end
end
class Window_EquipItem < Window_ItemList
def include?(item)
return true if item == nil
return false unless item.is_equip?
return false if @slot_id < 0
return false if item.etype_id != @actor.equip_slots[@slot_id]
return @actor.equippable?(item)
end
end
class Window_ShopBuy < Window_Selectable
def window_width
return 400
end
def make_item_list
@data = []
@price = {}
@shop_goods.each do |goods|
case goods[0]
when 0; item = $data_items[goods[1]]
when 1; item = $data_weapons[goods[1]]
when 2; item = $data_armors[goods[1]]
end
if item
if item.is_a?(RPG::Item) || item.is_gem?
item = Game_UsableItem.new(item)
else
item = Game_EquipItem.new(item, false)
end
@data.push(item)
@price[item] = goods[2] == 0 ? item.price : goods[3]
end
end
end
def enable?(item)
item && price(item) <= @money
end
def update_equiphelp
@equiphelp_window.set_item(self, item)
end
end
class Window_ShopNumber < Window_Selectable
def window_width
return 400
end
def dry
y + item_y + line_height
end
def update_equiphelp
@equiphelp_window.set_item(self, @item)
end
def figures
return 3
end
end
class Window_ShopStatus < Window_Base
def refresh
contents.clear
draw_possession(4, 0)
return unless @item
draw_equip_info(4, line_height * 2) if @item.is_equip?
end
end
class Window_BattleLog < Window_Selectable
def display_hp_damage(target, item)
return if target.result.hp_damage == 0 && item && !item.damage.to_hp?
if target.result.hp_damage > 0
target.perform_damage_effect
end
Sound.play_recovery if target.result.hp_damage < 0
add_text(target.result.hp_damage_text)
wait
if target.result.hp_drain > 0
add_text(target.result.hp_drain_text)
wait
end
end
end
class Window_MakeCommand < Window_HorzCommand
def initialize(window_width)
@window_width = window_width
super(0, 0)
end
def window_width
@window_width
end
def col_max
return 4
end
def make_command_list
add_command("强化装备", :a)
add_command("镶嵌装备", :b)
add_command("合成装备", :c, false)
add_command("离开", :cancel)
end
def current_item_enabled?
index == 2 ? false : true
end
end
class Window_MakeA_ItemLise < Window_ItemList
def initialize(x, y, width, height)
super(x, y, width, height)
end
def col_max
return 1
end
def current_item_enabled?
return false unless item
item.lv_price <= $game_party.gold
end
def make_item_list
@data = $game_party.equip_items
end
def status_window=(status_window)
@status_window = status_window
call_update_help
end
def update_help
super
@help_window.set_item(item) if @help_window
@status_window.item = item if @status_window
end
def update_equiphelp
@equiphelp_window.set_item(self, item)
end
end
class Window_MakeA_Ok < Window_Command
def initialize
super(Graphics.width/2-60, Graphics.height/2)
self.hide.deactivate
end
def window_width
120
end
def col_max
return 1
end
def alignment
return 1
end
def make_command_list
add_command("强化", :ok)
add_command("取消", :cancel)
end
end
class Window_MakeA_Status < Window_Base
def initialize(x, y, width, height)
super(x, y, width, height)
@item = nil
@page_index = 0
refresh
end
def refresh
contents.clear
return unless @item
draw_A(4, 0)
draw_B(4, 0)
draw_C(4, 0)
end
def item=(item)
@item = item
refresh
end
def draw_A(x, y)
change_color(system_color)
draw_text(x, line_height*(y+0), 300, 24, "强化费用")
change_color(normal_color)
draw_text(x, line_height*(y+1), 300, 24, @item.lv_price, 2)
end
def draw_B(x, y)
change_color(system_color)
draw_text(x, line_height*(y+2), 300, 24, "强化材料")
end
def draw_C(x, y)
change_color(system_color)
draw_text(x, line_height*(y+6), 300, 24, "属性变化")
end
end
class Window_MakeB_ItemLise < Window_ItemList
def initialize(x, y, width, height)
super(x, y, width, height)
end
def col_max
return 1
end
def current_item_enabled?
true
end
def make_item_list(syt)
if syt == "A"
@data = $game_party.equip_items
else
@data = $game_party.gems
end
@data.push(nil)
end
def status_window=(status_window)
@status_window = status_window
call_update_help
end
def update_help
super
@help_window.set_item(item) if @help_window
@status_window.item = item if @status_window
end
def refresh(syt)
make_item_list(syt)
create_contents
draw_all_items
select(0)
end
def clear
@data = []
select(-1)
create_contents
draw_all_items
end
def update_equiphelp
@equiphelp_window.set_item(self, item)
end
end
class Window_MakeB_Ok < Window_Selectable
def initialize(x, y, width, height)
super(x, y, width, height)
self.hide.deactivate
@item = nil
end
def window_width
end
def item_max
item ? 1 + [item.dongshu.size+1, 5].min : 1
end
def refresh
contents.clear
change_color(system_color)
y = 0
draw_text(4, y, 92, line_height, "装备")
if item
draw_item_name(item, 64, 0)
item.dongshu.each{|d|
y += 1
change_color(system_color)
draw_text(4, y*line_height, 92, line_height, "插槽")
change_color(normal_color)
draw_item_name(d.item, 64, y*line_height)
#dest_rect = Rect.new(64, (1+i)*line_height+4, 240, 16)
#src_bitmap = self.windowskin
#src_rect = Rect.new(120,96+8,8,8)
#contents.stretch_blt(dest_rect, src_bitmap, src_rect, 128)
#change_color(normal_color)
#draw_text(64, (1+i)*line_height, 240, line_height, "不可更改",1)
#draw_text(64, (1+i)*line_height, 92, line_height, d.name)
}
if item.dongshu.size < 5
y += 1
change_color(system_color)
draw_text(4, y*line_height, 92, line_height, "打孔")
change_color(normal_color)
draw_text(64+24, y*line_height, 240, line_height, "花费: #{item.dakongg}")
end
y += 2
gold = 50 + item.base_performance * 5
change_color(normal_color)
draw_text(0, y*line_height, 240, line_height, "镶嵌宝石花费: #{gold}")
y += 1
draw_text(0, y*line_height, 240, line_height, "取出宝石花费: #{gold*2}")
else
change_color(normal_color, false)
draw_text(64, 0,142, line_height, "请选择一件装备")
end
end
def item
@item
end
def item=(item)
@item = item
refresh
end
def kind
index == 0 ? 0 : index == item_max-1 && item.dongshu.size != 5 ? 2 : 1
end
def eq_gem(ritem)
if eitem && ritem
return if eitem.kind_id == ritem.kind_id
end
gold = 50 + item.base_performance * 5
if ritem
if eitem
$game_party.gain_item(eitem.id)
$game_party.lose_gold(gold * 2)
end
item.dongshu[index-1].add_item(ritem.id)
$game_party.lose_gold(50 + item.base_performance * 5)
$game_party.lose_item(ritem.id)
else
if eitem
$game_party.lose_gold(gold * 2)
$game_party.gain_item(eitem.id)
item.dongshu[index-1].unadd_item
end
end
refresh
end
def add_ds
$game_party.lose_gold(item.dakongg)
item.add_ds
refresh
end
def current_item_enabled?
case kind
when 0
true
when 1
50 + item.base_performance * 5 <= $game_party.gold
when 2
item.dakongg <= $game_party.gold
end
end
def eitem
case kind
when 0
item
when 1
item.dongshu[index-1].item if item
end
end
def update_equiphelp
@equiphelp_window.set_item(self, eitem)
end
end
class Window_MakeB_Status < Window_Base
def initialize(x, y, width, height)
super(x, y, width, height)
@item = nil
@page_index = 0
refresh
end
def refresh
contents.clear
return unless @item
#draw_A(4, 0)
end
def item=(item)
@item = item
#refresh
end
def draw_A(x, y)
@item.dongshu.each_with_index{|item,index|
contents.fill_rect(x+1,line_height * (y+5+index)+1,22,22, Color.new(128,128,128))
}
end
end
=begin
合成解释
1.种类保留
├不同部位的合成 => 合成失败,获得材料
└同部位的合成 => 保留高等级的一件,特性按以下方式计算
└有配方的情况按配方,特性按以下方式计算
2.特性保留
├强化等级 => 高强化等级 + 低强化等级的高强化等级的一半每1
│ max = [a.lv, b.lv].max
│ min = [a.lv, b.lv].min
│ lv = max + (min/(max/2)).ceil
│
├前缀 => 相加, 超2个的情况随机保留最大等级2个
└嵌孔数 => 保留嵌孔少的一个
└宝石 => 随机保留最大等级
=end
class Scene_MenuBase < Scene_Base
def create_help_window
@help_window = Window_Help.new
@help_window.viewport = @viewport
end
def create_equiphelp_window
@equiphelp_window = Window_EquipHelp.new
@equiphelp_window.viewport = @viewport
@equiphelp_window.z += 1000
end
end
class Scene_Item < Scene_ItemBase
def start
super
create_help_window
create_equiphelp_window
create_category_window
create_item_window
end
def create_category_window
@category_window = Window_ItemCategory.new
@category_window.viewport = @viewport
@category_window.help_window = @help_window
@category_window.equiphelp_window = @equiphelp_window
@category_window.y = @help_window.height
@category_window.set_handler(:ok, method(:on_category_ok))
@category_window.set_handler(:cancel, method(:return_scene))
end
def create_item_window
wy = @category_window.y + @category_window.height
wh = Graphics.height - wy
@item_window = Window_ItemList.new(0, wy, Graphics.width, wh)
@item_window.viewport = @viewport
@item_window.help_window = @help_window
@item_window.equiphelp_window = @equiphelp_window
@item_window.set_handler(:ok, method(:on_item_ok))
@item_window.set_handler(:cancel, method(:on_item_cancel))
@category_window.item_window = @item_window
end
end
class Scene_Equip < Scene_MenuBase
def start
super
create_help_window
create_equiphelp_window
create_status_window
create_command_window
create_slot_window
create_item_window
end
def create_command_window
wx = @status_window.width
wy = @help_window.height
ww = Graphics.width - @status_window.width
@command_window = Window_EquipCommand.new(wx, wy, ww)
@command_window.viewport = @viewport
@command_window.help_window = @help_window
@command_window.equiphelp_window = @equiphelp_window
@command_window.set_handler(:equip, method(:command_equip))
@command_window.set_handler(:optimize, method(:command_optimize))
@command_window.set_handler(:clear, method(:command_clear))
@command_window.set_handler(:cancel, method(:return_scene))
@command_window.set_handler(:pagedown, method(:next_actor))
@command_window.set_handler(:pageup, method(:prev_actor))
end
def create_item_window
wx = 0
wy = @slot_window.y + @slot_window.height
ww = Graphics.width
wh = Graphics.height - wy
@item_window = Window_EquipItem.new(wx, wy, ww, wh)
@item_window.viewport = @viewport
@item_window.help_window = @help_window
@item_window.equiphelp_window = @equiphelp_window
@item_window.status_window = @status_window
@item_window.actor = @actor
@item_window.set_handler(:ok, method(:on_item_ok))
@item_window.set_handler(:cancel, method(:on_item_cancel))
@slot_window.item_window = @item_window
end
def create_slot_window
wx = @status_window.width
wy = @command_window.y + @command_window.height
ww = Graphics.width - @status_window.width
@slot_window = Window_EquipSlot.new(wx, wy, ww)
@slot_window.viewport = @viewport
@slot_window.help_window = @help_window
@slot_window.equiphelp_window = @equiphelp_window
@slot_window.status_window = @status_window
@slot_window.actor = @actor
@slot_window.set_handler(:ok, method(:on_slot_ok))
@slot_window.set_handler(:cancel, method(:on_slot_cancel))
end
end
class Scene_MakeEquip < Scene_MenuBase
def start
super
create_help_window
create_equiphelp_window
create_gold_window
create_command_window
create_dummy_window
create_A_window
create_B_window
end
def create_gold_window
@gold_window = Window_Gold.new
@gold_window.viewport = @viewport
@gold_window.x = Graphics.width - @gold_window.width
@gold_window.y = @help_window.height
end
def create_command_window
@command_window = Window_MakeCommand.new(@gold_window.x)
@command_window.viewport = @viewport
@command_window.y = @help_window.height
@command_window.equiphelp_window = @equiphelp_window
@command_window.set_handler(:a, method(:command_A))
@command_window.set_handler(:b, method(:command_B))
@command_window.set_handler(:c, method(:command_C))
@command_window.set_handler(:cancel, method(:return_scene))
end
def create_dummy_window
wy = @command_window.y + @command_window.height
wh = Graphics.height - wy
@dummy_window = Window_Base.new(0, wy, Graphics.width, wh)
@dummy_window.viewport = @viewport
end
def create_A_window
@makeA_status_window = Window_MakeA_Status.new(400, 120, 400, 480)
@makeA_status_window.viewport = @viewport
@makeA_status_window.hide
@makeA_itemlist_window = Window_MakeA_ItemLise.new(0, 120, 400, 480)
@makeA_itemlist_window.viewport = @viewport
@makeA_itemlist_window.help_window = @help_window
@makeA_itemlist_window.equiphelp_window = @equiphelp_window
@makeA_itemlist_window.status_window = @makeA_status_window
@makeA_itemlist_window.hide
@makeA_itemlist_window.set_handler(:ok, method(:on_A_ok))
@makeA_itemlist_window.set_handler(:cancel, method(:on_A_cancel))
@makeA_ok_window = Window_MakeA_Ok.new
@makeA_ok_window.viewport = @viewport
@makeA_ok_window.set_handler(:ok, method(:on_A_ok_ok))
@makeA_ok_window.set_handler(:cancel, method(:on_A_ok_cancel))
end
def create_B_window
@makeB_status_window = Window_MakeB_Status.new(800, 120, 400, 480)
@makeB_status_window.viewport = @viewport
@makeB_status_window.hide
@makeB_itemlist_window = Window_MakeB_ItemLise.new(400, 120, 400, 480)
@makeB_itemlist_window.viewport = @viewport
@makeB_itemlist_window.help_window = @help_window
@makeB_itemlist_window.equiphelp_window = @equiphelp_window
@makeB_itemlist_window.status_window = @makeB_status_window
@makeB_itemlist_window.hide
@makeB_itemlist_window.set_handler(:ok, method(:on_B_ok))
@makeB_itemlist_window.set_handler(:cancel, method(:on_B_cancel))
@makeB_ok_window = Window_MakeB_Ok.new(0, 120, 400, 480)
@makeB_ok_window.viewport = @viewport
@makeB_ok_window.equiphelp_window = @equiphelp_window
@makeB_ok_window.set_handler(:ok, method(:on_B_ok_ok))
@makeB_ok_window.set_handler(:cancel, method(:on_B_ok_cancel))
end
def command_A
@dummy_window.hide
@makeA_itemlist_window.show.activate
@makeA_itemlist_window.refresh
@makeA_itemlist_window.select(0)
@makeA_status_window.show
end
def command_B
@dummy_window.hide
@makeB_itemlist_window.show
#@makeB_itemlist_window.refresh
#@makeA_itemlist_window.select(0)
#@makeB_status_window.show
@makeB_ok_window.show.activate
@makeB_ok_window.refresh
@makeB_ok_window.select(0)
end
def command_C
@dummy_window.hide
@category_window.show.activate
@sell_window.show
@sell_window.unselect
@sell_window.refresh
end
def on_A_ok
@item = @makeA_itemlist_window.item
@makeA_itemlist_window.deactivate
@makeA_ok_window.show.activate
end
def on_A_cancel
@command_window.activate
@dummy_window.show
@makeA_itemlist_window.hide
@makeA_status_window.hide
@makeA_status_window.item = nil
@help_window.clear
@equiphelp_window.clear
end
def on_A_ok_ok
$game_party.lose_gold(@item.lv_price)
@item.lv_up
@makeA_itemlist_window.activate
@makeA_itemlist_window.refresh
@makeA_ok_window.hide
@gold_window.refresh
end
def on_A_ok_cancel
@makeA_itemlist_window.activate
@makeA_ok_window.hide
end
def on_B_ok
case @makeB_ok_window.kind
when 0
@makeB_ok_window.item = @makeB_itemlist_window.item
when 1
@makeB_ok_window.eq_gem(@makeB_itemlist_window.item)
@gold_window.refresh
when 2
end
on_B_cancel
end
def on_B_cancel
@makeB_ok_window.activate
@makeB_itemlist_window.clear
@help_window.clear
#@equiphelp_window.clear
end
def on_B_ok_ok
case @makeB_ok_window.kind
when 0
@makeB_ok_window.deactivate
@makeB_itemlist_window.activate
@makeB_itemlist_window.refresh("A")
when 1
@makeB_ok_window.deactivate
@makeB_itemlist_window.activate
@makeB_itemlist_window.refresh("B")
when 2
@makeB_ok_window.add_ds
@makeB_ok_window.activate
end
@gold_window.refresh
end
def on_B_ok_cancel
@command_window.activate
@dummy_window.show
@makeB_ok_window.item = nil
@makeB_ok_window.hide
@makeB_itemlist_window.hide
@help_window.clear
#@equiphelp_window.clear
end
def money
@gold_window.value
end
def currency_unit
@gold_window.currency_unit
end
def buying_price
@buy_window.price(@item)
end
def selling_price
@item.price / 2
end
end
class Scene_Shop < Scene_MenuBase
def start
super
create_help_window
create_equiphelp_window
create_gold_window
create_command_window
create_dummy_window
create_number_window
create_status_window
create_buy_window
create_category_window
create_sell_window
end
def create_command_window
@command_window = Window_ShopCommand.new(@gold_window.x, @purchase_only)
@command_window.viewport = @viewport
@command_window.y = @help_window.height
@command_window.equiphelp_window = @equiphelp_window
@command_window.set_handler(:buy, method(:command_buy))
@command_window.set_handler(:sell, method(:command_sell))
@command_window.set_handler(:cancel, method(:return_scene))
end
def create_number_window
wy = @dummy_window.y
wh = @dummy_window.height
@number_window = Window_ShopNumber.new(0, wy, wh)
@number_window.viewport = @viewport
@number_window.equiphelp_window = @equiphelp_window
@number_window.hide
@number_window.set_handler(:ok, method(:on_number_ok))
@number_window.set_handler(:cancel, method(:on_number_cancel))
end
def create_buy_window
wy = @dummy_window.y
wh = @dummy_window.height
@buy_window = Window_ShopBuy.new(0, wy, wh, @goods)
@buy_window.viewport = @viewport
@buy_window.help_window = @help_window
@buy_window.equiphelp_window = @equiphelp_window
@buy_window.status_window = @status_window
@buy_window.hide
@buy_window.set_handler(:ok, method(:on_buy_ok))
@buy_window.set_handler(:cancel, method(:on_buy_cancel))
end
def create_category_window
@category_window = Window_ItemCategory.new
@category_window.viewport = @viewport
@category_window.help_window = @help_window
@category_window.equiphelp_window = @equiphelp_window
@category_window.y = @dummy_window.y
@category_window.hide.deactivate
@category_window.set_handler(:ok, method(:on_category_ok))
@category_window.set_handler(:cancel, method(:on_category_cancel))
end
def create_sell_window
wy = @category_window.y + @category_window.height
wh = Graphics.height - wy
@sell_window = Window_ShopSell.new(0, wy, Graphics.width, wh)
@sell_window.viewport = @viewport
@sell_window.help_window = @help_window
@sell_window.equiphelp_window = @equiphelp_window
@sell_window.hide
@sell_window.set_handler(:ok, method(:on_sell_ok))
@sell_window.set_handler(:cancel, method(:on_sell_cancel))
@category_window.item_window = @sell_window
end
def del_on_buy_cancel
@command_window.activate
@dummy_window.show
@buy_window.hide
@status_window.hide
@status_window.item = nil
@help_window.clear
@equiphelp_window.clear
end
def del_on_sell_cancel
@sell_window.unselect
@category_window.activate
@status_window.item = nil
@help_window.clear
@equiphelp_window.clear
end
def do_buy(number)
$game_party.lose_gold(number * buying_price)
$game_party.add_shopitem(@item, number)
end
def do_sell(number)
$game_party.gain_gold(number * selling_price)
$game_party.lose_item(@item.id, number)
end
def max_buy
buying_price == 0 ? 99 : [99, money / buying_price].min
end
def max_sell
@item.is_item? ? $game_party.item_number(@item) : 1
end
end
class Scene_Battle < Scene_Base
def on_item_ok
@item = @item_window.item
BattleManager.actor.input.set_item(@item)
if !@item.need_selection?
@item_window.hide
next_command
elsif @item.for_opponent?
select_enemy_selection
else
select_actor_selection
end
$game_party.last_item.object = @item
end
end
|
|