조회 수 8755 추천 수 0 댓글 38
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
Extra Form
출처 Niotsoft. 펜릴
사용/적용순서 해당 자료를 가져가서 게시하실때에는 꼭 출처를 부탁드립니다 [www.nioting.com]
기본적으로 오픈소스를 지향하나, 적어도 누가 개발했는지는 알고 있어야
오픈소스의 예의로 알고있습니다.

그냥 스크립트 붙여넣기 후 맵이벤트 이름을 몬스터 이름으로 설정
예) 맵이벤트에 "고스트" 라는 명칭을 쓰면 몬스터DB의 고스트가 적용됨

#================================================#
#○쉬운 액션 알피지 1.00 Ver   by [Niotsoft.펜릴]
#버그발견시 www.nioting.com 에 글남겨주세요.
#================================================#
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

# 버그발견시 www.nioting.com 에 글남겨주세요. by [Niotsoft.펜릴]
#===============================================#
#○각종 정의에 필요한 주인공 능력치를 메소드에 담는다.
#===============================================#
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
  # 버그발견시 www.nioting.com 에 글남겨주세요. by [Niotsoft.펜릴]
  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

    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 

# 버그발견시 www.nioting.com 에 글남겨주세요. by [Niotsoft.펜릴]


  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


 # 버그발견시 www.nioting.com 에 글남겨주세요. by [Niotsoft.펜릴]

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에서 수정가능한부분

  • ?
    펜릴 2010.04.11 15:29

    기능설명: RPG Maker XP툴의 DB(단축키F9) 기능을 이용

                 몬스터의 능력치 DB에서 수정가능(체력,마력,공격력,힘,민,지,방어 등등을 DB에서 수정가능)

                 드롭아이템 DB에서 수정가능

                 몬스터 공격/피격 애니메이션 DB에서 수정가능

                 보상경험치 DB에서 수정가능

                 캐릭터 무기에 있는 공격/피격 애니메이션이 몬스터를 공격했을때 구현됨(역시 DB에서 수정 가능)

                 데미지공식 수정 ( 공격력 +  힘 ) - 몬스터 방어력 , 몬스터 방어력이 지나치게 높을경우 힘+어택의 10%가 최소데미지 적용

                 액션성을 추가 ( 캐릭터의 힘 vs 몬스터의 힘  비교 후 힘이 높은쪽이 낮은쪽을 밀쳐냄, 반대로 힘이 낮은쪽은 밀쳐낼수없음)

                 몇개 더 있는거 같지만 귀찮아서... 나머지는 알아서 찾아주세요..

                 테스트중입니다 많이써보시고 버그 제보좀 부탁드립니다

  • ?
    e야기 2012.01.07 13:10

    리젠 이 됫으면 이스크립트는 완벽합니다.

  • ?
    ruby 2010.04.11 20:01

    우,... 우와 이렇게 쉬울수가

  • ?
    XP 팬 2010.04.27 22:18

    이해가.....(제가 원래 공부를 쫴금 못해서.)

  • ?
    XP 팬 2010.05.02 08:05

    이제 이해하고 했는데 고스트는 민첩성을 올려야겠다

  • ?
    XP 팬 2010.05.02 08:41

    이 스크립트 굉장히 좋네요(댓글 도배죄송합니다) 저히 형이 해라고 해서

  • ?
    펜릴 2010.05.02 12:08

    민첩성은 아직 행동으로 구현되지않았습니다. 다음 휴가때 민첩성이 몬스터 이동속도와 관련되게 추가할예정입니다

  • ?
    스피릿 2010.05.16 21:51

    DB는 어떤것인가요?
    몬스터가 쓰러질때 에니매이션은 어떻게 바꾸죠?

    한마리 죽으니까 같은 몬스터들 한대만 때리면 죽네요,,ㅠㅠ

  • ?
    펜릴 2010.05.23 15:04

    DB는 데이터베이스를 말합니다. F9 버튼이요

     

    버그가 있으면 증상을 자세히 말씀해 주시면 감사하겠습니다.

  • profile
    은하계 2010.06.13 15:12

    오 이거 대박인데요?

    이벤트 액알 관두고 이거 써볼까?

  • ?
    초보가맞니? 2010.06.27 20:29

    대박이네요. 근데 테스트용이긴 하나 보죠;

    제가 테스트해보니깐 자기 캐릭터가(몬스터 아님) 죽지 않아요..

    또 공격키가 먼가요;;

     

  • ?
    펜릴 2010.07.04 08:59

    게임오버부분 7.12일에 수정하겠습니다.

     

    공격키 C키 입니다.

  • ?
    초보가맞니? 2010.07.15 20:06

    인제 잘되군요 ^^

  • ?
    개임 매니저 2010.07.26 13:41

    난 안죽는데 이상

  • ?
    컴퓨터만지는원숭이 2010.07.31 18:54

    펜릴님 저거 뭐 영어 솰라솰라도 써야되요??

     

    쓴다면 어디다써야하나요..

  • ?
    컴퓨터만지는원숭이 2010.07.31 19:51

    아아 되요 근디 몬스터가 공격 1번 하구 그후로 공격을 안해요 어떻게해야 되나요??

  • ?
    닉네임없음 2010.08.15 20:47

    우와 잘되네요 정말 감사합니다~

  • ?
    스펀지밥 2010.08.19 15:07

    굿!

  • ?
    Lionden 2010.09.14 11:35

    감사합니다. 사용해보겠습니다. ^^

  • ?
    The Endless Story 2010.10.05 14:49

    몬스터가 공격을 하는 빈도와 횟수를 랜덤하게 해주시고

    몬스터가 공격을 받았을때 계속 뒤로 밀려나는것도 랜덤으로 해주시면 좋을듯해요.

    ( 공격을 받았을때 뒤로밀려나거나, 그자리에 있거나, 앞으로 밀고나가거나)

  • ?
    펜릴 2010.10.07 02:55

    The Endless Story//1.공격 빈도 횟수는 조만간 추가될 속성인 "공격성"을 염두해두고 개발하겠습니다.

                                    2.푸쉬기능을 rand 함수를 사용해서 "상대와의 스탯차이를 감안하여 랜덤으로 밀쳐지게" 해보겠습니다.

     

    업데이트 예정일 11.02

  • ?
    ssbest1015 2010.12.16 21:27

    그런데요...

    이거 스킬도 사용하게 스크립트 개조 부탁드려요..

    스킬도 써야되거든요.. 헷..ㅋㅋ

    부탁..

  • ?
    뻔뻔한눈동자 2010.12.18 19:07

    펜릴님,

    그럼 이 액알의 경우

    스킬은 어떻게 만들죠?

    아니면 아직 이 버전에서는 스킬을 못쓰는 건가요?

  • ?
    스우피 2011.01.19 19:53

    와우 대박 좋네요.

  • ?
    염병땀병 2011.01.25 09:34

    스킬쓰게 해 주세요 ㅎㅎ 그리고 거기 위에 뜨는 게이지바좀 없에 주시면 안될까요? ㅠㅠ

  • ?
    잉여랄까.. 2011.01.25 18:47

    끙 에러뜸 ㅠㅠ

    스크립트 편집기에 쳐집어 넣는데..

     

  • ?
    라군 2011.02.02 15:04

    정말 감사드려용ㅋㅋ

  • ?
    닉네임이없습니다 2011.02.11 13:00
    이벤트가 실행되었을 때 대미지를 입는 방식이 아니었군요
  • ?
    배짱이 2011.02.26 12:56
    스킬은 대시 그런 거라면 커먼이벤트와 스위치로 조건분기로 해서 대시를 하든가... 그럴 수 있지만, 공격 스킬은 이벤 그런 걸로는 힘들어서 스크립트를 찾아보는데 이게 보여서 봤는데 스킬 불가능.....
  • ?
    리치바르칸데모프 2011.06.21 20:42

    안되여ㅠㅠㅠ

  • ?
    e야기 2012.01.05 12:06

    리젠 이 왜안 됌?

  • ?
    봐트심슨 2012.01.06 22:27

    이렇게 좋은 스크립트는 처음봅니다 T^T

    액알로 정말하고싶었는데 감사해요 !

  • ?
    Scarf 2012.01.11 22:18

    캐릭터 공격속도를 줄이는 방법이 없을까요?

    연공하니까 애들을 쓸고다녀요;

  • ?
    카커 2012.04.02 17:24

    어케함? 이해가 안돼

  • ?
    초싸이언플라즈망 2012.12.08 17:29

    스킬은 어떻게 쓰나요?

     

  • ?
    남궁우성 2014.04.09 15:24
    몬스터를 처리하면 스위치가 작동되는 기능도 있나요?
  • ?
    남궁우성 2014.07.10 18:18
    근데요. 특정몬스터죽이면 진행되는거 어떻게하죠?
  • ?
    TIME3217 2014.11.22 23:52
    갑자기 능력치가 안보여요

  1. 일본어 스크립트를 번역하기 좋은 번역사이트 두곳입니다

    Date2010.01.09 Category공지사항 Byruby Views22086 Votes0
    read more
  2. 스크립트 게시판 관리자' ruby ' 입니다

    Date2010.01.09 Category공지사항 Byruby Views20726 Votes0
    read more
  3. 일본 스크립트/소스 공유 포럼

    Date2010.01.05 Category공지사항 By니오티 Views22257 Votes0
    read more
  4. 누구나 쉽게 만드는 액션알피지

    Date2012.11.25 Category전투관련 By펜릴 Views4364 Votes0
    Read More
  5. 초간단 XAS 오리지널.

    Date2011.08.04 Category전투관련 By호호리터엉 Views2620 Votes0
    Read More
  6. ZTBS

    Date2010.06.05 Category전투관련 By강현문 Views3557 Votes0
    Read More
  7. 턴제 전투방식 스크립트!!!!!!!

    Date2010.04.30 Category전투관련 ByXP 팬 Views3330 Votes0
    Read More
  8. 간단한 액션알피지용 스크립트 Ver.1.01 (게임오버 추가)

    Date2010.04.11 Category전투관련 By펜릴 Views8755 Votes0
    Read More
  9. ABP 액알 예제

    Date2010.02.10 Category전투관련 Byruby Views3531 Votes1
    Read More
  10. 어떤 한 몬스터를 공격지정할때 그 몬스터가 줌되는 스크립트

    Date2010.01.13 Category전투관련 Bywindshy Views2183 Votes0
    Read More
  11. 리얼타임을 이용한 딜레이 구현

    Date2010.01.10 Category전투관련 By펜릴 Views4197 Votes0
    Read More
  12. 레벨업시 체력 회복 스크립트

    Date2010.01.05 Category전투관련 By루시아스 Views2113 Votes0
    Read More
  13. 파괴효과 스크립트 이벤트적용 <사용법>

    Date2007.12.06 Category전투관련 By아하하 Views2691 Votes3
    Read More
  14. 파괴효과 추천스크립트

    Date2007.12.06 Category전투관련 By아하하 Views3588 Votes1
    Read More
  15. 콤보 스크립트

    Date2007.12.05 Category전투관련 By아하하 Views3700 Votes4
    Read More
  16. 턴알 게이지바 변경 스크립트 (HP/SP)

    Date2007.02.20 Category전투관련 By니오티 Views3984 Votes2
    Read More
  17. 게이지 확인창 스크립트 (HP/SP/EXP)

    Date2007.02.20 Category전투관련 By니오티 Views3540 Votes5
    Read More
Board Pagination Prev 1 Next
/ 1

Copyright ⓒ Nioting All Rights Reserved. (since 1999)    개인정보
        

Fatal error: Cannot access property sessionController::$lifetime in /web/old/xe/modules/session/session.controller.php on line 45