XP 스크립트

기타
2010.07.26 13:55

액알

조회 수 5095 추천 수 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
54 기타 하나더올립니다....하암........이건...렙제라네요 7 벨☆ 2010.01.23 1754
53 기타 말풍선 스크립트. 62 file 『동그라미』♥ 2010.02.04 4254
52 기타 3D스크립트 48 file ok하승헌 2010.02.18 3808
51 기타 거울에 캐릭 반사 20 ok하승헌 2010.02.18 2388
50 기타 endroll 주석 번역 6 file insertend 2010.05.15 1638
49 기타 데이터베이스 자체 제한 해체 XP Ver. 13 THE풀잎 2010.07.04 2170
48 기타 명령어들 6 지존!! 2010.07.24 2288
» 기타 액알 30 지존!! 2010.07.26 5095
46 기타 Phylomortis.com 스크립트들. file Alkaid 2010.09.02 1775
45 기타 House Decoration System 1.6 by MephistoX (SDK 2.x, MACL 2.x 필요) 1 file Alkaid 2010.09.02 1489
44 기타 Chaos Project Debug System 1.06b by Blizzard file Alkaid 2010.09.07 1367
43 기타 간단한 Scene_Base Alkaid 2010.09.09 1390
42 기타 Complete Climate and Time System 1.2 by ForeverZer0 1 Alkaid 2010.09.17 1310
41 기타 SFont 사용 스크립트 by Trickster Alkaid 2010.10.05 1512
40 기타 Seph's Test Bed v.4 (파일첨부) (SDK2.x용) Alkaid 2010.10.08 1533
39 기타 [맵 아이디 확인 스크립트] 맵아이디 모르는 사람을 위한 스크립트 9 file 코아 코스튬 2010.10.09 2161
38 기타 현재시간표시 33 file 코아 코스튬 2010.10.09 2528
37 기타 [회복] 대기 회복 스크립트4.0 여러 오류 문제 해결 및 길이 줄임 11 file 코아 코스튬 2010.11.06 2189
36 기타 Advanced Gold Display by Dubealex (돈 액수를 세자리씩 끊어 표기) 2 Alkaid 2010.11.18 1559
35 기타 Upload & Download files with RGSS 2.1 by berka (XP/VX 공용) 5 Alkaid 2010.11.20 2134
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 Next
/ 13