TA的每日心情 | 开心 2024-11-6 23:36 |
---|
签到天数: 319 天 [LV.8]以坛为家I
管理员
- 积分
- 85557
|
今天平有刚好有想写一个物品兑换的脚本~那刚好就拿出来讲吧!
day1讲过的我就不重複解释了,今天篇幅会比较长!请耐心观看!
会同时有2维阵列与for迴圈的使用!!!!
- /*
- *********************
- * 功能:物品兑换 *
- * 作者: *
- * 转载请说明出处 *
- *********************
- */
- //依旧是要函数定义~
- var status=-1;
- var item;
- var text="";
- var quer;
- var i;
- var a;
- var b;
- var r="\r\n"
- var 箭头="#fUI/UIWindow/Quest/icon2/7#";//这个是美化
- /*
- 其实var后面接的东西没有一定~看你如何命名~
- 讲白了就是取名子,至于要不要接等于多少其实都没关西,后面再定义也是可以的!
- 至于最后一个美化他是"#F"开头"#"结尾,中间塞你WZ中图片的位置,版上有做好的美化图集合
- 可以过去参考。
- 因为要做成万能通用型所以代码会比较长,请见谅!
- */
- /*
- 以下是阵列!
- 阵列他的判断方式是[[0],[1]]从0开始
- 中[]裡的第一个[]是0第二个是1!
- 然而我中[]裡面的中[]不只是个数值,而是4个
- 那麽一样也是从0开始[0[0,1,2,3],1[0,1,2,3]]
- 这样做的好处是可以用for精简你的代码
- */
- quer=[
- //材料,成品,材料数量,成品数量
- [4000000,2210000,10,1],
- [4000000,2210001,50,1]
- ]
- //一样起始
- function start(){
- action(1,0,0);
- }
- //接著对话内容!
- function action(mode,type,selection){
- status = (mode == 1 ? status+1 :cm.dispose());
- if(status==0){
- /*
- 因为经过前一句"status = (mode == 1 ? status+1 :cm.dispose());"
- 加上开启对话是mode1,所以status会+1~-1+1=0,故这个if裡面的东西会被启动
- */
- for(i=0;i<quer.length;i++){
- /*
- 这裡是for迴圈,用途是自动读取选项,他进入这裡时i等同于0的效果
- 他会一直执行大{}中的代码直到quer阵列中的项目结束目前有2向所以只会执行两次
- 当然你也可以用<2,但是这样会受限制于项目数量,当项目有20个时你会算到起笑!
- */
- text+="#L"+i+"##z"+quer[i][1]+"##i"+quer[i][1]+"#";
- /*
- 这边解释这条指令#LX#是选项的指令,X请改成数字
- 但是这边却没有数字对不对!应为我用i代替了!
- 第1圈过来i=0,第2圈过来是i=1所以我的第1个选项是#L0#
- 这于后面的#z#,#i#这个是显示物品名称跟图片他正常要接代码,
- 但是我用quer[i][1]他代替,第一圈过来时可以看成quer[0][1],
- 所以应该是2210000这个物品代码!
- */
- }
- cm.sendNext("你要兑换什麽呢?"+r+text);
- /*这边的r我定义是\r\n,\r\n这个它是换行的意思+上for裡面定义的text内容
- 对话会长得像这样:
- 你要兑换什麽呢?
- 菇菇宝贝的雕像 图片
- 缎带肥肥的雕像 图片
- */
- }
- if(status==1){
- a=selection
- b+="#b#e#z"+quer[a][0]+"##i"+quer[a][0]+"#"+""+quer[a][3]
- cm.sendGetNumber(b+"个可以兑换成"+r+"#r#z"+quer[a][1]+"#"+"#i"+quer[a][1]+"#"+quer[a][3]+text3,1,1,9999);
- //cm.sendGetNumber(文字,预设数量,最小数量,最大数量)
- /*
- 这裡是第二个对话框,其实这裡有三种写法
- 1.用case0 case1 来分别编写功能
- 2.用cm.openNPC来打开指定路进的脚本
- 3.就是目前的这个方法
- 各有各的好处
- 如果兑换物品量小且同为一类,我会偏向方法3
- 如果兑换物品多我会偏向方法二,降低单个脚本的代码量,减少複杂度
- 至于方法3我自己是用不习惯,加上每个功能都要独立在case裡写
- 会比较複杂且没必要
- 挼果写万能NPC我会偏向用方法2
- */
- }
- if(status==2){
- d=selection;
- e=d*quer[a][2]//计算需要材料
- f=d*quer[a][3]//计算给予的成品
- /*
- 数学应该不用我教巴.....
- */
- c=cm.haveItem(quer[a][0],e)//判断物品
- /*我先把变数c他的值改设定cm.haveItem(quer[a][0],e)
- 这样在多条件比较不会少东西,但是应为这个比较简单所以不这样做也行
- 他会判断玩家背包中是否有quer[a][0](4000000)这个物品,以及数量是否有大于e
- 计算出来得数值
- */
- if (cm.getSpace(1) < 3 &&cm.getSpace(2) < 3&&cm.getSpace(3) < 3&&cm.getSpace(4) < 3&&
- cm.getSpace(5) < 3&&cm.getSpace(6) < 3) {
- cm.sendOk(text5);
- cm.dispose();
- return;
- /*
- 这边是判断背包是否有足够空间cm.getSpace()取得背包,()中的1是装备栏、2是消耗
- 已次类推
- */
- }else if(c==true){
- /*
- 我上面有设定过c=cm.haveItem(quer[a][0],e)那他为真的话就继续执行
- 何谓"真",讲人话就是有需要的物品,且大于你要扣的数量
- */
- cm.gainItem(quer[a][1],f);
- cm.gainItem(quer[a][0],-e);
- //上面两行给物品跟收物品不多解释了,有问题就留言巴
- cm.sendOk(text4);
- cm.dispose();//结束对话
- }else{
- cm.sendOk("材料不足");
- //就材料不够,结果为"假"就执行这边
- //跟你说材料不足
- cm.dispose();
- }
-
- }
- }
复制代码
|
|