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

Project1

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

[已经解决] 【脚本求助】简单的求一个“必中”属性的脚本。

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
49 小时
注册时间
2012-8-20
帖子
372
跳转到指定楼层
1
发表于 2012-9-17 00:40:36 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 闻人翎 于 2012-9-17 12:31 编辑

简单的求一个“必中”属性的脚本。

1、可以完全发表毫无冲突的必中属性脚本(测试成功,则认可)
2、可以简述必中属性脚本的原理和步骤(有追加经验)

一个是技能属性【必中】。勾选了此属性的技能必定命中。
一个是角色状态【必中】。附加了此状态的队员N回合内攻击必定命中。(命中率100%区别于必中)








梦幻群侠传5 之 梦幻仙曲
主角:男1:水祈轩(后改名为“水无痕”)            男2:夜牧(鬼城道观,道名“承允”)
         女1:花语嫣(曾化名“神秘人”和“花魁”)    女2:兰胤(朱紫国,“青冥”龙女)

特殊主角:仙1:仙羽(三命精灵,守护三界)     妖1:元灵君(怨气集体,灵力化身)
               灵1:剑旭(冷面剑士,霹雳玄惊)      魂1:南宫问天(前朝皇子,今生问情)

剧情部分:★★★☆☆☆☆☆☆☆           美工绘图:★★★★★★★★★☆                技能道具★★☆☆☆☆☆☆☆☆            
游戏总进度:★☆☆☆☆☆☆☆☆☆

Lv3.寻梦者

梦石
0
星屑
2682
在线时间
1589 小时
注册时间
2010-10-22
帖子
1053
15
发表于 2012-9-18 23:30:47 | 只看该作者
本帖最后由 kangxi0109 于 2012-9-19 14:09 编辑
闻人翎 发表于 2012-9-18 22:50
我够了,怎么测试都是有冲突。
给你我的游戏里面的脚本。你在里面添加那个技能设置必中和状态设置必中的 ...


发上来的脚本本身就有错误...end的问题...建议改脚本的时候要步步为营步步检查...{:2_258:}
其中

  1.     # 过程结束
  2.     return true
  3.   end
  4.     # HP 的伤害减法运算
  5.       self.hp -= self.damage
  6.     end<这个错了,要注释掉=_=
  7.     if self.state?(153) #风毒   
  8.       # 设置伤害
  9.       self.damage = self.hp / 4
  10.       # HP 的伤害减法运算
  11.       self.hp -= self.damage
  12.     end
复制代码
除了这个还有别的,你自己找一下吧...{:2_270:}
技能的话,是我疏忽了,将第二段改为下面的样子吧...

  1.     #===================================添加↓
  2.     #攻击方为角色且职业属性20号为A的场合
  3.     if user.is_a?(Game_Actor) && $data_classes[user.class_id].element_ranks[20] == 1
  4.       hit_result = true #命中开关打开
  5.       #攻击方为敌人且属性20号为A的场合
  6.     elsif user.is_a?(Game_Enemy) && $data_enemies[user.id].element_ranks[20] == 1
  7.       hit_result = true #命中开关打开
  8.       #状态不为空
  9.     elsif user.states.size != 0
  10.       for i in 0 ... user.states.size
  11.       #其包含的状态中存在设置有20号属性的状态的场合
  12.         if $data_states[user.states[i]].guard_element_set.include?(20)
  13.           hit_result = true #命中开关打开
  14.           break #直接中断循环
  15.         end
  16.       end
  17.       #如果技能属性中带有20号属性的场合
  18.     elsif $data_skills[skill.id].element_set.include?(20)
  19.       hit_result = true #命中开关打开
  20.     end
  21.     #===================================添加↑
复制代码
另:这些脚本都是在独立工程中测试通过了的,我自己的工程也有大量类似的设置...因此建议楼主另外建一个独立工程测试看看。

评分

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

查看全部评分

【2022.06.03】原本以为已经不可能再找回来的东西重新找回来了,原本一直念念不忘的坑终于再一次拿起铲子了。一别竟近10年,你好,我的世界我的梦。
【不可阻挡】异元-地劫黎明
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
49 小时
注册时间
2012-8-20
帖子
372
14
 楼主| 发表于 2012-9-18 22:50:43 | 只看该作者
kangxi0109 发表于 2012-9-17 23:51
上次用这个文件貌似也不行,直接上脚本算了,测试的时候按照9楼的设置测试就好了。 ...

我够了,怎么测试都是有冲突。
给你我的游戏里面的脚本。你在里面添加那个技能设置必中和状态设置必中的脚本吧。。劳烦了!~
(游戏测试成功,本人追加N经验。另加送一张好人卡,与版主发送的不冲突)、
  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.     # 战斗不能的情况下不能使用
  18.     if dead?
  19.       return false
  20.     end
  21.     # 沉默状态的情况下、物理特技以外的特技不能使用
  22.     if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
  23.       return false
  24.     end
  25.     # 获取可以使用的时机
  26.     occasion = $data_skills[skill_id].occasion
  27.     # 战斗中的情况下
  28.     if $game_temp.in_battle
  29.       # [平时] 或者是 [战斗中] 可以使用
  30.       return (occasion == 0 or occasion == 1)
  31.     # 不是战斗中的情况下
  32.     else
  33.       # [平时] 或者是 [菜单中] 可以使用
  34.       return (occasion == 0 or occasion == 2)
  35.     end
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 应用通常攻击效果
  39.   #     attacker : 攻击者 (battler)
  40.   #--------------------------------------------------------------------------
  41.   def attack_effect(attacker)
  42.     # 清除会心一击标志
  43.     $必杀 = 0
  44.     @active_battler = attacker
  45.     self.critical = false
  46.     # 第一命中判定
  47.     hit_result = (rand(100) < attacker.hit)
  48.     # 命中的情况下
  49.     if hit_result == true
  50.       # 计算基本伤害
  51.       atk = [attacker.atk - self.pdef / 1, attacker.atk / 10].max
  52.        if  @active_battler.is_a?(Game_Actor)
  53.          for kds in self.actions
  54.            if $data_skills[kds.skill_id].element_set.include?(42)
  55.               atk = [@active_battler.atk - self.pdef*120/100, @active_battler.atk / 12].max
  56.               break
  57.            elsif $data_skills[kds.skill_id].element_set.include?(41)
  58.               atk = [@active_battler.atk - self.pdef*110/100, @active_battler.atk / 11].max
  59.            end
  60.          end
  61.        end
  62.        if  @active_battler.is_a?(Game_Enemy)
  63.          for kds in self.skills
  64.            if $data_skills[kds].element_set.include?(42)
  65.               atk = [@active_battler.atk - self.pdef*120/100, @active_battler.atk / 12].max
  66.               break
  67.            elsif $data_skills[kds].element_set.include?(41)
  68.               atk = [@active_battler.atk - self.pdef*110/100, @active_battler.atk / 11].max
  69.            end
  70.          end
  71.        end
  72.       self.damage = atk*2 + attacker.str/5
  73.       # 属性修正
  74.       self.damage *= elements_correct(attacker.element_set)
  75.       self.damage /= 100
  76.       @kds_30 = nil
  77.       @kds_32 = nil
  78.       
  79.     if  @active_battler.is_a?(Game_Enemy)
  80.        for kds in @active_battler.actions
  81.          if $data_skills[kds.skill_id].element_set.include?(30)
  82.             self.damage = self.damage*125/100
  83.             @kds_30 = 0
  84.          elsif $data_skills[kds.skill_id].element_set.include?(29) and @kds_30 == nil
  85.             self.damage = self.damage*113/100
  86.          end
  87.          if $data_skills[kds.skill_id].element_set.include?(32)
  88.             $必杀 += 25
  89.             @kds_32 = 0
  90.          elsif $data_skills[kds.skill_id].element_set.include?(31) and @kds_32 == nil
  91.             $必杀 += 13
  92.          end
  93.        end
  94.     end

  95.     if  @active_battler.is_a?(Game_Actor)
  96.        for kds in @active_battler.skills
  97.          if $data_skills[kds].element_set.include?(30)
  98.             self.damage = self.damage*120/100
  99.             @kds_30 = 0
  100.          elsif $data_skills[kds].element_set.include?(29) and @kds_30 == nil
  101.             self.damage = self.damage*110/100
  102.          end
  103.          if $data_skills[kds].element_set.include?(32)
  104.             $必杀 += 20
  105.             @kds_32 = 0
  106.          elsif $data_skills[kds].element_set.include?(31) and @kds_32 == nil
  107.             $必杀 += 10
  108.          end
  109.        end
  110.     end

  111.       
  112.       # 伤害符号正确的情况下
  113.       if self.damage > 0
  114.        # 会心一击修正
  115.         if rand(100) < 5 * attacker.dex / self.agi + $必杀
  116.           self.damage *= 2
  117.           self.critical = true
  118.         end
  119.         # 防御修正
  120.         if self.guarding?
  121.           self.damage /= 2
  122.         end
  123.       end
  124.       
  125.    
  126.       # 分散
  127.       if self.damage.abs > 0
  128.         amp = [self.damage.abs * 15 / 100, 1].max
  129.         self.damage += rand(amp+1) + rand(amp+1) - amp
  130.       end
  131.       # 第二命中判定
  132.       eva = 8 * self.agi / attacker.dex + self.eva
  133.       hit = self.damage < 0 ? 100 : 100 - eva
  134.       hit = self.cant_evade? ? 100 : hit
  135.       hit_result = (rand(100) < hit)
  136.     end
  137.     # 命中的情况下
  138.     if hit_result == true

  139.      #保护系统-内部伤害计算
  140.       if self.is_a?(Game_Actor) and self.baohu.size >= 1
  141.          @baohu_agi = []
  142.          for i in 0..self.baohu.size-1
  143.           @baohu_agi[i] = $game_party.actors[self.baohu[i]].agi
  144.          end
  145.         for a in 0..@baohu_agi.size-1
  146.          for s in 0..@baohu_agi.size-1
  147.           if s < @baohu_agi.size-1 and @baohu_agi[s] < @baohu_agi[s+1]
  148.           elsif s < @baohu_agi.size-1 and @baohu_agi[s] > @baohu_agi[s+1]
  149.            @abc = @baohu_agi[s]
  150.            @baohu_agi[s] = @baohu_agi[s+1]
  151.            @baohu_agi[s+1] = @abc
  152.            
  153.            @bcd = self.baohu[s]
  154.            self.baohu[s] = self.baohu[s+1]
  155.            self.baohu[s+1] = @bcd
  156.           end
  157.          end
  158.         end
  159.           @baohu_duixiang = 1

  160.            for i in 1..self.baohu.size
  161.              if $game_party.actors[self.baohu[self.baohu.size-i]].hp <= 0
  162.                @baohu_duixiang += 1
  163.              else
  164.                break
  165.              end
  166.            end
  167.           if @baohu_duixiang == self.baohu.size + 1
  168.             self.hp -= self.damage
  169.           else
  170.             $game_party.actors[self.baohu[self.baohu.size-@baohu_duixiang]].damage = self.damage*80/100
  171.             if $game_party.actors[self.baohu[self.baohu.size-@baohu_duixiang]].damage <= 0
  172.                $game_party.actors[self.baohu[self.baohu.size-@baohu_duixiang]].damage = rand(6)+4
  173.             end
  174.             $game_party.actors[self.baohu[self.baohu.size-@baohu_duixiang]].hp -= self.damage*80/100
  175.             self.damage = self.damage*20/100
  176.             if self.damage <= 0
  177.               self.damage = rand(2)+1
  178.             end
  179.             self.hp -= self.damage*20/100

  180.             if self.baohu_dx == nil
  181.               self.baohu_dx = $game_party.actors[self.baohu[self.baohu.size-@baohu_duixiang]].ac_id
  182.             else
  183.               self.baohu_dxb = $game_party.actors[self.baohu[self.baohu.size-@baohu_duixiang]].ac_id
  184.             end
  185.            
  186.            self.baohu.delete(self.baohu[self.baohu.size-@baohu_duixiang])
  187.           end
  188.        else
  189.         self.hp -= self.damage
  190.        end
  191.       
  192.       
  193.     if  @active_battler.is_a?(Game_Actor) and self.is_a?(Game_Enemy)
  194.        for kds in self.actions
  195.          if $data_skills[kds.skill_id].element_set.include?(36)
  196.              if rand(100) < 35 and self.hp <= 0
  197.               self.damage = -self.maxhp
  198.               self.hp += self.maxhp
  199.               self.sp += self.maxsp
  200.               self.critical = false
  201.              end
  202.             break
  203.          elsif $data_skills[kds.skill_id].element_set.include?(35)
  204.              if rand(100) < 25 and self.hp <= 0
  205.               self.damage = -self.maxhp/2
  206.               self.hp += self.maxhp/2
  207.               self.sp += self.maxsp/2
  208.               self.critical = false
  209.              end
  210.             break
  211.          end
  212.        end
  213.     end

  214.     if  @active_battler.is_a?(Game_Enemy) and self.is_a?(Game_Actor)
  215.        for kds in self.skills
  216.          if $data_skills[kds].element_set.include?(36)
  217.              if rand(100) < 35 and self.hp <= 0
  218.               self.damage = -self.maxhp
  219.               self.hp += self.maxhp
  220.               self.sp += self.maxsp
  221.               self.critical = false
  222.              end
  223.             break
  224.          elsif $data_skills[kds].element_set.include?(35)
  225.              if rand(100) < 25 and self.hp <= 0
  226.               self.damage = -self.maxhp/2
  227.               self.hp += self.maxhp/2
  228.               self.sp += self.maxsp/2
  229.               self.critical = false
  230.              end
  231.             break
  232.          end
  233.        end
  234.     end
  235.       
  236.       
  237.       # 状态冲击解除
  238.       remove_states_shock
  239.       # HP 的伤害计算
  240.       # 状态变化
  241.       @state_changed = false
  242.       states_plus(attacker.plus_state_set)
  243.       states_minus(attacker.minus_state_set)
  244.     # Miss 的情况下
  245.     else
  246.       # 伤害设置为 "Miss"
  247.       self.damage = "Miss"
  248.       # 清除会心一击标志
  249.       self.critical = false
  250.     end
  251.     # 过程结束
  252.     return true
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 应用特技效果
  256.   #     user  : 特技的使用者 (battler)
  257.   #     skill : 特技
  258.   #--------------------------------------------------------------------------
  259.   def skill_effect(user, skill)
  260.     # 清除会心一击标志
  261.     $必杀 = 0
  262.     @active_battler = user
  263.     attacker = user
  264.     self.critical = false
  265.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  266.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  267.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  268.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  269.       # 过程结束
  270.       return false
  271.     end
  272.     # 清除有效标志
  273.     effective = false
  274.     # 公共事件 ID 是有效的情况下,设置为有效标志
  275.     effective |= skill.common_event_id > 0
  276.     # 第一命中判定
  277.     hit = skill.hit
  278.     if skill.atk_f > 0
  279.       hit *= user.hit / 100
  280.     end
  281.     hit_result = (rand(100) < hit)
  282.     # 不确定的特技的情况下设置为有效标志
  283.     effective |= hit < 100
  284.     # 命中的情况下
  285.     if hit_result == true
  286.       # 计算威力
  287.       power = (skill.power + user.int * skill.atk_f / 100)* user.int / self.mdef
  288.       if power > 0
  289.         power -= self.pdef * skill.pdef_f / 200
  290.         power -= self.mdef * skill.mdef_f / 200
  291.         power = [power, 0].max
  292.       end
  293.       # 计算倍率
  294.       rate = 20
  295.       rate += (user.str * skill.str_f / 100)
  296.       rate += (user.dex * skill.dex_f / 100)
  297.       rate += (user.agi * skill.agi_f / 100)
  298.       rate += (user.int * skill.int_f / 100)
  299.       # 计算基本伤害
  300.       self.damage = power * rate / 20
  301.       # 伤害符号正确的情况下
  302.       if self.damage > 0
  303.         # 防御修正
  304.         if self.guarding?
  305.           self.damage /= 1
  306.         end
  307.       end
  308.       
  309.      if skill.element_set.include?(13)
  310.        atk = [@active_battler.atk - self.pdef / 1, @active_battler.atk / 10].max
  311.        if  @active_battler.is_a?(Game_Actor)
  312.          for kds in self.actions
  313.            if $data_skills[kds.skill_id].element_set.include?(42)
  314.               atk = [@active_battler.atk - self.pdef*120/100, @active_battler.atk / 12].max
  315.               break
  316.            elsif $data_skills[kds.skill_id].element_set.include?(41)
  317.               atk = [@active_battler.atk - self.pdef*110/100, @active_battler.atk / 11].max
  318.            end
  319.          end
  320.        end
  321.        if  @active_battler.is_a?(Game_Enemy)
  322.          for kds in self.skills
  323.            if $data_skills[kds].element_set.include?(42)
  324.               atk = [@active_battler.atk - self.pdef*120/100, @active_battler.atk / 12].max
  325.               break
  326.            elsif $data_skills[kds].element_set.include?(41)
  327.               atk = [@active_battler.atk - self.pdef*110/100, @active_battler.atk / 11].max
  328.            end
  329.          end
  330.        end
  331.       self.damage = atk + @active_battler.str * 2
  332.      end

  333.     kds_24 = nil
  334.     kds_30 = nil
  335.     kds_32 = nil
  336.     kds_28 = nil

  337.     if  @active_battler.is_a?(Game_Actor)
  338.        for kds in @active_battler.skills
  339.          if $data_skills[kds].element_set.include?(24) and skill.element_set.include?(13) == false
  340.             self.damage = self.damage*120/100
  341.             kds_24 = 0
  342.          elsif $data_skills[kds].element_set.include?(23) and skill.element_set.include?(13) == false and kds_24 == nil
  343.             self.damage = self.damage*110/100
  344.          end
  345.          if $data_skills[kds].element_set.include?(30) and skill.element_set.include?(13)
  346.             kds_30 = 0
  347.             self.damage = self.damage*116/100
  348.          elsif $data_skills[kds].element_set.include?(29) and skill.element_set.include?(13) and kds_30 == nil
  349.             self.damage = self.damage*108/100
  350.          end
  351.          if $data_skills[kds].element_set.include?(32) and skill.element_set.include?(13)
  352.             kds_32 = 0
  353.             $必杀 += 20
  354.          elsif $data_skills[kds].element_set.include?(31) and skill.element_set.include?(13) and kds_32 == nil
  355.             $必杀 += 10
  356.          end
  357.        end
  358.       if self.is_a?(Game_Enemy)
  359.        for kds in self.actions
  360.          if $data_skills[kds.skill_id].element_set.include?(28) and skill.element_set.include?(13) == false
  361.             kds_28 = 0
  362.             self.damage = self.damage*80/100
  363.          elsif $data_skills[kds.skill_id].element_set.include?(27) and skill.element_set.include?(13) == false and kds_28 == nil
  364.             self.damage = self.damage*90/100
  365.          end
  366.        end
  367.       end
  368.     end
  369.    
  370.     if  @active_battler.is_a?(Game_Enemy)
  371.        for kds in @active_battler.actions
  372.          if $data_skills[kds.skill_id].element_set.include?(24) and skill.element_set.include?(13) == false
  373.             kds_24 = 0
  374.             self.damage = self.damage*120/100
  375.          elsif $data_skills[kds.skill_id].element_set.include?(23) and skill.element_set.include?(13) == false and kds_24 == nil
  376.             self.damage = self.damage*110/100
  377.          end
  378.          if $data_skills[kds.skill_id].element_set.include?(30) and skill.element_set.include?(13)
  379.             kds_30 = 0
  380.             self.damage = self.damage*116/100
  381.          elsif $data_skills[kds.skill_id].element_set.include?(29) and skill.element_set.include?(13) and kds_30 == nil
  382.             self.damage = self.damage*108/100
  383.          end
  384.          if $data_skills[kds.skill_id].element_set.include?(32) and skill.element_set.include?(13)
  385.             kds_32 = 0
  386.             $必杀 += 20
  387.          elsif $data_skills[kds.skill_id].element_set.include?(31) and skill.element_set.include?(13) and kds_32 == nil
  388.             $必杀 += 10
  389.          end
  390.        end
  391.       if self.is_a?(Game_Actor)
  392.        for kds in self.skills
  393.          if $data_skills[kds].element_set.include?(28) and skill.element_set.include?(13) == false
  394.             kds_28 = 0
  395.             self.damage = self.damage*80/100
  396.          elsif $data_skills[kds].element_set.include?(27) and skill.element_set.include?(13) == false and kds_28 == nil
  397.             self.damage = self.damage*90/100
  398.          end
  399.        end
  400.       end
  401.     end
  402.    
  403.       if skill.element_set.include?(43) and skill.element_set.include?(13)
  404.        self.damage = self.damage*120/100
  405.      end
  406.      
  407.       if skill.element_set.include?(46) and skill.element_set.include?(13)
  408.        self.damage = self.damage*190/100
  409.       
  410.      end
  411.      if skill.element_set.include?(47) and skill.element_set.include?(13)
  412.        self.damage = self.damage*60/100
  413.       
  414.      end

  415.      
  416.       if skill.element_set.include?(49) and skill.element_set.include?(13)
  417.        self.damage = self.damage*90/100
  418.      end
  419.          if skill.element_set.include?(50) and skill.element_set.include?(13)
  420.        self.damage = self.damage*150/100
  421.      end
  422.      
  423.      
  424.       # 属性修正
  425.       self.damage *= elements_correct(user.element_set)
  426.       self.damage /= 100
  427.    
  428.       if skill.element_set.include?(13)
  429.        if self.damage > 0
  430.         if rand(100) < 10 + $必杀
  431.           self.damage *= 2
  432.           self.critical = true
  433.         end
  434.         if self.guarding?
  435.           self.damage /= 2
  436.         end
  437.        end
  438.       end
  439.       # 分散
  440.       if skill.variance > 0 and self.damage.abs > 0
  441.         amp = [self.damage.abs * skill.variance / 100, 1].max
  442.         self.damage += rand(amp+1) + rand(amp+1) - amp
  443.       end
  444.       
  445.       
  446.       if skill.element_set.include?(44)
  447.        self.damage = @active_battler.level * 8
  448.      end
  449.      if skill.element_set.include?(51)
  450.        self.damage = @active_battler.level * 12
  451.      end
  452.      
  453.       if skill.element_set.include?(45)
  454.        if rand(100) < 75
  455.          self.damage *= 10 / 5
  456.        else
  457.          self.damage /= - 3 / 1
  458.        end
  459.      end
  460.      
  461.       if skill.element_set.include?(56)
  462.        if rand(100) < 10
  463.          self.hp -= self.damage *300/100
  464.        else
  465.         self.hp -= self.damage
  466.        end
  467.      end
  468.      
  469.            if skill.element_set.include?(57)
  470.        if rand(100) < 15
  471.          self.hp -= self.damage *250/100
  472.        else
  473.         self.hp -= self.damage
  474.        end
  475.      end
  476.      
  477.      if skill.element_set.include?(61)   
  478.         self.hp -= self.damage
  479.         user.hp -= -self.damage * 50 / 100
  480.       else  
  481.       self.hp -= self.damage
  482.     end
  483.    
  484.    
  485.       if skill.element_set.include?(59)   
  486.         self.hp -= self.damage
  487.         user.hp -= -self.damage   
  488.       else  
  489.       self.hp -= self.damage
  490.     end
  491.    
  492.    
  493.          if skill.element_set.include?(58)   
  494.         self.hp -= self.damage
  495.         user.hp -= -self.damage * 150 / 100
  496.       else  
  497.       self.hp -= self.damage
  498.     end
  499.    
  500.              if skill.element_set.include?(60)   
  501.         self.hp -= self.damage
  502.         user.hp -= -self.damage*2   
  503.       else  
  504.       self.hp -= self.damage
  505.     end
  506.    
  507.             if skill.element_set.include?(63)
  508.        if rand(100) < 50
  509.          self.damage = @active_battler.hp * 1
  510.        else
  511.          self.damage = @active_battler.sp * 1
  512.        end
  513.      end
  514.          
  515.           if skill.element_set.include?(64)
  516.        if rand(100) < 10
  517.         self.damage = @active_battler.str * 12 / 10
  518.        else
  519.          self.damage = @active_battler.str * 18 / 10
  520.        end
  521.      end
  522.      
  523.               if skill.element_set.include?(75)
  524.        self.damage = @active_battler.maxhp * 1
  525.      end
  526.      
  527.        if skill.element_set.include?(76)
  528.        self.damage = @active_battler.hp * 1
  529.      end
  530.      
  531.       # 第二命中判定
  532.       eva = 8 * self.agi / user.dex + self.eva
  533.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  534.       hit = self.cant_evade? ? 100 : hit
  535.       hit_result = (rand(100) < hit)
  536.       # 不确定的特技的情况下设置为有效标志
  537.       effective |= hit < 100
  538.     end
  539.     # 命中的情况下
  540.     if hit_result == true
  541.       # 威力 0 以外的物理攻击的情况下
  542.       if skill.power != 0 and skill.atk_f > 0
  543.         # 状态冲击解除
  544.         remove_states_shock
  545.         # 设置有效标志
  546.         effective = true
  547.       end
  548.       # HP 的伤害减法运算
  549.       last_hp = self.hp
  550.       self.hp -= self.damage
  551.       
  552.     if  @active_battler.is_a?(Game_Actor) and self.is_a?(Game_Enemy)
  553.        for kds in self.actions
  554.          if $data_skills[kds.skill_id].element_set.include?(36)
  555.              if rand(100) < 25 and self.hp <= 0
  556.               self.damage = -self.maxhp
  557.               self.hp += self.maxhp
  558.               self.sp += self.maxsp
  559.               self.critical = false
  560.              end
  561.             break
  562.          elsif $data_skills[kds.skill_id].element_set.include?(35)
  563.              if rand(100) < 20 and self.hp <= 0
  564.               self.damage = -self.maxhp/2
  565.               self.hp += self.maxhp/2
  566.               self.sp += self.maxsp/2
  567.               self.critical = false
  568.              end
  569.             break
  570.          end
  571.        end
  572.     end

  573.     if  @active_battler.is_a?(Game_Enemy) and self.is_a?(Game_Actor)
  574.        for kds in self.skills
  575.          if $data_skills[kds].element_set.include?(36)
  576.              if rand(100) < 25 and self.hp <= 0
  577.               self.damage = -self.maxhp
  578.               self.hp += self.maxhp
  579.               self.sp += self.maxsp
  580.               self.critical = false
  581.              end
  582.             break
  583.          elsif $data_skills[kds].element_set.include?(35)
  584.              if rand(100) < 20 and self.hp <= 0
  585.               self.damage = -self.maxhp/2
  586.               self.hp += self.maxhp/2
  587.               self.sp += self.maxsp/2
  588.               self.critical = false
  589.              end
  590.             break
  591.          end
  592.        end
  593.     end
  594.       
  595.       
  596.       effective |= self.hp != last_hp
  597.       # 状态变化
  598.       @state_changed = false
  599.       effective |= states_plus(skill.plus_state_set)
  600.       effective |= states_minus(skill.minus_state_set)
  601.       # 威力为 0 的场合
  602.       if skill.power == 0 and skill.element_set.include?(13) == false
  603.         # 伤害设置为空的字串
  604.         self.damage = ""
  605.         # 状态没有变化的情况下
  606.         unless @state_changed
  607.           # 伤害设置为 "Miss"
  608.           self.damage = "Miss"
  609.         end
  610.       end
  611.     # Miss 的情况下
  612.     else
  613.       # 伤害设置为 "Miss"
  614.       self.damage = "Miss"
  615.     end
  616.     # 不在战斗中的情况下
  617.     unless $game_temp.in_battle
  618.       # 伤害设置为 nil
  619.       self.damage = nil
  620.     end
  621.     # 过程结束
  622.     return effective
  623.   end
  624.   #--------------------------------------------------------------------------
  625.   # ● 应用物品效果
  626.   #     item : 物品
  627.   #--------------------------------------------------------------------------
  628.   def item_effect(item)
  629.     # 清除会心一击标志
  630.     self.critical = false
  631.     # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  632.     # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  633.     if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
  634.        ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  635.       # 过程结束
  636.       return false
  637.     end
  638.     # 清除有效标志
  639.     effective = false
  640.     # 公共事件 ID 是有效的情况下,设置为有效标志
  641.     effective |= item.common_event_id > 0
  642.     # 命中判定
  643.     hit_result = (rand(100) < item.hit)
  644.     # 不确定的特技的情况下设置为有效标志
  645.     effective |= item.hit < 100
  646.     # 命中的情况
  647.     if hit_result == true
  648.       # 计算回复量
  649.       recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
  650.       recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
  651.       if recover_hp < 0
  652.         recover_hp += self.pdef * item.pdef_f / 20
  653.         recover_hp += self.mdef * item.mdef_f / 20
  654.         recover_hp = [recover_hp, 0].min
  655.       end
  656.       # 属性修正
  657.       recover_hp *= elements_correct(item.element_set)
  658.       recover_hp /= 100
  659.       recover_sp *= elements_correct(item.element_set)
  660.       recover_sp /= 100
  661.       # 分散
  662.       if item.variance > 0 and recover_hp.abs > 0
  663.         amp = [recover_hp.abs * item.variance / 100, 1].max
  664.         recover_hp += rand(amp+1) + rand(amp+1) - amp
  665.       end
  666.       if item.variance > 0 and recover_sp.abs > 0
  667.         amp = [recover_sp.abs * item.variance / 100, 1].max
  668.         recover_sp += rand(amp+1) + rand(amp+1) - amp
  669.       end
  670.       # 回复量符号为负的情况下
  671.       if recover_hp < 0
  672.         # 防御修正
  673.         if self.guarding?
  674.           recover_hp /= 2
  675.         end
  676.       end
  677.       # HP 回复量符号的反转、设置伤害值
  678.       self.damage = -recover_hp
  679.       # HP 以及 SP 的回复
  680.       last_hp = self.hp
  681.       last_sp = self.sp
  682.       self.hp += recover_hp
  683.       self.sp += recover_sp
  684.       
  685.     if  @active_battler.is_a?(Game_Actor) and self.is_a?(Game_Enemy)
  686.        for kds in self.actions
  687.          if $data_skills[kds.skill_id].element_set.include?(36)
  688.              if rand(100) < 25 and self.hp <= 0
  689.               self.damage = -self.maxhp
  690.               self.hp += self.maxhp
  691.               self.sp += self.maxsp
  692.               self.critical = false
  693.              end
  694.             break
  695.          elsif $data_skills[kds.skill_id].element_set.include?(35)
  696.              if rand(100) < 20 and self.hp <= 0
  697.               self.damage = -self.maxhp/2
  698.               self.hp += self.maxhp/2
  699.               self.sp += self.maxsp/2
  700.               self.critical = false
  701.              end
  702.             break
  703.          end
  704.        end
  705.     end

  706.     if  @active_battler.is_a?(Game_Enemy) and self.is_a?(Game_Actor)
  707.        for kds in self.skills
  708.          if $data_skills[kds].element_set.include?(36)
  709.              if rand(100) < 25 and self.hp <= 0
  710.               self.damage = -self.maxhp
  711.               self.hp += self.maxhp
  712.               self.sp += self.maxsp
  713.               self.critical = false
  714.              end
  715.             break
  716.          elsif $data_skills[kds].element_set.include?(35)
  717.              if rand(100) < 20 and self.hp <= 0
  718.               self.damage = -self.maxhp/2
  719.               self.hp += self.maxhp/2
  720.               self.sp += self.maxsp/2
  721.               self.critical = false
  722.              end
  723.             break
  724.          end
  725.        end
  726.     end
  727.       
  728.       
  729.       effective |= self.hp != last_hp
  730.       effective |= self.sp != last_sp
  731.       # 状态变化
  732.       @state_changed = false
  733.       effective |= states_plus(item.plus_state_set)
  734.       effective |= states_minus(item.minus_state_set)
  735.       # 能力上升值有效的情况下
  736.       if item.parameter_type > 0 and item.parameter_points != 0
  737.         # 能力值的分支
  738.         case item.parameter_type
  739.         when 1  # MaxHP
  740.           @maxhp_plus += item.parameter_points
  741.         when 2  # MaxSP
  742.           @maxsp_plus += item.parameter_points
  743.         when 3  # 力量
  744.           @str_plus += item.parameter_points
  745.         when 4  # 灵巧
  746.           @dex_plus += item.parameter_points
  747.         when 5  # 速度
  748.           @agi_plus += item.parameter_points
  749.         when 6  # 魔力
  750.           @int_plus += item.parameter_points
  751.         end
  752.         # 设置有效标志
  753.         effective = true
  754.       end
  755.       # HP 回复率与回复量为 0 的情况下
  756.       if item.recover_hp_rate == 0 and item.recover_hp == 0
  757.         # 设置伤害为空的字符串
  758.         self.damage = ""
  759.         # SP 回复率与回复量为 0、能力上升值无效的情况下
  760.         if item.recover_sp_rate == 0 and item.recover_sp == 0 and
  761.            (item.parameter_type == 0 or item.parameter_points == 0)
  762.           # 状态没有变化的情况下
  763.           unless @state_changed
  764.             # 伤害设置为 "Miss"
  765.             self.damage = "Miss"
  766.           end
  767.         end
  768.       end
  769.     # Miss 的情况下
  770.     else
  771.       # 伤害设置为 "Miss"
  772.       self.damage = "Miss"
  773.     end
  774.     # 不在战斗中的情况下
  775.     unless $game_temp.in_battle
  776.       # 伤害设置为 nil
  777.       self.damage = nil
  778.     end
  779.     # 过程结束
  780.     return effective
  781.   end
  782.   #--------------------------------------------------------------------------
  783.   # ● 应用连续伤害效果
  784.   #--------------------------------------------------------------------------

  785. def slip_damage_effect

  786.     # 毒

  787.     if self.state?(7)

  788.       # 设置伤害

  789.       self.damage = self.maxhp / 20

  790.       # 分散

  791.       if self.damage.abs > 0

  792.         amp = [self.damage.abs * 15 / 100, 1].max

  793.         self.damage += rand(amp+1) + rand(amp+1) - amp

  794.       end

  795.       # HP 的伤害减法运算

  796.       self.hp -= self.damage
  797.       #剧毒
  798.        elsif  self.state?(20)

  799.       # 设置伤害

  800.       self.damage = self.maxhp / 10

  801.       # 分散

  802.       if self.damage.abs > 0

  803.         amp = [self.damage.abs * 15 / 100, 1].max

  804.         self.damage += rand(amp+1) + rand(amp+1) - amp

  805.       end

  806.       # HP 的伤害减法运算

  807.       self.hp -= self.damage


  808.     # 回血

  809.     elsif self.state?(5)

  810.       # 设置伤害

  811.       self.damage = -self.maxhp / 8

  812.       # HP 的伤害减法运算

  813.       self.hp -= self.damage      
  814.           # 群回血

  815.     elsif self.state?(17)

  816.       # 设置伤害

  817.       self.damage = -self.maxhp / 12

  818.       # HP 的伤害减法运算

  819.       self.hp -= self.damage   

  820.     # 老化

  821.     elsif self.state?(19)

  822.       # 设置伤害

  823.       self.damage = "Being aged!"

  824.       # 能力值下

  825.       $data_states[19].pdef_rate *= 0.98

  826.       $data_states[19].mdef_rate *= 0.98

  827.       $data_states[19].atk_rate *= 0.98

  828.       $data_states[19].str_rate *= 0.98

  829.       $data_states[19].dex_rate *= 0.98

  830.       $data_states[19].int_rate *= 0.98

  831.       $data_states[19].agi_rate *= 0.98

  832.       $data_states[19].eva -= 0.3

  833.       $data_states[19].eva = [$data_states[19].eva, -100].max

  834.     end

  835.     # 过程结束

  836.     return true

  837.   end
  838.     # HP 的伤害减法运算
  839.       self.hp -= self.damage
  840.     end
  841.     if self.state?(153) #风毒   
  842.       # 设置伤害
  843.       self.damage = self.hp / 4
  844.       # HP 的伤害减法运算
  845.       self.hp -= self.damage
  846.     end
  847.     if self.state?(154) #水毒
  848.       self.damage = (21 - states_turn[18]) * self.maxhp / 20
  849.       self.hp -= self.damage
  850.     end
  851.     if self.state?(155) #火毒
  852.       self.damage = self.maxhp * 15 / 100
  853.       self.hp -= self.damage
  854.     end
  855.     if self.state?(156) #土毒
  856.       self.damage = (11 - states_turn[20]) * self.maxhp / 10
  857.       self.hp -= self.damage
  858.     end
  859.     if self.state?(157) #雷毒
  860.       self.damage = self.hp * 3 / 10
  861.       self.hp -= self.damage
  862.     end
  863.      if self.state?(48) #烧伤
  864.       self.damage = self.maxhp * 1 / 10
  865.       self.hp -= self.damage
  866.     end
  867.     # 过程结束
  868.     return true
  869. end
  870.   #--------------------------------------------------------------------------
  871.   # ● 属性修正计算
  872.   #     element_set : 属性
  873.   #--------------------------------------------------------------------------
  874.   def elements_correct(element_set)
  875.     # 無属性的情况
  876.     if element_set == []
  877.       # 返回 100
  878.       return 100
  879.     end
  880.     # 在被赋予的属性中返回最弱的
  881.     # ※过程 element_rate 是、本类以及继承的 Game_Actor
  882.     #   和 Game_Enemy 类的定义
  883.     weakest = -100
  884.     for i in element_set
  885.       weakest = [weakest, self.element_rate(i)].max
  886.     end
  887.     return weakest
  888.   end
  889. end
复制代码


梦幻群侠传5 之 梦幻仙曲
主角:男1:水祈轩(后改名为“水无痕”)            男2:夜牧(鬼城道观,道名“承允”)
         女1:花语嫣(曾化名“神秘人”和“花魁”)    女2:兰胤(朱紫国,“青冥”龙女)

特殊主角:仙1:仙羽(三命精灵,守护三界)     妖1:元灵君(怨气集体,灵力化身)
               灵1:剑旭(冷面剑士,霹雳玄惊)      魂1:南宫问天(前朝皇子,今生问情)

剧情部分:★★★☆☆☆☆☆☆☆           美工绘图:★★★★★★★★★☆                技能道具★★☆☆☆☆☆☆☆☆            
游戏总进度:★☆☆☆☆☆☆☆☆☆
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
49 小时
注册时间
2012-8-20
帖子
372
13
 楼主| 发表于 2012-9-18 22:37:27 | 只看该作者
kangxi0109 发表于 2012-9-17 13:24
比想象中的简单,在工程的Game_Battler 3里,分普通攻击和特技两个部分。
原理吗...很简单,就是在战斗中 ...

一个是技能属性【必中】。勾选了此属性的技能必定命中。这个呢??、其实关键的就是这个。可以任意设置技能的必中性。


梦幻群侠传5 之 梦幻仙曲
主角:男1:水祈轩(后改名为“水无痕”)            男2:夜牧(鬼城道观,道名“承允”)
         女1:花语嫣(曾化名“神秘人”和“花魁”)    女2:兰胤(朱紫国,“青冥”龙女)

特殊主角:仙1:仙羽(三命精灵,守护三界)     妖1:元灵君(怨气集体,灵力化身)
               灵1:剑旭(冷面剑士,霹雳玄惊)      魂1:南宫问天(前朝皇子,今生问情)

剧情部分:★★★☆☆☆☆☆☆☆           美工绘图:★★★★★★★★★☆                技能道具★★☆☆☆☆☆☆☆☆            
游戏总进度:★☆☆☆☆☆☆☆☆☆
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
558
在线时间
256 小时
注册时间
2010-8-25
帖子
371
12
发表于 2012-9-18 00:40:12 | 只看该作者
本帖最后由 zxc3824 于 2012-9-18 00:41 编辑

我们假设状态1是必中状态

那么我们就用状态判断

if self.state?(1)
  hit = 100
  hit_result = (rand(100) < attacker.hit)
end


这一段我们就加在Game_Battler 3里面的
def attack_effect(attacker)下
# 第一命中判定
if self.state?(1)
  hit = 100
  hit_result = (rand(100) < attacker.hit)
else
  hit_result = (rand(100) < attacker.hit)
end


原理也很简单,就是强制将命中放在100,这样rand(100)这个函数怎么变都不会超过100

我们将属性1设置为必中
那么就这么写

if self.elements_correct(1)
    hit = 100
  hit_result = (rand(100) < attacker.hit)
end

这段代码加在Game_Battler 3里面即可

大概就是这样了
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2682
在线时间
1589 小时
注册时间
2010-10-22
帖子
1053
11
发表于 2012-9-17 23:51:30 | 只看该作者
闻人翎 发表于 2012-9-17 12:41
敌人的技能附加【必中】属性或者附加了【必中状态】自然也会必中啊。。。。。今晚静等大神的高作。
...

上次用这个文件貌似也不行,直接上脚本算了,测试的时候按照9楼的设置测试就好了。
  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.     # 战斗不能的情况下不能使用
  18.     if dead?
  19.       return false
  20.     end
  21.     # 沉默状态的情况下、物理特技以外的特技不能使用
  22.     if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
  23.       return false
  24.     end
  25.     # 获取可以使用的时机
  26.     occasion = $data_skills[skill_id].occasion
  27.     # 战斗中的情况下
  28.     if $game_temp.in_battle
  29.       # [平时] 或者是 [战斗中] 可以使用
  30.       return (occasion == 0 or occasion == 1)
  31.     # 不是战斗中的情况下
  32.     else
  33.       # [平时] 或者是 [菜单中] 可以使用
  34.       return (occasion == 0 or occasion == 2)
  35.     end
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 应用通常攻击效果
  39.   #     attacker : 攻击者 (battler)
  40.   #--------------------------------------------------------------------------
  41.   def attack_effect(attacker)
  42.     # 清除会心一击标志
  43.     self.critical = false
  44.     # 第一命中判定
  45.     hit_result = (rand(100) < attacker.hit)
  46.     # 命中的情况下
  47.     if hit_result == true
  48.       # 计算基本伤害
  49.       atk = [attacker.atk - self.pdef / 2, 0].max
  50.       self.damage = atk * (20 + attacker.str) / 20
  51.       # 属性修正
  52.       self.damage *= elements_correct(attacker.element_set)
  53.       self.damage /= 100
  54.       # 伤害符号正确的情况下
  55.       if self.damage > 0
  56.         # 会心一击修正
  57.         if rand(100) < 4 * attacker.dex / self.agi
  58.           self.damage *= 2
  59.           self.critical = true
  60.         end
  61.         # 防御修正
  62.         if self.guarding?
  63.           self.damage /= 2
  64.         end
  65.       end
  66.       # 分散
  67.       if self.damage.abs > 0
  68.         amp = [self.damage.abs * 15 / 100, 1].max
  69.         self.damage += rand(amp+1) + rand(amp+1) - amp
  70.       end
  71.       # 第二命中判定
  72.       eva = 8 * self.agi / attacker.dex + self.eva
  73.       hit = self.damage < 0 ? 100 : 100 - eva
  74.       hit = self.cant_evade? ? 100 : hit
  75.       hit_result = (rand(100) < hit)
  76.     end
  77.     #===================================添加↓
  78.     #攻击方为角色且职业属性20号为A的场合
  79.     if attacker.is_a?(Game_Actor) && $data_classes[attacker.class_id].element_ranks[20] == 1
  80.       hit_result = true #命中开关打开
  81.       #攻击方为敌人且属性20号为A的场合
  82.     elsif attacker.is_a?(Game_Enemy) && $data_enemies[attacker.id].element_ranks[20] == 1
  83.       hit_result = true #命中开关打开
  84.       #状态不为空
  85.     elsif attacker.states.size != 0
  86.       for i in 0 ... attacker.states.size
  87.       #其包含的状态中存在设置有20号属性的状态的场合
  88.         if $data_states[attacker.states[i]].guard_element_set.include?(20)
  89.           hit_result = true #命中开关打开
  90.           break #直接中断循环
  91.         end
  92.       end
  93.     end
  94.     #===================================添加↑
  95.     # 命中的情况下
  96.     if hit_result == true
  97.       # 状态冲击解除
  98.       remove_states_shock
  99.       # HP 的伤害计算
  100.       self.hp -= self.damage
  101.       # 状态变化
  102.       @state_changed = false
  103.       states_plus(attacker.plus_state_set)
  104.       states_minus(attacker.minus_state_set)
  105.     # Miss 的情况下
  106.     else
  107.       # 伤害设置为 "Miss"
  108.       self.damage = "Miss"
  109.       # 清除会心一击标志
  110.       self.critical = false
  111.     end
  112.     # 过程结束
  113.     return true
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 应用特技效果
  117.   #     user  : 特技的使用者 (battler)
  118.   #     skill : 特技
  119.   #--------------------------------------------------------------------------
  120.   def skill_effect(user, skill)
  121.     # 清除会心一击标志
  122.     self.critical = false
  123.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  124.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  125.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  126.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  127.       # 过程结束
  128.       return false
  129.     end
  130.     # 清除有效标志
  131.     effective = false
  132.     # 公共事件 ID 是有效的情况下,设置为有效标志
  133.     effective |= skill.common_event_id > 0
  134.     # 第一命中判定
  135.     hit = skill.hit
  136.     if skill.atk_f > 0
  137.       hit *= user.hit / 100
  138.     end
  139.     hit_result = (rand(100) < hit)
  140.     # 不确定的特技的情况下设置为有效标志
  141.     effective |= hit < 100
  142.     # 命中的情况下
  143.     if hit_result == true
  144.       # 计算威力
  145.       power = skill.power + user.atk * skill.atk_f / 100
  146.       if power > 0
  147.         power -= self.pdef * skill.pdef_f / 200
  148.         power -= self.mdef * skill.mdef_f / 200
  149.         power = [power, 0].max
  150.       end
  151.       # 计算倍率
  152.       rate = 20
  153.       rate += (user.str * skill.str_f / 100)
  154.       rate += (user.dex * skill.dex_f / 100)
  155.       rate += (user.agi * skill.agi_f / 100)
  156.       rate += (user.int * skill.int_f / 100)
  157.       # 计算基本伤害
  158.       self.damage = power * rate / 20
  159.       # 属性修正
  160.       self.damage *= elements_correct(skill.element_set)
  161.       self.damage /= 100
  162.       # 伤害符号正确的情况下
  163.       if self.damage > 0
  164.         # 防御修正
  165.         if self.guarding?
  166.           self.damage /= 2
  167.         end
  168.       end
  169.       # 分散
  170.       if skill.variance > 0 and self.damage.abs > 0
  171.         amp = [self.damage.abs * skill.variance / 100, 1].max
  172.         self.damage += rand(amp+1) + rand(amp+1) - amp
  173.       end
  174.       # 第二命中判定
  175.       eva = 8 * self.agi / user.dex + self.eva
  176.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  177.       hit = self.cant_evade? ? 100 : hit
  178.       hit_result = (rand(100) < hit)
  179.       # 不确定的特技的情况下设置为有效标志
  180.       effective |= hit < 100
  181.     end
  182.     #===================================添加↓
  183.     #攻击方为角色且职业属性20号为A的场合
  184.     if user.is_a?(Game_Actor) && $data_classes[user.class_id].element_ranks[20] == 1
  185.       hit_result = true #命中开关打开
  186.       #攻击方为敌人且属性20号为A的场合
  187.     elsif user.is_a?(Game_Enemy) && $data_enemies[user.id].element_ranks[20] == 1
  188.       hit_result = true #命中开关打开
  189.       #状态不为空
  190.     elsif user.states.size != 0
  191.       for i in 0 ... user.states.size
  192.       #其包含的状态中存在设置有20号属性的状态的场合
  193.         if $data_states[user.states[i]].guard_element_set.include?(20)
  194.           hit_result = true #命中开关打开
  195.           break #直接中断循环
  196.         end
  197.       end
  198.     end
  199.     #===================================添加↑
  200.     # 命中的情况下
  201.     if hit_result == true
  202.       # 威力 0 以外的物理攻击的情况下
  203.       if skill.power != 0 and skill.atk_f > 0
  204.         # 状态冲击解除
  205.         remove_states_shock
  206.         # 设置有效标志
  207.         effective = true
  208.       end
  209.       # HP 的伤害减法运算
  210.       last_hp = self.hp
  211.       self.hp -= self.damage
  212.       effective |= self.hp != last_hp
  213.       # 状态变化
  214.       @state_changed = false
  215.       effective |= states_plus(skill.plus_state_set)
  216.       effective |= states_minus(skill.minus_state_set)
  217.       # 威力为 0 的场合
  218.       if skill.power == 0
  219.         # 伤害设置为空的字串
  220.         self.damage = ""
  221.         # 状态没有变化的情况下
  222.         unless @state_changed
  223.           # 伤害设置为 "Miss"
  224.           self.damage = "Miss"
  225.         end
  226.       end
  227.     # Miss 的情况下
  228.     else
  229.       # 伤害设置为 "Miss"
  230.       self.damage = "Miss"
  231.     end
  232.     # 不在战斗中的情况下
  233.     unless $game_temp.in_battle
  234.       # 伤害设置为 nil
  235.       self.damage = nil
  236.     end
  237.     # 过程结束
  238.     return effective
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ● 应用物品效果
  242.   #     item : 物品
  243.   #--------------------------------------------------------------------------
  244.   def item_effect(item)
  245.     # 清除会心一击标志
  246.     self.critical = false
  247.     # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  248.     # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  249.     if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
  250.        ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  251.       # 过程结束
  252.       return false
  253.     end
  254.     # 清除有效标志
  255.     effective = false
  256.     # 公共事件 ID 是有效的情况下,设置为有效标志
  257.     effective |= item.common_event_id > 0
  258.     # 命中判定
  259.     hit_result = (rand(100) < item.hit)
  260.     # 不确定的特技的情况下设置为有效标志
  261.     effective |= item.hit < 100
  262.     # 命中的情况
  263.     if hit_result == true
  264.       # 计算回复量
  265.       recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
  266.       recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
  267.       if recover_hp < 0
  268.         recover_hp += self.pdef * item.pdef_f / 20
  269.         recover_hp += self.mdef * item.mdef_f / 20
  270.         recover_hp = [recover_hp, 0].min
  271.       end
  272.       # 属性修正
  273.       recover_hp *= elements_correct(item.element_set)
  274.       recover_hp /= 100
  275.       recover_sp *= elements_correct(item.element_set)
  276.       recover_sp /= 100
  277.       # 分散
  278.       if item.variance > 0 and recover_hp.abs > 0
  279.         amp = [recover_hp.abs * item.variance / 100, 1].max
  280.         recover_hp += rand(amp+1) + rand(amp+1) - amp
  281.       end
  282.       if item.variance > 0 and recover_sp.abs > 0
  283.         amp = [recover_sp.abs * item.variance / 100, 1].max
  284.         recover_sp += rand(amp+1) + rand(amp+1) - amp
  285.       end
  286.       # 回复量符号为负的情况下
  287.       if recover_hp < 0
  288.         # 防御修正
  289.         if self.guarding?
  290.           recover_hp /= 2
  291.         end
  292.       end
  293.       # HP 回复量符号的反转、设置伤害值
  294.       self.damage = -recover_hp
  295.       # HP 以及 SP 的回复
  296.       last_hp = self.hp
  297.       last_sp = self.sp
  298.       self.hp += recover_hp
  299.       self.sp += recover_sp
  300.       effective |= self.hp != last_hp
  301.       effective |= self.sp != last_sp
  302.       # 状态变化
  303.       @state_changed = false
  304.       effective |= states_plus(item.plus_state_set)
  305.       effective |= states_minus(item.minus_state_set)
  306.       # 能力上升值有效的情况下
  307.       if item.parameter_type > 0 and item.parameter_points != 0
  308.         # 能力值的分支
  309.         case item.parameter_type
  310.         when 1  # MaxHP
  311.           @maxhp_plus += item.parameter_points
  312.         when 2  # MaxSP
  313.           @maxsp_plus += item.parameter_points
  314.         when 3  # 力量
  315.           @str_plus += item.parameter_points
  316.         when 4  # 灵巧
  317.           @dex_plus += item.parameter_points
  318.         when 5  # 速度
  319.           @agi_plus += item.parameter_points
  320.         when 6  # 魔力
  321.           @int_plus += item.parameter_points
  322.         end
  323.         # 设置有效标志
  324.         effective = true
  325.       end
  326.       # HP 回复率与回复量为 0 的情况下
  327.       if item.recover_hp_rate == 0 and item.recover_hp == 0
  328.         # 设置伤害为空的字符串
  329.         self.damage = ""
  330.         # SP 回复率与回复量为 0、能力上升值无效的情况下
  331.         if item.recover_sp_rate == 0 and item.recover_sp == 0 and
  332.            (item.parameter_type == 0 or item.parameter_points == 0)
  333.           # 状态没有变化的情况下
  334.           unless @state_changed
  335.             # 伤害设置为 "Miss"
  336.             self.damage = "Miss"
  337.           end
  338.         end
  339.       end
  340.     # Miss 的情况下
  341.     else
  342.       # 伤害设置为 "Miss"
  343.       self.damage = "Miss"
  344.     end
  345.     # 不在战斗中的情况下
  346.     unless $game_temp.in_battle
  347.       # 伤害设置为 nil
  348.       self.damage = nil
  349.     end
  350.     # 过程结束
  351.     return effective
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # ● 应用连续伤害效果
  355.   #--------------------------------------------------------------------------
  356.   def slip_damage_effect
  357.     # 设置伤害
  358.     self.damage = self.maxhp / 10
  359.     # 分散
  360.     if self.damage.abs > 0
  361.       amp = [self.damage.abs * 15 / 100, 1].max
  362.       self.damage += rand(amp+1) + rand(amp+1) - amp
  363.     end
  364.     # HP 的伤害减法运算
  365.     self.hp -= self.damage
  366.     # 过程结束
  367.     return true
  368.   end
  369.   #--------------------------------------------------------------------------
  370.   # ● 属性修正计算
  371.   #     element_set : 属性
  372.   #--------------------------------------------------------------------------
  373.   def elements_correct(element_set)
  374.     # 無属性的情况
  375.     if element_set == []
  376.       # 返回 100
  377.       return 100
  378.     end
  379.     # 在被赋予的属性中返回最弱的
  380.     # ※过程 element_rate 是、本类以及继承的 Game_Actor
  381.     #   和 Game_Enemy 类的定义
  382.     weakest = -100
  383.     for i in element_set
  384.       weakest = [weakest, self.element_rate(i)].max
  385.     end
  386.     return weakest
  387.   end
  388. end
复制代码
【2022.06.03】原本以为已经不可能再找回来的东西重新找回来了,原本一直念念不忘的坑终于再一次拿起铲子了。一别竟近10年,你好,我的世界我的梦。
【不可阻挡】异元-地劫黎明
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
212 小时
注册时间
2012-3-5
帖子
228
10
发表于 2012-9-17 13:30:26 | 只看该作者
不如设置成被动技能~
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2682
在线时间
1589 小时
注册时间
2010-10-22
帖子
1053
9
发表于 2012-9-17 13:24:35 | 只看该作者
闻人翎 发表于 2012-9-17 12:41
敌人的技能附加【必中】属性或者附加了【必中状态】自然也会必中啊。。。。。今晚静等大神的高作。
...

比想象中的简单,在工程的Game_Battler 3里,分普通攻击和特技两个部分。
原理吗...很简单,就是在战斗中,判定是否命中之后,额外添加一个条件判断,无论前面的判定是否命中【三个凡是】:凡是攻击者(角色)的职业是属于设置了“必中”属性的职业,强制命中;凡是攻击者(敌人)的属性设置中设置了“必中”属性的,强制命中;凡是状态栏中带有设置了“必中”属性的状态,强制命中...这样子就可以直接无视闪避率为100%的敌人。
关于工程:
1.幽灵设置为“必中”,回避率100%
2.战士设置为“必中”
另:“必中”的属性需要设置为A才会生效(状态除外)。
教程-任务.zip (231.34 KB, 下载次数: 140)
【2022.06.03】原本以为已经不可能再找回来的东西重新找回来了,原本一直念念不忘的坑终于再一次拿起铲子了。一别竟近10年,你好,我的世界我的梦。
【不可阻挡】异元-地劫黎明
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
49 小时
注册时间
2012-8-20
帖子
372
8
 楼主| 发表于 2012-9-17 12:41:16 | 只看该作者
kangxi0109 发表于 2012-9-17 12:36
基本上有头绪了...敌人需要吗?
下午考试,今晚应该就可以交货了。
不过,不是独立脚本,事实上这个设置 ...

敌人的技能附加【必中】属性或者附加了【必中状态】自然也会必中啊。。。。。今晚静等大神的高作。


梦幻群侠传5 之 梦幻仙曲
主角:男1:水祈轩(后改名为“水无痕”)            男2:夜牧(鬼城道观,道名“承允”)
         女1:花语嫣(曾化名“神秘人”和“花魁”)    女2:兰胤(朱紫国,“青冥”龙女)

特殊主角:仙1:仙羽(三命精灵,守护三界)     妖1:元灵君(怨气集体,灵力化身)
               灵1:剑旭(冷面剑士,霹雳玄惊)      魂1:南宫问天(前朝皇子,今生问情)

剧情部分:★★★☆☆☆☆☆☆☆           美工绘图:★★★★★★★★★☆                技能道具★★☆☆☆☆☆☆☆☆            
游戏总进度:★☆☆☆☆☆☆☆☆☆
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2682
在线时间
1589 小时
注册时间
2010-10-22
帖子
1053
7
发表于 2012-9-17 12:36:00 | 只看该作者
本帖最后由 kangxi0109 于 2012-9-17 12:37 编辑
闻人翎 发表于 2012-9-17 12:30
就是说。一个是技能属性【必中】。勾选了此属性的技能必定命中。
一个是角色状态【必中】。附加了此状态 ...


基本上有头绪了...敌人需要吗?
下午考试,今晚应该就可以交货了。
不过,不是独立脚本,事实上这个设置只要在原脚本里加些东西就可以了。
【2022.06.03】原本以为已经不可能再找回来的东西重新找回来了,原本一直念念不忘的坑终于再一次拿起铲子了。一别竟近10年,你好,我的世界我的梦。
【不可阻挡】异元-地劫黎明
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-7 00:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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