Warcraft III resources & community, 2003–2006 · archived

JASS #265

not rated
Submitted by VenomAI0 downloads
This is the Night Elf AI in word FOrm so ucan easly Cnp

Source

//============================================================================
//  Elf Melee Strategic AI
//============================================================================
 globals
    boolean startup     = true
     
    integer C_huntress  = 0
    integer C_archers   = 0
    integer C_dryads    = 0
    integer C_chimaera  = 0
     
    boolean lore        = false
    boolean wind        = false
    boolean ages        = false
    boolean eternity    = false
    boolean war         = false
    boolean hunters     = false
    boolean ballista    = false
    boolean claws       = false
    boolean roost       = false
    boolean use_bears   = false
endglobals
 
//============================================================================
//  set_skills
//============================================================================
 function set_skills takes nothing returns nothing
    //------------------------------------------------------------------------
    if hero_id == MOON_CHICK then
        //------------------------------------------------------------------------
        set skills1[ 1] = SEARING_ARROWS
        set skills1[ 2] = TRUESHOT
        set skills1[ 3] = SEARING_ARROWS
        set skills1[ 4] = TRUESHOT
        set skills1[ 5] = SEARING_ARROWS
        set skills1[ 6] = STARFALL
        set skills1[ 7] = TRUESHOT
        set skills1[ 8] = SCOUT
        set skills1[ 9] = SCOUT
        set skills1[10] = SCOUT
    endif
    //------------------------------------------------------------------------
    if hero_id2 == MOON_CHICK then
        //------------------------------------------------------------------------
        set skills2[ 1] = TRUESHOT
        set skills2[ 2] = SEARING_ARROWS
        set skills2[ 3] = TRUESHOT
        set skills2[ 4] = SEARING_ARROWS
        set skills2[ 5] = TRUESHOT
        set skills2[ 6] = STARFALL
        set skills2[ 7] = SEARING_ARROWS
        set skills2[ 8] = SCOUT
        set skills2[ 9] = SCOUT
        set skills2[10] = SCOUT
    endif
     
    //------------------------------------------------------------------------
    if hero_id == KEEPER then
        //------------------------------------------------------------------------
        set skills1[ 1] = FORCE_NATURE
        set skills1[ 2] = ENT_ROOTS
        set skills1[ 3] = FORCE_NATURE
        set skills1[ 4] = THORNS_AURA
        set skills1[ 5] = FORCE_NATURE
        set skills1[ 6] = TRANQUILITY
        set skills1[ 7] = ENT_ROOTS
        set skills1[ 8] = ENT_ROOTS
        set skills1[ 9] = THORNS_AURA
        set skills1[10] = THORNS_AURA
    endif
    //------------------------------------------------------------------------
    if hero_id2 == KEEPER then
        //------------------------------------------------------------------------
        set skills2[ 1] = THORNS_AURA
        set skills2[ 2] = ENT_ROOTS
        set skills2[ 3] = ENT_ROOTS
        set skills2[ 4] = THORNS_AURA
        set skills2[ 5] = ENT_ROOTS
        set skills2[ 6] = TRANQUILITY
        set skills2[ 7] = THORNS_AURA
        set skills2[ 8] = FORCE_NATURE
        set skills2[ 9] = FORCE_NATURE
        set skills2[10] = FORCE_NATURE
    endif
     
    //------------------------------------------------------------------------
    if hero_id == DEMON_HUNTER then
        //------------------------------------------------------------------------
        set skills1[ 1] = IMMOLATION
        set skills1[ 2] = EVASION
        set skills1[ 3] = EVASION
        set skills1[ 4] = MANA_BURN
        set skills1[ 5] = MANA_BURN
        set skills1[ 6] = METAMORPHOSIS
        set skills1[ 7] = MANA_BURN
        set skills1[ 8] = EVASION
        set skills1[ 9] = IMMOLATION
        set skills1[10] = IMMOLATION
    endif
    //------------------------------------------------------------------------
    if hero_id2 == DEMON_HUNTER then
        //------------------------------------------------------------------------
        set skills2[ 1] = MANA_BURN
        set skills2[ 2] = EVASION
        set skills2[ 3] = MANA_BURN
        set skills2[ 4] = EVASION
        set skills2[ 5] = MANA_BURN
        set skills2[ 6] = METAMORPHOSIS
        set skills2[ 7] = EVASION
        set skills2[ 8] = IMMOLATION
        set skills2[ 9] = IMMOLATION
        set skills2[10] = IMMOLATION
    endif
endfunction
 
//============================================================================
//  setup_force
//============================================================================
function setup_force takes nothing returns nothing
    call AwaitMeleeHeroes()
    call InitMeleeGroup()
     
    call SetMeleeGroup( hero_id     )
    call SetMeleeGroup( hero_id2    )
     call SetMeleeGroup( ARCHER      )
    call SetMeleeGroup( HUNTRESS    )
    call SetMeleeGroup( DRUID_TALON )
    call SetMeleeGroup( DRUID_CLAW  )
    call SetMeleeGroup( DRYAD       )
    call SetMeleeGroup( HIPPO       )
    call SetMeleeGroup( HIPPO_RIDER )
    call SetMeleeGroup( CHIMAERA    )
     
    call SetInitialWave(10)
endfunction
 
//============================================================================
//  attack_sequence
//============================================================================
function attack_sequence takes  nothing returns nothing
    local boolean needs_exp
    local boolean has_siege
    local boolean major_ok
    local boolean air_units
    local integer chim
     
    loop
        exitwhen GetUnitCountDone(hero_id)>0
        call Sleep(2)
    endloop
     
    call StaggerSleep(0,2)
    loop
        loop
            exitwhen not CaptainRetreating()
            call Sleep(2)
        endloop
         
        call setup_force()
         
        set major_ok         = GetUnitCountDone(HUNTRESS)>=2
        set needs_exp        = take_exp and (major_ok or GetGoldOwned()<2000)
        set chim             = GetUnitCountDone(CHIMAERA)
        set has_siege        = GetUnitCountDone(BALLISTA)>0 or chim>0
        set air_units        = GetUnitCountDone(HIPPO_RIDER)>0
        set allow_air_creeps = air_units or GetUnitCountDone(ARCHER)>0
         
        call SingleMeleeAttack(needs_exp,has_siege,major_ok,air_units)
    endloop
endfunction
 
//============================================================================
//  init_booleans
//============================================================================
function init_booleans takes nothing returns nothing
    set C_huntress  = GetUnitCount(HUNTRESS)
    set C_archers   = GetUnitCount(ARCHER)
    set C_dryads    = GetUnitCount(DRYAD)
    set C_chimaera  = GetUnitCount(CHIMAERA)
    set lore        = GetUnitCountDone(ANCIENT_LORE)>0
    set wind        = GetUnitCountDone(ANCIENT_WIND)>0
    set ages        = TownCountDone(TREE_AGES)>0
    set eternity    = TownCountDone(TREE_ETERNITY)>0
    set war         = GetUnitCountDone(ANCIENT_WAR)>0
    set hunters     = GetUnitCountDone(HUNTERS_HALL)>0
    set ballista    = GetUnitCount(BALLISTA)>0
    set claws       = TownCount(DRUID_CLAW)>0
    set roost       = GetUnitCountDone(CHIMAERA_ROOST)>0
    set use_bears   = lore and GetUpgradeLevel(UPG_DRUID_CLAW)>=2
endfunction
 
//============================================================================
//  upgrade_sequence
//============================================================================
function upgrade_sequence takes nothing returns nothing
     
    //*** HUNTER'S HALL UPGRADES ***
    //
    if hunters then
        call SetBuildUpgr( 1, UPG_STR_MOON   )
        call SetBuildUpgr( 1, UPG_MOON_ARMOR )
         
        if ages then
            call SetBuildUpgr( 2, UPG_STR_MOON   )
            call SetBuildUpgr( 2, UPG_MOON_ARMOR )
             
            if eternity then
                call SetBuildUpgr( 3, UPG_STR_MOON   )
                call SetBuildUpgr( 3, UPG_MOON_ARMOR )
            endif
        endif
         
        call SetBuildUpgr( 1, UPG_STR_WILD )
        call SetBuildUpgr( 1, UPG_HIDES    )
         
        if ages then
            call SetBuildUpgr( 2, UPG_STR_WILD )
            call SetBuildUpgr( 2, UPG_HIDES    )
             
            if eternity then
                call SetBuildUpgr( 3, UPG_STR_WILD )
                call SetBuildUpgr( 3, UPG_HIDES    )
                 
                if ballista then
                    call SetBuildUpgr( 1, UPG_ULTRAVISION )
                endif
            endif
        endif
    endif
     
    //*** ANCIENT OF WAR UPGRADES ***
    //
    if war then
        if ages then
            call SetBuildUpgr( 1, UPG_BOWS )
             
            if hunters then
                call SetBuildUpgr( 1, UPG_BOLT )
                 
                if eternity then
                    call SetBuildUpgr( 1, UPG_GLAIVE   )
                    call SetBuildUpgr( 1, UPG_MARKSMAN )
                    call SetBuildUpgr( 1, UPG_SCOUT    )
                endif
            endif
        endif
    endif
     
    //*** ANCIENT OF LORE UPGRADES ***
    //
    if lore then
        call SetBuildUpgr( 1, UPG_DRUID_CLAW )
         
        if eternity then
            call SetBuildUpgr( 2, UPG_DRUID_CLAW )
        endif
         
        call SetBuildUpgr( 1, UPG_ABOLISH )
     endif
     
    //*** ANCIENT OF WIND UPGRADES ***
    //
    if lore then
        call SetBuildUpgr( 1, UPG_DRUID_TALON )
         
        if eternity then
            call SetBuildUpgr( 2, UPG_DRUID_TALON )
        endif
    endif
     
    //*** CHIM ROOST UPGRADES ***
    //
    if roost and GetUnitCount(CHIMAERA)>0 then
        call SetBuildUpgr( 1, UPG_CHIM_ACID )
    endif
endfunction
 
//============================================================================
//  forces_sequence
//============================================================================
function forces_sequence takes nothing returns nothing
    local integer farms = GetUnitCountDone(MOON_WELL) + TownCountDone(TREE_LIFE)
    local integer siege_avail
    local integer count
     
    //*** MELEE FORCES ***
    //
    if farms < 6 then
        return
    endif
    call FoodPool( 18,  true,HUNTRESS,3,  lore,DRUID_CLAW,4 )
     
    //*** SIEGE FORCES ***
    //
    call FoodPool( 4,  hunters and ages,BALLISTA,4,  roost,CHIMAERA,5 )
    if farms < 7 then
        return
    endif
    call FoodPool( 10,  hunters and ages,BALLISTA,4,  roost,CHIMAERA,5 )
     
    //*** OTHER FORCES ***
    //
    //
    if wind then
        call SetBuildUnit( 2, DRUID_TALON )
    endif
endfunction
 
//============================================================================
//  build_sequence
//============================================================================
function build_sequence takes nothing returns nothing
    local integer mines = GetMinesOwned()
     
    call InitBuildArray()
    call init_booleans()
     
    call MeleeTownHall( 0, TREE_LIFE )
    call MeleeTownHall( 1, TREE_LIFE )
     
    call SetBuildUnit( 5, WISP              )
    call SetBuildUnit( 1, ANCIENT_WAR       )
    call SetBuildUnit( 1, MOON_WELL         )
    call SetBuildUnit( 9, WISP              )
    call SetBuildUnit( 2, MOON_WELL         )
    call SetBuildUnit( 1, ARCHER            )
    call SetBuildUnit(10, WISP              )
    call SetBuildUnit( 1, ELF_ALTAR         )
    call SetBuildUnit( 2, ARCHER            )
    call SetBuildUnit(11, WISP              )
    call SetBuildUnit( 3, ARCHER             )
    call SetBuildUnit( 1, hero_id           )
     
    call FoodPool( 8,  true,ARCHER,2,  lore,DRYAD,3 )
     
    call SetBuildUnit( 3, MOON_WELL         )
    call SetBuildUnit( 1, HUNTERS_HALL      )
     
    call FoodPool( 12,  true,ARCHER,2,  lore,DRYAD,3 )
     
    call SetBuildUnit( 1, HUNTRESS          )
    call SetBuildUpgr( 1, UPG_MOON_ARMOR    )
    call SetBuildUnit( 2, HUNTRESS          )
    call SetBuildUnit( 1, TREE_AGES         )
     
    call FoodPool( 9,  true,HUNTRESS,3,  use_bears,DRUID_CLAW,4 )
     
    call SetBuildUpgr( 1, UPG_STR_MOON      )
     
    call FoodPool( 12,  true,HUNTRESS,3,  use_bears,DRUID_CLAW,4 )
     
    call SetBuildUnit( 4, MOON_WELL         )
    call SetBuildUnit( 2, ANCIENT_WAR       )
    call SetBuildUpgr( 2, UPG_STR_MOON      )
    call SetBuildUpgr( 1, UPG_BOWS          )
    call SetBuildUnit( 1, hero_id2          )
     
    call BasicExpansion( mines < 2, TREE_LIFE )
     
    call GuardSecondary( 1, 2, ANCIENT_PROTECT )
    call GuardSecondary( 2, 2, ANCIENT_PROTECT )
     
    call forces_sequence()
    call upgrade_sequence()
     
    if mines > 1 then
        call SetBuildUnit( 16, WISP )
    endif
     
    call SetBuildUnit( 5, MOON_WELL         )
    call SetBuildUnit( 1, ANCIENT_LORE      )
    call SetBuildUnit( 1, ANCIENT_WIND      )
    call SetBuildUnit( 1, TREE_ETERNITY     )
    call SetBuildUnit( 1, CHIMAERA_ROOST    )
    call SetBuildUnit( 6, MOON_WELL         )
     
    if GetUnitCount(CHIMAERA_ROOST)>0 and GetUnitCount(ZEPPELIN)<3 then
         call GetZeppelin()
    endif
     
    call MeleeTownHall( 2, TREE_LIFE )
     
    call BasicExpansion( mines < 3, TREE_LIFE )
endfunction
 
//============================================================================
//  peon_assignment
//============================================================================
function peon_assignment takes nothing returns nothing
    local integer T
    loop
        call ClearHarvestAI()
         
        set T = TownWithMine()
         
        call HarvestGold(T,4)
        call HarvestWood(0,1)
        call HarvestGold(T,1)
        call HarvestWood(0,2)
         
        if GetUnitCountDone(ELF_MINE)>1 then
            call HarvestGold(T+1,5)
        endif
         
        call HarvestWood(1,20)
         
        call build_sequence()
        call Sleep(3)
    endloop
endfunction
 
//============================================================================
//	main
//============================================================================
function main takes nothing returns nothing
    set do_debug_cheats = GetAiPlayer()==1
     
    call PickMeleeHero(RACE_NIGHTELF)
    call set_skills()
    call StandardAI(function SkillArrays, function peon_assignment, function attack_sequence)
    call PlayGame()
endfunction

Comments

2
how is this useful? why would anyone want to copy and paste the night elf AI? if you're going to write a useful AI, you're not building it on the stadard AI scripts anyway.

Also everyone can extract them from warcraft's mpq archives if really needed (to get the latest version)
I postIng the orc and Humans Later mabey in a week i have both on. :wink: