VX 스크립트

http://avangs.info/?_filter=search&mid=rgss2&search_keyword=%EC%8A%A4%ED%82%AC&search_target=title&document_srl=235704

 

훈덕님이 번역하신 스킬 필요조건이 필요해서 가져가다가

 

댓글에 레벨제한은 왜 없나요... 라는 글을 읽고

 

http://avangs.info/?_filter=search&mid=rgss2&search_keyword=%EC%B0%B8%EC%A1%B0+%EA%B0%92&search_target=title&document_srl=237208

 

까까까님의 VX대표적 참조값을 참고해서 살짝 손을 댔습니다.

 

일단 제가 테스트 했을 때는 이상이 없었지만 혹시라도 이상이 생길지도 모릅니다 oTZ

 

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

 

 수정했습니다. 이번에 스크립트에 대해 조금 더 알게 되어서 불필요한 부분을 삭제했습니다.

 

레벨제한이나 직업제한 부분에 있어서

 

종전에는 <lev_up id n>, <class_eq id n> 처럼 액터 id에 대해서 레벨이  n이상일때, 직업코드가 n일때

 

같은 필요조건을 걸었다면

 

이번 수정은 <lev_up n>, <class_eq n> 처럼 스킬 사용자에 대해서 레벨이 n이상일때, 직업코드가 n일때

 

와 같이 사용할 수 있게 수정했습니다.

 

그리고 <state n> , <gold n>, <element n>을 추가했습니다. 사용법은 스크립트 상단의 주석부분을 참조해주세요

 

아래는 수정된 스크립트입니다.

 

###########################
# Requirements for Skills #
##############################################################################
# 버전 1.1                                                               
# 제작자: Queex                                                             
# 저작권: 비상업적 일반 창작자
# 필요 스크립트: TagNote 2.0 이상  (이 스크립트보다 위쪽에 위치하도록!)                                               
# 번역: 훈덕
##############################################################################
# 스킬의 사용에 필요 조건이 생깁니다.
# 이것을 활용하여
# 기술을 사용하면 불화살이 소모되게 한다거나
# HP가 낮을 때만 발동되는 초필살기 등을 만들 수 있습니다.
#
# 필요 조건은 스킬의 메모 항목에 표기하면됩니다. 
# 각 종류별로 하나의 태그만 인식됩니다.                 
#            
#                                                                           
# 무기의 메모 항목에 표기하는 태그:                   
# <weapon_type xxx>                                                         
#                                                                          
# 아이템에 표기 가능한 태그:                                           
# <include_battle_test> - 이 아이템을 테스트 전투에서 사용가능하게 해줌 
#                                                                          
# 스킬에 표기 가능한 태그:                                     
# <weapon_type xxx> - 해당 종류의 무기로만 스킬 사용 가능   
# <item_present id> - 파티가 해당 id의 아이템을 소유하고 있어야 스킬 사용 가능 
# <item_consume id n> - 스킬 사용시 id 아이템을 n 개 소비               
# <item_consume id> - 스킬 사용시 id 아이템을 1 개 소비
# <switch_on id>  - id 스위치가 on일때 
# <var_eq id n> - 변수번호 id가 n일때
# <var_up id n> - 변수번호 id가 n이상 일때
# <lev_up n> - 레벨이 n 이상일때
# <class_eq n> - 직업코드가 n일때
# <state n> - n번 상태일때 ( 상태창 열면 이름 옆의 숫자 )
# <gold n> -  골드가 n 이상일때
# <element n> - 공격 속성에 n번 속성이 있을 때
# <hp_percent_exceed per> - HP가 비율 per 이상        
# <hp_percent_below per> - HP가 비율 per 미만 
# <mp_percent_exceed per> - MP가 비율 per 이상                                                     
# <mp_percent_exceed per true> - MP를 비율 per 만큼 소비
# <mp_percent_below per> - MP가 비율 per 미만             
# <free_hand> - 적어도 한 손이 빈손이어야 함                
# <dual_weapon> - 이도류 사용                      
# <two_handed_weapon> - 양손무기 사용      
#   
#
# 예를 들어:
# <item_present 3>
# <item_consumed 4 2>
# <weapon_type bow>
#
# 위의 스킬을 사용하려면 id 3 아이템이 필요하고
# 사용할때 id 4 아이템을 2개씩 소비하며
# bow 타입으로 설정된 (메모란에 <weapon_type bow> 라고 입력한) 무기를 장비해야합니다.
#
#
#
#                                                                      
# Note:                                                                     
# This script also includes the function hands_free which returns the       
# number of free hands for a Game_Actor.                                    
#                                                                           
# Version History:                                                          
# 0.4 - test release                                                        
# 0.5 - can specify some item to include in battle test                     
# 1.0 - Bugfix and update to TagNote 2.0                                    
# 1.1 - Fix regressions                                                     
##############################################################################

class Game_Actor < Game_Battler
 
 include TAGNOTE

  def hands_free
    if weapons[0]==nil
      if @armor1_id[0]==0
        return 2
      elsif weapons.length==2
        if weapons[1].two_handed
          return 0
        else
          return 1
        end
      else
        return 1
      end
    elsif weapons[0].two_handed or @armor1_id!=0
      return 0
    else
      return 1
    end
  end

  alias skill_req_skill_can_use? skill_can_use?
  def skill_can_use?(skill)
   
    if skill.id != 0
      skill_note=$data_skills[skill.id].note
      #Check for weapon type
      skill_needs = get_tag(skill_note,"weapon_type") #weapon type string
      if skill_needs != nil
        if two_swords_style
          if @weapon_id!=0 and @armor1_id!=0
            return false unless has_tag_value?($data_weapons[@weapon_id].note,"weapon_type",skill_needs) or has_tag_value?($data_weapons[@armor1_id].note,"weapon_type",skill_needs)
          elsif @weapon_id!=0
            return false unless has_tag_value?($data_weapons[@weapon_id].note,"weapon_type",skill_needs)
          elsif @armor1_id!=0
            return false unless has_tag_value?($data_weapons[@armor1_id].note,"weapon_type",skill_needs)
          else
            return false
          end
        else
          return false unless @weapon_id!=0
          return false unless has_tag_value?($data_weapons[@weapon_id].note,"weapon_type",skill_needs)
        end
      end
     
      #Check for item presence
      skill_needs = get_tag(skill_note,"item_present") #item id
      if skill_needs != nil
        return false unless $game_party.has_item?($data_items[skill_needs.to_i],true)
      end
     
      #Check for item consumption
      skill_needs = get_tag(skill_note,"item_consume") #item id
      if skill_needs !=nil
        skill_needs_num = get_additional_tag(skill_note,"item_consume",2) #number
        if skill_needs_num == nil
          skill_needs_num = 1
        end
        return false unless $game_party.item_number($data_items[skill_needs.to_i])>=skill_needs_num.to_i
      end
     
      #Check for switch
      skill_needs = get_tag(skill_note,"switch_on") #switch id
      if skill_needs != nil
        return false unless $game_switches[skill_needs.to_i] == true
      end
     
      #Check for variable_equal
      skill_needs = get_tag(skill_note,"var_eq") #variable id
      if skill_needs !=nil
        skill_needs_num = get_additional_tag(skill_note,"var_eq",2) #number
        if skill_needs_num == nil
          skill_needs_num = 0
        end
        return false unless $game_variables[skill_needs.to_i] == skill_needs_num.to_i
      end
     
      #Check for variable_up
      skill_needs = get_tag(skill_note,"var_up") #variable id
      if skill_needs !=nil
        skill_needs_num = get_additional_tag(skill_note,"var_up",2) #number
        if skill_needs_num == nil
          skill_needs_num = 0
        end
        return false unless $game_variables[skill_needs.to_i] >= skill_needs_num.to_i
      end
     
      #Check for level_up
      skill_needs = get_tag(skill_note,"lev_up") #level
      if skill_needs !=nil
        return false unless level >= skill_needs.to_i
      end
     
      #Check for class_equal
      skill_needs = get_tag(skill_note,"class_eq") #class id
      if skill_needs !=nil
         return false unless class_id == skill_needs.to_i
      end
     
      #Check for state
      skill_needs = get_tag(skill_note,"state") #state id
      if skill_needs != nil
        return false unless state?(skill_needs.to_i)
      end
     
      #Check for gold
      skill_needs = get_tag(skill_note,"gold") #gold
      if skill_needs != nil
        return false unless $game_party.gold >= skill_needs.to_i
      end
     
      #Check for element
      skill_needs = get_tag(skill_note,"element") #gold
      if skill_needs != nil
        return false unless element_set.include?(skill_needs.to_i)
      end
     
      #Check for HP exceeds
      skill_needs = get_tag(skill_note,"hp_percent_exceed") #percent
      if skill_needs !=nil
        return false unless (100.0 * @hp/maxhp)>=skill_needs.to_f
      end
     
      #Check for HP below
      skill_needs = get_tag(skill_note,"hp_percent_below") #percent
      if skill_needs != nil
        return false unless (100.0 * @hp/maxhp)<skill_needs.to_f
      end
     
      #Check for MP exceeds
      skill_needs = get_tag(skill_note,"mp_percent_exceed") #percent
      if skill_needs != nil
        return false unless (100.0 * @mp/maxmp)>=skill_needs.to_f
      end
     
      #Check for MP below
      skill_needs = get_tag(skill_note,"mp_percent_below") #percent
      if skill_needs != nil
        return false unless (100.0* @mp/maxmp)<skill_needs.to_f
      end
     
      #Check for free hand
      skill_needs = has_tag?(skill_note,"free_hand") #boolean
      if skill_needs
        return false unless hands_free>=1
      end
     
      #Check for dual weapons
      skill_needs = has_tag?(skill_note,"dual_weapon") #boolean
      if skill_needs
        return false unless two_swords_style
        return false unless weapons[0]!=nil and weapons[1]!=nil
      end
     
      #Check for two-handed weapon
      skill_needs = has_tag?(skill_note,"two_handed_weapon") #boolean
      if skill_needs
        if two_swords_style
          return false unless ( weapons[0]!= nil and weapons[0].two_handed) or (weapons[1] != nil and weapons[1].two_handed)
        else
          return false unless ( weapons[0]!= nil and weapons[0].two_handed)
        end
      end
     
      return skill_req_skill_can_use?(skill)
    end
  end
 
 
  def calc_mp_cost(skill)
    base_cost=skill.mp_cost
   
    mp_prop=get_tag(skill.note,"mp_percent_exceed")
    if mp_prop!=nil
      mp_lose=get_additional_tag_value(skill.note,"mp_percent_exceed",2)
      if mp_lose.eql?("true")
        base_cost=(mp_prop.to_f/100.0 * maxmp).to_i
      end
    end
   
    if half_mp_cost
      return base_cost / 2
    else
      return base_cost
    end
  end
 
end

class Scene_Battle < Scene_Base
 
  include TAGNOTE
#--------------------------------------------------------------------------
# * Execute Battle Action: Skill
#--------------------------------------------------------------------------
  alias skill_req_execute_action_skill execute_action_skill
  def execute_action_skill
    skill_req_execute_action_skill
    skill = @active_battler.action.skill
   
    #consume items required
    skill_needs = get_tag(skill.note,"item_consume")
    if skill_needs != nil
      num_items = get_additional_tag(skill.note,"item_consume",2)
      if num_items==nil
        num_items=1
      end
      $game_party.lose_item($data_items[skill_needs.to_i],num_items.to_i,true)
    end
  end
end

class Game_Party < Game_Unit
 
  include TAGNOTE
 
  alias skill_req_setup_battle_test_members setup_battle_test_members
  def setup_battle_test_members
    skill_req_setup_battle_test_members
    for i in 1...$data_items.size
      if has_tag?($data_items[i].note,"include_battle_test")
        @items[i] = 99
      end
    end
  end
end
   

Who's 아이미르

?

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

 

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

Comment '18'
  • ?
    우켈킁 2011.03.30 10:56

    ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

    도와주세요.... 이 스크립트가 꼭 필요해서 며칠 전부터 시도해보고 있는데.....

    망할 태그노트....

    65번째 줄에서 태그노트 뭐시기 하면서 에러가 나네요....

    태그노트 검색해서 v2.0 있길래 거기 스크립트 복사해서 추가해 넣었어요...

    그런데 같은 오류가 반복....

    대체 어떻게 해야 하는 건가요!! ㅠㅠ

  • ?
    우켈킁 2011.03.30 14:43

    자문자답....

    3일만에 해결했습니다.... 태그노트를 이 스크립트보다 위에 놓아야 하는거였군요....

    난 바보였어....

  • ?
    아이미르 2011.03.30 16:18

    저런... 그나마 다행이십니다. 해결됐으니 축하드려요

  • ?
    소방 2011.06.05 00:16

    스크랩했다가 나중에 사용해봐야겠어요. 고맙습니다~

  • ?
    슬 라임 2011.06.19 16:30

    쓰는방법좀 알려주세요 ㅠㅜ

  • ?
    시옷청룡 2011.07.09 22:58

    완전 감사요^^

  • ?
    시옷청룡 2011.07.10 18:42

     include TAGNOTE 이놈이 문제네요...

    처음에 넣고 테스트할땐 되지만, 프로그램을 껐다 켰더니 안되요

    이 스크립트 자체를 지워도 안되네요...

  • ?
    시옷청룡 2011.07.10 21:39

    태그노트 스크립트를 넣어야 하는군요. 근데 그렇게 해도 장비 착용했을때 스킬이 나오지 않네요. 필살기 스크립트와 따로 작용하는 건가보군요...

  • ?
    아이미르 2011.07.13 10:55

    이 스크립트는 시옷전사님이 만든 필살기 스크립트와는 다릅니다. 말그대로 스킬을 사용할때 필요한 조건을 설정해주는 스크립트지요

     

    필살기 스크립트는 장비를 착용했을 때 스킬을 습득하게 해주는 스크립트이고요

  • ?
    에레드루인 2011.07.27 22:09

    <weapon_type>   <item_present>  <item_consume>은 안 되네요 ;;

     

     <item_present>  <item_consume> 은 손봤더니 잘 되는데

     

    <weapon_type>은 전혀 못 건드리겠어요 스크립트 초보라서;;

     

    그래도 다른 건 잘 되는 것 같습니다. 감사합니다.

  • ?
    아이미르 2011.07.30 09:50

    음 ;;; 전 <weapon_type xxx>가 잘 먹혀요 ;ㅁ; 그래서 손을 안댄 부분이기도 하고요

     

    무기의 메모란에 <weapon_type abc>를 써줬다면 스킬의 메모란에도 똑같이 <weapon_type abc>를 넣어주면 작동합니다

     

    스크립트 충돌이라기엔 다른 기능이 잘 돌아가시니 오타같은게 아닐까 조심스레 추측해봅니다

  • ?
    웃자 2011.07.29 20:22

    완전 감사요^^

  • ?
    KMS 2011.08.05 10:13

    스크립트는 받았는데... 태그노트 스크립트가 어디있는지 모르겠네요;;

  • ?
    아이미르 2011.08.05 17:18
  • profile
    DevilEx 2011.08.21 21:59

    265줄계속 오류 .... ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

  • ?
    아이미르 2011.08.22 11:39

    265줄이면

     

    include TAGNOTE

     

    이거 맞나요? 이거 맞으면 태그노트 2.0 붙여넣으시면 딱히 오류날게 없을 텐데요.... 정확히는 잘 모르겠네요

  • ?
    아이미르 2011.08.22 19:21

    하아... 죄송합니다만 제 짧은 실력으로는 잘 모르겠네요...

  • profile
    DevilEx 2011.08.22 19:09

    태그노트도 위쪽에 배치 했구여 ;

    Scrupt 'Skill' line 265:NameError occurred.

    undefined methoe 'execute_action_skill' for class 'Scene_Battle'

    이라고 표기되고 꺼짐 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5457
97 타이틀/게임오버 KGC_TitleDirection 알기쉽게 설명추가 5 파이어 2011.01.03 2669
96 기타 IEX - Script Library 1.0 by IceDragon 8 Alkaid 2011.01.11 2627
95 상점 상점에서 아이템 분류 5 file 파이어 2011.01.23 3513
94 타이틀/게임오버 [NO.0 간단 스크립트] 타이틀에 제작자 정보 올려보기 14 file NO.0 2011.01.30 3366
93 이름입력 아이템, 장비, 스킬 이름 색깔 바꾸기 14 까까까 2011.03.04 3735
92 전투 [덮어씌우기]Window_ActorCommand_EX 4 맛난호빵 2011.03.12 2349
» 스킬 스킬 필요조건에 살짝 손대봤습니다. -- 수정 18 아이미르 2011.03.23 2500
90 전투 VX SRPG 스크립트를 살짝 손대봤습니다. 13 아이미르 2011.03.31 3433
89 기타 KGC counter 스크립트. 반격기 추가스크립트입니다. 4 우켈킁 2011.03.31 1814
88 스킬 훔치기 스킬을 만드는 스크립트! 5 우켈킁 2011.03.31 2397
87 키입력 한글입력기(펌) 수정 10 전설의달빛조각사 2011.04.03 2674
86 스킬 스킬북으로 스킬 레벨업!, 'SW_BookSkill' by SiotWarrior(재수정) 21 file 시옷전사 2011.05.15 2817
85 온라인 RPGVX 3D스크립트 11 file 고자몬 2011.07.10 5051
84 스킬 강화주문서, SW_EchantScroll by 시옷전사(SiotWarrior) 21 file 시옷전사 2011.07.13 2609
83 기타 해상도 변경 스크립트 11 카리스 2011.07.19 2727
82 기타 화면 확대 스크립트 12 file 에돌이 2011.07.22 3065
81 기타 요리 시스템을 도입하는 스크립트입니다. 9 file 스페나로츠 2011.08.18 3148
80 스킬 SW_BookSkill && EchantScroll(상호충돌수정버전) 6 시옷전사 2011.08.22 1758
79 기타 여러스크립트(목적은 포인트) 12 file 인생은 힘들다. 2011.08.26 3090
78 장비 초보적인 장비레벨 개념 스크립트 - 수정 및 덤 9 아이미르 2011.09.06 2659
Board Pagination Prev 1 ... 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Next
/ 32