| 赞 | 40  | 
 
| VIP | 559 | 
 
| 好人卡 | 234 | 
 
| 积分 | 47 | 
 
| 经验 | 251834 | 
 
| 最后登录 | 2025-10-7 | 
 
| 在线时间 | 5233 小时 | 
 
 
 
 
 
Lv3.寻梦者 (版主) 八宝粥的基叔 
	- 梦石
 - 0 
 
        - 星屑
 - 4687 
 
        - 在线时间
 - 5233 小时
 
        - 注册时间
 - 2009-4-29
 
        - 帖子
 - 14320
 
 
  
 
 | 
	
 本帖最后由 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   
 
  复制代码 |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |