赞 | 153 |
VIP | 10 |
好人卡 | 39 |
积分 | 93 |
经验 | 146191 |
最后登录 | 2024-5-6 |
在线时间 | 2504 小时 |
Lv4.逐梦者
- 梦石
- 0
- 星屑
- 9280
- 在线时间
- 2504 小时
- 注册时间
- 2011-5-20
- 帖子
- 15389
|
先放上脚本···- #==============================================================================
- #
- # ▼ Yanfly Engine Ace - Class System v1.08
- # -- Last Updated: 2012.01.08
- # -- Level: Normal, Hard
- # -- Requires: n/a
- #
- #==============================================================================
- $imported = {} if $imported.nil?
- $imported["YEA-ClassSystem"] = true
- =begin
- #================================================= =============================
- #▼更新
- #= - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - =- = - = - = - = - = - = - = - = - = - = - = - = - = - =
- 2012年1月8日 - 兼容性更新:学习技能引擎
- 2012.01.05 - 修正:设备不再被复制。
- 2012.01.04 - 更新:Autobattle将不再使用技能无法使用
- #中,类的具体实施者。
- 2012年1月2日 - 效率更新。
- 2011.12.26 - 添加自定义命令的功能。
- 2011.12.23 - 兼容性更新:类具体细节。
- #2011.12.22 - 兼容性更新:王牌菜单引擎。
- 2011.12.20 - 兼容性更新:类解锁级。
- #2011.12.19 - 开始脚本和成品。
- #
- #================================================= =============================
- #▼公司简介
- #= - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - =- = - = - = - = - = - = - = - = - = - = - = - = - = - =
- #这个脚本为您的播放器添加了自由改变类
- 演员外的战斗从菜单中。当改变类,这个脚本
- #为开发者提供的选项选择是否有类
- #自己的水平(导致演员的水平,以重置回类的
- #水平),或维持目前的水平。除了提供的能力
- #更改类的一个子类,装备也是可行的,和力学
- #具有该脚本内的一个子类也可以被定义。
- #
- #================================================= =============================
- #▼说明
- #= - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - =- = - = - = - = - = - = - = - = - = - = - = - = - = - =
- #如果要安装这个脚本,脚本编辑器打开你的复制/粘贴此脚本
- #▼材料/素材,但高于▼主要的开放式插槽下面。记住要保存。
- #
- #------------------------------------------------- ----------------------------
- #的演员Notetags - 这些notetags中的的演员notebox数据库中的。
- #------------------------------------------------- ----------------------------
- #<unlocked classes: X>
- #<unlocked classes: x, X>
- #这将设置默认的类作为解锁的演员。这不
- 覆盖默认的类模块中的解锁,而是,再加上
- #解锁的类的数量。
- #
- #------------------------------------------------- ----------------------------
- 在数据库中的类notebox#类Notetags的 - 这些notetags去。
- #------------------------------------------------- ----------------------------
- #<icon: X>
- #设置图标表示类为x。
- #
- #<说明说明>
- #字符串
- #字符串
- #</帮助说明>
- #设置的文本用于帮助窗口类中的场景。多线
- #notebox将被串在一起。使用一个换行符。
- #
- #------------------------------------------------- ----------------------------
- #脚本调用 - 使用脚本调用这些命令。
- #------------------------------------------------- ----------------------------
- #$ game_actors [X]。unlock_class(Y)
- #这使演员x的解锁等级Y,使其可用于切换中
- #在类的场景。
- #
- #$ game_actors [X]。remove_class(Y)
- #这将导致演员能够切换到X删除类y。
- ,如果目前的演员是Y类,这个类不会被删除。如果
- #演员的子类是y,则子类将束手无策。
- #
- #================================================= =============================
- #▼兼容性
- #= - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - =- = - = - = - = - = - = - = - = - = - = - = - = - = - =
- #这个脚本是为RPG制作VX王牌的严格。这是极不可能的
- #将运行与的RPG制造商VX没有调整。
- #
- =end
- module YEA
- module CLASS_SYSTEM
- =begin
- # - 通用类设置 -
- #这是整个脚本的一般设置。他们控制
- #各项规章制度,这个脚本经历。这些设置
- #也将决定一个球员的一个子类可以做什么。
- =end
- CLASS_MENU_TEXT = "职业" # 在主菜单中显示的文本.
- MAINTAIN_LEVELS = false # 保持的所有类。默认值:false.
- DEFAULT_UNLOCKS = [ ] # 默认情况下,类解锁。
- =begin
- #显示之间的主类和子类的时候写的一个
- #窗口将出现等。
- =end
- SUBCLASS_TEXT = "%s/%s"
- =begin
- #这对于一个演员如果调整的统计继承一个演员都有一个
- #子类装备。如果您希望禁用这个选项,设置速率为0.0。
- =end
- SUBCLASS_STAT_RATE = 0.20
-
- # 这增加了子类技能类型可使用的技能类型.
- SUBCLASS_SKILL_TYPES = true
-
- # 这增加了子类武器装备的武器类型.
- SUBCLASS_WEAPON_TYPES = true
-
- # 这增加了子类防具装备的武器类型.
- SUBCLASS_ARMOUR_TYPES = true
- =begin
- # - 类场景“命令 -
- 这些设置调整类的一幕出现了。在这里,你可以调整
- #命令列表和命令,在出现的项目。这些大多是
- #可视化设置。调整您认为合适的。
- #:命令说明
- #:初级允许玩家改变主类。
- #:子类,允许玩家改变的子类。
- #
- #:learn_skill。需要YEA - 学习技能引擎
- #
- =end
- COMMANDS =[ # 在该菜单项目的顺序显示.
- # [ :command, "Display"],
- [ :primary, "主要职业"],
- [:subclass, "次要职业"],
- [:learn_skill, "学习技能"],
- # [ :custom1, "Custom1"],
- # [ :custom2, "Custom2"],
- ] # 不要删除此。
- =begin
- # - 状态类的命令 -
- #-------------------------------------
- #对于那些使用脚本,可能会产生独特的效果
- #类的菜单,使用这个散列管理类的自定义命令
- #命令窗口。您可以禁用特定的命令或阻止他们
- #通过交换机出现。如果您不希望将它们绑定到一个开关,
- #设置适当的开关为0,它有没有影响。
- =end
- CUSTOM_CLASS_COMMANDS ={
- # :command => [EnableSwitch, ShowSwitch, Handler Method,
- :custom1 => [ 0, 0, :command_name1],
- :custom2 => [ 0, 0, :command_name2],
- } # Do not remove this.
-
- # These settings adjust the colour displays for classes.
- CURRENT_CLASS_COLOUR = 17 # "Window" colour used for current class.
- SUBCLASS_COLOUR = 4 # "Window" colour used for subclass.
-
- # This adjusts the display for class levels if MAINTAIN_LEVELS is false.
- CLASS_LEVEL = "LV%s" # Text display for level.
- LEVEL_FONT_SIZE = 16 # Font size used for level.
-
- # This array sets the order of how classes are ordered in the class listing
- # window. Any class ID's unlisted will not be shown.
- CLASS_ORDER = [41..999, 1..40]
-
- # This adjusts the font size for the Parameters window.
- PARAM_FONT_SIZE = 20
-
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # - Switch Settings -
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # These are the switches that govern whether or not certain menu items will
- # appear and/or will be enabled. By binding them to a Switch, you can just
- # set the Switch ON/OFF to show/hide or enable/disable a menu command. If
- # you do not wish to use this feature, set these commands to 0.
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- SWITCH_SHOW_CLASS = 0 # Switch that shows Class in Main Menu.
- SWITCH_ENABLE_CLASS = 0 # Switch that enables Class in Main Menu.
- SWITCH_SHOW_PRIMARY = 0 # Switch that shows Subclass in Class Menu.
- SWITCH_ENABLE_PRIMARY = 0 # Switch that enables Subclass in Class Menu.
- SWITCH_SHOW_SUBCLASS = 0 # Switch that shows Subclass in Class Menu.
- SWITCH_ENABLE_SUBCLASS = 0 # Switch that enables Subclass in Class Menu.
-
- end # CLASS_SYSTEM
- end # YEA
- #==============================================================================
- # ▼ Editting anything past this point may potentially result in causing
- # computer damage, incontinence, explosion of user's head, coma, death, and/or
- # halitosis so edit at your own risk.
- #==============================================================================
- module YEA
- module CLASS_SYSTEM
- module_function
- #--------------------------------------------------------------------------
- # convert_integer_array
- #--------------------------------------------------------------------------
- def convert_integer_array(array)
- result = []
- array.each { |i|
- case i
- when Range; result |= i.to_a
- when Integer; result |= [i]
- end }
- return result
- end
- #--------------------------------------------------------------------------
- # converted_contants
- #--------------------------------------------------------------------------
- DEFAULT_UNLOCKS = convert_integer_array(DEFAULT_UNLOCKS)
- CLASS_ORDER = convert_integer_array(CLASS_ORDER)
- end # CLASS_SYSTEM
- module REGEXP
- module ACTOR
-
- UNLOCKED_CLASSES =
- /<(?:UNLOCKED_CLASSES|unlocked classes):[ ]*(\d+(?:\s*,\s*\d+)*)>/i
-
- end # ACTOR
- module CLASS
-
- ICON_INDEX = /<(?:ICON_INDEX|icon index|icon):[ ](\d+)>/i
- HELP_DESCRIPTION_ON = /<(?:HELP_DESCRIPTION|help description)>/i
- HELP_DESCRIPTION_OFF = /<\/(?:HELP_DESCRIPTION|help description)>/i
-
- end # CLASS
- end # REGEXP
- end # YEA
- #==============================================================================
- # ■ Switch
- #==============================================================================
- module Switch
-
- #--------------------------------------------------------------------------
- # self.class_show
- #--------------------------------------------------------------------------
- def self.class_show
- return true if YEA::CLASS_SYSTEM::SWITCH_SHOW_CLASS <= 0
- return $game_switches[YEA::CLASS_SYSTEM::SWITCH_SHOW_CLASS]
- end
-
- #--------------------------------------------------------------------------
- # self.class_enable
- #--------------------------------------------------------------------------
- def self.class_enable
- return true if YEA::CLASS_SYSTEM::SWITCH_ENABLE_CLASS <= 0
- return $game_switches[YEA::CLASS_SYSTEM::SWITCH_ENABLE_CLASS]
- end
-
- #--------------------------------------------------------------------------
- # self.primary_show
- #--------------------------------------------------------------------------
- def self.primary_show
- return true if YEA::CLASS_SYSTEM::SWITCH_SHOW_PRIMARY <= 0
- return $game_switches[YEA::CLASS_SYSTEM::SWITCH_SHOW_PRIMARY]
- end
-
- #--------------------------------------------------------------------------
- # self.primary_enable
- #--------------------------------------------------------------------------
- def self.primary_enable
- return true if YEA::CLASS_SYSTEM::SWITCH_ENABLE_PRIMARY <= 0
- return $game_switches[YEA::CLASS_SYSTEM::SWITCH_ENABLE_PRIMARY]
- end
-
- #--------------------------------------------------------------------------
- # self.subclass_show
- #--------------------------------------------------------------------------
- def self.subclass_show
- return true if YEA::CLASS_SYSTEM::SWITCH_SHOW_SUBCLASS <= 0
- return $game_switches[YEA::CLASS_SYSTEM::SWITCH_SHOW_SUBCLASS]
- end
-
- #--------------------------------------------------------------------------
- # self.subclass_enable
- #--------------------------------------------------------------------------
- def self.subclass_enable
- return true if YEA::CLASS_SYSTEM::SWITCH_ENABLE_SUBCLASS <= 0
- return $game_switches[YEA::CLASS_SYSTEM::SWITCH_ENABLE_SUBCLASS]
- end
-
- end # Switch
- #==============================================================================
- # ■ Numeric
- #==============================================================================
- class Numeric
-
- #--------------------------------------------------------------------------
- # new method: group_digits
- #--------------------------------------------------------------------------
- unless $imported["YEA-CoreEngine"]
- def group; return self.to_s; end
- end # $imported["YEA-CoreEngine"]
-
- end # Numeric
- #==============================================================================
- # ■ DataManager
- #==============================================================================
- module DataManager
-
- #--------------------------------------------------------------------------
- # alias method: load_database
- #--------------------------------------------------------------------------
- class <<self; alias load_database_cs load_database; end
- def self.load_database
- load_database_cs
- load_notetags_cs
- end
-
- #--------------------------------------------------------------------------
- # new method: load_notetags_cs
- #--------------------------------------------------------------------------
- def self.load_notetags_cs
- groups = [$data_actors, $data_classes]
- for group in groups
- for obj in group
- next if obj.nil?
- obj.load_notetags_cs
- end
- end
- end
-
- end # DataManager
- #==============================================================================
- # ■ RPG::Actor
- #==============================================================================
- class RPG::Actor < RPG::BaseItem
-
- #--------------------------------------------------------------------------
- # public instance variables
- #--------------------------------------------------------------------------
- attr_accessor :unlocked_classes
-
- #--------------------------------------------------------------------------
- # common cache: load_notetags_cs
- #--------------------------------------------------------------------------
- def load_notetags_cs
- @unlocked_classes = []
- #---
- self.note.split(/[\r\n]+/).each { |line|
- case line
- #---
- when YEA::REGEXP::ACTOR::UNLOCKED_CLASSES
- $1.scan(/\d+/).each { |num|
- @unlocked_classes.push(num.to_i) if num.to_i > 0 }
- #---
- end
- } # self.note.split
- #---
- end
-
- end # RPG::Actor
- #==============================================================================
- # ■ RPG::Class
- #==============================================================================
- class RPG::Class < RPG::BaseItem
-
- #--------------------------------------------------------------------------
- # public instance variables
- #--------------------------------------------------------------------------
- attr_accessor :icon_index
-
- #--------------------------------------------------------------------------
- # common cache: load_notetags_cs
- #--------------------------------------------------------------------------
- def load_notetags_cs
- @icon_index = 0
- @help_description_on = false
- #---
- self.note.split(/[\r\n]+/).each { |line|
- case line
- #---
- when YEA::REGEXP::CLASS::ICON_INDEX
- @icon_index = $1.to_i
- #---
- when YEA::REGEXP::CLASS::HELP_DESCRIPTION_ON
- @help_description_on = true
- when YEA::REGEXP::CLASS::HELP_DESCRIPTION_OFF
- @help_description_on = false
- #---
- else
- @description += line.to_s if @help_description_on
- end
- } # self.note.split
- #---
- @description.gsub!(/[|]/i) { "\n" }
- end
-
- end # RPG::Class
- #==============================================================================
- # ■ Game_Temp
- #==============================================================================
- class Game_Temp
-
- #--------------------------------------------------------------------------
- # public instance variables
- #--------------------------------------------------------------------------
- attr_accessor :scene_class_index
- attr_accessor :scene_class_oy
-
- end # Game_Temp
- #==============================================================================
- # ■ Game_Action
- #==============================================================================
- class Game_Action
-
- #--------------------------------------------------------------------------
- # alias method: valid?
- #--------------------------------------------------------------------------
- alias game_action_valid_cs valid?
- def valid?
- return false if check_auto_battle_class
- return game_action_valid_cs
- end
-
- #--------------------------------------------------------------------------
- # new method: check_auto_battle_class
- #--------------------------------------------------------------------------
- def check_auto_battle_class
- return false unless subject.actor?
- return false unless subject.auto_battle?
- return false if item.nil?
- return false if subject.added_skill_types.include?(item.stype_id)
- return false if item.id == subject.attack_skill_id
- return true
- end
-
- end # Game_Action
- #==============================================================================
- # ■ Game_BattlerBase
- #==============================================================================
- class Game_BattlerBase
-
- #--------------------------------------------------------------------------
- # public instance variables
- #--------------------------------------------------------------------------
- attr_accessor :temp_flag
-
- #--------------------------------------------------------------------------
- # alias method: added_skill_types
- #--------------------------------------------------------------------------
- alias game_battlerbase_added_skill_types_cs added_skill_types
- def added_skill_types
- result = game_battlerbase_added_skill_types_cs
- result |= subclass_skill_types
- return result
- end
-
- #--------------------------------------------------------------------------
- # new method: subclass_skill_types
- #--------------------------------------------------------------------------
- def subclass_skill_types; return []; end
-
- #--------------------------------------------------------------------------
- # alias method: equip_wtype_ok?
- #--------------------------------------------------------------------------
- alias game_battlerbase_equip_wtype_ok_cs equip_wtype_ok?
- def equip_wtype_ok?(wtype_id)
- return true if subclass_equip_wtype?(wtype_id)
- return game_battlerbase_equip_wtype_ok_cs(wtype_id)
- end
-
- #--------------------------------------------------------------------------
- # new method: subclass_equip_wtype?
- #--------------------------------------------------------------------------
- def subclass_equip_wtype?(wtype_id); return false; end
-
- #--------------------------------------------------------------------------
- # alias method: equip_atype_ok?
- #--------------------------------------------------------------------------
- alias game_battlerbase_equip_atype_ok_cs equip_atype_ok?
- def equip_atype_ok?(atype_id)
- return true if subclass_equip_atype?(atype_id)
- return game_battlerbase_equip_atype_ok_cs(atype_id)
- end
-
- #--------------------------------------------------------------------------
- # new method: subclass_equip_atype?
- #--------------------------------------------------------------------------
- def subclass_equip_atype?(atype_id); return false; end
-
- end # Game_BattlerBase
- #==============================================================================
- # ■ Game_Actor
- #==============================================================================
- class Game_Actor < Game_Battler
-
- #--------------------------------------------------------------------------
- # alias method: setup
- #--------------------------------------------------------------------------
- alias game_actor_setup_cs setup
- def setup(actor_id)
- game_actor_setup_cs(actor_id)
- init_unlocked_classes
- init_subclass
- end
-
- #--------------------------------------------------------------------------
- # new method: init_unlocked_classes
- #--------------------------------------------------------------------------
- def init_unlocked_classes
- @unlocked_classes = actor.unlocked_classes.clone
- @unlocked_classes.push(@class_id) if !@unlocked_classes.include?(@class_id)
- @unlocked_classes.sort!
- end
-
- #--------------------------------------------------------------------------
- # new method: init_subclass
- #--------------------------------------------------------------------------
- def init_subclass
- @subclass_id = 0
- end
-
- #--------------------------------------------------------------------------
- # new method: unlocked_classes
- #--------------------------------------------------------------------------
- def unlocked_classes
- init_unlocked_classes if @unlocked_classes.nil?
- return @unlocked_classes
- end
-
- #--------------------------------------------------------------------------
- # new method: unlock_class
- #--------------------------------------------------------------------------
- def unlock_class(class_id)
- init_unlocked_classes if @unlocked_classes.nil?
- return if @unlocked_classes.include?(class_id)
- @unlocked_classes.push(class_id)
- learn_class_skills(class_id)
- end
-
- #--------------------------------------------------------------------------
- # new method: remove_class
- #--------------------------------------------------------------------------
- def remove_class(class_id)
- init_unlocked_classes if @unlocked_classes.nil?
- return if class_id == @class_id
- @unlocked_classes.delete(class_id)
- @subclass_id = 0 if class_id == @subclass_id
- refresh
- end
-
- #--------------------------------------------------------------------------
- # new method: subclass
- #--------------------------------------------------------------------------
- def subclass
- init_subclass if @subclass_id.nil?
- return $data_classes[@subclass_id]
- end
-
- #--------------------------------------------------------------------------
- # alias method: change_class
- #--------------------------------------------------------------------------
- alias game_actor_change_class_cs change_class
- def change_class(class_id, keep_exp = false)
- @subclass_id = 0 if @subclass_id == class_id
- game_actor_change_class_cs(class_id, keep_exp)
- learn_class_skills(class_id)
- unlock_class(class_id)
- end
-
- #--------------------------------------------------------------------------
- # new method: learn_class_skills
- #--------------------------------------------------------------------------
- def learn_class_skills(class_id)
- return if class_id <= 0
- return if $data_classes[class_id].nil?
- $data_classes[class_id].learnings.each do |learning|
- learn_skill(learning.skill_id) if learning.level == class_level(class_id)
- end
- end
-
- #--------------------------------------------------------------------------
- # new method: change_subclass
- #--------------------------------------------------------------------------
- def change_subclass(class_id)
- return if class_id == @class_id
- unlock_class(class_id)
- @subclass_id = @subclass_id == class_id ? 0 : class_id
- learn_class_skills(@subclass_id)
- refresh
- end
-
- #--------------------------------------------------------------------------
- # new method: class_level
- #--------------------------------------------------------------------------
- def class_level(class_id)
- return @level if YEA::CLASS_SYSTEM::MAINTAIN_LEVELS
- temp_class = $data_classes[class_id]
- @exp[class_id] = 0 if @exp[class_id].nil?
- n = 1
- loop do
- break if temp_class.exp_for_level(n+1) > @exp[class_id]
- n += 1
- end
- return n
- end
-
- #--------------------------------------------------------------------------
- # new method: subclass_level
- #--------------------------------------------------------------------------
- def subclass_level
- return 0 if @subclass_id == 0
- return @level if YEA::CLASS_SYSTEM::MAINTAIN_LEVELS
- return class_level(@subclass_id)
- end
-
- #--------------------------------------------------------------------------
- # alias method: param_base
- #--------------------------------------------------------------------------
- alias game_actor_param_base_cs param_base
- def param_base(param_id)
- result = game_actor_param_base_cs(param_id)
- unless subclass.nil?
- subclass_rate = YEA::CLASS_SYSTEM::SUBCLASS_STAT_RATE
- slevel = subclass_level
- result += subclass.params[param_id, slevel] * subclass_rate
- end
- return result.to_i
- end
-
- #--------------------------------------------------------------------------
- # new method: subclass_skill_types
- #--------------------------------------------------------------------------
- def subclass_skill_types
- return [] unless YEA::CLASS_SYSTEM::SUBCLASS_SKILL_TYPES
- return [] if subclass.nil?
- array = []
- for feature in subclass.features
- next unless feature.code == FEATURE_STYPE_ADD
- next if features_set(FEATURE_STYPE_ADD).include?(feature.data_id)
- array.push(feature.data_id)
- end
- return array
- end
-
- #--------------------------------------------------------------------------
- # new method: subclass_equip_wtype?
- #--------------------------------------------------------------------------
- def subclass_equip_wtype?(wtype_id)
- return false unless YEA::CLASS_SYSTEM::SUBCLASS_WEAPON_TYPES
- return false if subclass.nil?
- for feature in subclass.features
- next unless feature.code == FEATURE_EQUIP_WTYPE
- return true if wtype_id == feature.data_id
- end
- return super
- end
-
- #--------------------------------------------------------------------------
- # new method: subclass_equip_atype?
- #--------------------------------------------------------------------------
- def subclass_equip_atype?(atype_id)
- return false unless YEA::CLASS_SYSTEM::SUBCLASS_ARMOUR_TYPES
- return false if subclass.nil?
- for feature in subclass.features
- next unless feature.code == FEATURE_EQUIP_ATYPE
- return true if atype_id == feature.data_id
- end
- return super
- end
-
- #--------------------------------------------------------------------------
- # alias method: release_unequippable_items
- #--------------------------------------------------------------------------
- alias game_actor_release_unequippable_items_cs release_unequippable_items
- def release_unequippable_items(item_gain = true)
- item_gain = false if @temp_flag
- game_actor_release_unequippable_items_cs(item_gain)
- end
-
- end # Game_Actor
- #==============================================================================
- # ■ Game_Interpreter
- #==============================================================================
- class Game_Interpreter
-
- #--------------------------------------------------------------------------
- # overwrite method: command_321
- #--------------------------------------------------------------------------
- def command_321
- actor = $game_actors[@params[0]]
- if actor && $data_classes[@params[1]]
- maintain = YEA::CLASS_SYSTEM::MAINTAIN_LEVELS
- actor.change_class(@params[1], maintain)
- end
- end
-
- end # Game_Interpreter
- #==============================================================================
- # ■ Window_Base
- #==============================================================================
- class Window_Base < Window
-
- #--------------------------------------------------------------------------
- # overwrite method: draw_actor_class
- #--------------------------------------------------------------------------
- def draw_actor_class(actor, x, y, width = 112)
- change_color(normal_color)
- if actor.subclass.nil?
- text = actor.class.name
- else
- fmt = YEA::CLASS_SYSTEM::SUBCLASS_TEXT
- text = sprintf(fmt, actor.class.name, actor.subclass.name)
- end
- draw_text(x, y, width, line_height, text)
- end
-
- end # Window_Base
- #==============================================================================
- # ■ Window_MenuCommand
- #==============================================================================
- class Window_MenuCommand < Window_Command
-
- #--------------------------------------------------------------------------
- # alias method: add_formation_command
- #--------------------------------------------------------------------------
- alias window_menucommand_add_formation_command_cs add_formation_command
- def add_formation_command
- add_class_command unless $imported["YEA-AceMenuEngine"]
- window_menucommand_add_formation_command_cs
- end
-
- #--------------------------------------------------------------------------
- # new method: add_class_command
- #--------------------------------------------------------------------------
- def add_class_command
- return unless Switch.class_show
- text = YEA::CLASS_SYSTEM::CLASS_MENU_TEXT
- add_command(text, :class, Switch.class_enable)
- end
-
- end # Window_MenuCommand
- #==============================================================================
- # ■ Window_ClassCommand
- #==============================================================================
- class Window_ClassCommand < Window_Command
-
- #--------------------------------------------------------------------------
- # initialize
- #--------------------------------------------------------------------------
- def initialize(x, y)
- super(x, y)
- @actor = nil
- end
-
- #--------------------------------------------------------------------------
- # ● ウィンドウ幅の取得
- #--------------------------------------------------------------------------
- def window_width; return 160; end
-
- #--------------------------------------------------------------------------
- # actor=
- #--------------------------------------------------------------------------
- def actor=(actor)
- return if @actor == actor
- @actor = actor
- refresh
- end
-
- #--------------------------------------------------------------------------
- # item_window=
- #--------------------------------------------------------------------------
- def item_window=(window)
- @item_window = window
- end
-
- #--------------------------------------------------------------------------
- # visible_line_number
- #--------------------------------------------------------------------------
- def visible_line_number; return 4; end
-
- #--------------------------------------------------------------------------
- # make_command_list
- #--------------------------------------------------------------------------
- def make_command_list
- return if @actor.nil?
- for command in YEA::CLASS_SYSTEM::COMMANDS
- case command[0]
- when :primary
- next unless Switch.primary_show
- add_command(command[1], command[0], Switch.primary_enable)
- when :subclass
- next unless Switch.subclass_show
- add_command(command[1], command[0], Switch.subclass_enable)
- when :learn_skill
- next unless $imported["YEA-LearnSkillEngine"]
- add_learn_skill_command
- else
- process_custom_command(command)
- end
- end
- if !$game_temp.scene_class_index.nil?
- select($game_temp.scene_class_index)
- self.oy = $game_temp.scene_class_oy
- end
- $game_temp.scene_class_index = nil
- $game_temp.scene_class_oy = nil
- end
-
- #--------------------------------------------------------------------------
- # process_ok
- #--------------------------------------------------------------------------
- def process_ok
- $game_temp.scene_class_index = index
- $game_temp.scene_class_oy = self.oy
- super
- end
-
- #--------------------------------------------------------------------------
- # process_custom_command
- #--------------------------------------------------------------------------
- def process_custom_command(command)
- return unless YEA::CLASS_SYSTEM::CUSTOM_CLASS_COMMANDS.include?(command[0])
- show = YEA::CLASS_SYSTEM::CUSTOM_CLASS_COMMANDS[command[0]][1]
- continue = show <= 0 ? true : $game_switches[show]
- return unless continue
- text = command[1]
- switch = YEA::CLASS_SYSTEM::CUSTOM_CLASS_COMMANDS[command[0]][0]
- enabled = switch <= 0 ? true : $game_switches[switch]
- add_command(text, command[0], enabled)
- end
-
- #--------------------------------------------------------------------------
- # update
- #--------------------------------------------------------------------------
- def update
- super
- update_visible_windows
- end
-
- #--------------------------------------------------------------------------
- # update_visible_windows
- #--------------------------------------------------------------------------
- def update_visible_windows
- return if @current_index == current_symbol
- @current_index = current_symbol
- @item_window.refresh unless @item_window.nil?
- end
-
- #--------------------------------------------------------------------------
- # add_learn_skill_command
- #--------------------------------------------------------------------------
- def add_learn_skill_command
- return unless Switch.show_learn_skill
- name = YEA::LEARN_SKILL::COMMAND_NAME
- add_command(name, :learn_skill, true)
- end
-
- end # Window_ClassCommand
- #==============================================================================
- # ■ Window_ClassStatus
- #==============================================================================
- class Window_ClassStatus < Window_Base
-
- #--------------------------------------------------------------------------
- # initialize
- #--------------------------------------------------------------------------
- def initialize(dx, dy)
- super(dx, dy, window_width, fitting_height(4))
- @actor = nil
- end
-
- #--------------------------------------------------------------------------
- # window_width
- #--------------------------------------------------------------------------
- def window_width; Graphics.width - 160; end
-
- #--------------------------------------------------------------------------
- # actor=
- #--------------------------------------------------------------------------
- def actor=(actor)
- return if @actor == actor
- @actor = actor
- refresh
- end
-
- #--------------------------------------------------------------------------
- # refresh
- #--------------------------------------------------------------------------
- def refresh
- contents.clear
- return if @actor.nil?
- draw_actor_face(@actor, 0, 0)
- draw_actor_simple_status(@actor, 108, line_height / 2)
- end
-
- end # Window_ClassStatus
- #==============================================================================
- # ■ Window_ClassParam
- #==============================================================================
- class Window_ClassParam < Window_Base
-
- #--------------------------------------------------------------------------
- # initialize
- #--------------------------------------------------------------------------
- def initialize(dx, dy)
- super(dx, dy, window_width, Graphics.height - dy)
- @actor = nil
- @temp_actor = nil
- refresh
- end
-
- #--------------------------------------------------------------------------
- # window_width
- #--------------------------------------------------------------------------
- def window_width; return Graphics.width * 2 / 5; end
-
- #--------------------------------------------------------------------------
- # actor=
- #--------------------------------------------------------------------------
- def actor=(actor)
- return if @actor == actor
- @actor = actor
- refresh
- end
-
- #--------------------------------------------------------------------------
- # refresh
- #--------------------------------------------------------------------------
- def refresh
- contents.clear
- 8.times {|i| draw_item(0, line_height * i, i) }
- end
-
- #--------------------------------------------------------------------------
- # set_temp_actor
- #--------------------------------------------------------------------------
- def set_temp_actor(temp_actor)
- return if @temp_actor == temp_actor
- @temp_actor = temp_actor
- refresh
- end
-
- #--------------------------------------------------------------------------
- # draw_item
- #--------------------------------------------------------------------------
- def draw_item(dx, dy, param_id)
- draw_background_colour(dx, dy)
- draw_param_name(dx + 4, dy, param_id)
- draw_current_param(dx + 4, dy, param_id) if @actor
- drx = (contents.width + 22) / 2
- draw_right_arrow(drx, dy)
- draw_new_param(drx + 22, dy, param_id) if @temp_actor
- reset_font_settings
- end
-
- #--------------------------------------------------------------------------
- # draw_background_colour
- #--------------------------------------------------------------------------
- def draw_background_colour(dx, dy)
- colour = Color.new(0, 0, 0, translucent_alpha/2)
- rect = Rect.new(dx+1, dy+1, contents.width - 2, line_height - 2)
- contents.fill_rect(rect, colour)
- end
-
- #--------------------------------------------------------------------------
- # overwrite method: draw_param_name
- #--------------------------------------------------------------------------
- def draw_param_name(dx, dy, param_id)
- contents.font.size = YEA::CLASS_SYSTEM::PARAM_FONT_SIZE
- change_color(system_color)
- draw_text(dx, dy, contents.width, line_height, Vocab::param(param_id))
- end
-
- #--------------------------------------------------------------------------
- # overwrite method: draw_current_param
- #--------------------------------------------------------------------------
- def draw_current_param(dx, dy, param_id)
- change_color(normal_color)
- dw = (contents.width + 22) / 2
- draw_text(0, dy, dw, line_height, @actor.param(param_id).group, 2)
- reset_font_settings
- end
-
- #--------------------------------------------------------------------------
- # draw_right_arrow
- #--------------------------------------------------------------------------
- def draw_right_arrow(x, y)
- change_color(system_color)
- draw_text(x, y, 22, line_height, "→", 1)
- end
-
- #--------------------------------------------------------------------------
- # draw_new_param
- #--------------------------------------------------------------------------
- def draw_new_param(dx, dy, param_id)
- contents.font.size = YEA::CLASS_SYSTEM::PARAM_FONT_SIZE
- new_value = @temp_actor.param(param_id)
- change_color(param_change_color(new_value - @actor.param(param_id)))
- draw_text(0, dy, contents.width-4, line_height, new_value.group, 2)
- reset_font_settings
- end
-
- end # Window_ClassParam
- #==============================================================================
- # ■ Window_ClassList
- #==============================================================================
- class Window_ClassList < Window_Selectable
-
- #--------------------------------------------------------------------------
- # initialize
- #--------------------------------------------------------------------------
- def initialize(dx, dy)
- dw = Graphics.width - (Graphics.width * 2 / 5)
- dh = Graphics.height - dy
- super(dx, dy, dw, dh)
- @actor = nil
- @command_window = nil
- @status_window
- @data = []
- end
-
- #--------------------------------------------------------------------------
- # actor=
- #--------------------------------------------------------------------------
- def actor=(actor)
- return if @actor == actor
- @actor = actor
- @last_item = nil
- refresh
- self.oy = 0
- end
-
- #--------------------------------------------------------------------------
- # command_window=
- #--------------------------------------------------------------------------
- def command_window=(command_window)
- @command_window = command_window
- end
-
- #--------------------------------------------------------------------------
- # status_window=
- #--------------------------------------------------------------------------
- def status_window=(status_window)
- @status_window = status_window
- end
-
- #--------------------------------------------------------------------------
- # item_max
- #--------------------------------------------------------------------------
- def item_max; return @data ? @data.size : 1; end
-
- #--------------------------------------------------------------------------
- # item
- #--------------------------------------------------------------------------
- def item; return @data && index >= 0 ? @data[index] : nil; end
-
- #--------------------------------------------------------------------------
- # current_item_enabled?
- #--------------------------------------------------------------------------
- def current_item_enabled?; return enable?(@data[index]); end
-
- #--------------------------------------------------------------------------
- # include?
- #--------------------------------------------------------------------------
- def include?(item)
- return true if YEA::CLASS_SYSTEM::DEFAULT_UNLOCKS.include?(item.id)
- return @actor.unlocked_classes.include?(item.id)
- end
-
- #--------------------------------------------------------------------------
- # enable?
- #--------------------------------------------------------------------------
- def enable?(item)
- return false if item == @actor.class
- return true
- end
-
- #--------------------------------------------------------------------------
- # make_item_list
- #--------------------------------------------------------------------------
- def make_item_list
- @data = []
- for class_id in YEA::CLASS_SYSTEM::CLASS_ORDER
- next if $data_classes[class_id].nil?
- item = $data_classes[class_id]
- @data.push(item) if include?(item)
- end
- end
-
- #--------------------------------------------------------------------------
- # select_last
- #--------------------------------------------------------------------------
- def select_last
- case @command_window.current_symbol
- when :primary
- select(@data.index(@actor.class))
- when :subclass
- select(0) if @actor.subclass.nil?
- select(@data.index(@actor.subclass)) unless @actor.subclass.nil?
- else
- select(0)
- end
- end
-
- #--------------------------------------------------------------------------
- # draw_item
- #--------------------------------------------------------------------------
- def draw_item(index)
- item = @data[index]
- return if item.nil?
- rect = item_rect(index)
- rect.width -= 4
- reset_font_settings
- set_item_colour(item)
- draw_class_icon(item, rect)
- draw_class_name(item, rect)
- draw_class_level(item, rect)
- end
-
- #--------------------------------------------------------------------------
- # set_item_colour
- #--------------------------------------------------------------------------
- def set_item_colour(item)
- if item == @actor.class
- change_color(text_color(YEA::CLASS_SYSTEM::CURRENT_CLASS_COLOUR))
- elsif item == @actor.subclass
- change_color(text_color(YEA::CLASS_SYSTEM::SUBCLASS_COLOUR))
- else
- change_color(normal_color, enable?(item))
- end
- end
-
- #--------------------------------------------------------------------------
- # draw_class_icon
- #--------------------------------------------------------------------------
- def draw_class_icon(item, rect)
- icon = item.icon_index
- draw_icon(icon, rect.x, rect.y)
- end
-
- #--------------------------------------------------------------------------
- # draw_class_name
- #--------------------------------------------------------------------------
- def draw_class_name(item, rect)
- text = item.name
- draw_text(24, rect.y, rect.width-24, line_height, text)
- end
-
- #--------------------------------------------------------------------------
- # draw_class_level
- #--------------------------------------------------------------------------
- def draw_class_level(item, rect)
- return if YEA::CLASS_SYSTEM::MAINTAIN_LEVELS
- return if @actor.nil?
- level = @actor.class_level(item.id)
- contents.font.size = YEA::CLASS_SYSTEM::LEVEL_FONT_SIZE
- text = sprintf(YEA::CLASS_SYSTEM::CLASS_LEVEL, level.group)
- draw_text(rect, text, 2)
- end
-
- #--------------------------------------------------------------------------
- # update_help
- #--------------------------------------------------------------------------
- def update_help
- @help_window.set_item(item)
- return if @actor.nil?
- return if @status_window.nil?
- update_param_window
- end
-
- #--------------------------------------------------------------------------
- # update_param_window
- #--------------------------------------------------------------------------
- def update_param_window
- return if @last_item == item
- @last_item = item
- class_id = item.nil? ? @actor.class_id : item.id
- temp_actor = Marshal.load(Marshal.dump(@actor))
- temp_actor.temp_flag = true
- case @command_window.current_symbol
- when :primary
- temp_actor.change_class(class_id, YEA::CLASS_SYSTEM::MAINTAIN_LEVELS)
- when :subclass
- temp_actor.change_subclass(class_id)
- end
- @status_window.set_temp_actor(temp_actor)
- end
-
- #--------------------------------------------------------------------------
- # update_class
- #--------------------------------------------------------------------------
- def update_class
- @last_item = nil
- update_help
- refresh
- activate
- end
-
- #--------------------------------------------------------------------------
- # refresh
- #--------------------------------------------------------------------------
- def refresh
- make_item_list
- create_contents
- draw_all_items
- end
-
- end # Window_ClassList
- #==============================================================================
- # ■ Scene_Menu
- #==============================================================================
- class Scene_Menu < Scene_MenuBase
-
- #--------------------------------------------------------------------------
- # alias method: create_command_window
- #--------------------------------------------------------------------------
- alias scene_menu_create_command_window_cs create_command_window
- def create_command_window
- scene_menu_create_command_window_cs
- @command_window.set_handler(:class, method(:command_personal))
- end
-
- #--------------------------------------------------------------------------
- # alias method: on_personal_ok
- #--------------------------------------------------------------------------
- alias scene_menu_on_personal_ok_cs on_personal_ok
- def on_personal_ok
- case @command_window.current_symbol
- when :class
- SceneManager.call(Scene_Class)
- else
- scene_menu_on_personal_ok_cs
- end
- end
-
- end # Scene_Menu
- #==============================================================================
- # ■ Scene_Class
- #==============================================================================
- class Scene_Class < Scene_MenuBase
-
- #--------------------------------------------------------------------------
- # start
- #--------------------------------------------------------------------------
- def start
- super
- create_help_window
- create_command_window
- create_status_window
- create_param_window
- create_item_window
- relocate_windows
- end
-
- #--------------------------------------------------------------------------
- # create_command_window
- #--------------------------------------------------------------------------
- def create_command_window
- wy = @help_window.height
- @command_window = Window_ClassCommand.new(0, wy)
- @command_window.viewport = @viewport
- @command_window.help_window = @help_window
- @command_window.actor = @actor
- @command_window.set_handler(:cancel, method(:return_scene))
- @command_window.set_handler(:primary, method(:command_class_change))
- @command_window.set_handler(:subclass, method(:command_class_change))
- process_custom_class_commands
- return if $game_party.in_battle
- @command_window.set_handler(:pagedown, method(:next_actor))
- @command_window.set_handler(:pageup, method(:prev_actor))
- @command_window.set_handler(:learn_skill, method(:command_learn_skill))
- end
-
- #--------------------------------------------------------------------------
- # process_custom_class_commands
- #--------------------------------------------------------------------------
- def process_custom_class_commands
- for command in YEA::CLASS_SYSTEM::COMMANDS
- next unless YEA::CLASS_SYSTEM::CUSTOM_CLASS_COMMANDS.include?(command[0])
- called_method = YEA::CLASS_SYSTEM::CUSTOM_CLASS_COMMANDS[command[0]][2]
- @command_window.set_handler(command[0], method(called_method))
- end
- end
-
- #--------------------------------------------------------------------------
- # create_status_window
- #--------------------------------------------------------------------------
- def create_status_window
- wy = @help_window.height
- @status_window = Window_ClassStatus.new(@command_window.width, wy)
- @status_window.viewport = @viewport
- @status_window.actor = @actor
- end
-
- #--------------------------------------------------------------------------
- # create_param_window
- #--------------------------------------------------------------------------
- def create_param_window
- dx = Graphics.width - (Graphics.width * 2 / 5)
- dy = @status_window.y + @status_window.height
- @param_window = Window_ClassParam.new(dx, dy)
- @param_window.viewport = @viewport
- @param_window.actor = @actor
- end
-
- #--------------------------------------------------------------------------
- # create_item_window
- #--------------------------------------------------------------------------
- def create_item_window
- dy = @status_window.y + @status_window.height
- @item_window = Window_ClassList.new(0, dy)
- @item_window.help_window = @help_window
- @item_window.command_window = @command_window
- @item_window.status_window = @param_window
- @item_window.viewport = @viewport
- @item_window.actor = @actor
- @command_window.item_window = @item_window
- @item_window.set_handler(:ok, method(:on_class_ok))
- @item_window.set_handler(:cancel, method(:on_class_cancel))
- end
-
- #--------------------------------------------------------------------------
- # relocate_windows
- #--------------------------------------------------------------------------
- def relocate_windows
- return unless $imported["YEA-AceMenuEngine"]
- case Menu.help_window_location
- when 0 # Top
- @help_window.y = 0
- @command_window.y = @help_window.height
- @param_window.y = @command_window.y + @command_window.height
- when 1 # Middle
- @command_window.y = 0
- @help_window.y = @command_window.height
- @param_window.y = @help_window.y + @help_window.height
- else # Bottom
- @command_window.y = 0
- @param_window.y = @command_window.height
- @help_window.y = @param_window.y + @param_window.height
- end
- @status_window.y = @command_window.y
- @item_window.y = @param_window.y
- end
-
- #--------------------------------------------------------------------------
- # on_actor_change
- #--------------------------------------------------------------------------
- def on_actor_change
- @command_window.actor = @actor
- @status_window.actor = @actor
- @param_window.actor = @actor
- @item_window.actor = @actor
- @command_window.activate
- end
-
- #--------------------------------------------------------------------------
- # command_class_change
- #--------------------------------------------------------------------------
- def command_class_change
- @item_window.activate
- @item_window.select_last
- end
-
- #--------------------------------------------------------------------------
- # on_class_cancel
- #--------------------------------------------------------------------------
- def on_class_cancel
- @item_window.unselect
- @command_window.activate
- @param_window.set_temp_actor(nil)
- end
-
- #--------------------------------------------------------------------------
- # on_class_ok
- #--------------------------------------------------------------------------
- def on_class_ok
- Sound.play_equip
- class_id = @item_window.item.id
- maintain = YEA::CLASS_SYSTEM::MAINTAIN_LEVELS
- hp = @actor.hp * 1.0 / @actor.mhp
- mp = @actor.mp * 1.0 / [@actor.mmp, 1].max
- case @command_window.current_symbol
- when :primary
- @actor.change_class(class_id, maintain)
- when :subclass
- @actor.change_subclass(class_id)
- else
- @item_window.activate
- return
- end
- @actor.hp = (@actor.mhp * hp).to_i
- @actor.mp = (@actor.mmp * mp).to_i
- @status_window.refresh
- @item_window.update_class
- end
-
- #--------------------------------------------------------------------------
- # new method: command_learn_skill
- #--------------------------------------------------------------------------
- def command_learn_skill
- return unless $imported["YEA-LearnSkillEngine"]
- SceneManager.call(Scene_LearnSkill)
- end
-
- #--------------------------------------------------------------------------
- # command_name1
- #--------------------------------------------------------------------------
- def command_name1
- # Do nothing.
- end
-
- #--------------------------------------------------------------------------
- # command_name2
- #--------------------------------------------------------------------------
- def command_name2
- # Do nothing.
- end
-
- end # Scene_Class
- #==============================================================================
- #
- # ▼ End of File
- #
- #==============================================================================
复制代码- #==============================================================================
- #
- # ▼ Yanfly Engine Ace - Class Specifics v1.00
- # -- Last Updated: 2011.12.23
- # -- Level: Normal
- # -- Requires: YEA - Class System v1.03+
- #
- #==============================================================================
- $imported = {} if $imported.nil?
- $imported["YEA-ClassSpecifics"] = true
- #==============================================================================
- # ▼ Updates
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- # 2011.12.23 - Started Script and Finished.
- #
- #==============================================================================
- # ▼ Introduction
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- # This script allows for certain classes to be primary-only or sublcass-only.
- # In addition to that, subclasses can require certain classes to be primary
- # classes in order to be applied.
- #
- #==============================================================================
- # ▼ Instructions
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- # To install this script, open up your script editor and copy/paste this script
- # to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save.
- #
- # -----------------------------------------------------------------------------
- # Class Notetags - These notetags go in the class notebox in the database.
- # -----------------------------------------------------------------------------
- # <primary only>
- # Makes this class equippable only if it's the primary class.
- #
- # <subclass only>
- # Makes this class equippable only if it's the subclass class.
- #
- # <subclass to: x>
- # <subclass to: x, x>
- # This makes the class subclass only and only equippable if the primary class
- # is one of the listed x classes.
- #
- #==============================================================================
- # ▼ Compatibility
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- # This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
- # it will run with RPG Maker VX without adjusting.
- #
- # This script requires Yanfly Engine Ace - Class System v1.03+.
- #
- #==============================================================================
- # ▼ Editting anything past this point may potentially result in causing
- # computer damage, incontinence, explosion of user's head, coma, death, and/or
- # halitosis so edit at your own risk.
- #==============================================================================
- if $imported["YEA-ClassSystem"]
- module YEA
- module REGEXP
- module CLASS
-
- PRIMARY_ONLY = /<(?:PRIMARY_ONLY|primary only)>/i
- SUBCLASS_ONLY = /<(?:SUBCLASS_ONLY|subclass only)>/i
- SUBCLASS_TO = /<(?:SUBCLASS_TO|subclass to):[ ]*(\d+(?:\s*,\s*\d+)*)>/i
-
- end # CLASS
- end # REGEXP
- end # YEA
- #==============================================================================
- # ■ DataManager
- #==============================================================================
- module DataManager
-
- #--------------------------------------------------------------------------
- # alias method: load_database
- #--------------------------------------------------------------------------
- class <<self; alias load_database_csp load_database; end
- def self.load_database
- load_database_csp
- load_notetags_csp
- end
-
- #--------------------------------------------------------------------------
- # new method: load_notetags_csp
- #--------------------------------------------------------------------------
- def self.load_notetags_csp
- for obj in $data_classes
- next if obj.nil?
- obj.load_notetags_csp
- end
- end
-
- end # DataManager
- #==============================================================================
- # ■ RPG::Class
- #==============================================================================
- class RPG::Class < RPG::BaseItem
-
- #--------------------------------------------------------------------------
- # public instance variables
- #--------------------------------------------------------------------------
- attr_accessor :primary_only
- attr_accessor :subclass_only
- attr_accessor :subclass_to
-
- #--------------------------------------------------------------------------
- # common cache: load_notetags_csp
- #--------------------------------------------------------------------------
- def load_notetags_csp
- @primary_only = false
- @subclass_only = false
- @subclass_to = []
- #---
- self.note.split(/[\r\n]+/).each { |line|
- case line
- #---
- when YEA::REGEXP::CLASS::PRIMARY_ONLY
- @primary_only = true
- @subclass_only = false
- @subclass_to = []
- when YEA::REGEXP::CLASS::SUBCLASS_ONLY
- @primary_only = false
- @subclass_only = true
- when YEA::REGEXP::CLASS::SUBCLASS_TO
- @primary_only = false
- @subclass_only = true
- $1.scan(/\d+/).each { |num|
- @subclass_to.push(num.to_i) if num.to_i > 0 }
- end
- } # self.note.split
- #---
- end
-
- end # RPG::Class
- #==============================================================================
- # ■ Game_Actor
- #==============================================================================
- class Game_Actor < Game_Battler
-
- #--------------------------------------------------------------------------
- # alias method: change_class
- #--------------------------------------------------------------------------
- alias game_actor_change_class_csp change_class
- def change_class(class_id, keep_exp = false)
- return if $data_classes[class_id].subclass_only
- game_actor_change_class_csp(class_id, keep_exp)
- correct_subclass
- end
-
- #--------------------------------------------------------------------------
- # alias method: change_subclass
- #--------------------------------------------------------------------------
- alias game_actor_change_subclass_csp change_subclass
- def change_subclass(class_id)
- return unless subclass_requirements_met?(class_id)
- game_actor_change_subclass_csp(class_id)
- end
-
- #--------------------------------------------------------------------------
- # new method: subclass_requirements_met?
- #--------------------------------------------------------------------------
- def subclass_requirements_met?(class_id)
- subclass = $data_classes[class_id]
- return false if subclass.primary_only
- return subclass_to?(class_id) if subclass.subclass_to != []
- return true
- end
-
- #--------------------------------------------------------------------------
- # new method: subclass_to?
- #--------------------------------------------------------------------------
- def subclass_to?(class_id)
- return true if class_id == 0
- subclass = $data_classes[class_id]
- return false if subclass.nil?
- for class_id in subclass.subclass_to
- return true if class_id == self.class.id
- end
- return false
- end
-
- #--------------------------------------------------------------------------
- # new method: correct_subclass
- #--------------------------------------------------------------------------
- def correct_subclass
- return if @subclass_id == 0
- subclass = $data_classes[@subclass_id]
- return if subclass.nil?
- return if subclass.subclass_to == []
- @subclass_id = 0 if !subclass_to?(@subclass_id)
- end
-
- end # Game_Actor
- #==============================================================================
- # ■ Window_ClassList
- #==============================================================================
- class Window_ClassList < Window_Selectable
-
- #--------------------------------------------------------------------------
- # alias method: enable?
- #--------------------------------------------------------------------------
- alias window_classlist_enable_csp enable?
- def enable?(item)
- case @command_window.current_symbol
- when :primary
- return false if item.subclass_only
- when :subclass
- return false if item.primary_only
- return @actor.subclass_to?(item.id) if item.subclass_to != []
- end
- return window_classlist_enable_csp(item)
- end
-
- end # Window_ClassList
- end # $imported["YEA-ClassSystem"]
- #==============================================================================
- #
- # ▼ End of File
- #
- #==============================================================================
复制代码 [fly]我想知道的是用什么脚本可以让指定角色或当前角色或队伍里指定角色解锁可以转换的新职业![/fly] |
|