VNext扩展模组
阅读
2023-04-03更新
最新编辑:无处不在的风
阅读:
更新日期:2023-04-03
最新编辑:无处不在的风
VNext
扩展补充Next模组的对话指令、触发器、环境脚本,来帮助模组作者们更方便地编写剧情类模组。
为《微风的工具库》模组的一部分,只需订阅《微风的工具库》,就可在剧本中使用这些新的强大的指令。
微风的工具库
本模组旨在为游戏《觅长生》的其他模组提供前置工具
VTools
为《微风的工具库》模组的另一部分,为其他C#模组提供更多可直接调用的方法。 (相信你知道怎么看)
VNext.DialogEvent
对话指令
指令 | 说明 | 特点 | 范例 |
---|---|---|---|
**SendNewEmail** `SendNewEmail*联系人id#邮件内容#发送日期#邮件类型id#物品id#物品数量#过期月数` |
1.联系人id为数字,必填 2.邮件内容 为字符串,必填 3.发送日期可留空可省略,则默认为当前游戏内时间。 4.邮件类型id可省略,默认为0表示不带物品,1表示NPC向玩家发送物品,2表示NPC向玩家请求物品 5.物品id可省略,默认为0,当邮件类型id为1或2时有效且必填 6.物品数量可省略,默认为0,当邮件类型id为1或2时有效且必填 7.过期月数可省略,默认为60,是指当邮件类型id为2时,月数内NPC回复“正是我急需”,超过月数则“已取得替代物” |
1.联系人和发信人必定一致,可选择是否携带物品或请求物品 2.无论发多少封不同内容的邮件,都只占用对白表id100000号 3.邮件类型2当玩家提交物品时,NPC固定+1好感,按物品总价值加情分 |
`"SendNewEmail*609#啊这。。(脸红)"` 倪旭欣发送一句话的邮件 `"SendNewEmail*609#那个,我有东西要送给你##1#5211#1"` 倪旭欣发送带一个丹药物品的邮件 `"SendNewEmail*615#兄弟,我撸铁时肌肉拉伤了,大夫说一年之内必须服用金刚铁骨丹,求帮忙啊!##2#5306#2#12"` 百里奇求丹药 |
**SendOldEmail** `SendOldEmail*联系人id#发信人id#邮件内容#发送日期` |
1.联系人id为数字,必填 2.发信人id为数字,必填 3.邮件内容 为字符串,必填 4.发送日期可留空可省略,则默认为当前游戏内时间。仅为显示,实际是立即发送的,格式为DateTime转化的字符串格式 |
1.联系人和发信人可不相同,形成类似“群聊”的效果,不可携带物品,不可带任务。 2.每有一个发信人需占用一个传音符id100000 + SenderNPCid |
`"SendOldEmail*609#2#你小子看上我们姑娘了吧?"` 魏老在联系人倪旭欣下发信 `"SendOldEmail*609#621#小子你又皮痒了是吧?"` 倪振东在联系人倪旭欣下发信 `"SendOldEmail*614#1646#宝贝女儿\r\n当你出生的时候我就写下了这封信#0001/01/01"` 林沐心展示她父亲在1年1月1日写的信 |
**SendNTaskEmail** `SendNTaskEmail*联系人id#委托任务id#邮件内容#发送日期#是否强制刷新` |
1.联系人id为数字,必填 2.委托任务id为数字,必填 3.邮件内容 为字符串,必填 4.发送日期可留空可省略,则默认为当前游戏内时间。 5.是否强制刷新为布尔类型,可省略,默认为false 6.游戏内的任务分为**传闻任务**(主线支线)和**委托任务**(可反复接取完成) 7.本邮件可实现发放**委托任务**邮件。需要作者在《task》配置文件中事先查阅好nTaskId,委托任务包括主城委托、宗门委托、随机副本、天机阁情报等等。 8.“任务大类”表中id即为nTaskId,发邮件前会随机生成子任务,即按照“详细任务随机范围”去“详细任务”表中按类型进行匹配,不强制刷新的意思是上次随机生成后还在cd中就不再次生成 |
1.通过邮件向玩家发放委托任务,玩家点击邮件就接受。2.每有一个委托任务id需占用一个传音符id200000 + nTaskId 3.**【注意】** 子任务有“境界区间”要求,有可能恰好玩家的境界没有任何一个子任务是符合的,就会生成子任务失败,不会发送邮件 |
`"If*[&GetLevel()>1&]#SendNTaskEmail*609#150#对了!我想邀请你一起去除妖!"` 当玩家境界高于练气初期时,给玩家发放“除妖”委托任务。经查表,此任务的子任务“境界区间”条件没有1级的 `"If*[&player.menPai==4&]#SendNTaskEmail*301#703#授业长老生病了,你能代替他去完成授业任务吗?"` 当玩家门派为星河剑派时,给玩家发放星河的授业长老任务。经查表,各门派长老任务id不同 |
**AddShengWang** `AddShengWang*势力id#声望增加值` |
1.势力id为数字,必填 2.声望增加值为数字,可正可负 |
1.势力id可在配置表《str》"@势力好感度名称表"表中查询 | `"AddShengWang*0#-100"` 减少宁州声望100 `"AddShengWang*19#100"` 增加无尽之海声望100 |
**CreateOneNpc** `CreateOneNpc*类型#流派#境界#性别#正邪` |
1.所有参数为可选值,若不指定就留空或者写0 2.类型、流派、境界可在配置表《AvatarAI》@NPC类型表中查询 3.**若表中模板筛选出来没有一条全条件都符合的,则会创建失败** 4.性别0表示不指定性别,1男2女,类型3星河会强制设为女 5.正邪0表示不指定,1正2邪 |
1.可任意组合你要指定的条件 2.创建成功后,环境属性roleID、roleName即为创建出来的npc 3.若创建失败,环境属性roleID会变成0 |
`"CreateOneNpc*#33#6#2#1"` 创造了一个离火化焰流派筑基后期正性格的女修士 `"CreateOneNpc*14#0#8#0#2"` 创造一个禾山道金丹中期邪性格修士 |
**SearchOneNpc** `SearchOneNpc*类型#流派#境界#性别#正邪` |
1.所有参数为可选值,若不指定就留空或者写0 2.类型、流派、境界可在配置表《AvatarAI》@NPC类型表中查询 3.**若已有NPC中筛选出来没有一条全条件都符合的,则会筛选失败** 4.性别0表示不指定性别,1男2女 5.正邪0表示不指定,1正2邪 6.筛选已有npc仅包括实例NPC,**不包括已飞升和已失联的npc** |
1.可任意组合你要指定的条件 2.筛选成功后,**本对话指令只会返回其中随机一个结果**,环境属性roleID、roleName即为筛选出来的npc 3.若筛选失败,环境属性roleID会变成0 |
`"CreateOneNpc*#33#6#2#1"` 随机选择一个离火化焰流派筑基后期正性格的女修士 `"SearchOneNpc*11##1##1"` 随机选择一个白帝楼类型炼气初期正性格修士 |
**NpcDoAction** `NpcDoAction*npcId#actionId` |
1.NPC强制执行actionId 2.npc所在地点会变成执行actionId可能去往的地点之一(与npc类型有关) 3.npc信息里的行动会变成所执行的actionId 4.执行actionId大多会获取收益(钱、经验、物品等),还有部分actionId是下一月获得收益,也就是说执行一次相当于此npc会比正常情况多获得一次收益 |
1.**本对话指令仅对实例NPC生效,包括有绑定的固定npc,不包括没绑定的工具人NPC** 2.**本对话指令仅包括部分可执行actionId,并非全部行动都可执行** 主要是配置表《AvatarAI》@NPC行动表中131号以前的 3.执行结果可使用临时参数`GetArg("NpcDoAction")`查看,1为成功0为失败 |
`"NpcDoAction*[&roleID&]#51"` 让roleID去东石谷坊市跑商 `"NpcDoAction*609#5"` 让倪旭欣去炼丹(**慎重修改固定NPC的行动id,可能会影响主线剧情,而且部分特殊行动id本指令无法改回**) |
**NpcMapRemoveNpc** `NpcMapRemoveNpc*npcId` |
1.从三类NPC地图中移除NPC,包括大地图、三级场景、副本,使之无法用正常方法被找到交互 | 1.**本对话指令仅对实例NPC生效,包括有绑定的固定npc,不包括没绑定的工具人NPC** 2.执行结果可使用临时参数`GetArg("NpcMapRemoveNpc")`查看,1为成功0为失败 |
`"SetInt*npcId#[&roleID&]","NpcMapRemoveNpc*[&GetInt(\"npcId\")&]"` 从地图上移除npcId对应的NPC |
**CreateDongFu** `CreateDongFu*dongFuID*level` |
1.按dongFuID创建设定level灵眼等级的洞府 2.若已有此id的洞府,则等效于修改洞府灵眼等级 |
1.**推荐先用环境脚本`PlayerHasDongFu`确认玩家是否有此id的洞府** 2.逸风城购买洞府id为1,门派金丹赠送后山洞府为2 3.洞府id类型为int, 理论上可以有-2,147,483,648 到 2,147,483,647号洞府 |
`"CreateDongFu*5#3"` 创建灵眼等级为3的五号洞府 |
**CreateDongFu** `CreateDongFu*dongFuID*level` |
1.按dongFuID创建设定level灵眼等级的洞府 2.若已有此id的洞府,则等效于修改洞府灵眼等级 |
1.**推荐先用环境脚本`PlayerHasDongFu`确认玩家是否有此id的洞府** 2.逸风城购买洞府id为1,门派金丹赠送后山洞府为2 3.洞府id类型为int, 理论上可以有-2,147,483,648 到 2,147,483,647号洞府 |
`"CreateDongFu*5#3"` 创建灵眼等级为3的五号洞府 |
**SetNowDongFuID** `SetNowDongFuID*dongFuID` |
1.在玩家传送进洞府场景"S101"前,通过此指令设定传进几号洞府 | 1.**一般和`PlayerWarp`指令搭配使用** | `"SetNowDongFuID*5"` 接下来传送进的是五号洞府 |
**NpcWarp** `NpcWarp*npcId#场景#index` |
1.将NPC传送至指定场景,原有位置会移除 2.场景为"AllMaps"时,表示传送到大地图,index表示在大地图上路点序号 3.场景为"F"开头时,表示传送到固定副本中,index副本中格子序号;若玩家已在此副本中且index留空或为0,表示传送到玩家当前格子。 4.场景为"S"开头时,表示传送到三级场景中,若场景为"S101"表示洞府,则index表示NPC传到几号洞府,其他情况index无含义 |
1.**本对话指令仅对实例NPC生效,包括有绑定的固定npc,不包括没绑定的工具人NPC** | `"NpcWarp*[&GetInt(\"npcId\")&]#AllMaps#21"` 将选定的npc传送到大地图21号位置(天机阁位置) `"NpcWarp*[&GetInt(\"npcId\")&]#F26#0"` 将NPC传送到青石灵脉,玩家已在此副本时传动到玩家所在格子 `"NpcWarp*[&GetInt(\"npcId\")&]#S22"` 将NPC传动到云汐城场景 |
**PlayerWarp** `PlayerWarp*场景#index` |
1.将玩家传送至指定场景 2.场景为"AllMaps"时,表示传送到大地图,index表示在大地图上路点序号 3.场景为"F"开头时,表示传送到固定副本中,index副本中格子序号;**此方法传送进副本出来后还在原地**。 4.场景为"Sea"开头时,表示传送到海域上,index海域格子总序号,若留空或为0则为本指令默认位置 4.场景为"S"开头时,表示传送到三级场景中。index大于零表示玩家从场景出来后到大地图上的指定位置,index留空或为0表示出来后在大地图的位置不变,-1表示由本指令自动设置出来后的位置(不完全正确,官方命名有部分规律但没完全遵守) |
1.S开头的三级场景,没有强制绑定出来后到大地图的位置,也就是说进去前在路点几,出来还是原地 2.官方并没有一个“三级场景出来应该在大地图什么位置”的对照表。从剧情的角度,推荐手动指定出来后在大地图的位置,或先用`"PlayerMove"`指令先在大地图上移动 3. 海域位置详见说明,若传送海域不包含指定的index,则会出bug 4.若场景为"S101"表示洞府,则提前用`SetNowDongFuID`指定要去的洞府 |
`"PlayerWarp*AllMaps#10"` 玩家传送到大地图10号位置 `"PlayerWarp*F16#2"` 玩家传送到风雷谷2号位置(可以是正常无法走到的位置) `"PlayerWarp*Sea5#0"` 将玩家传送到千流海域默认位置 `"PlayerWarp*S20#-1"` 将玩家传送到逸风城,且出来到大地图的位置由本指令修改 |
**PlayerMove** `PlayerMove*index` |
1.玩家小人直线移动到指定的index 2.玩家在大地图、副本、海上都有效 |
1.**请作者确认玩家所在场景有指定的index** 2.尤其是海上,每个海域包含的index都不同,本海域位置可用此移动指令,若为跨海域建议使用传送 |
`"PlayerMove*3217"`玩家在千流海域时移动到此指定位置 |
**PlayerWalk** `PlayerWalk*index` |
1.仅玩家在大地图有效,如同点击目的地 2.玩家小人会自动寻路一段段移动到指定的index |
1.**请作者确认玩家所在场景有指定的index** | `"PlayerWalk*20"` 玩家在大地图上时走到指定20位置 |
**PlayerGetInRandomFuBen** `PlayerGetInRandomFuBen*fuBenId` |
1.玩家传送进指定的随机副本 2.随机副本可在配置表《EndlessSea》中@随机副本表查询 |
1.**env.mapScene和Tools.getScreenName()查出的是随机副本的uuid,与固定副本的F多少不同** 2.要事后查询玩家在随机副本是哪个id(也就是本指令输入参数),可以使用环境脚本中玩家信息`player.NowRandomFuBenID` 3.要查询随机出的副本中文名,可用`VTools.GetPlaceName()` |
`"PlayerGetInRandomFuBen*88"`玩家进入某个碎星海随机副本 |
VNext.DialogTrigger
触发器
由于触发器触发较为频繁,建议需要时开启触发器,不需要时关闭触发器,并给触发器加上恰当的condition
指令 | 说明 | 特点 | 环境 |
---|---|---|---|
**附近的人** **OnNearNpc** |
1.**必须**把环境脚本`NearNpcContains`作为condition条件之一一起使用 2.当附近的人改变时触发,通过`NearNpcContains`判定有没有遇到设定的NPC,从而开启剧情事件 |
1.**队列触发器** 该类触发器触发的事件会逐项执行 2.屏蔽了反复进出空场景刷概率触发,可反复进出有人的场景刷概率触发 3.在洞府闭关,过月结算时有npc拜访也能触发 |
在使用环境脚本`NearNpcContains`作为第一个条件后,以下环境属性可使用 roleID roleName roleBindID mapScene |
**大地图移动前** **BeforeAllMapMove** |
1.当玩家在宁州大地图移动前触发,**包括自动寻路的每段开头**,包括遁术飞行的开头,不包括到达目的地 2.**一旦成功触发,会终止之后的移动** 3.若condition设置不当,可能会造成玩家频繁触发、寸步难行 |
1.**单项触发器** 该类触发器仅触发优先级最高且满足条件的事件 |
常和环境脚本`string GetCurMapRoad()`获取当前道路ID、`string GetRoadName(string roadId)`获取道路名称 搭配使用 |
**副本移动前** **BeforeFubenMove** |
1.当玩家在副本移动前触发,鼠标点击格子或wasd移动都可触发,不包括到达目的地 2.**一旦成功触发,会终止之后的移动** 3.若condition设置不当,可能会造成玩家频繁触发、寸步难行 |
1.**单项触发器** 该类触发器仅触发优先级最高且满足条件的事件 |
常和环境脚本`int GetCurFubenIndex()`取当前副本位置、`string GetCurScene()`获取当前场景id 搭配使用 |
**结算完成** **OnJieSuanComplete** |
1.当玩家结算完成后触发 2.**此触发器推荐适合处理后台数据,如修改NPC和玩家的信息** 由于结算完成时间无法控制,因此若进行前台交互对话会显得突兀 |
1.**队列触发器** 该类触发器触发的事件会逐项执行 |
常和环境脚本`DateTime GetNowTime()`获取DateTime格式的游戏当前时间、`bool Before/After(int year, int month, int day)`判断是否在某个日期之前之后 搭配使用 |
VNext.DialogEnvQuery
环境脚本
指令 | 说明 | 特点 | 范例 |
---|---|---|---|
`string GetNPCName(int npcId)` | 根据npcId返回名字,注意大小写 | 除了一般NPC名字外,失联NPC和未绑定的工具人NPC也可以正常获取,1号是玩家名字,0号是"旁白",如果获取失败则会返回"未知" | `"倪旭欣#我爸是[&GetNPCName(621)&]!"` 倪旭欣说我爸是倪振东 |
`bool NearNpcContains(DialogEnvQueryContext context)` | 1.**必须**和触发器**OnNearNpc**一起使用 2.第一个参数为触发的npcId,可以是一个数,也可以是一个数组,只要其中任意一个在附近的人中有就能触发 3.第二个参数可省略,默认为100,范围从0到100,为百分比概率开启剧情事件 4.**使用后**会对一些环境属性赋值,可以和其他判断条件一起进行布尔运算,最终作为condition |
环境脚本中,数组的表示方式为Array(615, 614,…)注意为英文逗号 本环境脚本的npcId参数可兼容一个数字或者一个数组 |
`"NearNpcContains(609)"` 当遇到倪旭欣时开启剧情事件 `"NearNpcContains(Array(615, 614),50)"` 当遇到百里奇或者林沐心时有50%概率开启剧情事件 |
`bool RandomProbability(int roll)` | 按参数百分比概率,随机返回布尔结果 | 参数范围0~100的整数 | `RandomProbability(20)` 有20%的概率返回为真 |
`int GetCurFubenIndex()` | 获取玩家在副本中的位置 | 1.**仅当玩家在副本中才有效** 2.海上也是副本 |
`"主角#我在[&GetPlaceName()&]副本第[&GetCurFubenIndex()&]位置发现了什么"` |
`int GetCurFubenIndex()` | 获取玩家在副本中的位置 | 1.**仅当玩家在副本中才有效** 2.海上也是副本 |
`"主角#我在[&GetPlaceName()&]副本第[&GetCurFubenIndex()&]位置发现了什么"` |
`int GetPlaceName()` | 获取玩家所在场景名称 | 相较于`GetSceneName(GetCurScene())`脚本,本环境脚本还能正确获取随机副本、玩家洞府的名称 | `"主角#我在[&GetPlaceName()&]副本第[&GetCurFubenIndex()&]位置发现了什么"` |
`int GetShengWang(int id)` | 根据势力id返回声望 | 势力id可在配置表《str》"@势力好感度名称表"表中查询 | `"主角#我在宁州的声望是[&GetShengWang(0)&]!"` 主角自语宁州的声望 |
`bool PlayerHasDongFu(int dongFuID)` | 返回玩家是否已有此id的洞府 | 1.逸风城购买洞府id为1,门派金丹赠送后山洞府为2 | `"If*[&PlayerHasDongFu(1)&]#Say*主角#我已在逸风城购买洞府"` 主角自语宁州的声望 |