目录
物品筛选
- 通过在事件代码OnEventEnter()中,填入物品筛选的相关代码处理,便可使事件窗口在展示时,显示出道具筛选窗口。
- 道具筛选窗口相关代码填写规则:
》》构造一个道具筛选器(默认写法):
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);
}
所呈现的结果是筛选玩家所持的所有硬木引子。
- 道具确认与取消选择
》》道具确认的处理,对应着编辑器中该事件的第一个选项,具体逻辑通常写在选项代码
OnSelect()中。
>> 通常会在此处对选中的道具进行指定处理:
var taiwu= ArgBox.GetCharacter(EventArgBox.RoleTaiwu);
if(ArgBox.Get("MetalKey", out ItemKey metalKey))
{
EventHelper.RemoveInventoryItem(taiwu,metalKey);
}
通过事件代码中存入的Key,可以获取道具的ItemKey,此处进行的处理是将太吾
选中的物品从背包中移除。
>> 通常会在处理完成后跳转到下一级事件:
return 需要跳转到的事件的Guid;
》》取消选择的处理,对应着编辑器中该事件的第二个选项,具体逻辑通常写在选项代码
OnSelect()中,通常是跳转回上一级事件。
人物筛选
- 通过在事件代码OnEventEnter()中,填入人物筛选的相关代码处理,便可使事件窗口在展示时,显示出人物筛选窗口。
- 人物筛选窗口相关代码填写规则:
》》构造一个人物筛选器;
》》填写筛选器的相关参数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”即可。
- 人物确认与取消选择:与道具筛选的处理类似,请参考道具筛选部分。
现在可以不经过这个筛选页面,获得太吾所有同道么,类似获取地格所有npc那样,直接拿到hashset?
你好,可以采取类似获取地格所有npc那样的方式,从后端拿到所有同道的数据