事件定义脚本
command
get command
format | function | return | example |
---|---|---|---|
get.time.{VALUE NAME} | {VALUE NAME} should be one in [day , step , season , is_daytime , total_step ] | {VALUE} | get.time.total_step |
get.weather | {WEATHER NAME} | ||
get.landform.{X}-{Y} | {LANDFORM NAME} | get.landform.2-3 | |
get.position.{OBJECT NAME}-{OBJECT ID} | {X}-{Y} | get.position.Pig-2 | |
get.map.{X}-{Y} | {OBJECT NAME}-{OBJECT ID} | get.position.Pig-2 | |
get.backpack.{OBJECT NAME}-{OBJECT ID}.{INDEX} | {OBJECT NAME}-{OBJECT ID} | get.backpack.Brave-0.9 | |
get.equipment.{OBJECT NAME}-{OBJECT ID}.{INDEX} | {OBJECT NAME}-{OBJECT ID} | get.equipment.Brave-0.0 | |
get.attribute.{OBJECT NAME}-{OBJECT ID}.{ATTRIBUTE NAME} | {VALUE} | get.attribute.Pig-2.ATK | |
get.info.{OBJECT NAME}-{OBJECT ID} | {INFO} | get.info.Pig-2 | |
get.synthesize_table.{OBJECT NAME} | {SYNTHESIZE TABLE} | get.synthesize_table.Torch | |
get.agent.{INDEX} | {OBJECT NAME}-{OBJECT ID} | get.agent.0 | |
get.neighbors.{OBJECT NAME}-{OBJECT ID}.{OBJECT NAME}.{DISTANCE} | {OBJECT NAME}-{OBJECT ID}&{OBJECT NAME}-{OBJECT ID}... | get.neighbors.Brave-0.Pig.5 | |
get.actor | get the actor object in an event (e.g. the attacker in AttackEvent) | {OBJECT NAME}-{OBJECT ID} | |
get.target | get the target object in an event (e.g. the object attacked in AttackEvent) | {OBJECT NAME}-{OBJECT ID} |
game command
format | function |
---|---|
game.reset | |
game.exit | |
game.update |
show command
format | function | example |
---|---|---|
show.object_map | ||
show.landform_map | ||
show.{get command suffix} | show.landform.2-3 |
set command
format | function | example |
---|---|---|
set.weather.{WEATHER NAME} | set.weather.Hot | |
set.landform.{LANDFORM NAME}.{X}-{Y} | set.landform.Forest.2-3 | |
set.attribtue.{OBJECT NAME}-{OBJECT ID}.{ATTRIBUTE NAME}.{VALUE} | set.attribute.Pig-0.HP.200 |
add command
format | function | example |
---|---|---|
add.map.{X}-{Y}.{OBJECT NAME}.{COUNT} | add.map.2-3.Meat.2 | |
add.backpack.{OBJECT NAME}-{OBJECT ID}.{OBJECT NAME}.{COUNT} | add.backpack.Brave-0.Meat.5 | |
add.buff.{OBJECT NAME}-{OBJECT ID}.{BUFF NAME} | add.buff.Brave-0.consume_Meat |
action command
format | function | example |
---|---|---|
action.move.{OBJECT NAME}-{OBJECT ID}.{X}-{Y} | action.move.Pig-0.2-3 | |
action.transmit.{OBJECT NAME}-{OBJECT ID}.{X}-{Y} | action.transmit.Pig-0.2-3 | |
action.attack.{OBJECT NAME}-{OBJECT ID}.{X}-{Y} | action.attack.Brave-0.2-3 | |
action.fetch.{OBJECT NAME}-{OBJECT ID}.{X}-{Y} | action.fetch.Brave-0.2-3 | |
action.pickup.{OBJECT NAME}-{OBJECT ID}.{X}-{Y} | ||
action.fetch.{OBJECT NAME}-{OBJECT ID}.{OBJECT NAME}.{COUNT} | ||
action.consume.{OBJECT NAME}-{OBJECT ID}.{OBJECT NAME}.{COUNT} | ||
action.discard.{OBJECT NAME}-{OBJECT ID}.{OBJECT NAME}.{COUNT} | ||
action.equip.{OBJECT NAME}-{OBJECT ID}.{OBJECT NAME} | action.equip.Brave-0.Sword |
remove command
format | function | example |
---|---|---|
remove.map.{X}-{Y} | remove.map.2-3 | |
remove.backpack.{OBJECT NAME}-{OBJECT ID}.{OBJECT NAME} | remove.backpack.Brave-0.Meat | |
remove.buff.{OBJECT NAME}-{OBJECT ID}.{BUFF NAME} | remove.buff.Brave-0.Night |
script
一条script
由若干条sentence
组成,格式为sentence_0|sentence_1|...|sentence_n
,game
将依次执行每个sentence
并获得它们的输出,一条scrip
t将以其最后一条sentence
的输出作为整个script
的输出
sentence
可以视为增强版的command
,其语法基本与command
一致,不同之处在于:一条sentence
可以使用前面的~执行的输出作为自己的输入,例如:
get.agent.0|show.attribute.$0.HP
上面这条script
由两条sentence
构成,它们的输出分别为$0
和$1
,其中sentence_1
使用了sentence_0
的输出。game
实际执行的comand
有两条:
get.agent.0 # Brave-0
show.attribute.Brave-0.HP # 100
此外,一条sentence
中允许使用最多一个multi_word
,multi_word
的格式为word_0&word_1&...&word_m
,例如:Pig-0&Pig-1&Pig-2
,使用了multi_word
的sentence
会在执行中被展开,例如:
show.attribute.Brave-0&Pig-0.HP
将被展开成如下两条指令,并依次执行:
show.attribute.Brave-0.HP # 100
show.attribute.Pig-0.HP # 5
并且,这条sentence
的输出会用&
连接:
show.attribute.Brave-0&Pig-0.HP # 100&5
注意:
如果一个
sentence
为set.attribute.Brave-0.HP.50&30
,也会被展开并依次执行,实际执行效果与set.attribute.Brave-0.HP.30
等同
下面提供几个个复杂的script
例子。
>>> import gym, eden
>>> e = gym.make('eden-v0')
[INFO] Loading general ...
[INFO] Loading landform ...
[INFO] Loading agent ...
[INFO] Loading being ...
[INFO] Loading item ...
[INFO] Loading resource ...
[INFO] Loading buff ...
[INFO] Loading weather ...
[INFO] Loading preset ...
>>> e.reset()
[INFO] Current weather: Hot
array([[ 0., 1., 0., 0., 1., 27., 11., 100., 99., 99., 45.,
10., 5., 1., 1., 8., 1., 2., 20., -1., -1., -1.,
-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
-1., -1., -1., -1., 4., -1., -1., -1., -1., 0., 4.,
6., 2., 24., 4., 3., 25., 3., 3., 28., 3., 1.,
32., 3., 0., 2., 26., 0., 7., 27., 0., 5., 28.,
0.]])
>>> result = e.run_script('get.agent.0|get.attribute.$0.HP')
>>> result
'100'
>>> result = e.run_script('get.agent.0|get.neighbors.$0.Pig.40|get.attribute.$1.Vision')
>>> result
'4&4&4&4&4'
>>> result = e.run_script('get.agent.0|get.neighbors.$0.Pig.40|show.info.$1')
[OUTPUT] AreaID:0 Type:Being Name:Pig NameInt:0 ID:0 Dead:0 Drop: Leather(4) Meat(3) Tendon(1) Position:(34,20) BirthPoint:(34,20) ATK:0 AttackDistance:1 DEF:10 HP:20 MoveInterval:1 NightVision:3 RebirthCount:1500 Speed:1 Temper:0 Vision:4 Buff: Product:None(-1/-1) ProductPeriod:-1
[OUTPUT] AreaID:0 Type:Being Name:Pig NameInt:0 ID:5 Dead:0 Drop: Leather(4) Meat(3) Tendon(1) Position:(29,22) BirthPoint:(29,22) ATK:0 AttackDistance:1 DEF:10 HP:20 MoveInterval:1 NightVision:3 RebirthCount:1500 Speed:1 Temper:0 Vision:4 Buff: Product:None(-1/-1) ProductPeriod:-1
[OUTPUT] AreaID:0 Type:Being Name:Pig NameInt:0 ID:7 Dead:0 Drop: Leather(4) Meat(3) Tendon(1) Position:(25,20) BirthPoint:(25,20) ATK:0 AttackDistance:1 DEF:10 HP:20 MoveInterval:1 NightVision:3 RebirthCount:1500 Speed:1 Temper:0 Vision:4 Buff: Product:None(-1/-1) ProductPeriod:-1
[OUTPUT] AreaID:0 Type:Being Name:Pig NameInt:0 ID:8 Dead:0 Drop: Leather(4) Meat(3) Tendon(1) Position:(25,17) BirthPoint:(25,17) ATK:0 AttackDistance:1 DEF:10 HP:20 MoveInterval:1 NightVision:3 RebirthCount:1500 Speed:1 Temper:0 Vision:4 Buff: Product:None(-1/-1) ProductPeriod:-1
[OUTPUT] AreaID:0 Type:Being Name:Pig NameInt:0 ID:9 Dead:0 Drop: Leather(4) Meat(3) Tendon(1) Position:(22,10) BirthPoint:(22,10) ATK:0 AttackDistance:1 DEF:10 HP:20 MoveInterval:1 NightVision:3 RebirthCount:1500 Speed:1 Temper:0 Vision:4 Buff: Product:None(-1/-1) ProductPeriod:-1
>>> result
'Succeeded&Succeeded&Succeeded&Succeeded&Succeeded'
>>> e.run_script('get.agent.0|get.position.$0|get.landform.$1')
'Grassland'
>>> e.run_script('get.agent.0|get.position.$0|set.landform.Forest.$1|show.landform.$1')
[OUTPUT] Forest
'Succeeded'