• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

[JASS] Difficulty AI failure

Status
Not open for further replies.
Level 4
Joined
Oct 2, 2021
Messages
17
Hey, I'm kinda new here (and in the world of code in general). I tried remaking the RoC Undead mission: Siege of Dalaran. The AI I remade by replacing units and building with different ones works on normal difficulty but not hard. I think it changes with difficulty but I'm not sure how, can you help? (attack waves are fine but the building part doesn't work)


JASS:
//============================================================================
//  Undead 07 -- Purple player (Light Blue) -- AI Script
//============================================================================
globals
    player user = Player(6)
endglobals

//============================================================================
//  main
//============================================================================
function main takes nothing returns nothing
    debug set do_debug_cheats = true

    call CampaignAI(ELF_FARM,null)
    call SetReplacements(2,2,4)
    set do_campaign_farms = false

    call SetCaptainHome(ATTACK_CAPTAIN,-2924,-3633)
    call SetCaptainHome(DEFENSE_CAPTAIN,-2184,-3257)

    call SetBuildUnitEx( 0,0,1, 'h605'            )
    call SetBuildUnitEx( 3,3,3, BLOOD_PEASANT             )
    call SetBuildUnitEx( 0,0,1, ELF_HIGH_BARRACKS    )
    call SetBuildUnitEx( 0,0,1, 'h608'            )
    call SetBuildUnitEx( 0,0,1, 'h60C'        )
    call SetBuildUnitEx( 0,0,1, 'h609'            )
    call SetBuildUnitEx( 7,7,7, BLOOD_PEASANT          )
    call SetBuildUnitEx( 0,0,1, 'h606'            )
    call SetBuildUnitEx( 0,0,1, 'h60A'        )
    call SetBuildUnitEx( 0,0,1, 'h60B'            )
   
    call CampaignDefenderEx( 1,1,1, HIGH_SWORDMAN   )
    call CampaignDefenderEx( 0,0,1, BALLISTA          )
    call CampaignDefenderEx( 1,1,1, HIGH_ARCHER     )                               

    call WaitForSignal()

    //*** WAVE 1 ***
    call InitAssaultGroup()
    call CampaignAttackerEx( 4,4,6, HIGH_SWORDMAN   )
    call CampaignAttackerEx( 1,1,2, HIGH_ARCHER     )
    call CampaignAttackerEx( 0,0,2, PRIEST      )
    call SuicideOnPlayerEx(M4,M4,M2,user)

    call SetBuildUpgrEx( 0,0,1, UPG_MELEE        )
    call SetBuildUpgrEx( 0,0,1, UPG_STR_MOON           )
    call SetBuildUpgrEx( 0,0,1, UPG_PRAYING        )
    call SetBuildUpgrEx( 0,0,1, UPG_MASONRY        )

    //*** WAVE 2 ***
    call InitAssaultGroup()
    call CampaignAttackerEx( 4,4,5, HIGH_SWORDMAN   )
    call CampaignAttackerEx( 1,1,3, HIGH_ARCHER     )
    call CampaignAttackerEx( 0,0,2, BALLISTA    )
    call CampaignAttackerEx( 1,1,2, PRIEST      )
    call SuicideOnPlayerEx(M8,M8,M7,user)

    call SetBuildUpgrEx( 0,0,1, UPG_BOWS               )
    call SetBuildUpgrEx( 0,0,1, UPG_MOON_ARMOR         )
    call SetBuildUpgrEx( 0,0,1, UPG_ARMOR        )
    call SetBuildUpgrEx( 1,1,1, UPG_PRAYING        )
    call SetBuildUpgrEx( 1,1,1, UPG_DEFEND        )

    //*** WAVE 3 ***
    call InitAssaultGroup()
    call CampaignAttackerEx( 0,0,4, HIGH_SWORDMAN   )
    call CampaignAttackerEx( 5,5,8, HIGH_ARCHER     )
    call CampaignAttackerEx( 1,1,2, BALLISTA    )
    call CampaignAttackerEx( 1,1,2, PRIEST      )
    call SuicideOnPlayerEx(M6,M6,M6,user)

    call SetBuildUpgrEx( 1,1,2, UPG_MELEE        )
    call SetBuildUpgrEx( 1,1,2, UPG_STR_MOON           )

    //*** WAVE 4 ***
    call InitAssaultGroup()
    call CampaignAttackerEx( 5,5,10, HIGH_SWORDMAN  )
    call CampaignAttackerEx( 2,2,4, BALLISTA    )
    call CampaignAttackerEx( 1,1,2, PRIEST      )
    call SuicideOnPlayerEx(M8,M8,M7,user)

    call SetBuildUpgrEx( 1,1,2, UPG_MOON_ARMOR         )
    call SetBuildUpgrEx( 1,1,2, UPG_ARMOR        )

    loop
        //*** WAVE 5+ ***
        call InitAssaultGroup()
        call CampaignAttackerEx( 1,1,3, HIGH_SWORDMAN   )
        call CampaignAttackerEx( 5,5,7, HIGH_ARCHER     )
        call CampaignAttackerEx( 1,1,2, BALLISTA    )
        call CampaignAttackerEx( 0,0,2, PRIEST      )
        call SuicideOnPlayerEx(M6,M6,M6,user)

        //*** WAVE 6+ ***
        call InitAssaultGroup()
        call CampaignAttackerEx( 4,4,7, HIGH_SWORDMAN )
        call CampaignAttackerEx( 2,2,3, HIGH_ARCHER     )
        call CampaignAttackerEx( 2,2,3, PRIEST      )
        call SuicideOnPlayerEx(M8,M8,M7,user)
    endloop
endfunction


For reference(all custom units are custom buildings with the same functions (ex: h605 is the town hall),all of them are respectively placed according to the original.

JASS:
//============================================================================
//  Undead 07 -- Purple player (Light Blue) -- AI Script
//============================================================================
globals
    player user = Player(6)
endglobals

//============================================================================
//  main
//============================================================================
function main takes nothing returns nothing
    debug set do_debug_cheats = true

    call CampaignAI(HOUSE,null)
    call SetReplacements(2,2,4)
    set do_campaign_farms = false

    call SetCaptainHome(ATTACK_CAPTAIN,-2924,-3633)
    call SetCaptainHome(DEFENSE_CAPTAIN,-2184,-3257)

    call SetBuildUnitEx( 0,0,1, TOWN_HALL        )
    call SetBuildUnitEx( 3,3,3, PEASANT            )
    call SetBuildUnitEx( 0,0,1, BARRACKS        )
    call SetBuildUnitEx( 0,0,1, LUMBER_MILL        )
    call SetBuildUnitEx( 0,0,1, HUMAN_ALTAR        )
    call SetBuildUnitEx( 0,0,1, BLACKSMITH        )
    call SetBuildUnitEx( 7,7,7, PEASANT            )
    call SetBuildUnitEx( 0,0,1, KEEP            )
    call SetBuildUnitEx( 0,0,1, WORKSHOP        )
    call SetBuildUnitEx( 0,0,1, SANCTUM            )
    
    call CampaignDefenderEx( 1,1,1, FOOTMAN     )
    call CampaignDefenderEx( 0,0,1, MORTAR      )
    call CampaignDefenderEx( 1,1,1, RIFLEMAN    )

    call WaitForSignal()

    //*** WAVE 1 ***
    call InitAssaultGroup()
    call CampaignAttackerEx( 4,4,6, FOOTMEN     )
    call CampaignAttackerEx( 1,1,2, RIFLEMAN    )
    call CampaignAttackerEx( 0,0,2, PRIEST      )
    call SuicideOnPlayerEx(M4,M4,M2,user)

    call SetBuildUpgrEx( 0,0,1, UPG_MELEE        )
    call SetBuildUpgrEx( 0,0,1, UPG_RANGED        )
    call SetBuildUpgrEx( 0,0,1, UPG_PRAYING        )
    call SetBuildUpgrEx( 0,0,1, UPG_MASONRY        )

    //*** WAVE 2 ***
    call InitAssaultGroup()
    call CampaignAttackerEx( 4,4,5, FOOTMEN     )
    call CampaignAttackerEx( 1,1,3, RIFLEMAN    )
    call CampaignAttackerEx( 0,0,2, MORTAR      )
    call CampaignAttackerEx( 1,1,2, PRIEST      )
    call SuicideOnPlayerEx(M8,M8,M7,user)

    call SetBuildUpgrEx( 0,0,1, UPG_GUN_RANGE    )
    call SetBuildUpgrEx( 0,0,1, UPG_LEATHER        )
    call SetBuildUpgrEx( 0,0,1, UPG_ARMOR        )
    call SetBuildUpgrEx( 1,1,1, UPG_PRAYING        )
    call SetBuildUpgrEx( 1,1,1, UPG_DEFEND        )

    //*** WAVE 3 ***
    call InitAssaultGroup()
    call CampaignAttackerEx( 0,0,4, FOOTMEN     )
    call CampaignAttackerEx( 5,5,8, RIFLEMAN    )
    call CampaignAttackerEx( 1,1,2, MORTAR      )
    call CampaignAttackerEx( 1,1,2, PRIEST      )
    call SuicideOnPlayerEx(M6,M6,M6,user)

    call SetBuildUpgrEx( 1,1,2, UPG_MELEE        )
    call SetBuildUpgrEx( 1,1,2, UPG_RANGED        )

    //*** WAVE 4 ***
    call InitAssaultGroup()
    call CampaignAttackerEx( 5,5,10, FOOTMEN    )
    call CampaignAttackerEx( 2,2,4, MORTAR      )
    call CampaignAttackerEx( 1,1,2, PRIEST      )
    call SuicideOnPlayerEx(M8,M8,M7,user)

    call SetBuildUpgrEx( 1,1,2, UPG_LEATHER        )
    call SetBuildUpgrEx( 1,1,2, UPG_ARMOR        )

    loop
        //*** WAVE 5+ ***
        call InitAssaultGroup()
        call CampaignAttackerEx( 1,1,3, FOOTMEN     )
        call CampaignAttackerEx( 5,5,7, RIFLEMAN    )
        call CampaignAttackerEx( 1,1,2, MORTAR      )
        call CampaignAttackerEx( 0,0,2, PRIEST      )
        call SuicideOnPlayerEx(M6,M6,M6,user)

        //*** WAVE 6+ ***
        call InitAssaultGroup()
        call CampaignAttackerEx( 4,4,7, FOOTMEN     )
        call CampaignAttackerEx( 2,2,3, RIFLEMAN    )
        call CampaignAttackerEx( 2,2,3, PRIEST      )
        call SuicideOnPlayerEx(M8,M8,M7,user)
    endloop
endfunction
 
Last edited:
Status
Not open for further replies.
Top