Ace 스크립트

아방스님이 올려주신 커스텀 장비 슬롯 스크립트

http://avangs.info/study_rpg_vx_ace/378033

 

를 약간 응용해서 장비장착을 통한 스킬 습득 관련 스크립트를 만들어보았습니다.

 

일단 스크립트 본문입니다.

 

-------------------------------------------------------------------------------------------------------------------------------------------

module Extra_Skills 
 
  Skill = [] 
    
  Skill[0] = nil
  Skill[1] = [2,2,2,2,26] # 지2 수2 화2 풍2 => 힐 (스킬 26번)
  Skill[2] = [0,0,3,0,51] # 지0 수0 화3 풍0 => 파이어 (스킬 51번)
  
end
 
module RPG
  #============================================================================
  # ■ 장비 속성치 설정
  #============================================================================
  class RPG::EquipItem < RPG::BaseItem
    attr_accessor :el_earth
    attr_accessor :el_water
    attr_accessor :el_fire
    attr_accessor :el_wind
    attr_accessor :el_set
   
    def el_earth
      return @note =~ /<earth=(\d+)\s*>/  ? $1.to_i : 0
    end
    def el_water
      return @note =~ /<water=(\d+)\s*>/ ? $1.to_i : 0
    end
    def el_fire
      return @note =~ /<fire=(\d+)\s*>/ ? $1.to_i : 0
    end
    def el_wind
      return @note =~ /<wind=(\d+)\s*>/ ? $1.to_i : 0
    end
    def el_set
      return [el_earth, el_water, el_fire, el_wind]
    end
   
  end
end

#============================================================================
# ■ 액터 속성치 묘화
#============================================================================
class Window_Base < Window
  def draw_actor_nickname(actor, x, y, width = 180)
    change_color(normal_color)
    text0 = sprintf("지%s ", actor.el_equips[0])
    text1 = sprintf("수%s ", actor.el_equips[1])
    text2 = sprintf("화%s ", actor.el_equips[2])
    text3 = sprintf("풍%s ", actor.el_equips[3])
    text = text0 + text1 + text2 + text3
    draw_text(x, y, width, line_height, text)
  end
end

class Window_Status < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 리프레시
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_block1   (line_height * 0)
    draw_horz_line(line_height * 1)
    draw_block2   (line_height * 2)
    draw_horz_line(line_height * 6)
    draw_block3   (line_height * 7)
  end
end

class Game_Actor < Game_Battler
  #============================================================================
  # ■ 액터 속성치 작성
  #============================================================================
  attr_accessor :el_equips
  alias ori_setup setup
  def setup(actor_id)
    @el_equips = [0,0,0,0]
    ori_setup(actor_id)
  end
 
  #-------------------------------------------------------------------------- 
  # ● 장비변환 - 액터 속성 변환
  #--------------------------------------------------------------------------
  def change_equip(slot_id, item)
    return unless trade_item_with_party(item, equips[slot_id])   
    if item == nil     
      return if item && equip_slots[slot_id] != item.etype_id   
    else     
      if item.is_a?(RPG::Armor)       
        if Extra_Slots::Slots[item.atype_id] == nil         
          return if item && equip_slots[slot_id] != item.etype_id       
        else         
          return if item && equip_slots[slot_id] != item.atype_id       
        end     
      else       
        return if item && equip_slots[slot_id] != item.etype_id     
      end   
    end   
    if equip_slots[slot_id] == 5
      if item == nil
        for x in 0..3
          @el_equips[x] -= @equips[slot_id].object.el_set[x] if @equips[slot_id].object != nil
        end
        change_skill_minus
      else
        for x in 0..3
          @el_equips[x] += item.el_set[x]
        end
        change_skill_plus
      end
    end
    @equips[slot_id].object = item 
    refresh 
  end
 
  #-------------------------------------------------------------------------- 
  # ● 스킬 습득 가능성 체크
  #--------------------------------------------------------------------------
  def skill_plus?(obj)
    return false if obj == nil
    return false if obj == [0,0,0,0]
    if @el_equips[0] >= obj[0]
      if @el_equips[1] >= obj[1]
        if @el_equips[2] >= obj[2]
          if @el_equips[3] >= obj[3]
            return true
          end
        end
      end
    end
    return false
  end
 
  #-------------------------------------------------------------------------- 
  # ● 액터 속성에 따른 스킬 습득
  #--------------------------------------------------------------------------
  def change_skill_plus
    for index in 1..Extra_Skills::Skill.size
      if Extra_Skills::Skill[index] != nil
        obj = Extra_Skills::Skill[index]
        learn_skill(obj[4]) if skill_plus?(obj)
      end
    end
  end
 
  #-------------------------------------------------------------------------- 
  # ● 액터 속성에 따른 스킬 삭제
  #--------------------------------------------------------------------------
  def change_skill_minus
    for index in 1..Extra_Skills::Skill.size
      if Extra_Skills::Skill[index] != nil
        obj = Extra_Skills::Skill[index]
        if @skills.include?(obj[4])
          forget_skill(obj[4]) unless skill_plus?(obj)
        end
      end
    end
  end
 
end

---------------------------------------------------------------------------------------------------------------------

 

주의!! 아방스님이 올려두신 사용자 장비슬롯 스크립트 아래에 추가해야 합니다.

사용자 장비슬롯 스크립트가 필요합니다.

 

사용법은 이렇습니다. 일단 디폴트로는 지수화풍 4개의 변수를 지정해놨습니다.

추가된 장비슬롯에 장착되는 장비물품의 메모란에 <earth=a>, <water=b>,<fire=c>,<wind=d>를 기입하면

각각 속성치가 a,b,c,d 만큼 상승합니다. 액터 기본은 0,0,0,0이고요. 이 속성은 시스템의 속성과는 전혀 무관합니다.

 

그다음 module Extra_Skills부분에서 Skill[n] = [a, b, c, d, skill_id]를 작성하면 됩니다.

앞의 n은 순서를 나타내는 인덱스니까 적당히 넣어주시면 되고 a,b,c,d는 각각 스킬습득에 필요한 속성 요구수치입니다.

마지막 skill_id는 입수하려는 스킬id입니다. 데이터베이스 스킬창 열면 스킬 이름 앞에 나오는 숫자입니다.

 

그리고 속성수치를 표시할 부분이 마땅치 않아서 일단 닉네임자리를 대신차지하게 했고요.

장비슬롯을 추가하다보니 스테이터스창의 젤 마지막 블록( 캐릭터 설명 )파트까지 장비 이름이 파고들길래

그부분도 지워뒀습니다.

 

젤 중요한 부분은 습득하려는 스킬타입이 액터 설정시 추가되어 있어야 한다는 점입니다.

위의 스크립트에서는 힐과 파이어가 설정되어 있습니다. 하지만 액터 스킬타입에 특기만 있고 마법이 없다면

힐과 파이어는 스킬 타입이 마법이기 때문에 습득할 수 없습니다.

 

 

 

영웅전설6의 쿼츠장착을 통한 아츠습득 시스템을 구현해보려고 노력했는데 제 실력은 이정도인것 같네요.

쩝... 공부해야되는데 ACE가 너무 매력적이라서 이러고 놀고 있습니다. ㅎㅅㅎ

 

Who's 아이미르

?

허루쿠... 임용고시 공부해야되는데 이러고 있다....

 

알만툴의 중독성은 쩔어준다는;;;

  • ?
    Bluesky(新) 2012.02.06 08:49

    저도 공부해야 하는데. 내일 시험인데 하늘이 저을 도와서(?) 월요일로 반편성배치고사가 연기 됬네요. ( 학교 중에 가야 한다.. )

    음.. 장비 특성에서도 스킬 추가 / 삭제가 있던것으로 아는데 스크립트와 차이점은 무엇인가요?

    ( ace 글은 내가 다 댓글 다는 ... ㅠㅠ )

  • ?
    아이미르 2012.02.06 09:09

    음, 이 스크립트는 단순히 장비를 장착한다고 스킬이 추가되거나 삭제되는 건 아니고 장착한 장비의 속성치가 일정 수치가 되면 스킬을 습득하고 그에 못미치면 다시 스킬이 삭제됩니다.

     

    본문에 보면 힐 같은 경우는 지2 수2 화2 풍2의 속성치가 만족되어야 습득할 수 있게 되어 있습니다. 추가 장비 슬롯에 장비를 장착해서 이 속성 요구치를 만족하면 힐 스킬을 습득할 수 있습니다. 하지만 장비를 교체하다가 이 속성요구치에 못미치게 되면 다시 힐이란 스킬이 삭제되는 겁니다.

  • ?
    Bluesky(新) 2012.02.06 11:00

    음.. 그렇군요. ace는 유용한 스크립트들이(?) 많이 올라와서 좋군요.

    ( 카페는.. 크윽.. )

  • profile
    시옷전사 2012.02.09 18:24

    이건 아주 좋군요


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 5593
공지 RPG VX ACE 유용한 링크 모음 16 아방스 2012.01.03 29399
37 기타 ACE) 오블리비언 락픽 구현 V0.5.2 7 file 77이알 2012.09.02 4826
36 이동 및 탈것 8 방향 이동 스크립트 ( 사선 이동 캐릭터 그래픽 지원 ) 9 file 미루 2013.07.11 4876
35 그래픽 Galy`s 캐릭터 그래픽 커스텀 3 스리아씨 2013.12.17 4924
34 스킬 스킬 숙련도 시스템 8 아이미르 2012.02.24 4946
33 전투 CP's Battle Engine by Neon Black 20 Alkaid 2013.02.14 4989
32 전투 레벨업시 HP/MP 전체회복 9 쿠쿠밥솥 2012.02.05 5052
31 타이틀/게임오버 타이틀 스크린 커스터마이징 11 file 라실비아 2013.08.12 5181
30 전투 Schala 전투 시스템 (XAS에 의해 구동) 11 홍색의환상향 2013.05.05 5354
29 상점 VXAce 상점 스크립트 V0.9 17 아이미르 2012.06.29 5398
28 이동 및 탈것 RPG VX ACE ( RGSS3_8direction_move_v1.01 ) 8방향 스크립트 17 file 쿠쿠밥솥 2012.01.24 5448
27 HUD Variables-Display Script System 8 file 허걱 2012.05.27 5475
26 전투 [VX Ace] Damage Popup by Dargor 7 Alkaid 2011.12.04 5476
25 메뉴 Customizable Main Menu 1.0b by modern algebra 4 file Alkaid 2012.02.13 5476
24 기타 없는 것 같아서 올립니다. VX ACE 한계 돌파 스크립트입니다. 24 빙룡군 2012.07.07 5620
23 아이템 물품 이름 컬러 변경 14 까까까 2012.01.04 5657
22 키입력 키 입력 확장 - 전체키 + 마우스입력 40 file 허걱 2012.12.15 5810
21 메뉴 ace용 mog메뉴와 mog전투 10 file 꿈꾸는사람 2012.08.04 6079
20 전투 XAS Hero Edition Ace Experimental 0.5 6 Alkaid 2012.01.15 6162
19 전투 VXAce 사이드뷰 스크립트 (번역) 23 아이미르 2012.12.10 6379
18 미니맵 미니맵 표시 스크립트 21 file 아방스 2012.01.16 6511
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 Next
/ 11