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

Project1

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

[已经解决] 如何让防具有金钱代替伤害特殊的效果?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
26 小时
注册时间
2012-5-4
帖子
351
跳转到指定楼层
1
发表于 2012-5-6 15:56:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 苹果星ねこ 于 2012-5-6 18:24 编辑

就是装饰此身体防具后,可以用金钱代替伤害,没有钱就是废物。

Lv3.寻梦者

双子人

梦石
0
星屑
3190
在线时间
3618 小时
注册时间
2009-4-4
帖子
4154

开拓者

2
发表于 2012-5-6 18:19:21 | 只看该作者
  1. module ITEM
  2.   TYPE = 4#0:武器,1:盾,2:头部,3:身体,4:装饰品
  3.   ID = 4#装备4号装饰品时,使用金钱代替伤害
  4. end

  5. class Game_Battler
  6.   #--------------------------------------------------------------------------
  7.   # ● 应用通常攻击效果
  8.   #     attacker : 攻击者 (battler)
  9.   #--------------------------------------------------------------------------
  10.   def attack_effect(attacker)
  11.     #金钱代替伤害off
  12.     hit_gold = false
  13.     # 清除会心一击标志
  14.     self.critical = false
  15.     # 第一命中判定
  16.     hit_result = (rand(100) < attacker.hit)
  17.     # 命中的情况下
  18.     if hit_result == true
  19.       # 计算基本伤害
  20.       atk = [attacker.atk - self.pdef / 2, 0].max
  21.       self.damage = atk * (20 + attacker.str) / 20
  22.       # 属性修正
  23.       self.damage *= elements_correct(attacker.element_set)
  24.       self.damage /= 100
  25.       # 伤害符号正确的情况下
  26.       if self.damage > 0
  27.         # 会心一击修正
  28.         if rand(100) < 4 * attacker.dex / self.agi
  29.           self.damage *= 2
  30.           self.critical = true
  31.         end
  32.         # 防御修正
  33.         if self.guarding?
  34.           self.damage /= 2
  35.         end
  36.       end
  37.       # 分散
  38.       if self.damage.abs > 0
  39.         amp = [self.damage.abs * 15 / 100, 1].max
  40.         self.damage += rand(amp+1) + rand(amp+1) - amp
  41.       end
  42.       # 第二命中判定
  43.       eva = 8 * self.agi / attacker.dex + self.eva
  44.       hit = self.damage < 0 ? 100 : 100 - eva
  45.       hit = self.cant_evade? ? 100 : hit
  46.       hit_result = (rand(100) < hit)
  47.     end
  48.     # 命中的情况下
  49.     if hit_result == true
  50.       # 状态冲击解除
  51.       remove_states_shock
  52.       # HP 的伤害计算
  53.       if self.is_a?(Game_Actor)
  54.         case ITEM::TYPE
  55.         when 0
  56.           if self.weapon_id == ITEM::ID and $game_party.gold >= 1
  57.             hit_gold = true
  58.           end
  59.         when 1
  60.           self.armor1_id == ITEM::ID and $game_party.gold >= 1
  61.             hit_gold = true
  62.           end
  63.         when 2
  64.           self.armor2_id == ITEM::ID and $game_party.gold >= 1
  65.             hit_gold = true
  66.           end
  67.         when 3
  68.           self.armor3_id == ITEM::ID and $game_party.gold >= 1
  69.             hit_gold = true
  70.           end
  71.         when 4
  72.           self.armor4_id == ITEM::ID and $game_party.gold >= 1
  73.             hit_gold = true
  74.           end
  75.         end
  76.       end
  77.       if hit_gold
  78.         $game_party.lose_gold(self.damage)
  79.         gold_result = (self.damage).to_s + "金钱"
  80.         self.damage = gold_result
  81.       else
  82.         self.hp -= self.damage
  83.       end
  84.       # 状态变化
  85.       @state_changed = false
  86.       states_plus(attacker.plus_state_set)
  87.       states_minus(attacker.minus_state_set)
  88.     # Miss 的情况下
  89.     else
  90.       # 伤害设置为 "Miss"
  91.       self.damage = "Miss"
  92.       # 清除会心一击标志
  93.       self.critical = false
  94.     end
  95.     # 过程结束
  96.     return true
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 应用特技效果
  100.   #     user  : 特技的使用者 (battler)
  101.   #     skill : 特技
  102.   #--------------------------------------------------------------------------
  103.   def skill_effect(user, skill)
  104.     # 清除会心一击标志
  105.     self.critical = false
  106.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  107.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  108.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  109.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  110.       # 过程结束
  111.       return false
  112.     end
  113.     # 清除有效标志
  114.     effective = false
  115.     # 公共事件 ID 是有效的情况下,设置为有效标志
  116.     effective |= skill.common_event_id > 0
  117.     # 第一命中判定
  118.     hit = skill.hit
  119.     if skill.atk_f > 0
  120.       hit *= user.hit / 100
  121.     end
  122.     hit_result = (rand(100) < hit)
  123.     # 不确定的特技的情况下设置为有效标志
  124.     effective |= hit < 100
  125.     # 命中的情况下
  126.     if hit_result == true
  127.       # 计算威力
  128.       power = skill.power + user.atk * skill.atk_f / 100
  129.       if power > 0
  130.         power -= self.pdef * skill.pdef_f / 200
  131.         power -= self.mdef * skill.mdef_f / 200
  132.         power = [power, 0].max
  133.       end
  134.       # 计算倍率
  135.       rate = 20
  136.       rate += (user.str * skill.str_f / 100)
  137.       rate += (user.dex * skill.dex_f / 100)
  138.       rate += (user.agi * skill.agi_f / 100)
  139.       rate += (user.int * skill.int_f / 100)
  140.       # 计算基本伤害
  141.       self.damage = power * rate / 20
  142.       # 属性修正
  143.       self.damage *= elements_correct(skill.element_set)
  144.       self.damage /= 100
  145.       # 伤害符号正确的情况下
  146.       if self.damage > 0
  147.         # 防御修正
  148.         if self.guarding?
  149.           self.damage /= 2
  150.         end
  151.       end
  152.       # 分散
  153.       if skill.variance > 0 and self.damage.abs > 0
  154.         amp = [self.damage.abs * skill.variance / 100, 1].max
  155.         self.damage += rand(amp+1) + rand(amp+1) - amp
  156.       end
  157.       # 第二命中判定
  158.       eva = 8 * self.agi / user.dex + self.eva
  159.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  160.       hit = self.cant_evade? ? 100 : hit
  161.       hit_result = (rand(100) < hit)
  162.       # 不确定的特技的情况下设置为有效标志
  163.       effective |= hit < 100
  164.     end
  165.     # 命中的情况下
  166.     if hit_result == true
  167.       # 威力 0 以外的物理攻击的情况下
  168.       if skill.power != 0 and skill.atk_f > 0
  169.         # 状态冲击解除
  170.         remove_states_shock
  171.         # 设置有效标志
  172.         effective = true
  173.       end
  174.       # HP 的伤害减法运算
  175.       last_hp = self.hp
  176.       if self.is_a?(Game_Actor)
  177.         case ITEM::TYPE
  178.         when 0
  179.           self.weapon_id == ITEM::ID and $game_party.gold >= 1
  180.             hit_gold = true
  181.           end
  182.         when 1
  183.           self.armor1_id == ITEM::ID and $game_party.gold >= 1
  184.             hit_gold = true
  185.           end
  186.         when 2
  187.           self.armor2_id == ITEM::ID and $game_party.gold >= 1
  188.             hit_gold = true
  189.           end
  190.         when 3
  191.           self.armor3_id == ITEM::ID and $game_party.gold >= 1
  192.             hit_gold = true
  193.           end
  194.         when 4
  195.           self.armor4_id == ITEM::ID and $game_party.gold >= 1
  196.             hit_gold = true
  197.           end
  198.         end
  199.       end
  200.       if hit_gold
  201.         $game_party.lose_gold(self.damage)
  202.         gold_result = (self.damage).to_s + "金钱"
  203.         self.damage = gold_result
  204.       else
  205.         self.hp -= self.damage
  206.       end
  207.       effective |= self.hp != last_hp
  208.       # 状态变化
  209.       @state_changed = false
  210.       effective |= states_plus(skill.plus_state_set)
  211.       effective |= states_minus(skill.minus_state_set)
  212.       # 威力为 0 的场合
  213.       if skill.power == 0
  214.         # 伤害设置为空的字串
  215.         self.damage = ""
  216.         # 状态没有变化的情况下
  217.         unless @state_changed
  218.           # 伤害设置为 "Miss"
  219.           self.damage = "Miss"
  220.         end
  221.       end
  222.     # Miss 的情况下
  223.     else
  224.       # 伤害设置为 "Miss"
  225.       self.damage = "Miss"
  226.     end
  227.     # 不在战斗中的情况下
  228.     unless $game_temp.in_battle
  229.       # 伤害设置为 nil
  230.       self.damage = nil
  231.     end
  232.     # 过程结束
  233.     return effective
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # ● 应用连续伤害效果
  237.   #--------------------------------------------------------------------------
  238.   def slip_damage_effect
  239.     # 设置伤害
  240.     self.damage = self.maxhp / 10
  241.     # 分散
  242.     if self.damage.abs > 0
  243.       amp = [self.damage.abs * 15 / 100, 1].max
  244.       self.damage += rand(amp+1) + rand(amp+1) - amp
  245.     end
  246.     # HP 的伤害减法运算
  247.     if self.is_a?(Game_Actor)
  248.       case ITEM::TYPE
  249.       when 0
  250.         self.weapon_id == ITEM::ID and $game_party.gold >= 1
  251.             hit_gold = true
  252.           end
  253.       when 1
  254.         self.armor1_id == ITEM::ID and $game_party.gold >= 1
  255.             hit_gold = true
  256.           end
  257.       when 2
  258.         self.armor2_id == ITEM::ID and $game_party.gold >= 1
  259.             hit_gold = true
  260.           end
  261.       when 3
  262.         self.armor3_id == ITEM::ID and $game_party.gold >= 1
  263.             hit_gold = true
  264.           end
  265.       when 4
  266.         self.armor4_id == ITEM::ID and $game_party.gold >= 1
  267.             hit_gold = true
  268.           end
  269.       end
  270.     end
  271.     if hit_gold
  272.       $game_party.lose_gold(self.damage)
  273.       gold_result = (self.damage).to_s + "金钱"
  274.       self.damage = gold_result
  275.     else
  276.       self.hp -= self.damage
  277.     end
  278.     # 过程结束
  279.     return true
  280.   end
  281. end
复制代码
使用方法:插入后,改TYPE和ID就可以了

点评

很强大的脚本  发表于 2012-5-6 18:24
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 10:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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