Project1

标题: 菜鸟求教! [打印本页]

作者: mmmzxc    时间: 2010-10-26 09:08
标题: 菜鸟求教!
敌人备注里面 <move=4>
                      <scope=11>
                      <face=sbjface,1>
是什么意思?
作者: saturnfjh    时间: 2010-10-26 09:14
回复 mmmzxc 的帖子

你用的脚本发出来
作者: px.凤翔九天    时间: 2010-10-26 22:35
敌人备注?!敌人有备注吗?在哪里?在哪里?
(ARPG吗?)
作者: mmmzxc    时间: 2010-10-26 23:56
回复 px.凤翔九天 的帖子

作者: mmmzxc    时间: 2010-10-26 23:58
回复 saturnfjh 的帖子
#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
#  マップ画面の処理を行うクラスです。
#==============================================================================

class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------
  # ● 敵ターン更新
  #--------------------------------------------------------------------------
  def update_turn_enemy
    for event in @unit_list
      next unless event.enemy_flag          # エネミーユニットでなければ次へ
      next if event.unit.dead?              # 死んでいれば次へ
      next if event.unit.restriction > 1    # 行動不能なら次へ
      return if event.moving?               # 移動中ならば終了
      @event = event
      unless @event.action_end or @event.move_end
        focus_event(@event)
        @status_window.refresh(@event)
        wait(20)
        @event.unit.make_action             # 行動の決定
      end
      # 移動が終わっていなければ移動する
      unless @event.move_end
        if @event.move_target != nil ? update_enemy_move_target : update_enemy_move
          @event.move_end = true
          Graphics.frame_reset  # フレームスキップ対策
          return
        else
          @event.move_end = true if @event.move_end
        end
      end
      # 行動処理
      unless @event.action_end
        if update_enemy_action
          @event.action_end = true
          Graphics.frame_reset  # フレームスキップ対策
          return
        else
          @event.action_end = true if @event.move_end
        end
      end
      return unless @event.action_end and @event.move_end
    end
    change_turn   # 味方ターンへ戻す
  end
  #--------------------------------------------------------------------------
  # ● 移動処理
  #--------------------------------------------------------------------------
  def update_enemy_move
    # 行動対象が味方なら味方、敵なら敵を移動目標にする
    target = @event.get_near_enemy(@event.unit.action.for_friend?)
    return true if target.empty?                   # 対象がいなければ終了
    # 行動前でなおかつ最優先対象が行動範囲内にいるなら移動を後回しにする
    unless @event.action_end
      attack_dist = 1                           # 攻撃が届く距離を計算
      if @event.unit.action.skill?
        attack_dist = @event.unit.action.skill.attack_dist +
          @event.unit.action.skill.effect_dist
      end
      if @event.get_distance(target[0]) <= attack_dist
        return false
      end
    end
    make_movable_cell                         # 移動可能範囲を作成
    # 逃走移動
    if @event.unit.hp * 100 / @event.unit.maxhp <= @event.away_hp
      # 対象の中で一番近くにいるものを選ぶ
      d = 1024
      for event in target
        if @event.get_distance(event) < d
          d = @event.get_distance(event)
          enemy = event
        end
      end
      # 一番近い敵との距離が一番遠くなるセルをテーブルから選択
      scope_dist = enemy.get_distance(@event)
      for pos in @movable_cell.keys
        if @movable_cell[pos] != ""
          d = enemy.get_distance_cell(pos[0], pos[1])
          if d > scope_dist
            scope_dist = d
            x = pos[0]
            y = pos[1]
          end
        end
      end
    # 接近移動
    else
      # 接近目標に攻撃が届く移動可能なセルがあるか調べる
      attack_dist = 1                           # 攻撃が届く距離を計算
      if @event.unit.action.skill?
        attack_dist = @event.unit.action.skill.attack_dist +
          @event.unit.action.skill.effect_dist
      end
      for event in target
        for pos in @movable_cell.keys
          if @movable_cell[pos] != ""
            d = event.get_distance_cell(pos[0], pos[1])
            if d <= attack_dist
              x = pos[0]
              y = pos[1]
              break
            end
          end
        end
        break if x != nil
      end
      if x == nil
        # 対象との距離が一番短くなるセルをテーブルから選択
        scope_dist = target[0].get_distance(@event)
        for pos in @movable_cell.keys
          if @movable_cell[pos] != ""
            d = target[0].get_distance_cell(pos[0], pos[1])
            if d < scope_dist
              scope_dist = d
              x = pos[0]
              y = pos[1]
            end
          end
        end
      end
    end
    # 移動ルートを作成する
    if x != nil
      make_move_route(x, y)
      $game_player.set_auto_move(x, y)
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 移動目標への移動処理
  #--------------------------------------------------------------------------
  def update_enemy_move_target
    # すでに到着していれば終了
    return true if @event.x == @event.move_target[0] and @event.y == @event.move_target[1]
    make_movable_cell       # 移動可能範囲を作成
    # 目標との距離が一番短くなるセルをテーブルから選択
    dist = 1024
    for pos in @movable_cell.keys
      if @movable_cell[pos] != ""
        d = (pos[0] - @event.move_target[0]).abs + (pos[1] - @event.move_target[1]).abs
        if d < dist
          dist = d
          x = pos[0]
          y = pos[1]
        end
      end
    end
    # 移動ルートを作成する
    if x != nil
      make_move_route(x, y)
      $game_player.set_auto_move(x, y)
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 行動処理
  #--------------------------------------------------------------------------
  def update_enemy_action
    check_attack_cell                 # 攻撃可能セルを調べる
    check_effect_cell                 # 効果範囲の作成
    # 効果範囲内に一番多くの対象がいる攻撃可能セル選ぶ
    max = 0
    maxhp = 99999
    for pos in @attack_cell
      n = 0
      hp = 99999
      for pos2 in @effect_cell
        enemy = unit_xy(pos[0] + pos2[0], pos[1] + pos2[1])
        next if enemy == nil                    # 誰もいなければ次のセルへ
        # 行動対象が味方の場合
        if @event.unit.action.for_friend?
          next unless enemy.enemy_flag
          # スキルの効果が適用されない相手なら次へ
          if @event.unit.action.skill?
            next unless enemy.unit.skill_effective?(@event.unit, @event.unit.action.skill)
          end
        # 行動対象が敵の場合
        else
          next if enemy.id == @event.id
          next if enemy.enemy_flag
        end
        n += 1
        hp = enemy.unit.hp if enemy.unit.hp < hp
      end
      if n > max or (n == max and hp < maxhp)
        x = pos[0]
        y = pos[1]
        max = n
        maxhp = hp
      end
    end
    return false if max == 0
    $game_player.set_auto_move(x, y)
    enemy = unit_xy(x, y)
    @status_window.refresh(enemy) if enemy != nil
    wait(10)
    attack(x, y)
    return true
  end
end

作者: mmmzxc    时间: 2010-10-27 00:02
我是菜鸟破解的“士兵甲” 但看不懂脚本!
声明 我破解是为咯自己娱乐 决不乱发别人的劳动成果。
作者: saturnfjh    时间: 2010-10-27 08:26
回复 mmmzxc 的帖子


    明显不是和这个脚本有关…… 你找找 class Game_Enemy ,看看是哪个脚本重新定义过 enemy的 note
作者: mmmzxc    时间: 2010-10-28 01:47
回复 saturnfjh 的帖子用最土的办法试出来咯 <move=3>移动步数
<scope=15>巡视范围
<face=sbjface1,3>
文件  图片名 第3个


   




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1