本帖最后由 tomorrownewc 于 2010-9-29 19:20 编辑 回复 moy 的帖子 啊,手误了,点击了回复。 脚本没出错了,估计是武器id的问题,它应该不是武器页的序号。 还有,我在买武器时印刷了$game_party.gain_item(@item, @number_window.number)中的@item #<RPG::Weapon:0x2babb70> |
本帖最后由 moy 于 2010-9-29 04:58 编辑 回复 伪娘小司 的帖子 1. wid = XXX # weapon_id 2. n = XXX # weapon_maxlevel 3. for i in wid..wid+n 4. if $game_party.weapons.include?( i ) 5. $game_party.gain_weapon( i + 1 , 1 ) 6. $game_party.gain_weapon( i , -1 ) 7. break 8. end 9. end 脚本有的时候没有你想像的那么困难...事件也只是隐式的调用了对应的脚本而已{:nm_3:} 比如这段 头两句可以用变量操作代替,分别设定两个变量,一个名为wid一个名为n,存储的数字是武器的id和武器的最高强化等级.(只不过这里是局部变量,不是像我们正常事件里的全局变量,所以他只能在这个脚本框里用) 如果按照事件里的变量操作写成脚本那就是 $game_variables[编号] = 数值 例如我假定是1和2两个号变量分别在数据库里命名为wid和n,1和2两句就可以改成 $game_variables[1] = 32 #武器编号为32 $game_variables[2] = 7 #该武器最大强化等级为7级 这样看起来反而麻烦了点{:nm_6:} 这也是我为什么在上面的时候偷懒写wid = 和n =的原因.因为没有想在脚本框外定义,所以就这么写了. 其实这两句用事件操作也能做到,只是在里面调用的时候就比较麻烦了.当然,如果你坚持在脚本框外定义数值的话. wid = $game_variables[1] n = $game_variables[2] 这样写就好,这样在后面的算式中就可以用简短的wid和n代替了. 写到现在似乎给人的印象还是很麻烦{:nm_6:} 不过事件脚本的好处在于,可以方便的进行一些虽然不是很复杂,但是用事件直接操作很繁琐的计算式.(当然,在这个例子里没什么体现) 然后进行到了第三句 for i in wid..wid + n : end 这是一个完整的结构.称为循环语句.代表着符合条件的时候其内部的所有操作会重复执行.(PS:那个冒号当成竖着的省略号看,嗯嗯. 不过这个和事件执行里的循环不太一样,那个循环是 loop do : end 是无条件循环.而for语句,是满足 i 在 从wid 到wid + n大小的数值内部的时候进行,并且每进行一个环节,i 的值都会自行加1(其实是从第一个开始遍历数组内部的值就是...这是后话) 如果用事件来弄的话就是先定义一个变量用来存放初始值.这里是转换成事件的风格的过程,左边是脚本转变,右边是事件的相关提示. i = wid # 假定 i 是3号变量的话,就可以设置 3号变量的值等于1号变量的值 loop do # 循环 : : i += 1 # 这个事件用多了其实蛮有感觉的吧{:nm_6:} 不管是VX还是XP,在变量加1上的表示, # 都是差不多这样子的. if i == wid + n # 这句就是条件分歧了,变量3等于变量1+变量2时.这个对于事件来说就相对麻烦点. # 单纯的事件的话,最好的办法莫过于再多定义一个变量用来存放变量1+变量2.然后 # 再进行判断 break # break就是中断循环,这里的意思就是当 i 的值等于wid + n的时候就中断循环. # 没有这句的话,loop do可是会不知疲倦的不停运作的说~ end # 补充一句,脚本里带end的都是成套出现的,不要漏掉哦~而且为了识别方便,一般 # 都会和对应的操作对齐. end 这样子的话,在讲完123的时候,顺便把789的意义也讲掉了{:nm_4:} 不过咱还是要着重讲一下4-567-8 这块的说. 4. if $game_party.weapons.include?( i ) 5. $game_party.gain_weapon( i + 1 , 1 ) 6. $game_party.gain_weapon( i , -1 ) 7. break 8. end 第四句if判断,其实就是判断物品是否存在的.条件分歧页的第四页有武器是否持有,这个想必你也知道了~,这里的判断是依据武器的id号来进行的.if语句其实是这样子的: if XXX #这里是判断XXX这句话是不是真的,真的就进行紧接着的部分,也就是"是的场合" : else # 当if后面的判断不是真的的时候就进行这里,也就是条件分歧里的除此以外的场合,或者说"否的场合" : # 这里也和事件一样,else的部分是可以省略的~ end 也就是说上面那段脚本意思就和原本的感觉一样,背包里有没有编号 i 的武器?有就执行接下来的几句话 5和6本质是一样的操作.就是事件页里的增减武器.这步就是真的是用事件处理会非常非常麻烦的部分了. 括号里是两个参数,分别对应的就是在事件处理里能看到的 武器id 和 增减的数量. 如果要用事件来做的话...就真的和前面那位仁兄一样,要一层一层不厌其烦的判断持有着什么装备了... 但是用脚本的话,就可以用变量来告诉电脑我们要的是比现在高一级的武器,并且把现在手上这把给扣除掉. (为什么说是比"现在"呢~之前认真看的话应该知道为什么不是一个定值了~~{:nm_4:} ) 然后成功执行完这些以后~~千万千万别忘记了break~~ 另外这里之前其实还缺少一个判断,也就是判断武器是否满级,不过我想即使是用事件也不是什么太难的判断吧~ 一个小tip:可以先扣除需要的东西,然后发现是满级的再退还也是可以的哦~ 于是啰嗦酱油完毕~ 附赠事件页一张 |
我想我估计会为想写装备强化的作者单独写一个装备独立系统了。 |
我觉得这样可以,也比较好看。 |
|
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2025-1-11 15:44
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.