赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 29377 |
最后登录 | 2013-8-7 |
在线时间 | 1 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 1 小时
- 注册时间
- 2008-8-3
- 帖子
- 976
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
最新动态:
9.26 刚又发现几个装备栏显示排列问题,已修正。另外注意状态栏备写的格式是<MDFR n>,中间有空格,n为使能力变为n%,而不是<MDF n>
--------------------------------------------------------------------------
VX默认的能力太少了,只有4个……貌似挺多人想增加新能力呢……不过过程比较复杂
就试着写个教程吧:
比如说你想加一个“魔抗”—— mdf,可以按照这些步骤:
(以下凡是有做改动的脚本页都建议备份,就是把原来的脚本复制到MAIN下面,以便改动失败时恢复。还有修改脚本的一大关键就是要擅于搜索关键字、擅于模仿原有代码)
建议备份以下脚本页
- Game_Actor
- Game_Actors
- Game_Battler
- Window_EquipStatus
- Scene_Equip
- Window_Base
- Window_Status
复制代码
1.如果你希望自己加的 魔抗 能够随着等级提升而自动增加,可以做一个魔抗初始值orimdf和魔抗-等级比率mdfpl,就是每升一级增加的魔抗数值。
Game_Actor中, 开始就有个 ●定义实例变量
这一部分中加入
-
- attr_accessor :orimdf # 魔抗初始值
- attr_accessor :mdfpl # mdf per level 魔抗-等级比率
复制代码
然后在Game_Actors里面为每个角色设orimdf、mdfpl初始值:
- #==============================================================================
- # ■ Game_Actors
- #------------------------------------------------------------------------------
- # 处理角色排列的类。本类的实例请参考
- # $game_actors。
- #==============================================================================
- class Game_Actors
- #--------------------------------------------------------------------------
- # ● 初始化对象
- #--------------------------------------------------------------------------
- def initialize
- @data = []
- end
- #--------------------------------------------------------------------------
- # ● 获取角色
- # actor_id : 角色 ID
- #--------------------------------------------------------------------------
- def [](actor_id)
- if @data[actor_id] == nil and $data_actors[actor_id] != nil
- @data[actor_id] = Game_Actor.new(actor_id)
- #------------------以下--------------------------------------------
- case actor_id #根据角色编号不同
- when 1 #1号角色
- @data[actor_id].orimdf = 20 #魔抗初始值
- @data[actor_id].mdfpl = 6 #魔抗系数初始值
- when 2 #2号角色
- @data[actor_id].orimdf = 10 #魔抗初始值
- @data[actor_id].mdfpl = 2 #其他角色以此类推自己加
- else
- @data[actor_id].orimdf = 5 #默认的情况下
- @data[actor_id].mdfpl = 1
- end
- #------------------以上--------------------------------------------
- end
- return @data[actor_id]
- end
- end
复制代码
2.然后设置base_mdf,在Game_Actor里面不是有很多 # ● 获取基本攻击力、 # ● 获取基本防御力、 # ● 获取基本精神力 这一类的东东?
那么我们也加一个:
-
- #--------------------------------------------------------------------------
- # ● 获取基本魔抗
- #--------------------------------------------------------------------------
- def base_mdf
- n = orimdf + mdfpl * level #魔抗裸体基本值=初始值+等级提升值
- for item in equips.compact do n += item.mdf end
- return n
- end
复制代码
3.接下来要做的事,就是在脚本编辑器左边,右键单击,搜索 “ atk ”,然后看看那些地方对atk的计算方法做了定义,就依样画葫芦添加一个mdf的对应定义。
Vocab中的就不用加了,
(以下为修改提示,“改”为修改相应名字的函数,“加”为直接添加到类(class)中函数与函数之间。最好还是自己弄懂,利用搜索找到正确位置增改)
Game_Battler
改
- #--------------------------------------------------------------------------
- # ● 清理能力值增加值
- #--------------------------------------------------------------------------
- def clear_extra_values
- @maxhp_plus = 0
- @maxmp_plus = 0
- @atk_plus = 0
- @def_plus = 0
- @spi_plus = 0
- @mdf_plus = 0 #这里加
- @agi_plus = 0
- end
复制代码
加
- #--------------------------------------------------------------------------
- # ● 获取魔抗
- #--------------------------------------------------------------------------
- def mdf
- n = [[base_mdf + @mdf_plus, 1].max, 999].min
- for state in states do n *= state.mdf_rate / 100.0 end
- n = [[Integer(n), 1].max, 999].min
- return n
- end
复制代码
加
- #--------------------------------------------------------------------------
- # ● 设置魔抗增加值
- # new_mdf : 新的魔抗
- #--------------------------------------------------------------------------
- def mdf=(new_mdf)
- @mdf_plus += new_mdf - self.mdf
- @mdf_plus = [[@mdf_plus, -999].max, 999].min
- end
复制代码
Window_EquipStatus
改
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- draw_actor_name(@actor, 4, 0)
- #这里的NWLH原来全部是WLH,NWLH是新的行高基本值,在下面修改状态栏显示部分会提到
- draw_parameter(0, NWLH * 1, 0)
- draw_parameter(0, NWLH * 2, 1)
- draw_parameter(0, NWLH * 3, 2)
- draw_parameter(0, NWLH * 4, 3)
- draw_parameter(0, NWLH * 5, 4) #这里加
- end
复制代码
改
- #--------------------------------------------------------------------------
- # ● 设置装备变更后的能力值
- # new_atk : 装备变更后的攻击力
- # new_def : 装备变更后的防御力
- # new_spi : 装备变更后的精神力
- # new_mdf : 装备变更后的魔抗
- # new_agi : 装备变更后的敏捷性
- #--------------------------------------------------------------------------
- def set_new_parameters(new_atk, new_def, new_spi, new_mdf, new_agi)
- if @new_atk != new_atk or @new_def != new_def or
- @new_spi != new_spi or @new_mdf != new_mdf or
- @new_agi != new_agi #这里加
- @new_atk = new_atk
- @new_def = new_def
- @new_spi = new_spi
- @new_mdf = new_mdf #这里加
- @new_agi = new_agi
- refresh
- end
- end
复制代码
改
- #--------------------------------------------------------------------------
- # ● 描绘能力值
- # x : 描绘目标 X 坐标
- # y : 描绘目标 Y 坐标
- # type : 能力值种类 (0~4)
- #--------------------------------------------------------------------------
- def draw_parameter(x, y, type)
- case type
- when 0
- name = Vocab::atk
- value = @actor.atk
- new_value = @new_atk
- when 1
- name = Vocab::def
- value = @actor.def
- new_value = @new_def
- when 2
- name = Vocab::spi
- value = @actor.spi
- new_value = @new_spi
- when 3
- name = "魔抗"
- value = @actor.mdf
- new_value = @new_mdf
- when 4
- name = Vocab::agi
- value = @actor.agi
- new_value = @new_agi
- end
- self.contents.font.color = system_color
- self.contents.draw_text(x + 4, y, 80, NWLH, name)
- self.contents.font.color = normal_color
- self.contents.draw_text(x + 70, y, 30, NWLH, value, 2)
- self.contents.font.color = system_color
- self.contents.draw_text(x + 100, y, 20, NWLH, "→", 1)
- if new_value != nil
- self.contents.font.color = new_parameter_color(value, new_value)
- self.contents.draw_text(x + 125, y, 30, NWLH, new_value, 2)
- end
- end
- #<-这里新手使用者可能会漏写个CALSS的end,如果打开游戏出错说SyntaxError的错误,就可能是这里还要再加一个end
复制代码
Scene_Equip
改
- #--------------------------------------------------------------------------
- # ● 更新状态窗口
- #--------------------------------------------------------------------------
- def update_status_window
- if @equip_window.active
- @status_window.set_new_parameters(nil, nil, nil, nil, nil) #多加一个nil,
- elsif @item_window.active
- temp_actor = @actor.clone
- temp_actor.change_equip(@equip_window.index, @item_window.item, true)
- new_atk = temp_actor.atk
- new_def = temp_actor.def
- new_spi = temp_actor.spi
- new_mdf = temp_actor.mdf #这里加
- new_agi = temp_actor.agi
- @status_window.set_new_parameters(new_atk, new_def, new_spi, new_mdf, new_agi) #这里
- end
- @status_window.update
- end
复制代码
以下改动是为了在状态栏显示新能力,可以自己改显示字体大小:
Window_Base
改
- NWLH = 18 #新的行高基本值,可以自己改后面的数字,调整字体大小
- #--------------------------------------------------------------------------
- # ● 描绘能力值
- # actor : 角色
- # x : 描绘目标 X 坐标
- # y : 描绘目标 Y 坐标
- # type : 能力值种类 (0~4)
- #--------------------------------------------------------------------------
- def draw_actor_parameter(actor, x, y, type)
- #-------------------更改字体大小--------------------------
- self.contents.font.size = NWLH
- #-------------------更改字体大小--------------------------
- case type
- when 0
- parameter_name = Vocab::atk
- parameter_value = actor.atk
- when 1
- parameter_name = Vocab::def
- parameter_value = actor.def
- when 2
- parameter_name = Vocab::spi
- parameter_value = actor.spi
- when 3
- parameter_name = "魔抗"
- parameter_value = actor.mdf
- when 4
- parameter_name = Vocab::agi
- parameter_value = actor.agi
- end
- self.contents.font.color = system_color
-
- self.contents.draw_text(x, y, 120, NWLH , parameter_name) #NWLH原为WLH
-
- self.contents.font.color = normal_color
-
- self.contents.draw_text(x + 90, y, 36, NWLH , parameter_value, 2) #NWLH原为WLH
- end
复制代码
Window_Status
改
- #--------------------------------------------------------------------------
- # ● 描绘能力值
- # x : 描绘目标 X 坐标
- # y : 描绘目标 Y 坐标
- #--------------------------------------------------------------------------
- def draw_parameters(x, y)
- draw_actor_parameter(@actor, x, y + NWLH * 0, 0)
- draw_actor_parameter(@actor, x, y + NWLH * 1, 1)
- draw_actor_parameter(@actor, x, y + NWLH * 2, 2)
- draw_actor_parameter(@actor, x, y + NWLH * 3, 3)
- draw_actor_parameter(@actor, x, y + NWLH * 4, 4)
- end
-
复制代码
4.然后让装备和状态也能增加新能力(插件型脚本,放在素材区使用):
- #============================================================================
- # 装备、状态增加新能力
- # 将本脚本放在素材区(MAIN上面,其他脚本下面)
- # 在数据库装备设置和状态设置里面的备注栏写上 <MDF n> 中间有空格,n为装备增加的能力值,以及状态使能力变为n%
- #============================================================================
- class RPG::BaseItem
-
- def mdf #魔抗
- m = 0
- self.note.split(/{\r\n}+/).each { |line|
- m = $1.to_i if line =~ /\<MDF (\d+)\>/
- }
- return m
- end
- end
- class RPG::State
-
- def mdf_rate #魔抗改变比率
- m = 100
- self.note.split(/{\r\n}+/).each { |line|
- m = $1.to_i if line =~ /\<MDFR (\d+)\>/
- }
- return m
- end
-
- end
复制代码
好吧,这样应该就可以了吧……呼呼
差点忘了说了,要想让魔抗在战斗中实际造成影响,可以改Game_Battler里面的相关位置,比如默认设定是精神力也当魔抗用的,现在可以改改,找到make_obj_damage_value这个函数,改成
- #--------------------------------------------------------------------------
- # ● 计算特技以及物品造成的伤害
- # user : 使用特技以及物品的人
- # obj : 特技以及物品
- # 将结果代入 @hp_damage 或 @mp_damage。
- #--------------------------------------------------------------------------
- def make_obj_damage_value(user, obj)
- damage = obj.base_damage # 获取基本伤害
- if damage > 0 # 伤害为正数
- damage += user.atk * 4 * obj.atk_f / 100 # 打击关系度: 使用者
- damage += user.spi * 2 * obj.spi_f / 100 # 精神关系度: 使用者
- unless obj.ignore_defense # 无视防御力以外
- damage -= self.def * 2 * obj.atk_f / 100 # 打击关系度: 对象者
- #----------------------------------------------------------------
- damage -= self.mdf * 1 * obj.spi_f / 100 # 魔抗关系度: 对象者
- #----------------------------------------------------------------
- end
- damage = 0 if damage < 0 # 减少为 0
- elsif damage < 0 # 伤害为负数
- damage -= user.atk * 4 * obj.atk_f / 100 # 打击关系度: 使用者
- damage -= user.spi * 2 * obj.spi_f / 100 # 精神关系度: 使用者
- end
- damage *= elements_max_rate(obj.element_set) # 属性修正
- damage /= 100
- damage = apply_variance(damage, obj.variance) # 分散
- damage = apply_guard(damage) # 防御修正
- if obj.damage_to_mp
- @mp_damage = damage # MP 伤害
- else
- @hp_damage = damage # HP 伤害
- end
- end
复制代码
饭吃了一半,想起忘了给敌人加魔抗,又回来改了……
插件型脚本:
- #============================================================================
- # 敌人增加新能力
- # 将本脚本放在素材区(MAIN上面,其他脚本下面)
- # 在数据库敌人设置里面的备注栏写上 <MDF n> 中间有空格,n为敌人魔抗
- # 敌人魔抗不写则与精神一样
- #============================================================================
- class RPG::Enemy
- #--------------------------------------------------------------------------
- # ● 获取基本魔抗
- #--------------------------------------------------------------------------
- def mdf
- m = self.spi
- self.note.split(/{\r\n}+/).each { |line|
- m = $1.to_i if line =~ /\<MDF (\d+)\>/
- }
- return m
- end
- end
- #==============================================================================
- # ■ Game_Enemy
- #------------------------------------------------------------------------------
- # 处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的
- # 内部使用。
- #==============================================================================
- class Game_Enemy < Game_Battler
- #--------------------------------------------------------------------------
- # ● 获取基本魔抗
- #--------------------------------------------------------------------------
- def base_mdf
- return enemy.mdf
- end
- end
复制代码
范例工程:
http://rpg.blue/upload_program/g ... y DRG_102859412.rar
范例中有改动的脚本名前面都加了"!"作为醒目标志,方便各位找到,不过未对相关脚本进行备份,因为是范例做坏了就删了重来……但是希望新人同志们在自己正在制作的游戏中养成备份的习惯~~
如果有什么疏漏之处麻烦指出…… |
|