快捷函数参考
快捷函数 (shortcut function) 以 :method(args) 形式书写,是 GTS DSL 中编写游戏逻辑的核心语法。: 前缀表示在事件上下文对象上调用方法。
以下列出最常用的快捷函数。完整的函数列表和参数类型请参考 Provider 的 ViewModel 定义代码(
core/gts/vm_impl/目录下各文件)。
上下文变量
在快捷函数内,你可以使用以下上下文变量:
:e— 当前事件对象:self— 当前实体自身:player— 当前实体所属玩家:oppPlayer— 对方玩家$— Query Fluent API 入口(详见 genius-invokation query 文档)
伤害与治疗
:damage(type, amount, target?)
造成伤害。type 为 DamageType 枚举值,amount 为数值,target 可选(默认为对方出战角色):
:damage(DamageType.Hydro, 3);
:damage(DamageType.Piercing, 1, $.macros.myLeastInjured);:heal(amount, target?)
治疗。target 可选(默认为所附属角色):
:heal(1, $.my.character);
:heal(2);
// 等价于 :heal(2, "@master")目标可以是查询表达式或特殊字符串:
"@master"— 所附属角色"@self"— 自身$.my.character/$.my.standby/$.macros.myMostInjured等
:e.increaseDamage(amount) / :e.decreaseDamage(amount)
在 increaseSkillDamage / decreaseDamaged 等事件中,修改即将造成的伤害值:
on increaseSkillDamage {
:e.increaseDamage(2);
}实体操作
:summon(handle)
召唤一个召唤物:
:summon(EyeOfStormyJudgment);参数为 define summon { id X as HandleName } 导出的 Handle。
:characterStatus(handle, target?)
给角色附属状态:
:characterStatus(ChakraDesiderataStatus);
:characterStatus(BattlePlan, $.my.active);:combatStatus(handle)
给出战方附属出战状态:
:combatStatus(UniversalRevelry);:dispose()
移除当前实体:
:dispose();:attach(handle, target)
给卡牌(手牌/牌库牌)附属 attachment:
:attach(Conductive, targetHand);骰子和费用
:e.deductOmniCost(amount)
在费用扣除事件中减少消耗的骰子数:
on deductOmniDiceSkill {
usage 2;
:e.deductOmniCost(2);
}:e.deductVoidCost(amount)
在无色费用扣除事件中减少消耗:
on deductVoidDiceSkill {
:e.deductVoidCost(1);
}:generateDice(type, amount)
生成元素骰:
:generateDice(DiceType.Omni, 2);
:generateDice("randomElement", 1);:gainEnergy(amount, target)
给角色充能:
:gainEnergy(2, "all my characters and not @self");手牌和牌库
:drawCards(count)
抓牌:
:drawCards(2);:createHandCard(handle)
生成手牌:
:createHandCard(SeatsSacredAndSecular);:createPileCards(handle, count, placement)
在牌库中置入卡牌:
:createPileCards(TaroumarusSavings, 4, "spaceAround");placement 可选值:"random"、"spaceAround"、"topRange5" 等。
技能和行动
:useSkill(handle)
使用技能:
:useSkill(SecretArtMusouShinsetsu);:switchActive(target)
切换出战角色:
:switchActive($.recentOppFrom.my.active);查询
:query(expression)
执行一次查询并返回查询结果:
const target = :query($.macros.myMaxHealth);
if (target) {
:damage(DamageType.Piercing, :getVariable("layer"), target);
}查询表达式的写法参考 Query Fluent API 文档。
:random(items)
从数组中随机选取一个元素:
const targetHand = :random(:oppPlayer.hands);变量
:getVariable(name) / :setVariable(name, value)
读写实体上的自定义变量:
const currentVal = :getVariable("chakra");
:setVariable("chakra", 0);:addVariable(name, delta) / :addVariableWithMax(name, delta, max)
给变量加/减一个值:
:addVariable("lake", 1);
:addVariableWithMax("chakra", 1, 3);:consumeUsage(amount?)
消耗使用次数:
:consumeUsage(1);生成实体
:createEntity(type, definition, location)
创建任意实体:
:createEntity("support", def, {
type: "supports",
who: :self.who
});杂项
:transformDefinition(entity, newDefinition)
改变实体的定义(形态转换):
:transformDefinition(furina, FurinaOusia);
:transformDefinition(summon, SingerOfManyWaters);:e.changeDamageType(type)
修改即将造成的伤害类型:
:e.changeDamageType(DamageType.Hydro);:e.setFastAction()
将当前行动标记为快速行动:
on beforeFastSwitch {
usagePerRound 1;
:e.setFastAction();
}:consumeNightsoul(target)
消耗夜魂点数:
:consumeNightsoul("@master");完整的快捷函数列表和各函数支持的所有参数变体,请参考 Provider 的 ViewModel 实现代码。推荐从
core/gts/vm_impl/entity.ts(实体操作)、core/gts/vm_impl/skill.ts(技能操作)、core/gts/vm_impl/card.ts(卡牌操作)开始查阅。