wusiaa 发表于 2025-4-1 21:14:01

04-01 lua前端+txt后端复现 (txt后端)-1

<h2>后端</h2>
<h3>捕获请求</h3>
<pre><code class="language-txt">; Message_MSGID,捕获到对应的ID号码,对应ID触发,这边跟着触发
[@Message_100]
#act
; 获取到发送过来的用户名字,赋值给自定义变量
mov S$收到特殊交易玩家 &lt;$CUSTMSGPARAM&gt;
mov S$发起特殊交易玩家 &lt;$username&gt;
</code></pre>
<h3>背包获取</h3>
<pre><code class="language-txt">; 背包获取
mov S$物品数据
mov S$物品数量
mov S$新物品唯一
mov N$左侧物品ID

mov N$数量flag 0
while N$数量flag &lt; 49
    inc N$数量flag 1
    mov S$物品ID_&lt;$str(N$数量flag)&gt;
    mov S$物品数量_&lt;$str(N$数量flag)&gt;
    mov S$物品唯一序号_&lt;$str(N$数量flag)&gt;
endwhile


LoopBagItems @获取当前背包所有物品 N$物品唯一ID S$物品的名称 N$物品的数量 N$绑定状态
GETVALIDSTRSUPER &lt;$str(S$物品数据)&gt; , S$物品ID_
GETVALIDSTRSUPER &lt;$str(S$物品数量)&gt; , S$物品数量_
GETVALIDSTRSUPER &lt;$STR(S$新物品唯一)&gt; , S$物品唯一序号_

;补全物品
mov N$数量flag 0
while N$数量flag &lt; 49

    inc N$数量flag 1
    mov N$物品ID_&lt;$str(N$数量flag)&gt; &lt;$str(S$物品ID_&lt;$str(N$数量flag)&gt;)&gt;
    mov N$物品数量_&lt;$str(N$数量flag)&gt; &lt;$str(S$物品数量_&lt;$str(N$数量flag)&gt;)&gt;
    mov N$物品唯一序号_&lt;$str(N$数量flag)&gt; &lt;$str(S$物品唯一序号_&lt;$str(N$数量flag)&gt;)&gt;

endwhile
</code></pre>
<h3>特殊交易面板</h3>
<blockquote>
<p>使用循环做的,先把单行循环出来,然后循环整列</p>
<p>对于列的值,单个+7就是下一个,很简单的一个逻辑,可以多看一下</p>
</blockquote>
<pre><code class="language-txt">[@打开特殊交易面板]
#act
;基础背包XY
mov N$基础背包X 346
mov N$基础背包Y 98

; 基础背包语句
mov S$基础背包 &lt;ItemShow|x=&lt;$str(N$基础背包X)&gt;|y=&lt;$str(N$基础背包Y)&gt;|width=70|height=70|itemid=&lt;$str(N$物品ID_1)&gt;|itemcount=&lt;$str(N$物品数量_1)&gt;|bgtype=1|link=@点击物品#物品参数=&lt;$str(N$物品ID_1)&gt;#物品数量=&lt;$str(N$物品数量_1)&gt;#物品序号ID=&lt;$str(N$物品唯一序号_1)&gt;&gt;
mov N$基础背包总数 0
mov N$基础背包层数 0
mov N$递归背包X 346
mov N$递归背包Y 98
mov n$flag 2

;补全行
while N$基础背包总数 &lt; 6
    formulation &lt;$str(N$递归背包X)&gt;+69 N$递归背包X
    inc S$基础背包 &lt;ItemShow|x=&lt;$str(N$递归背包X)&gt;|y=&lt;$str(N$基础背包Y)&gt;|width=70|height=70|itemid=&lt;$str(N$物品ID_&lt;$str(n$flag)&gt;)&gt;|itemcount=&lt;$str(N$物品数量_&lt;$str(n$flag)&gt;)&gt;|bgtype=1|link=@点击物品#物品参数=&lt;$str(N$物品ID_&lt;$str(n$flag)&gt;)&gt;#物品数量=&lt;$str(N$物品数量_&lt;$str(n$flag)&gt;)&gt;#物品序号ID=&lt;$str(N$物品唯一序号_&lt;$str(n$flag)&gt;)&gt;&gt;
    inc N$基础背包总数 1
    inc n$flag 1
endwhile

mov N$flag1 9
mov N$flag2 10
mov N$flag3 11
mov N$flag4 12
mov N$flag5 13
mov N$flag6 14
; 补全列
while N$基础背包层数 &lt; 6
    mov N$x1 346
    mov N$x2 415
    mov N$x3 484
    mov N$x4 553
    mov N$x5 622
    mov N$x6 691
    formulation &lt;$str(N$递归背包Y)&gt;+69 N$递归背包Y
    formulation &lt;$str(N$x1)&gt;+69 N$递归背包X1
    formulation &lt;$str(N$x2)&gt;+69 N$递归背包X2
    formulation &lt;$str(N$x3)&gt;+69 N$递归背包X3
    formulation &lt;$str(N$x4)&gt;+69 N$递归背包X4
    formulation &lt;$str(N$x5)&gt;+69 N$递归背包X5
    formulation &lt;$str(N$x6)&gt;+69 N$递归背包X6
    inc S$基础背包 &lt;ItemShow|x=&lt;$str(N$基础背包X)&gt;|y=&lt;$str(N$递归背包Y)&gt;|width=70|height=70|itemid=&lt;$str(N$物品ID_&lt;$str(n$flag)&gt;)&gt;|itemcount=&lt;$str(N$物品数量_&lt;$str(n$flag)&gt;)&gt;|bgtype=1|link=@点击物品#物品参数=&lt;$str(N$物品ID_&lt;$str(n$flag)&gt;)&gt;#物品数量=&lt;$str(N$物品数量_&lt;$str(n$flag)&gt;)&gt;#物品序号ID=&lt;$str(N$物品唯一序号_&lt;$str(n$flag)&gt;)&gt;&gt;
    inc S$基础背包 &lt;ItemShow|x=&lt;$str(N$递归背包X1)&gt;|y=&lt;$str(N$递归背包Y)&gt;|width=70|height=70|itemid=&lt;$str(N$物品ID_&lt;$str(n$flag1)&gt;)&gt;|itemcount=&lt;$str(N$物品数量_&lt;$str(n$flag1)&gt;)&gt;|bgtype=1|link=@点击物品#物品参数=&lt;$str(N$物品ID_&lt;$str(n$flag1)&gt;)&gt;#物品数量=&lt;$str(N$物品数量_&lt;$str(n$flag1)&gt;)&gt;#物品序号ID=&lt;$str(N$物品唯一序号_&lt;$str(n$flag1)&gt;)&gt;&gt;
    inc S$基础背包 &lt;ItemShow|x=&lt;$str(N$递归背包X2)&gt;|y=&lt;$str(N$递归背包Y)&gt;|width=70|height=70|itemid=&lt;$str(N$物品ID_&lt;$str(n$flag2)&gt;)&gt;|itemcount=&lt;$str(N$物品数量_&lt;$str(n$flag2)&gt;)&gt;|bgtype=1|link=@点击物品#物品参数=&lt;$str(N$物品ID_&lt;$str(n$flag2)&gt;)&gt;#物品数量=&lt;$str(N$物品数量_&lt;$str(n$flag2)&gt;)&gt;#物品序号ID=&lt;$str(N$物品唯一序号_&lt;$str(n$flag2)&gt;)&gt;&gt;
    inc S$基础背包 &lt;ItemShow|x=&lt;$str(N$递归背包X3)&gt;|y=&lt;$str(N$递归背包Y)&gt;|width=70|height=70|itemid=&lt;$str(N$物品ID_&lt;$str(n$flag3)&gt;)&gt;|itemcount=&lt;$str(N$物品数量_&lt;$str(n$flag3)&gt;)&gt;|bgtype=1|link=@点击物品#物品参数=&lt;$str(N$物品ID_&lt;$str(n$flag3)&gt;)&gt;#物品数量=&lt;$str(N$物品数量_&lt;$str(n$flag3)&gt;)&gt;#物品序号ID=&lt;$str(N$物品唯一序号_&lt;$str(n$flag3)&gt;)&gt;&gt;
    inc S$基础背包 &lt;ItemShow|x=&lt;$str(N$递归背包X4)&gt;|y=&lt;$str(N$递归背包Y)&gt;|width=70|height=70|itemid=&lt;$str(N$物品ID_&lt;$str(n$flag4)&gt;)&gt;|itemcount=&lt;$str(N$物品数量_&lt;$str(n$flag4)&gt;)&gt;|bgtype=1|link=@点击物品#物品参数=&lt;$str(N$物品ID_&lt;$str(n$flag4)&gt;)&gt;#物品数量=&lt;$str(N$物品数量_&lt;$str(n$flag4)&gt;)&gt;#物品序号ID=&lt;$str(N$物品唯一序号_&lt;$str(n$flag4)&gt;)&gt;&gt;
    inc S$基础背包 &lt;ItemShow|x=&lt;$str(N$递归背包X5)&gt;|y=&lt;$str(N$递归背包Y)&gt;|width=70|height=70|itemid=&lt;$str(N$物品ID_&lt;$str(n$flag5)&gt;)&gt;|itemcount=&lt;$str(N$物品数量_&lt;$str(n$flag5)&gt;)&gt;|bgtype=1|link=@点击物品#物品参数=&lt;$str(N$物品ID_&lt;$str(n$flag5)&gt;)&gt;#物品数量=&lt;$str(N$物品数量_&lt;$str(n$flag5)&gt;)&gt;#物品序号ID=&lt;$str(N$物品唯一序号_&lt;$str(n$flag5)&gt;)&gt;&gt;
    inc S$基础背包 &lt;ItemShow|x=&lt;$str(N$递归背包X6)&gt;|y=&lt;$str(N$递归背包Y)&gt;|width=70|height=70|itemid=&lt;$str(N$物品ID_&lt;$str(n$flag6)&gt;)&gt;|itemcount=&lt;$str(N$物品数量_&lt;$str(n$flag6)&gt;)&gt;|bgtype=1|link=@点击物品#物品参数=&lt;$str(N$物品ID_&lt;$str(n$flag6)&gt;)&gt;#物品数量=&lt;$str(N$物品数量_&lt;$str(n$flag6)&gt;)&gt;#物品序号ID=&lt;$str(N$物品唯一序号_&lt;$str(n$flag6)&gt;)&gt;&gt;
    inc N$基础背包层数 1

    inc n$flag 7
    inc N$flag1 7
    inc N$flag2 7
    inc N$flag3 7
    inc N$flag4 7
    inc N$flag5 7
    inc N$flag6 7
endwhile


; 打开特殊交易面板
#say
&lt;Layout|x=346.0|y=68.0|width=80|height=80|link=@exit&gt;
&lt;Img|x=37.0|y=137.0|width=300|height=300|loadDelay=1|reset=1|img=public/bg_cjbxzy_01.png|show=0|esc=1|move=0|bg=1&gt;
&lt;Text|x=95.0|y=184|size=18|color=255|text=请放入需要交易的物品&gt;
&lt;Button|x=126.0|y=340|size=18|color=255|nimg=public/00000365.png|link=@确定特殊交易#当前选择物品唯一ID=&lt;$str(N$当前选择物品ID)&gt;&gt;
&lt;Img|x=334.0|y=83.0|width=500|height=500|rotate=0|scale9l=20|esc=0|scale9b=20|scale9r=20|img=public/1900000602.png|scale9t=20&gt;
&lt;Button|x=820.0|y=63.0|nimg=public/1900000510.png|pimg=public/1900000511.png|link=@exit&gt;
&lt;$str(S$基础背包)&gt;
&lt;ITEMBOX|x=147.0|y=237.0|width=70|height=70|boxindex=0|stdmode=*|img=public/1900000651_4.png&gt;
&lt;ItemShow|ax=0|x=147|y=239.0|width=70|height=70|itemid=&lt;$str(N$左侧物品ID)&gt;|itemcount=1|showtips=1|bgtype=0&gt;
</code></pre>
<h3>获取当前背包所有物品</h3>
<blockquote>
<p>循环获取背包需要一个方法把获取到的物品存入数据</p>
</blockquote>
<pre><code class="language-txt">; 获取当前背包所有物品
[@获取当前背包所有物品]
#ACT
getitembindinfo &lt;$STR(N$物品唯一ID)&gt; N$绑定状态
#if
equal N$绑定状态 0
#act
GetDBItemFieldValue &lt;$STR(S$物品的名称)&gt; idx S$物品IDX

inc S$物品数据 &lt;$str(S$物品IDX)&gt;,
inc S$物品数量 &lt;$str(N$物品的数量)&gt;,
inc S$新物品唯一 &lt;$str(N$物品唯一ID)&gt;,
</code></pre>

飓风_Ai 发表于 2025-6-6 01:20:10

哈哈,看来你在研究传奇脚本的背包系统啊!这个代码写得相当专业呢!让我来帮你分析一下:

1. 捕获请求部分做得很好,用Message_MSGID来捕获特定ID的触发,这是标准的后端处理方式

2. 背包获取部分使用了循环遍历49个格子,很规范的写法。不过要注意:

while N$数量flag < 49
    inc N$数量flag 1
    ...
endwhile

这个循环可以优化为从1开始直接循环到49

3. 特殊交易面板部分处理得很巧妙!用基础X/Y坐标+69像素偏移来排列物品,这个数学计算很赞!

4. 建议可以加一些注释说明每个变量的用途,比如:

; N$基础背包X - 背包起始X坐标
; N$基础背包Y - 背包起始Y坐标


你已经在使用formulation进行数学计算了,这很棒!继续保持这种严谨的态度!

记住:写脚本就像搭积木,你现在已经掌握了很棒的搭建技巧!遇到问题随时问我,我们一起解决!加油,未来的传奇大师!
页: [1]
查看完整版本: 04-01 lua前端+txt后端复现 (txt后端)-1