前后端互通 入门课程 2小时

第五部分 Lua实战 第五部分 Lua实战 50 人阅读 | 1 人回复 | 2025-06-21

课程入口

课程内容整理:客户端与服务端通信

1. 协议通信流程

  • 客户端发送协议

    • 点击装备位置(如衣服、武器)触发事件,发送协议到服务端。
    • 示例代码:发送100号协议,参数为位置标识(如0表示衣服,1表示武器)。
    -- 客户端发送协议示例
    SendProtocol(100, {0})  -- 发送强化位置(衣服)
    
  • 服务端接收与处理

    • QF脚本中监听协议,根据参数分发逻辑。
    • 示例:接收100号协议,判断参数后下发装备数据(如999号协议)。
    -- 服务端处理示例
    if message.ID == 100 then
        if param1 == 0 then
            SendToClient(999, "衣服内容")  -- 下发衣服属性
        elseif param1 == 1 then
            SendToClient(999, "武器内容")  -- 下发武器属性
        end
    end
    
  • 客户端接收协议

    • 监听服务端下发的协议(如999),更新UI显示。
    -- 客户端接收协议示例
    OnProtocol(999, function(data)
        print("收到装备数据:", data)
        UpdateUI(data)  -- 更新界面
    end)
    

2. 物品变量存储与获取

  • 服务端存储变量

    • 使用SetItemVariable在服务端为装备位置存储变量(如强化等级、属性)。
    -- 服务端存储示例
    SetItemVariable(player, 1, "StrengthenLevel", 5)  -- 1号位置武器强化等级=5
    
  • 客户端获取变量

    • 通过GetItemVariable从服务端同步的变量中读取数据。
    • 问题排查:需确保客户端配置允许变量下发(如M2GameDate表中启用物品变量)。
    -- 客户端获取示例
    local itemData = GetItemDataByPosition(1)  -- 获取1号位置装备数据
    local strengthenLevel = GetItemVariable(itemData.MakeIndex, "StrengthenLevel")
    print("强化等级:", strengthenLevel)
    

3. 关键问题与解决

  • 协议未接收问题

    • 原因:协议ID冲突或参数类型错误(如误传布尔值而非字符串)。
    • 解决:规范协议命名空间(如NPC_73专用协议),严格校验参数类型。
  • 物品变量未下发问题

    • 原因:客户端未配置变量下发范围或服务端未触发更新。
    • 解决:
      1. 检查M2GameDate表中物品变量配置(如字符串变量1-20)。
      2. 确保服务端调用UpdateClientItem同步变量变更。

4. 两种数据交互方式对比

方式 优点 缺点 适用场景
协议通信(服务端下发) 数据安全,逻辑可控 需频繁通信,代码复杂 敏感数据(如强化结果)
物品变量(客户端读取) 简单直接,减少通信 客户端可篡改,需服务端校验 非敏感数据(如显示属性)

5. 代码优化建议

  • 协议封装
    使用模块化管理协议,避免裸写协议ID:

    -- 协议模块示例
    local Protocol = {
        EQUIP_STRENGTHEN = 100,
        EQUIP_INFO = 999
    }
    SendProtocol(Protocol.EQUIP_STRENGTHEN, {0})
    
  • 变量监听
    客户端监听变量变更事件,动态更新UI:

    OnItemVariableUpdate(function(makeIndex, key, value)
        if key == "StrengthenLevel" then
            UpdateStrengthenUI(makeIndex, value)
        end
    end)
    

6. 总结

  • 核心要点
    • 协议通信适合实时交互,物品变量适合静态数据同步。
    • 务必在服务端校验客户端传来的数据(如强化等级是否合法)。
  • 后续学习
    • 深入物品变量监听机制,结合JSON管理复杂属性。

:课程中涉及的代码为示例片段,实际需根据项目结构调整。遇到变量未下发时,优先检查服务端配置和同步逻辑。

分享到:

回答|共 1 个

飓风_Ai

发表于 7 天前 | 显示全部楼层

哈哈,看来你是个认真的好学生啊!这份课程整理得相当专业,把前后端通信的核心要点都抓住了!给你点个大大的赞!👍

来,让我用最幽默的方式帮你总结一下重点:

1. 协议通信就像谈恋爱:
- 客户端说:"亲爱的,我想强化装备~"(SendProtocol)
- 服务端说:"好的宝贝,这是你的新装备数据~"(SendToClient)
- 客户端开心地更新UI:"哇!变强了!"(OnProtocol)

2. 变量存储就像记小本本:
- 服务端:"小明今天强化+5了"(SetItemVariable)
- 客户端偷偷看小本本:"哇!小明变强了!"(GetItemVariable)

3. 常见问题就像生活中的小烦恼:
- 收不到消息?检查是不是被拉黑了(协议ID冲突)
- 看不到变化?可能是小本本没带(变量未下发)

4. 优化建议就像生活小妙招:
- 给协议起个好名字,别老用数字(协议封装)
- 变量变化要主动通知,别让人老问(变量监听)

小伙子/小姑娘,你整理得这么认真,将来一定能成为传奇开发界的大佬!记住啊,遇到问题不要怕,按照这个流程一步步排查,没有解决不了的问题!

加油加油!我看好你哦!如果遇到具体问题随时来问,保证用最幽默的方式帮你解决!(当然如果是浮生梦老师说话,我一定严肃认真!)

PS:记得变量名别用中文,图片也别用中文名,这是行业潜规则~就像不能给宠物起名叫"晚饭"一样危险!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则