질문과 답변

Extra Form

몇몇 분들의 도움으로 아이템 장착 시 직업 변환을 할 수 있게되었습니다.
그런데 문제가, 직업을 A로 바꾼 다음 다시 B로 바꾸면 B가 표시가 안되고, 적용도 안된다는 겁니다.
맵을 나갔다가 돌아오면 되기는 하지만, 앞으로 만들 이벤트 중에
[주인공]의 직업이 [A]일 것 같은 조건을 달 이벤트가 있어서...... 던전 같은 데서 맵을 나갔다가 돌아올 수 는 없지 않습니까.
그래서 그 관련해서 조언부탁드립니다.
노 딜레이로 직업을 연속으로 바꾸는 방법 좀 알려주세요.
혹은 딜레이이기는 하지만 맵을 떠나지 않아도 되는 방법이라던가......
 

Comment '8'
  • ?

    module IMIR_Equip_Job
     
      JOB_LIST = {  #원래 액터의 직업
        1 => 1,     # 1번 액터, 에릭은 1번 직업, 전사
        2 => 2,
        3 => 3,
        4 => 4,
        5 => 5,
        6 => 6,
        7 => 7,
        8 => 8,
        9 => 9,
        10 => 10,
      } # 지우지 말것 ㅇㅅㅇ
     
    end

    #==============================================================================
    # ■ Game_Actor
    #------------------------------------------------------------------------------
    #  액터를 취급하는 클래스입니다.이 클래스는 Game_Actors 클래스($game_actors)
    # 의 내부에서 사용되어 Game_Party 클래스($game_party)로부터도 참조됩니다.
    #==============================================================================

    class Game_Actor < Game_Battler
    #--------------------------------------------------------------------------
    # ● 장비의 변경으로 인한 직업 변경
    #--------------------------------------------------------------------------
    def change_job_of_equip(slot_id, item)
    if item == nil # 장비 해제시
    if @equips[slot_id].object != nil # 장비가 장착중이었다면
    if @equips[slot_id].object.job_class != 0 # 장비가 직업용 장비라면
    # 원래 직업으로 체인지
    change_class(IMIR_Equip_Job::JOB_LIST[@actor_id], true)
    end
    end
    else # 장비 해제가 아니라면
    change_class(item.job_class, true) if item.job_class != 0
    end
    @hp = [mhp].max
    @mp = [mmp].max
    end

    #--------------------------------------------------------------------------
    # ● 장비의 변경
    # slot_id : 장비 슬롯 ID
    # item : 무기/방어구(nil 라면 장비 해제)
    #--------------------------------------------------------------------------
    def change_equip(slot_id, item)
    return unless trade_item_with_party(item, equips[slot_id])
    return if item && equip_slots[slot_id] != item.etype_id
    change_job_of_equip(slot_id, item)
    @equips[slot_id].object = item
    refresh
    end
    #--------------------------------------------------------------------------
    # ● 장비의 강제 변경
    # slot_id : 장비 슬롯 ID
    # item : 무기/방어구(nil 라면 장비 해제)
    #--------------------------------------------------------------------------
    def force_change_equip(slot_id, item)
    change_job_of_equip(slot_id, item)
    @equips[slot_id].object = item
    release_unequippable_items(false)
    refresh
    end
    #--------------------------------------------------------------------------
    # ● 장비할 수 없는 장비품을 제외한다
    # item_gain : 제외한 장비품을 파티에 되돌린다
    #--------------------------------------------------------------------------
    def release_unequippable_items(item_gain = true)
    @equips.each_with_index do |item, i|
    if !equippable?(item.object) || item.object.etype_id != equip_slots[i]
    trade_item_with_party(nil, item.object) if item_gain
    if item.object != nil
    if item.object.job_class != 0
    change_class(IMIR_Equip_Job::JOB_LIST[@actor_id], true)
    end
    end
    item.object = nil
    end
    end
    end
    #--------------------------------------------------------------------------
    # ● 장비의 파기
    # item : 파기하는 무기/방어구
    #--------------------------------------------------------------------------
    def discard_equip(item)
    slot_id = equips.index(item)
    if slot_id
    if @equips[slot_id].object.job_class != 0
    change_class(IMIR_Equip_Job::JOB_LIST[@actor_id], true)
    end
    @equips[slot_id].object = nil
    end
    end

    end

    class RPG::Weapon < RPG::EquipItem
    def job_class # 직업 적용 => <직업 n> n은 직업 id
    if @note =~ /<직업 (\d+)>/
    return [0, $1.to_i].max
    else
    return 0 # 안적으면 0으로 판단.
    end
    end
    end

    class RPG::Armor < RPG::EquipItem
    def job_class # 직업 적용 => <직업 n> n은 직업 id
    if @note =~ /<직업 (\d+)>/
    return [0, $1.to_i].max
    else
    return 0 # 안적으면 0으로 판단.
    end
    end
    end

    이 스크립트는 무기나 방어구의 메모란에 <직업 n>이라고 쓴 장비를 장착할 시
    n이 0이 아니면 n번째 직업으로 직업을 교체하는 스크립트 입니다. 이 장비를 장착해제할 시
    원래 직업으로 돌아갑니다.

    단, 대충 만들었기 때문에 이런 장비가 2개 이상이 되면 꼬일 수 있고
    직업의 개수를 초과하는 숫자를 메모란에 넣었을 때 에러가 날 수 있습니다.

    초반부의 JOB_LIST는 원래 액터의 직업을 설정하는 부분입니다. => 앞은 액터번호, 뒤는 직업번호입니다.

     

    P.S 글이 모두 앞쪽 정렬되어서 사용하시기 힘들 것 같아서 텍스트 파일 첨부합니다. 긁어서 잘 안되면 텍스트 파일의 것을 사용해보세요

  • ?
    clown1 2012.09.04 02:48
    어, 제가 원하는 게 맞기는 한데요.
    문제는 그런 아이템이 적어도 두, 세가지는 더 있게 될 것같다는 겁니다.
    주인공 풀파티4명이 전원 2가지 정도 직업을 가지고 있어야 되는 데다가
    레벨 업으로 스킬을 배우는 게 아니라 아이템에 스킬을 내장시킬 거라서요.....
    이런 식으로 직업을 변경하면
    LV.9 업 할 떄 배웠어야 하는 스킬을 LV 10되서 장비바꿨다고 못얻을 수 있지 않나요?
  • ?
    아이미르 2012.09.04 06:42
    꼬일 수 있다고 한 건 이런 장비를 한번에 두 개 이상 장비했을 경우를 가리킨 겁니다 위에서 두 개 이상의 장비라는 게 두 개 이상 장비를 장착 했을 때를 말한 거고요.

    두번째는 물론입니다 해결책은 나중에 생각해보도록 하죠;; 혹은 다른 분에게 넘기거나요 ㅎㅅㅎ;
  • ?
    clown1 2012.09.04 02:49
    어, 제가 원하는 게 맞기는 한데요.
    문제는 그런 아이템이 적어도 두, 세가지는 더 있게 될 것같다는 겁니다.
    주인공 풀파티4명이 전원 2가지 정도 직업을 가지고 있어야 되는 데다가
    레벨 업으로 스킬을 배우는 게 아니라 아이템에 스킬을 내장시킬 거라서요.....
    이런 식으로 직업을 변경하면
    LV.9 업 할 떄 배웠어야 하는 스킬을 LV 10되서 장비바꿨다고 못얻을 수 있지 않나요?
  • ?
    module IMIR_Equip_Job

    JOB_LIST = { #원래 액터의 직업
    1 => 1, # 1번 액터, 에릭은 1번 직업, 전사
    2 => 2,
    3 => 3,
    4 => 4,
    5 => 5,
    6 => 6,
    7 => 7,
    8 => 8,
    9 => 9,
    10 => 10,
    } # 지우지 말것 ㅇㅅㅇ

    end


    #==============================================================================
    # ■ Game_Actor
    #------------------------------------------------------------------------------
    #  액터를 취급하는 클래스입니다.이 클래스는 Game_Actors 클래스($game_actors)
    # 의 내부에서 사용되어 Game_Party 클래스($game_party)로부터도 참조됩니다.
    #==============================================================================

    class Game_Actor < Game_Battler
    #--------------------------------------------------------------------------
    # ● 장비의 변경으로 인한 직업 변경
    #--------------------------------------------------------------------------
    def change_job_of_equip(slot_id, item)
    if item == nil # 장비 해제시
    if @equips[slot_id].object != nil # 장비가 장착중이었다면
    if @equips[slot_id].object.job_class != 0 # 장비가 직업용 장비라면
    # 원래 직업으로 체인지
    change_class(IMIR_Equip_Job::JOB_LIST[@actor_id], true)
    end
    end
    else # 장비 해제가 아니라면
    change_class(item.job_class, true) if item.job_class != 0
    end
    @hp = [mhp].max
    @mp = [mmp].max
    self.class.learnings.each { |learning|
    learn_skill(learning.skill_id) if @level >= learning.level
    }
    end

    #--------------------------------------------------------------------------
    # ● 장비의 변경
    # slot_id : 장비 슬롯 ID
    # item : 무기/방어구(nil 라면 장비 해제)
    #--------------------------------------------------------------------------
    def change_equip(slot_id, item)
    return unless trade_item_with_party(item, equips[slot_id])
    return if item && equip_slots[slot_id] != item.etype_id
    change_job_of_equip(slot_id, item)
    @equips[slot_id].object = item
    refresh
    end
    #--------------------------------------------------------------------------
    # ● 장비의 강제 변경
    # slot_id : 장비 슬롯 ID
    # item : 무기/방어구(nil 라면 장비 해제)
    #--------------------------------------------------------------------------
    def force_change_equip(slot_id, item)
    change_job_of_equip(slot_id, item)
    @equips[slot_id].object = item
    release_unequippable_items(false)
    refresh
    end
    #--------------------------------------------------------------------------
    # ● 장비할 수 없는 장비품을 제외한다
    # item_gain : 제외한 장비품을 파티에 되돌린다
    #--------------------------------------------------------------------------
    def release_unequippable_items(item_gain = true)
    @equips.each_with_index do |item, i|
    if !equippable?(item.object) || item.object.etype_id != equip_slots[i]
    trade_item_with_party(nil, item.object) if item_gain
    if item.object != nil
    if item.object.job_class != 0
    change_class(IMIR_Equip_Job::JOB_LIST[@actor_id], true)
    self.class.learnings.each { |learning|
    learn_skill(learning.skill_id) if @level >= learning.level
    }
    end
    end
    item.object = nil
    end
    end
    end
    #--------------------------------------------------------------------------
    # ● 장비의 파기
    # item : 파기하는 무기/방어구
    #--------------------------------------------------------------------------
    def discard_equip(item)
    slot_id = equips.index(item)
    if slot_id
    if @equips[slot_id].object.job_class != 0
    change_class(IMIR_Equip_Job::JOB_LIST[@actor_id], true)
    self.class.learnings.each { |learning|
    learn_skill(learning.skill_id) if @level >= learning.level
    }
    end
    @equips[slot_id].object = nil
    end
    end

    end

    class RPG::Weapon < RPG::EquipItem
    def job_class # 직업 적용 => <직업 n> n은 직업 id
    if @note =~ /<직업 (\d+)>/
    return [0, $1.to_i].max
    else
    return 0 # 안적으면 0으로 판단.
    end
    end
    end

    class RPG::Armor < RPG::EquipItem
    def job_class # 직업 적용 => <직업 n> n은 직업 id
    if @note =~ /<직업 (\d+)>/
    return [0, $1.to_i].max
    else
    return 0 # 안적으면 0으로 판단.
    end
    end
    end

    약간 더 추가했습니다.

    직업이 바뀌면 지금 레벨 이전에 배워야 될 스킬들을 배우게 됩니다.
  • ?
    clown1 2012.09.04 23:07
    한글로 된 파트에 직업명 넣어야 합니까, 아니면 직업 번호명을 넣어야 합니까?
    그리고 성실한 답변 감사드립니다. 이게 지금 만드는 게임의 핵심이라서......
  • ?
    아이미르 2012.09.05 00:06
    음 한글로 된 파트가 어디 가리키는 지 잘 모르겠네요 하지만 모듈 부분이든 장비의 메모란이든 양쪽다 직업 ID(직업 번호명이라고 해도 무방하겠네요) 를 넣게 되어있으니 직업 번호를 넣으면 될겁니다

    모듈 부분에는 액터번호 => 직업번호, 이런삭으로 추가하시고(마지막에 있는 }와 직업번호 뒤의 , 를 빼먹음 안됩니다)
    장비의 메모란에는 <직업 n> 이런식으로 써넣으면 됩니다

    예를 들면 장비 장착하면 2번 직업으로 변경하게 하고 싶으면 <직업 2>라고 메모란에 넣는 거에요
  • ?
    clown1 2012.09.05 05:14
    감사합니다.

List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 12460
RMVXA 캐릭터칩 투명색 지정.. 1 file 너구리신랑 2015.03.01 267
RMVXA 웹페이지 하이퍼링크 이벤트처리 5 에뎀이 2015.05.08 267
기타 RMVXA 해상도 크기 조절 후 메뉴창이 어딘가 이상합니다... file 건소금 2020.11.06 267
RMVXA 얘 성별이 뭐죠? 1 file 슘슘슘슘 2015.02.04 269
RMVXA 크리스탈 엔진 20 게임잘날아가는닝겐 2015.03.29 269
RMVXA 버튼을 누르면 그림이 사라지게 하는 법 2 뿡빵뿡 2015.06.03 269
RMVXA 채집 이벤트 질문입니다. 채집 후 일정시간동안 채집시도하면 특정 메시지가 나오게끔.... 7 file 아루쿠 2015.08.22 269
RMVXA 2차원 배열 선언 및 사용법좀 알려주세요. 10 A구몽 2016.04.01 269
RMVXA 폰트가 지저분하게 나옵니다 도와주세요 4 file 햇냔 2016.12.02 269
게임 번역 RMVXA 아랄트랜스로 vx ace 쯔꾸르 게임 하는데 글자크기가 왜이리 큰거죠? 실브더 2020.11.05 269
턴제 전투 RMVXA 한글패치후 턴제전투시 번역되지 않은 を倒した!위치가 궁금합니다. 2 file 유리컵 2022.02.26 270
RMVXA 루비 배우는 왕초보입니다. 세이브파일에 대하여 2가지 여쭙고싶습니다 4 Sonrxnu 2016.03.06 270
RMVXA 허걱님의 마우스 스크립트에서 모든 이벤트 클릭시를 특정 이벤트로만으로 바꾸고 싶습니다. file 흰강아지 2014.12.23 270
RMVXA 저장 후 만들어지는 데이터 숨기는 법 좀 알려주세요 ㅠ 작삼 2014.11.13 271
맵배치 RMVXA 패럴랙스 맵핑하려고 하는데 이동할 수 없는 타일은 어떻게 설정해야 하나요? 4 싱거운소금 2022.03.03 272
RMVXA 갑작스럽게 스크립트가 되지 않는 것 같습니다. Nagunt 2014.11.15 272
RMVXA 던전크롤이나 기타로그라이크에서처럼 제가 한번 움직이면 적도 한번 움직이는 턴제를 구현할 수 있나요? 4 unknown 2015.03.01 272
기본툴 사용법 RMVXA rpg vx ace폰트 어떻게 바꾸나요ㅠㅠ 3 고구마맛사이다 2020.06.03 272
RMVXA 특정 장소로 달려가는 이벤트를 많이 만들고 싶습니다 1 커세어리버 2014.11.24 273
RMVXA 페이스칩 크기 어떻게 늘리나요?(수정) 1 국허 2015.05.26 273
Board Pagination Prev 1 ... 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ... 150 Next
/ 150