#textdomain wesnoth
# @file data/scenario-luaai.cfg

[test]
    name="Test scenario for Lua AI"
    map_data="	border_size=1
	usage=map

Hh          , Hh          , Gg          , Wwf         , Wwf         , Gs^Fp       , Mm          , Hh          , Gg          , Gs^Fp       , Gg          , Hh          , Gg          , Mm          , Hh          , Mm          , Wwf         , Wwf         , Hh          , Gs^Fp       , Hh          , Mm          , Mm          
Hh          , Hh          , Gg^Ve       , Wwf         , Wwf         , Gs^Fp       , Mm          , Hh          , Gg          , Gs^Fp       , Gg          , Hh          , Gg          , Mm          , Hh          , Mm          , Wwf         , Wwf         , Hh          , Gs^Fp       , Hh          , Mm          , Mm          
Wwf         , Wwf         , Wwf         , Wwf         , Gg          , Wwf         , Wwf         , Hh          , Gg          , Gg          , Wwf         , Ch          , Wwf         , Gs^Fp       , Wwf         , Wwf         , Re          , Re          , Hh          , Mm          , Wwf         , Mm          , Mm          
Mm          , Mm          , Wwf         , Gs^Fp       , Gg^Vh       , Wwf         , Gg          , Gg          , Wwf         , Wwf         , Wwf         , 1 Kh        , Ch          , Wwf         , Re          , Re          , Rd          , Rd          , Wwf         , Wwf         , Gs^Fp       , Wwf         , Wwf         
Wwf         , Wwf         , Mm          , Wwf         , Gs^Fp       , Wwf         , Wwf         , Wwf         , Gg^Vh       , Gg          , Wwf         , Ch          , Wwf         , Ch          , Rd          , Rd          , Wwf         , Wwf         , Gg^Vh       , Gs^Fp       , Re^Gvs      , Hh          , Hh          
Hh          , Hh          , Wwf         , Gs^Fp       , Wwf         , Wwf         , Gg          , Gg          , Gg          , Gg          , Wwf         , Ch          , Gg          , Wwf         , Wwf         , Wwf         , Mm          , Gs^Fp       , Re          , Re^Gvs      , Gg^Wm       , Re^Gvs      , Re^Gvs      
Wwf         , Wwf         , Mm          , Wwf         , Hh          , Gs^Fp       , Rd          , Rd          , Gg          , Gg          , Wwf         , Wwf         , Gs^Fp       , Gg          , Hh          , Gg          , Re          , Re          , Rd          , Rd          , Gg          , Hh          , Hh          
Hh          , Hh          , Gs^Fp       , Gg          , Gg          , Rd          , Gg          , Gg          , Wwf         , Wwf         , Gs^Fp       , Wwf         , Gs^Fp       , Mm          , Re          , Re          , Rd          , Rd          , Gg          , Ggf         , Mm          , Gs^Fp       , Gs^Fp       
Gs^Fp       , Gs^Fp       , Gg          , Gg          , Wwf         , Gg          , Wwf         , Wwf         , Mm          , Hh          , Wwf         , Wwf         , Re          , Re          , Rd          , Rd          , Rd          , Gg          , Gs^Fp       , Gs^Fp       , Gs^Fp       , Hh          , Hh          
Hh          , Hh          , Wwf         , Wwf         , Hh          , Wwf         , Gg          , Gg          , Gg          , Gg          , Wwf         , Re          , Re          , Rd          , Gg          , Gg          , Gg          , Gg^Vh       , Hh          , Gg          , Wwf         , Ggf         , Ggf         
Wwf         , Wwf         , Hh          , Ggf         , Gs^Fp       , Hh^Vhh      , Gg          , Gg          , Gg          , Ss^Vhs      , Hh          , Ww          , Gs^Fp       , Gg          , Gs^Fp       , Hh          , Wwf         , Wwf         , Wwf         , Wwf         , Gg          , Wwf         , Wwf         
Hh          , Hh          , Gg          , Gg          , Re          , Gg          , Re          , Re          , Gg          , Ss          , Gs^Fp       , Ww          , Hh          , Mm          , Ww          , Wwf         , Gg          , Gg          , Ds          , Gg          , Gg          , Gs^Fp       , Gs^Fp       
Gs^Fp       , Gs^Fp       , Gg          , Rd          , Rd          , Re          , Rd          , Re          , Hh          , Mm          , Wwf         , Ww          , Ww          , Ww          , Gg          , Gg          , Hh          , Gs^Fp       , Rd          , Rd          , Hh          , Gg          , Gg          
Rd          , Rd          , Gs^Fp       , Hh          , Rd          , Rd          , Gs^Fp       , Re          , Gg          , Gg          , Wwf         , Gg          , Wwf         , Gg          , Gg          , Re          , Gs^Fp       , Hh          , Rd          , Mm          , Gs^Fp       , Rd          , Rd          
Rd          , Rd          , Hh          , Mm          , Rd          , Hh          , Hh          , Re          , Gg          , Gg          , Ww          , Gg          , Wwf         , Gg          , Hh          , Re          , Rd          , Rd          , Rd          , Hh          , Gg          , Rd          , Rd          
Gg          , Gg          , Gg          , Rd          , Ds          , Gs^Fp       , Gg          , Gg          , Ww          , Ww          , Hh          , Ww          , Gs^Fp       , Mm          , Gg          , Re          , Re          , Re          , Re          , Rd          , Gg          , Gs^Fp       , Gs^Fp       
Gs^Fp       , Gs^Fp       , Gg          , Gg          , Wwf         , Gg          , Wwf         , Wwf         , Gs^Fp       , Mm          , Gs^Fp       , Ww          , Hh          , Ss          , Gg          , Re          , Gg          , Gg          , Gs^Fp       , Gg          , Hh          , Hh          , Hh          
Wwf         , Wwf         , Wwf         , Wwf         , Hh          , Wwf         , Gg          , Hh          , Gg          , Gg          , Re          , Ww          , Wwf         , Ss^Vhs      , Gg          , Gg          , Gg          , Hh^Vhh      , Hh          , Ggf         , Wwf         , Wwf         , Wwf         
Ggf         , Ggf         , Gs^Fp       , Gg          , Gs^Fp       , Gg^Vh       , Rd          , Gg          , Rd          , Rd          , Re          , Re          , Wwf         , Gg          , Mm          , Gg          , Wwf         , Wwf         , Wwf         , Wwf         , Gg          , Mm          , Mm          
Hh          , Hh          , Mm          , Gs^Fp       , Gg          , Gg          , Rd          , Rd          , Re          , Re          , Gs^Fp       , Wwf         , Gs^Fp       , Hh          , Wwf         , Wwf         , Gg          , Gg          , Gg          , Gg          , Gs^Fp       , Gs^Fp       , Gs^Fp       
Gs^Fp       , Gs^Fp       , Gg          , Ggf         , Rd          , Rd          , Re          , Re          , Hh          , Mm          , Gg          , Wwf         , Wwf         , Wwf         , Gg          , Gg          , Rd          , Rd          , Hh          , Gg          , Mm          , Hh          , Hh          
Hh          , Hh          , Gg^Wm       , Rd          , Re          , Re          , Mm          , Gg          , Wwf         , Wwf         , Wwf         , Ch          , Gg          , Gg          , Gg          , Rd          , Gg          , Gs^Fp       , Wwf         , Wwf         , Wwf         , Wwf         , Wwf         
Re^Gvs      , Re^Gvs      , Re^Gvs      , Re^Gvs      , Gg^Vh       , Gs^Fp       , Wwf         , Wwf         , Rd          , Ch          , Ch          , Ch          , Gg          , Gg          , Gg^Vh       , Gg          , Wwf         , Wwf         , Gs^Fp       , Gs^Fp       , Gg^Ve       , Gg          , Gg          
Hh          , Hh          , Gs^Fp       , Gs^Fp       , Wwf         , Wwf         , Rd          , Rd          , Re          , Re          , Wwf         , 2 Kh        , Wwf         , Gg          , Wwf         , Wwf         , Gg          , Wwf         , Wwf         , Wwf         , Wwf         , Gs^Fp       , Gs^Fp       
Gs^Fp       , Gs^Fp       , Wwf         , Wwf         , Mm          , Rd          , Gs^Fp       , Hh          , Wwf         , Wwf         , Gg          , Ch          , Gg          , Wwf         , Hh          , Gg          , Wwf         , Wwf         , Gg^Vh       , Gg          , Wwf         , Mm          , Mm          
Gs^Fp       , Gs^Fp       , Wwf         , Wwf         , Mm          , Rd          , Gs^Fp       , Wwf         , Wwf         , Gg          , Gg          , Gg          , Gg          , Gg          , Hh          , Gg          , Wwf         , Wwf         , Gg          , Gg          , Wwf         , Mm          , Mm          
"

    turns=90
    id=lua_ai

    {DEFAULT_SCHEDULE}

    [label]
        x,y=16,5
        text="Patrol waypoint 1"
    [/label]

    [label]
        x,y=16,15
        text="Patrol waypoint 2"
    [/label]

    [label]
        x,y=3,14
        text="Formula priorities test"
    [/label]

    [label]
        x,y=2,12
        text="first"
    [/label]

    [label]
        x,y=3,11
        text="second"
    [/label]

    [label]
        x,y=3,13
        text="third"
    [/label]

    [label]
        x,y=8,5
        text="Location guarded (range = 3)"
    [/label]

    [side]
        type=Dwarvish Steelclad
        id=side_1_leader
        side=1
        canrecruit=yes
        recruit=Dwarvish Guardsman,Dwarvish Fighter,Dwarvish Thunderer,Thief,Poacher,Footpad
        gold=100
        controller=human
        [unit]
            x,y=10,8
            type="Elvish Archer"
            hitpoints=1
            generate_name=yes
        [/unit]

        [unit]
            x,y=3,12
            type="Elvish Fighter"
            random_traits=no
            generate_name=yes
            [modifications]
                [trait]
                    id=move
                    [effect]
                        apply_to=movement
                        set=0
                    [/effect]
                [/trait]
                [trait]
                    id=hp
                    [effect]
                        apply_to=hitpoints
                        increase_total=120
                    [/effect]
                [/trait]
            [/modifications]
        [/unit]
    [/side]

    [side]
        #controller=human
        name=LuaAI
        type=Dark Sorcerer
        side=2
        canrecruit=yes
        recruit=Skeleton,Skeleton Archer,Walking Corpse,Ghost,Vampire Bat,Dark Adept,Ghoul
        gold=100
        shroud=yes

        [unit]
            placement=recall
            type="Skeletal Dragon"
            id="Kiressh"
            name="Kiressh"
        [/unit]

        [unit]
            x,y=8,5
            type="Orcish Archer"
            generate_name=yes
        [/unit]
        [unit]
            x,y=3,8
            type="Walking Corpse"
            generate_name=yes
        [/unit]

        [unit]
            x,y=16,5
            type="Wolf Rider"
            generate_name=yes
        [/unit]

        [unit]
            x,y=3,11
            type="Goblin Spearman"
            generate_name=yes
        [/unit]

        [unit]
            x,y=3,13
            type="Goblin Spearman"
            generate_name=yes
        [/unit]

        [unit]
            x,y=2,12
            type="Goblin Spearman"
            generate_name=yes
        [/unit]

        [unit]
            x,y=7,20
            type="Silver Mage"
            generate_name=yes
        [/unit]

        [unit]
            x,y=6,20
            type="Ghost"
            generate_name=yes
        [/unit]
        [unit]
            x,y=15,22
            type="Ghost"
            generate_name=yes
        [/unit]
        [unit]
            x,y=12,19
            type="Ghost"
            generate_name=yes
        [/unit]
        [unit]
            x,y=10,6
            type="Lich"
            experience=149
            generate_name=yes
        [/unit]

        [ai]
            version=10710
            [engine]
                name="lua"
                code= <<
--! ==============================================================
local ai = ...
local my_ai = { }

local ai_stdlib = wesnoth.require('ai/lua/stdlib.lua');
ai_stdlib.init(ai)

function my_ai:stage_hello()
       wesnoth.message('hello from stage!')
end

function my_ai:candidate_action_evaluation_hello()
       wesnoth.message('hello from candidate action evaluation!')
       return 42, {test=123}
end

function my_ai:candidate_action_execution_hello(cfg)
       wesnoth.message('hello from candidate action execution!')
       wesnoth.message('test value is ' .. cfg.test)
       self:do_moves()
end

function my_ai:candidate_action_evaluation_hello2()
       wesnoth.message('hello from second candidate action evaluation!')
       return 99
end

function my_ai:candidate_action_execution_hello2()
       wesnoth.message('hello from second candidate action execution!')
       self:do_moves()
end


function my_ai:do_moves()
       my_leader = wesnoth.get_units({canrecruit = true, side = ai.side})[1]
       --! move (partial move)
       ai.move(my_leader,13, 22)
       --! full move. note that the my_leader still can be used altrough x and y are now different.
       ai.move_full(my_leader, 11, 23)

       --! attack with auto weapon/aggression
       ai.attack(2, 12, 3, 12)
       --! attack with weapon selected
       ai.attack(3, 11, 3, 12, 1)
       --! attack with different aggression
       ai.attack(3, 13, 3, 12, -1, 0.9)
       if wesnoth.current.turn==1 then
              --! recruit on specific location
              ai.recruit("Vampire Bat", 10, 22)
              --! recruit on any suitable location
              ai.recruit("Skeleton")
              --! recall on any suitable location.
              ai.recall("Kiressh")
       end
end

return my_ai
--! ==============================================================
>>
            [/engine]
            [stage]
                name=testing_ai_default::candidate_action_evaluation_loop
                [candidate_action]
                     engine=lua
                     name=first
                     evaluation="return (...):candidate_action_evaluation_hello()"
                     execution="local ai, cfg = ...; ai:candidate_action_execution_hello(cfg)"
                [/candidate_action]
                [candidate_action]
                     engine=lua
                     name=second
                     evaluation="return (...):candidate_action_evaluation_hello2()"
                     execution="(...):candidate_action_execution_hello2()"
                [/candidate_action]
            [/stage]
            [stage]
                engine="lua"
                code= "(...):stage_hello()"
            [/stage]
        [/ai]
    [/side]
[/test]

# vim: tabstop=4: shiftwidth=4: expandtab: softtabstop=4: autoindent:
