wesnoth/data/ai/scenarios/scenario-lua-ai.cfg

367 lines
16 KiB
INI

#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"
[/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=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: