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

Project1

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

[已经解决] 技能消耗HP怎么做

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9727
在线时间
3227 小时
注册时间
2011-3-24
帖子
739

开拓者

跳转到指定楼层
1
发表于 2012-12-2 14:02:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
搜不到一个能用的啊 ......
所以求一个技能消耗HP的方法- -
最好是脚本、谢谢
>>→Lanza Games 2020←<<
Lanza Schneider
浪子心,孤星梦永远流浪……
~不会放弃,我的精力永远充沛~
>>>>>Lanza Adventure<<<<<
>>>>>Lanza的新年派对!<<<<<
>>>>>Lanza的口袋心脏病!<<<<<

Lv1.梦旅人

梦石
0
星屑
52
在线时间
586 小时
注册时间
2012-5-31
帖子
768
2
发表于 2012-12-2 15:58:09 | 只看该作者
本帖最后由 wwwcctvty 于 2012-12-2 16:03 编辑




技能中带个公共事件,公共事件中写上你要消耗的HP值 。很多工程中都在用这个方法呀




当然。我这只是简单设置的。减HP值用脚本写的话也是可以的

点评

那你就在公共事件里设置个条件分歧,  发表于 2012-12-2 23:17
嗯,然后血不够也能用技能= =  发表于 2012-12-2 19:42
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
157 小时
注册时间
2012-1-24
帖子
124
3
发表于 2012-12-2 16:30:20 | 只看该作者
设置2个技能,技能A为对敌人的效果,技能B为己方队员受到伤害的效果(可以输入固定常数),在技能A的公共事件里设置角色使用技能B的事件,别忘了把技能B的MP消耗量改成0

点评

挺好的,不过我的耗HP技能太多,这样子技能数量会骤增......  发表于 2012-12-2 19:44
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
94 小时
注册时间
2011-7-2
帖子
79
4
发表于 2012-12-3 19:41:47 | 只看该作者
本帖最后由 hcm 于 2012-12-17 12:49 编辑

这个功能的实现并不复杂,但是设定每个技能消耗的HP反而很麻烦
尤其是耗血还可以以当前血量的百分比或按最大血量的百分比减血,这里只给出固定数值的减血
我是在数据库—系统—属性里设定的。先留出14个连续的属性,比如10号到23号
(给他们取名为1,2,3,5,10,20,30,50,100,200……像这样设定下去一直到2000为止)
之后只要在技能的设定里 钩上要消耗的血量,比如消耗132点血,就钩上18,16及11号属性,即 100 + 30 + 2 =132 (如果精度不用这么高,可以把基础值设高点)
之后插入脚本,零散的写起来好麻烦,直接给成品好了,想修改具体的数值的话,可以直接看最下面的◆核心部分◆ “计算耗血量”
  1. #==============================================================================
  2. # ■ Game_Battler (分割定义 3)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
  5. # 超级类来使用。
  6. #==============================================================================

  7. class Game_Battler
  8.   #--------------------------------------------------------------------------
  9.   # ● 可以使用特技的判定
  10.   #     skill_id : 特技 ID
  11.   #--------------------------------------------------------------------------
  12. def skill_can_use?(skill_id)
  13.     # SP 不足的情况下不能使用
  14.     if $data_skills[skill_id].sp_cost > self.sp
  15.       return false
  16.     end
  17. #———————hp不足的情况下不能使用————————
  18.     @消耗血量 = hp_cost(skill_id)
  19.     if self.hp < @消耗血量
  20.        return false
  21.     end
  22. #——————————————————————
  23.     # 战斗不能的情况下不能使用
  24.     if dead?
  25.       return false
  26.     end
  27.     # 沉默状态的情况下、物理特技以外的特技不能使用
  28.     if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
  29.       return false
  30.     end
  31.     # 获取可以使用的时机
  32.     occasion = $data_skills[skill_id].occasion
  33.     # 战斗中的情况下
  34.     if $game_temp.in_battle
  35.       # [平时] 或者是 [战斗中] 可以使用
  36.       return (occasion == 0 or occasion == 1)
  37.     # 不是战斗中的情况下
  38.     else
  39.       # [平时] 或者是 [菜单中] 可以使用
  40.       return (occasion == 0 or occasion == 2)
  41.     end
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 应用特技效果
  45.   #     user  : 特技的使用者 (battler)
  46.   #     skill : 特技
  47.   #--------------------------------------------------------------------------
  48.   def skill_effect(user, skill)
  49. #——————使用耗血技能时,消耗HP———————————
  50.     user.hp -= hp_cost(skill.id)
  51. #—————就改了这,可以直接看最下面的核心部分“计算耗血量”了——————————
  52.     # 清除会心一击标志
  53.     self.critical = false
  54.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  55.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  56.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  57.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  58.       # 过程结束
  59.       return false
  60.     end
  61.     # 清除有效标志
  62.     effective = false
  63.     # 公共事件 ID 是有效的情况下,设置为有效标志
  64.     effective |= skill.common_event_id > 0
  65.     # 第一命中判定
  66.     hit = skill.hit
  67.     if skill.atk_f > 0
  68.       hit *= user.hit / 100
  69.     end
  70.     hit_result = (rand(100) < hit)
  71.     # 不确定的特技的情况下设置为有效标志
  72.     effective |= hit < 100
  73.     # 命中的情况下
  74.     if hit_result == true
  75.       # 计算威力
  76.       power = skill.power + user.atk * skill.atk_f / 100
  77.       if power > 0
  78.         power -= self.pdef * skill.pdef_f / 200
  79.         power -= self.mdef * skill.mdef_f / 200
  80.         power = [power, 0].max
  81.       end
  82.       # 计算倍率
  83.       rate = 20
  84.       rate += (user.str * skill.str_f / 100)
  85.       rate += (user.dex * skill.dex_f / 100)
  86.       rate += (user.agi * skill.agi_f / 100)
  87.       rate += (user.int * skill.int_f / 100)
  88.       # 计算基本伤害
  89.       self.damage = power * rate / 20
  90.       # 属性修正
  91.       self.damage *= elements_correct(skill.element_set)
  92.       self.damage /= 100
  93.       # 伤害符号正确的情况下
  94.       if self.damage > 0
  95.         # 防御修正
  96.         if self.guarding?
  97.           self.damage /= 2
  98.         end
  99.       end
  100.       # 分散
  101.       if skill.variance > 0 and self.damage.abs > 0
  102.         amp = [self.damage.abs * skill.variance / 100, 1].max
  103.         self.damage += rand(amp+1) + rand(amp+1) - amp
  104.       end
  105.       # 第二命中判定
  106.       eva = 8 * self.agi / user.dex + self.eva
  107.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  108.       hit = self.cant_evade? ? 100 : hit
  109.       hit_result = (rand(100) < hit)
  110.       # 不确定的特技的情况下设置为有效标志
  111.       effective |= hit < 100
  112.     end
  113.     # 命中的情况下
  114.     if hit_result == true
  115.       # 威力 0 以外的物理攻击的情况下
  116.       if skill.power != 0 and skill.atk_f > 0
  117.         # 状态冲击解除
  118.         remove_states_shock
  119.         # 设置有效标志
  120.         effective = true
  121.       end
  122.       # HP 的伤害减法运算
  123.       last_hp = self.hp
  124.       self.hp -= self.damage
  125.       effective |= self.hp != last_hp
  126.       # 状态变化
  127.       @state_changed = false
  128.       effective |= states_plus(skill.plus_state_set)
  129.       effective |= states_minus(skill.minus_state_set)
  130.       # 威力为 0 的场合
  131.       if skill.power == 0
  132.         # 伤害设置为空的字串
  133.         self.damage = ""
  134.         # 状态没有变化的情况下
  135.         unless @state_changed
  136.           # 伤害设置为 "Miss"
  137.           self.damage = "Miss"
  138.         end
  139.       end
  140.     # Miss 的情况下
  141.     else
  142.       # 伤害设置为 "Miss"
  143.       self.damage = "Miss"
  144.     end
  145.     # 不在战斗中的情况下
  146.     unless $game_temp.in_battle
  147.       # 伤害设置为 nil
  148.       self.damage = nil
  149.     end
  150.     # 过程结束
  151.     return effective
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● 计算耗血量  ◆核心部分◆
  155.   #     skill_id : 特技 ID
  156.   #--------------------------------------------------------------------------
  157.    def hp_cost(skill_id)
  158.      skill = $data_skills[skill_id]
  159.      @耗血 = 0
  160.      h = 0    #这个变量是为了便于调整才加入的,如果不想从10号开始而想从21号开始,可以直接设定 h = 11
  161.     if skill.element_set.include?(10 + h)      #(10 + h) 是属性的ID
  162.       @耗血 += 1   #把ID化成具体的数值,之后可以进行具体的计算(想改变伤害的精度的话,这里也要改)这里也就是给属性取的名字对应的数值
  163.       end
  164.     if skill.element_set.include?(11 + h)
  165.       @耗血 += 2
  166.       end
  167.     if skill.element_set.include?(12 + h)
  168.       @耗血 += 3
  169.       end
  170.     if skill.element_set.include?(13 + h)
  171.       @耗血 += 5
  172.       end
  173.     if skill.element_set.include?(14 + h)
  174.       @耗血 += 10
  175.       end
  176.     if skill.element_set.include?(15 + h)
  177.       @耗血 += 20
  178.       end
  179.     if skill.element_set.include?(16 + h)
  180.       @耗血 += 30
  181.     end
  182.     if skill.element_set.include?(17 + h)
  183.       @耗血 += 50
  184.     end
  185.     if skill.element_set.include?(18 + h)
  186.       @耗血 += 100
  187.     end
  188.     if skill.element_set.include?(19 + h)
  189.       @耗血 += 200
  190.     end
  191.     if skill.element_set.include?(20 + h)
  192.       @耗血 += 300
  193.     end
  194.     if skill.element_set.include?(21 + h)
  195.       @耗血 += 500
  196.     end
  197.     if skill.element_set.include?(22 + h)
  198.       @耗血 += 1000
  199.     end
  200.     if skill.element_set.include?(23 + h)
  201.       @耗血 += 2000   #总共可以实现4000+的血量,应该足够用了吧,不够自己继续加
  202.     end
  203.     return @耗血
  204.     end
  205.   #----------------------------Class over------------------------------------------
  206.   end
复制代码

点评

认可认可!!!  发表于 2012-12-3 22:58

评分

参与人数 1梦石 +1 收起 理由
hcm + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 10:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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