ArgBox-常用默认参数

    事件默认参数

    1. 事件执行时,有一些默认储存的参数,常用的默认参数有:
    参数Key参数Key
    RoleTaiwu事件盒子中太吾的固定key
    TaiwuCharacterId太吾角色id,始终获取当前太吾的角色Id
    TaiwuAreaId太吾所在区域id,始终获取太吾当前所在区域的Id
    TaiwuBlockId太吾所在地块索引,始终获取太吾当前所在地块的BlockId
    TaiwuVillageAreaId太吾村所在区域id
    TaiwuVillageBlockId太吾村所在地块索引
    ForbidViewCharacter是否禁止查看目标人物标记位
    HideFavorability是否隐藏目标人物好感度显示
    MainRoleUseAlternativeName做选择的角色名字显示是否使用代称
    TargetRoleUseAlternativeName目标交谈角色名字显示是否使用代称
    常用的默认参数
    1. 调用方法皆为EventArgBox.Key
    2. 这些Key有部分是只读的,可读取其参数值以供事件使用:
      RoleTaiwuTaiwuCharacterIdTaiwuAreaIdTaiwuBlockIdTaiwuVillageAreaIdTaiwuVillageBlockId,示例如下:
    //常用的,调用太吾的角色数据
        var taiwu=ArgBox.GetCharacter(EventArgBox.RoleTaiwu);
        //获取太吾村位置,因为Location可以通过地区和地块ID进行定义,可以通过默认储存的地区ID和地块ID获取位置
    Location villageLocation=new Location
    (EventArgBox.TaiwuVillageAreaId,EventArgBox.TaiwuVillageBlockId);

    即通过调用,便可使用其对应的参数值。

    1. 有部分是可以设置的,通过设定其值(通常是true/false),达到具体效果,
      ForbidViewCharacterHideFavorability示例如下:
    ArgBox.Set(EventArgBox.ForbidViewCharacter, true);//禁止查看目标人物ArgBox.Set(EventArgBox.HideFavorability, true);//不显示目标人物好感

    通过设置其值为true/false,则可控制当事件窗口右侧人物显示时,是否可以点击人物查看属性,是否显示人物对太吾的好感等。
    这些值如不设定,会有默认状态通常为false),通常情况下无须改变。当有特殊制作需要时,方将其改变为true。

      特殊传入参数

      1. 除了事件默认参数外,当事件接入其他系统时,也会特殊地传入一些相关参数以供使用。
      触发点类型参数类型参数盒子调用key参数描述
      太吾进行了一次地格移动LocationBlockFrom
      BlockTo
      原本所在地块
      当前到达地块
      用户点击角色头像进行交互intCharacterId被点击的角色的id
      战斗开始intCharacterId敌方的角色id
      产业系统中点击门派特色建筑shortTemplateId建筑的TemplateId
      用户点击动物头像进行交互shortTemplateId动物的TemplateId
      用户点击紫竹化身进行交互intCharacterId被点击的角色的id
      特殊传入参数
      1. 使用范例·一(以与一个角色交互为例):
        》》首先将事件类型设为“用户点击角色头像进行交互” ;
      触发类型-角色交互

      》》设置之后,参数盒子中便自然会存入默认参数“CharacterId”;
      》》结合事件参数盒子中默认储存的太吾参数(RoleTaiwu,根据需要将其填入“决策角色”与“目标角色”中;

      决策角色与目标角色

      》》填写需要的事件内容及选项(此处略);
      》》最终展示出的事件界面便是左边显示太吾立绘,右边显示被点击的角色立绘的效果:

      决策角色与目标角色效果示例

      》》如果需要对相应的角色进行处理,则可通过方法获取其角色,并对他执行相应的处理。

      1. 使用范例·二(以进行一次地格移动为例,目标:移动到太吾村时触发事件
        》》首先将想要触发的事件类型设为“太吾进行了一次地格移动”;
      触发类型-地格移动

      》》设置之后,太吾每进行一次移动,事件系统都会检定一次该事件是否应该发生,并且默认拥有原本所在地块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;//默认不触发
      }

      》》填写需要的事件内容及选项(此处略);
      》》最终效果为到达太吾村时触发事件;

      到达太吾村
      1. 其他参数调用,亦可参考如上类似方法。

        战斗后传入参数

        1. 在事件中发生战斗后,战斗系统会传入一些必要的参数以供后续事件调用;
        Key类型说明
        EventArgBox.CharIdSeizedInCombatint战斗中用绳索绑到的人物Id,可能为null
        EventArgBox.CarrierItemKeyGotInCombatItemKey战斗中用绳索绑到的动物转化为坐骑后的ItemKey
        “CombatResult”int战斗结果
        “CombatType”sbyte战斗类型
        “MainEnemyId”int战斗中主战者角色Id
        战斗参数
        1. 通过正常的参数调用方法,可以获取其值,并决定后续处理;
        2. 使用范例(以常用的战斗结果为例,根据不同的战斗结果跳转到不同事件):
         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,若不这么做,将可能造成地图系统监听事件失败而卡顿。

        1. 如代码示例,当战斗结果为敌方胜利,且敌人并未在战斗中处决我方时,则对应CombatResultType.EnemyWin结果,事件将跳转到C事件。

        发表回复

        您的电子邮箱地址不会被公开。 必填项已用 * 标注