;--------------------------------------------- ;ARG = キャラ登録番号 ;ARGS:0 = 形態の指定 ;ARGS:1 = 追加/変更可能素質リスト ;ARGS:2 = 除外素質リスト ;ARGS:3 = 戻る不可 ;--------------------------------------------- @ENHANCE_ROLE, ARG, ARGS, ARGS:1, ARGS:2, ARGS:3 #DIM LCOUNT, 2 #DIM L_LINE #DIM L_COST #DIM L_REDRAW #DIMS L_TALENT #DIM L_TALENT_NUM #DIM L_TALENT_LV #DIM L_RESULT #DIM STCOK_CHARA #DIM TEMP #DIMS TEMPS, 2 #DIMS SHOW_LINE #DIM TALENT_ABLE, SUB_ROLENUM #DIMS L_TRANS #DIM L_CAP;キャパシティー最大値 #DIMS L_TALENTS, SUB_ROLENUM #DIM L_LV_FIXED, SUB_ROLENUM #DIMS L_TALENTS_FIXED, SUB_ROLENUM #DIM L_SKILL_CHANGEABLE_RANK L_REDRAW = CURRENTREDRAW() REDRAW 0 ;リセット用にコピーキャラを作っておく ADDCOPYCHARA ARG STCOK_CHARA = CHARANUM - 1 L_SKILL_CHANGEABLE_RANK = GET_SKILL_CHANGEABLE_RANK(ARG) RESULTS = L_TRANS = %ARGS% L_CAP = GET_ROLE_PROP("CAPACITY", ARG, ,L_TRANS) ;固定素質の付与 TRYCCALLFORM ROLE_FIXED_BTL_TALENT_\@L_TRANS == "変身形態" ? TRANS_ # \@%CSTR:ARG:ロール% IF RESULTS != "" SPLIT RESULTS, "/", L_TALENTS_FIXED FOR LCOUNT, 0, RESULT L_LV_FIXED:LCOUNT = TOINT(AUTO_SPLIT(L_TALENTS_FIXED:LCOUNT, "_", 1)) L_TALENTS_FIXED:LCOUNT = %AUTO_SPLIT(L_TALENTS_FIXED:LCOUNT, "_", 0)% IF L_TRANS == "変身形態" TRANS_BTL_TALENT:ARG:GET_SUB_ROLE_NUM(L_TALENTS_FIXED:LCOUNT) = L_LV_FIXED:LCOUNT ELSE TALENT:ARG:(L_TALENTS_FIXED:LCOUNT) = L_LV_FIXED:LCOUNT ENDIF NEXT ENDIF CATCH ENDCATCH ;追加/変更の可能リストを作る VARSET TALENT_ABLE, -1 ;引数で指定されている場合は引数からリストを作る IF ARGS:1 != "" FOR LCOUNT, 0, STRCOUNT(ARGS:1, "/") + 1 TEMPS = %AUTO_SPLIT(ARGS:1, "/", LCOUNT)% SIF TEMPS == "" CONTINUE TEMPS:1 = %AUTO_SPLIT(TEMPS, "_", 0)% ;取得可能な素質でないなら弾く SIF GET_ROLE_PROP("CAN_USE_" + TEMPS:1, ARG, , L_TRANS) != 2 CONTINUE ;固定素質なら弾く SIF FINDELEMENT(L_TALENTS_FIXED, TEMPS:1) >= 0 CONTINUE IF STRCOUNT(TEMPS, "_") TALENT_ABLE:GET_SUB_ROLE_NUM(TEMPS:1) = MAX(TOINT(AUTO_SPLIT(TEMPS, "_", 1)), TALENT_ABLE:GET_SUB_ROLE_NUM(TEMPS:1)) ELSE TALENT_ABLE:GET_SUB_ROLE_NUM(TEMPS:1) = GET_SUB_ROLE_PROP("MAXLV", TEMPS) ENDIF NEXT ENDIF L_LINE = LINECOUNT $START CALL SET_ROLE_CP, ARG CLEARLINE LINECOUNT - L_LINE ;セット中のサブ素質を表示 CALL ROLE_EXPLAIN_ABILITY, ARG, , ,"サブ" WHILE LINECOUNT < L_LINE + 24 PRINTL WEND DRAWLINE PRINTFORML Capacity 【{L_CAP - GET_ROLE_CP(ARG, L_TRANS),2} / {L_CAP,2}】 DRAWLINE PRINTFORML %"Talent", 24, LEFT%[ - ]   Lv    [ + ]       Lv1    Lv2    Lv3    Lv4    Lv5 CUSTOMDRAWLINE ― FOR LCOUNT, 0, SUB_ROLENUM ;付与可能リストに入っておらずかつ所持していない素質は弾く SIF TALENT_ABLE:LCOUNT < 0 && !GET_BTL_TALENT_LV(GET_SUB_ROLE_NAME(LCOUNT), ARG, ARGS) CONTINUE ;固定で得ている素質は弾く SIF FINDELEMENT(L_TALENTS_FIXED, GET_SUB_ROLE_NAME(LCOUNT)) >= 0 CONTINUE L_TALENT = %GET_SUB_ROLE_NAME(LCOUNT)% SHOW_LINE = TEMPS = %GETS_SUB_ROLE_PROP("NAME", L_TALENT), 24, LEFT% RESULTS = TRYCALLFORM SUB_ROLE_EXPLAIN_TOOLTIP_%L_TALENT% TEMPS = %TEMPS% SHOW_LINE += TEMPS IF TALENT_ABLE:LCOUNT >= 0 SHOW_LINE += @"" ELSE SHOW_LINE += " " * 5 ENDIF SHOW_LINE += @"  《Lv{GET_BTL_TALENT_LV(L_TALENT, ARG, ARGS), 2}》  " IF TALENT_ABLE:LCOUNT >= 0 SHOW_LINE += @"" ELSE SHOW_LINE += " " * 5 ENDIF SHOW_LINE += " " * 10 FOR LCOUNT:1, 1, 6 L_COST = GET_SUB_ROLE_PROP("COST", L_TALENT, , , LCOUNT:1) SIF (L_COST > L_CAP) && GET_BTL_TALENT_LV(L_TALENT, ARG, ARGS) < LCOUNT:1 CONTINUE IF L_COST > 0 && ((LCOUNT:1 <= TALENT_ABLE:LCOUNT) || GET_BTL_TALENT_LV(L_TALENT, ARG, ARGS) == LCOUNT:1) IF GET_BTL_TALENT_LV(L_TALENT, ARG, ARGS) == LCOUNT:1 TEMPS = 【{L_COST, 2}pt】  TEMPS = %TEMPS% ELSE TEMPS =  {L_COST, 2}pt   ENDIF ELSE TEMPS = %" " * 10% ENDIF SHOW_LINE += TEMPS NEXT HTML_PRINT SHOW_LINE NEXT DRAWLINE CALL PRINT_COLOR, "[0] Accept   ", GET_ROLE_CP(ARG, L_TRANS) < 0 ? COLOR("DARK-GRAY") # GETDEFCOLOR() SIF !STRCOUNT(ARGS:3, "戻る不可") PRINT [99] Return PRINTL INPUTS IF RESULTS == "0" && GET_ROLE_CP(ARG, L_TRANS) >= 0 ;スキルの調整 CALL FIX_ROLE_HAVESKILL, ARG, \@L_SKILL_CHANGEABLE_RANK < GET_SKILL_CHANGEABLE_RANK(ARG) ? "スキル使用能力/枠数" # "枠数"\@ ;潜在素質の調整 IF CSTR:ARG:潜在戦闘素質 != "" TEMPS:1 = FOR LCOUNT, 0, STRCOUNT(CSTR:ARG:潜在戦闘素質, "/") + 1 TEMPS = %AUTO_SPLIT(CSTR:ARG:潜在戦闘素質, "/", LCOUNT)% TEMPS '= REPLACE(TEMPS, "不浄の手", "バステブースタ") ;bugfix L_TALENT = %AUTO_SPLIT(TEMPS, "_", 0)% SIF !TALENT:ARG:L_TALENT CONTINUE TEMPS:1 = %ADD_SPLIT(TEMPS:1, "/", L_TALENT + "_" + TOSTR(TALENT:ARG:L_TALENT))% NEXT ENDIF CSTR:ARG:潜在戦闘素質 = %TEMPS:1% REDRAW L_REDRAW DELCHARA STCOK_CHARA RETURN 1 ELSEIF RESULTS == "99" IF !STRCOUNT(ARGS:3, "戻る不可") ;キャンセルの場合は関数突入時に生成しておいたストックに差し戻して終わる SWAPCHARA ARG, STCOK_CHARA DELCHARA STCOK_CHARA REDRAW L_REDRAW RETURN 0 ENDIF ELSE IF CHARATU(RESULTS, 0) == "-" L_RESULT = -TOINT(SUBSTRING(RESULTS, 1)) ELSE L_RESULT = TOINT(RESULTS) ENDIF IF INRANGE(ABS(L_RESULT) -1, 0, SUB_ROLENUM) L_TALENT_NUM = ABS(L_RESULT) -1 IF TALENT_ABLE:L_TALENT_NUM > 0 L_TALENT = %GET_SUB_ROLE_NAME(L_TALENT_NUM)% IF TALENT_ABLE:L_TALENT_NUM L_TALENT_LV = GET_BTL_TALENT_LV(L_TALENT, ARG, L_TRANS) IF L_RESULT > 0 L_COST = GET_SUB_ROLE_PROP("COST", L_TALENT, , , L_TALENT_LV) L_TALENT_LV++ SIF L_TALENT_LV > TALENT_ABLE:L_TALENT_NUM GOTO START ;コストがマイナス指定されている場合は飛ばす WHILE GET_SUB_ROLE_PROP("COST", L_TALENT, , , L_TALENT_LV) < 0 L_TALENT_LV++ SIF L_TALENT_LV > TALENT_ABLE:L_TALENT_NUM GOTO START WEND SIF GET_SUB_ROLE_PROP("COST", L_TALENT, , , L_TALENT_LV) < 0 GOTO START L_COST = GET_SUB_ROLE_PROP("COST", L_TALENT, , , L_TALENT_LV) - L_COST IF L_COST <= GET_ROLE_CP(ARG, L_TRANS) IF L_TRANS == "変身形態" TRANS_BTL_TALENT:ARG:L_TALENT_NUM = L_TALENT_LV ELSE TALENT:ARG:L_TALENT = L_TALENT_LV ENDIF ENDIF ELSE IF L_TALENT_LV > 0 ;コストがマイナス指定されている場合は飛ばす DO L_TALENT_LV-- SIF !L_TALENT_LV BREAK LOOP GET_SUB_ROLE_PROP("COST", L_TALENT, , , L_TALENT_LV) < 0 IF L_TRANS == "変身形態" TRANS_BTL_TALENT:ARG:L_TALENT_NUM = L_TALENT_LV ELSE TALENT:ARG:L_TALENT = L_TALENT_LV ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF GOTO START ;======================================================================== ;戦闘素質の重複によるランクアップ処理など ;======================================================================== @MIX_BTL_TALENT_LIST, TALENT_LIST #DIMS REF TALENT_LIST #DIM LCOUNT #DIMS L_TALENTS #DIM L_LV #DIM L_TALENT, SUB_ROLENUM VARSET L_TALENT FOR LCOUNT, 0, STRCOUNT(TALENT_LIST, "/") + 1 L_TALENTS = %AUTO_SPLIT(AUTO_SPLIT(TALENT_LIST, "/", LCOUNT), "_", 0)% L_LV = MAX(TOINT(AUTO_SPLIT(AUTO_SPLIT(TALENT_LIST, "/", LCOUNT), "_", 1)), 1) L_TALENT:GET_SUB_ROLE_NUM(L_TALENTS) += L_LV IF L_TALENT:GET_SUB_ROLE_NUM(L_TALENTS) > GET_SUB_ROLE_PROP("MAXLV", L_TALENTS) ;道具知識が上限を超えてた場合は選択肢にアイテム習熟を加える SELECTCASE L_TALENTS CASE "道具知識" L_TALENT:GET_SUB_ROLE_NUM("アイテム習熟") = 1 ENDSELECT L_TALENT:GET_SUB_ROLE_NUM(L_TALENTS) = GET_SUB_ROLE_PROP("MAXLV", L_TALENTS) ENDIF NEXT TALENT_LIST = FOR LCOUNT, 0, SUB_ROLENUM SIF !L_TALENT:LCOUNT CONTINUE SIF TALENT_LIST != "" TALENT_LIST += "/" TALENT_LIST += GET_SUB_ROLE_NAME(LCOUNT) + "_" + TOSTR(L_TALENT:LCOUNT) NEXT RETURN 1