仙五前修改吧 关注:167贴子:15,449

五前修改入门教程

只看楼主收藏回复

先睡一觉再更


1楼2014-11-07 13:42回复
    准备工具
    http://tieba.baidu.com/p/3395867455


    本楼含有高级字体3楼2014-12-10 22:52
    回复
      使用方法
      壹:PKG_Extractor_V2.5
      这个是用来解包pkg文件的,可以看到游戏目录下有不少的pkg文件,比如script.pkg,
      config\data.pkg。
      这里顺便解释下解包和封包好了,(按我的理解)封包就是把一些类型或者用途相同的文件封装在一起,例如文件夹或者rar压缩文件都可以算是一种封包,需要相应的程序才能把里面的文件再提取出来,就是解包。解包一般比封包容易(虽然我不会)。
      游戏程序自然是可以识别封包后的文件的,我们在解包出来进行修改之后,一般要重新封包后才能被游戏识别。但是仙五前有一个非常好的优势,就是游戏可以识别、并且会优先读取同文件夹下解包的文件。
      这么说可能有些迷糊,举个栗子就好了:
      用上面的PKG解包软件,可以看到data.pkg里面大都是一些xml格式的文件。

      根据data.pkg的位置,我们在游戏目录\config文件夹下,建立data文件夹。
      然后把data.pkg里面的一个名字为item.xml的文件提取到这个文件夹下

      (因为有图片就分几楼发好了,以免被吞)


      本楼含有高级字体4楼2014-12-10 22:57
      收起回复
        打开提取后的文件我们看到了什么?

        明文啊同学们还是中文的啊一目了然啊
        好吧淡定……
        真是太好懂了,我们把第二行的“止血草”三个字改了,比如改成"创可贴“,然后保存。
        打开游戏(注意,如果游戏已经打开,必须重启才有效果)
        读个有止血草的档,原来的止血草名称是不是就改成了”创可贴“了?
        据说原理是这样的!主程序会到config目录下找data文件夹,里面有item.xml,就读进程序来。然后发现其他的文件都没有,就到config目录下找data.pkg,把里面其他的文件读入游戏。
        怎么样,要改是不是炒鸡轻松啊~~~
        data里面的文件都比较重要,可以考虑把data.pkg整个的提取到data文件夹下,反正也就十几M。
        那么这么多文件的意思是什么?怎么用?请看这里~
        http://tieba.baidu.com/p/3390991372


        本楼含有高级字体5楼2014-12-10 23:09
        收起回复
          接下来就要说到脚本了。script.pkg,这个只有12M的文件,在我看来是整个游戏的灵魂(其余data、音乐贴图什么的都是骨架)。这个文件控制着整个游戏的开始、运行和结束。
          你如果直接用上面的解包程序,解包script.pkg后会得到一些lua格式的文件,如果用记事本查看,会看到乱码。其实这是加了密的脚本,已经有前辈为我们解密了,就是准备工具里面的
          贰:script.zip
          你要做的,就是下载……
          把下载解压后的文件都放到游戏目录\script文件夹下,再改动就可以直接产生效果。不过建议备份,即先解压到一个专门的文件夹存放,因为这个是不能用pkg直接解压的,要是哪个地方改错了就得重新下载了。
          script文件夹下文件超级多,打开大部分都是些英文,看不懂,眼花缭乱怎么办?
          先别急。我们先找到原来的data文件夹下的item.xml,打开,找到止血草的脚本id

          是101对吧!然后我们找到data 文件夹下的scriptlist.ini(我管他叫做脚本索引),用我大记事本的搜索功能,搜索关键字"101=",立马就找到一个地方

          没错这就是我们要的东西。对应关系是止血草→101→item\item001。也就是说item101记录着止血草的脚本。
          这时候找到script\item文件夹下的item001,打开
          我们看到了


          本楼含有高级字体7楼2014-12-12 20:02
          收起回复
            @大港口舰
            快来说说ScriptHelper怎么用
            探测行动周期至今不会


            IP属地:浙江10楼2014-12-12 22:28
            收起回复
              1.挂载脚本
              迄今为止,我们调用脚本都是来自script目录下的lua,它们来自于各种各样的功能,比如skill文件夹内的lua要通过使用相应的仙术来调用, monsterai内的lua要在相应的NPC行动时才会调用。
              现在利用控制台,我们可以随时随地调用我们需要的函数。

              如上图,我们利用"rrun"函数。
              这个函数的使用方法是:"rrun 文件夹 文件名"
              这个文件夹指的是script文件夹作为主目录,例如要调用止血草的脚本,就应该输入
              "rrun item item001"
              这个时候,程序会在script\item目录下寻找item001.lua,立即执行。
              不过这时候系统一定会出错,在我这里反映的情况是直接报错退出。
              为什么呢,因为item001,lua的第一句话就是
              id = player.GetTargetPlayer() --取使用物品的目标ID
              我们这里直接挂载的脚本,根本没有目标可言,而止血草是对目标回复精,于是就会出错啦。
              因此为了避免麻烦,改物品仙术等等调用的脚本还是不要直接挂载使用了。
              现在我们随便进入一场战斗,然后在script目录下新建一个文件a.lua,在其中输入以下文字:
              function a()
              npc.ChangeHP(1,1,0,-50) --敌方全体失去精50%
              end
              然后保存。
              接着进入游戏,确认下敌人都是满血。

              切换到控制台,输入"rrun . a"
              其中那个"."(点)的意思是就在script目录下
              回车,再回去看看敌人的血量

              已经成功实现了效果。
              控制台载入脚本的好处在于,不必一遍遍读档来测试自己的脚本哪里错了,另外还能中途插入一些想干的事情,比如打到一半想直接胜利了就输入battle.End(),想让自己直接挂掉就输入battle.Loose(),很方便。
              注意有的函数可能会报错,玩的时候不要玩脱了,要是报错了就只能重启游戏吧。


              本楼含有高级字体12楼2015-01-02 10:25
              收起回复
                2.输出变量的值
                这个对应脚本中一个函数:global.Print(a).
                举例:敌方血量只有一个血条,我想要知道具体数值怎么办?

                把刚才的a.lua的内容改成以下文字:
                function a()
                a=npc.GetHP(90000,0) --图中草妖的ID为90000,获得其血量精确数值,并赋值给a
                global.Print(a) --在控制台输出a的值
                end
                然后在控制台输入"rrun . a",就会得到以下结果

                那么170就是那个草妖的精确血量值了。
                print的用处很多,例如取随机数的时候我想知道系统取了多少,就可以输出;我一段脚本运行没问题但就是得不到想要的结果,就可以逐个print变量看看到底哪一步出了问题。
                下面举个例子,刚好前几天写的
                function a()
                h=10
                for j=0,9,1 do
                global.Print(h+j)
                player.AddStat(0,1,200,j,1)
                for i=0,9,1 do
                if i~=j then
                player.AddStat(0,1,200,i,1)
                if battle.CheckPlayerStat(1,j)==0 then
                global.Print(i)
                end
                player.RemoveStat(0,1,i
                player.AddStat(0,1,200,j,1)
                end
                end
                player.RemoveStat(0,1,j)
                end
                end
                这个脚本对0~9号的状态进行测试(夏侯得在队),可以得到:
                某编号的状态被加上去之后,哪些0~9状态编号会加不上去。
                当然这个某,是依次取值与0~9的。
                不写注释,如果读者有兴趣的话可以研究研究。


                本楼含有高级字体13楼2015-01-02 10:45
                收起回复
                  3.测试脚本的编译错误
                  这个其实没必要单独拿出来写,如果多试试就会发现。例如,在脚本a中输入:
                  function a()
                  a=battle.GetRndNumber(1,100) --a取1~100的随机数
                  if a>33 then --如果a>33
                  battle.End() --战斗立即结束
                  end
                  然后进入战斗并且执行脚本,会得到如下结果

                  意思是少了个end。当然人家是机器,它说你少了end不代表就真是少了end,但至少证明脚本的结构是存在问题的,这样也可以迅速排查问题,不至于重复试验发现自己栽在了最基本的地方。
                  另外,如果你脚本中用了程序没有的函数,或者函数用错了,控制台都会给出提示的。


                  本楼含有高级字体14楼2015-01-02 10:53
                  收起回复
                    总而言之,进入游戏一般都要通过Pal5Q_ScriptHelper来运行,除非你确认自己用不到。因为有了这个,实在是方便的很呐


                    15楼2015-01-02 10:55
                    回复
                      弱弱的问一句,以上方法是否适用于五代


                      IP属地:辽宁来自手机贴吧16楼2015-03-05 11:45
                      收起回复
                        伍、UI.pkg
                        http://tieba.baidu.com/p/3780775275
                        UI记录了游戏界面的一些东西,也是xml格式的,与data不同,属性大多是英文的,不容易理解。
                        上面的链接对UI的文件进行了一些简要的介绍。


                        本楼含有高级字体17楼2015-05-23 22:58
                        回复
                          柒、global.sav
                          这个文件也是以二进制流存储,存在Save目录下,平时可变,内容极少,重要作用是可以修改已经获得的称号。
                          文件结构研究报告:http://tieba.baidu.com/p/3598677000
                          global.sav修改器:http://tieba.baidu.com/p/3719674900


                          本楼含有高级字体19楼2015-05-23 23:17
                          回复
                            我想问一下,如果我想修改人物的属性,比如我想把龙溟设置成全抗70,也是这样解包修改么?


                            IP属地:山东来自Android客户端20楼2015-10-05 13:27
                            收起回复
                              我想知道可以修改人物的连击次数么?就像瑕那样可以连4下


                              IP属地:广东21楼2015-11-09 18:25
                              回复