천공,농장만든이님 꼭 봐주세요

by 농장만든이 posted Jan 07, 2006
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
이번에는 아예 다 써드릴게요;;;

#==============================================================================
# ■ Interpreter (분할 정의 7)
#------------------------------------------------------------------------------
#  이벤트 커멘드를 실행하는 interpreter입니다.이 클래스는 Game_System 곳간
# 스나 Game_Event 클래스의 내부에서 사용됩니다.
#==============================================================================

class Interpreter
  #--------------------------------------------------------------------------
  # ● 에너미의 HP 증감
  #--------------------------------------------------------------------------
  def command_331
    # 조작하는 값을 취득
    value = operate_value(@parameters[1], @parameters[2], @parameters[3])
    # 이테레이타로 처리
    iterate_enemy(@parameters[0]) do |enemy|
      # HP 가 0 이 아닌 경우
      if enemy.hp > 0
        # HP 를 변경 (전투 불능이 허가되어 있지 않으면 1 으로 한다)
        if @parameters[4] == false and enemy.hp + value <= 0
          enemy.hp = 1
        else
          enemy.hp += value
        end
      end
    end
    # 계속
    return true
  end
  #--------------------------------------------------------------------------
  # ● 에너미의 SP 증감
  #--------------------------------------------------------------------------
  def command_332
    # 조작하는 값을 취득
    value = operate_value(@parameters[1], @parameters[2], @parameters[3])
    # 이테레이타로 처리
    iterate_enemy(@parameters[0]) do |enemy|
      # SP 를 변경
      enemy.sp += value
    end
    # 계속
    return true
  end
  #--------------------------------------------------------------------------
  # ● 에너미의 스테이트 변경
  #--------------------------------------------------------------------------
  def command_333
    # 이테레이타로 처리
    iterate_enemy(@parameters[0]) do |enemy|
      # 스테이트의 옵션 [HP 0 상태로 간주하는] 이 유효의 경우
      if $data_states[@parameters[2]].zero_hp
        # 불사신 플래그를 클리어
        enemy.immortal = false
      end
      # 스테이트를 변경
      if @parameters[1] == 0
        enemy.add_state(@parameters[2])
      else
        enemy.remove_state(@parameters[2])
      end
    end
    # 계속
    return true
  end
  #--------------------------------------------------------------------------
  # ● 에너미의 전회복
  #--------------------------------------------------------------------------
  def command_334
    # 이테레이타로 처리
    iterate_enemy(@parameters[0]) do |enemy|
      # 전회복
      enemy.recover_all
    end
    # 계속
    return true
  end
  #--------------------------------------------------------------------------
  # ● 에너미의 출현
  #--------------------------------------------------------------------------
  def command_335
    # 에너미를 취득
    enemy = $game_troop.enemies[@parameters[0]]
    # 숨어 플래그를 클리어
    if enemy != nil
      enemy.hidden = false
    end
    # 계속
    return true
  end
  #--------------------------------------------------------------------------
  # ● 에너미의 변신
  #--------------------------------------------------------------------------
  def command_336
    # 에너미를 취득
    enemy = $game_troop.enemies[@parameters[0]]
    # 변신 처리
    if enemy != nil
      enemy.transform(@parameters[1])
    end
    # 계속
    return true
  end
  #--------------------------------------------------------------------------
  # ● 애니메이션의 표시
  #--------------------------------------------------------------------------
  def command_337
    # 이테레이타로 처리
    iterate_battler(@parameters[0], @parameters[1]) do |battler|
      # 버틀러가 존재하는 경우
      if battler.exist?
        # 애니메이션 ID 를 설정
        battler.animation_id = @parameters[2]
      end
    end
    # 계속
    return true
  end
  #--------------------------------------------------------------------------
  # ● 데미지의 처리
  #--------------------------------------------------------------------------
  def command_338
    # 조작하는 값을 취득
    value = operate_value(0, @parameters[2], @parameters[3])
    # 이테레이타로 처리
    iterate_battler(@parameters[0], @parameters[1]) do |battler|
      # 버틀러가 존재하는 경우
      if battler.exist?
        # HP 를 변경
        battler.hp -= value
        # 전투중이라면
        if $game_temp.in_battle
          # 데미지를 설정
          battler.damage = value
          battler.damage_pop = true
        end
      end
    end
    # 계속
    return true
  end
  #--------------------------------------------------------------------------
  # ● 액션의 강제
  #--------------------------------------------------------------------------
  def command_339
    # 전투중이 아니면 무시
    unless $game_temp.in_battle
      return true
    end
    # 턴수가 0 이라면 무시
    if $game_temp.battle_turn == 0
      return true
    end
    # 이테레이타로 처리 (편의적인 것으로, 복수가 될 것은 없다)
    iterate_battler(@parameters[0], @parameters[1]) do |battler|
      # 버틀러가 존재하는 경우
      if battler.exist?
        # 액션을 설정
        battler.current_action.kind = @parameters[2]
        if battler.current_action.kind == 0
          battler.current_action.basic = @parameters[3]
        else
          battler.current_action.skill_id = @parameters[3]
        end
        # 행동 대상을 설정
        if @parameters[4] == -2
          if battler.is_a?(Game_Enemy)
            battler.current_action.decide_last_target_for_enemy
          else
            battler.current_action.decide_last_target_for_actor
          end
        elsif @parameters[4] == -1
          if battler.is_a?(Game_Enemy)
            battler.current_action.decide_random_target_for_enemy
          else
            battler.current_action.decide_random_target_for_actor
          end
        elsif @parameters[4] >= 0
          battler.current_action.target_index = @parameters[4]
        end
        # 강제 플래그를 설정
        battler.current_action.forcing = true
        # 액션이 유효하고 [곧바로 실행] 의 경우
        if battler.current_action.valid? and @parameters[5] == 1
          # 강제 대상의 버틀러를 설정
          $game_temp.forcing_battler = battler
          # 인덱스를 진행시킨다
          @index += 1
          # 종료
          return false
        end
      end
    end
    # 계속
    return true
  end
  #--------------------------------------------------------------------------
  # ● 배틀의 중단
  #--------------------------------------------------------------------------
  def command_340
    # 배틀 중단 플래그를 세트
    $game_temp.battle_abort = true
    # 인덱스를 진행시킨다
    @index += 1
    # 종료
    return false
  end
  #--------------------------------------------------------------------------
  # ● 메뉴 화면의 호출
  #--------------------------------------------------------------------------
  def command_351
    # 배틀 중단 플래그를 세트
    $game_temp.battle_abort = true
    # 메뉴 호출 플래그를 세트
    $game_temp.menu_calling = true
    # 인덱스를 진행시킨다
    @index += 1
    # 종료
    return false
  end
  #--------------------------------------------------------------------------
  # ● 세이브 화면의 호출
  #--------------------------------------------------------------------------
  def command_352
    # 배틀 중단 플래그를 세트
    $game_temp.battle_abort = true
    # 세이브 호출 플래그를 세트
    $game_temp.save_calling = true
    # 인덱스를 진행시킨다
    @index += 1
    # 종료
    return false
  end
  #--------------------------------------------------------------------------
  # ● 게임 오버
  #--------------------------------------------------------------------------
  def command_353
    # 게임 오버 플래그를 세트
    $game_temp.gameover = true
    # 종료
    return false
  end
  #--------------------------------------------------------------------------
  # ● 타이틀 화면에 되돌린다
  #--------------------------------------------------------------------------
  def command_354
    # 타이틀 화면에 되돌리는 플래그를 세트
    $game_temp.to_title = true
    # 종료
    return false
  end
  #--------------------------------------------------------------------------
  # ● 스크립트
  #--------------------------------------------------------------------------
  def command_355
    # script 에 1 행 째를 설정
    script = @list[@index].parameters[0] + "n"
    # 루프
    loop do
      # 다음의 이벤트 커멘드가 스크립트 2 행 째 이후의 경우
      if @list[@index+1].code == 655
        # script 에 2 행 째 이후를 추가
        script += @list[@index+1].parameters[0] + "n"
      # 이벤트 커멘드가 스크립트 2 행 째 이후가 아닌 경우
      else
        # 루프 중단
        break
      end
      # 인덱스를 진행시킨다
      @index += 1
    end
    # 평가
    result = eval(script)
    # 반환값이 false 의 경우
    if result == false
      # 종료
      return false
    end
    # 계속
    return true
  end
end


     이상입니다.
그다음은 메인이죠?

#==============================================================================
# ■ Main
#------------------------------------------------------------------------------
#  각 클래스의 정의가 끝난 후, 여기로부터 실제의 처리가 시작됩니다.
#==============================================================================
begin
  # 트란지션 준비
  Graphics.freeze
  # 씬 오브젝트 (타이틀 화면)를 작성
  $scene = Scene_Title.new
  # $scene 가 유효한 한계 main 메소드를 호출한다
  while $scene != nil
    $scene.main
  end
  # 페이드아웃
  Graphics.transition(20)
rescue Errno::ENOENT
  # 예외 Errno::ENOENT 를 보충
  # 파일을 오픈할 수 없었던 경우, 메세지를 표시해 종료한다
  filename = $!.message.sub("No such file or directory - ", "")
  print("파일 #{filename} 가 발견되지 않습니다.")
end

Articles

1 2 3 4 5 6 7 8 9 10