本月初魔兽怀旧赛季服全面开放,由于内容新颖玩法多样,吸引了大批的拥趸,此篇我们谈谈如何把winda迁移到赛季服。
给大家汇报个情况,插件后续的开发正在进行中,正式版发布会随视频更新; 希望大家不要心急,让我们一起享受编程的过程,在每期的配套视频(同名B站号)后都有代码文件,可以放在游戏中自己修改学习;
这里我在KOOK上开了winda频道,有什么问题和建议,大家可以一起进来讨论:
赛季服编程工具https://kook.top/PYEQ2u
接上篇,我们给出了一些好用的编程插件,同样在赛季服也将用到这些插件,链接:
1.15.0插件开发工具包: 链接:https://pan.baidu.com/s/1CHlLH1XK_xN_cb7ph0iglQ?pwd=wdwd 提取码:wdwd
本次怀旧服使用的客户端版本是1.15.0,前面我们说到使用宏可以得到当前游戏的版本号
/dump select(4, GetBuildInfo())
我们也可以使用插件编程工具Pad,在其编程文本输入框里输入代码,点击“疾跑”按钮运行获得
print(select(4, GetBuildInfo()))
接下来把之前写好的winda插件,复制到经典怀旧服的插件目录里;在游戏里重新/reload界面,我们看到winda已经正常加载;
迁移带来的隐患虽然这里并没有出现什么问题,但其实这会存在隐患;不同版本的插件代码,不是简单的复制就可以完成迁移的;
同样的道理,每当游戏新的版本发布后,会面临着大量不明的插件错误;
这是因为在游戏客户端进行升级时,伴随着新内容的加入,有时还会对游戏API代码进行废弃,也就是说上个版本还能用的功能,这次更新后就不可以用了;
那么在这样的情况下,代码必然会出现问题,这时如果使用旧插件,就会导致插件报错,严重时还会导致界面卡顿,布局错乱甚至影响技能施放等等;
所以针对不同版本的游戏,我们自己的插件也需要做不同的处理;
迁移第一步那么今天,我们先来做好第一步,让winda来加载不同的文件和代码;
之前我们说到,插件必须要有一个与其文件夹同名的.toc文件,这是因为插件在加载过程中,首先要检查其内的.toc
.toc文件就相当于插件的入口,通过该入口客户端知道需要加载哪些代码;
通过toc文件可以把lua代码加载到内存里,之后所有的插件逻辑都在lua文件中修改即可;
当我们的插件要适配不同的游戏版本时,可以有多个.toc文件
这些文件的命名规则是这样的,如下表所示
版本 | 游戏路径 | 文件命名 | 旧版命名(同样支持) |
正式服 | _retail_ | winda_Mainline.toc | winda.toc |
WLK怀旧服 | _classic_ | winda_Wrath.toc | winda-WOTLKC.toc |
经典怀旧服 | _classic_era_ | winda_Vanilla.toc | winda-Classic.toc |
在winda后添加后缀,可以满足加载不同的代码
这些不同的.toc的加载规则是:当多个文件同时存在,游戏会加载当前版本对应的.toc;如果不存在,则会加载没有后缀的.toc;如果都没有,则不会加载插件;
接下来我们来写个简单的例子来展示上面的内容:
首先在winda.toc中,把插件名修改成:winda(无后缀)
## Interface: 30400
## Title: winda
## Title-zhCN: winda(无后缀)
接下来在winda.lua中,在开头打印,print("这是加载了无后缀的toc代码!")
print("Hello, winda!")
print("这是加载了无后缀.toc的代码!")
保存进入选人界面reloadUI,我们看到插件名称已经被修改;
接着点进入游戏后,可以看到聊天栏也输出了打印内容;
接下来回到插件目录,新建winda_Vanilla.toc文件以及winda_Vanilla.lua文件;
复制winda.toc的内容到,winda_Vanilla.toc里;修改插件名称为:winda(经典怀旧服),并修改最后一行的加载文件;
## Interface: 11500
## Title: winda
## Title-zhCN: winda(经典怀旧服)
# 通过toc加载代码
# 这里相当于一个入口
winda_Vanilla.lua
打开winda_Vanilla.lua,在开头打印,print("插件加载了修改后的文件代码,之前的代码失效了!")
print("插件加载了修改后的文件代码,之前的代码失效了!")
保存上面修改的内容,重新进入角色选择界面;这时我们发现,插件的名称发生了改变;
点击进入游戏后,也出现了预期的效果;
插件并没有运行我们之前的代码,而是通过带有后缀名的.toc文件,将我们的代码引到了另一条“路”上;
这样一来,基于上面的机制,我们可以在插件代码里,添加多个不同后缀名的.toc,从而使插件可以适配不同版本的魔兽客户端;
当然,在游戏代码变的复杂后,我们不可能在每个版本里,都重新写一份代码;
大部分情况下代码是可以通用的,只是当遇到某些特殊情况时,有些代码版本支持,而有些版本不支持;
代码迁移版本是个复杂的问题,需要具体问题具体分析;之后遇到我们会详细讲解;
以上祝大家在赛季服里,都有个好的际遇!!!
我在听风,也在等你。
,