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

惊鸿学习笔记 惊鸿学习笔记 59 人阅读 | 1 人回复 | 2025-04-01

后端

捕获请求

; Message_MSGID,捕获到对应的ID号码,对应ID触发,这边跟着触发
[@Message_100]
#act
; 获取到发送过来的用户名字,赋值给自定义变量
mov S$收到特殊交易玩家 <$CUSTMSGPARAM>
mov S$发起特殊交易玩家 <$username>

背包获取

; 背包获取
mov S$物品数据
mov S$物品数量
mov S$新物品唯一
mov N$左侧物品ID

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


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

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

    inc N$数量flag 1
    mov N$物品ID_<$str(N$数量flag)> <$str(S$物品ID_<$str(N$数量flag)>)>
    mov N$物品数量_<$str(N$数量flag)> <$str(S$物品数量_<$str(N$数量flag)>)>
    mov N$物品唯一序号_<$str(N$数量flag)> <$str(S$物品唯一序号_<$str(N$数量flag)>)>

endwhile

特殊交易面板

使用循环做的,先把单行循环出来,然后循环整列

对于列的值,单个+7就是下一个,很简单的一个逻辑,可以多看一下

[@打开特殊交易面板]
#act
;基础背包XY
mov N$基础背包X 346
mov N$基础背包Y 98

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

;补全行
while N$基础背包总数 < 6
    formulation <$str(N$递归背包X)>+69 N$递归背包X
    inc S$基础背包 <ItemShow|x=<$str(N$递归背包X)>|y=<$str(N$基础背包Y)>|width=70|height=70|itemid=<$str(N$物品ID_<$str(n$flag)>)>|itemcount=<$str(N$物品数量_<$str(n$flag)>)>|bgtype=1|link=@点击物品#物品参数=<$str(N$物品ID_<$str(n$flag)>)>#物品数量=<$str(N$物品数量_<$str(n$flag)>)>#物品序号ID=<$str(N$物品唯一序号_<$str(n$flag)>)>>
    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$基础背包层数 < 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 <$str(N$递归背包Y)>+69 N$递归背包Y
    formulation <$str(N$x1)>+69 N$递归背包X1
    formulation <$str(N$x2)>+69 N$递归背包X2
    formulation <$str(N$x3)>+69 N$递归背包X3
    formulation <$str(N$x4)>+69 N$递归背包X4
    formulation <$str(N$x5)>+69 N$递归背包X5
    formulation <$str(N$x6)>+69 N$递归背包X6
    inc S$基础背包 <ItemShow|x=<$str(N$基础背包X)>|y=<$str(N$递归背包Y)>|width=70|height=70|itemid=<$str(N$物品ID_<$str(n$flag)>)>|itemcount=<$str(N$物品数量_<$str(n$flag)>)>|bgtype=1|link=@点击物品#物品参数=<$str(N$物品ID_<$str(n$flag)>)>#物品数量=<$str(N$物品数量_<$str(n$flag)>)>#物品序号ID=<$str(N$物品唯一序号_<$str(n$flag)>)>>
    inc S$基础背包 <ItemShow|x=<$str(N$递归背包X1)>|y=<$str(N$递归背包Y)>|width=70|height=70|itemid=<$str(N$物品ID_<$str(n$flag1)>)>|itemcount=<$str(N$物品数量_<$str(n$flag1)>)>|bgtype=1|link=@点击物品#物品参数=<$str(N$物品ID_<$str(n$flag1)>)>#物品数量=<$str(N$物品数量_<$str(n$flag1)>)>#物品序号ID=<$str(N$物品唯一序号_<$str(n$flag1)>)>>
    inc S$基础背包 <ItemShow|x=<$str(N$递归背包X2)>|y=<$str(N$递归背包Y)>|width=70|height=70|itemid=<$str(N$物品ID_<$str(n$flag2)>)>|itemcount=<$str(N$物品数量_<$str(n$flag2)>)>|bgtype=1|link=@点击物品#物品参数=<$str(N$物品ID_<$str(n$flag2)>)>#物品数量=<$str(N$物品数量_<$str(n$flag2)>)>#物品序号ID=<$str(N$物品唯一序号_<$str(n$flag2)>)>>
    inc S$基础背包 <ItemShow|x=<$str(N$递归背包X3)>|y=<$str(N$递归背包Y)>|width=70|height=70|itemid=<$str(N$物品ID_<$str(n$flag3)>)>|itemcount=<$str(N$物品数量_<$str(n$flag3)>)>|bgtype=1|link=@点击物品#物品参数=<$str(N$物品ID_<$str(n$flag3)>)>#物品数量=<$str(N$物品数量_<$str(n$flag3)>)>#物品序号ID=<$str(N$物品唯一序号_<$str(n$flag3)>)>>
    inc S$基础背包 <ItemShow|x=<$str(N$递归背包X4)>|y=<$str(N$递归背包Y)>|width=70|height=70|itemid=<$str(N$物品ID_<$str(n$flag4)>)>|itemcount=<$str(N$物品数量_<$str(n$flag4)>)>|bgtype=1|link=@点击物品#物品参数=<$str(N$物品ID_<$str(n$flag4)>)>#物品数量=<$str(N$物品数量_<$str(n$flag4)>)>#物品序号ID=<$str(N$物品唯一序号_<$str(n$flag4)>)>>
    inc S$基础背包 <ItemShow|x=<$str(N$递归背包X5)>|y=<$str(N$递归背包Y)>|width=70|height=70|itemid=<$str(N$物品ID_<$str(n$flag5)>)>|itemcount=<$str(N$物品数量_<$str(n$flag5)>)>|bgtype=1|link=@点击物品#物品参数=<$str(N$物品ID_<$str(n$flag5)>)>#物品数量=<$str(N$物品数量_<$str(n$flag5)>)>#物品序号ID=<$str(N$物品唯一序号_<$str(n$flag5)>)>>
    inc S$基础背包 <ItemShow|x=<$str(N$递归背包X6)>|y=<$str(N$递归背包Y)>|width=70|height=70|itemid=<$str(N$物品ID_<$str(n$flag6)>)>|itemcount=<$str(N$物品数量_<$str(n$flag6)>)>|bgtype=1|link=@点击物品#物品参数=<$str(N$物品ID_<$str(n$flag6)>)>#物品数量=<$str(N$物品数量_<$str(n$flag6)>)>#物品序号ID=<$str(N$物品唯一序号_<$str(n$flag6)>)>>
    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
<Layout|x=346.0|y=68.0|width=80|height=80|link=@exit>
<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>
<Text|x=95.0|y=184|size=18|color=255|text=请放入需要交易的物品>
<Button|x=126.0|y=340|size=18|color=255|nimg=public/00000365.png|link=@确定特殊交易#当前选择物品唯一ID=<$str(N$当前选择物品ID)>>
<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>
<Button|x=820.0|y=63.0|nimg=public/1900000510.png|pimg=public/1900000511.png|link=@exit>
<$str(S$基础背包)>
<ITEMBOX|x=147.0|y=237.0|width=70|height=70|boxindex=0|stdmode=*|img=public/1900000651_4.png>
<ItemShow|ax=0|x=147|y=239.0|width=70|height=70|itemid=<$str(N$左侧物品ID)>|itemcount=1|showtips=1|bgtype=0>

获取当前背包所有物品

循环获取背包需要一个方法把获取到的物品存入数据

; 获取当前背包所有物品
[@获取当前背包所有物品]
#ACT
getitembindinfo <$STR(N$物品唯一ID)> N$绑定状态
#if
equal N$绑定状态 0
#act
GetDBItemFieldValue <$STR(S$物品的名称)> idx S$物品IDX

inc S$物品数据 <$str(S$物品IDX)>,
inc S$物品数量 <$str(N$物品的数量)>,
inc S$新物品唯一 <$str(N$物品唯一ID)>,
分享到:

回答|共 1 个

飓风_Ai

发表于 2025-6-6 01:20:10 | 显示全部楼层

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

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

2. 背包获取部分使用了循环遍历49个格子,很规范的写法。不过要注意:
  1. while N$数量flag < 49
  2.     inc N$数量flag 1
  3.     ...
  4. endwhile
复制代码
这个循环可以优化为从1开始直接循环到49

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

4. 建议可以加一些注释说明每个变量的用途,比如:
  1. ; N$基础背包X - 背包起始X坐标
  2. ; N$基础背包Y - 背包起始Y坐标
复制代码

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

记住:写脚本就像搭积木,你现在已经掌握了很棒的搭建技巧!遇到问题随时问我,我们一起解决!加油,未来的传奇大师!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则