XP 스크립트

기타
2010.07.26 13:55

액알

조회 수 5102 추천 수 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 6317
821 기타 Chaos Project Debug System 1.06b by Blizzard file Alkaid 2010.09.07 1370
820 메시지 XRXS9 - 메세지 표시 업그레이드 X file Alkaid 2010.09.07 3314
819 HUD HUD Menu 2.0 by Raziel 3 Alkaid 2010.09.07 2047
818 맵/타일 Map Image Maker 3.0 by rey meustrus file Alkaid 2010.09.06 1609
817 전투 Active Time Battle 2.62 by パラ犬 file Alkaid 2010.09.06 1663
816 메뉴 Stormtronics CMS 5.39b - Hybrid Edition by Blizzard 4 file Alkaid 2010.09.06 1748
815 스킬 RO Job/Skill System 2.01b by Blizzard 2 file Alkaid 2010.09.05 1865
814 메뉴 Ryex's Collapsing CMS 2.51 3 Alkaid 2010.09.05 1673
813 전투 GubiD's Tactical Battle System 1.5.1.4 (RMXP용) GTBS 2 Alkaid 2010.09.03 2458
812 메뉴 자작 메뉴 스크립트들(L's Simple CMS and menu scenes) (SDK 호환?) 10 Alkaid 2010.09.02 3469
811 기타 House Decoration System 1.6 by MephistoX (SDK 2.x, MACL 2.x 필요) 1 file Alkaid 2010.09.02 1495
810 스킬 Grouping and Detail 7.2 by DerVVulfman 1 file Alkaid 2010.09.02 1514
809 기타 Phylomortis.com 스크립트들. file Alkaid 2010.09.02 1780
808 장비 Multislots! 2.1 by DerVVulfman 3 file Alkaid 2010.09.02 1543
807 키입력 AInput Module 3.10 by vgvgf (전체키, 마우스 입력) 6 file Alkaid 2010.09.01 3031
806 저장 키라링님이 올리신 [KGC_2PaneSave] 번역 1 무뇌인 2010.08.18 1479
805 HUD 강화 나침반 스크립트 (원본 by 허걱) 16 file JACKY 2010.08.16 3119
804 HUD 캐릭터 아래 SP,HP표시해주는 스크립트 33 file 김!제스! 2010.08.04 4279
» 기타 액알 30 지존!! 2010.07.26 5102
802 기타 명령어들 6 지존!! 2010.07.24 2294
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