• 🏆 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] AI script won't run

Status
Not open for further replies.

Deleted member 238589

D

Deleted member 238589

Something in this script causes the map not to be able to run it. I've been trying different undead scripts and they seem to be working. I also copied each function from the broken script to the working script one by one, and it worked until I copied the attack waves (possibly looping waves), so the problem lies there, but I still can't find it.

JASS:
globals
    player user = Player(1)
    integer Tier = 1
    constant integer DARK_RANGER  = 'Nbrn'
endglobals

//BUILDINGS

function BuildOrder takes nothing returns nothing
    call SetBuildUnitEx( 5,5,5, ACOLYTE)
    call SetBuildUnitEx( 1,1,1, NECROPOLIS_1)
    call SetBuildUnitEx( 2,2,2, CRYPT)
    call SetBuildUnitEx( 9,9,9, ZIGGURAT_1)
    call SetBuildUnitEx( 1,1,1, UNDEAD_ALTAR)
    call SetBuildUnitEx( 1,1,1, GRAVEYARD)
    call SetBuildUnitEx( 1,1,1, TOMB_OF_RELICS)
    call SetBuildUnitEx( 1,1,1, UNDEAD_MINE)

    if Tier > 1 then
        call SetBuildUnitEx( 1,1,1, NECROPOLIS_2)
        call SetBuildUnitEx( 1,1,1, CRYPT)
        call SetBuildUnitEx( 1,1,1, GRAVEYARD)
        call SetBuildUnitEx( 3,3,3, SLAUGHTERHOUSE)
        call SetBuildUnitEx( 3,3,3, DAMNED_TEMPLE)
        call SetBuildUnitEx( 1,1,1, SAC_PIT)
    endif

    if Tier > 2 then
        call SetBuildUnitEx( 1,1,1, NECROPOLIS_3)
        call SetBuildUnitEx( 2,2,2, BONEYARD)
    endif
endfunction

//BASE DEFENDERS

function CampaignDefenses takes nothing returns nothing
    if Tier == 1 then
        call CampaignDefenderEx( 5,5,5, GHOUL)
        call CampaignDefenderEx( 3,3,3, CRYPT_FIEND)
    elseif Tier == 2 then
        call CampaignDefenderEx( 5,5,5, CRYPT_FIEND)
        call CampaignDefenderEx( 2,2,2, ABOMINATION)
    elseif Tier == 3 then
        call CampaignDefenderEx( 3,3,3, ABOMINATION)
        call CampaignDefenderEx( 1,1,1, FROST_WYRM)
        call CampaignDefenderEx( 5,5,5, CRYPT_FIEND)
    endif
endfunction

//ATTACK WAVES

function Tier1Waves takes nothing returns nothing
    local integer AttackTier = Tier

    loop
        call SetBuildUpgrEx(1,1,1, UPG_UNHOLY_STR)
        call SetBuildUpgrEx(1,1,1, UPG_CR_ATTACK)
       
        //Wave 1
        call InitAssaultGroup()
        call CampaignAttackerEx(1,1,1,DARK_RANGER)
        call CampaignAttackerEx(3,3,3,CRYPT_FIEND)
        call SuicideOnPlayerEx(M3,M3,M3,user)
        exitwhen AttackTier != Tier
       
        call SetBuildUpgrEx(1,1,1, UPG_CANNIBALIZE)
       
        //Wave 2
        call InitAssaultGroup()
        call CampaignAttackerEx(4,4,4,GHOUL)
        call CampaignAttackerEx(2,2,2 CRYPT_FIEND)
        call SuicideOnPlayerEx(M3,M3,M3,user)
        exitwhen AttackTier != Tier

        loop
            //Wave 3
            call InitAssaultGroup()
            call CampaignAttackerEx(6,6,6,GHOUL)
            call CampaignAttackerEx(1,1,1,DARK_RANGER)
            call SuicideOnPlayerEx(M3,M3,M3,user)
            exitwhen AttackTier != Tier
           
            call SetBuildUpgrEx(1,1,1, UPG_UNHOLY_ARMOR)
            call SetBuildUpgrEx(1,1,1, UPG_CR_ARMOR)

            //Wave 4
            call InitAssaultGroup()
            call CampaignAttackerEx(4,4,4,GHOUL
            call CampaignAttackerEx(4,4,4,CRYPT_FIEND)
            call SuicideOnPlayerEx(M3,M3,M3,user)
            exitwhen AttackTier != Tier
        endloop
        exitwhen AttackTier != Tier
    endloop
endfunction

function Tier2Waves takes nothing returns nothing
    local integer AttackTier = Tier
    //Research all upgrades of earlier tier.
    call SetBuildUpgrEx(1,1,1, UPG_UNHOLY_STR)
    call SetBuildUpgrEx(1,1,1, UPG_CR_ATTACK)
    call SetBuildUpgrEx(1,1,1, UPG_UNHOLY_ARMOR)
    call SetBuildUpgrEx(1,1,1, UPG_CR_ARMOR)
    call SetBuildUpgrEx(1,1,1, UPG_CANNIBALIZE)

    loop
        call SetBuildUpgrEx(1,1,1, UPG_SKEL_LIFE)
        call SetBuildUpgrEx(1,1,1, UPG_EXHUME)
       
        //Wave 1
        call InitAssaultGroup()
        call CampaignAttackerEx(1,1,1,DARK_RANGER)
        call CampaignAttackerEx(4,4,4,CRYPT_FIEND) 
        call CampaignAttackerEx(2,2,2,OBSIDIAN_STATUE)
        call CampaignAttackerEx(4,4,4,GHOUL)
        call SuicideOnPlayerEx(M3,M3,M3,user)
        exitwhen AttackTier != Tier
       
        call SetBuildUpgrEx(1,1,1, UPG_FIEND_WEB)
        call SetBuildUpgrEx(1,1,1, UPG_BURROWING)

        //Wave 2
        call InitAssaultGroup()
        call CampaignAttackerEx(6,6,6,GHOUL)
        call CampaignAttackerEx(3,3,3,NECRO)
        call CampaignAttackerEx(1,1,1,MEAT_WAGON)
        call SuicideOnPlayerEx(M3,M3,M3,user)
        exitwhen AttackTier != Tier
       
        call SetBuildUpgrEx(2,2,2, UPG_UNHOLY_STR)
        call SetBuildUpgrEx(2,2,2, UPG_CR_ATTACK)
        call SetBuildUpgrEx(1,1,1, UPG_NECROS)
        call SetBuildUpgrEx(1,1,1, UPG_BANSHEE)

        loop
            //Wave 4+
            call InitAssaultGroup()
            call CampaignAttackerEx(1,1,1,DARK_RANGER)
            call CampaignAttackerEx(5,5,5,GHOUL)
            call CampaignAttackerEx(4,4,4,CRYPT_FIEND)
            call CampaignAttackerEx(2,2,2,BANSHEE)
            call CampaignAttackerEx(1,1,1,OBSIDIAN_STATUE)
            call SuicideOnPlayerEx(M4,M4,M4,user)
            exitwhen AttackTier != Tier
           
            call SetBuildUpgrEx(2,2,2, UPG_UNHOLY_ARMOR)
            call SetBuildUpgrEx(2,2,2, UPG_CR_ARMOR)

            //Wave 5+
            call InitAssaultGroup()
            call CampaignAttackerEx(8,8,8,GHOUL)
            call CampaignAttackerEx(3,3,3,NECRO)
            call CampaignAttackerEx(2,2,2,MEAT_WAGON)
            call SuicideOnPlayerEx(M4,M4,M4,user)
            exitwhen AttackTier != Tier

            //Wave 6+
            call InitAssaultGroup()
            call CampaignAttackerEx(1,1,1,DARK_RANGER)
            call CampaignAttackerEx(6,6,6,GHOUL)
            call CampaignAttackerEx(3,3,3,BANSHEE)
            call CampaignAttackerEx(5,5,5,GARGOYLE)
            call SuicideOnPlayerEx(M5,M5,M5,user)
            exitwhen AttackTier != Tier
        endloop
        exitwhen AttackTier != Tier
    endloop
endfunction

function Tier3Waves takes nothing returns nothing
    local integer AttackTier = Tier
    //Research all upgrades of earlier tier.
    call SetBuildUpgrEx(2,2,2, UPG_UNHOLY_ARMOR)
    call SetBuildUpgrEx(2,2,2, UPG_CR_ARMOR)
    call SetBuildUpgrEx(2,2,2, UPG_UNHOLY_STR)
    call SetBuildUpgrEx(2,2,2, UPG_CR_ATTACK)
    call SetBuildUpgrEx(1,1,1, UPG_NECROS)
    call SetBuildUpgrEx(1,1,1, UPG_BANSHEE)
    call SetBuildUpgrEx(1,1,1, UPG_FIEND_WEB)
    call SetBuildUpgrEx(1,1,1, UPG_BURROWING)
    call SetBuildUpgrEx(1,1,1, UPG_SKEL_LIFE)
    call SetBuildUpgrEx(1,1,1, UPG_EXHUME)
   
    loop
        call SetBuildUpgrEx(1,1,1, UPG_GHOUL_FRENZY)
        call SetBuildUpgrEx(1,1,1, UPG_BLK_SPHINX)
        call SetBuildUpgrEx(1,1,1, UPG_PLAGUE
        call SetBuildUpgrEx(1,1,1, UPG_SKEL_MASTERY)
        call SetBuildUpgrEx(1,1,1, UPG_STONE_FORM)
        call SetBuildUpgrEx(2,2,2, UPG_NECROS)
        call SetBuildUpgrEx(2,2,2, UPG_BANSHEE)
       
        //Wave 1
        call InitAssaultGroup()
        call CampaignAttackerEx(1,1,1,DARK_RANGER)
        call CampaignAttackerEx(4,4,4, ABOMINATION)
        call CampaignAttackerEx(2,2,2, OBSIDIAN_STATUE)
        call CampaignAttackerEx(4,4,4, GARGOYLE)
        call SuicideOnPlayerEx(M4,M4,M4,user)
        exitwhen AttackTier != Tier
       
        //Wave 2
        call InitAssaultGroup()
        call CampaignAttackerEx(8,8,8,GARGOYLE)
        call CampaignAttackerEx(2,2,2, FROST_WYRM)
        call SuicideOnPlayerEx(M5,M5,M5,user)
        exitwhen AttackTier != Tier
       
        call SetBuildUpgrEx(3,3,3, UPG_UNHOLY_ARMOR)
        call SetBuildUpgrEx(3,3,3, UPG_CR_ARMOR)
       
        //Wave 3
        call InitAssaultGroup()
        call CampaignAttackerEx(1,1,1,DARK_RANGER)
        call CampaignAttackerEx(2,2,2,NECRO)
        call CampaignAttackerEx(2,2,2,BANSHEE)
        call CampaignAttackerEx(4,4,4,CRYPT_FIEND)
        call CampaignAttackerEx(2,2,2,MEAT_WAGON)
        call SuicideOnPlayerEx(M4,M4,M4,user)
        exitwhen AttackTier != Tier
       
        call SetBuildUpgrEx(1,1,1, UPG_WYRM_BREATH)
       
        //Wave 4
        call InitAssaultGroup()
        call CampaignAttackerEx(10,10,10, GHOUL)
        call CampaignAttackerEx(4,4,4,NECRO)
        call CampaignAttackerEx(2,2,2,MEAT_WAGON)
        call CampaignAttackerEx(1,1,1,OBSIDIAN_STATUE)
        call SuicideOnPlayerEx(M5,M5,M5,user)
        exitwhen AttackTier != Tier
       
        loop
            //Wave 5
            call InitAssaultGroup()
            call CampaignAttackerEx(1,1,1,DARK_RANGER)
            call CampaignAttackerEx(6,6,6,CRYPT_FIEND)
            call CampaignAttackerEx(4,4,4,ABOMINATION)
            call CampaignAttackerEx(3,3,3,GARGOYLE)
            call CampaignAttackerEx(1,1,1,FROST_WYRM)
            call SuicideOnPlayerEx(M5,M5,M5,user)
            exitwhen AttackTier != Tier
           
            call SetBuildUpgrEx(3,3,3, UPG_UNHOLY_STR)
            call SetBuildUpgrEx(3,3,3, UPG_CR_ATTACK)
           
            //Wave 6
            call InitAssaultGroup()
            call CampaignAttackerEx(8,8,8,BLK_SPHINX)
            call SuicideOnPlayerEx(M4,M4,M4,user)
            exitwhen AttackTier != Tier
           
            //Wave 7
            call InitAssaultGroup()
            call CampaignAttackerEx(1,1,1,DARK_RANGER)
            call CampaignAttackerEx(4,4,4,BANSHEE)
            call CampaignAttackerEx(5,5,5,ABOMINATION)
            call CampaignAttackerEx(2,2,2,OBSIDIAN_STATUE)
            call CampaignAttackerEx(1,1,1,FROST_WYRM)
            call SuicideOnPlayerEx(M5,M5,M5,user)
            exitwhen AttackTier != Tier
           
            //Wave 8
            call InitAssaultGroup()
            call CampaignAttackerEx(4,4,4,BLK_SPHINX)
            call CampaignAttackerEx(6,6,6,CRYPT_FIEND)
            call CampaignAttackerEx(1,1,1,FROST_WYRM)
            call SuicideOnPlayerEx(M5,M5,M5,user)
            exitwhen AttackTier != Tier
        endloop
        exitwhen AttackTier != Tier
    endloop
endfunction

function AttackLoop takes nothing returns nothing
    loop
        if Tier == 1 then
            call Tier1Waves()
       
        elseif Tier == 2 then
            call Tier2Waves()
       
        elseif Tier == 3 then
           call Tier3Waves()
        else
           call DisplayTextToPlayer(user,0,0,"Something's not right")
        endif
    endloop
endfunction

//COMMAND FUNCTIONS

function TierCondition takes nothing returns nothing
    if CommandsWaiting() > 0 then
        set Tier = GetLastCommand()
        call PopLastCommand()
        call InitBuildArray()
        call InitDefenseGroup()
        call BuildOrder()
        call CampaignDefenses()
    endif
endfunction

function ConditionLoop takes nothing returns nothing
    call TierCondition()
    call StaggerSleep(1,5)
    loop
        call TierCondition()
        call Sleep(5)
    endloop
endfunction

//HERO LEVELING

function hero_levels takes nothing returns integer
    local integer hero  = GetHeroId()
    local integer level = GetHeroLevelAI()
    local integer a = 0
    if hero == DARK_RANGER then
        if level == 4 or level == 9 or level == 10 then
            set a = 'ANsi' //Silence
        endif
        if level == 1 or level == 3 or level == 7 then
            set a = 'ANba' //Black Arrow
        endif
        if level == 2 or level == 5 or level == 8 then
            set a = 'AEar' //Trueshot Aura
        endif
        if level == 6 then
            set a = 'ANch' //Charm
        endif 
    endif
    return a
endfunction

//MAIN FUNCTION

function main takes nothing returns nothing
    call CampaignAI(ZIGGURAT_1,null)
    call DoCampaignFarms(false)
    call SetPeonsRepair(true)
    call SetSlowChopping(true)
    call SetHeroesTakeItems(true)
    call SetHeroesBuyItems(true)

    call BuildOrder()
    call CampaignDefenses()

    call StartThread(function ConditionLoop)
   
    call AttackLoop()
endfunction
 
Last edited by a moderator:
Level 12
Joined
Mar 24, 2011
Messages
1,082
Something in this script causes the map not to be able to run it.
So, what exactly is the problem ? Does it boot you on lobby creation ? When you press "Start game" ? When it starts loading,? During loading? Right after loading? Do you have any error message? Are you just running the map through WE or did you manage to save it ?

You have to understand that is not a helpful problem exlanation...

regards
-Ned
 

Deleted member 238589

D

Deleted member 238589

When I test the map and run the trigger that starts the AI, it does nothing.
 
Level 12
Joined
Jun 15, 2016
Messages
472
In tier one, second attack wave you're missing a comma between the number of crypt fiends and the unit type. Also, in tier 3 upgrades you're missing the closing brackets of the plague update. Fix those and your script should work.
 

Deleted member 238589

D

Deleted member 238589

Yeah, that was it. Too bad I can't run JassDemo to check this stuff for me, it's easy to miss. Thought it was something bigger. Thanks.
 
Status
Not open for further replies.
Top