diff --git a/ERB/HOUSING/HOUSING.ERH b/ERB/HOUSING/HOUSING.ERH index 5450c0e641b91e11e7a837559f00c910173d7451..aa0c404111c45069dae5b49aabc732f286f0a912 100644 --- a/ERB/HOUSING/HOUSING.ERH +++ b/ERB/HOUSING/HOUSING.ERH @@ -272,7 +272,9 @@ #DIM HO_SCH_IS_DRAW_SUBWND ;ãƒšãƒ¼ã‚¸ç®¡ç† #DIM HO_SCH_PAGE - +;コピペ用 +#DIM HO_SCH_COPIED_FROM +#DIMS HO_SCH_HEADER_MESSAGE ;エディットモード ;------------------------------------------------- #DIM HO_EDIT_MODE diff --git a/ERB/HOUSING/HOUSING_SCHEDULE_MENU.ERB b/ERB/HOUSING/HOUSING_SCHEDULE_MENU.ERB index 5ddb0ce70ea65366e4db8099dcf711a8d0ec67db..1f9de6e4a84659929f55e60e5c6cef8edcb7785d 100644 --- a/ERB/HOUSING/HOUSING_SCHEDULE_MENU.ERB +++ b/ERB/HOUSING/HOUSING_SCHEDULE_MENU.ERB @@ -4,7 +4,8 @@ @HO_SCH_MENU() #DIM CONST WINDOW_ID = 0 #DIM DYNAMIC LINE_NUM - +HO_SCH_COPIED_FROM = -1 +HO_SCH_HEADER_MESSAGE '= "" LINE_NUM = LINECOUNT WHILE 1 @@ -49,7 +50,7 @@ WEND BTN_ID = HO_スケジュールボタンID CALL WndMgr_CreateWindow(WINDOW_ID, 0, 1, WND_WIDTH, WND_HEIGHT, 2) -CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@S:1@@C:{カラー_注釈}@◇ スケジュール管ç†ã€€â—‡@/C@@/S@") +CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@S:1@@C:{カラー_注釈}@◇ スケジュール管ç†ã€€â—‡@/C@@/S@ %HO_SCH_HEADER_MESSAGE%") CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{カラー_é¸æŠžä¸å¯}@―@/C@" * ((WND_WIDTH / 2) - 2)) ;æ˜Žç´°ãƒªã‚¹ãƒˆä½œæˆ @@ -176,6 +177,11 @@ ELSE CALL HO_SCH_ASSIGN_CRAFT_ORDER(TOINT(DIC_GET(RESULTS, "ASSIGN_ORDER"))) ELSEIF DIC_CONTAINSKEY(RESULTS, "RESET_ORDER") CALL HO_SCH_RESET_CRAFT_ORDER() + ELSEIF DIC_CONTAINSKEY(INPUT_VALUES, "COPY_SCHEDULE_FROM_CHARA") + HO_SCH_COPIED_FROM = TOINT(DIC_GET(INPUT_VALUES, "COPY_SCHEDULE_FROM_CHARA")) + HO_SCH_HEADER_MESSAGE '= @"@C:{カラー_注æ„}@%SNAME(HO_SCH_COPIED_FROM)%ã‹ã‚‰ã‚³ãƒ”ーä¸(実行ä¸å¯ã‚¿ã‚¹ã‚¯ã¯ã‚³ãƒ”ーã•ã‚Œã¾ã›ã‚“)@/C@" + ELSEIF DIC_CONTAINSKEY(INPUT_VALUES, "PASTE_SCHEDULE_TO_CHARA") + CALL HO_SCH_PASTE_SCHEDULE_TO_CHARA(TOINT(DIC_GET(INPUT_VALUES, "PASTE_SCHEDULE_TO_CHARA"))) ENDIF ENDIF @@ -414,10 +420,13 @@ ENDIF BTN_ID = HO_スケジュールボタンID + (CHARA_ID * 100) ARRAYS_STR_CHARA_INFO:0 += @"%SNAME(CHARA_ID), MAX_CHARANAME_LENGTH / 2, LEFT%" -ARRAYS_STR_CHARA_INFO:0 += @"%TAG_PRINT_SHAPE(@"æœï¼š@B:{BTN_ID + 0}@[%TOHALF(HO_TASK_NAME:(HO_TASK_SCH:(CHARA_ID):0))%]@/B@", 16, 1, 0)%" -ARRAYS_STR_CHARA_INFO:0 += @"%TAG_PRINT_SHAPE(@"昼:@B:{BTN_ID + 1}@[%TOHALF(HO_TASK_NAME:(HO_TASK_SCH:(CHARA_ID):1))%]@/B@", 16, 1, 0)%" -ARRAYS_STR_CHARA_INFO:0 += @"%TAG_PRINT_SHAPE(@"夕:@B:{BTN_ID + 2}@[%TOHALF(HO_TASK_NAME:(HO_TASK_SCH:(CHARA_ID):2))%]@/B@", 16, 1, 0)%" -ARRAYS_STR_CHARA_INFO:0 += @"%TAG_PRINT_SHAPE(@"晩:@B:{BTN_ID + 3}@[%TOHALF(HO_TASK_NAME:(HO_TASK_SCH:(CHARA_ID):3))%]@/B@", 16, 1, 0)%" +ARRAYS_STR_CHARA_INFO:0 += @"%TAG_PRINT_SHAPE(@"æœï¼š@B:{BTN_ID + 0}@[%TOHALF(HO_TASK_NAME:(HO_TASK_SCH:(CHARA_ID):0))%]@/B@", 12, 1, 0)%" +ARRAYS_STR_CHARA_INFO:0 += @"%TAG_PRINT_SHAPE(@"昼:@B:{BTN_ID + 1}@[%TOHALF(HO_TASK_NAME:(HO_TASK_SCH:(CHARA_ID):1))%]@/B@", 12, 1, 0)%" +ARRAYS_STR_CHARA_INFO:0 += @"%TAG_PRINT_SHAPE(@"夕:@B:{BTN_ID + 2}@[%TOHALF(HO_TASK_NAME:(HO_TASK_SCH:(CHARA_ID):2))%]@/B@", 12, 1, 0)%" +ARRAYS_STR_CHARA_INFO:0 += @"%TAG_PRINT_SHAPE(@"晩:@B:{BTN_ID + 3}@[%TOHALF(HO_TASK_NAME:(HO_TASK_SCH:(CHARA_ID):3))%]@/B@", 14, 1, 0)%" +ARRAYS_STR_CHARA_INFO:0 += @"%TAG_PRINT_SHAPE(@"@B:[COPY_SCHEDULE_FROM_CHARA:{CHARA_ID}]@[コピー]@/B@", 7, 1, 0)%" +SIF HO_SCH_COPIED_FROM != -1 + ARRAYS_STR_CHARA_INFO:0 += @"%TAG_PRINT_SHAPE(@"@B:[PASTE_SCHEDULE_TO_CHARA:{CHARA_ID}]@[ï¾ï¾Ÿï½°ï½½ï¾„]@/B@", 7, 1, 0)%" CALL GET_STR_SEX(CHARA_ID, 1) ARRAYS_STR_CHARA_INFO:1 += @"%TAG_PRINT_SHAPE(@"%RESULTS%", 4, 1, 0)%" @@ -501,4 +510,33 @@ FOR ITER_I, 0, ITEM_LENGTH NEXT RESULTS = %STRS% -RETURN \ No newline at end of file +RETURN + +@HO_SCH_PASTE_SCHEDULE_TO_CHARA(CHARA_ID) +#DIM CHARA_ID +#DIM TIMETABLE +#DIMS DYNAMIC TASK_NAME +HO_SCH_HEADER_MESSAGE '= @"@C:{カラー_注æ„}@%ANAME(HO_SCH_COPIED_FROM)%ã‹ã‚‰%ANAME(CHARA_ID)%ã«ã‚³ãƒ”ー@/C@" + +FOR TIMETABLE, 0, HO_TIMETABLENUM + ;虜囚ãŒæ‹…当å¯èƒ½ãªã‚¿ã‚¹ã‚¯ã¯é™å®š + TASK_NAME '= HO_TASK_NAME:(HO_TASK_SCH:HO_SCH_COPIED_FROM:TIMETABLE) + + SIF CFLAG:CHARA_ID:æ•è™œå…ˆ == 所属_プレイヤー && !GROUPMATCH(TASK_NAME, "自由", "採集", "採掘", "売春", "æ¾ä¹³") + CONTINUE + + IF TASK_NAME == "売春" + SIF !CAN_PROSTITUTE(CHARA_ID) + CONTINUE + ELSEIF TASK_NAME == "æ¾ä¹³" + SIF !HAS_TALENT(CHARA_ID, "æ¯ä¹³ä½“質") + CONTINUE + SIF CFLAG:CHARA_ID:æ•è™œå…ˆ != 所属_プレイヤー && !IS_NASTY(CHARA_ID, ç´ è³ª_æ·«ä¹±_雌牛) + CONTINUE + ENDIF + + HO_TASK_SCH:CHARA_ID:TIMETABLE = HO_TASK_SCH:HO_SCH_COPIED_FROM:TIMETABLE + _LIST_HO_WORKPLACE:CHARA_ID:TIMETABLE '= _LIST_HO_WORKPLACE:HO_SCH_COPIED_FROM:TIMETABLE + _LIST_HO_CRAFT_ORDER_DID:CHARA_ID:TIMETABLE '= _LIST_HO_CRAFT_ORDER_DID:HO_SCH_COPIED_FROM:TIMETABLE + +NEXT \ No newline at end of file diff --git a/ERB/SYSTEM/DATATABLE/DATATABLE.ERB b/ERB/SYSTEM/DATATABLE/DATATABLE.ERB index 4ed18e39dbb4c6465cefa2c7fc9195aa3f7f5d61..53949fcaa4a4a737f8f310a3763e67fa66530889 100644 --- a/ERB/SYSTEM/DATATABLE/DATATABLE.ERB +++ b/ERB/SYSTEM/DATATABLE/DATATABLE.ERB @@ -209,6 +209,9 @@ RETURN 1 "ENEMY_PASSIVE_SKILL", "ENEMY_ACTIVE_SKILL", "ENEMY_AI", + "ENEMY_AI_ROUTINE_SEQUENCE", + "ENEMY_AI_ROUTINE_MODE", + "ENEMY_DEF_NAME", "ENEMY_SELECTED_SKILL", "DROP_ITEM_LIST", "EXP", @@ -229,7 +232,7 @@ RETURN 1 } DT_CREATE DB_NAME FOR LOCAL, 0, VARSIZE("COLUMN") - IF GROUPMATCH(COLUMN:LOCAL, "CHARA_NAME", "SKILL_LIST", "TEMP_WEAPON", "STATE", "SUBSTATE", "EFFECT", "PORTRAIT_EFFECT", "PORTRAIT_OPTIONS", "ENEMY_ACTIVE_SKILL", "ENEMY_PASSIVE_SKILL", "ENEMY_SELECTED_SKILL", "ENEMY_AI", "DROP_ITEM_LIST") + IF GROUPMATCH(COLUMN:LOCAL, "CHARA_NAME", "SKILL_LIST", "TEMP_WEAPON", "STATE", "SUBSTATE", "EFFECT", "PORTRAIT_EFFECT", "PORTRAIT_OPTIONS", "ENEMY_DEF_NAME", "ENEMY_AI_ROUTINE_MODE", "ENEMY_ACTIVE_SKILL", "ENEMY_PASSIVE_SKILL", "ENEMY_SELECTED_SKILL", "ENEMY_AI", "DROP_ITEM_LIST") DT_COLUMN_ADD DB_NAME, COLUMN:LOCAL, "string" ELSEIF GROUPMATCH(COLUMN:LOCAL, "HP", "MAX_HP", "BARRIER") DT_COLUMN_ADD DB_NAME, COLUMN:LOCAL, "int32" @@ -310,12 +313,14 @@ RETURN 1 "ENEMY_PASSIVE_SKILL", "ENEMY_ACTIVE_SKILL", "ENEMY_AI", + "ENEMY_AI_ROUTINE_MODE", + "ENEMY_AI_ROUTINE_SEQUENCE", "DROP_ITEM_LIST", "EXP", } DT_CREATE DB_NAME FOR LOCAL, 0, VARSIZE("COLUMN") - IF GROUPMATCH(COLUMN:LOCAL, "ENEMY_DEF_NAME", "ENEMY_PASSIVE_SKILL", "ENEMY_ACTIVE_SKILL", "ENEMY_AI", "DROP_ITEM_LIST") + IF GROUPMATCH(COLUMN:LOCAL, "ENEMY_DEF_NAME", "ENEMY_PASSIVE_SKILL", "ENEMY_ACTIVE_SKILL", "ENEMY_AI", "ENEMY_AI_ROUTINE_MODE", "DROP_ITEM_LIST") DT_COLUMN_ADD DB_NAME, COLUMN:LOCAL, "string" ELSEIF GROUPMATCH(COLUMN:LOCAL, "HP", "MAX_HP") DT_COLUMN_ADD DB_NAME, COLUMN:LOCAL, "int32" @@ -328,6 +333,69 @@ CALL CC_ENEMY_DATA() RETURN 1 +;------------------------------------------------- +;;; エãƒãƒŸãƒ¼ãƒ«ãƒ¼ãƒãƒ³æ ¼ç´ç”¨ãƒ†ãƒ¼ãƒ–ルを作æˆ&åˆæœŸåŒ– +;;; `@QST_QUEST_XX_ENEMY_DATA`内ã§ENEMY_DATAã¨ã¨ã‚‚ã«ä½œæˆã™ã‚Œã°ã‚ˆã„ +;;; ルーãƒãƒ³è¡Œå‹•AIを使ã†ã«ã¯ENEMY_DATAã§`"ENEMY_AI", "[AI_FUNC:ROUTINE]"`ã¨æŒ‡å®š +;;; #### 入力パラメータ +;;; - **<å¿…é ˆ>** ENEMY_DEF_NAME +;;; - 作æˆã•ã‚Œã‚‹DBå㯠`@"CC_ENEMY_ROUTINE_TABLE_%ENEMY_DEF_NAME%"` +;------------------------------------------------- +@CREATE_CC_ENEMY_ROUTINE_TABLE(ENEMY_DEF_NAME) +#DIMS ENEMY_DEF_NAME +#DIMS DB_NAME + +DB_NAME '= @"CC_ENEMY_ROUTINE_TABLE_%ENEMY_DEF_NAME%" +;DEBUGPRINTFORML DB_NAME %DB_NAME% + +IF DT_EXIST(DB_NAME) + DT_CLEAR DB_NAME + RETURN +ENDIF + +DT_CREATE DB_NAME +DT_COLUMN_ADD DB_NAME, "MODE", "string" +DT_COLUMN_ADD DB_NAME, "SEQUENCE", "int16" +DT_COLUMN_ADD DB_NAME, "SKILL_DEF_NAME", "string" +DT_COLUMN_ADD DB_NAME, "WEIGHT", "int16" +DT_COLUMN_ADD DB_NAME, "CONDITION", "string" + +;------------------------------------------------- +;;; エãƒãƒŸãƒ¼ãƒ«ãƒ¼ãƒãƒ³ç™»éŒ² +;;; 事å‰ã«@CREATE_CC_ENEMY_ROUTINE_TABLE(ENEMY_DEF_NAME)ã§ãƒ†ãƒ¼ãƒ–ãƒ«ã‚’ä½œæˆ +;------------------------------------------------- +;;; #### 入力パラメータ +;;; - **<å¿…é ˆ>** ENEMY_DEF_NAME +;;; - **<å¿…é ˆ>** SEQUENCE: ルーãƒãƒ³å®Ÿè¡Œé †ã€‚0ã‹ã‚‰å®Ÿè¡Œã€‚å¿…ãšé€£ç•ªã€‚é‡è¤‡ã™ã‚‹å ´åˆã¯WEIGHTã«å¾“ã£ã¦é‡ã¿ã¥ã‘判定ã•ã‚Œã‚‹ +;;; - **<å¿…é ˆ>** SKILL_DEF_NAME: ENEMY_ACTIVE_SKILLã§æŒ‡å®šæ¸ˆã¿ã®ã‚¹ã‚ルå称 +;;; - 通常攻撃を行ã‚ã›ã‚‹ã«ã¯"NORMAL_ATTACK"ã‹""を指定 +;;; - **<ä»»æ„>** WEIGHT: é‡ã¿ã¥ã‘値。指定ã—ãªã„å ´åˆã¯100 +;;; - **<ä»»æ„>** MODE: "ATTACK_MODE" "DEFENCE_MODE" ã®ã‚ˆã†ã«æŒ‡å®šã™ã‚‹ã“ã¨ã§ã€è¤‡æ•°ã®ãƒ«ãƒ¼ãƒãƒ³ãƒ†ãƒ¼ãƒ–ルをæŒã¤ã‚ˆã†ã«æŒ¯ã‚‹èˆžãˆã‚‹ +;;; - 使用ã™ã‚‹å ´åˆã¯ @CC_SET_ENEMY_AI_ROUTINE_MODE ã‹ @CC_ACTION_SET_ENEMY_AI_ROUTINE_MODE を用ã„ã¦ã“ã“ã§å®šç¾©ã—ãŸãƒ¢ãƒ¼ãƒ‰ã‚’アクターã«ä¸Žãˆã‚‹ã€‚ +;;; - **<ä»»æ„>** CONDITION: TOINT(STRFORM(CONDITION))å½¢å¼ã§åˆ¤å®šã•ã‚Œã‚‹é¸æŠžæ¡ä»¶ã€‚満ãŸã•ãªã„å ´åˆã¯é‡ã¿ã¥ã‘ = 0 +;------------------------------------------------- +@CC_ADD_ENEMY_ROUTINE(ENEMY_DEF_NAME, SEQUENCE, SKILL_DEF_NAME, WEIGHT = 100, MODE = "", CONDITION = "{1}") +#DIMS ENEMY_DEF_NAME +#DIMS MODE +#DIM SEQUENCE +#DIMS SKILL_DEF_NAME +#DIM WEIGHT +#DIMS CONDITION + +#DIMS DB_NAME + +DEBUGPRINTFORML %ENEMY_DEF_NAME% %MODE% + +DB_NAME '= @"CC_ENEMY_ROUTINE_TABLE_%ENEMY_DEF_NAME%" +{ + DT_ROW_ADD DB_NAME + ,"MODE", MODE + ,"SEQUENCE", SEQUENCE + ,"SKILL_DEF_NAME", SKILL_DEF_NAME + ,"WEIGHT", WEIGHT + ,"CONDITION", CONDITION +} + ;------------------------------------------------- ; XMLスã‚ル定義ã‹ã‚‰å–å¾—ã—ãŸã‚¹ã‚ãƒ«è«¸æƒ…å ±ã‚’æ ¼ç´ã™ã‚‹å‚照用テーブル ;------------------------------------------------- diff --git a/ERB/TRAIN/CLOSE_COMBAT/CC_ACTION.ERB b/ERB/TRAIN/CLOSE_COMBAT/CC_ACTION.ERB index d41e3394438ce995cb52958d4ab5ef266db938e7..4391817551955d9d9ad708f7d320c70b9e1ff1bf 100644 --- a/ERB/TRAIN/CLOSE_COMBAT/CC_ACTION.ERB +++ b/ERB/TRAIN/CLOSE_COMBAT/CC_ACTION.ERB @@ -129,6 +129,31 @@ VALUE = DT_CELL_GET("CC_ACTION", ACTION_DID, "VALUE", 1) CALL KOJO_XML_COMBAT(ACTION_DID, "EXEC") CALL CC_SET_SP_TOKEN(TARGET_DID, TOKEN_NAME, VALUE) CALL KOJO_XML_COMBAT(ACTION_DID, "RESULT") + +;------------------------------------------------- +;;; トークン個数をã™ã¹ã¦ãƒªã‚»ãƒƒãƒˆ +;------------------------------------------------- +;;; #### 入力パラメータ +;;; - CC_ACTIONテーブル +;;; - **<å¿…é ˆ>** ACTOR_DID: 動作主アクターID +;;; - **<å¿…é ˆ>** TARGET_DID: 対象アクターID +;------------------------------------------------- +@CC_ACTION_RESET_SP_TOKEN(ACTION_DID) +#DIM ACTION_DID +#DIM TARGET_DID +#DIMS TOKEN_NAME +#DIM VALUE + +TARGET_DID = DT_CELL_GET("CC_ACTION", ACTION_DID, "TARGET_DID", 1) + +CALL KOJO_XML_COMBAT(ACTION_DID, "EXEC") + +DT_ROW_REMOVE "CC_SP_TOKEN_NUM", TARGET_DID +DT_ROW_ADD "CC_SP_TOKEN_NUM", "ID", TARGET_DID + +CALL KOJO_XML_COMBAT(ACTION_DID, "RESULT") + + ;------------------------------------------------- ;;; HP減少 ;;; ダメージ計算を行ã‚ãšã€ç›´æŽ¥HPを減らã—ã¾ã™ã€‚ @@ -403,6 +428,252 @@ DT_CELL_SET "CC_ACTOR", RESULT, "EFFECT", "増æ´", 1 CALL KOJO_XML_COMBAT(ACTION_DID, "RESULT") + + +;------------------------------------------------- +;;; æœç ´å£Š +;------------------------------------------------- +;;; #### 入力パラメータ +;;; - CC_ACTIONテーブル +;;; - **<å¿…é ˆ>** ACTOR_DID: 動作主アクターID +;;; - **<å¿…é ˆ>** TARGET_DID: 対象アクターID +;;; - **<å¿…é ˆ>** SUCCESS_RATE: æˆåŠŸçŽ‡ +;;; #### çµæžœ +;;; - CC_AFLAG +;;; - INVALID_CHARA_ID: 1 = TARGETãŒã‚ャラIDã‚’æŒãŸãªã„ +;;; - ALREADY_NAKED: 1 = ã™ã§ã«ã™ã£ã½ã‚“ã½ã‚“ +;;; - CLOTH_TORN = ç ´å£Šã•ã‚ŒãŸè¡£æœã®æ写(メッセージ表示用) +;------------------------------------------------- +@CC_ACTION_TEAR_CLOTH(ACTION_DID) +#DIM ACTION_DID +#DIM ACTOR_DID +#DIM TARGET_DID +#DIM SUCCESS_RATE +#DIM TARGET_CHARA_ID + +ACTOR_DID = DT_CELL_GET("CC_ACTION", ACTION_DID, "ACTOR_DID", 1) +TARGET_DID = CC_GET_ACT_INFO(ACTION_DID, "TARGET_DID") +TARGET_CHARA_ID = DT_CELL_GET("CC_ACTOR", TARGET_DID, "CHARA_ID", 1) +SUCCESS_RATE = DT_CELL_GET("CC_ACTION", ACTION_DID, "SUCCESS_RATE", 1) + +IF TARGET_CHARA_ID == -1 + CALL CC_SET_ACT_FLAG_BY_ID(ACTION_DID, "INVALID_CHARA_ID", "1") + RETURN 0 +ENDIF + +CALL KOJO_XML_COMBAT(ACTION_DID, "EXEC") + +IF C_COND("露出_胸:露出",,TARGET_CHARA_ID) && C_COND("露出_秘部:露出",,TARGET_CHARA_ID) + CALL CC_SET_ACT_FLAG_BY_ID(ACTION_DID, "ALREADY_NAKED", "1") + GOTO ACTION_RESULT +ENDIF + +;抵抗ã¯ç¾çŠ¶æœªå®šç¾©ãªã®ã§SUCCESS_RATE% +IF !CC_CHECK_REGIST(ACTOR_DID, TARGET_DID, "EXPOSE", SUCCESS_RATE) + CALL CC_SET_ACT_FLAG_BY_ID(ACTION_DID, "INFLICT_REGISTED", "1") + GOTO ACTION_RESULT +ENDIF + +IF RAND:2 && !C_COND("露出_胸:露出",,TARGET_CHARA_ID) + CALL CC_SET_ACT_FLAG_BY_ID(ACTION_DID, "DAMAGED_CLOTH", C_COND_MAP_GETS(TARGET_CHARA_ID, "被覆衣装æ写_胸")) + CALL HO_STRIP(TARGET_CHARA_ID, 被覆部ä½_乳首, 衣装状態_ç ´, 1) + SIF C_COND("露出_胸:露出",,TARGET_CHARA_ID) + CALL CC_SET_SP_TOKEN(TARGET_CHARA_ID, "CHEST_EXPOSE", 1) +ELSE + ;CALL CC_PRINT(@"%ATK_CHARA_NAME%ã®æ”»æ’ƒã«ã‚ˆã£ã¦%DEF_CHARA_NAME%ã®@C:{カラー_ピンク}@%衣装æ写%@/C@ã¯ç„¡æƒ¨ã«å¼•ã裂ã‹ã‚Œã¦ã—ã¾ã£ãŸâ€¦ï¼") + CALL CC_SET_ACT_FLAG_BY_ID(ACTION_DID, "DAMAGED_CLOTH", C_COND_MAP_GETS(TARGET_CHARA_ID, "被覆衣装æ写_秘部")) + CALL HO_STRIP(TARGET_CHARA_ID, 被覆部ä½_秘部, 衣装状態_ç ´, 1) + SIF C_COND("露出_秘部:露出",,TARGET_CHARA_ID) + CALL CC_SET_SP_TOKEN(TARGET_CHARA_ID, "GENITAL_EXPOSE", 1) +ENDIF + +$ ACTION_RESULT +CALL KOJO_XML_COMBAT(ACTION_DID, "RESULT") + + +;------------------------------------------------- +;;; 膨乳。 +;------------------------------------------------- +;;; #### 入力パラメータ +;;; - CC_ACTIONテーブル +;;; - **<å¿…é ˆ>** ACTOR_DID: 動作主アクターID +;;; - **<å¿…é ˆ>** TARGET_DID: 対象アクターID +;;; - **<å¿…é ˆ>** VALUE: å¢—æ¸›é‡ +;;; #### çµæžœ +;;; - CC_AFLAG +;;; - NOT_CHANGED: 1 = 能力ã®å¤‰å‹•ãŒãªã‹ã£ãŸ +;------------------------------------------------- +@CC_ACTION_BUST_INFLATION(ACTION_DID) +#DIM ACTION_DID +#DIM TARGET_DID +#DIM VALUE +#DIM TARGET_CHARA_ID +#DIM NEW_VALUE + +#DIM CONST UPPER_LIMIT = 4 +#DIM CONST LOWER_LIMIT = -2 + + +TARGET_DID = CC_GET_ACT_INFO(ACTION_DID, "TARGET_DID") +TARGET_CHARA_ID = DT_CELL_GET("CC_ACTOR", TARGET_DID, "CHARA_ID", 1) +VALUE = CC_GET_ACT_INFO(ACTION_DID, "VALUE") + +IF TARGET_CHARA_ID == -1 + CALL CC_SET_ACT_FLAG_BY_ID(ACTION_DID, "INVALID_CHARA_ID", "1") + RETURN 0 +ENDIF + +CALL KOJO_XML_COMBAT(ACTION_DID, "EXEC") + +NEW_VALUE = LIMIT(TALENT:TARGET_CHARA_ID:ãƒã‚¹ãƒˆã‚µã‚¤ã‚º + VALUE, LOWER_LIMIT, UPPER_LIMIT) + +IF NEW_VALUE == TALENT:TARGET_CHARA_ID:ãƒã‚¹ãƒˆã‚µã‚¤ã‚º + CALL CC_SET_ACT_FLAG_BY_ID(ACTION_DID, "NOT_CHANGED", "1") +ELSE + TALENT:TARGET_CHARA_ID:ãƒã‚¹ãƒˆã‚µã‚¤ã‚º = NEW_VALUE + CALL SET_BUSTSIZE(TARGET_CHARA_ID, TALENT:TARGET_CHARA_ID:ãƒã‚¹ãƒˆã‚µã‚¤ã‚º) + CALL CC_SET_ACT_FLAG_BY_ID(ACTION_DID, "BUST_RESULT", TOSTR_BUSTSIZE(TALENT:TARGET_CHARA_ID:ãƒã‚¹ãƒˆã‚µã‚¤ã‚º)) +ENDIF + +CALL KOJO_XML_COMBAT(ACTION_DID, "RESULT") + + +;------------------------------------------------- +;;; エãƒãƒŸãƒ¼ãƒ‡ãƒ¼ã‚¿æ”¹å¤‰ +;;; 事å‰å®šç¾©ã—ãŸENEMY_DATAã‚’é©ç”¨ã™ã‚‹ +;;; OPTIONã«é€£æƒ³é…列ã§ãƒ‡ãƒ¼ã‚¿ã‚’指定ã™ã‚‹ã¨ã€ã“ã¡ã‚‰ãŒå„ªå…ˆã•ã‚Œã‚‹ +;------------------------------------------------- +;;; #### 入力パラメータ +;;; - CC_ACTIONテーブル +;;; - **<å¿…é ˆ>** ACTOR_DID: 動作主ã¨ãªã‚‹ã‚¢ã‚¯ã‚¿ãƒ¼ã®ID +;;; - **<å¿…é ˆ>** TARGET_DID: 変更対象アクターã®ID +;;; - **<ä»»æ„>** DEF_NAME: 変更先ã®ENEMY_DEF_NAME +;;; - **<ä»»æ„>** OPTION: オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ãƒ‘ラメータ +;;; - ENEMY_PASSIVE_SKILL 㨠ENEMY_ACTIVE_SKILL ã¯å…¥ã‚Œå対ç–ã®ãŸã‚`[ENEMY_PASSIVE_SKILL:<SMITE;1><MANA_SMITE;1>]`å½¢å¼ã§ä¸Žãˆã¦ãã ã•ã„ +;------------------------------------------------- +@CC_ACTION_MODIFY_ENEMY_DATA(ACTION_DID) +#DIM ACTION_DID +#DIM TARGET_DID +#DIMS DEF_NAME +#DIMS OPTION + +#DIM DYNAMIC ENEMY_DID +#DIM DYNAMIC COLUMN_NUM +#DIMS DYNAMIC COLUMNS, 1000 +#DIMS DIC_SKILL + +TARGET_DID = CC_GET_ACT_INFO(ACTION_DID, "TARGET_DID") +DEF_NAME = %CC_GETS_ACT_INFO(ACTION_DID, "DEF_NAME")% +OPTION = %CC_GETS_ACT_INFO(ACTION_DID, "OPTION")% + +CALL KOJO_XML_COMBAT(ACTION_DID, "EXEC") + +IF DEF_NAME != "" + + DT_SELECT "ENEMY_DATA", @"ENEMY_DEF_NAME = '%DEF_NAME%'" + IF RESULT < 1 + DEBUGPRINTFORML エラー:指定ã•ã‚ŒãŸã‚¨ãƒãƒŸãƒ¼å®šç¾©"%DEF_NAME%"ã¯å˜åœ¨ã—ã¾ã›ã‚“ + RETURN 0 + ELSE + ENEMY_DID = RESULT:1 + ENDIF + + + COLUMN_NUM = DT_COLUMN_NAMES("ENEMY_DATA", COLUMNS) + FOR LOCAL, 0, COLUMN_NUM + SELECTCASE DT_COLUMN_EXIST("CC_ACTOR", COLUMNS:LOCAL) + CASE 1, 2, 3, 4 + DEBUGPRINTFORML BEFORE {DT_CELL_GET("CC_ACTOR", TARGET_DID, COLUMNS:LOCAL, 1)} + CALL CC_SET_ENEMYDATA(TARGET_DID, COLUMNS:LOCAL, DT_CELL_GET("ENEMY_DATA", ENEMY_DID, COLUMNS:LOCAL, 1)) + DEBUGPRINTFORML AFTER {DT_CELL_GET("CC_ACTOR", TARGET_DID, COLUMNS:LOCAL, 1)} + CASE 5 + DEBUGPRINTFORML BEFORE %DT_CELL_GETS("CC_ACTOR", TARGET_DID, COLUMNS:LOCAL, 1)% + CALL CC_SETS_ENEMYDATA(TARGET_DID, COLUMNS:LOCAL, DT_CELL_GETS("ENEMY_DATA", ENEMY_DID, COLUMNS:LOCAL, 1)) + DEBUGPRINTFORML AFTER %DT_CELL_GETS("CC_ACTOR", TARGET_DID, COLUMNS:LOCAL, 1)% + CASEELSE + DEBUGPRINTFORML 指定ã•ã‚ŒãŸè¡Œå%COLUMNS:LOCAL%ãŒå˜åœ¨ã—ã¾ã›ã‚“ + ENDSELECT + NEXT +ENDIF + +IF OPTION != "" + COLUMN_NUM = DIC_KEYSF(OPTION) + ARRAYCOPY "RESULTS", "COLUMNS" + FOR LOCAL, 0, COLUMN_NUM + IF GROUPMATCH(COLUMNS:LOCAL, "ENEMY_ACTIVE_SKILL", "ENEMY_PASSIVE_SKILL") + DIC_SKILL = %DIC_GET(OPTION, COLUMNS:LOCAL)% + DEBUGPRINTFORML DIC_SKILL: %DIC_SKILL% + DIC_SKILL = %REPLACE(DIC_SKILL, "<", "[")% + DIC_SKILL = %REPLACE(DIC_SKILL, ";", ":")% + DIC_SKILL = %REPLACE(DIC_SKILL, ">", "]")% + DEBUGPRINTFORML DIC_SKILL: %DIC_SKILL% + CALL CC_SETS_ENEMYDATA(TARGET_DID, COLUMNS:LOCAL, DIC_SKILL) + CONTINUE + ENDIF + + SELECTCASE DT_COLUMN_EXIST("CC_ACTOR", COLUMNS:LOCAL) + CASE 1, 2, 3, 4 + DEBUGPRINTFORML BEFORE {DT_CELL_GET("CC_ACTOR", TARGET_DID, COLUMNS:LOCAL, 1)} + CALL CC_SET_ENEMYDATA(TARGET_DID, COLUMNS:LOCAL, DIC_GETINT(OPTION, COLUMNS:LOCAL)) + DEBUGPRINTFORML AFTER {DT_CELL_GET("CC_ACTOR", TARGET_DID, COLUMNS:LOCAL, 1)} + CASE 5 + DEBUGPRINTFORML BEFORE %DT_CELL_GETS("CC_ACTOR", TARGET_DID, COLUMNS:LOCAL, 1)% + CALL CC_SETS_ENEMYDATA(TARGET_DID, COLUMNS:LOCAL, DIC_GET(OPTION, COLUMNS:LOCAL)) + DEBUGPRINTFORML AFTER %DT_CELL_GETS("CC_ACTOR", TARGET_DID, COLUMNS:LOCAL, 1)% + CASEELSE + DEBUGPRINTFORML 指定ã•ã‚ŒãŸè¡Œå%COLUMNS:LOCAL%ãŒå˜åœ¨ã—ã¾ã›ã‚“ + ENDSELECT + NEXT +ENDIF + +CALL KOJO_XML_COMBAT(ACTION_DID, "RESULT") + +;------------------------------------------------- +;;; アクターステート変更 +;------------------------------------------------- +;;; #### 入力パラメータ +;;; - CC_ACTIONテーブル +;;; - **<å¿…é ˆ>** ACTOR_DID: 動作主ã¨ãªã‚‹ã‚¢ã‚¯ã‚¿ãƒ¼ã®ID +;;; - **<å¿…é ˆ>** TARGET_DID: 変更対象アクターã®ID +;;; - **<å¿…é ˆ>** DEF_NAME: ステートå +;------------------------------------------------- +@CC_ACTION_SET_ACTOR_STATE(ACTION_DID) +#DIM ACTION_DID +#DIM TARGET_DID +#DIMS DEF_NAME + +TARGET_DID = CC_GET_ACT_INFO(ACTION_DID, "TARGET_DID") +DEF_NAME = %CC_GETS_ACT_INFO(ACTION_DID, "DEF_NAME")% + +CALL KOJO_XML_COMBAT(ACTION_DID, "EXEC") + +DT_CELL_SET "CC_ACTOR", TARGET_DID, "STATE", DEF_NAME, 1 + +CALL KOJO_XML_COMBAT(ACTION_DID, "RESULT") + +;------------------------------------------------- +;;; AIルーãƒãƒ³å¤‰æ›´ +;------------------------------------------------- +;;; #### 入力パラメータ +;;; - CC_ACTIONテーブル +;;; - **<å¿…é ˆ>** ACTOR_DID: 動作主ã¨ãªã‚‹ã‚¢ã‚¯ã‚¿ãƒ¼ã®ID +;;; - **<å¿…é ˆ>** TARGET_DID: 変更対象アクターã®ID +;;; - **<å¿…é ˆ>** DEF_NAME: モードå +;;; - **<ä»»æ„>** VALUE: 変更後åˆæœŸã‚·ãƒ¼ã‚±ãƒ³ã‚¹ +;------------------------------------------------- +@CC_ACTION_SET_ENEMY_AI_ROUTINE_MODE(ACTION_DID) +#DIM ACTION_DID +#DIM TARGET_DID +#DIMS DEF_NAME +#DIM VALUE + +TARGET_DID = CC_GET_ACT_INFO(ACTION_DID, "TARGET_DID") +DEF_NAME = %CC_GETS_ACT_INFO(ACTION_DID, "DEF_NAME")% +VALUE = CC_GET_ACT_INFO(ACTION_DID, "VALUE") + +CALL KOJO_XML_COMBAT(ACTION_DID, "EXEC") +CALL CC_SET_ENEMY_AI_ROUTINE_MODE(TARGET_DID, DEF_NAME, VALUE) +CALL KOJO_XML_COMBAT(ACTION_DID, "RESULT") ;------------------------------------------------- ;;; CLOSE_COMBAT_DRAW_WINDOW呼ã³å‡ºã— ;------------------------------------------------- diff --git a/ERB/TRAIN/CLOSE_COMBAT/CLOSE_COMBAT_FUNCTION.ERB b/ERB/TRAIN/CLOSE_COMBAT/CLOSE_COMBAT_FUNCTION.ERB index cd15f092d1763113306d66ca747f46fc28ebc86b..2fa19a98a97b5381e9518361644a47f5cd421edd 100644 --- a/ERB/TRAIN/CLOSE_COMBAT/CLOSE_COMBAT_FUNCTION.ERB +++ b/ERB/TRAIN/CLOSE_COMBAT/CLOSE_COMBAT_FUNCTION.ERB @@ -150,6 +150,8 @@ ENDIF ;;; 引数:3 (ä»»æ„)能力値を補æ£ã™ã‚‹å ´åˆæŒ‡å®šã€‚テーブル定義ã®èƒ½åŠ›å€¤ã«å¯¾ã—ã¦n%åŠ ç®—ã—補æ£ã‚’ã‹ã‘る。百分率指定 ;;; 引数:4 (ä»»æ„)オプション辞書 [KEY:VALUE]ã®è¾žæ›¸å½¢å¼ã§æŒ‡å®šã€‚å„オプションã¯ä»¥ä¸‹å‚ç…§ ;;; "CHARA_ID" 指定ã—ãŸã‚ャラã¨ãƒ†ãƒ¼ãƒ–ルã«ãªã„パラメータã®åŒæœŸã‚’ã¨ã‚‹ï¼ˆãƒãƒ¼ãƒˆãƒ¬ã‚¤ãƒˆã€è¡£è£…状態ãªã©ï¼‰ 。戦闘用パラメータã¯ãƒ†ãƒ¼ãƒ–ルã®å€¤ã‚ˆã‚Šå‚ç…§ +;;; "HP"ãªã©"CC_ACTOR" ã«å«ã¾ã‚Œã‚‹ãƒ‘ラメータを指定ã™ã‚‹ã“ã¨ã§ã€ãƒ‘ラメータを上書ãå¯èƒ½ +;;; - ENEMY_PASSIVE_SKILL 㨠ENEMY_ACTIVE_SKILL ã¯å…¥ã‚Œå対ç–ã®ãŸã‚`[ENEMY_PASSIVE_SKILL:<SMITE;1><MANA_SMITE;1>]`å½¢å¼ã§ä¸Žãˆã¦ãã ã•ã„ ;;; - RETURN ;;; RESULT:0 データテーブル上ã®ID ;;;------------------------------------------------- @@ -162,6 +164,10 @@ ENDIF #DIM ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹è£œæ£ #DIMS DIC_OPTIONS #DIM DYNAMIC ID +#DIM ACTOR_DID +#DIM COLUMN_NUM +#DIMS COLUMNS, 1000 +#DIMS DIC_SKILL ;戦闘開始時ã®è£œæ£ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ #DIM DYNAMIC 最大HP @@ -242,6 +248,9 @@ ENDIF ,"REGIST_DEATH", DT_CELL_GET("ENEMY_DATA", ID, "REGIST_DEATH", 1) ,"SELECTED_SKILL_SLOT", -1 ,"ENEMY_AI", DT_CELL_GETS("ENEMY_DATA", ID, "ENEMY_AI", 1) + ,"ENEMY_DEF_NAME", ENEMY_DEF_NAME + ,"ENEMY_AI_ROUTINE_MODE", DT_CELL_GETS("ENEMY_DATA", ID, "ENEMY_AI_ROUTINE_MODE", 1) + ,"ENEMY_AI_ROUTINE_SEQUENCE", DT_CELL_GET("ENEMY_DATA", ID, "ENEMY_AI_ROUTINE_SEQUENCE", 1) ,"ENEMY_ACTIVE_SKILL", DT_CELL_GETS("ENEMY_DATA", ID, "ENEMY_ACTIVE_SKILL", 1) ,"ENEMY_PASSIVE_SKILL", DT_CELL_GETS("ENEMY_DATA", ID, "ENEMY_PASSIVE_SKILL", 1) ,"DROP_ITEM_LIST", DT_CELL_GETS("ENEMY_DATA", ID, "DROP_ITEM_LIST", 1) @@ -249,12 +258,47 @@ ENDIF ,"SHOW_PORTRAIT", SHOW_PORTRAIT ,"IS_PLAYABLE", 0 } +ACTOR_DID = RESULT ;CALL DEBUG_TIMER_END +IF DIC_OPTIONS != "" + COLUMN_NUM = DIC_KEYSF(DIC_OPTIONS) + ARRAYCOPY "RESULTS", "COLUMNS" + FOR LOCAL, 0, COLUMN_NUM + SIF COLUMNS:LOCAL == "CHARA_ID" + CONTINUE + + IF GROUPMATCH(COLUMNS:LOCAL, "ENEMY_ACTIVE_SKILL", "ENEMY_PASSIVE_SKILL") + DIC_SKILL = %DIC_GET(DIC_OPTIONS, COLUMNS:LOCAL)% + ;DEBUGPRINTFORML DIC_SKILL: %DIC_SKILL% + DIC_SKILL = %REPLACE(DIC_SKILL, "<", "[")% + DIC_SKILL = %REPLACE(DIC_SKILL, ";", ":")% + DIC_SKILL = %REPLACE(DIC_SKILL, ">", "]")% + ;DEBUGPRINTFORML DIC_SKILL: %DIC_SKILL% + CALL CC_SETS_ENEMYDATA(ACTOR_DID, COLUMNS:LOCAL, DIC_SKILL) + CONTINUE + ENDIF + + SELECTCASE DT_COLUMN_EXIST("CC_ACTOR", COLUMNS:LOCAL) + CASE 1, 2, 3, 4 + ;DEBUGPRINTFORML BEFORE {DT_CELL_GET("CC_ACTOR", TARGET_DID, COLUMNS:LOCAL, 1)} + CALL CC_SET_ENEMYDATA(ACTOR_DID, COLUMNS:LOCAL, DIC_GETINT(DIC_OPTIONS, COLUMNS:LOCAL)) + ;DEBUGPRINTFORML AFTER {DT_CELL_GET("CC_ACTOR", TARGET_DID, COLUMNS:LOCAL, 1)} + CASE 5 + ;DEBUGPRINTFORML BEFORE %DT_CELL_GETS("CC_ACTOR", TARGET_DID, COLUMNS:LOCAL, 1)% + CALL CC_SETS_ENEMYDATA(ACTOR_DID, COLUMNS:LOCAL, DIC_GET(DIC_OPTIONS, COLUMNS:LOCAL)) + ;DEBUGPRINTFORML AFTER %DT_CELL_GETS("CC_ACTOR", TARGET_DID, COLUMNS:LOCAL, 1)% + CASEELSE + DEBUGPRINTFORML 指定ã•ã‚ŒãŸè¡Œå%COLUMNS:LOCAL%ãŒå˜åœ¨ã—ã¾ã›ã‚“ + ENDSELECT + NEXT +ENDIF + ;トークン管ç†ãƒ†ãƒ¼ãƒ–ルã«ã‚ãƒ£ãƒ©ã‚¯ã‚¿ãƒ¼ã‚’è¿½åŠ -DT_ROW_ADD "CC_SP_TOKEN_NUM", "ID", RESULT +DT_ROW_ADD "CC_SP_TOKEN_NUM", "ID", ACTOR_DID +CALL CC_CREATE_ACTOR_FLAG(ACTOR_DID) -RETURN RESULT +RETURN ACTOR_DID ;------------------------------------------------- ;;; エãƒãƒŸãƒ¼ãƒ‡ãƒ¼ã‚¿ã®æŒ‡å®šã‚ーã«å€¤ã‚’è¨å®šã™ã‚‹ @@ -535,6 +579,8 @@ ACTOR_DID = RESULT ;トークン管ç†ãƒ†ãƒ¼ãƒ–ルã«ã‚ãƒ£ãƒ©ã‚¯ã‚¿ãƒ¼ã‚’è¿½åŠ DT_ROW_ADD "CC_SP_TOKEN_NUM", "ID", ACTOR_DID +;アクターフラグ用ã®é€£æƒ³é…åˆ—ã‚’ä½œæˆ +CALL CC_CREATE_ACTOR_FLAG(ACTOR_DID) ;ç™ºæƒ…ãƒˆãƒ¼ã‚¯ãƒ³è¿½åŠ CALL CC_ADD_SP_TOKEN(ACTOR_DID, "ESTRUS", TCVAR:CHARA_ID:媚薬) @@ -626,6 +672,8 @@ ENDIF #DIM 敵視_é”術師 #DIM 敵視_低è€ä¹… +#DIM ACTOR_DID + IF !MOB_ELITE 防御力 = 戦闘 / 10 軽減値 = LIMIT(MAX_HP / 15, 0, 300) @@ -657,9 +705,12 @@ ENDIF ,"SELECTED_SKILL_SLOT", -1 ,"ENEMY_ACTIVE_SKILL", "" } +ACTOR_DID = RESULT ;トークン管ç†ãƒ†ãƒ¼ãƒ–ルã«ã‚ãƒ£ãƒ©ã‚¯ã‚¿ãƒ¼ã‚’è¿½åŠ -DT_ROW_ADD "CC_SP_TOKEN_NUM", "ID", RESULT +DT_ROW_ADD "CC_SP_TOKEN_NUM", "ID", ACTOR_DID +;アクターフラグ用ã®é€£æƒ³é…åˆ—ã‚’ä½œæˆ +CALL CC_CREATE_ACTOR_FLAG(ACTOR_DID) ; DEBUGPRINTFORML *-----------------------* ; DEBUGPRINTFORML %CC_NAME% @@ -718,6 +769,65 @@ ENDIF RETURN åŠ ç®—è»½æ¸›å€¤ +;------------------------------------------------- +;;;å„アクターã®ãƒ•ãƒ©ã‚° +;------------------------------------------------- +@CC_CREATE_ACTOR_FLAG(ACTOR_DID) +#DIM ACTOR_DID +MAP_RELEASE @"ACTOR_FLAG_{ACTOR_DID}" +MAP_CREATE @"ACTOR_FLAG_{ACTOR_DID}" + +@CC_SETS_ACTOR_FLAG(ACTOR_DID, KEYS, VALUES) +#DIM ACTOR_DID +#DIMS KEYS +#DIMS VALUES +MAP_SET @"ACTOR_FLAG_{ACTOR_DID}", KEYS, VALUES + +;;; 数値をフラグ変数ã«ã‚»ãƒƒãƒˆ +@CC_SET_ACTOR_FLAG(ACTOR_DID, KEYS, VALUE) +#DIM ACTOR_DID +#DIMS KEYS +#DIM VALUE +CALL CC_SETS_ACTOR_FLAG(ACTOR_DID, KEYS, TOSTR(VALUE)) + +;;; 数値をフラグ変数ã«åŠ ç®— +@CC_ADD_ACTOR_FLAG(ACTOR_DID, KEYS, ADD_VALUE) +#DIM ACTOR_DID +#DIMS KEYS +#DIM ADD_VALUE +#DIM CURRENT_VALUE + +CURRENT_VALUE = CC_GET_ACTOR_FLAG(ACTOR_DID, KEYS) +CALL CC_SET_ACTOR_FLAG(ACTOR_DID, KEYS, CURRENT_VALUE + ADD_VALUE) + +;;; @CC_SET_ACTOR_FLAGã§ã‚»ãƒƒãƒˆã—ãŸãƒ•ãƒ©ã‚°å¤‰æ•°ã‚’å–å¾—ã™ã‚‹ +@CC_GETS_ACTOR_FLAG(ACTOR_DID, KEYS) +#FUNCTIONS +#DIM ACTOR_DID +#DIMS KEYS +RETURNF MAP_GET(@"ACTOR_FLAG_{ACTOR_DID}", KEYS) + +;;; @CC_SET_ACTOR_FLAGã§ã‚»ãƒƒãƒˆã—ãŸãƒ•ãƒ©ã‚°å¤‰æ•°ã‚’数値変æ›ã—ã¦å–å¾—ã™ã‚‹ +@CC_GET_ACTOR_FLAG(ACTOR_DID, KEYS) +#FUNCTION +#DIM ACTOR_DID +#DIMS KEYS +RETURNF TOINT(CC_GETS_ACTOR_FLAG(ACTOR_DID, KEYS)) + +;;; @CC_SET_ACTOR_FLAGã§ã‚»ãƒƒãƒˆã—ãŸãƒ•ãƒ©ã‚°å¤‰æ•°ã‚’削除ã™ã‚‹ +@CC_REMOVE_ACTOR_FLAG(ACTOR_DID, KEYS) +#DIM ACTOR_DID +#DIMS KEYS +MAP_REMOVE @"ACTOR_FLAG_{ACTOR_DID}", KEYS + +@CC_RELEASE_ALL_ACTOR_FLAG +#DIM MEM_CNT +#DIM IDX, CC_MAX_MEMBER_NUM + +MEM_CNT = DT_SELECT("CC_ACTOR",,, IDX) +FOR LOCAL, 0, MEM_CNT + MAP_RELEASE @"ACTOR_FLAG_{IDX:LOCAL}" +NEXT ;------------------------------------------------- ;戦闘処ç†æ™‚ã®ã‚¹ã‚ル実行関数 ;------------------------------------------------- @@ -859,11 +969,14 @@ FOR LOCAL, 0, FINDELEMENT(ATK_SKILL_DEF_LIST, "",,, 1) SIF RESULT && !PERCENT(TOINT(RESULTS)) CONTINUE XML_GET _XML_SKILL, "//triggerCondition", RESULTS, 1 + SIF RESULT + DEBUGPRINTFORML triggerCondition %RESULTS% = {TOINT(STRFORM(RESULTS))} SIF RESULT && !TOINT(STRFORM(RESULTS)) CONTINUE XML_GET _XML_SKILL, @"//func[//executeAt[(text()='%EXECUTE_AT%')]]", RESULTS, 1 SIF !RESULT CONTINUE + DEBUGPRINTFORML EXEC CC_%RESULTS% TRYCCALLFORM CC_%RESULTS%(ATTACKER_DID, DEFENDER_DID, _XML_SKILL) ;パッシブã¯è¡Œæ•°ãŒå¢—ãˆãŒã¡ãªã®ã§ä½¿ç”¨ã›ãšEXECã¨ã¾ã¨ã‚ã¦è¡¨ç¤º ;CALL KOJO_XML_COMBAT_BY_TRIGGER_ID(RESULT, "TRIGGER") @@ -1389,4 +1502,29 @@ ENDIF ,"REQTOKEN_TOCAST", REQTOKEN_TOCAST } RETURN 1 -; #endregion \ No newline at end of file +; #endregion + + +;------------------------------------------------- +;全員分ã®ãƒ‘ッシブ発動ãƒã‚§ãƒƒã‚¯ +;------------------------------------------------- +@CC_PASSIVE_CHECK_ALL(EXECUTE_AT) +#DIMS EXECUTE_AT +#DIMS ACTOR_LIST, CC_MAX_MEMBER_NUM + 1 +#DIM DYNAMIC ACTOR_DID +#DIM DYNAMIC TARGET_DID + +CALL CLOSE_COMBAT_SET_ORDER(ACTOR_LIST) +FOR LOCAL, 0, CC_MAX_MEMBER_NUM + 1 + SIF ACTOR_LIST:LOCAL == "-1" + BREAK + + ACTOR_DID = TOINT(DIC_GET(ACTOR_LIST:LOCAL, "ACTOR_DID")) + CALL CLOSE_COMBAT_SET_TARGET(ACTOR_DID) + TARGET_DID = RESULT + CALL CC_EXEC_PASSIVE_SKILL(EXECUTE_AT, ACTOR_DID, TARGET_DID) + CALL CC_EXEC_WPN_PASSIVE_SKILL(EXECUTE_AT, ACTOR_DID, TARGET_DID) + + CALL CLOSE_COMBAT_DRAW_WINDOW(ACTOR_DID) + +NEXT \ No newline at end of file diff --git a/ERB/TRAIN/CLOSE_COMBAT/CLOSE_COMBAT_MAIN.ERB b/ERB/TRAIN/CLOSE_COMBAT/CLOSE_COMBAT_MAIN.ERB index c255f6126440ce515f1c7c169ac20262facf8eaa..0462d6113be88e8eca8fe706aeada6111f860725 100644 --- a/ERB/TRAIN/CLOSE_COMBAT/CLOSE_COMBAT_MAIN.ERB +++ b/ERB/TRAIN/CLOSE_COMBAT/CLOSE_COMBAT_MAIN.ERB @@ -1,4 +1,4 @@ -;------------------------------------------------- +;------------------------------------------------- ;æˆ¦é—˜å‡¦ç† ;予ã‚"CC_ATTACKER_LIST", "CC_DEFENDER_LIST"ã®ãƒªã‚¹ãƒˆ(連想é…列)ã«æŒ‡å®šã•ã‚ŒãŸãƒ¡ãƒ³ãƒãƒ¼ã«ã¦æˆ¦é—˜ã‚’実施ã™ã‚‹ ; 戻り値 1 = "ATTACKER"å‹åˆ©, 2 = "DEFENDER"å‹åˆ© @@ -218,6 +218,8 @@ CALL WndMgr_DestroyWindow(-1) CALL CC_RELEASE_ALL_ACT_FLAG CALL CC_RELEASE_ALL_TRIGGERED_SKILL_FLAG DT_CLEAR "CC_ACTION" +;ã‚¢ã‚¯ã‚¿ãƒ¼ãƒ•ãƒ©ã‚°ã‚’ç ´æ£„ +CALL CC_RELEASE_ALL_ACTOR_FLAG RETURN WINNER ; #endregion diff --git a/ERB/TRAIN/CLOSE_COMBAT/ENEMY_DATA/CC_ENEMY_AI.ERB b/ERB/TRAIN/CLOSE_COMBAT/ENEMY_DATA/CC_ENEMY_AI.ERB index 7c108b93dbc9f889d5461f66df6823f84190390a..ee4176eec8abde83b78ae60b4b040f0fd0002bfe 100644 --- a/ERB/TRAIN/CLOSE_COMBAT/ENEMY_DATA/CC_ENEMY_AI.ERB +++ b/ERB/TRAIN/CLOSE_COMBAT/ENEMY_DATA/CC_ENEMY_AI.ERB @@ -269,3 +269,87 @@ SELECTCASE RAND_WT_RESULT() NEXT ENDSELECT + +;------------------------------------------------- +;;; ルーãƒãƒ³è¡Œå‹•ç”¨AI +;;; @CREATE_CC_ENEMY_ROUTINE_TABLEã¨@CC_ADD_ENEMY_ROUTINEã§äº‹å‰ç™»éŒ²ã—ãŸãƒ«ãƒ¼ãƒãƒ³ã«å¾“ã£ã¦è¡Œå‹•ã™ã‚‹ +;------------------------------------------------- +@CC_ENEMY_AI_ROUTINE(CHARA_DID) +#DIM CHARA_DID +#DIMS DB_NAME +#DIMS MODE +#DIM SEQUENCE +#DIM CANDIDATE_NUM +#DIM CANDIDATE, 10 +#DIM SELECTED +#DIM WEIGHT +#DIMS ENEMY_SELECTED_SKILL + +#DIM MAX_HP +#DIM HP + +MODE = %DT_CELL_GETS("CC_ACTOR", CHARA_DID, "ENEMY_AI_ROUTINE_MODE", 1)% +SEQUENCE = DT_CELL_GET("CC_ACTOR", CHARA_DID, "ENEMY_AI_ROUTINE_SEQUENCE", 1) +DB_NAME '= @"CC_ENEMY_ROUTINE_TABLE_%DT_CELL_GETS("CC_ACTOR", CHARA_DID, "ENEMY_DEF_NAME", 1)%" + +;æ¡ä»¶åˆ¤å®šã«ä½¿ã„ãã†ãªæƒ…å ±ã‚’å±•é–‹ +MAX_HP = DT_CELL_GET("CC_ACTOR", CHARA_DID, "MAX_HP", 1) +HP = DT_CELL_GET("CC_ACTOR", CHARA_DID, "HP", 1) + +;DEBUGPRINTFORML MODE = %MODE%, SEQUENCE = {SEQUENCE} +CANDIDATE_NUM = DT_SELECT(DB_NAME, @"MODE = '%MODE%' AND SEQUENCE = {SEQUENCE}",, CANDIDATE) + +;シーケンスãŒæœ«å°¾ã‚’超ãˆã¦ã„ã‚‹ãªã‚‰0ã«æˆ»ã—ã¦å†å–å¾— +IF CANDIDATE_NUM == 0 + SEQUENCE = 0 + CANDIDATE_NUM = DT_SELECT(DB_NAME, @"MODE = '%MODE%' AND SEQUENCE = {SEQUENCE}",, CANDIDATE) +ENDIF +;DEBUGPRINTFORML CANDIDATE_NUM = {CANDIDATE_NUM} +CALL RAND_WT_INIT() +FOR LOCAL, 0, CANDIDATE_NUM + WEIGHT = DT_CELL_GET(DB_NAME, CANDIDATE:LOCAL, "WEIGHT", 1) + + ;CONDITIONã«æŒ‡å®šã—ãŸæ¡ä»¶ã‚’満ãŸã•ãªã„å ´åˆã¯é‡ã¿0 + ;DEBUGPRINTFORML %DT_CELL_GETS(DB_NAME, CANDIDATE:LOCAL, "CONDITION", 1)% = {TOINT(STRFORM(DT_CELL_GETS(DB_NAME, CANDIDATE:LOCAL, "CONDITION", 1)))} + SIF !TOINT(STRFORM(DT_CELL_GETS(DB_NAME, CANDIDATE:LOCAL, "CONDITION", 1))) + WEIGHT = 0 + + ;è¦æ±‚トークンを満ãŸã•ãªã„å ´åˆã¯é‡ã¿0 + CALL CC_CHECK_REQTOKEN_TOCAST(CHARA_DID, DT_CELL_GETS(DB_NAME, CANDIDATE:LOCAL, "SKILL_DEF_NAME", 1), スã‚ル_ジャンル_戦闘) + SIF !RESULT + WEIGHT = 0 + + ;DEBUGPRINTFORML {LOCAL}: WEIGHT ={WEIGHT} + CALL RAND_WT_SET(LOCAL, WEIGHT) +NEXT + +SELECTED = RAND_WT_RESULT() +;候補ãªã—ã®å ´åˆã¯é€šå¸¸æ”»æ’ƒ +IF SELECTED == -1 + ENEMY_SELECTED_SKILL '= "" +ELSE + ENEMY_SELECTED_SKILL = %DT_CELL_GETS(DB_NAME, CANDIDATE:SELECTED, "SKILL_DEF_NAME", 1)% +ENDIF + +SIF ENEMY_SELECTED_SKILL == "NORMAL_ATTACK" + ENEMY_SELECTED_SKILL '= "" + +;DEBUGPRINTFORML ENEMY_SELECTED_SKILL %ENEMY_SELECTED_SKILL% +DT_CELL_SET "CC_ACTOR", CHARA_DID, "ENEMY_SELECTED_SKILL", ENEMY_SELECTED_SKILL, 1 + +DT_CELL_SET "CC_ACTOR", CHARA_DID, "ENEMY_AI_ROUTINE_SEQUENCE", SEQUENCE + 1, 1 + +;------------------------------------------------- +;;; ルーãƒãƒ³ãƒ¢ãƒ¼ãƒ‰å¤‰æ›´ +;;; #### 入力パラメータ +;;; - **<å¿…é ˆ>** CHARA_DID: アクターID +;;; - **<å¿…é ˆ>** MODE: 変更後ã®ãƒ¢ãƒ¼ãƒ‰ã‚’æ–‡å—列ã§æŒ‡å®š +;;; - **<ä»»æ„>** SEQUENCE: 変更後ã®åˆæœŸã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã‚’指定(éžæŒ‡å®šæ™‚0) +;------------------------------------------------- +@CC_SET_ENEMY_AI_ROUTINE_MODE(CHARA_DID, MODE, SEQUENCE = 0) +#DIM CHARA_DID +#DIMS MODE +#DIM SEQUENCE + +DT_CELL_SET "CC_ACTOR", CHARA_DID, "ENEMY_AI_ROUTINE_MODE", MODE, 1 +DT_CELL_SET "CC_ACTOR", CHARA_DID, "ENEMY_AI_ROUTINE_SEQUENCE", SEQUENCE, 1 \ No newline at end of file