设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3821|回复: 3
打印 上一主题 下一主题

[已经解决] 【★】如何做一种状态,使角色不受有害地形伤害?

[复制链接]

Lv4.逐梦者 (管理员)

砂上描绘的愿想

梦石
15
星屑
4019
在线时间
5070 小时
注册时间
2012-1-15
帖子
4617

开拓者贵宾短篇七成年组亚军剧作品鉴家

跳转到指定楼层
1
发表于 2012-10-8 22:32:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Mic_洛洛 于 2012-10-15 22:09 编辑

本问题为【Ace推荐问答计划】活动问题。
详情请点击:http://rpg.blue/forum.php?mod=viewthread&tid=251118

初步要求:制作出一种状态,使角色被附加该状态后,不会受到有害地形伤害。

进阶要求:使有害地形的伤害值能自由变更,例如在状态的备注中写上<MapDamage=5%,10>,于是被附加这种状态后,在有害地形里每次受到的伤害就是扣减5%HP和10点MP。HP和MP的扣减最好都能同时支持百分比和常数。如果都为0时,屏幕不闪动红色,也就是不受有害地形伤害。

点评

嗷呜,安安,请求给予审核。  发表于 2012-10-12 13:33
若后退就皆成谎言。

Lv3.寻梦者

伴侣:北岛谜烟

梦石
0
星屑
2892
在线时间
3547 小时
注册时间
2012-8-7
帖子
12181

贵宾

2
发表于 2012-10-8 22:56:21 | 只看该作者


数据库中,状态,新建一种状态。名字就暂且难听一点,别介意。
在特性里面增加【能力】,特殊能力,地形伤害处,默认是100%,即受到地形伤害时,伤害是默认的。
如果调成0%,就是不受到伤害,200%即双倍伤害。
解除方法推荐使用【步数】,因为这是一种益的状态,不是战斗中打打就解除的。


其他无能……

评分

参与人数 1梦石 +2 收起 理由
迷糊的安安 + 2 最简单的活动问题被秒杀了XD

查看全部评分

本人收不到提醒(点评|回复|@人),总之有事情到空间留言一起普通普通
回复

使用道具 举报

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4509
在线时间
5228 小时
注册时间
2009-4-29
帖子
14318

贵宾

3
发表于 2012-10-10 16:26:11 | 只看该作者
本帖最后由 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的伤害:

脚本在这里:
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Game_Actor
  4. #------------------------------------------------------------------------------
  5. #  管理角色的类。
  6. #   本类在 Game_Actors 类 ($game_actors) 的内部使用。
  7. #   具体使用请查看 Game_Party 类 ($game_party) 。
  8. #==============================================================================

  9. class Game_Actor < Game_Battler
  10.   #--------------------------------------------------------------------------
  11.   # ● 地形伤害的处理
  12.   #--------------------------------------------------------------------------
  13.   def execute_floor_damage
  14.     dam = compute_total_damage
  15.     damage_hp_0 = dam[0]
  16.     damage_hp_1 = self.mhp * dam[1]
  17.     damage_mp_0 = dam[2]
  18.     damage_mp_1 = self.mmp * dam[3]
  19.     damage_hp = (damage_hp_0 + damage_hp_1).to_i
  20.     damage_mp = (damage_mp_0 + damage_mp_1).to_i
  21.     damage = damage_hp + damage_mp
  22.     self.hp -= damage_hp
  23.     self.mp -= damage_mp
  24.     if damage == 0
  25.       damage = (basic_floor_damage * fdr).to_i
  26.       self.hp -= [damage, max_floor_damage].min
  27.     end
  28.     perform_map_damage_effect if damage > 0
  29.   end
  30.   
  31.   #--------------------------------------------------------------------------
  32.   # ● 自定义函数 计算叠加伤害
  33.   #--------------------------------------------------------------------------
  34.   def compute_total_damage
  35.     total_damage = [0,0,0,0]
  36.     for i in self.states
  37.       next unless $data_states[i.id].note.include?("<MapDamage=")
  38.       sta = $data_states[i.id].note
  39.       sta = sta.split(/([=,>])/) # 将备注按各种符号分解成数组
  40.       unless sta[2].include?("%")# 第一个数带有%时按百分比处理
  41.         sta[2] = sta[2].to_i
  42.         total_damage[0] += sta[2]
  43.       else
  44.         sta[2] = sta[2].to_i / 100.0
  45.         total_damage[1] += sta[2]
  46.       end
  47.       unless sta[4].include?("%")# 第二个数带有%时按百分比处理
  48.         sta[4] = sta[4].to_i
  49.         total_damage[2] += sta[4]
  50.       else
  51.         sta[4] = sta[4].to_i / 100.0
  52.         total_damage[3] += sta[4]
  53.       end
  54.     end
  55.     return total_damage          # 这是一个数组[整数,浮点数,整数,浮点数]
  56.   end  
  57. end   
复制代码

点评

嗷呜,果然是传错了一个工程,不好意思。现在好了。[url=home.php?mod=space&username=Mic_洛洛]@Mic_洛洛[/url]  发表于 2012-10-11 16:36
{= =}P叔,你的工程上传错了。麻烦你重新传一次的说……{^^}  发表于 2012-10-11 11:42

评分

参与人数 1梦石 +4 收起 理由
Mic_洛洛 + 4 P叔通过此试炼!向其他问题进攻吧^^.

查看全部评分

《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复

使用道具 举报

Lv3.寻梦者

Assassin-K

梦石
0
星屑
3468
在线时间
2281 小时
注册时间
2012-5-23
帖子
4065

贵宾

4
发表于 2012-10-12 22:11:58 | 只看该作者
protosssonny 发表于 2012-10-10 16:26
先上范例:http://pan.baidu.com/share/link?shareid=82703&uk=875076719

初步要求按DE君的方法实现。

刚测试了P叔的范例工程~
脚本有BUG喔~
血掉光了,就出错了。= =||

求P叔改善的说~

点评

嗷呜,已经改好了,谢谢洛洛的提醒^ ^  发表于 2012-10-13 19:34

◆ROZONE◆
>洛子又要去流浪地球了……
>如果你看到我在线,又没动静,那只能说明我在挂机……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-4 11:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表