幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2283|回复: 3

[RMXP] 请问某些状态和技能怎么设置(又多提出了几个状态)

[复制链接]

6

主题

27

帖子

336

积分

④见习

积分
336
QQ
发表于 2010-8-11 16:12:58 | 显示全部楼层 |阅读模式
圣殿守护:这个状态很奇怪,对物理攻击没用,如果魔法造成的攻击小于2000的话会反弹回去 但是超过2000的话就没有效果了……
骑士精神:在三回合内免疫一切不良状态。
诅咒:诅咒某敌人后,三回合内攻击该敌人伤害加倍。
安息:死亡后才能中上该状态 使敌人无法复活(即无法解除战斗不能状态……)。
预言:中不良状态后使用该技能可以在下一回合被驱散。
热火咒:三回合内进入该状态的队员攻击、魔法攻击为原来的3倍。
尘封术:三回合内进入状态者不能使用辅助魔法。
隐身术:三回合内物理攻击、物理攻击技能、群体攻击技能无效,但对单体魔法毫无效果。
缩水术:三回合内全属性下降为原来的60%(主要是这个缩水术的效果不好弄,效果是敌方战斗图片变小……)
暂、暂时就这么多了……
呆滞,会编剧不会技术的丫头
回复

使用道具 举报

0

主题

13

帖子

104

积分

③业余

积分
104
QQ
发表于 2010-8-11 19:39:00 | 显示全部楼层
好奇问下- -对物理攻击没用是指此状态对物理攻击无防御效果还是对物理攻击免疫- -
回复 支持 反对

使用道具 举报

6

主题

27

帖子

336

积分

④见习

积分
336
QQ
 楼主| 发表于 2010-8-11 20:48:06 | 显示全部楼层
对物理攻击无效果。
呆滞,会编剧不会技术的丫头
回复 支持 反对

使用道具 举报

0

主题

13

帖子

104

积分

③业余

积分
104
QQ
发表于 2010-8-16 20:05:57 | 显示全部楼层
  1. module Special_Battle
  2.   SDSHID = 17
  3.   QSJSID = 18
  4.   ZZID = 19
  5.   BLZT = [2,3]
  6.   def self.sdsh?(skill,target,user)
  7.     if skill.atk_f != 0
  8.       return false
  9.     end
  10.     if target.damage >= 2000
  11.       return false
  12.     end
  13.     if !target.state?(SDSHID)
  14.       return false
  15.     end
  16.     return true
  17.   end
  18.   def self.qsjs?(target,sid)
  19.     if !target.state?(QSJSID)
  20.       return false
  21.     end
  22.     if !BLZT.include?(sid)
  23.       return false
  24.     end
  25.     return true
  26.   end
  27.   def self.zz?(target)
  28.     return target.state?(ZZID)
  29.   end
  30. end
  31. class Game_Battler
  32.   #--------------------------------------------------------------------------
  33.   # ● 应用通常攻击效果
  34.   #     attacker : 攻击者 (battler)
  35.   #--------------------------------------------------------------------------
  36.   def attack_effect(attacker)
  37.     # 清除会心一击标志
  38.     self.critical = false
  39.     # 第一命中判定
  40.     hit_result = (rand(100) < attacker.hit)
  41.     # 命中的情况下
  42.     if hit_result == true
  43.       # 计算基本伤害
  44.       atk = [attacker.atk - self.pdef / 2, 0].max
  45.       self.damage = atk * (20 + attacker.str) / 20
  46.       # 属性修正
  47.       self.damage *= elements_correct(attacker.element_set)
  48.       self.damage /= 100
  49.       # 伤害符号正确的情况下
  50.       if self.damage > 0
  51.         # 会心一击修正
  52.         if rand(100) < 4 * attacker.dex / self.agi
  53.           self.damage *= 2
  54.           self.critical = true
  55.         end
  56.         # 防御修正
  57.         if self.guarding?
  58.           self.damage /= 2
  59.         end
  60.       end
  61.       # 分散
  62.       if self.damage.abs > 0
  63.         amp = [self.damage.abs * 15 / 100, 1].max
  64.         self.damage += rand(amp+1) + rand(amp+1) - amp
  65.       end
  66.       # 第二命中判定
  67.       eva = 8 * self.agi / attacker.dex + self.eva
  68.       hit = self.damage < 0 ? 100 : 100 - eva
  69.       hit = self.cant_evade? ? 100 : hit
  70.       hit_result = (rand(100) < hit)
  71.     end
  72.     # 命中的情况下
  73.     if hit_result == true
  74.       # 状态冲击解除
  75.       remove_states_shock
  76.       # HP 的伤害计算
  77.       self.damage*=3 if Special_Battle.zz?(self)
  78.       self.hp -= self.damage
  79.       # 状态变化
  80.       @state_changed = false
  81.       states_plus(attacker.plus_state_set)
  82.       states_minus(attacker.minus_state_set)
  83.     # Miss 的情况下
  84.     else
  85.       # 伤害设置为 "Miss"
  86.       self.damage = "Miss"
  87.       # 清除会心一击标志
  88.       self.critical = false
  89.     end
  90.     # 过程结束
  91.     return true
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 应用特技效果
  95.   #     user  : 特技的使用者 (battler)
  96.   #     skill : 特技
  97.   #--------------------------------------------------------------------------
  98.   def skill_effect(user, skill)
  99.     # 清除会心一击标志
  100.     self.critical = false
  101.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  102.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  103.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  104.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  105.       # 过程结束
  106.       return false
  107.     end
  108.     # 清除有效标志
  109.     effective = false
  110.     # 公共事件 ID 是有效的情况下,设置为有效标志
  111.     effective |= skill.common_event_id > 0
  112.     # 第一命中判定
  113.     hit = skill.hit
  114.     if skill.atk_f > 0
  115.       hit *= user.hit / 100
  116.     end
  117.     hit_result = (rand(100) < hit)
  118.     # 不确定的特技的情况下设置为有效标志
  119.     effective |= hit < 100
  120.     # 命中的情况下
  121.     if hit_result == true
  122.       # 计算威力
  123.       power = skill.power + user.atk * skill.atk_f / 100
  124.       if power > 0
  125.         power -= self.pdef * skill.pdef_f / 200
  126.         power -= self.mdef * skill.mdef_f / 200
  127.         power = [power, 0].max
  128.       end
  129.       # 计算倍率
  130.       rate = 20
  131.       rate += (user.str * skill.str_f / 100)
  132.       rate += (user.dex * skill.dex_f / 100)
  133.       rate += (user.agi * skill.agi_f / 100)
  134.       rate += (user.int * skill.int_f / 100)
  135.       # 计算基本伤害
  136.       self.damage = power * rate / 20
  137.       # 属性修正
  138.       self.damage *= elements_correct(skill.element_set)
  139.       self.damage /= 100
  140.       # 伤害符号正确的情况下
  141.       if self.damage > 0
  142.         # 防御修正
  143.         if self.guarding?
  144.           self.damage /= 2
  145.         end
  146.       end
  147.       # 分散
  148.       if skill.variance > 0 and self.damage.abs > 0
  149.         amp = [self.damage.abs * skill.variance / 100, 1].max
  150.         self.damage += rand(amp+1) + rand(amp+1) - amp
  151.       end
  152.       # 第二命中判定
  153.       eva = 8 * self.agi / user.dex + self.eva
  154.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  155.       hit = self.cant_evade? ? 100 : hit
  156.       hit_result = (rand(100) < hit)
  157.       # 不确定的特技的情况下设置为有效标志
  158.       effective |= hit < 100
  159.     end
  160.     # 命中的情况下
  161.     if hit_result == true && !Special_Battle.sdsh?(skill,self,user)
  162.       # 威力 0 以外的物理攻击的情况下
  163.       if skill.power != 0 and skill.atk_f > 0
  164.         # 状态冲击解除
  165.         remove_states_shock
  166.         # 设置有效标志
  167.         effective = true
  168.       end
  169.       # HP 的伤害减法运算
  170.       last_hp = self.hp
  171.       self.damage*=3 if Special_Battle.zz?(self)
  172.       self.hp -= self.damage
  173.       effective |= self.hp != last_hp
  174.       # 状态变化
  175.       @state_changed = false
  176.       effective |= states_plus(skill.plus_state_set)
  177.       effective |= states_minus(skill.minus_state_set)
  178.       # 威力为 0 的场合
  179.       if skill.power == 0
  180.         # 伤害设置为空的字串
  181.         self.damage = ""
  182.         # 状态没有变化的情况下
  183.         unless @state_changed
  184.           # 伤害设置为 "Miss"
  185.           self.damage = "Miss"
  186.         end
  187.       end
  188.     # Miss 的情况下
  189.     else
  190.       if Special_Battle.sdsh?(skill,self,user)
  191.         user.damage = self.damage
  192.         user.hp -= self.damage
  193.         #$scene.target_battlers.push(user) if $scene.is_a?(Scene_Battle)
  194.       end
  195.       # 伤害设置为 "Miss"
  196.       self.damage = "Miss"
  197.     end
  198.     # 不在战斗中的情况下
  199.     unless $game_temp.in_battle
  200.       # 伤害设置为 nil
  201.       self.damage = nil
  202.     end
  203.     # 过程结束
  204.     return effective
  205.   end
  206.   #--------------------------------------------------------------------------
  207.   # ● 应用物品效果
  208.   #     item : 物品
  209.   #--------------------------------------------------------------------------
  210.   def item_effect(item)
  211.     # 清除会心一击标志
  212.     self.critical = false
  213.     # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  214.     # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  215.     if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
  216.        ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  217.       # 过程结束
  218.       return false
  219.     end
  220.     # 清除有效标志
  221.     effective = false
  222.     # 公共事件 ID 是有效的情况下,设置为有效标志
  223.     effective |= item.common_event_id > 0
  224.     # 命中判定
  225.     hit_result = (rand(100) < item.hit)
  226.     # 不确定的特技的情况下设置为有效标志
  227.     effective |= item.hit < 100
  228.     # 命中的情况
  229.     if hit_result == true
  230.       # 计算回复量
  231.       recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
  232.       recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
  233.       if recover_hp < 0
  234.         recover_hp += self.pdef * item.pdef_f / 20
  235.         recover_hp += self.mdef * item.mdef_f / 20
  236.         recover_hp = [recover_hp, 0].min
  237.       end
  238.       # 属性修正
  239.       recover_hp *= elements_correct(item.element_set)
  240.       recover_hp /= 100
  241.       recover_sp *= elements_correct(item.element_set)
  242.       recover_sp /= 100
  243.       # 分散
  244.       if item.variance > 0 and recover_hp.abs > 0
  245.         amp = [recover_hp.abs * item.variance / 100, 1].max
  246.         recover_hp += rand(amp+1) + rand(amp+1) - amp
  247.       end
  248.       if item.variance > 0 and recover_sp.abs > 0
  249.         amp = [recover_sp.abs * item.variance / 100, 1].max
  250.         recover_sp += rand(amp+1) + rand(amp+1) - amp
  251.       end
  252.       # 回复量符号为负的情况下
  253.       if recover_hp < 0
  254.         # 防御修正
  255.         if self.guarding?
  256.           recover_hp /= 2
  257.         end
  258.         recover_hp*=3 if Special_Battle.zz?(self)
  259.       end
  260.       # HP 回复量符号的反转、设置伤害值
  261.       self.damage = -recover_hp
  262.       # HP 以及 SP 的回复
  263.       last_hp = self.hp
  264.       last_sp = self.sp
  265.       self.hp += recover_hp
  266.       self.sp += recover_sp
  267.       effective |= self.hp != last_hp
  268.       effective |= self.sp != last_sp
  269.       # 状态变化
  270.       @state_changed = false
  271.       effective |= states_plus(item.plus_state_set)
  272.       effective |= states_minus(item.minus_state_set)
  273.       # 能力上升值有效的情况下
  274.       if item.parameter_type > 0 and item.parameter_points != 0
  275.         # 能力值的分支
  276.         case item.parameter_type
  277.         when 1  # MaxHP
  278.           @maxhp_plus += item.parameter_points
  279.         when 2  # MaxSP
  280.           @maxsp_plus += item.parameter_points
  281.         when 3  # 力量
  282.           @str_plus += item.parameter_points
  283.         when 4  # 灵巧
  284.           @dex_plus += item.parameter_points
  285.         when 5  # 速度
  286.           @agi_plus += item.parameter_points
  287.         when 6  # 魔力
  288.           @int_plus += item.parameter_points
  289.         end
  290.         # 设置有效标志
  291.         effective = true
  292.       end
  293.       # HP 回复率与回复量为 0 的情况下
  294.       if item.recover_hp_rate == 0 and item.recover_hp == 0
  295.         # 设置伤害为空的字符串
  296.         self.damage = ""
  297.         # SP 回复率与回复量为 0、能力上升值无效的情况下
  298.         if item.recover_sp_rate == 0 and item.recover_sp == 0 and
  299.            (item.parameter_type == 0 or item.parameter_points == 0)
  300.           # 状态没有变化的情况下
  301.           unless @state_changed
  302.             # 伤害设置为 "Miss"
  303.             self.damage = "Miss"
  304.           end
  305.         end
  306.       end
  307.     # Miss 的情况下
  308.     else
  309.       # 伤害设置为 "Miss"
  310.       self.damage = "Miss"
  311.     end
  312.     # 不在战斗中的情况下
  313.     unless $game_temp.in_battle
  314.       # 伤害设置为 nil
  315.       self.damage = nil
  316.     end
  317.     # 过程结束
  318.     return effective
  319.   end
  320. end
  321. class Scene_Battle
  322.   #--------------------------------------------------------------------------
  323.   # ● 刷新画面 (主回合步骤 5 : 显示伤害)
  324.   #--------------------------------------------------------------------------
  325.   alias ups5 update_phase4_step5
  326.   def update_phase4_step5
  327.     ups5
  328.     if @active_battler.damage != nil
  329.       @active_battler.damage_pop = true
  330.     end
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ● 刷新画面 (主回合步骤 6 : 刷新)
  334.   #--------------------------------------------------------------------------
  335.   alias ups6 update_phase4_step6
  336.   def update_phase4_step6
  337.     @active_battler.damage = nil
  338.     ups6
  339.   end
  340. end
复制代码
暂时前三个- -以后补上
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-5 22:24 , Processed in 0.028489 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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