目录
事件默认参数
- 事件执行时,有一些默认储存的参数,常用的默认参数有:
参数Key | 参数Key |
---|---|
RoleTaiwu | 事件盒子中太吾的固定key |
TaiwuCharacterId | 太吾角色id,始终获取当前太吾的角色Id |
TaiwuAreaId | 太吾所在区域id,始终获取太吾当前所在区域的Id |
TaiwuBlockId | 太吾所在地块索引,始终获取太吾当前所在地块的BlockId |
TaiwuVillageAreaId | 太吾村所在区域id |
TaiwuVillageBlockId | 太吾村所在地块索引 |
ForbidViewCharacter | 是否禁止查看目标人物标记位 |
HideFavorability | 是否隐藏目标人物好感度显示 |
MainRoleUseAlternativeName | 做选择的角色名字显示是否使用代称 |
TargetRoleUseAlternativeName | 目标交谈角色名字显示是否使用代称 |
- 调用方法皆为EventArgBox.Key;
- 这些Key有部分是只读的,可读取其参数值以供事件使用:
如RoleTaiwu,TaiwuCharacterId,TaiwuAreaId,TaiwuBlockId,TaiwuVillageAreaId,TaiwuVillageBlockId,示例如下:
//常用的,调用太吾的角色数据
var taiwu=ArgBox.GetCharacter(EventArgBox.RoleTaiwu);
//获取太吾村位置,因为Location可以通过地区和地块ID进行定义,可以通过默认储存的地区ID和地块ID获取位置
Location villageLocation=new Location
(EventArgBox.TaiwuVillageAreaId,EventArgBox.TaiwuVillageBlockId);
即通过调用,便可使用其对应的参数值。
- 有部分是可以设置的,通过设定其值(通常是true/false),达到具体效果,
如ForbidViewCharacter,HideFavorability,示例如下:
ArgBox.Set(EventArgBox.ForbidViewCharacter, true);//禁止查看目标人物ArgBox.Set(EventArgBox.HideFavorability, true);//不显示目标人物好感
通过设置其值为true/false,则可控制当事件窗口右侧人物显示时,是否可以点击人物查看属性,是否显示人物对太吾的好感等。
这些值如不设定,会有默认状态(通常为false),通常情况下无须改变。当有特殊制作需要时,方将其改变为true。
特殊传入参数
- 除了事件默认参数外,当事件接入其他系统时,也会特殊地传入一些相关参数以供使用。
触发点类型 | 参数类型 | 参数盒子调用key | 参数描述 |
---|---|---|---|
太吾进行了一次地格移动 | Location | BlockFrom BlockTo | 原本所在地块 当前到达地块 |
用户点击角色头像进行交互 | int | CharacterId | 被点击的角色的id |
战斗开始 | int | CharacterId | 敌方的角色id |
产业系统中点击门派特色建筑 | short | TemplateId | 建筑的TemplateId |
用户点击动物头像进行交互 | short | TemplateId | 动物的TemplateId |
用户点击紫竹化身进行交互 | int | CharacterId | 被点击的角色的id |
- 使用范例·一(以与一个角色交互为例):
》》首先将事件类型设为“用户点击角色头像进行交互” ;
》》设置之后,参数盒子中便自然会存入默认参数“CharacterId”;
》》结合事件参数盒子中默认储存的太吾参数(RoleTaiwu),根据需要将其填入“决策角色”与“目标角色”中;
》》填写需要的事件内容及选项(此处略);
》》最终展示出的事件界面便是左边显示太吾立绘,右边显示被点击的角色立绘的效果:
》》如果需要对相应的角色进行处理,则可通过方法获取其角色,并对他执行相应的处理。
- 使用范例·二(以进行一次地格移动为例,目标:移动到太吾村时触发事件)
》》首先将想要触发的事件类型设为“太吾进行了一次地格移动”;
》》设置之后,太吾每进行一次移动,事件系统都会检定一次该事件是否应该发生,并且默认拥有原本所在地块(BlockFrom)、移动后地块(BlockTo)的数据;
》》在事件代码OnCheckEventCondition()对移动后地块的数据(通过调用EventArgKeys.BlockTo)进行检测,当移动后的位置与太吾村位置相等时,则返回true(触发事件)
public override bool OnCheckEventCondition()
{
if(ArgBox.Get(EventArgKeys.BlockTo,out Location location))//获取移动后的地格位置
{
Location villageLocation=new Location(EventArgBox.TaiwuVillageAreaId,EventArgBox.TaiwuVillageBlockId);//获取太吾村的位置
if(location==villageLocation)//如果移动后的位置为太吾村位置
return true;//事件触发
}
return false;//默认不触发
}
》》填写需要的事件内容及选项(此处略);
》》最终效果为到达太吾村时触发事件;
- 其他参数调用,亦可参考如上类似方法。
战斗后传入参数
- 在事件中发生战斗后,战斗系统会传入一些必要的参数以供后续事件调用;
Key | 类型 | 说明 |
---|---|---|
EventArgBox.CharIdSeizedInCombat | int | 战斗中用绳索绑到的人物Id,可能为null |
EventArgBox.CarrierItemKeyGotInCombat | ItemKey | 战斗中用绳索绑到的动物转化为坐骑后的ItemKey |
“CombatResult” | int | 战斗结果 |
“CombatType” | sbyte | 战斗类型 |
“MainEnemyId” | int | 战斗中主战者角色Id |
- 通过正常的参数调用方法,可以获取其值,并决定后续处理;
- 使用范例(以常用的战斗结果为例,根据不同的战斗结果跳转到不同事件):
if(ArgBox.Get("CombatResult",ref combatResult))
{
if(combatResult == CombatResultType.EnemyDie)
{//TODO 己方胜利处决
EventHelper.ToEvent(A事件Guid);
}
else if(combatResult == CombatResultType.PlayerWin)
{//TODO 己方胜利未处决
EventHelper.ToEvent(B事件Guid);
}
else if(combatResult == CombatResultType.EnemyWin)
{//TODO 敌方胜利未处决
EventHelper.ToEvent(C事件Guid);
}
else if(combatResult == CombatResultType.PlayerDie)
{//TODO 敌方胜利处决
EventHelper.ToEvent(D事件Guid);
}
else if(combatResult == CombatResultType.PlayerFlee)
{//TODO 我方逃跑
EventHelper.ToEvent(E事件Guid);
}
else if(combatResult == CombatResultType.EnemyFlee)
{//TODO 敌方逃跑
EventHelper.ToEvent(F事件Guid);
}
}
备注:ToEvent部分代码,在事件触发类型为“太吾进行一次地格移动”时,尽量不要填写在OnEventEnter()中,且跳转之后要即时return,若不这么做,将可能造成地图系统监听事件失败而卡顿。
- 如代码示例,当战斗结果为敌方胜利,且敌人并未在战斗中处决我方时,则对应CombatResultType.EnemyWin结果,事件将跳转到C事件。