铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 16801|回复: 12

第一讲 序言与基本数据修改

  [复制链接]
发表于 2011-9-29 11:00 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
本帖最后由 蓝烟清 于 2011-10-6 16:07 编辑


第一讲 序言与基本数据修改

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. for i=1, CC.MyThingNum do                                --再引入一个全局变量CC.MyThingNum,可拥有的最大物品种类数量,200
  5.         if JY.Base["物品"..i] == thingid then                --如果包里有这个物品,累加数量
  6.                 JY.Base["物品数量"..i] = JY.Base["物品数量"..i] + num;
  7.                 break;
  8.         end
  9.         elseif JY.Base["物品" .. i]==-1 then                --如果这个物品在包里不存在,新增物品
  10.                 JY.Base["物品"..i] = thingid;
  11.                 JY.Base["物品数量"..i] = num;
  12.         end
  13. 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 and num > 0 then                --如果这个物品在包里不存在,新增物品
  12.                 JY.Base["物品"..i] = thingid;
  13.                 JY.Base["物品数量"..i] = num;
  14.                 break;
  15.         end
  16. end

  17. if pos > 0 and JY.Base["物品数量"..pos] <= 0 then                --如果物品用光了
  18.         for i=pos+1, CC.MyThingNum do                --必须把这个物品移掉,并且后面的物品都需要向前移动一格
  19.                 JY.Base["物品"..i-1] = JY.Base["物品"..i];
  20.                 JY.Base["物品数量"..i-1] = JY.Base["物品数量"..i];
  21.         end
  22.         
  23.         --最后那个物品直接清掉
  24.         JY.Base["物品"..CC.MyThingNum] = -1;
  25.         JY.Base["物品数量"..CC.MyThingNum] = 0;
  26. end
复制代码
上面就是一个比较完整的新增物品了(包括减少物品),思想和用数组定义链表一样,中间断了后面的都要往前移,要不然就有空物品出现了

      基本数据先到这里吧,下次再讲人物数据的相关修改

1.5   结束语
      虽然现在有一些函数已经实现了某些功能,但是我认为还是基础最重要,所以不打算讲关于函数的。
      只有学会了基础,你才可以更随意的定义属于自己的函数,为个性化的MOD做好铺垫


1.6   补充知识
      由于会有一部分新手不知道这些代码怎么去用,所以在这里增加了一点
      首先苍炎版本必须是905版以上(目前最高是905,据S大说国庆会更新)
      比如你的苍炎目录在d:\苍炎,按下面三个步骤走:
      第一步:用记事本打开d:\苍炎\script\DIY.lua文件
      第二步:以第二个实例加入胡斐入队,在DIY.lua文件中输入JY.Base["队伍2"] = 1;
      第三步:进入游戏(如果之前游戏开着可以不用重开),按ESC键,系统菜单,倒数第二项《我的代码》,再确定
      胡斐就直接加入了,其它实例都是按照这种方法


      后面的其它数据修改就不再重复使用DIY的步骤,如果新手请知晓。
      
最后一个获得物品的方法看起来可能比较复杂,新手估计没有人能看得懂,但是获得物品的方法应该就是这样写的,可能以后会简单点直接用函数,但是还是希望各位同学能够认真的推敲一下,对以后的讲解中用到的东西能更容易的理解。代码直接复制到DIY.lua文件里面是可以运行的

评分

参与人数 1声望 +8 收起 理由
陈建北 + 8 好贴奖励

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-29 12:19 | 显示全部楼层
很好的教程系列计划,强烈支持!

再多写几帖就发一个合集吧
把各个帖子的链接和简介挂到此帖中,方便玩家查找
到时我将此帖置顶



点评

感觉S大的支持。算起来应该有四五个贴了,但是感觉不连贯。还在慢慢整理  发表于 2011-9-29 12:38
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-29 13:03 | 显示全部楼层
刚刚还在想S大怎么还没出来加分呢

点评

其实我觉得,S大发了源码可能会好很多。但是。。。发源码就代表S大归隐,矛盾。  发表于 2011-9-29 20:13
其实我更希望S大关注遗留问题,而不是加分。呵呵  发表于 2011-9-29 16:33
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-29 15:45 | 显示全部楼层
太好了,以后有兴趣也自己弄个玩玩。

点评

嗯。有兴趣的可以一起学习  发表于 2011-9-29 16:31
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2011-9-29 14:02 | 显示全部楼层
回复 tsmdsyp 的帖子

看源码,有几个函数看不懂
llib.SetS(id,x,y,level,v);
lib.GetS(id,x,y,level,v);
lib.SetD(Sceneid,id,i);
lib.GetD(Sceneid,id,i);

前面两个应该是人物相关的事件设置和获取
后面两上是场景编辑相关的
但是不知道具体是什么作用。。。没有源码,也没找到说明,不太明白每个参数的意义
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-29 23:40 | 显示全部楼层
蓝烟清 发表于 2011-9-29 14:02
回复 tsmdsyp 的帖子

看源码,有几个函数看不懂

读取和设定 S或D 数据的函数
S数据共有6层
D数据有11层
具体的看下FE就明白了

用的时候直接写成SetS(.......)这样即可

点评

已经搞明白了。 已经放出第三讲,准备第四讲了哦。 有问题会咨询S大。希望S大多多支持  发表于 2011-10-1 00:11
FE和SFE都可以 那帖啊,呵呵 当时遇到了一个奇怪的现象  发表于 2011-9-30 15:41
是不是SFE。 话说看到了S大搞不懂编辑开箱子事件的帖子,囧  发表于 2011-9-30 00:00
S大这么晚。。。FE是什么? 没接触过呢。 在哪里下载  发表于 2011-9-29 23:52
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-10-6 14:26 | 显示全部楼层
增加物品的代码,我复制的,怎么一运行就自动关闭游戏呢?我就是把local thingid = 0的0换成其他的了,就不行吗?我包里没有的物品都不行,有的物品就可以。求指导啊~~~我是一只小白牛。

点评

呵呵。不好意思啊,代码有点问题。已经修正,加多了num和pos的判断  发表于 2011-10-6 16:08
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-10-6 18:34 | 显示全部楼层
很好用~~谢谢啦!
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-11-4 20:25 | 显示全部楼层
求助一个。。。我WIN7系统 安装了FISHEDIT的,但是用记事本打开DIY。lua文件是乱码= = 怎么弄呢?

点评

肯定是乱码的。。。都加密过。。  发表于 2011-11-4 22:14
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
头像被屏蔽
发表于 2011-12-4 14:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-12-19 21:47 | 显示全部楼层
本帖最后由 无量虚空神主 于 2011-12-19 21:56 编辑

始终无法增加物品,修改了所有的双引号也没办法......一运行就直接跳出。
PS1:看了下面那个知道怎么编辑了,上面的语法错误请蓝大修改一下,多了一个END就误导了我.....
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-4-7 13:27 | 显示全部楼层
楼主真是个好人,太有耐性了,你的女朋友  家人都有福了
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-7-31 21:50 | 显示全部楼层
蓝大 很喜欢你的文章 希望多一些这样的文章给我们新手
文章可以转载到我自己的博客里面么(不能的话我就删除哈)?我会注明出处的。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-12-24 04:21

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表