赞 | 40 |
VIP | 559 |
好人卡 | 234 |
积分 | 47 |
经验 | 251834 |
最后登录 | 2024-10-11 |
在线时间 | 5240 小时 |
Lv3.寻梦者 (版主) 八宝粥的基叔
- 梦石
- 0
- 星屑
- 4684
- 在线时间
- 5240 小时
- 注册时间
- 2009-4-29
- 帖子
- 14318
|
本帖最后由 protosssonny 于 2012-10-13 19:33 编辑
先上范例:http://pan.baidu.com/share/link?shareid=84105&uk=875076719
初步要求按DE君的方法实现。
关于进阶要求有如下特点:
特点1——【保留默认】
当角色身上没有任何状态时,按照系统默认,依旧是扣10点HP。
特点2——【同时支持纯数字和百分比】
在状态的备注栏加入这样的备注:<MapDamage=x,y>,其中x和y均可以是数字或百分比。其中x表示对hp的作用,y表示对mp的作用。
比如<MapDamage=5%,10>表示在有害地形里每次受到的伤害就是扣减5%HP和10点MP。这里已经完全实现了进阶要求。
特点3——【可叠加性】
当角色身上同时存在多个地形伤害加成状态时,HP伤害和MP伤害均可加成。
假定角色最大HP和MP均为200,现在附加3个地形伤害加成状态:
状态1:<MapDamage=8,12>;
状态2:<MapDamage=5%,10>;
状态3:<MapDamage=7%,6%>
最终的HP伤害为 8+200×5%+200×7%=32
最终的MP伤害为12+10+200×6%=34
注意:
当角色同时存在没有备注<MapDamage=8,12>的状态和按DE君的方法实现的状态时,有备注的状态的优先级高于DE君的方法实现的状态。
比方说在范例中,如果26号伤害免疫状态和27号有备注的伤害加成状态同时存在时,26号免疫状态就无效了。
截图在这里:
受伤害时屏幕闪红:
HP和MP的伤害:
脚本在这里:- #encoding:utf-8
- #==============================================================================
- # ■ Game_Actor
- #------------------------------------------------------------------------------
- # 管理角色的类。
- # 本类在 Game_Actors 类 ($game_actors) 的内部使用。
- # 具体使用请查看 Game_Party 类 ($game_party) 。
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ● 地形伤害的处理
- #--------------------------------------------------------------------------
- def execute_floor_damage
- dam = compute_total_damage
- damage_hp_0 = dam[0]
- damage_hp_1 = self.mhp * dam[1]
- damage_mp_0 = dam[2]
- damage_mp_1 = self.mmp * dam[3]
- damage_hp = (damage_hp_0 + damage_hp_1).to_i
- damage_mp = (damage_mp_0 + damage_mp_1).to_i
- damage = damage_hp + damage_mp
- self.hp -= damage_hp
- self.mp -= damage_mp
- if damage == 0
- damage = (basic_floor_damage * fdr).to_i
- self.hp -= [damage, max_floor_damage].min
- end
- perform_map_damage_effect if damage > 0
- end
-
- #--------------------------------------------------------------------------
- # ● 自定义函数 计算叠加伤害
- #--------------------------------------------------------------------------
- def compute_total_damage
- total_damage = [0,0,0,0]
- for i in self.states
- next unless $data_states[i.id].note.include?("<MapDamage=")
- sta = $data_states[i.id].note
- sta = sta.split(/([=,>])/) # 将备注按各种符号分解成数组
- unless sta[2].include?("%")# 第一个数带有%时按百分比处理
- sta[2] = sta[2].to_i
- total_damage[0] += sta[2]
- else
- sta[2] = sta[2].to_i / 100.0
- total_damage[1] += sta[2]
- end
- unless sta[4].include?("%")# 第二个数带有%时按百分比处理
- sta[4] = sta[4].to_i
- total_damage[2] += sta[4]
- else
- sta[4] = sta[4].to_i / 100.0
- total_damage[3] += sta[4]
- end
- end
- return total_damage # 这是一个数组[整数,浮点数,整数,浮点数]
- end
- end
复制代码 |
评分
-
查看全部评分
|