#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          , 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"
    [/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]

    [event]
        name=preload
        first_time_only=no
        [lua]
            code = <<
            H = wesnoth.require "lua/helper.lua"
            W = H.set_wml_action_metatable {}
            _ = wesnoth.textdomain "my-campaign"

            -- Define your global constants here.
            -- ...
		ai = {}
		ca_counter = 0
		-- @Crab_: this preload event in my opinion should be carried out in a separate file and included in all scenarios 
		-- 	that intend to use lua, because it contains some vital code. Implementations of patrol could be kept here
		--	or carried out somewhere else, depending on what we want. This counter is as simple as it is, but not protected at all
		--	I think if users try to mess with it, it's they're own fault. If this needs protection we can put it in a table a protect
		--	with a metatable.
		
            H.set_wml_var_metatable(_G)
	

	wesnoth.require("ai/lua/patrol.lua")
	
	local ptrl = patrol_gen("Rark", {{x=14, y=7}, {x=15, y=7}, {x=15, y=8}, {x=14, y=8}}) -- need to find a solution for this
	patrol_rark = ptrl.exec
	patrol_bilbo = patrol_gen("Bilbo", {{x=2, y=3}, {x=3, y=2}}).exec
	patrol_sally = patrol_gen("Sally", {{x=5, y=7}, {x=7, y=5}}).exec
	patrol_eval_rark = ptrl.eval
	-- End of patrol function //  patrol_gen(ai, "Rark", {{x=14, y=7}, {x=15, y=7}, {x=15, y=8}, {x=14, y=8}})
	

>>
        [/lua]
    [/event]

    [event]
        name=side 2 turn 1
        first_time_only=yes
        [add_ai_behavior]
            side=2
            [filter]
                name="Rark"
            [/filter]
            sticky=yes
            loop_id=ca_loop
            evaluation="return patrol_eval_rark()"
            execution="patrol_rark()"
        [/add_ai_behavior]
    [/event]

    [event]
        name=side 2 turn 1
        first_time_only=yes
        [add_ai_behavior]
            side=2
            [filter]
                name="Bilbo"
            [/filter]
            sticky=yes
            loop_id=ca_loop
            evaluation="return patrol_eval_rark()"
            execution="patrol_bilbo()"
        [/add_ai_behavior]
    [/event]

    [event]
        name=side 2 turn 1
        first_time_only=yes
        [add_ai_behavior]
            side=2
            [filter]
                name="Sally"
            [/filter]
            sticky=yes
            loop_id=ca_loop
            evaluation="return patrol_eval_rark()"
            execution="patrol_sally()"
        [/add_ai_behavior]
    [/event]

    [event]
        name=side 2 turn 1
        first_time_only=yes
        {MODIFY_AI_DELETE_CANDIDATE_ACTION 2 ca_loop firstca}
    [/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="Sally"
        [/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= <<
--! ==============================================================
ai = ...
-- local data = {} -- @note: this shouldn't be here

local my_ai = { data = { ["pers"] = 5, ["stringg"] = "stringg" } }



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


function my_ai:stage_hello()
       --wesnoth.message('hello from stage!')
       --wesnoth.message('PERSISTANCE: ' .. tostring(self.data["pers"]) .. self.data["stringg"])
	local tg = ai.get_targets()
	for k,v in pairs(tg) do
		if v.type==3 or v.type==4 then
			wesnoth.message(tg[k].type .. " " .. tg[k].value .. " " .. tg[k].loc.x .. " " ..tg[k].loc.y)
		end
	end
	
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()

       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.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
                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]
            [/stage]
            [stage]
                engine="lua"
                code= "(...):stage_hello()"
            [/stage]
        [/ai]
    [/side]
[/test]

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