转载自铁血丹心论坛 苍半 DIY专区
http://www.txdx.net/thread-498689-1-1.html
转载注明出处!
------------------------------------------------------------------------------------------
第一讲 序言与基本数据修改
1.1 序言
之前断断续续发有关于DIY修改的方法,现在想把它统一起来,形成更系统化的新手教学,里面再掺杂一些编程思想、编程技巧等知识。我的目标是做成一个属于自己的金庸MOD心得手册。
由于我自己也是九月份初才开始接触DIY,有不少东西理解不是很透,甚至出来错误不合理的地方,希望大家莫怪,更希望各位高手能指出。时间不长所以目前未有什么教学计划,只是把自己所学到的东西分享出来,随着以后的学习,我会努力把这些东西进行再一次的重新更新与整合。
lua的语法不准备进行多说
我认为只有打好基础,你的MOD内容才更会丰富,更实际
有一些我自己认为比较复杂的,会先不放出来,留到以后配合实例再进行详细的讲解。
每一次都尽量配上实例,空理论我自己看也会头疼。
每一次都会配上相应的文件、源码下载
尽量做到每天一更新
1.2 开始第一讲,基本数据的修改
学习的目标:理解基本数据的定义,以及如何去修改这些数据。
遗留难点:商店数据,暂时不进行讲解,以后会配合事件编辑,打造属于自己的小卖部。
1.3 先看定义
1. JY.Base={}; --基本数据
2. JY.PersonNum=0; --人物个数
3. JY.Person={}; --人物数据
4. JY.ThingNum=0 --物品数量
5. JY.Thing={}; --物品数据
6. JY.SceneNum=0 --场景数量
7. JY.Scene={}; --场景数据,场景数据都初始化好了的。建议不要修改
8. JY.WugongNum=0 --武功数量
9. JY.Wugong={}; --武功数据
10. JY.ShopNum=0 --商店数量
11. JY.Shop={}; --商店数据
复制代码
JY.Base保存基本数据
1. JY.Base["乘船"] =0; --是否乘船,1乘船,0走路。船现在都不用了。。。
2. JY.Base["无用"] = 0; --此参数作用未明,不知道初始化了什么数据,似乎是子场景
3. JY.Base["人X"] = 0; --人物在大地图上的X坐标
4. JY.Base["人Y"] = 0; --人物在大地图上的Y坐标
5. JY.Base["人X1"] = 0; --人物在小场景上的X坐标
6. JY.Base["人Y1"] = 0; --人物在小场景上的Y坐标
7. JY.Base["队伍1"] = 0; --队友的人物编号,从队伍1 - 队伍6。如果位置上没有队友那么这个数据返回-1,比如只有主角JY.Base["队伍2"]的值就会是-1
8. JY.Base["物品1"] = 0; --人物身上的物品编号,数据范围1-200。如果不包含物品返回-1
9. JY.Base["物品数量1"] = 0; --对应身上物品的数量
复制代码
1.4 实例
1.4.1 瞬间移动
JY.Base["人X1"] = 30;
JY.Base["人Y1"] = 40;
人物直接移到(30,40)的位置,如果这个坐标是场景的出口或者入口,那会是一个什么情况呢
1.4.2 获得队友
JY.Base["队伍2"] = 1;
--直接胡斐入队(胡斐编号是1)
判断队友中是否同时有胡斐和程灵素,咱们引入一个全局变量CC.TeamNum,它保存可加入最大的队伍数量,当前值为6
1. local n = 0;
2. for i=1, CC.TeamNum do
3. if JY.Base["队伍"..i] == 1 or JY.Base["队伍"..i] == 2 then
4. n = n+1;
5. end
6. end
7. if n == 2 then
8. DrawStrBoxWaitKey("胡斐和程灵素在手",C_ORANGE,CC.DefaultFont); --居中的弹出框
9. else
10. DrawStrBoxWaitKey("你的队伍中不同时有胡斐和程灵素",C_ORANGE,CC.DefaultFont);
11. end
复制代码
1.4.3 新增物品
1. --此方法只说明原理
2. local thingid = 0; --小还丹编号
3. local num = 1; --新增数量,如果设置为负数,就相当于减少数量
4.
5. for i=1, CC.MyThingNum do --再引入一个全局变量CC.MyThingNum,可拥有的最大物品种类数量,200
6. if JY.Base["物品"..i] == thingid then --如果包里有这个物品,累加数量
7. JY.Base["物品数量"..i] =JY.Base["物品数量"..i]+ num;
8. break;
9. end
10. elseif JY.Base["物品" .. i]==-1then --如果这个物品在包里不存在,新增物品
11. JY.Base["物品"..i]= thingid;
12. JY.Base["物品数量"..i]= num;
13. end
14. end
复制代码
1.4.3 减少物品,和新增物品差不多,但是必须考虑如果此物品用光了之后的情况,现在把这两个内容整合起来
1. --完整的新增与减少物品的方法
2. local thingid = 0; --小还丹编号
3. local num = -2; --新增数量,如果设置为负数,就相当于减少数量
4. local pos = 0; --定义一个标志变量,用来标志物品变更的位置
5. for i=1, CC.MyThingNum do
6. if JY.Base["物品"..i] == thingid then --如果包里有这个物品,累加数量
7. JY.Base["物品数量"..i] =JY.Base["物品数量"..i]+ num;
8. pos = i; --把物品的位置记录下来
9. break;
10. --end 多了个end,语法错误了,悲剧
11. elseif JY.Base["物品" .. i]==-1 andnum > 0 then --如果这个物品在包里不存在,新增物品
12. JY.Base["物品"..i]= thingid;
13. JY.Base["物品数量"..i]= num;
14. break;
15. end
16. end
17.
18. if pos > 0 and JY.Base["物品数量"..pos] <= 0then --如果物品用光了
19. for i=pos+1, CC.MyThingNumdo --必须把这个物品移掉,并且后面的物品都需要向前移动一格
20. JY.Base["物品"..i-1]= JY.Base["物品"..i];
21. JY.Base["物品数量"..i-1]= JY.Base["物品数量"..i];
22. end
23.
24. --最后那个物品直接清掉
25. JY.Base["物品"..CC.MyThingNum]= -1;
26. JY.Base["物品数量"..CC.MyThingNum]= 0;
27. end
复制代码
上面就是一个比较完整的新增物品了(包括减少物品),思想和用数组定义链表一样,中间断了后面的都要往前移,要不然就有空物品出现了
基本数据先到这里吧,下次再讲人物数据的相关修改
1.5 结束语
虽然现在有一些函数已经实现了某些功能,但是我认为还是基础最重要,所以不打算讲关于函数的。
只有学会了基础,你才可以更随意的定义属于自己的函数,为个性化的MOD做好铺垫
1.6 补充知识
由于会有一部分新手不知道这些代码怎么去用,所以在这里增加了一点
首先苍炎版本必须是905版以上(目前最高是905,据S大说国庆会更新)
比如你的苍炎目录在d:\苍炎,按下面三个步骤走:
第一步:用记事本打开d:\苍炎\script\DIY.lua文件
第二步:以第二个实例加入胡斐入队,在DIY.lua文件中输入JY.Base["队伍2"] = 1;
第三步:进入游戏(如果之前游戏开着可以不用重开),按ESC键,系统菜单,倒数第二项《我的代码》,再确定
胡斐就直接加入了,其它实例都是按照这种方法
后面的其它数据修改就不再重复使用DIY的步骤,如果新手请知晓。
最后一个获得物品的方法看起来可能比较复杂,新手估计没有人能看得懂,但是获得物品的方法应该就是这样写的,可能以后会简单点直接用函数,但是还是希望各位同学能够认真的推敲一下,对以后的讲解中用到的东西能更容易的理解。代码直接复制到DIY.lua文件里面是可以运行的