XP 스크립트

기타
2010.07.26 13:55

액알

조회 수 5094 추천 수 4 댓글 30

#================================================#
#○쉬운 액션 알피지 1.00 Ver  

#================================================#
class Game_Character
  attr_accessor :monster
  alias status_initialize initialize
 
  def initialize
    status_initialize
    @monster = Game_Monster.new
  end
end

 

#================================================#
#○몬스터 객체를 생성
#   능력치들이 자동으로 저장될 공간을 생성
#================================================#
class Game_Monster
  attr_accessor :status
  attr_accessor :hp
  attr_accessor :maxhp
 
  def initialize
    @status = nil
    @hp = nil        #○몬스터hp는 DB에 존재하지 않는 값이라 새객체에 maxhp값을 담아 사용
    @maxhp = nil  #○maxhp는 자주사용되는 값이기에 새 객체에 담아 사용
  end
end

 

#================================================#
#○DB에 있는 몬스터 능력치를 이벤트로 담아온다.
#================================================#
class Game_Map < Game_Map
   
  def setup(map_id)  #○맵이 열리자마자 monster_setup이 호출된다.
    super
    monster_setup
  end
 
  def monster_setup
    for event_id in @map.events.keys #○현재 맵에 존재하는 맵이벤트 해시키를 배열화
      for monster_id in 1 .. $data_enemies.size #○DB에 존재하는 몬스터(에너미) 갯수
        if @map.events[event_id] != nil and $data_enemies[monster_id] != nil #○nil값(빈값)방지 or 에러방지
          #○맵이벤트의 이름과 DB상의 몬스터 이름이 같다면
          if @map.events[event_id].name == $data_enemies[monster_id].name
            #○몬스터객체에 DB상의 몬스터 능력치를 대입한다.
            $game_map.events[event_id].monster.status = $data_enemies[monster_id]
            $game_map.events[event_id].monster.maxhp = $game_map.events[event_id].monster.status.maxhp
            $game_map.events[event_id].monster.hp = $game_map.events[event_id].monster.maxhp
            break
          end
        end
      end
    end
  end
end


#===============================================#
#○각종 정의에 필요한 몬스터값을 변수에 담아 값을 리턴
#===============================================#
class Game_Event < Game_Event
 
  def monster_pdef
    return $monster_pdef = @monster.status.pdef
  end
 
  def monster_mdef
    return $monster_mdef = @monster.status.mdef
  end
 
  def monster_atk
    return $monster_atk = @monster.status.atk
  end
 
  def monster_str
    return $monster_str = @monster.status.str
  end
 
  def monster_dex
    return $monster_dex = @monster.status.dex
  end
 
  def monster_int
    return $monster_int = @monster.status.int
  end
 
  def monster_spd
    return $monster_spd = @monster.status.agi
  end
end


#===============================================#
#○각종 정의에 필요한 주인공 능력치를 메소드에 담는다.
#===============================================#
class Game_Player < Game_Character
 
  def player_pdef
    return $game_party.actors[0].pdef
  end
 
  def player_mdef
    return $game_party.actors[0].mdef
  end
 
  def player_atk
    return $game_party.actors[0].atk
  end
 
  def player_str
    return $game_party.actors[0].str
  end
 
  def player_dex
    return $game_party.actors[0].dex
  end
 
  def player_int
    return $game_party.actors[0].int
  end
 
  def player_spd
    return $game_party.actors[0].agi
  end
end

#===============================================#
#○몬스터 행동 정의
#===============================================#
class Game_Event < Game_Event
  attr_accessor :gauge
  attr_accessor :attack_delay
 
  def update
    super
    return if not action?
    die! if dead?
    attack!
  end
 
  def action?
    return (@monster.hp != nil)
  end
 
  def dead?
    return false if not action?
    return (@monster.hp <= 0)
  end
 
  def attack!
    if @delay == nil or @delay == 0
      @delay = 40
    else
      @delay -= 1
      return
    end
    new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
    new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
    if $game_player.x == new_x and $game_player.y == new_y
      turn_toward_player
      $game_player.damage(monster_atk,monster_str,@monster.status.animation2_id)
    end
  end
 
  def turn_toward_player
    super
    $game_player.turn_right if @direction == 4
    $game_player.turn_left if @direction == 6
    $game_player.turn_up if @direction == 2
    $game_player.turn_down if @direction == 8
  end
 
  def damage(atk,status,ani)
    return if not action?
    min_dmg = (atk + status) * 0.1
    dmg = [atk + status - monster_pdef, 0].max
    dmg = min_dmg if min_dmg >= dmg
    @monster.hp = [@monster.hp - dmg, 0].max
    @gauge = @monster.hp.to_f / @monster.maxhp.to_f
    turn_toward_player
    move_backward if $game_player.player_str > monster_str
    self.animation_id = ani
  end
 
  def die!
    return if @dead
    if rand(100) <= @monster.status.treasure_prob
      $game_party.gain_weapon(@monster.status.weapon_id,1)
      $game_party.gain_armor(@monster.status.armor_id,1)
      $game_party.gain_item(@monster.status.item_id,1)
    end
    $game_party.actors[0].exp += @monster.status.exp
    $game_party.gain_gold(@monster.status.gold)
    self.animation_id = 54
    erase
    @dead = true
    @monster.hp = nil
  end
end

class Game_Player < Game_Player
  attr_accessor :gauge
  def update
    super
    if Input.trigger?(Input::C)
      for event in $game_map.events.values
        new_x = @x + (@direction == 6 ? 1 :@direction == 4 ? -1 : 0)
        new_y = @y + (@direction == 2 ? 1 :@direction == 8 ? -1 : 0)
        if event.x == new_x and event.y == new_y and event.monster.status != nil
          event.damage(player_atk, player_str,weapon_ani)
        end
      end
    end
  end
 
  def weapon_ani
    weapon_id = $game_party.actors[0].weapon_id
    return 4 if $data_weapons[weapon_id] == nil
    return $data_weapons[weapon_id].animation2_id
  end
 
  def damage(atk,status,ani)
    min_dmg = (atk + status) * 0.1
    dmg = [atk + status - player_pdef, 0].max
    dmg = min_dmg if min_dmg >= dmg
    $game_party.actors[0].hp = [$game_party.actors[0].hp - dmg, 0].max
    @gauge = $game_party.actors[0].hp.to_f / $game_party.actors[0].maxhp.to_f
    move_backward if $game_player.player_str < $monster_str
    self.animation_id = ani
  end
end


#===================================

#hp 게이지 테스트용 (카피라이트 모름.)

#===================================

class Sprite_Character < Sprite_Character
  def update
    super
   
    if @character.gauge != nil #and @character.gauge > 0
      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
      @_gauge_sprite_b.opacity = @_gauge_duration
      @_gauge_sprite.x =self.x
      @_gauge_sprite.y =self.y
      @_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, 0, 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(0,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


 

class Game_Actor < Game_Battler
  def exp_rate
    if @exp_list[@level+1] - @exp_list[@level] > 0
      return (@exp- @exp_list[@level]).to_f / (@exp_list[@level+1] - @exp_list[@level]).to_f
    else
      return 0
    end
  end
end


class Window_Gauge < Window_Base
  def initialize
    super(0, 0, 145,105) #<사이즈
    self.contents = Bitmap.new(width - 32, height - 32)
   
    self.contents.font = Font.new("휴먼옛체", 16) #폰트사이즈
    self.opacity = 255
    self.back_opacity = 150
   
  end
 
  def refresh
    self.contents.clear
    self.contents.draw_text(0, -4,120,30, @show_text4)
    self.contents.draw_text(0, 12, 120, 30, @show_text)
    self.contents.draw_text(0, 28, 120, 30, @show_text2)
    self.contents.draw_text(0, 47, 120, 30, @show_text3)
  end
 
  def actor
    $game_party.actors[0]
  end
  def update
    super
    text  = sprintf("HP :%d /%d", actor.hp, actor.maxhp)
    text2 = sprintf("MP :%d /%d", actor.sp, actor.maxsp)
    text3 = sprintf("EXP:%.3f%%",(actor.exp_rate*100).to_f)
    text4 = sprintf("LV:%d  %s ",actor.level,actor.name)
    if @show_text != text or @show_text2 != text2 or @show_text3 != text3 or @show_text4 != text4
      @show_text = text
      @show_text2 = text2
      @show_text3 = text3
      @show_text4 = text4
      refresh
    end
  end
end

class Scene_Map < Scene_Map
  def update
    super
    @window_gauge = Window_Gauge.new unless @window_gauge
    @window_gauge.update
    unless $scene.is_a?(Scene_Map)
      @window_gauge.dispose
      @window_gauge=nil
    end
  end
end

 

 

<사용법>

 사용법은_이거한장이면_ok.jpg

 

사용법2.jpg

이름에 DB에 있는 이름과(좀비) 똑같이 써주기만하면됩니다.

ex) 고스트 , 좀비 , 사하긴, 코볼트 등등..

추가로 자율이동 ->타입 = "근접한다" 해주셔야 움직입니다.

※빨간박스가 DB에서 수정가능한부분

Comment '30'
  • ?
    엔들레스 :IS - ES 2010.07.26 18:06

    xas에서 몬스터 추가하는것과 거의 일치하는 방식이로군요

  • ?
    코다리 2010.07.30 18:29

    안돼내요,, 이런액알은 처음봅니다.

  • ?
    화살난사10억발!!! 2010.07.31 13:05

    전잘되요!!!님좀짱인듯ㅋㅋ잘씁니다

  • ?
    슈팅캐논 2010.08.01 12:09

    우와~~님좀짱인듯ㅎㅎ

  • ?
    성명없다. 2010.08.02 12:59

    우와~~님좀짱인듯ㅎㅎ2人

  • ?
    젠피아 2010.08.10 11:57

    감사합니다!

  • ?
    디스토피아 2010.08.15 05:43

    기술같은건 적용됬나요 ??

  • ?
    낙서 2010.08.16 17:25

    감사!

  • ?
    뭘바 look at me! 2010.08.18 21:57

    대박감사 #-#

  • ?
    뭘바 look at me! 2010.08.18 21:58

    스킬은 어떻게 써요?

     

  • ?
    코스튬 2010.08.19 13:28

    아르시스의 대미지는 어떻게 되어 있나요?

    예를들어 무기의 위력 + 근력이라던가

  • ?
    포인트팡팡 2010.08.19 13:28
    축하합니다. 코스튬님은 55포인트에 당첨되셨습니다
  • ?
    코스튬 2010.08.19 15:32

    리젠은 어떻게하죠,,

  • ?
    독한강아지 2010.08.19 19:04

     

  • ?
    독한강아지 2010.08.20 13:37

    근데 게임오버가 안되내요.

     

  • ?
    무뇌인 2010.09.01 17:23

     데이타베이스 => 커먼이벤트 => 병렬처리 (스위치는 게임중 켜지게 하구요) 아르시스가 주인공이라 치면 [아르시스]가 [전투 불능]일때 게임오버  << 이런식으로 하세영

  • ?
    스크립트초보 2010.08.23 21:56

    리젠을 이벤트로 만들라는데 스크립트를 못만지니;; 도와주세ㅐㅁ 게임오버까진 할순잇음

  • ?
    뱅뱅뱅 2010.08.29 22:21

    감사 합니다 ㅎ

  • ?
    작은샛별 2010.09.21 20:16

    ㄳ~♡

  • ?
    펜릴 2010.09.21 20:34

    이 스크립트 제작자입니다.

    어휴..출처도 안밝히고 무단으로 가져가셨군요 분명 맨위에

    #================================================#
    #○쉬운 액션 알피지 1.00 Ver   by [Niotsoft.펜릴]
    #버그발견시 www.niotsoft.com 에 글남겨주세요.
    #================================================#

    라고 남기고 배포했는데말이지요...

     

    사망처리조건은 다음과 같이 작성하시면됩니다.

     

    class Game_Player < Game_Player 부분아래로

    class Game_Player < Game_Player
      attr_accessor :gauge
      def update
        super

        player_die #플레이어 사망처리
        if Input.trigger?(Input::C)
          for event in $game_map.events.values
            new_x = @x + (@direction == 6 ? 1 :@direction == 4 ? -1 : 0)
            new_y = @y + (@direction == 2 ? 1 :@direction == 8 ? -1 : 0)
            if event.x == new_x and event.y == new_y and event.monster.status != nil
              event.damage(player_atk, player_str,weapon_ani)
            end
          end
        end
      end
      def player_die
        if $game_party.actors[0].hp == 0
          $scene = Scene_Gameover.new
        end
      end 

     

    여기까지 수정해서 넣으시면됩니다.

    이래도 모르시면.

    http://niotsoft.com/zbxe/freeboard/rgss_script/137965 에 작성된 스크립트를 가져다 쓰시면됩니다.

    버그수정이나 업데이트는 이곳에서 이루어지고 있습니다.

  • profile
    워메 2010.11.06 17:17

    class Game_Player < Game_Player 부분아래로

    class Game_Player < Game_Player
      attr_accessor :gauge
      def update
        super

        player_die #플레이어 사망처리
        if Input.trigger?(Input::C)
          for event in $game_map.events.values
            new_x = @x + (@direction == 6 ? 1 :@direction == 4 ? -1 : 0)
            new_y = @y + (@direction == 2 ? 1 :@direction == 8 ? -1 : 0)
            if event.x == new_x and event.y == new_y and event.monster.status != nil
              event.damage(player_atk, player_str,weapon_ani)
            end
          end
        end
      end
      def player_die
        if $game_party.actors[0].hp == 0
          $scene = Scene_Gameover.new
        end
      end 

    end<다음에 요거 넣어줘야지 되네요 ㅋㅋㅋㅋㅋㅋ

  • ?
    펜릴 2010.09.21 20:35

    현재 군복무중이므로 원거리 스킬,원거리 공격등은 전역 후 2010년 11월 이후부터 추가될예정입니다.

  • ?
    프릭스 2010.09.24 15:51

    저가 원하던 거에요! 감사합니다.

    그런데 타격 속도는 어떻게 바꾸나요?

  • ?
    니랑안놀아 2010.11.04 17:03

    이거 진짜 편하네요

  • ?
    찢어보니수표 2010.11.06 23:45

    완전 짱이네

  • profile
    스토리 2011.01.18 21:20

    왜 게임오버가 안되는거지 ㅠㅠ

  • ?
    한꼬꼬마 2011.02.18 20:56

    감사합니다!!

  • ?
    nnibal210 2011.06.19 18:42

    우아..

  • ?
    다크아이즈버드 2011.12.06 15:26

    엑스박스?

  • ?
    쌍바쌍 2014.10.19 15:37
    사용법 엑박뜨는데

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6153
» 기타 액알 30 지존!! 2010.07.26 5094
253 기타 쓸만한스크립트61개포함 28 file 궭크이 2012.01.09 4296
252 기타 XP 각종 스크립트입니다. 36 file 쿠도신이치 2009.04.26 4264
251 기타 말풍선 스크립트. 62 file 『동그라미』♥ 2010.02.04 4254
250 기타 [게이지바]게이지바 스크립트 2.5 (실용적?) 17 file 코아 코스튬 2010.12.05 4216
249 기타 [Game_Actor] 게이지바 표시 스크립트 8 file - 하늘 - 2009.08.03 4169
248 기타 대화창에 얼굴그래픽 스크립트 25 file 백호 2009.02.21 4137
247 기타 캐릭터 소개 화면 22 file 독도2005 2008.10.05 4098
246 기타 8방향 마우스 스크립트 10 file 아방스 2009.02.28 4063
245 기타 몬스터 게이지바 턴알 22 file 키라링 2009.01.22 4011
244 기타 [자작]데미지표시 19 file JACKY 2012.02.15 3835
243 기타 3D스크립트 48 file ok하승헌 2010.02.18 3808
242 기타 [게이지바]HelloCoaVer4.0 업데이트 속도 변경 [오랜만의 업데이트] 30 file 코아 코스튬 2011.04.02 3787
241 기타 만화형태 말칸 스크립트 28 file 백호 2009.02.22 3704
240 기타 [신기술 체험] RPGXP 3D 9 file 백호 2009.02.22 3633
239 기타 3d 렌더링스크립트 어렵게 찾음 9 라구나 2011.03.05 3610
238 기타 FPLE 2 - First Person Labyrinth Explorer by MGC 1 Alkaid 2012.01.17 3415
237 기타 한글 입력 스크립트 입니다. (vx -> xp) 23 file 헤르코스 2009.04.18 3396
236 기타 레벨9999만들기스크립 23 해파리 2009.04.10 3343
235 기타 횡스크롤 스크립트 한국말 번역. 15 file 백호 2009.02.21 3311
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 Next
/ 13