전투관련
2012.11.25 01:43

누구나 쉽게 만드는 액션알피지

조회 수 4357 추천 수 0 댓글 6
?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form
라이센스 기타 라이센스
출처 내가만듬
강의종류 텍스트
사용/적용순서 F11열고
main바로 위에 붙여넣어주세요

#================================================#
#○쉬운 액션 알피지 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
  attr_accessor :인식
 
  def initialize
    @status = nil
    @hp = nil        #○몬스터hp는 DB에 존재하지 않는 값이라 새객체에 maxhp값을 담아 사용
    @maxhp = nil  #○maxhp는 자주사용되는 값이기에 새 객체에 담아 사용
    @인식 = 0
  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 :atkdelay

  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 인식!
    @monster_x = (@x - $game_player.x).abs
    @monster_y = (@y - $game_player.y).abs
    if @monster_x <= 3 and @monster_y <= 3
      if @monster.인식 == 0
        @move_type = 2
        @move_speed = 3
        @move_frequency = 6
        @animation_id=98
        return @monster.인식 = 1
      end
    end
  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 rand(5) <= 1
    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
    @atkdelay = nil
  end
end

class Game_Player < Game_Player
  attr_accessor :gauge
  attr_accessor :atkdelay
  def update
    super
    @real_time = Time.now #실제시간 변수처리
    player_die #플레이어 사망처리
    player_attack #플레이어 공격
  end
 
  def player_die
    if $game_party.actors[0].hp == 0
      $scene = Scene_Gameover.new
    end
  end

  #플레이어 공격
  def player_attack
    if Input.trigger?(Input::C) and @atkdelay.to_f <= @real_time.to_f
      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
          player_attack_speed
          event.damage(player_atk, player_str,weapon_ani)
        end
      end
    end
  end
 
  #무기 공속 무기를 벗으면 기본공속 1.0초
  def player_attack_speed
    @atkdelay = @real_time.to_f + (0.01 * weapon_speed.to_f)
  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 weapon_speed
    weapon_id = $game_party.actors[0].weapon_id
    return $game_party.actors[0].agi = 50 if $data_weapons[weapon_id] == nil
    return $data_weapons[weapon_id].agi_plus
  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 rand(5) <= 1
    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에서 수정가능한부분

 

 

1.20 ver 릴리즈 노트

 

1.공격속도는 DB > 무기 > 민첩 수치로 조절 가능합니다.

(민첩이 높으면 높을 수록 공격이 느려집니다. - DB >시스템 > 민첩을 공격속도로 바꿔주시면 되겠습니다.)

민첩 100 = 공격속도 1초

민첩 150 = 공격속도 1.5초

 

2.몬스터 인공지능 개선

플레이어가 몬스터 반경 3x3타일에 접근하면

느낌표 이펙트를 띄우고 엄청난 속도로 달려들게 됩니다.

  • ?
    초싸이언플라즈망 2012.12.09 14:38
    리젠은 하나요?
  • ?
    펜릴 2012.12.10 14:34
    스토리형 RPG기때문에 별도의 리젠은 없고, 다만 맵이동 시
    동일 위치에서 리젠되니 형식에 맞춰 게임을 만들어 보시기 바랍니다.
  • ?
    크그르그아 2012.12.19 18:11
    애니매이션을 장착한 무기에 따라서 바꿀순 없나요?
  • ?
    크그르그아 2012.12.19 18:23
    아 되군요. 제가 원하던 거네요 감사합니다 ㅋㅋ
  • profile
    오오봉 2012.12.29 12:47
    근데..스킬이 사용이 안되네요
  • ?
    TIME3217 2014.11.22 23:54
    갑자기 능력치가 메소드인가 뭔가에 않보이네요

  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. 한글자씩 글자 나오는거 완전판!!(오류 하나도 없음)

    Date2013.07.09 Category대화관련 By만원만주라 Views2123 Votes0
    Read More
  5. 누구나 쉽게 만드는 액션알피지

    Date2012.11.25 Category전투관련 By펜릴 Views4357 Votes0
    Read More
  6. 화면이 부드럽게 이동돼는 스크립트

    Date2012.09.27 Category공통 Script By★Best갱신★ Views2020 Votes0
    Read More
  7. 혹시나해서 일정키로 스크롤X 화면 부드럽게만...(스크립트를 삭제를 조금 했습니다)

    Date2012.02.13 Category맵관련 By호호리터엉 Views1790 Votes0
    Read More
  8. 2D 로 가는길! 횡스크롤 이닷!

    Date2012.01.24 Category장르변경 By공냑군 Views2046 Votes0
    Read More
  9. 게이지바 스크립트!! 최고!!

    Date2011.08.08 Category기타 By코아 코스튬 Views4254 Votes0
    Read More
  10. 대화 창에 얼굴 넣기 스크립트

    Date2011.08.08 Category대화관련 By노르 Views3446 Votes0
    Read More
  11. 조금 다른 맵표시 스크립트

    Date2011.08.08 Category맵관련 By노르 Views1887 Votes0
    Read More
  12. NPC 위에 이름표시 하기 스크립트

    Date2011.08.08 Category시각적 효과 By노르 Views2482 Votes0
    Read More
  13. 초간단 XAS 오리지널.

    Date2011.08.04 Category전투관련 By호호리터엉 Views2620 Votes0
    Read More
  14. 전투 비슷???????????

    Date2011.07.29 Category스킬관련 By아오오오오옹니 Views1845 Votes0
    Read More
  15. 전체키 스크립트

    Date2011.07.19 Category기능추가 By닉네임이없습니다 Views2215 Votes0
    Read More
  16. 이름입력 스크립트

    Date2011.07.16 Category기타 By닉네임이없습니다 Views2211 Votes0
    Read More
  17. 맵이름 띄우기 (오류없이 진짜나옵니다)

    Date2011.07.06 Category맵관련 By지나가던개 Views2246 Votes0
    Read More
  18. 간단한 링 메뉴 스크립트(처음올리는 스크립트)

    Date2011.05.22 Category메뉴관련 Bylts1503 Views2173 Votes0
    Read More
  19. 이것은약간온라인이랑섞인듯? 어쨋든 클릭스크립트!!

    Date2011.02.23 Category온라인 By호호리터엉 Views2221 Votes0
    Read More
  20. W키눌러서 미니맵표시

    Date2011.01.22 Category맵관련 By호호리터엉 Views2763 Votes1
    Read More
  21. Shift키누르고 방향키누르면 화면스크롤되는것

    Date2011.01.21 Category맵관련 By호호리터엉 Views2583 Votes0
    Read More
  22. 맵이름 띄우기, 케릭터 ID띄우기

    Date2011.01.05 Category맵관련 By꼬마쟁이 Views7401 Votes0
    Read More
  23. 중복일것 같은데;; [한글 이름 입력]

    Date2011.01.05 Category기타 By꼬마쟁이 Views4644 Votes0
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

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