分类目录归档:常用规则

常用规则-事件监听

▲ 事件在执行的过程中,有时需要接入其他系统如梳头修面、疗伤、战斗),此时事件窗口将暂时隐藏,直到对应的其他系统的内容执行完毕,才会继续执行事件链。
因此,在接入其他系统时,事件系统会对指定事件进行监听,便于之后执行该事件。
该部分关于监听的内容,在调用方法时,其中一个参数必须填入事件的Guid,以下将会介绍几种常用的事件监听

    战斗系统的监听

    • 与指定人物开始战斗为例,所用的方法为EventHelper.StartCombat
    • 该方法在构造时,需要传入的参数
      》》目标角色id;
      》》战斗配置 ID,通常调用战斗配置表中的DefKey;
      》》战斗结束后的跳转事件Guid;
      》》事件链的参数盒子,默认填写ArgBox即可。
    • 填写示例如下:
    EventHelper.StartCombat(charId,Config.CombatConfig.DefKey.DieNormal,被监听的事件Guid,ArgBox);

    (其中charId需要自行指定为有效人物Id)

    • 效果为与指定Id的角色进入死斗,死斗结束后,将执行被监听的事件(通常会在该事件中通过检测战斗结果跳转至不同的事件)。

      疗伤驱毒的监听

      • 让指定人物为玩家及同道进行疗伤驱毒为例,所用方法为EventHelper.StartDoctorAction
      • 该方法在构造时,需要传入的参数
        》》医生的角色id;
        》》疗伤结束后的跳转事件Guid;
        》》事件链的参数盒子,默认填写ArgBox即可。
      • 填写示例如下:
      EventHelper.StartDoctorAction(charId, 被监听的事件Guid,ArgBox);

      其中charId需要自行指定为有效人物Id

      • 效果为在关闭疗伤驱毒界面后,将弹出被监听的事件。

        梳头修面的监听

        • 让指定人物(cutterId)为另一人物(charId)进行梳头修面为例,所用方法为EventHelper.StartShavingAction
        • 构造方法与前几种类似,填写示例如下
        EventHelper.StartShavingAction(cutterCharId,charId, 被监听的事件Guid, ArgBox);
        • 效果为梳头修面结束后,弹出被监听的事件
        • (可选择学习)额外地,该系统同时会自动存入梳头修面成功与否的参数,参数名为“ShaveSuccess”,可以通过此参数进行额外判定,示例如下:
        bool success = false;
            //没有设置梳头修面的结果,说明放弃了梳头修面行为
            if(!ArgBox.Get("ShaveSuccess",ref success))
            {
                EventHelper.ToEvent(放弃梳头事件Guid);
                return;
            }
            ArgBox.Remove<bool>("ShaveSuccess");
            //进行洗头修面结果检测,如果成功则前往成功事件,否则前往失败事件
            if(success)
                EventHelper.ToEvent(梳头成功事件Guid);
            else
                EventHelper.ToEvent(梳头失败事件Guid);

          交换藏书的监听(规则与前几种类似

          • 交换门派藏书,示例如下:
          EventHelper.StartExchangeBooksByApprove(charId,事件Guid ,ArgBox);
          • 交换私人藏书,示例如下:
          EventHelper.StartExchangeBooksByFavor(charId, 事件Guid,ArgBox);

            展示道具界面的监听

            • 展示太吾获取的道具为例,所用方法为EventHelper.ShowGetItemPageForItems
            • 该方法在构造时,需要传入的参数
              》》List<(ItemKey,int)> 其中参数为道具Key及其数量;
              》》展示结束后跳转事件Guid;
              》》事件链的参数盒子,默认填写ArgBox即可
            • 填写示例如下
            var taiwu = ArgBox.GetCharacter(EventArgBox.RoleTaiwu);
                ItemKey itemkey= EventHelper.AddItemToRole(taiwu,ItemType.Material,Config.Material.DefKey.WoodOuter7,1);
                EventHelper.ShowGetItemPageForItems(new List<(ItemKey,int)>(){(itemkey,1)},展示后事件Guid,ArgBox);

            先通过其他方法获取Key,随后进行相应的展示。

            • 效果为在展示完道具后,将弹出被监听的事件,如果不需要监听任何事件,填写””即可(即填入一对无包含内容的英文引号)。

              展示获取人物界面的监听

              • 展示邀请人物成为同道为例,所用方法为EventHelper.ShowGetItemPageForCharacters
              • 该方法在构造时,需要传入的参数
                》》List<int> 其中参数为角色Id;
                》》Bool 是否是村民,true为村民,false为同道;
                》》展示结束后跳转事件Guid;
                》》事件链的参数盒子,默认填写ArgBox即可
              • 填写示例如下
              int charId = -1;
                  ArgBox.Get("CharacterId",ref charId);
                  EventHelper.RequestRoleJoinGroup(charId);
                  EventHelper.ShowGetItemPageForCharacters(new List<int>(){charId},false,"",ArgBox);
              • 效果为展示完人物获取界面后,将弹出被监听的事件,如果不需要监听任何事件,填写””即可(即填入一对无包含内容的英文引号)。

              常用规则-选项可用条件和选项消耗

              选项可用条件

              通过在选项代码OnCreate()的内部填写相关代码,可以使选项拥有可用提示,如果不满足其可用条件,则不可点击该选项。

              选项可用条件示意图

              代码填写规范:

              private void OnCreate()
              {
                   OptionAvailableConditions = new[]
                   {   
                      {{MonthCooldownCount,"CriketCombatInteract",1}},
                      {{FavorAtLeast,FavorabilityType.Favorite1}},
                      {{MovePointMore,3}}
                   };
              }

              》》通过填写OptionAvailableConditions = new[]{}来构造可用条件列表;
              》》每行中第一个参数为条件类型,之后的参数为该条件类型所需要的其他参数:
              >>MonthCooldownCount参数1),对应的条件类型为“冷却时节”,其需要的参数
              为冷却变量名(参数2),冷却时节数(参数3),填写结果则为:
              {{MonthCooldownCount,”CriketCombatInteract”,1}},
              >>FavorAtLeast参数1),对应的条件类型为“好感达到或超过”,其需要的参数为好
              感等级(参数2,本质是sbyte类型),填写结果则为:
              {{FavorAtLeast,FavorabilityType.Favorite1}},

              {{FavorAtLeast,3}},
              >>MovePointMore参数1),对应的条件类型为“可用行动力不少于”,其需要的参数
              为行动力数量(参数2),填写结果则为:
              {{MovePointMore,3}}
              》》更多的条件类型及其所需参数可查阅“常用规则附录-选项可用条件”。

              选项消耗提示

              通过在选项代码OnCreate()的内部填写相关代码,可以使选项拥有消耗提示,如果相关资源不够消耗,则不可点击该选项。

              选项消耗提示示意图

              代码填写规范:

              private void OnCreate()
              {
                  OptionConsumeInfos = new[]
                  {
                      {Authority,300,false},
                      {MovePoint,5,false}
                  };
              }

              》》通过填写OptionConsumeInfos = new[]{}来构造消耗条件列表;
              》》每行中第一个参数为消耗类型第二个参数为该消耗类型对应的消耗数值第三个参数为“是否立即消耗”(点下选项的瞬间是否立即消耗对应资源,如不填写,则默认为立即消耗)。
              >>Authority参数1),对应的消耗类型为“威望”,需要消耗威望的数值(参数2),
              此时希望点下选项瞬间消耗(参数3),填写结果则为:
              {Authority,300},
              如果希望点下选项瞬间不消耗(参数3),而在后续操作中手动消耗,填写结果则为:
              {Authority,300,false},
              >>MovePoint参数1),对应的消耗类型为“行动力”,需要消耗行动力的数值(参数
              2
              ),则类似威望的填写结果为:
              {MovePoint,5},

              {MovePoint,5,false},
              》》更多的条件类型及其所需参数可查阅“常用规则附录-选项消耗”。

              常用规则-物品筛选与人物筛选

                物品筛选

                1. 通过在事件代码OnEventEnter()中,填入物品筛选的相关代码处理,便可使事件窗口在展示时,显示出道具筛选窗口。
                道具筛选窗口
                1. 道具筛选窗口相关代码填写规则:
                  》》构造一个道具筛选器默认写法):
                SelectItemFilter filter = new SelectItemFilter();

                》》填写筛选器的相关参数1:筛选规则示例如下

                filter.FilterTemplateId = Config.ItemFilterRules.DefKey.SelectMetalInner;

                根据不同需要,通过改变DefKey.后的引用,可以改变为不同的筛选规则。目前已有的
                DefKey部分列举如下(此处示例引用为选择软铁):
                备注:若不想进行任何筛选,则该行可不填,将取到人物的所有道具

                筛选伏虞剑	SelectFuyuSword
                选择素食	SelectVegetarianFood
                选择荤食	SelectMeatFood
                选择所有食物和茶酒	SelectAllFoodAndTeaWine
                选择硬木	SelectWoodOuter
                选择软木	SelectWoodInner
                选择硬铁	SelectMetalOuter
                选择软铁	SelectMetalInner
                选择硬玉	SelectJadeOuter
                选择软玉	SelectJadeInner
                选择硬布	SelectFabricOuter
                选择软布	SelectFabricInner
                选择腐毒引子	SelectPoisonRotten
                选择幻毒引子	SelectPoisonIllusory
                选择武器	SelectWeapon
                选择可服食道具	SelectSomethingCanEat
                筛选茶	SelectTea
                筛选酒	SelectWine
                筛选毒药	SelectPoisonMedicine
                筛选剑冢碎片	SelectSwordFragments
                筛选西域珍宝	SelectWesternPresent

                》》填写筛选器的相关参数2:选中的物品在ArgBox对应的参数名示例如下

                filter.Key = "MetalKey";

                通过设定参数名,之后可以在参数盒子中取到该值,以便于后续处理。

                》》确定执行相关筛选器的处理:
                >> 选择太吾所持道具(示例如下

                EventHelper.TaiwuSelectItemRequest(ArgBox,filter);

                >> 选择指定人物所持道具(示例如下

                EventHelper.SelectCharacterItemRequest(charId,ArgBox,filter);

                其中charId为指定人物的角色Id,可以根据需要替换。

                》》(可选)为物品筛选指令排除一些个性化的物品:

                >> 排除不可修理的道具

                EventHelper.ExcludeItemsForEventSelectItemData(ArgBox,ItemDisplayDataFilterId. IsItemRepairable);

                >> 排除不可转移的道具

                EventHelper.ExcludeItemsForEventSelectItemData(ArgBox,ItemDisplayDataFilterId. IsItemTransferable);

                >> 排除不可作为礼物的道具

                EventHelper.ExcludeItemsForEventSelectItemData(ArgBox,ItemDisplayDataFilterId. CanItemAsGift);

                》》最终整体示例如下:

                public override void OnEventEnter()
                {
                    //TODO
                    SelectItemFilter filter = new SelectItemFilter();
                    filter.FilterTemplateId = Config.ItemFilterRules.DefKey.SelectMetalInner;
                    filter.Key = "MetalKey";
                    EventHelper.TaiwuSelectItemRequest(ArgBox,filter);
                }

                所呈现的结果是筛选玩家所持的所有硬木引子。

                1. 道具确认与取消选择
                  》》道具确认的处理,对应着编辑器中该事件的第一个选项,具体逻辑通常写在选项代码
                  OnSelect()中。

                  >> 通常会在此处对选中的道具进行指定处理:
                var taiwu= ArgBox.GetCharacter(EventArgBox.RoleTaiwu); 
                    if(ArgBox.Get("MetalKey", out ItemKey metalKey))
                    {   
                        EventHelper.RemoveInventoryItem(taiwu,metalKey);
                    }

                通过事件代码中存入的Key,可以获取道具的ItemKey,此处进行的处理是将太吾
                选中的物品从背包中移除

                >> 通常会在处理完成后跳转到下一级事件:

                return 需要跳转到的事件的Guid;

                》》取消选择的处理,对应着编辑器中该事件的第二个选项,具体逻辑通常写在选项代码
                OnSelect()中,通常是跳转回上一级事件。

                  人物筛选

                  1. 通过在事件代码OnEventEnter()中,填入人物筛选的相关代码处理,便可使事件窗口在展示时,显示出人物筛选窗口。
                  人物筛选窗口
                  1. 人物筛选窗口相关代码填写规则:
                    》》构造一个人物筛选器
                    》》填写筛选器的相关参数1:筛选规则通常填为-1,则筛选所有人);
                    》》填写筛选器的相关参数2:选中的人物Id在ArgBox对应的参数名
                    》》确定执行相关筛选器的处理(目前仅有筛选同道的处理);
                    》》最终示例如下,其显示结果为太吾本人和所有同道
                  CharacterSelectFilter filter = new CharacterSelectFilter();
                      filter.FilterTemplateId = -1;//若根据CharacterFilter中填写DefKey,则可以细致筛选条件,此处-1则包括太吾和其同道
                      filter.SelectKey = "SpirtualCharacterId";
                      EventHelper.SelectTeammateRequest(ArgBox,filter,true);

                  若需要排除太吾,则将最后一个参数“true”改为“false”即可。

                  1. 人物确认与取消选择:与道具筛选的处理类似,请参考道具筛选部分。