질문과 답변

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 21143
RMVX 아이템 생성창 번역 질문드립니다 4 file 치킨죠아영 2018.11.20 208
RMMV 타이틀에서 이어하기 말고 시작 버튼을 누르면 특별한 효과음을 주고싶은데 3 잠행인 2017.10.03 208
RMMV MV 캐릭터 생성기 오리지널 데이터는 어디서 찾을 수 있을까요? 2 DermuDInDimensions 2017.08.15 208
RMMV MV 사이드뷰 전투에서 무기 외형 어떻게 추가하나요? 2 눈팅러 2017.01.11 208
RMVXA 적에 따라 도망 확률 확정하는 방법 깡쨩 2016.10.19 208
맵배치 RMXP 알만툴 xp 타일 옆 테두리 없애는법 1 wjswns 2020.10.15 208
맵배치 RMMV mv 맵칩 타일셋 리소스 사이트있나요? 소용돌이은하에서사는자 2020.08.11 208
RMVXA 타이머의 질문합니다 1 아쳐 2015.09.11 208
한글화하는도중 테스트하려는데 막혀버리네요 1 file 뉴클리어비둘기 2015.07.06 208
RMVX 선택창 그림으로 표시 1 KAHP 2015.06.26 208
RMVXA 실수로 기본 캐릭터 이벤트 삭제했어요 2 보병 2015.02.04 208
RMVXA 그림 맵 3 :3 2015.08.28 208
이벤트 작성 RMMV 이벤트가 반복 실행되어 끝나지 않습니다.(검색완료) 1 file 2022.02.23 208
GM 두개의 이벤트 동시에 받아야만 액션 실행하게 하는법 2 세빠다크 2017.03.15 208
이벤트 작성 RMVXA 플레이어가 추격자에게 잡혔을 경우 플레이어가 추격자와 마주봤으면 좋겠어요 3 루카_ 2022.01.21 208
기타 RMMV 타이틀 메뉴를 추가하고싶습니다. 2 Jmyu 2019.04.01 208
RMVXA stack level too deep 3 백은호 2016.11.09 208
기타 RM2k3 알피지 2003에서 글자가 특수문자로 나옵니다 file 사토이 2022.05.08 207
플러그인 생성 RMMV 메뉴의 종류를 늘리고 싶습니다 4 둥근테안경 2019.09.26 207
라이선스 RMMV RPG MV DLC 안에 있는 플러그인이나 소재들 게임 만들때 써도 되는 거죠? 3 천무부 2019.02.12 207
Board Pagination Prev 1 ... 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 ... 518 Next
/ 518