ArgBox-常用操作

    变量储存

    1. 通过将变量储存进ArgBox,该变量可在后续事件链中再通过ArgBox被调用
    2. 写法格式为ArgBox.Set(参数名,值),示例如下:
    //向ArgBox中储存一个int类型值
        int rd = 5;
        ArgBox.Set("SaveArg0", rd);
    
        //向ArgBox中储存一个bool类型值
        bool haveFixed = true;
        ArgBox.Set("SaveArg1", haveFixed);
    
        //向ArgBox中储存一个string类型值
        string interactWord = "HelloWorld";
        ArgBox.Set("SaveArg2", interactWord);
    
        //向ArgBox中储存一个Location(位置)
        var taiwu = ArgBox.GetCharacter(EventArgBox.RoleTaiwu);//辅助代码:该句为获取太吾的Character,用于获取太吾所在位置,实际储存中,可以使用任意有效语句
        Location taiwuLocation = taiwu.GetLocation();//辅助代码:该句为获取太吾所在位置,实际储存中,可以使用任意有效语句
        ArgBox.Set("SaveArg3", taiwuLocation);
    
        //向ArgBox中储存一个ItemKey(道具实例)
        ItemKey itemkey= EventHelper.AddItemToRole(taiwu,ItemType.Material,Config.Material.DefKey.PoisonIllusory7,1);//辅助代码:该句为向太吾背包中添加指定类型、指定id的道具“人面曼陀罗”,同时获取其道具实例的数据,实际储存中,可以使用任意有效语句
        ArgBox.Set("SaveArg4", itemkey);
        
        //向ArgBox中储存一个CharacterId(人物Id)
        int enemyId=1;//辅助代码:指定角色id为1 
        ArgBox.Set("Enemy", enemyId);
    1. 因为人物、物品、地点的获取通常需要调用额外方法,以下对此做额外介绍:

    》》常用的调用人物方法
    >> 默认储存的人物数据,请查看“ArgBox常用默认参数-2.特殊传入参数”;
    >> 根据模板随机生成非智能角色(注:非智能角色在事件结束后将会被删除,不会实际生
    成存档角色,此方法可避免生成过多的垃圾数据)
    示例:

    int  enemyId = EventHelper.CreateNonIntelligentCharacter(Config.Character.DefKey.SnakeBeggar);
        ArgBox.Set("EnemyId", enemyId);

    通过CreateNonIntelligentCharacter方法,填入对应角色的DefKey,则可以生成一
    智能角色,同时可以获取其Id存入参数盒子。
    >> 创建真实智能角色(注:该方法每次被调用,都会生成一个真实存在的npc,一定
    谨慎使用)
    示例:

    Location location = ArgBox.GetCharacter(EventArgBox.RoleTaiwu).GetLocation();
    var SectCharacter=EventHelper.CreateIntelligentCharacter(location,Gender.Male,25,750,EventHelper.GetSettlementIdByOrgTemplateId(Config.Organization.DefKey.Shaolin),5);
            ArgBox.Set("CharacterA",SectCharacter.GetId());

    该方法需要的参数有:人物生成的位置参数1),人物性别参数2),年龄参数
    3),魅力参数4),所属团体的TemplateId参数5),角色品级参数6)。
    最终将生成一个少林派的25岁男性阶级5的弟子,其魅力750
    >> 获取或生成固定角色(注:固定角色主要是一些主线npc,拥有特有的属性特性等)
    示例:

    int charId = EventHelper.GetOrCreateFixedCharacterByTemplateId(Config.Character.DefKey.OldWomanFeng).GetId();
        ArgBox.Set("Fengoldwoman",charId);

    通过GetOrCreateFixedCharacterByTemplateId方法,填入对应角色的DefKey
    则可以生成一个固定角色如果该固定角色曾被创建出来,则获取其Id),同时可以获
    取其Id存入参数盒子。
    >> 创建临时的智能角色,方法为CreateTemporaryIntelligentCharacter,所需参数
    创建真实智能角色一致;
    >> 获取指定地块的人物列表
    注意!!!本方法使用时需要提前在事件代码的OnEventEnter()中引用如下对应名称
    间:

    #region CustomUsings
    using GameData.Domains;
    #endregion
    

    其后,在需要检测地格人物列表的位置,先获取位置,再获取地格信息,通过地格信息
    中的相关信息得到人物列表,示例如下(获取地格的角色Id列表):

    var location = ArgBox.GetCharacter(EventArgBox.RoleTaiwu).GetLocation();
    var blockData = GameData.Domains.DomainManager.Map.GetBlock(location);
    HashSet<int> characterSet=blockData.CharacterSet;
    

    此处示例为获取太吾所在位置的角色Id列表
    之后,如果检测该列表不为空,便可对其中的Id进行遍历操作,直到找出自己想要的人
    物,示例如下:

    if(characterSet == null)//如果当前地格没有人,不触发
            return false;
    

    此处填写在OnEventCondition()中,意为当地格无人,事件触发,如果填写在其
    他位置,也当有设计好的处理

    foreach(var charId in characterSet)
        {
            if(EventHelper.GetCharacterById(charId)!=null)
            {
                var cellChar=EventHelper.GetCharacterById(charId);
                OrganizationInfo orgInfo=cellChar.GetOrganizationInfo();
                if(EventHelper.IsInAnySect(charId)&&orgInfo.Grade==Grade.Highest&&orgInfo.Principal)
                {
                    ArgBox.Set("Principal",charId);
                    return true;
                }
            }
        }
    return false;
    

    此处示例为查找列表中是否有门派掌门。如果有,就将其传入参数盒子,如果没有,
    则不触发事件;实际使用中,根据代码填写位置和自己的需求,可以有更多的变体,比
    如通过API文档中的检测关系的相关接口,获取与自己有特定关系的人物;或者获取心
    情等属性达到一定标准的人物,皆是可以操作的。


    >> 通过参数盒子中存储的人物Id获取角色

    var taiwu = ArgBox.GetCharacter(EventArgBox.RoleTaiwu);
    var character = ArgBox.GetCharacter("CharacterId");

    方法中需要的参数为已被储存的Key

    》》常用的调用物品方法:
    >> 添加物品到角色背包(注:该方法在调用的同时,将会创建物品并放入人物背包);
    示例:

    var taiwu = ArgBox.GetCharacter(EventArgBox.RoleTaiwu);
        ItemKey itemkey= EventHelper.AddItemToRole(taiwu,ItemType.Material,Config.Material.DefKey.WoodOuter7,1);

    通过AddItemToRole方法,该方法需要的参数为:角色参数1),此处指定为太吾,
    道具类别参数2),道具Id参数3-可通过DefKey获取),数量参数4)。
    示例中的效果生成乌金紫檀并放入太吾背包。
    >> 添加促织到角色背包:
    示例:

    var taiwu = ArgBox.GetCharacter(EventArgBox.RoleTaiwu);
    ItemKey cricket1= EventHelper.AddCricketToInventory(taiwu,Config.CricketParts.DefKey.White,Config.CricketParts.DefKey.RoundWings);//生成圆翅白

    通过AddCricketToInventory方法,该方法需要的参数为:角色参数1),此处指定
    为太吾,织部件1参数2),指定为白色,促织部件2参数3),指定为圆翅。
    示例中的效果添加圆翅白并放入太吾背包。
    >> 使指定人物获取指定技艺书:
    示例:

    ItemKey bookKey=EventHelper.GetLifeSkillBook(EventArgBox.TaiwuCharacterId,123);

    通过GetLifeSkillBook方法,该方法需要的参数为:角色id参数1),此处直接调用
    参数盒子中默认参数(可查看:ArgBox-常用默认参数),技艺书id参数2)。
    示例中的效果太吾获取id为123的技艺书。
    >> 使指定人物获取指定功法书:
    示例:

    ItemKey bookKey=EventHelper.GetCombatSkillBook(EventArgBox.TaiwuCharacterId,123,1,pageIsDirect,3);

    通过GetCombatSkillBook方法,该方法需要的参数为:角色id参数1),功法书id
    参数2),总纲类型参数3-sbyte),各页是否正练参数4-bool数组,需自行指
    ),完整书页数参数5)。
    示例中的效果太吾获取id是123的功法书,总纲类型为“合”,其中有3页完整,各页正
    逆练需要看提前指定。

    >> 其他常用方法可参考常用规则中道具筛选,获取选中的物品。

    》》常用的调用地点方法:
    >> 获取人物所在的位置

    var taiwu =    ArgBox.GetCharacter(EventArgBox.RoleTaiwu);
        Location location = taiwu.GetLocation();

    首先指定人物,其次通过GetLocation()获取人物当前所处位置。
    >> 通过地区Id地块Id构造一个位置

    Location villageLocation=new Location(EventArgBox.TaiwuVillageAreaId,EventArgBox.TaiwuVillageBlockId);

    参数1地区Id参数2地块Id,此处取用参数盒子中默认储存的太吾村地区ID以及
    太吾村地块ID,则获取到太吾村位置
    >> 在获取地点后,可通过查看Location构造,查看更多使用。

      变量调用

      1. 通过调用ArgBox中已经储存的变量,可以进行相应的操作;
      2. 写法格式为:
        》》ArgBox.Get(参数名, ref 变量);
        示例如下:
      int arg0=-1;
          if(ArgBox.Get("SaveArg0",ref arg0))//如果取到值
          {
              if(arg0>=5)
                  return 事件A的Guid;
          }
          return 事件B的Guid;

      》》ArgBox.Get(参数名, out 变量类型 变量);
      示例如下:

      //取出之前存储的ItemKey
          ArgBox.Get("SaveArg4", out ItemKey itemkey);
      
          //使用示例:转移道具
          //因为之前储存时该道具已放入玩家角色背包,此处可以直接转移给别人
          var taiwu=ArgBox.GetCharacter(EventArgBox.RoleTaiwu);
          var enemy=ArgBox.GetCharacter("Enemy");
          EventHelper.TransferInventoryOrEquipItem(taiwu,enemy,itemkey);//将太吾背包中的道具转移到别人背包中
      1. 获取参数的同时,会返回一个bool值意为是否取到该值),当参数盒子中不存在该值时,将返回false。
        变量调用-2第一个示例中,如果之前并未储存过”SaveArg0″,则取不到该参数的值,因此if方法体内的所有逻辑都不会被执行

        变量移除

        1. 通过移除ArgBox中已经储存的变量,可使后续事件中不再能取到该变量;
        2. 写法格式为ArgBox.Remove<变量类型>(变量名);
          示例如下:
        ArgBox.Remove<ItemKey>("SaveArg4");

        发表回复

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