XP 스크립트

#=================================================
# ■ Simple_Action
#-------------------------------------------------
#  Author: Bimilist[비밀소년]
#  Desc: 액션 알피지의 간단한 버젼입니다.
#            고의적으로 함수를 한국어로 만들었으므로,
#            일본어로 번역시 작동여부는 불투명합니다.
#=================================================



#───────────────────────
# ♧ 그냥 유용한 함수
#───────────────────────
def 전멸했니?
  # 전이벤트의 루프
  for event in $game_map.events.values
    # 이벤트의 좌표와 트리거가 일치했을 경우
    if event.액션하니?
      return false
    end
  end
  return true
end
def 파티바꿔!
  $game_player.rotate_party
end

# ━━━━━━━━━━━━━━━━━━━━━━━━
# ♣ Game_Event
#    Game_Event를 액션용으로 바꾸어 줍니다.
# ━━━━━━━━━━━━━━━━━━━━━━━━
class Game_Event < Game_Event
  attr_accessor :gauge
  #───────────────────────
  # ♧ 프레임 갱신
  #───────────────────────
  def update
    super
    return if not 액션하니?
    지워져! if 죽었니? and not 지워졌니?
    리젠! if 죽었니? and 리젠되니?
    어택!
  end
  #───────────────────────
  # ♧ 되살리기 기능 추가
  #───────────────────────
  def unerase
    @erased = false
    refresh
  end
  #───────────────────────
  # ♧ moveto(-10,-10)이 안되는 것을 대신.
  #───────────────────────
  def moveto_outside
    @x = -10
    @y = -10
    @real_x = @x * 128
    @real_y = @y * 128
    @prelock_direction = 0
  end
  #───────────────────────
  # ♧ 간편함을 위한 함수들
  #───────────────────────
  def 액션하니?
    return (@hp != nil)
  end
  def 죽었니?
    return false if not 액션하니?
    return (@hp == 0)
  end
  def 리젠되니?
    return (@regen_time != nil)
  end
  def 지워졌니?
    return (@erased == true)
  end
  #───────────────────────
  # ♧ 생명력과 타격치를 설정함으로서 액션을 시작
  #───────────────────────
  def 액션(hp, dmg)
    return if 액션하니?
    @maxhp = @hp = hp
    @dmg = dmg
  end
  #───────────────────────
  # ♧ 리젠한다. time은 초단위. 소수점도 가능.
  #───────────────────────
  def 리젠(time)
    return if not 액션하니?
    @regen_time = time
    @regen_count = 0
  end
  #───────────────────────
  # ♧ 추가로 돈과 경험치도 지급
  #───────────────────────
  def 상금(gold, exp)
    @gold = gold
    @exp = exp
  end
  #───────────────────────
  # ♧ 아이템
  #───────────────────────
  def 아이템(id, rate = 100)
    @item_id = id
    @item_rate = rate
  end
  #───────────────────────
  # ♧ 무기
  #───────────────────────
  def 무기(id, rate = 100)
    @weapon_id = id
    @weapon_rate = rate
  end
  #───────────────────────
  # ♧ 자신에게 데미지를 준다
  #───────────────────────
  def 데미지(dmg)
    return if not 액션하니?
    @hp = [@hp - dmg, 0].max
    @gauge = @hp.to_f / @maxhp.to_f
  end
  #───────────────────────
  # ♧ 자신을 죽인다
  #───────────────────────
  def 지워져!
    item = nil
    if (@item_id and @item_rate)
      if rand(100) < @item_rate
        item = $data_items[@item_id]
      end
    end
   
    weapon = nil
    if (@weapon_id and @weapon_rate)
      if rand(100) < @weapon_rate
        weapon = $data_weapons[@weapon_id]
      end
    end
   
    if (@gold and @exp)
      $game_player.보상(@gold, @exp, item, weapon)
    elsif (item)
      $game_player.보상(0, 0, item)
    elsif (weapon)
      $game_player.보상(0, 0, weapon)
     
    end
    moveto_outside
    erase
    return if 리젠되니?
    @hp = nil
    @dmg = nil
    @gold = nil
    @exp = nil
    @item_id = nil
    @item_rate = nil
    @weapon_id = nil
    @weapon_rate = nil
  end
  #───────────────────────
  # ♧ 리젠한다.
  #───────────────────────
  def 리젠!
    return if not 리젠되니?
    if @regen_count < @regen_time * 40
      @regen_count += 1
      return
    end
    moveto(@event.x, @event.y)
    @hp = @maxhp
    @regen_count = 0
    unerase
  end
  #───────────────────────
  # ♧ 자신이 공격한다
  #───────────────────────
  def 어택!
    단거리_공격_간단히_주인공만
  end
  #───────────────────────
  # ♧ 간단히 주인공만 공격하는 함수
  #  간단함을 유지하기 위해서 딜레이를 위한 변수를
  #  따로 만들지 않고 1.0초로 고정한다.
  #  어택() 함수와 분리한 이유는 장거리 공격으로의
  #  확장을 위해서이다.
  #  ps. 1초에 한번씩 주인공을 바라보며 공격하므로 강하다!!
  #───────────────────────
  def 단거리_공격_간단히_주인공만
    if @delay == nil or @delay == 0
      @delay = 40
    else
      @delay -= 1
      return
    end
    dist = (x - $game_player.x).abs + (y - $game_player.y).abs
    if dist == 1
      turn_toward_player
      $game_player.animation_id = 4
      $game_player.데미지(@dmg)
    end
  end
end



# ━━━━━━━━━━━━━━━━━━━━━━━━
# ♣ Game_Player
#    Game_Player를 액션용으로 바꾸어 줍니다.
#    간단함을 유지하기 위해 다음과 같이 만들었습니다.
#    1. 액션에 참여하는 액터는 오로지 파티맴버의
#        첫번째 케릭터가 되겠습니다.
#    2. 죽을 경우 파티 맴버들의 순서를 바꾸며,
#        모두 죽는 경우에는 게임오버로 처리됩니다.
#    3. 파티에 아무도 없는 경우 전투를 하지 않습니다.
#    4. 데미지 공식은 간단히 체력 빼기 타격치입니다.
#        즉, 방어력, 회피율, 힘 등은 모두 무시됩니다.
#    필요에 따라 개조하여 사용하세요.
# ━━━━━━━━━━━━━━━━━━━━━━━━
class Game_Player < Game_Player
  attr_accessor :gauge
  #───────────────────────
  # ♧ 프레임 갱신
  #───────────────────────
  def update
    super
    return if not 액션하니?
    다이 if 죽었니?
    어택
  end
  #───────────────────────
  # ♧ 간편함을 위한 함수들
  #───────────────────────
  def 파티있니?
    return ($game_party.actors.size != 0)
  end
  def 액션하니?
    return 파티있니?
  end
  def 죽었니?
    return false if not 파티있니?
    return ($game_party.actors[0].hp == 0)
  end
  #───────────────────────
  # ♧ 보상받고 메세지로 표기
  #───────────────────────
  def 보상(gold, exp, item, weapon = nil)
    if 파티있니?
      $game_party.actors[0].exp += exp
      $game_party.gain_gold(gold)
     
      case weapon
      when RPG::Weapon
        $game_party.gain_weapon(weapon.id, 1)
      end     
    end
   
      if not item and not weapon
        간단메세지(sprintf("[%d]G / [%d]EXP를 획득!", gold, exp))
      elsif not weapon
        간단메세지(sprintf("[%d]G / [%d]EXP / [%s] 획득!", gold, exp, item.name))
      elsif not item
        간단메세지(sprintf("[%d]G / [%d]EXP / [%s] 획득!", gold, exp, weapon.name))         
      elsif not gold and not exp
        간단메세지(sprintf("[%s] 획득! / [%s] 획득!", item.name, weapon.name))
      else
        간단메세지(sprintf("[%d]G / [%d]EXP / [%s] 획득! / [%s] 획득!", gold, exp, item.name, weapon.name))
      end
      case item
      when RPG::Item
        $game_party.gain_item(item.id, 1)
      when RPG::Weapon
        $game_party.gain_weapon(item.id, 1)

      end
      end
 
  #───────────────────────
  # ♧ 자신에게 데미지를 준다
  #───────────────────────
  def 데미지(dmg)
    return if not 액션하니?
    pdef = $game_party.actors[0].pdef
    dex = $game_party.actors[0].dex
    dmg = (dmg - (dex + pdef))
    if dmg <= 0
      dmg = 1
    end
    $game_party.actors[0].hp -= dmg
    @gauge = $game_party.actors[0].hp.to_f / $game_party.actors[0].maxhp.to_f
  end
#───────────────────────
  # ♧ 자신을 죽인다
  #───────────────────────
  def 다이
    # 게임 오버 판정
    rotate_party
  # $game_temp.gameover = $game_party.all_dead?
  end
  def rotate_party
    return if $game_party.actors.size < 2
    actor = $game_party.actors[0]
    for i in 0..($game_party.actors.size - 2)
      $game_party.actors[i] = $game_party.actors[i + 1]
    end
    $game_party.actors[$game_party.actors.size - 1] = actor
    $game_player.refresh
  end
  #───────────────────────
  # ♧ 자신이 공격한다
  #───────────────────────
  def 어택
    단거리_공격_간단히_주인공만
  end
  #───────────────────────
  # ♧ 적합한 이벤트를 골라내어 공격한다
  #    간편함을 위해서 딜레이... 없음...!!!!
  #───────────────────────
  def 단거리_공격_간단히_주인공만
    # 결정키가 눌리면
    if Key.repeat?(24)
      # 정면의 좌표를 계산
      new_x = @x + (@direction == 6 ?  1 : @direction == 4 ?  -1 : 0)
      new_y = @y + (@direction == 2 ?  1 : @direction == 8 ?  -1 : 0)
      # 전이벤트의 루프
      for event in $game_map.events.values
        # 이벤트의 좌표와 트리거가 일치했을 경우
        if event.x == new_x and event.y == new_y and
          luk= $game_party.actors[0].agi/20
          cri= rand(100)
         
          if $game_switches[21] == true
#스킬
            event.animation_id = 70
            event.데미지(($game_party.actors[0].atk+$game_party.actors[0].str)*2)
            $game_switches[21] = false
           
          elsif cri <= luk
#크리티컬
          event.데미지(($game_party.actors[0].atk+$game_party.actors[0].str)*2)
          event.animation_id = 103
                   
        else
#일반공격
          event.데미지($game_party.actors[0].atk+$game_party.actors[0].str)
          event.animation_id = 7
          end
        end
      end
    end
  end
end


# ━━━━━━━━━━━━━━━━━━━━━━━━
# ♣ Sprite_Character > 작은게이지
#    케릭터에 작은 게이지를 표시합니다
#    ver. SimpleAction
# ━━━━━━━━━━━━━━━━━━━━━━━━
class Sprite_Character < Sprite_Character
  def update
    super
    if @character.gauge != nil
      gauge(@character.gauge)
      @character.gauge = nil
    end
    if @_gauge_setup then
      @_gauge_duration = [@_gauge_duration - 5, 0].max
      @_gauge_sprite_b.x = self.x
      @_gauge_sprite_b.y = self.y - self.oy
      @_gauge_sprite_b.opacity = @_gauge_duration
      @_gauge_sprite.x = self.x
      @_gauge_sprite.y = self.y - self.oy
      @_gauge_sprite.opacity = @_gauge_duration
    end
  end
  def gauge(p)
    setup_gauge if not @_gauge_setup
    @_gauge_sprite.src_rect = Rect.new(0, 0, p * 30, 2)
    @_gauge_duration = 255
  end
  def setup_gauge
    dispose_gauge
    @_gauge_setup = true
    @_gauge_sprite = Sprite.new(self.viewport)
    @_gauge_sprite.bitmap = Bitmap.new(30, 2)
    @_gauge_sprite.bitmap.fill_rect(0, 0, 30, 2, Color.new(255, 255, 0))
    @_gauge_sprite.ox = 15
    @_gauge_sprite.oy = -1
    @_gauge_sprite.z = 1000
    @_gauge_sprite_b = Sprite.new(self.viewport)
    @_gauge_sprite_b.bitmap = Bitmap.new(32, 4)
    @_gauge_sprite_b.bitmap.fill_rect(0, 0, 32, 4, Color.new(0, 0, 0))
    @_gauge_sprite_b.bitmap.fill_rect(1, 1, 30, 2, Color.new(255, 0, 0))
    @_gauge_sprite_b.ox = 16
    @_gauge_sprite_b.oy = 0
    @_gauge_sprite_b.z = 999
  end
  def dispose_gauge
    return if not @_gauge_setup
    @_gauge_setup = false
    @_gauge_sprite.dispose
    @_gauge_sprite_b.dispose
  end
  def dispose
    dispose_gauge
    super
  end
end




---

지우라고하면 바로 지우겠습니다.

크리티컬은 luk(agi였던가 dex였던가;;)이 높을수록 확률이 높아지고,

스킬은 스위치 21번이 켜져있을때 나가게 되어있습니다.

스위치를 병행해서 사용한거죠...

스킬을 더추가시키리면 elsif 게속 써주면 돼겠죠??? ;;;[자신없어서 의문문으로 --ㅋ]

.
.
.

네.. 뭐 그런거죠.[어디서많이본?ㅎㅎ]

Who's 백호

?

이상혁입니다.

http://elab.kr

Comment '10'

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6202
1021 키입력 한글입력스크립트 16 file 아방스 2007.11.09 11828
1020 온라인 채팅 가능 온라인 스크립트 배포 107 file 아방스 2009.01.03 10685
1019 온라인 RPG 만들기 xp 온라인 스크립트 33 아방스 2007.11.09 9601
1018 맵/타일 [유니크급] RPG XP 게임을 3D화로 보자! Neo Mode7 script / 52 file 쉴더 2009.02.28 9447
1017 온라인 온라인 스크립트 Unis Net RMXP 공식 배포! 25 file 뮤바보 2011.12.25 9403
1016 온라인 광넷[ 광땡 온라인 + 넷플레이 ] 62 - 하늘 - 2009.08.02 9003
1015 전투 [액알]neo_a-rpg_module_1[1][1].2 스크립트 83 file 은빛바람 2009.10.03 8307
1014 이름입력 대화창에 얼굴, 이름 띄우기 37 킬라롯 2008.11.09 7497
1013 온라인 넷플레이1.7.0+abs5.5+한챗 49 쀍뛝쒧 2009.01.24 7289
1012 메뉴 메이플스토리처럼 메뉴를^^ 57 file 딸기님 2010.07.13 7145
1011 메시지 대화창에 얼굴 그래픽 띠우기 73 아방스 2007.11.09 7119
1010 스킬 ABP액알 v1.2 스킬추가, 버그수정판 36 file 백호 2009.02.22 6920
1009 전투 [신기술 체험] 강회된 횡스크롤 액알 13 file 백호 2009.02.22 6841
1008 메뉴 온라인메뉴처럼!! 메이플 메뉴처럼!! 변신~스크립트 33 WMN 2008.03.17 6824
1007 그래픽 화면을 부드럽게 해주는스크립트[ 아주 유용] 56 file - 하늘 - 2009.08.05 6566
1006 온라인 Mr.Metring NPE 1.0 [RPG XP 온라인 스크립트] 35 아방스 2009.01.07 6535
1005 이름입력 케릭터 위에 또는 NPC 위에 이름 뛰우기 [헬악이님 제공] 49 file 아방스 2007.11.09 6414
1004 액터 시트르산의 XP용 감정 말풍선 표시 스크립트 37 file 시트르산 2011.01.25 6114
1003 HUD 주인공,NPC이름 머리 나타내기 49 file 송긔 2010.11.28 6067
1002 전투 액알 스크립트 24 백호 2009.02.22 6017
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 52 Next
/ 52