参与 Llama Land,打造自己的 Llama NPC,攫取平台的红利
作者: txohyeah
审阅:outprog
来源:内容公会 - 新闻
放在开篇,先来讲下我们为什么要开发 Llama NPC!
这点其实是依托于 Llama Land 的平台获得的红利,为自己的项目导入 Llama Land 的流量。就好像自己发的朋友圈的视频,能看到的只有自己的几个朋友,但是当视频发抖音的时候就有可能被抖音的用户看到。就好像 Llama Lottery NPC 中接入的 Llama Lottery 项目。仅仅 3 天时间,就有近 100 人参与,而参与人次更是已经超过了 200。项目的作者仅仅就发了一个推特,没有做过其他任何推广。对了,题外话,该推特还有幸得到了 Sam 等大佬的转载。
在已有项目的基础上,仅仅接入一个 Llama NPC 所需要的开发时间不会超过半天。并且对于项目的验证阶段,甚至等于省去了前端开发、部署等工作,就可以完成自己项目的 MVP 验证。
现在官方还对于 Llama Land 平台生态的开发者发布了包括开发 Llama World,Llama NPC,The Best use of Llama coin 在内的 3 个任务,一共提供了 1000 AR 的高额奖励。
接下来我们就来介绍下 Llama Land,这个基于 AO 和 AI 的平台。
Llama Land 是一款前沿的大型多人在线(MMO)游戏,它以 AI 技术为核心,构建于先进的 AO 平台之上。这是一款全链游戏,所有的游戏数据与代码都被永久地存储在 Arweave 区块链上。另外,游戏具有超强的可扩展性。基于 Reality Protocol,任何人都可以在 Llama Land 中创建自己的 NPC,甚至是子世界。因此,相较于称之为游戏,我更倾向于把它当作是元宇宙的一次实践。
Reality Protocol 是开发 Llama Land 的底层协议,现在已经完全开源。
Reality Protocal 文档与开源代码:https://github.com/elliotsayes/Reality/blob/main/docs/Reality.md
截至本文撰写的时间。游戏已经允许了前一万名玩家进入游戏,并且开放了新的二万二千个排队的名额。每天可以通过登录来完成每日任务获取一个随机的 Llama coin 奖励。在排队的小伙伴也可以通过每12小时进行一次 Claim,获得 5 Llama coin 的奖励。最重磅的莫过于与 Llama King 进行对话来获取 Llama coin 的奖励,每次对话需要 0.025 个 wAR,每次奖励会按照你提供的 prompt 进行分级。最高有 100 Llama coin 的奖励。其中对 prompt 的分级就是依赖于运行在 AO 上的 AI 进程实现的。
另外,还有越来越多玩家自定义的 NPC,也可以与他们互动,相信玩法会越来越丰富。比如,Arweave 生态的老牌 swap 应用,已经提供了 Permaswap Llama,可以直接通过该 NPC 在上面换取 Llama coin。也有 Llama Lottery NPC,已经有超过 200 人次参与。
友情链接:
通过跨链桥获取 wAR:https://aox.arweave.dev/#/beta
简单介绍游戏之后,我们接下来进入今天的主题。首先,我们先来介绍下 Llama Land 强大的扩展性。
因为 Llama NPC 本质上就是一个 AO Process,因此创建一个 AO Process 是必须的。另外,由于需要移动 NPC,监听一些事件等需求,因此我们需要创建一个支持定时任务的 AO Process。另外,为了业务的方便,我们可以创建带有 sqlite 的 AO Process(这点可选)。
# 创建进程
aos 你NPC的名字 --sqlite --module=GYrbbe0VbHim_7Hi6zrOpHQXrSQz07XNtwCnfbFo2I0 --cron 5-minutes
# 打开定时监听
.monitor
注册自己的 Llama NPC
-- 选择自己 NPC 需要注册的地图,这里示例中就是 Llama Land 的 Process Id
TARGET_WORLD_PID = TARGET_WORLD_PID or "9a_YP6M7iN7b6QUoSvpoV3oe3CqxosyuJnraCucy5ss"
-- 判断是否已经注册
if HasReg == false then
Register()
HasReg = true
end
function Register()
ao.send({
Target = TARGET_WORLD_PID,
Tags = {
Action = "Reality.EntityCreate",
},
Data = json.encode({
Type = "Avatar",
Metadata = {
DisplayName = "你的 NPC 名称",
SkinNumber = 1,
Interaction = {
Type = 'SchemaExternalForm',
Id = '表单弹框的标题'
},
},
}),
})
end
Action = "Reality.EntityCreate" 这个 Action 就是注册自己 NPC 的句柄。如果自己创建了,那么在执行就会更新这个 NPC。
Data 里面存在很多的字段,具体含义如下,
如果 Llama NPC 被注册到地图中以后,长时间没有交互信息,那么 Llama NPC 就会从地图中下线。如果你想要让自己的 Llama NPC 在地图上持续存在,一般有两种方式:
ao.send({
Target = TARGET_WORLD_PID,
Tags = {
Action = 'Reality.EntityFix',
},
})
ao.send({
Target = TARGET_WORLD_PID,
Tags = {
Action = "Reality.EntityUpdatePosition",
},
Data = json.encode({
Position = {
math.random(-3, 3),
math.random(12, 15),
},
}),
})
SchemaExternalForm 交互模式
ActionName
是动作的唯一标识符。一个模式(Schema)中可以声明多个动作。Title
和 Description
是按照上面 Permaswap NPC 的截图,那么 Title
就是 Swap for some $llama coins ? 剩下的那一大段就是Description
,这两个字段主要为了向玩家说明这个交互的作用。Target
这次交互是让玩家向这个 Target Process 发送一条消息。Schema
字段是可选的。如果没有定义,该动作将被禁用。Tags
是必需的,并定义了该动作接受的标签结构。Data
定义了该动作接受的消息中的 JSON 数据结构,如果适用的话。Result
定义了回复消息数据中 JSON 数据的预期格式。我们看个例子,注意Tags
需要的是一个 JSON 对应的字符串。
Handlers.add(
'SchemaExternal',
Handlers.utils.hasMatchingTag('Action', 'SchemaExternal'),
function(msg)
ao.send({
Target = msg.From,
Tags = { Type = 'SchemaExternal' },
Data = json.encode({
Lottery = {
Target = LlamaCoinProcessId,
Title = "Attend Llama Lottery?",
Description = [[
Pay 1 Llama Coin to enter the Llama Lottery. The winner will share 80% of the prize pool in Llama Coins.
The winner will be determined when there are 10 participants.
]],
Schema = {
Tags = json.decode(LlamaLotteryAttendSchemaTags()),
},
},
})
})
end
)
function LlamaLotteryAttendSchemaTags()
return [[
{
"type": "object",
"required": [
"Action",
"Recipient",
"Quantity",
"X-Transfer-Purpose"
],
"properties": {
"Action": {
"type": "string",
"const": "Transfer"
},
"Recipient": {
"type": "string",
"const": "]] .. POOL .. [["
},
"Quantity": {
"type": "number",
"const": ]] .. 1 .. [[,
"$comment": "]] .. 1000000000000 .. [["
},
"X-Transfer-Purpose": {
"type": "string",
"const": "Lottery"
},
}
}
]]
end
注意:当整数字段具有 comment
属性时,该属性会被用来乘以值后再发送。用于将整数金额转换为基本单位的数量。
到这里已经介绍的差不多了,大家快来构建自己的 Llama NPC 吧!
免责声明:本文不代表 PermaDAO 的观点或立场。PermaDAO 不提供投资建议,亦不为任何项目背书。请读者遵守所在国法律,合规进行 Web3 活动。
🔗 关于 PermaDAO:Website | Twitter | Telegram | Discord | Medium | Youtube
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!