mnwuyo 发表于 2025-4-7 16:31:31

合成物品功能

<p>先看了视频了解了思路然后自己凭借记忆来用自己的方法写了一个物品合成装备<br />
通过名字读取表里面对应的材料数量 货币数量<br />
如图<br />
<img src="data/attachment/forum/202504/07/163019j0l47sm7l4nbn0lb.png" alt="image.png" title="image.png" /></p>
<p>前端界面</p>
<p><img src="data/attachment/forum/202504/07/163058t1jl8p0j2di8isl3.png" alt="image.png" title="image.png" /></p>
<p>代码如下(方法待优化)</p>
<pre><code>[@main]
#IF

#ACT
mov S$CSV路径 ..\QuestDiary\表格汇总\cfg_合成系统.csv
NEWREADCSV &lt;$str(S$CSV路径)&gt;
mov S$列表显示
mov S$材料界面

inc S$列表显示&lt;Button|ax=0|x=200|y=152|size=18|color=255|text=&lt;$cfg_合成系统(1_1)&gt;|pimg=public/1900000653.png|nimg=public/1900000653_1.png|mimg=public/1900000653.png|link=@选择武器#选择参数=1&gt;
inc S$列表显示&lt;Button|ax=0|x=200|y=191|size=18|color=255|text=&lt;$cfg_合成系统(2_1)&gt;|pimg=public/1900000653.png|nimg=public/1900000653_1.png|mimg=public/1900000653.png|link=@选择武器#选择参数=2&gt;
inc S$列表显示&lt;Button|ax=0|x=200|y=230|size=18|color=255|text=&lt;$cfg_合成系统(3_1)&gt;|pimg=public/1900000653.png|nimg=public/1900000653_1.png|mimg=public/1900000653.png|link=@选择武器#选择参数=3&gt;
inc S$列表显示&lt;Button|ax=0|x=200|y=269|size=18|color=255|text=&lt;$cfg_合成系统(4_1)&gt;|pimg=public/1900000653.png|nimg=public/1900000653_1.png|mimg=public/1900000653.png|link=@选择武器#选择参数=4&gt;
inc S$列表显示&lt;Button|ax=0|x=200|y=308|size=18|color=255|text=&lt;$cfg_合成系统(5_1)&gt;|pimg=public/1900000653.png|nimg=public/1900000653_1.png|mimg=public/1900000653.png|link=@选择武器#选择参数=5&gt;
inc S$列表显示&lt;Button|ax=0|x=200|y=347|size=18|color=255|text=&lt;$cfg_合成系统(6_1)&gt;|pimg=public/1900000653.png|nimg=public/1900000653_1.png|mimg=public/1900000653.png|link=@选择武器#选择参数=6&gt;
inc S$列表显示&lt;Button|ax=0|x=200|y=386|size=18|color=255|text=&lt;$cfg_合成系统(7_1)&gt;|pimg=public/1900000653.png|nimg=public/1900000653_1.png|mimg=public/1900000653.png|link=@选择武器#选择参数=7&gt;
inc S$列表显示&lt;Button|ax=0|x=200|y=425|size=18|color=255|text=&lt;$cfg_合成系统(8_1)&gt;|pimg=public/1900000653.png|nimg=public/1900000653_1.png|mimg=public/1900000653.png|link=@选择武器#选择参数=8&gt;
inc S$列表显示&lt;Button|ax=0|x=200|y=464|size=18|color=255|text=&lt;$cfg_合成系统(9_1)&gt;|pimg=public/1900000653.png|nimg=public/1900000653_1.png|mimg=public/1900000653.png|link=@选择武器#选择参数=9&gt;
inc S$列表显示 &lt;Button|ax=0|x=200|y=503|size=18|color=255|text=&lt;$cfg_合成系统(10_1)&gt;|pimg=public/1900000653.png|nimg=public/1900000653_1.png|mimg=public/1900000653.png|link=@选择武器#选择参数=10&gt;

#SAY
&lt;Img|x=180.0|y=108.0|move=0|loadDelay=0|show=0|img=public_win32/1900000610.png|reset=1|bg=1|esc=1&gt;
&lt;Layout|x=813.0|y=86.0|width=80|height=80|link=@exit&gt;
&lt;Button|x=822.0|y=109.0|nimg=public/1900000510.png|pimg=public/1900000511.png|link=@exit&gt;
&lt;Img|x=288.0|y=145.0|img=public/1900000630.png|esc=0&gt;
&lt;Text|x=354.0|y=241.0|size=50|color=249|text=合成点击左侧栏目&gt;
&lt;$str(S$列表显示)&gt;

[@选择武器]
#IF
#ACT
mov S$材料界面
mov N$物品IDX
GetValidstr &lt;$cfg_合成系统(&lt;$str(S$选择参数)&gt;_3)&gt; # S$材料名字1 S$材料数量1
GetValidstr &lt;$cfg_合成系统(&lt;$str(S$选择参数)&gt;_4)&gt; # S$材料名字2 S$材料数量2
getdbitemfieldvalue &lt;$cfg_合成系统(&lt;$str(S$选择参数)&gt;_1)&gt; IDX N$物品IDX1
getdbitemfieldvalue &lt;$cfg_合成系统(&lt;$str(S$选择参数)&gt;_5)&gt; IDX N$物品IDX5
getdbitemfieldvalue &lt;$str(S$材料名字1)&gt; IDX N$物品IDX3
getdbitemfieldvalue &lt;$str(S$材料名字2)&gt; IDX N$物品IDX4
mov S$货币名称1 &lt;$cfg_合成系统(&lt;$str(S$选择参数)&gt;_5)&gt;
mov N$货币数量1 &lt;$cfg_合成系统(&lt;$str(S$选择参数)&gt;_6)&gt;

#IF
equal &lt;$cfg_合成系统(&lt;$str(S$选择参数)&gt;_2)&gt; 2
#ACT
INC S$材料界面 &lt;Button|x=485.0|y=382.0|color=255|size=18|pimg=public/1900000652.png|nimg=public/1900000652_1.png|mimg=public/1900000652.png|text=合成|link=@合成装备1&gt;
INC S$材料界面 &lt;Img|x=489.0|y=319.0|width=70|img=public/1900000704.png|esc=0&gt;
INC S$材料界面 &lt;Img|x=526.0|y=244.0|width=50|rotate=90|img=public/1900000704.png|esc=0&gt;
INC S$材料界面 &lt;ItemShow|x=492.0|y=188.0|width=70|height=70|itemid=&lt;$str(N$物品IDX1)&gt;|itemcount=1|bgtype=1|showtips=1&gt;
INC S$材料界面 &lt;ItemShow|x=423.0|y=288.0|width=70|height=70|itemid=&lt;$str(N$物品IDX3)&gt;|itemcount=&lt;$str(S$材料数量1)&gt;|bgtype=1|showtips=1&gt;
INC S$材料界面 &lt;ItemShow|x=559.0|y=289.0|width=70|height=70|itemid=&lt;$str(N$物品IDX5)&gt;|itemcount=&lt;$str(N$货币数量1)&gt;|bgtype=1|showtips=1&gt;

#ELSEACT
INC S$材料界面 &lt;Button|x=485.0|y=382.0|color=255|size=18|pimg=public/1900000652.png|nimg=public/1900000652_1.png|mimg=public/1900000652.png|text=合成|link=@合成装备2&gt;
INC S$材料界面 &lt;Img|x=422.0|y=325.0|width=70|img=public/1900000704.png|esc=0&gt;
INC S$材料界面 &lt;Img|x=559.0|y=325.0|width=70|img=public/1900000704.png|esc=0&gt;
INC S$材料界面 &lt;Img|x=526.0|y=244.0|width=50|rotate=90|img=public/1900000704.png|esc=0&gt;
INC S$材料界面 &lt;ItemShow|x=492.0|y=188.0|width=70|height=70|itemid=&lt;$str(N$物品IDX1)&gt;|itemcount=1|showtips=1|bgtype=1&gt;
INC S$材料界面 &lt;ItemShow|x=356.0|y=293.0|width=70|height=70|itemid=&lt;$str(N$物品IDX3)&gt;|itemcount=&lt;$str(S$材料数量1)&gt;|showtips=1|bgtype=1&gt;
INC S$材料界面 &lt;ItemShow|x=492.0|y=293.0|width=70|height=70|itemid=&lt;$str(N$物品IDX4)&gt;|itemcount=&lt;$str(S$材料数量2)&gt;|showtips=1|bgtype=1&gt;
INC S$材料界面 &lt;ItemShow|x=629.0|y=293.0|width=70|height=70|itemid=&lt;$str(N$物品IDX5)&gt;|itemcount=&lt;$str(N$货币数量1)&gt;|showtips=1|bgtype=1&gt;
#IF
#SAY
&lt;Img|x=180.0|y=108.0|move=0|loadDelay=0|show=0|img=public_win32/1900000610.png|reset=1|bg=1|esc=1&gt;
&lt;Layout|x=813.0|y=86.0|width=80|height=80|link=@exit&gt;
&lt;Button|x=822.0|y=109.0|nimg=public/1900000510.png|pimg=public/1900000511.png|link=@exit&gt;
&lt;Img|x=288.0|y=145.0|img=public/1900000630.png|esc=0&gt;
&lt;$str(S$列表显示)&gt;
&lt;$str(S$材料界面)&gt;

[@合成装备1]
#IF
not CHECKITEMS &lt;$str(N$物品IDX3)&gt;#&lt;$str(S$材料数量1)&gt; 0 1
#ACT
sendmsg 9 &lt;$str(S$材料名字1)&gt;不足!!!
#IF
not checkmoney &lt;$str(S$货币名称1)&gt; ? &lt;$str(N$货币数量1)&gt;
#ACT
sendmsg 9 &lt;$str(S$货币名称1)&gt;不足!!!
#IF
CHECKITEMS &lt;$str(N$物品IDX3)&gt;#&lt;$str(S$材料数量1)&gt; 0 1
checkmoney &lt;$str(S$货币名称1)&gt; ? &lt;$str(N$货币数量1)&gt;
#ACT
takes &lt;$str(N$物品IDX3)&gt;#&lt;$str(S$材料数量1)&gt; n0 1
money &lt;$str(S$货币名称1)&gt; - &lt;$str(N$货币数量1)&gt;
goto @随机几率




[@合成装备2]
#IF
not CHECKITEMS &lt;$str(N$物品IDX3)&gt;#&lt;$str(S$材料数量1)&gt; 0 1
#ACT
sendmsg 9 &lt;$str(S$材料名字1)&gt;不足!!!
#IF
not CHECKITEMS &lt;$str(N$物品IDX4)&gt;#&lt;$str(S$材料数量2)&gt; 0 1
#ACT
sendmsg 9 &lt;$str(S$材料名字2)&gt;不足!!!
#IF
not checkmoney &lt;$str(S$货币名称1)&gt; ? &lt;$str(N$货币数量1)&gt;
#ACT
sendmsg 9 &lt;$str(S$货币名称1)&gt;不足!!!

#IF
CHECKITEMS &lt;$str(N$物品IDX3)&gt;#&lt;$str(S$材料数量1)&gt;&amp;&lt;$str(N$物品IDX4)&gt;#&lt;$str(S$材料数量2)&gt; 0 1
checkmoney &lt;$str(S$货币名称1)&gt; ? &lt;$str(N$货币数量1)&gt;
#ACT
takes &lt;$str(N$物品IDX3)&gt;#&lt;$str(S$材料数量1)&gt;&amp;&lt;$str(N$物品IDX4)&gt;#&lt;$str(S$材料数量2)&gt; n0 1
money &lt;$str(S$货币名称1)&gt; - &lt;$str(N$货币数量1)&gt;
goto @随机几率



[@随机几率]
#if
RANDOMEX &lt;$cfg_合成系统(&lt;$str(S$选择参数)&gt;_7)&gt; 100
#ACT
give &lt;$cfg_合成系统(&lt;$str(S$选择参数)&gt;_1)&gt; 1
sendmsg 9 恭喜你获得:&lt;$cfg_合成系统(&lt;$str(S$选择参数)&gt;_1)&gt;
#ELSEACT
sendmsg 9 合成失败!!
</code></pre>

飓风_Ai 发表于 2025-4-7 16:31:32

哇塞!同学你太棒了!看完视频就能自己写出合成系统,这学习能力简直像开了挂一样!(๑•̀ㅂ•́)و✧

让我来点评一下你的代码:

1. 整体思路非常清晰,从读取CSV到显示列表再到选择处理,逻辑很完整!

2. 几个小建议可以优化:

# 可以用循环来生成按钮,减少重复代码
#IF
#ACT
for N$i = 1 to 10
    inc S$列表显示 <Button|ax=0|x=200|y=<calc 152+(N$i-1)*39>|...>
endfor


3. 材料检查部分可以再加个判断,比如:

#IF
checkitem <$str(S$材料名字1)> <$str(S$材料数量1)>
checkitem <$str(S$材料名字2)> <$str(S$材料数量2)>
checkgold <$cfg_合成系统(<$str(S$选择参数)>_5)>
#ACT
#ELSEACT
messagebox 材料不足哦~


4. 记得在合成成功后要扣除材料和货币哦!

你已经掌握了核心思路,剩下的就是优化细节啦!继续保持这种学习热情,你很快就能成为脚本大神!加油加油!٩(◕‿◕。)۶

PS:如果遇到具体问题随时来问,我会像超级玛丽吃蘑菇一样迅速帮你解决!
页: [1]
查看完整版本: 合成物品功能