#textdomain wesnoth-ai
# @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          , Gg^Efm      , 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         , Gg^Efm      , Gg^Efm
Wwf         , Wwf         , Hh          , Gg^Efm      , 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          , Gg^Efm      , Wwf         , Wwf         , Wwf
Gg^Efm      , Gg^Efm      , 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          , Gg^Efm      , 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" # wmllint: no spellcheck
    [/label]

    [label]
        x,y=16,15
        text= _ "Patrol waypoint 2" # wmllint: no spellcheck
    [/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)" # wmllint: no spellcheck
    [/label]

    [event]
        name=side 2 turn 1
        first_time_only=yes
        {MODIFY_AI_DELETE_CANDIDATE_ACTION 2 ca_loop firstca}
    [/event]

    [event]
        name=side 2 turn 1
        [modify_side]
            side=2
            [ai]
                [avoid]
                    x,y=1,11
                [/avoid]

                [leader_goal]
                    x,y=2,12
                [/leader_goal]
            [/ai]
        [/modify_side]

        #{MODIFY_UNIT side=1 moves 0}
    [/event]

    [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"
            name= _ "Bilbo"
        [/unit]
        [unit]
            x,y=3,8
            type="Walking Corpse"
            name= _ "Sirené"
        [/unit]

        [unit]
            x,y=16,5
            type="Wolf Rider"
            name= _ "Rark"
        [/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
            [goal]
                name=protect_location
                value=5
                protect_radius=16
                [criteria] #NOTE: this is a SLF, because we're protecting a location
                    x,y=42,20
                [/criteria]
            [/goal]

            [goal]
                name=lua_goal
                value=6
                engine=lua
                code = <<
				local t = {}
				t[1] = {["value"]=2.3, ["type"]=3, ["loc"]={["x"]=5, ["y"]=6}}
				t[2] = {["value"]=2.4, ["type"]=4, ["loc"]={["x"]=4, ["y"]=16}}
				return t
			>>
            [/goal]
            [aspect]
                id=aggression
                engine=lua
                code = << return 0.23 >>
            [/aspect]
            [engine]
                name="lua"
                code= <<
--! ==============================================================
local ai = ...
local debug_utils = wesnoth.require "~add-ons/Wesnoth_Lua_Pack/debug_utils.lua"

local my_ai = { }

-- data = { ["pers"] = 5, ["stringg"] = "stringg" }

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


function my_ai:stage_hello()

	--local att = ai.get_attacks()
	--debug_utils.dbms(att,false,"variable",false)
	--ai.debug.get_enemy_dst_src()
	--debug_utils.dbms(ai,false,"variable",false)
	local s = wesnoth.debug_ai(2)
	--wesnoth.message("Hi", s)
	--wesnoth.message(tostring(s["components"]["stage"]["ai_default_rca::candidate_action_evaluation_loop"]["candidate_action"]["second"]:exec(true)))
	--debug_utils.dbms(s,false,"variable",false)
	wesnoth.message("LuaAI agg", tostring(s.get_ai().get_aggression()))
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) -- ERROR: cfg.test is nil here

       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

--wesnoth.modify_ai({side=2, action="delete", path="stage[ca_loop].candidate_action[firstca]"})


function my_ai:do_moves()
	wesnoth.message("ldbg", tostring(wesnoth.game_config.debug_lua))
       my_leader = wesnoth.get_units({side = 1, can_recruit=yes})[1].name


       --! full move. note that the my_leader still can be used altrough x and y are now different.
       --ai.check_move(my_leader, 11, 23)
       --! attack with auto weapon/aggression
       ai.attack(2, 12, 3, 12, 4, 10)
       --! attack with weapon selected
       ai.check_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.check_recruit("Skeleton")
              --! recall on any suitable location.
              ai.check_recall("Kiressh")
       end
end

-- compulsory for the external CA's
function my_ai:get_ai()
	return ai
end


return my_ai
--! ==============================================================
>>
            [/engine]
            [stage]
                name=ai_default_rca::candidate_action_evaluation_loop
                id=ca_loop
                [candidate_action]
                    engine=lua
                    name=first
                    id=firstca
                    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]
                [candidate_action]
                    engine=lua
                    name=external
                    location="ai/lua/extCAexample.lua"
                [/candidate_action]
            [/stage]
            [stage]
                name="another_stage"
                engine="lua"
                code= "(...):stage_hello()"
            [/stage]
        [/ai]
    [/side]
[/test]

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