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

Project1

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

本人对脚本一窍不通麻烦指导下

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
0
在线时间
0 小时
注册时间
2009-1-15
帖子
2
跳转到指定楼层
1
发表于 2009-1-15 01:42:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
lass Interpreter
  def enemy_battle
    #各参数说明:X打开独立开关X;1结束游戏
    #各参数说明:X打开独立开关X;1暂时消除事件
    #怪物事件命名格式:
    #Enemy+怪物编号+视野内移动+视野+视野外移动+主角死亡处理+事件死亡处理
    evt = $game_map.events[@event_id]
    eid = evt.event.name[5,3].to_i
    ego = evt.event.name[11,1]
    ekp = evt.event.name[12,1]
    enemy = $data_enemies[eid]
    player = $game_player
    actor = $game_party.actors[0]
    weapon = $data_weapons[actor.weapon_id]
    battle_action(actor, enemy, player, evt)
    actor.hp -= player.damage if not player.damage == "Miss"
    if actor.hp <= 0
      $game_system.se_play($data_system.actor_collapse_se)
      if ego == "1"
        $game_temp.gameover = true
      else
        $game_self_switches[[@map_id,@event_id,ego]] = true
        $game_map.need_refresh = true        
      end
    end
    battle_action(enemy, actor, evt, player)
    evt.hp -= evt.damage if not evt.damage == "Miss"
    if evt.hp<=0
      $game_system.se_play($data_system.enemy_collapse_se)
      $game_party.gain_gold(enemy.gold)
      actor.exp += enemy.exp
      if rand(100)<enemy.treasure_prob
        if enemy.item_id > 0
          $game_party.gain_item(enemy.item_id, 1)
        end
        if enemy.weapon_id > 0
          $game_party.gain_weapon(enemy.weapon_id, 1)
        end
        if enemy.armor_id > 0
          $game_party.gain_armor(enemy.armor_id, 1)
        end
      end
      if ekp == "1"
        evt.erase
      else
        $game_self_switches[[@map_id,@event_id,ekp]] = true
        $game_map.need_refresh = true
      end
    end
    evt.direction_fix = false
    evt.turn_toward_player
    evt.direction_fix = true
  end
  def get_damage_p(p2,p1)
    p1d = p1.direction
    p2d = p2.direction
    if p1d == p2d
      case p1d
      when 2
        if p1.y < p2.y
          return 4
        else
          return 1
        end
      when 4
        if p1.x > p2.x
          return 4
        else
          return 1
        end
      when 6
        if p1.x < p2.x
          return 4
        else
          return 1
        end
      when 8
        if p1.y > p2.y
          return 4
        else
          return 1
        end
      end
    end
    return 2
  end
  def battle_action(dmer, ater, evt, player)
    dct_dmg = get_damage_p(evt, player)
    if ater.is_a?(Game_Actor) and $game_switches[2]==true
      skill = $data_skills[$game_variables[$game_party.actors[0].id+50]]
      ater.sp -= skill.sp_cost
      power = skill.power + ater.atk * skill.atk_f / 100
      if power > 0
        power -= dmer.pdef * skill.pdef_f / 200
        power -= dmer.mdef * skill.mdef_f / 200
        power += ater.int/2 + rand(ater.int/2)
        power = [power, 0].max
      end
      # 计算倍率
      rate = 20
      rate += (ater.str * skill.str_f / 100)
      rate += (ater.dex * skill.dex_f / 100)
      rate += (ater.agi * skill.agi_f / 100)
      rate += (ater.int * skill.int_f / 100)
      # 计算基本伤害
      evt.damage = power * rate / 20
      # 属性修正
      evt.damage *= elements_correct(skill.element_set, dmer)
      evt.damage /= 100
      if rand(100) < (4 * ater.dex * dct_dmg / dmer.agi)
        evt.damage *= 2
        evt.critical = true
      end
      # 命中判定
      eva = 8 * dmer.agi / ater.dex / dct_dmg + dmer.eva
      hit = evt.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
      hit_result = (rand(100) < hit)
      if hit_result
        evt.damage_pop = true
      else
        evt.damage = "Miss"
        evt.damage_pop = true
      end
    elsif ater.is_a?(Game_Actor)
      evt.damage = [ater.atk + ater.str/2 + rand(ater.str/2) - dmer.pdef , 0].max
      if rand(100) < (4 * ater.dex * dct_dmg / dmer.agi)
        evt.damage *= 2
        evt.critical = true
      end
      hit_per = 8 * dmer.agi * 2 / ater.dex / dct_dmg + dmer.eva
      hit = evt.damage < 0 ? 100 : 100 - hit_per
      hit_result = (rand(100) < hit)
      if hit_result
        evt.damage_pop = true
      else
        evt.damage = "Miss"
        evt.critical = false
        evt.damage_pop = true
      end
    else
      rating_max = 0
      for i in 0...ater.actions.size
        if ater.actions.rating > rating_max
          rating_max = ater.actions.rating
        end
      end
      ratings_total = 0
      for i in 0...ater.actions.size
        if ater.actions.rating > rating_max - 3
          ratings_total += ater.actions.rating - (rating_max - 3)
        end
      end
      value = rand(ratings_total)
      # 设置对应生成随机数的当前行动
      for i in 0...ater.actions.size
        if ater.actions.rating > rating_max - 3
          if value < ater.actions.rating - (rating_max - 3)
            if ater.actions.kind == 0
              ekid = 0
              evt.damage = [ater.atk + ater.str/2 + rand(ater.str/2) - dmer.pdef , 0].max
              if rand(100) < (4 * ater.dex * dct_dmg / dmer.agi)
                evt.damage *= 2
                evt.critical = true
              end
              hit_per = 8 * dmer.agi * 2 / ater.dex / dct_dmg + dmer.eva
              hit = evt.damage < 0 ? 100 : 100 - hit_per
              hit_result = (rand(100) < hit)
              if hit_result
                evt.damage_pop = true
              else
                evt.damage = "Miss"
                evt.critical = false
                evt.damage_pop = true
              end
            else
              ekid = ater.actions.skill_id
              skill = $data_skills[ekid]
              power = skill.power + ater.atk * skill.atk_f / 100
              if power > 0
                power -= dmer.pdef * skill.pdef_f / 200
                power -= dmer.mdef * skill.mdef_f / 200
                power += ater.int/2 + rand(ater.int/2)
                power = [power, 0].max
              end
              # 计算倍率
              rate = 20
              rate += (ater.str * skill.str_f / 100)
              rate += (ater.dex * skill.dex_f / 100)
              rate += (ater.agi * skill.agi_f / 100)
              rate += (ater.int * skill.int_f / 100)
              # 计算基本伤害
              evt.damage = power * rate / 20
              # 属性修正
              evt.damage *= elements_correct(skill.element_set, dmer)
              evt.damage /= 100
              if rand(100) < (4 * ater.dex * dct_dmg / dmer.agi)
                evt.damage *= 2
                evt.critical = true
              end
              # 命中判定
              eva = 8 * dmer.agi / ater.dex / dct_dmg + dmer.eva
              hit = evt.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
              hit_result = (rand(100) < hit)
              # 状态变化
              if hit_result
                evt.damage_pop = true
                for i in 0...skill.plus_state_set.size
                  dmer.add_state(skill.plus_state_set)
                end
                for i in 0...skill.minus_state_set.size
                  dmer.remove_state(skill.minus_state_set)
                end
              else
                evt.damage = "Miss"
                evt.damage_pop = true
              end
            end
            break
          else
            value -= ater.actions.rating - (rating_max - 3)
          end
        end
      end
    end
    if ater.is_a?(Game_Actor)
      if $game_switches[2]==true
        evt.animation_id = skill.animation2_id
      else
        weapon = $data_weapons[ater.weapon_id]
        if weapon == nil
          evt.animation_id = 4
        else
          evt.animation_id = weapon.animation2_id
        end
      end
    else
      if ekid==0
        evt.animation_id = ater.animation2_id
      else
        evt.animation_id = skill.animation2_id
      end
    end
  end
  def elements_correct(element_set, dmer)
    # 無属性的情况
    if element_set == []
      # 返回 100
      return 100
    end
    # 在被赋予的属性中返回最弱的
    weakest = -100
    for i in element_set
      if dmer.is_a?(RPG::Enemy)
        # 获取对应属性有效度的数值
        table = [0,200,150,100,50,0,-100]
        result = table[dmer.element_ranks]
        weakest = [weakest, result].max
      else
        weakest = [weakest, dmer.element_rate(i)].max
      end
    end
    return weakest
  end
end

这个是ARPG模板的脚本~我想问的是:
#各参数说明:X打开独立开关X;1结束游戏
    #各参数说明:X打开独立开关X;1暂时消除事件
    #怪物事件命名格式:
    #Enemy+怪物编号+视野内移动+视野+视野外移动+主角死亡处理+事件死亡处理
这个怎吗添?{/ll}我等了N天了~{/dk}麻烦懂脚本的速度点告我!我很急这用这个~{/gg}
此贴于 2009-1-15 12:12:48 被版主darkten提醒,请楼主看到后对本贴做出回应。
此贴于 2009-1-15 12:15:24 被版主darkten提醒,请楼主看到后对本贴做出回应。

Lv1.梦旅人

梦石
0
星屑
0
在线时间
0 小时
注册时间
2009-1-15
帖子
2
2
 楼主| 发表于 2009-1-15 01:44:35 | 只看该作者
没有人告我一下吗?{/ll}
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-19 13:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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