跳到主要内容

黑猫@基础库

黑猫@基础库 是一个函数库类型软件包,封装了角色、背包、珍兽、技能、生活技能、元宝商店 等常用操作,是绝大多数任务的基础依赖。

引入方式​

在清单中声明依赖:

apps/黑猫@你的任务/.hm.json
{
"依赖软件包": {
"黑猫@基础库": "v1.0"
}
}

在任务或界面脚本中 require 对应模块:

local hm = require("黑猫@基础库.global")
local hmPlayer = require("黑猫@基础库.player")
local hmPackage = require("黑猫@基础库.package")
提示

基础库内部通过 DoLuaString 调用注入到游戏环境的原生函数,因此它必须在运行时可用 (即已声明依赖并在安装时一并安装)。

global —— 通用​

local hm = require("黑猫@基础库.global")
函数返回值说明
hm.pushDebugMessage(message)—向游戏内推送调试消息
hm.getItemBindStatus(bagPos)boolean获取装备的绑定状态
hm.autoRunToTarget(x, y)—自动寻路到指定坐标
hm.getMountID()number获取当前坐骑 ID
hm.isWindowShow(name)boolean判断窗口是否显示
hm.getWindowComponentText(window, component)string获取窗口组件文本

player —— 角色​

local hmPlayer = require("黑猫@基础库.player")

hmPlayer.state 提供人物状态常量:

字段值含义
stop0停止
move2移动
storage5蓄气
meditation6打坐
attack7攻击
函数返回值说明
hmPlayer.getName()string获取角色昵称
hmPlayer.getHpPercent()number当前血量百分比
hmPlayer.getMpPercent()number当前气量百分比
hmPlayer.getRemainPoint()number剩余潜能点
hmPlayer.getPlayerState()number当前状态(见上表)
hmPlayer.waitStateDisappear(state)—等待人物状态消失
hmPlayer.getCurrentPosition()table当前位置 { x, y, sceneId, sceneName }
hmPlayer.onMount()—上坐骑
hmPlayer.unMount()—下坐骑
hmPlayer.isLeader()number是否队长(1=是,0=否)
hmPlayer.getIntData(name)number读取角色整型数据,如 Player:GetData 的字段
hmPlayer.sendAskManualAttr(str, spr, con, int, dex)—提交手动加点
hmPlayer.sendAgreeTeamFollow()—同意进入组队跟随
hmPlayer.askTeamFollow()—邀请队友进入组队跟随
local pos = hmPlayer.getCurrentPosition()
GoPrint("当前地图:" .. pos.sceneName .. " (" .. pos.x .. ", " .. pos.y .. ")")

env —— 环境对象​

local hmEnv = require("黑猫@基础库.env")

hmEnv.itemType 是环境对象类型常量:

字段值
self1
player2
pet3
npc4
monster5
resource6
platform7
itemBox8
函数返回值说明
hmEnv.getEnvItems()table获取环境物品列表
hmEnv.getEnvItemsFilter(type)table按类型过滤环境物品
hmEnv.selectItem(id)—选择环境对象

skill —— 技能​

local hmSkill = require("黑猫@基础库.skill")
函数返回值说明
hmSkill.updateSkillItems()—刷新技能缓存
hmSkill.getSkills()table获取技能列表
hmSkill.useSkill(name, itemId)—对目标使用技能
hmSkill.useSkillToSelf(name)—对自己使用技能
hmSkill.getMemPaiDefultSkillName()string获取门派默认技能名
hmSkill.getId(name)number根据技能名获取技能 ID

package —— 背包​

local hmPackage = require("黑猫@基础库.package")

背包类型 type:1=道具栏,2=材料栏,3=任务道具;不传表示全部。

BagItem(背包物品):

字段类型说明
indexnumber背包索引
idnumber物品 ID
namestring物品名称
countnumber数量
descstring描述
函数返回值说明
hmPackage.getList(type?)BagItem[]获取背包物品列表
hmPackage.getUniqueNamesFromArray(data)string[]去重后的物品名称列表
hmPackage.getCountFromArray(data, name)number指定物品总数量(精确匹配)
hmPackage.getCountFromArrayWithPattern(data, pattern)number指定物品总数量(正则)
hmPackage.getIndexesFromArray(data, name)number[]匹配物品的索引数组
hmPackage.getIndexFromArray(data, name)number第一个匹配的索引,未找到返回 -1
hmPackage.getPatternIndexFromArray(data, pattern)number正则匹配的第一个索引,未找到返回 -1
hmPackage.isItemExistsFromArray(data, name)boolean数组中是否存在该物品
hmPackage.isItemExists(name, type?)boolean背包中是否存在该物品
hmPackage.isEquip(pos)boolean背包位置上是否是装备
hmPackage.isGemForName(name)boolean物品名称是否是宝石
hmPackage.isEquipUnAdjuest(bagPos)boolean装备是否未鉴定
hmPackage.getEquipStarLevel(bagPos)number装备星级
hmPackage.getEquipProperties(bagPos)table装备属性(属性名 → 属性值)
hmPackage.getGemLevel(name)number|nil从名称解析宝石等级,如「猫眼石(5级)」
hmPackage.getItemLevel(name)number|nil从名称解析物品等级
hmPackage.getItemLevelForName(name)number|nil同上
hmPackage.useItem(bagPos)—使用物品
hmPackage.destoryItem(bagPos)—丢弃物品(注意原函数名拼写为 destory)
local list = hmPackage.getList(1)
if hmPackage.isItemExists("金创药") then
local pos = hmPackage.getIndexFromArray(list, "金创药")
hmPackage.useItem(pos)
end

player_package —— 背包物品属性​

local hmPlayerPackage = require("黑猫@基础库.player_package")
函数返回值说明
hmPlayerPackage.isGem(bagPos)number是否是宝石(1=是,0=否)
hmPlayerPackage.getItemSubTableIndex(v1, v2)number物品子表索引(如 0 返回 1 表示装备)
hmPlayerPackage.getItemGrade(bagPos)number物品品级

pet —— 珍兽​

local hmPet = require("黑猫@基础库.pet")

PetItem(珍兽信息):

字段类型说明
indexnumber索引(从 0 开始)
idstring珍兽 ID(idHight + idLow)
idHight / idLowstringID 高位 / 低位
namestring名称
levelnumber等级
hp / maxHpnumber当前 / 最大血量
happynumber快乐值
potentialnumber潜能点数
fightingboolean是否出战
函数返回值说明
hmPet.getList()PetItem[]获取珍兽列表
hmPet.getPos(petId)number|nil根据珍兽 ID 获取列表位置(从 0 开始)
hmPet.getPetForId(petId)PetItem|nil根据 ID 获取珍兽信息
hmPet.getFightingPet()PetItem|nil获取当前出战的珍兽
hmPet.hasPetFight()boolean是否有珍兽出战
hmPet.getIsFighting(index)number是否出战(1=出战,0=未出战)
hmPet.getPotential(index)number潜能点数
hmPet.addAttribute(index, str, spr, con, int, dex)—潜能加点
hmPet.goFight(index)—珍兽出战
hmPet.feed(index)—喂养
hmPet.dome(index)—驯养
hmPet.setFightPetAsMainTarget()—将出战珍兽设为目标

life_ability —— 生活技能(装备/宝石)​

local hmLifeAbility = require("黑猫@基础库.life_ability")
函数返回值说明
hmLifeAbility.getEquipLevel(pos)number装备等级
hmLifeAbility.getEquipHoleCount(pos)number已打孔数量
hmLifeAbility.getEquipGem(equipPos, gemPos)string装备宝石图标
hmLifeAbility.getEquipPoint(pos)number装备类型
hmLifeAbility.getGemLevel(pos, kind)number宝石等级
hmLifeAbility.getEquipGemLevel(equipPos, index)number装备宝石等级
hmLifeAbility.getEquipCurStrengthLevel(pos)number强化等级
hmLifeAbility.doEnchase(equipPos, gemPos, fPos)—普通镶嵌
hmLifeAbility.doEnchaseFour(equipPos, gemPos, fPos)—极限镶嵌
hmLifeAbility.splitGemUpdate(equipPos)—装备宝石更新
hmLifeAbility.doSeparateGem(equipPos, index, itemPos)—宝石摘除

yuanbao_shop —— 元宝商店​

local hmYuanBaoShop = require("黑猫@基础库.yuanbao_shop")
函数返回值说明
hmYuanBaoShop.pay(name, count)boolean购买商品(名称精确匹配)
hmYuanBaoShop.payWithPattern(pattern, count)boolean购买商品(名称正则匹配)
hmYuanBaoShop.getItemInfo(pattern)table|nil查询商品位置信息 { name, x, y, z }
hmYuanBaoShop.open(hPos, vPos)—打开商店分类
hmYuanBaoShop.close()—关闭商店
hmYuanBaoShop.updatePage(index)—切换到指定页码
hmYuanBaoShop.clickGood(pos)—点击当前页指定位置(1–18)的商品
备注

商品的坐标信息来自按角色持久化的配置 yuanbao_shop_items,通常由「扫描元宝商城」任务写入。

guild / team / action —— 其它​

local hmGuild = require("黑猫@基础库.guild")
local hmTeam = require("黑猫@基础库.team")
local hmAction = require("黑猫@基础库.action")
函数返回值说明
hmGuild.getMembers()table获取帮会成员列表
hmTeam.getTeamItemCount()number队伍物品数量
hmTeam.getTeamItems()table获取队伍物品列表
hmAction.use(id)—使用指定动作(如 1001)

想扩展基础库?你可以把自己的原生逻辑放进 inject/ 目录,供任务通过 DoLuaString 调用, 详见目录结构。

提示

聊天 / 喊话等尚未封装的游戏原生接口,见 游戏原生接口。

下一步:游戏原生接口。