模组:游戏状态查询

来自Stardew Valley Wiki
跳到导航 跳到搜索

目录

此页面为游戏状态查询(game state queries)的文档。游戏状态查询是某些游戏数据素材中指定条件的内建方式,其受到Content Patcher中条件的启发。

概览

查询格式

一个查询也就是一个逗号分隔的条件列表,每个条件有如下格式:<类型> [参数]。其中类型可以添加!前缀以代表反向匹配。若查询为空/空白,则必然返回true。当查询列表中所有条件均成功匹配,也返回true。例如,!SEASON Spring, WEATHER Here Sun为true当且仅当游戏状态为非春季的晴天。

游戏状态查询是部分大小写敏感的。尽管某些数值是大小写不敏感的(例如,SEASON SpringSEASON spring都可用),但并非所有数值都如此。推荐使用精确的大小写以规避问题。

参数格式

游戏状态查询可以接收空格分隔的参数列表。例如,BUILDINGS_CONSTRUCTED Here Cabins有两个参数:HereCabins

若某个参数包含空格,则需添加双引号以表示这是一整个参数。例如, BUILDINGS_CONSTRUCTED Here "Junimo Hut" 会将Junimo Hut作为一整个参数来传入。在需要嵌套双引号时,可以使用反斜杠来转义内层双引号,例如ANY "BUILDINGS_CONSTRUCTED Here \"Junimo Hut\""

请记住JSON字符串中的双引号和反斜杠也需要转义。例如,"Condition": "BUILDINGS_CONSTRUCTED Here \"Junimo Hut\""会向游戏代码发送BUILDINGS_CONSTRUCTED Here "Junimo Hut"。但是,也可以在JSON字符串中使使用单引号,例如"Condition": 'BUILDINGS_CONSTRUCTED Here "Junimo Hut"'

查询 vs Content Patcher条件

当制作Content Patcher包使,为达成同一个目的,可能存在When条件和游戏状态查询两种不同的方法(殊途同归)。

具体使用哪个,主要是性能的权衡:

  • Content Patcher的When做好了充分的优化和缓存,因此上千个补丁可以检查统一个条件而不会影响性能,相应的更改会一次性写入素材。因此,在编辑素材后不会产生性能影响。但是,在添加/移除补丁时,素材会被重新载入,因此在某些情况下频繁改变素材可能影响性能(例如重新加载地图或村民出现在室内/室外)。
  • 游戏状态查询并没有缓存,因此经常检查时有可能显著地影响性能。例如,每个更新时刻检查一千个游戏状态查询,就意味着每秒需要检查六万个游戏状态查询。而另一方面,游戏状态查询在查询频率较低的情况下常常更快,并且不会重新加载贴图或地图(例如Data/Characters中的AppearanceData/Locations中的Music)。

内建查询

元查询

条件 效果
ANY <query>+ 获取是否列出的游戏查询中至少有一个匹配成功,其中每个参数都是一个查询。例如,ANY "SEASON Winter" "SEASON Spring, DAY_OF_WEEK Friday"当且仅当冬季或春季周五时返回true。您可以列出任意数量的查询。

您可以在任何查询内部嵌套任何查询,但是如果嵌套层数太多,处理转义双引号将极为棘手。因此,推荐使用SOP规范形式

下面是一个例子:

 "ANY \"LOCATION_NAME Here BathHouse_Pool\" \"LOCATION_NAME Here BathHouse_MensLocker\" \"LOCATION_NAME Here BathHouse_WomensLocker\" \"LOCATION_NAME Here Beach, WEATHER Here Sun Wind, SEASON Summer\" \"IS_EVENT festival_summer5, {{HasMod|contains=spacechase0.SurfingFestival}}\""

拆解开来,这意味着检查是否满足下列条件之一:

  • 下列地点之一:BathHouse_Pool、BathHouse_MensLocker、BathHouse_WomensLocker。
  • 夏季晴天或风天的海滩
  • 夏5日事件(此例子中为节日)正在进行,且已安装spacechase0.SurfingFestival。注意,{{HasMod|contains=spacechase0.SurfingFestival}}会被自动解析为true或false,因为它是一个有效的标记符。

请注意:您可以在游戏状态查询中使用像上面那样的标记符!

日期 & 时间

条件 效果
DAY_OF_MONTH <day>+ 当月日期。可以为1至28之间 整数,或者odd/even来匹配奇偶天。可以指定多个值,代表匹配其中任一个。
DAY_OF_WEEK <day>+ 当周日期。可以为 0(星期日)至 6(星期六)之间的整数,三字母英文名(例如Fri)或完整英文名(例如Friday)。可以指定多个值,代表匹配其中任一个(例如DAY_OF_WEEK Monday Tuesday匹配星期一星期二)。
DAYS_PLAYED <min> [max] 该存档是否至少玩了<min>,至多玩了[max](默认为无穷大)天。此查询会与原版游戏内的游戏同步。但如果模组改变了游戏内的日期,则此查询值可能不会同步更新。
IS_FESTIVAL_DAY [location context] [day offset] 是否当天有节日,[day offset]为日期偏移(例如1代表明天是否有节日)。

其中[location context](默认Any)必须为下列取值之一:

效果
Any 检查任意地点的节日。
Here 检查玩家所在地点的节日。
Target 检查包含目标地点的地点是否有节日
其他 检查指定地点ID处是否有节日。
IS_PASSIVE_FESTIVAL_OPEN <id> 当天是否有给定ID的被动节日,且在当前时段正在进行。
IS_PASSIVE_FESTIVAL_TODAY <id> 当天是否安排有给定ID的被动节日
SEASON <season>+ 季节(为springsummerfallwinter之一)。可以指定多个值,代表匹配其中任一个(例如SEASON spring summer匹配春季夏季)。
SEASON_DAY [<season> <day>]+ 季节(与SEASON格式相同)和日期(1至28的整数)。可以指定多个值,代表匹配其中任一个(例如SEASON_DAY fall 15 winter 20匹配秋15日冬20日)。
TIME <min> [max] 是否当前时间在<min>[max]之间(默认为无穷大),包含端点值。时间为26小时制
YEAR <min> [max] 是否年份在<min>[max](默认为无穷大)之间,包含端点值。

事件

条件 效果
IS_EVENT 玩家是否正在观看事件或参加主动节日。不包括诸如夜市的被动节日。
IS_EVENT <event ID>+ 玩家是否正在观看事件或参加主动节日。要求事件或节日匹配指定的<event ID>之一。节日ID的格式为festival_<season><day>(例如复活节festival_spring13)。

世界

条件 效果
BUILDINGS_CONSTRUCTED <locations> [building type] [min] [max] [count unbuilt] 是否指定的建筑数量在一定区间内。

例如:

  • BUILDINGS_CONSTRUCTED Here检查当前位置是否有建造的建筑
  • BUILDINGS_CONSTRUCTED Target Cabin检查目标地点是否有至少一栋联机小屋。
  • BUILDINGS_CONSTRUCTED All "Junimo Hut" 3 5检查世界上某处是否有3到5间(含5间)祝尼魔屋。

参数:

  • <locations>:一个目标地点,或设为All来统计所有地点的建筑。
  • [building type]Data/Buildings中的建筑ID,或设为All来统计所有类型的建筑。注意All包含默认建筑,例如农舍。
  • [min]/[max]:最小值(默认为1)、最大值(默认为无穷)。
  • [count unbuilt]:是否统计建造中的建筑。
CAN_BUILD_CABIN 玩家是否可以再建造联机小屋(即,联机小屋是否尚未超过玩家数)。
CAN_BUILD_FOR_CABINS <building ID> 指定类型的建筑数量是否小于联机小屋数。
FARM_CAVE <type>+ 当前的农场山洞(为BatsMushroomsNone其中之一。)
FARM_NAME <name> 农场名称。
FARM_TYPE <type>+ 农场类型。其中<type>取下列值之一:
  • 原版农场类型的数字ID:1(标准)、2(河边)、3(森林)、4(山顶)、5(荒野)、6 (四角)或 7(海滩);
  • 原版农场类型的可读键名:Standard, Beach, Forest, FourCorners, Hilltop, Riverland, or Wilderness
  • 自定义农场类型ID。
FOUND_ALL_LOST_BOOKS 是否博物馆的所有遗失之书已被找到。
HAS_TARGET_LOCATION 当前上下文中是否显式指定了'Target'位置(即,忽略目标位置使用默认值的情况)。
IS_COMMUNITY_CENTER_COMPLETE 是否已修复社区中心
IS_CUSTOM_FARM_TYPE 是否农场类型为模组自定义类型。(对于取代原版农场类型的模组,返回false)。
IS_HOST 当前玩家是否为房主。
IS_ISLAND_NORTH_BRIDGE_FIXED 通往姜岛挖掘场的桥梁是否已修复。
IS_JOJA_MART_COMPLETE 是否建造了Joja仓库
IS_MULTIPLAYER 是否为多人游戏(无论是否有多人玩家连入)。
IS_VISITING_ISLAND <name> 是否指定名字的村民当天前往姜岛
LOCATION_ACCESSIBLE <name> 是否可用给定地点。对于原版地点,这仅对CommunityCenterJojaMartRailroadDesert有效;任何其他位置总会返回true,除非模组自定义了此查询。
LOCATION_CONTEXT <location> <context ID>+ 给定地点的上下文ID。
LOCATION_HAS_CUSTOM_FIELD <location> <key> [value] 检查是否给定地点的CustomFields包含指定值。若缺省[value],则检查是否存在<key>
LOCATION_IS_INDOORS <location>
LOCATION_IS_OUTDOORS <location>
LOCATION_IS_MINES <location>
LOCATION_IS_SKULL_CAVE <location>
给定地点是否在室内,在矿井中或在骷髅洞穴
LOCATION_NAME <location> <name>+
LOCATION_UNIQUE_NAME <location> <name>+
给定地点是否具有指定名称或唯一实例名称的其中之一(这两种名称都可以使用Debug Mode模组查看)。
LOCATION_SEASON <location> [<season>]+ 给定地点是否在指定季节之一中(季节为springsummerfallwinter)。主要用于处理地点上下文中SeasonOverride字段。

例如,如下查询匹配春季夏季:LOCATION_SEASON Here spring summer.

MUSEUM_DONATIONS <min count> [max count] [object type]+ 是否所有玩家一共向博物馆捐献了最小<min count>件、最多[max count](默认为无穷)件物品,包含端点值。可以使用物品类型[object type]过滤器,例如MUSEUM_DONATIONS 40 Arch Minerals要求古物或矿物共计40件。缺省[max count]的情况下,仍可使用过滤器。
WEATHER <location> <weather>+ 给定地点的天气ID。其中<weather>FestivalRainSnowStormSunWind自定义天气ID
WORLD_STATE_FIELD <name> <value> 是否Game1.netWorldState中的指定属性具有指定值。若属性为数值类型,则<value>代表最小值。以下是某些没有被对应类别查询覆盖到的值:
名称 效果
GoldenCoconutCracked 玩家是否打开过金色椰子truefalse)。
GoldenWalnutsFound
GoldenWalnuts
玩家找到或持有的金色核桃总数。若需检查某玩家当前持有的金色核桃数量,请使用PLAYER_HAS_ITEM查询。
IsGoblinRemoved 是否仆从已移除,以使玩家进入女巫小屋。(truefalse)。
IsSubmarineLocked 是否某玩家正在使用夜市潜水艇。(truefalse)。
LostBooksFound 玩家找到或持有的遗失之书总数。
MinesDifficulty
SkullCavesDifficulty
当前矿井骷髅洞穴挑战之神庙难度等级(为一个数值,其中 0为神庙未激活时的默认难度。)
MiniShippingBinsObtained 玩家获得迷你出货箱的次数。
ParrotPlatformsUnlocked 玩家是否解锁了姜岛的鹦鹉任务,无需玩家完成所有的鹦鹉任务。(truefalse)。
ServerPrivacy 合作模式的链接隐私选项(InviteOnlyFriendsOnly)。
ShuffleMineChests “矿井掉落”游戏选项的的值(DefaultRemixed)。
WeatherForTomorrow 星露谷地区明日天气ID。
VisitsUntilY1Guarantee 旅行货车中出现红叶卷心菜至多所需次数。

例如,旅行货车使用WORLD_STATE_FIELD VisitsUntilY1Guarantee 0条件来检查其是否应当保底给出红叶卷心菜物品。

WORLD_STATE_FIELD <name> <min> [max] 仅用于数值属性。判断Game1.netWorldState某一属性是否在<min>[max](默认为无穷)之间。若缺省[max]或该属性不是数值型,则使用之前给出的语法。参见前一条WORLD_STATE_FIELD说明以获得某些实用属性的列表。
WORLD_STATE_ID <id>+ 是否具有给定<id>值的世界状态标识已被设置。

玩家信息 & 进度

条件 效果
MINE_LOWEST_LEVEL_REACHED <min> [max] 玩家是否到达了矿井<min>层到[max]层(默认为无穷),包含端点值。
PLAYER_COMBAT_LEVEL <player> <min> [max]
PLAYER_FARMING_LEVEL <player> <min> [max]
PLAYER_FISHING_LEVEL <player> <min> [max]
PLAYER_FORAGING_LEVEL <player> <min> [max]
PLAYER_LUCK_LEVEL <player> <min> [max]
PLAYER_MINING_LEVEL <player> <min> [max]
指定玩家是否有介于<min>[max](默认为无穷)之间的技能等级,包含端点值。技能加成的等级也计入。
PLAYER_CURRENT_MONEY <player> <min> [max] 指定玩家是否有<min>[max](默认为无穷)金。
PLAYER_FARMHOUSE_UPGRADE <player> <min> [max] 指定玩家是否升级了其农舍联机小屋<min>级到[max]级(默认为无穷)之间。包含端点值。参见可用的等级.
PLAYER_GENDER <player> <gender> 指定玩家性别是否为MaleFemale
PLAYER_HAS_ACHIEVEMENT <player> <achievement id> 指定玩家是否已解锁指定的成就ID。可用的ID位于Data/Achievements,以及一些没有列出的Steam专属成就ID。
PLAYER_HAS_ALL_ACHIEVEMENTS <player> 指定玩家是否已解锁了Data/Achievements中的全部成就。不计入Steam专属成就。
PLAYER_HAS_BUFF <player> <id> 指定玩家当前是否具有指定效果ID。
PLAYER_HAS_CAUGHT_FISH <player> <id> 指定玩家是否已抓住一条指定ID的鱼。
PLAYER_HAS_CONVERSATION_TOPIC <player> <id> 指定玩家是否有指定ID的对话主题正在活跃状态。
PLAYER_HAS_COOKING_RECIPE <player> <recipe name>
PLAYER_HAS_CRAFTING_RECIPE <player> <recipe name>
指定玩家是否学会指定的烹饪/打造配方。配方为内部名称(允许空格)。例如,PLAYER_HAS_CRAFTING_RECIPE Current Field Snack
PLAYER_HAS_DIALOGUE_ANSWER <player> <id> 指定玩家是否在先前的对话中选择了指定的对话回答。
PLAYER_HAS_HEARD_SONG <player> <id> 指定玩家是否听过某个音乐的声音提示名称(也就是点唱机列出的音乐名称)。
PLAYER_HAS_ITEM <player> <item> [min] [max] 指定玩家背包中是否有[min][max](默认为无穷)之间那么多件的指定物品,包含端点值。其中物品ID <item> 可以为858(O)858(齐钻),73(O)73(核桃),或限定性或非限定性物品ID
PLAYER_HAS_MAIL <player> <mail id> [type] 指定玩家是否有设置了指定的信件标识

其中类型[type](默认为Any)为下列取值之一:

类型 效果
Any 邮箱中的信件,即将在明天收到的信件,或已读的信件。
Mailbox 邮箱中的信件。
Tomorrow 即将在明天收到的信件
Received 满足下列任一条的信件:
  • 在邮箱中或已读。
  • 或在Data/mail中没有对应信件,因此会被直接添加到已读列表。
PLAYER_HAS_PROFESSION <player> <profession id> 指定玩家是否具有指定的职业ID。参见技能和经验调试指令以获取ID列表。
PLAYER_HAS_RUN_TRIGGER_ACTION <player> <id> 指定玩家是否应用了具有指定ID <id>触发动作
PLAYER_HAS_SECRET_NOTE <player> <id> 指定玩家是否已经阅读了指定秘密纸条,其中<id>为纸条的整数ID。
PLAYER_HAS_SEEN_EVENT <player> <id> 指定玩家是否已经观看了给定<id>的事件。
PLAYER_HAS_TOWN_KEY <player> 指定玩家是否已获得小镇钥匙
PLAYER_HAS_TRASH_CAN_LEVEL <player> <min> [max] 指定玩家垃圾桶等级是否介于<min>[max](默认为无穷)之间。包含端点值。<level>可以为0(基础)、 1(铜)、2(钢)、3(金)或 4(铱)。
PLAYER_LOCATION_CONTEXT <player> <location context> 指定玩家是否处于指定的地点上下文
PLAYER_LOCATION_NAME <player> <location name>+
PLAYER_LOCATION_UNIQUE_NAME <player> <location name>+
指定玩家是否在指定位置,使用游戏名称或唯一实例名称(两种名称都可以使用Debug Mode模组获得)。其中<location name>无法识别目标位置关键词例如Here
PLAYER_MOD_DATA <player> <key> <value> 指定玩家是否有模组添加的、具有指定<key><value>player.modData条目。
PLAYER_MONEY_EARNED <player> <min> [max] 指定玩家是否赚了介于<min>[max](默认为无穷)金。包含端点值。
PLAYER_KILLED_MONSTERS <player> <monster name>+ [min count] [max count] 指定玩家是否杀了介于 [min count](默认为1)到 [max count] (默认为无穷)只给定怪物。包含端点值。若指定多只怪物,则检查击杀总数。

例如

// killed 50+ slimes, skeletons, and bugs combined
PLAYER_KILLED_MONSTERS Current "Green Slime" Skeleton Bug 50
PLAYER_SHIPPED_BASIC_ITEM <player> <item ID> [min count] [max count] 指定玩家是否售出了 [min count](默认为1)至 {{o|max count}(默认为无穷)件指定商品。仅对被游戏出货统计数据跟踪的物品有效(也就是收集品菜单中列出的物品)。
PLAYER_SPECIAL_ORDER_ACTIVE <player> <order id> 指定玩家是否正在进行指定的特殊任务
PLAYER_SPECIAL_ORDER_COMPLETE <player> <order id> 指定玩家是否已完成指定的特殊任务
PLAYER_SPECIAL_ORDER_RULE_ACTIVE <player> <rule id> 指定玩家是否有处于活跃状态的特殊任务规则
PLAYER_STAT <player> <stat name> <min value> [max value] 指定玩家的指定统计项是否有介于<min value>[max value](默认为无穷)之间的值。包含端点值。

⚠ 注意:在多人游戏中,统计项并不是同步的。因此农场助手并不能获取房主或其他农场助手的统计项。

可用的统计项名称为:

  • averageBedtime;
  • beachFarmSpawns;
  • beveragesMade;
  • boatRidesToIsland;
  • bouldersCracked;
  • caveCarrotsFound;
  • cheeseMade;
  • chickenEggsLayed;
  • childrenTurnedToDoves;
  • coalFound;
  • coinsFound;
  • copperFound;
  • cowMilkProduced;
  • cropsShipped;
  • daysPlayed;
  • diamondsFound;
  • dirtHoed;
  • duckEggsLayed;
  • exMemoriesWiped;
  • fishCaught;
  • geodesCracked;
  • giftsGiven;
  • goatCheeseMade;
  • goatMilkProduced;
  • goldFound;
  • goodFriends;
  • hardModeMonstersKilled;
  • individualMoneyEarned;
  • iridiumFound;
  • ironFound;
  • itemsCooked;
  • itemsCrafted;
  • itemsForaged;
  • itemsShipped;
  • monstersKilled;
  • mysticStonesCrushed;
  • notesFound;
  • otherPreciousGemsFound;
  • piecesOfTrashRecycled;
  • preservesMade;
  • prismaticShardsFound;
  • questsCompleted;
  • rabbitWoolProduced;
  • rocksCrushed;
  • seedsSown;
  • sheepWoolProduced;
  • slimesKilled;
  • starLevelCropsShipped;
  • stepsTaken;
  • sticksChopped;
  • stoneGathered;
  • stumpsChopped;
  • timesEnchanted;
  • timesFished;
  • timesUnconscious;
  • totalMoneyGifted;
  • trashCansChecked;
  • trufflesFound;
  • walnutsFound;
  • weedsEliminated.
PLAYER_VISITED_LOCATION <player> <location name>+ 指定玩家是否已造访指定地点的其中之一。例如, PLAYER_VISITED_LOCATION Current IslandWest检查玩家是否造访过岛屿西部

注意:

  • 某些地点同时具有通用名称(例如Barn)和唯一名称(Barn{unique ID})。此命令使用通用名称。
  • 生成的矿井和火山地牢层数不会被追踪。

玩家关系

条件 效果
PLAYER_FRIENDSHIP_POINTS <player> <npc> <min points> [max points] 指定玩家是否具有介于<min points>[max points](默认为无穷)之间的友谊值。包含端点值。其中<npc>为村民的内部名称,亦可为Any(检查所有村民)或 AnyDateable(检查所有可约会村民)。

例如,下述查询会检查当前玩家与阿比盖尔是否有大于等于750点友谊(即3+心):

PLAYER_FRIENDSHIP_POINTS Current Abigail 750
PLAYER_HAS_CHILDREN <player> [min] [max] 指定玩家是否有介于[min](默认为1)和 [max](默认为无穷)之间个孩子。包含端点值。
PLAYER_HAS_PET <player> 指定玩家是否有宠物
PLAYER_HEARTS <player> <npc> <min hearts> [max hearts] 指定玩家是否有一个友谊值介于 <min hearts>[max hearts](默认为无穷)之间的朋友。其中<npc>为村民的内部名称,亦可为Any (检查所有村民)或 AnyDateable(检查所有可约会村民)。

例如,下述例子检查当前玩家是否与阿比盖尔有3+心的友谊值:

PLAYER_HEARTS Current Abigail 3
PLAYER_HAS_MET <player> <npc>+ 指定玩家是否与指定村民之一交谈至少以此。其中<npc>为村民内部名称。
PLAYER_NPC_RELATIONSHIP <player> <npc> <type>+ 指定玩家是否与指定村民有指定关系之一。其中<npc>为NPC的内部名称或 Any(检查所有村民)。

关系类型<type>为下述取值之一:

类型 效果
Friendly 仅见过,而无其他状态。
Roommate 村民与玩家为室友。
Dating 玩家赠与村民花束,但没有给美人鱼吊坠
Engaged 玩家赠与村民美人鱼吊坠,但尚未举办婚礼。
Married 村民为玩家的配偶。
Divorced 玩家与村民离婚。
PLAYER_PLAYER_RELATIONSHIP <player> <other player> <type>+ 指定玩家是否与指定玩家有指定关系之一。其中<other player>可以为目标玩家Any(检查所有玩家)。

关系类型<type>可以为下列取值之一:

类型 效果
Friendly 无其他状态。
Engaged 玩家之一向另一个玩家赠与了结婚戒指,但尚未举办婚礼。
Married 已婚。
PLAYER_PREFERRED_PET <player> <pet type>+ 指定玩家的宠物喜好是否为指定类型之一。原版宠物类型为CatDog

随机化

条件 效果
RANDOM <chance> [@addDailyLuck] 随机概率检查。每次调用,结果都会更新。例如RANDOM 0.4每次有40%的概率返回true。

若指定了@addDailyLuck参数,则玩家的每日运气会加到概率上。

SYNCED_CHOICE <interval> <key> <min> <max> <choices>+ 选取介于<min><max>之间的随机整数,包括端点值,并检查其是否匹配<choices>其中之一。在相同的时间区间 <interval>(取tickdayseasonyear 之一),相同<key>产生的随机数的结果保持不变,即使在不同玩家间也如此。

例如,SYNCED_CHOICE day example_key 1 5 1 2在1至5之间取值,并检查是否为1或2.

主要用于需要在离散分类中随机取值的情形。常规概率检查请使用SYNCED_RANDOM

SYNCED_RANDOM <interval> <key> <chance> [@addDailyLuck] 随机概率检查。在相同的时间区间 <interval>(取tickdayseasonyear 之一),相同<key>产生的随机数的结果保持不变,即使在不同玩家间也如此。

例如,SYNCED_RANDOM day cart_rare_seed 0.4在当天第一次调用时有40%概率返回true,当天再次使用cart_rare_seed调用时返回值不变。

若指定@addDailyLuck参数,则将玩家的每日运气加到概率上。

SYNCED_SUMMER_RAIN_RANDOM <base chance> <day multiplier> SYNCED_DAY_RANDOM的专用变体,用于计算夏季下雨的概率,后者随夏季天数增加。

仅用于物品

如下查询仅用于需要查询物品的情形(例如打造配方、商店等都常常需要检查物品);若用在其他情形,则返回false。此类查询需要<target>参数,为输入物品 Input(放入机器的物品)或 目标物品Target(机器输出的物品、果树水果、商店物品等)。仅对原版上下文适用。模组可以自由选择希望向InputTarget传入的物品。

条件 效果
ITEM_CATEGORY <target> 物品是否具有非0的类别
ITEM_CATEGORY <target> [category]+ 物品是否具有匹配给定值的类别
ITEM_CONTEXT_TAG <target> <tags> 物品是否具有全部标签,标签用空格分隔。例如ITEM_CONTEXT_TAG Target bone_item marine_item仅匹配同时具有给出的两个标签的物品。
ITEM_EDIBILITY <target> [min] [max] 物品的可食性是否介于 [min](默认为-299)至 [max](默认为无穷)之间。包含端点值。可食性-300的物品不可使用,因此不指定[min][max]参数的ITEM_EDIBILITY <target>查询会检查物品是否可食。
ITEM_ID <target> <item ID>+ 物品是否具有指定限定性或非限定性物品ID
ITEM_ID_PREFIX <target> <prefix> 物品的限定性或非限定性物品ID是否具有指定前缀。
ITEM_NUMERIC_ID <target> [min] [max] 物品是否具有介于[min][max]之间的数字物品ID(二者分别默认为可能的最低/最高值)。
ITEM_OBJECT_TYPE <target> <type>+ 物品是否具有指定的物体类型
ITEM_PRICE <target> <min> [max] 物品是否具有介于<min>[max](默认为最大可能值)之间的、从商店购入的价格。此查询会检查基础售价(包括利润率,但不包括自定义商店数据,例如自定义价格、自定义价格修饰器、反季价格等)。
ITEM_QUALITY <target> <min> [max] 物品品质是否介于 <min>[max](默认为无穷)之间。包含端点值。可能的取值为:0(普通)1(银星)2(金星)或 4(铱星)。
ITEM_STACK <target> <min> [max] 物品堆叠数量是否介于 <min>[max](默认为无穷)之间。包含端点值。注意仅适用于<target>给出的物品。不包括背包内的其他物品。
ITEM_TYPE <target> <type>+ 物品的类型定义ID是否匹配指定值之一。例如ITEM_TYPE Target (BC)匹配大型打造品。
ITEM_HAS_EXPLICIT_OBJECT_CATEGORY <target> (专用) 物品是否在Data/Objects指定了显式类别,而忽略代码中动态分配的类别(例如,戒指)。无显式类别的物品往往是(但不都是)像秘密纸条或未实装物品的特殊物品。

不可变

条件 效果
TRUE 总匹配成功。
FALSE 总匹配失败。

通用值

目标地点

某些条件需要<location>参数。可以为如下之一:

结果
Here 当前玩家所在地点(不受目标玩家影响)。
Target 包含待编辑实体的地点(例如Data/Machines的机器或Data/FruitTrees的果树)。

若待编辑素材并不属于某个地点,则采用目标玩家所在地(若设置了此参数),否则默认为Here

其他 待检查地点的地点ID (即内部名称)。

目标玩家

某些条件需要<player>参数。可以为下列之一:

结果
Any 至少一个玩家必须匹配此条件,无论其是否在线。
All 每个玩家必须匹配此条件,无论其是否在线。
Current 当前玩家。
Host 房主。
Target 依赖于上下文:
上下文 效果
Data/LocationContexts 仅用于PassOutLocations字段, 待获取其晕倒位置的玩家。
Data/Weddings 仅用于Attendees字段,婚礼的出席玩家(若出席者是玩家)。
Data/WildTrees 仅用于AdditionalChopDrops字段,最后砍此树的玩家。
自定义查询 C#模组在调用GameStateQuery.CheckConditions时,可以指定target_farmer参数。
其他 相当于Current.
其他 待检查玩家在多人游戏中的唯一ID。

关于C#模组作者

在其他地方使用查询

C#代码可以使用GameStateQuery类进行查询,此类提供了一些工具方法,比如 GameStateQuery.CheckConditions(query)GameStateQuery.IsImmutablyTrue(query)

亦可使用事件前提中的游戏状态查询,这种查询使用最新的前提标识,例如some_event_id/gameStateQuery !SEASON Spring, WEATHER Here Sun

扩展性

C#模组能够:

  • 使用GameStateQuery.Exists("Example.ModId_ConditionName")检查某一查询是否存在;
  • 使用GameStateQuery.Register("Example.ModId_ConditionName", handleQueryMethod)自定义查询(查询名称为唯一字符串ID)。
  • 使用GameStateQuery.RegisterAlias("Example.ModId_AliasName", "Example.ModId_ConditionName")以添加查询别名(推荐使用唯一字符串ID作为别名)。