事件定义脚本

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_ngame将依次执行每个sentence并获得它们的输出,一条script将以其最后一条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_wordmulti_word的格式为word_0&word_1&...&word_m,例如:Pig-0&Pig-1&Pig-2,使用了multi_wordsentence会在执行中被展开,例如:

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

注意:

如果一个sentenceset.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'