조회 수 8730 추천 수 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
    갑자기 능력치가 안보여요

List of Articles
분류 제목 글쓴이 날짜 조회 수 추천 수
공지사항 일본어 스크립트를 번역하기 좋은 번역사이트 두곳입니다 ruby 2010.01.09 22074 0
공지사항 스크립트 게시판 관리자' ruby ' 입니다 ruby 2010.01.09 20725 0
공지사항 일본 스크립트/소스 공유 포럼 4 니오티 2010.01.05 22249 0
전투관련 누구나 쉽게 만드는 액션알피지 6 펜릴 2012.11.25 4344 0
전투관련 초간단 XAS 오리지널. 1 file 호호리터엉 2011.08.04 2614 0
전투관련 ZTBS 10 file 강현문 2010.06.05 3531 0
전투관련 턴제 전투방식 스크립트!!!!!!! 7 file XP 팬 2010.04.30 3329 0
전투관련 간단한 액션알피지용 스크립트 Ver.1.01 (게임오버 추가) 38 file 펜릴 2010.04.11 8730 0
전투관련 ABP 액알 예제 4 file ruby 2010.02.10 3531 1
전투관련 어떤 한 몬스터를 공격지정할때 그 몬스터가 줌되는 스크립트 9 windshy 2010.01.13 2182 0
전투관련 리얼타임을 이용한 딜레이 구현 1 펜릴 2010.01.10 4197 0
전투관련 레벨업시 체력 회복 스크립트 4 루시아스 2010.01.05 2112 0
전투관련 파괴효과 스크립트 이벤트적용 <사용법> 11 file 아하하 2007.12.06 2691 3
전투관련 파괴효과 추천스크립트 7 file 아하하 2007.12.06 3588 1
전투관련 콤보 스크립트 10 아하하 2007.12.05 3699 4
전투관련 턴알 게이지바 변경 스크립트 (HP/SP) 3 file 니오티 2007.02.20 3984 2
전투관련 게이지 확인창 스크립트 (HP/SP/EXP) 4 file 니오티 2007.02.20 3540 5
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