查看完整版本: [讲解]什么是插件?插件是如何工作?及插件的制作

书中虫 2009-4-11 20:02

[讲解]什么是插件?插件是如何工作?及插件的制作

[size=4][font=新宋体]这个论坛人气很旺,很多朋友知道用插件,但对插件的本质还有一定的迷惑。通过对心情等高手的工作的再研究,我和朋友们分享一下我理解的什么是插件。[/font]
[font=新宋体][/font]
[font=新宋体]1、程序的主体是Game.exe,这一点是肯定的。jxonline只是一个为了更新而出的一个引导程序。[/font]
[font=新宋体]2、Game.exe是C++编写的,它在运行的过程中,需要调用很多子程序、设置还有参数表。[/font]
[font=新宋体]3、子程序主要是以Lua格式出现的,设置是Ini文件,参数表则是Txt文件为主了[/font]
[font=新宋体]4、那么这些程序在哪呢?如果你没有使用插件,那么这些文件都被打包在游戏目录下一个叫pak的目录中了,大家可以打开看一下,一共有15个以pak结尾的文件,其中就有大家熟悉的名字,比如script.pak ui.pak setting.pak。 这些文件是在game.exe开始执行后,也就是启动游戏后被打开。[/font]
[font=新宋体]5、朋友可能会想,是不是心情之类的高手是不是把这些pak文件给修改以后,游戏就被改动了?不是的。Game.exe有一个很特殊的特点,它首先在游戏目录下寻找游戏中被解开的文件,找到就调用解开的这个文件,如果找不到才去找pak文件中对应的文件。例如自动挂机中最重要的文件之一\script\misc\auto_fight.lua,如果你的游戏目录里有这个文件,game.exe就调用这个文件,如果你把这个文件删除了,Game.exe就去调用pak\script.pak中打包的这个文件.[/font]
[font=新宋体]6、编写插件的工作就是把pak文件中需要修改的对应文件解出来,修改后放在对应的目录下,这样game.exe就去调用对应的修改后的文件,这样游戏里插件就起作用了。[/font]
[font=新宋体]7、是不是所有pak文件中的程序都能被改写呢?答案是你可以改,但不一定起作用。pak包里的程序有的是在服务器端执行的,比如合玄,强化,这样的程序你改了也没有用处的。[/font][/size]
[font=新宋体][size=4][/size][/font]
点击查看[url=http://bbs.duowan.com/thread-13924606-1-1.html][size=5][color=magenta]剑侠世界插件制作说明(2009-4-28更新后)[/color][/size][/url]

[align=center][b][font=SimSun][size=18pt]关于自定义窗口的制作[/size][/font][/b][b][size=18pt][/size][/b][/align]

[font=SimSun]终于可以自定义窗口了,也就是说,我们不用再使用系统的窗口来增加自己的功能,而可以编写全新的窗口。很令人兴奋的一件事,不是吗?[/font]

[font=SimSun]本文介绍的是自定义窗口的写法,建议的读者是插件的开发者,而不是使用者。[/font]
[font=SimSun]本文介绍的方法需要将游戏更新到[/font]09-06-05[font=SimSun]日之后的版本,否则无法起效。[/font]

[font=SimSun]第一步:建立插件目录[/font]
[font=SimSun]在[/font]”[font=SimSun]游戏[/font]\Interface”[font=SimSun]目录下建立一个新的目录,目录名无所谓,只要和现有的插件目录名不重复就可以,不建议用中文,可能引发不必要的问题。[/font]
[font=SimSun]在下面的说明中,我们假设这个目录名为[/font]: testmywnd

[font=SimSun]第二步:建立插件设置文件[/font]plugincfg.ini
[font=SimSun]和其他插件一样,需要在[/font]testmywnd[font=SimSun]目录中建立一个插件设置文件[/font]plugincfg.ini[font=SimSun],不可改名,里面的内容如下:[/font]

[PluginInfo]
PluginName=[font=SimSun]测试我写的插件[/font]
PluginDate=20090518
LoadState=1
PluginContext=[font=SimSun]测试我写的插件[/font]

[font=SimSun]节说明:[/font]
PluginName
[font=SimSun]插件名,不要过长[/font]
PluginDate
[font=SimSun]建立日期[/font]
LoadState
[font=SimSun]是否起效,[/font]1[font=SimSun]为起效,[/font]0[font=SimSun]为不起效[/font]
PluginContext [font=SimSun]插件说明,可以适当长一些[/font]

[font=SimSun]第三步:建立窗口元素定义文件[/font]
[font=SimSun]熟悉剑世插件的朋友们一定见过很多扩展名为[/font]ini[font=SimSun]的文件,这一般就是窗口定义文件,我们需要先定义一个窗口文件,注意文件名,那就是未来窗口的名字,大小写也要小心,[/font]LUA[font=SimSun]的大小写是敏感的。下面我给出一个例子[/font]testmywnd.ini

[Main]
Left=0
Top=0
Width=210
Height=540
Image=\image\ui\001a\item\itembox_panel_bg.spr
Moveable=1
WndType=WndShowAnimate

Left Top Width Height [font=SimSun]窗口的坐标和尺寸,注意,一般[/font]Left Top[font=SimSun]都是[/font]0[font=SimSun],窗口在游戏中的实际坐标不在这个文件设置[/font]
Image [font=SimSun]背景图,一般为[/font]Spr[font=SimSun]格式,整个游戏几乎都是这种格式,包括动画。[/font]
Moveable [font=SimSun]这个窗口是否可移动[/font]
WndType [font=SimSun]窗口类型[/font]

[font=SimSun]第四步[/font]:[font=SimSun]建立[/font]Lua,[font=SimSun]我起名叫[/font]testmywnd.lua
[font=SimSun]实际上都什么名字不重要,只要不重复就行,窗口名也不是由这个名字定义的。[/font]

local tbMyTest = Ui:GetClass("testmywnd");
--[font=SimSun]定义窗口变量[/font]

print("[font=SimSun]我自己写的插件[/font]");
--[font=SimSun]初始化窗口时调用的语句[/font],[font=SimSun]由于这句话不在任何函数内部,所以只在初始化时调用一次[/font]

function tbMyTest:OnOpen()
--[font=SimSun]窗口被打开时调用这个函数,注意[/font]OnOpen[font=SimSun]可能不只被执行一次[/font]

print("[font=SimSun]哈哈哈我来啦[/font]");

print("[font=SimSun]我又走了[/font]");
end

function tbMyTest:OnClose()
--[font=SimSun]窗口被关闭时被调用[/font]


end

Ui:RegisterNewUiWindow("UI_TESTMYWND", "testmywnd", {"a", 100, 100}, {"b", 100, 100}, {"c", 100, 100});

--[font=SimSun]非常重要的一句话,在系统中注册这个窗口类。[/font]
--UI_TESTMYWND[font=SimSun]是全局的变量名称,以后调用这个窗口就靠这个变量名[/font];
-- testmywnd[font=SimSun]第三步中定义的[/font]ini[font=SimSun]名称[/font]
-- {"a", 100, 100} abc[font=SimSun]分别代表在不同分辨率下窗口的起始位置[/font]


[font=SimSun]第五步:测试[/font]
[font=SimSun]做完这一切以后,我们就可以测试一下新窗口是否有效了。[/font]
[font=SimSun]进入游戏后,在[/font]GM[font=SimSun]频道键入以下命令[/font]:
??UiManager:OpenWindow(Ui.UI_TESTMYWND)

[font=SimSun]如果游戏中弹出一个下面的窗口,恭喜你,你的新窗口已经建立了。[/font]


[font=新宋体][size=5][/size][/font]
建议心情还有ChoCho等高手,继续写下去,写给有程序基础的朋友看就行。这样大家一起把这个插件的水平搞上去,程序本身就是一种乐趣。

[[i] 本帖最后由 v風痕 于 2009-6-13 13:12 编辑 [/i]]

caondy 2009-4-12 00:34

科普啊,写的通俗易懂,高[ew49]

哼不理你了 2009-4-12 07:46

是的,一定要顶个,顶

anakeluosi1 2009-4-12 08:34

[hz23] [hz23]

maozhua 2009-4-12 08:47

[quote]原帖由 [i]caondy[/i] 于 2009-4-12 00:34 发表 [url=http://bbs.duowan.com/redirect.php?goto=findpost&pid=70501202&ptid=13809401][img]http://bbs.duowan.com/images/common/back.gif[/img][/url]科普啊,写的通俗易懂,高[ew49] [/quote]确实是 我这样的菜鸟都能看得懂 
支持楼主多发这样的帖子 让大家长见识 学知识

随便玩玩... 2009-4-12 10:36

通俗易懂,想不学都难,加油!!!

期待ing............................

南宫问雅 2009-4-12 10:38

受益匪浅,顶下支持下,留名备用

喜欢黑暗的人 2009-4-13 00:37

解释的非常通俗易懂。

sunwanhua 2009-4-13 02:29

( ^_^ )不错嘛!

bestwapo 2009-4-13 10:24

[ew49] [ew49] 虽然我以前的理解也是对,但也受益非浅啊。

polab 2009-4-13 11:49

[ew49] [ew49] [ew49] 顶楼主

后龙山贼 2009-4-13 17:37

感谢楼主指点.对插件兴趣越来越高了....

1435588010 2009-6-9 00:48

这个帖子发的很好
没有什么术语,让人一看就蒙的[hz24]

天骄神侯 2009-6-9 06:41

虽然看不懂,但一样要定

珍惜第一次 2009-6-9 07:17

水平是相当的高,一看就懂.

没空盗版 2009-6-9 08:22

明白,这样这明白了

明白,这样这明白了.顶

绝情绝恋 2009-6-9 08:25

好东西让我们学到了知识

林木无情 2009-6-9 08:25

受益非浅啊!!支持啊

wangwentai 2009-6-9 08:41

回复 1# 的帖子

呵呵,看楼主的帖子,获益匪浅,终于明白插件是怎么回事了[ew49]

见龙在野 2009-6-9 08:42

我想学着编插件,该从哪下手?

刀盘 2009-6-9 08:54

[ew35] 好好的扫盲贴啊

笨鸟学飞 2009-6-9 09:13

太感谢了,太好了,希望继续啊!期待……

小小虾米游一游 2009-6-9 09:33

好东西 什么都明白了!!!

过路123654 2009-6-9 09:58

[ew49] [ew49] [ew49] [ew49] [ew49] [ew49] [ew49]

小小刀翠 2009-6-9 10:15

牛啊。。。。真厉害,什么时候搞个祈福的插件

新人来玩 2009-6-9 10:33

终于明白了,哪天也看看相关资料自己整个,我学C++的,但久了不整,还老师了

5+5 2009-6-9 10:36

还不会用插件,学习下。

yazisile 2009-6-9 10:52

不怎么懂呀

不怎么懂呀不怎么懂呀不怎么懂呀不怎么懂呀

guyuelong 2009-6-9 11:21

学习了。受用了。。。

葱头° 2009-6-9 12:00

[hz31] [hz31] [hz31]
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: [讲解]什么是插件?插件是如何工作?及插件的制作