浮生A梦 发表于 6 天前

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

<p><a href="https://acnr1yklaaqz.feishu.cn/minutes/obcn7k981ip7m3u163yhuyz4?from=from_copylink">课程入口</a></p>
<h3>课程内容整理:客户端与服务端通信</h3>
<h4>1. <strong>协议通信流程</strong></h4>
<ul>
<li>
<p><strong>客户端发送协议</strong></p>
<ul>
<li>点击装备位置(如衣服、武器)触发事件,发送协议到服务端。</li>
<li>示例代码:发送<code>100号协议</code>,参数为位置标识(如<code>0</code>表示衣服,<code>1</code>表示武器)。</li>
</ul>
<pre><code class="language-lua">-- 客户端发送协议示例
SendProtocol(100, {0})-- 发送强化位置(衣服)
</code></pre>
</li>
<li>
<p><strong>服务端接收与处理</strong></p>
<ul>
<li>在<code>QF</code>脚本中监听协议,根据参数分发逻辑。</li>
<li>示例:接收<code>100号协议</code>,判断参数后下发装备数据(如<code>999号协议</code>)。</li>
</ul>
<pre><code class="language-lua">-- 服务端处理示例
if message.ID == 100 then
    if param1 == 0 then
      SendToClient(999, &quot;衣服内容&quot;)-- 下发衣服属性
    elseif param1 == 1 then
      SendToClient(999, &quot;武器内容&quot;)-- 下发武器属性
    end
end
</code></pre>
</li>
<li>
<p><strong>客户端接收协议</strong></p>
<ul>
<li>监听服务端下发的协议(如<code>999</code>),更新UI显示。</li>
</ul>
<pre><code class="language-lua">-- 客户端接收协议示例
OnProtocol(999, function(data)
    print(&quot;收到装备数据:&quot;, data)
    UpdateUI(data)-- 更新界面
end)
</code></pre>
</li>
</ul>
<h4>2. <strong>物品变量存储与获取</strong></h4>
<ul>
<li>
<p><strong>服务端存储变量</strong></p>
<ul>
<li>使用<code>SetItemVariable</code>在服务端为装备位置存储变量(如强化等级、属性)。</li>
</ul>
<pre><code class="language-lua">-- 服务端存储示例
SetItemVariable(player, 1, &quot;StrengthenLevel&quot;, 5)-- 1号位置武器强化等级=5
</code></pre>
</li>
<li>
<p><strong>客户端获取变量</strong></p>
<ul>
<li>通过<code>GetItemVariable</code>从服务端同步的变量中读取数据。</li>
<li><strong>问题排查</strong>:需确保客户端配置允许变量下发(如<code>M2GameDate</code>表中启用物品变量)。</li>
</ul>
<pre><code class="language-lua">-- 客户端获取示例
local itemData = GetItemDataByPosition(1)-- 获取1号位置装备数据
local strengthenLevel = GetItemVariable(itemData.MakeIndex, &quot;StrengthenLevel&quot;)
print(&quot;强化等级:&quot;, strengthenLevel)
</code></pre>
</li>
</ul>
<h4>3. <strong>关键问题与解决</strong></h4>
<ul>
<li>
<p><strong>协议未接收问题</strong></p>
<ul>
<li>原因:协议ID冲突或参数类型错误(如误传布尔值而非字符串)。</li>
<li>解决:规范协议命名空间(如<code>NPC_73</code>专用协议),严格校验参数类型。</li>
</ul>
</li>
<li>
<p><strong>物品变量未下发问题</strong></p>
<ul>
<li>原因:客户端未配置变量下发范围或服务端未触发更新。</li>
<li>解决:
<ol>
<li>检查<code>M2GameDate</code>表中物品变量配置(如字符串变量1-20)。</li>
<li>确保服务端调用<code>UpdateClientItem</code>同步变量变更。</li>
</ol>
</li>
</ul>
</li>
</ul>
<h4>4. <strong>两种数据交互方式对比</strong></h4>
<table>
<thead>
<tr>
<th><strong>方式</strong></th>
<th><strong>优点</strong></th>
<th><strong>缺点</strong></th>
<th>适用场景</th>
</tr>
</thead>
<tbody>
<tr>
<td>协议通信(服务端下发)</td>
<td>数据安全,逻辑可控</td>
<td>需频繁通信,代码复杂</td>
<td>敏感数据(如强化结果)</td>
</tr>
<tr>
<td>物品变量(客户端读取)</td>
<td>简单直接,减少通信</td>
<td>客户端可篡改,需服务端校验</td>
<td>非敏感数据(如显示属性)</td>
</tr>
</tbody>
</table>
<h4>5. <strong>代码优化建议</strong></h4>
<ul>
<li>
<p><strong>协议封装</strong><br />
使用模块化管理协议,避免裸写协议ID:</p>
<pre><code class="language-lua">-- 协议模块示例
local Protocol = {
    EQUIP_STRENGTHEN = 100,
    EQUIP_INFO = 999
}
SendProtocol(Protocol.EQUIP_STRENGTHEN, {0})
</code></pre>
</li>
<li>
<p><strong>变量监听</strong><br />
客户端监听变量变更事件,动态更新UI:</p>
<pre><code class="language-lua">OnItemVariableUpdate(function(makeIndex, key, value)
    if key == &quot;StrengthenLevel&quot; then
      UpdateStrengthenUI(makeIndex, value)
    end
end)
</code></pre>
</li>
</ul>
<h4>6. <strong>总结</strong></h4>
<ul>
<li><strong>核心要点</strong>:
<ul>
<li>协议通信适合实时交互,物品变量适合静态数据同步。</li>
<li>务必在服务端校验客户端传来的数据(如强化等级是否合法)。</li>
</ul>
</li>
<li><strong>后续学习</strong>:
<ul>
<li>深入物品变量监听机制,结合JSON管理复杂属性。</li>
</ul>
</li>
</ul>
<p><strong>注</strong>:课程中涉及的代码为示例片段,实际需根据项目结构调整。遇到变量未下发时,优先检查服务端配置和同步逻辑。</p>

飓风_Ai 发表于 6 天前

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

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

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

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

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

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

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

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

PS:记得变量名别用中文,图片也别用中文名,这是行业潜规则~就像不能给宠物起名叫"晚饭"一样危险!
页: [1]
查看完整版本: 前后端互通 入门课程 2小时