应版主凶神恶煞的要求把解说改成红色重发:复杂事件解说分享----商店系统
;Kdefnum=498
1 2969 111 0 ; 1(1):[???]说: 来,来,来。*来看看有什麽需要的,我这*应有尽有。
(与NPC对话,对话2969根据需要自己改为增加这句对话对应的编号,下面用到的对话都可以自行增加修改对话,只要把对应的对话编号修改就可以)
50 0 5 0 0 0 1 0 ; 50(32):变量赋值 [X5]=0
(设定个变量X5=0)
;:Label0
(跳转符号,下面有指令要转回到这里重复执行下面的指令)
50 3 0 2 6 5 100 0 ; 50(32):四则运算 [X6]=[X5]*100
50 3 0 0 6 6 2000 0 ; 50(32):四则运算 [X6]=[X6]+2000
(设定变量X6=X5*100+2000)
50 1 3 0 500 5 6 0 ; 50(32):数组变量赋值 数组500([X5])=[X6](Int)
(设定一个数组500,里面X5的值对应X6的值。X5是相当于序号,X6是存入数组500的值,此处X5=0,X6=2000,就是数组500里有了第0个数值2000,此时的X6只是一般的数值,没有意义,设定数组的目的在于把数组作为一个包来使用,里面可以放东西,就是放一串数值,然后通过不同的方法,把数组里的数值定义为数字、编号、名称、字符串等,来实现我们的目的,如本文我们要把数组500里的数值变为物品名+空格+价格数字)
50 3 0 0 5 5 1 0 ; 50(32):四则运算 [X5]=[X5]+1
(设定变量X5=X5+1,这里X5就从0变为1)
50 4 0 0 5 5 0 0 ; 50(32):变量判断 If[X5]<5 then JMP=0 else JMP=1
(判断:如果X5<5,JMP=0,如果X5>=5,IMP=1 ,下面指令就以JMP的值作为判断依据执行跳转)
36 256 -44 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label0
(判断:如果JMP=0则跳转到:Label0,否则往下执行,有了这个判断,当X5<5就重复执行Label0下面的指令,直至X5>5JMP=1才往下执行,往回执行4次,结果为X5=1,X6=2100;X5=2,X6=2200; X5=3,X6=2300; X5=4,X6=2400;加上原来的X5=0,X6=2000,数组500里的数据就增加到了5个,就是NPC要卖的物品数,如果要卖6个物品,对应的 50 4 0 0 5 5 0 0要改为50 4 0 0 5 6 0 0,往回执行5次)
50 0 7 0 0 0 0 0 ; 50(32):变量赋值 [X7]=0
(设定变量X7=0,要用变量X7来代替下面两个数组中的序号,用来对应及作判断)
50 1 0 0 50 0 11 0 ; 50(32):数组变量赋值 数组50(0)=11(Int)
50 1 0 0 50 1 26 0 ; 50(32):数组变量赋值 数组50(1)=26(Int)
50 1 0 0 50 2 43 0 ; 50(32):数组变量赋值 数组50(2)=43(Int)
50 1 0 0 50 3 98 0 ; 50(32):数组变量赋值 数组50(3)=98(Int)
50 1 0 0 50 4 113 0 ; 50(32):数组变量赋值 数组50(4)=113(Int)
(设定数组50,存入物品的编号,第0、1、2、3、4对应11、26、43、98、113,就是所卖物品的编号,这里的设定不用循环,是因为物品编号没有规律,就直接设定,但要把0、1、2、3、4序号排好,对应一个物品编号。序号要有规律,好用变量表示)
50 1 0 0 70 0 30 0 ; 50(32):数组变量赋值 数组70(0)=30(Int)
50 1 0 0 70 1 60 0 ; 50(32):数组变量赋值 数组70(1)=60(Int)
50 1 0 0 70 2 1000 0 ; 50(32):数组变量赋值 数组70(2)=1000(Int)
50 1 0 0 70 3 20 0 ; 50(32):数组变量赋值 数组70(3)=20(Int)
50 1 0 0 70 4 500 0 ; 50(32):数组变量赋值 数组70(4)=500(Int)
(设定数组70,存入卖价,第0、1、2、3、4对应30、60、1000、500,就是物品要卖的价格)
;:Label1
50 2 11 0 50 7 8 0 ; 50(32):取数组变量值 [X8]=数组50([X7])(Int)
(设定变量X8为数组50第X7个对应的值,此处X7为0,数组50第0个对应的值是11,即X8=11。如果X7=1,那数组50对应的第1个值就是26,X8=26,这里把数组50里的各个数值用变量X8来代替,X8就是物品的编号)
50 3 0 2 14 7 100 0 ; 50(32):四则运算 [X14]=[X7]*100
50 3 0 0 14 14 2000 0 ; 50(32):四则运算 [X14]=[X14]+2000
(设定X14=X7*100+2000,下面用变量判断If[X7]<5,重复执行,X14的值分别为2000、2100、2200、2300、2400,也就是说数组500里的值变为X14的值)
50 2 11 0 70 7 16 0 ; 50(32):取数组变量值 [X16]=数组70([X7])(Int)
(设变量X16为数组70第X7个的值,此处为X16=30,即数组70第0个的值,结合下面的50(32):四则运算 [X7]=[X7]+1,及变量判断If[X7]<5,重复执行,X16的值分别为30、60、1000、20、500)
50 32 0 14 5 0 0 0 ; 50(32):修改下一条指令参数 下一条指令参数5=[X14]
(修改下一指令的第5个参数为X14,参数从指令左边数起,依次为第0、1、2、3、4、5、6等等,所以下面要修改的参数就是把100的值修改为X14,即100=X14,此时X14从一个无意义的数值变为有意义的数值,即物品的名称。比如,X8=0,在游戏中,编号为0的物品就是小还丹,X14就是“小还丹”)
50 27 1 1 8 100 0 0 ; 50(32):取属性名称 Str100=物品[X8]
50 32 0 14 2 0 0 0 ; 50(32):修改下一条指令参数 下一条指令参数2=[X14]
(同理,修改下一条指令使X17=X14,X17就是X14物品名称的字符串长度)
50 10 100 17 0 0 0 0 ; 50(32):取字符串长度 [X17]=Len(Str100 )
50 0 18 13 0 0 0 0 ; 50(32):变量赋值 [X18]=13
50 3 11 1 18 18 17 0 ; 50(32):四则运算 [X18]=[X18]-[X17]
(设定X18=13-X17)
50 12 1 1000 18 0 0 0 ; 50(32):空格字符串 Str1000=[X18]个空格
(设定字符串1000为X18个空格,目的是为下面把物品名称和价格合并成一个字符串时,在中间加空格)
50 8 0 17 800 0 0 0 ; 50(32):读对话到字符串 Str800=talk(17)
(设定字符串800为对话编号17的内容,注意17对话必须是“%d”是要自行增加的,增加的对话编号不是17就要把17改为那个编号,比如对话4720内容是“%d”,那此处指令改为50 8 0 4720 800 0 0)
50 9 1 1200 800 16 0 0 ; 50(32):Sprintf Str1200=Cstr([X16]) FORMAT=Str800
(设定字符串1200为价格X16以整数的形式输出的数字,是个整数。FORMAT=%d表示输出整数)
50 32 0 14 3 0 0 0 ; 50(32):修改下一条指令参数 下一条指令参数3=[X14]
(修改下一指令1200=X14,合并结果是字符串1400=物品名称+空格)
50 11 1400 1200 1000 0 0 0 ; 50(32):字符串合并 Str1400=Str1200+Str1000
50 32 0 14 2 0 0 0 ; 50(32):修改下一条指令参数 下一条指令参数2=[X14]
(修改下一指令100=X14,合并的结果是字符串X14=物品名称+空格+价格数字,从而把数组500的里数对应表示为字符串“物品名称+空格+价格数字”,下面会用菜单形式来显示)
50 11 100 1400 1200 0 0 0 ; 50(32):字符串合并 Str100=Str1400+Str1200
50 3 0 0 7 7 1 0 ; 50(32):四则运算 [X7]=[X7]+1
50 4 0 0 7 5 0 0 ; 50(32):变量判断 If[X7]<5 then JMP=0 else JMP=1(5为商品数)
36 256 -156 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label1
(重复循环4次,数组500里的5个数变为对应的物品名称物品名称+空格+价格数字)
50 3 0 0 9 7 0 0 ; 50(32):四则运算 [X9]=[X7]+0
50 3 0 2 9 9 18 0 ; 50(32):四则运算 [X9]=[X9]*18
50 3 0 0 9 9 10 0 ; 50(32):四则运算 [X9]=[X9]+10
(设定X9=X7*18+10)
50 34 8 100 85 150 9 0 ; 50(32):处理背景 位置(100,85) Width=150 Height=[X9]
(在100,85处理背景,宽度150,高度为变量X9---根据上面的运算得出的数值来确定高度)
50 3 0 0 9 7 1 0 ; 50(32):四则运算 [X9]=[X7]+1
50 0 10 0 0 0 1 0 ; 50(32):变量赋值 [X10]=0
50 39 1 7 500 10 105 90 ; 50(32):菜单选择 菜单个数[X7]Str500()返回=[X10]显示位置(105,90)
(在105,90处显示菜单,把数组500里的值显示出来,就是显示“物品名称+空格+价格数字”,有5个选项,从上到下依次为第1、2、3、4、5项,返回值X10为1、2、3、4、5,即选第1项,X10=1,以此类推)
50 4 0 0 10 1 0 0 ; 50(32):变量判断 If[X10]<1 then JMP=0 else JMP=1
(如果X10=0,也就是一项都不选,JMP=0,结合下指令跳转Label2事件结束)
36 256 95 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label2
0 ; 0(0)::空语句(清屏)
(如果选中一项,就根据X10的值,来执行下面的指令,下面以选第3项来说明,X10=3)
50 3 0 1 10 10 1 0 ; 50(32):四则运算 [X10]=[X10]-1
(变X10=2)
50 2 11 0 70 10 12 0 ; 50(32):取数组变量值 [X12]=数组70([X10])(Int)
(设定X12=数组70(2)=1000)
50 32 0 12 1 0 0 0 ; 50(32):修改下一条指令参数 下一条指令参数1=[X12]
(修改下一指令为31 1000 6 0,即判断银子是否够1000,够钱跳转到:Label3)
31 0 6 0 ; 31(1F):判断银子是否够0是则跳转到:Label3
(否则,告诉你不够钱,事件结束)
1 2975 111 0 ; 1(1):[???]说: 非常抱歉,*你身上的钱似乎不够.
0 ; 0(0)::空语句(清屏)
-1 ; -1(FFFF):事件结束
;:Label3
50 2 11 0 50 10 11 0 ; 50(32):取数组变量值 [X11]=数组50([X10])(Int)
(设定X11=数组50(2)=11)
50 2 11 0 70 10 12 0 ; 50(32):取数组变量值 [X12]=数组70([X10])(Int)
(设定X12=数组70(2)=1000)
50 0 13 0 0 0 0 0 ; 50(32):变量赋值 [X13]=0
50 3 3 1 13 13 12 0 ; 50(32):四则运算 [X13]=[X13]-[X12]
(设定X13=0-X12=0-1000)
50 32 0 13 2 0 0 0 ; 50(32):修改下一条指令参数 下一条指令参数2=[X13]
(修改下条指令变为32 174 -1000,买了物品,钱相应减少)
32 174 0 ; 32(20):物品[银两]+[0]
1 2976 111 0 ; 1(1):[???]说: 大爷买了我们店的东西,*保证绝不後悔.
0 ; 0(0)::空语句(清屏)
50 32 0 11 1 0 0 0 ; 50(32):修改下一条指令参数 下一条指令参数1=[X11]
(修改下一指令变为2 1 1 ,得到物品[编号1的物品][1],不是下面的物品,事件结束)
2 0 1 ; 2(2):得到物品[腐骨穿心膏][1]
0 ; 0(0)::空语句(清屏)
;:Label2
0 ; 0(0)::空语句(清屏)
-1 ; -1(FFFF):事件结束 |