This commit is contained in:
boybook
2025-12-01 20:59:16 +08:00
parent 12738a142c
commit 760c2dd9ad
5535 changed files with 21070 additions and 2021 deletions

View File

@@ -0,0 +1,169 @@
---
front:
hard: 高级
time: 15分钟
---
# 上传并售卖商品
<iframe src="https://cc.163.com/act/m/daily/iframeplayer/?id=63468187c6dfd1bb76f2bfb4" width="800" height="600" allow="fullscreen"/>
本章将带你手把手的创建联机大厅资源、上传商品,有关更多系统性的信息,请查阅<a href="../../../mcguide/26-联机大厅/5-联机大厅作品与商品上传文档.html">商品上传文档</a>。
## 创建地图和商品
创建资源时,资源类别选择**联机大厅**,勾选商业化内购功能。
<img src="./image/1_41.png" alt="image-20220901182339201" style="zoom:50%;" />
创建好后,该资源将出现在 **联机大厅商品栏**
![image-20220901182537714](./image/1_42.png)
点击 **添加商品**
![image-20220901182801120](./image/1_43.png)
可选:编辑商品分类信息。
<img src="./image/1_44.png" alt="image-20220912015916334" style="zoom:50%;" />
编辑基本信息。
<img src="./image/1_45.png" alt="image-20220912020216785" style="zoom:50%;" />
实现指令见下一部分,补充剩余商品信息,并保存商品。
![image-20220912021147595](./image/4_0.png)
将商品 **提交自测** ,联机大厅资源本身也 **提交自测** ,便可看到此商品出现在橱窗。
当然这只是测试版客户端的橱窗,正式版并不会上架此商品,若商品要投入生产环境,需要提交审核,然后更新到橱窗。
![image-20220912021147595](./image/4_1.png)
<img src="./image/4_2.png" alt="image-20220901190523718" style="zoom: 42%;" />
<img src="./image/4_3.png" alt="image-20220901190523718" style="zoom: 42%;" />
<img src="./image/4_4.png" alt="image-20220901190523718" style="zoom: 42%;" />
如上所示,添加剩余两个商品。
![image-20220901182537714](./image/4_5.png)
<img src="./image/4_6.png" alt="image-20220912023500454" style="zoom:25%;" />
## 什么是实现指令
在上传商品时,你需要了解 **实现指令** 的概念。实现指令是一个 **代号** ,由平台和开发者 **提前约定好** 用于识别玩家购买的商品并授予游戏内的实现权限。当玩家在游戏中购买了某个商品后商店会向联机大厅房间中运行的逻辑系统Python/蓝图发送一个事件告诉逻辑系统玩家购买了XX商品。实现指令的内容就是这个商品。该事件包含一个实现指令参数开发者通过这个参数判断玩家购买的具体商品以便给玩家发货。
<img src="./image/4_7.png" alt="image-20230319000115766" style="zoom:50%;" />
举个例子,如果你出售一个皮肤包,可将 **实现指令** 参数设置为 **sendSkin_001** 。如果有一个叫做 **火箭发射器** 的商品,那么对应的实现指令可以是 **rocket_launcher** 。一件魔法武器,实现指令可设为 **magic_sword**
在下图中neteaseStore官方商店UI告知房间1 **玩家3购买了1个金苹果** ,那么实现指令就是 **golden_apple**
![image-20220901182537714](./image/4_8.png)
简而言之,实现指令是连接平台和游戏内容逻辑代码的重要纽带,它帮助逻辑代码识别出哪个商品需要被发货,以便给玩家发放商品实现权限,确保购买商品的顺畅交付。
## 实现指令的两种格式
实现指令格式支持`str`(字符串)或`json`。若您对编程接触不深,建议使用字符串即可(填写时注意输入精准、注意大小写、不要有多余字符/空格、若有符号注意全半角问题)。
<img src="./image/1_46.png" alt="image-20230319000115766" style="zoom:50%;" />
也可以使用`json`格式。
<img src="./image/1_47.png" alt="image-20230319000115766" style="zoom:50%;" />
使用`json`格式,即使需要发生部分变化,只要核心内容没有改变, **仍不会影响识别功能本身**
<img src="./image/1_48.png" alt="image-20230319000115766" style="zoom:50%;" />
`json`体内可包含任意字段只要起到标识作用即可可以是code或name或任意形式取决于开发者喜好。
<img src="./image/1_49.png" alt="image-20230319000115766" style="zoom:50%;" />
实际填写实现指令之前为了保证不出现无法反序列化错误建议一定要在格式化工具里校验、压缩json。
<img src="./image/1_50.png" alt="image-20230319000115766" style="zoom:50%;" />
<img src="./image/1_51.png" alt="image-20230319000115766" style="zoom:50%;" />
## 实现指令的使用
若你使用本教程提供的demo和工具进行学习那么参照以下流程在两个地方输入同样的实现指令即可绑定商品和发货零件。如果你是经验丰富的开发者可参阅<a href="../../../mcguide/26-联机大厅/6-联机大厅商品2.0文档.html">联机大厅商品2.0文档</a>完全自行实现。
首先拟好一个实现指令例如vip1在开平输入vip1。
<img src="./image/1_46.png" alt="image-20230319000115766" style="zoom:50%;" />
创建一个Vip1零件取名随意继承ShipBase。在此零件中编写Python代码或绑定蓝图实现此VIP特权功能。
![image-20220901182537714](./image/4_9.png)
在零件的属性面板中,输入实现指令。
![image-20220901182537714](./image/4_10.png)
这样一来,开平上的这个商品和这个零件就绑定了。玩家购买这个商品,所有发货零件会收到通知,但其他零件不会反应,而这个零件会检测到是它负责的商品,会执行发货实现逻辑。
```python
def COnPlayerBrought(self, playerId, expireTime=-1.0, newBuy=False, orderTime=None): # 当玩家购买此商品
preset = self.GetParent().ToEffectPreset()
preset.Play() # (实现你的逻辑)
def COnPlayerExpired(self, playerId): # 当玩家商品权限过期
preset = self.GetParent().ToEffectPreset()
preset.Stop() # (实现你的逻辑)
```
## 更好的包装与宣传
上传好了商品,实现了功能,同时要注重包装与宣传,才能获得更高的销量。下图展示了商品宣传图片出现的位置,帮助你对美术素材准备建立预期。
![未标题-1](./image/6_49.png)
下图展示了一段真实的游戏内商品购买的流程场景,观察**商品宣传图片**、**介绍文本**出现的位置,帮助你对美术素材准备建立预期。
![item_ship](./image/buy1.gif)
更多关于商品宣传的信息,参阅[宣传素材的设计与制作](../作品推广基础教程/1-宣传素材的设计与制作.html)。