查看: 174|回复: 11

[替代Eluna]使用C++随时拓展Azerothcore

[复制链接]

11

时沙

2

精华

2

主题

声望: 156   虚弱: 0

Lv.2

在下咸蛋 有何贵干 交流群808885317

发表于 7 天前 | 显示全部楼层 |阅读模式
本帖最后由 咸蛋 于 2020-1-13 10:17 编辑

    lua(包含JIT)作为通用pe程序外部解释执行解决方案 唯一的好处就是方便 但是根据我多年经验而言 任何脚本语言都应该只作为程序的配置或附属 更不应该作为服务端的核心(纯解释执行场景除外) 当然这对于偶尔使用脚本语言来讲 恰如其分 但终有一天你发现你的程序里的大部逻辑已经都是脚本了(ah shit)

    作为脚本语言之一 lua的缺点无外乎debug不完全的困难 还有执行效率较低(这也是我个人认为应作为附属的根本原因) 对于release版本的C++程序来讲 直接调用成员函数只需要两行汇编指令即可完成 但对于lua来讲这显然是不可能的 为了排除这点我完成了针对Azerothcore的可C++拓展版本 使用动态链接库(dynamic linking library)技术 可以随时随地热加载卸载脚本逻辑 而不对服务端主体产生任何影响 并配置了全套一键生产相关的命令行脚本 使真正的拓展开发具有与lua等同的开发效率 当然唯一的缺点是需要编译器

由于时间关系先到这里 若有问题详细可以看FAQ 和 仓库
帖子售卖内容,购买后显示

FAQ

Q: 这玩意他妈是干嘛的
A: 这玩意是用来写端子脚本的 就是数据库里面的 ScriptName 对应的代码脚本 至于他妈我就不知道是什么了

Q: 这玩意怎么用
A: 先使用 create_new_script.bat 创建一个脚本工程项目 名称自定义但是必须不包含汉字 所有编译器(VS2017)配置均已设定 最多需要手动改下自己的SDK版本
1.png

2.png

再点击.vcxproj打开工程
3.jpg

为要实现的功能添加对应的头文件 此步骤需要根据实际功能自己调整 不懂的需要看看C语言或C++头文件基础
4.png

此处实现了一个gossip脚本 务必注意两个箭头所指的内容必须保持一致 test就是你脚本的名称 CreatureScript是gossip脚本的类型名称 会写的请无视本步骤
5.jpg

编译 并在数据库随便找个大头指定这个脚本
6.png

7.png

8.jpg

进游戏测试 并在不重启服务端的情况下修改脚本功能 gif较大 或 查看原图

                               
登录/注册后可看大图
https://img2018.cnblogs.com/common/1068359/202001/1068359-20200112201311626-1891242369.gif


Q: 与脚本相关的GM命令有哪些
A: script free 命令 释放脚本 释放后该脚本会失效
     script load 命令 加载脚本 加载后脚本被激活 若有需要 可以配合 .reload 命令来重新指定脚本名称
     script update 命令 修改代码后调用该命令 自动执行free 编译 load的全部过程 更新脚本时会使用端子来编译脚本代码 所以游戏会卡 所以除了做测试和紧急更新之外 不推荐使用该命令 可以手动free 然后在端子外部编译 最后再load  


Q: 如何获取全套源码
A: 早期放出过核心代码 目前不考虑无条件放出 但如果您对本端有一定贡献 我将考虑给予代码

参考资料:
1. <<Lua设计与实现>>
2. Dynamic-Link Libraries - Microsoft Docs
3. <<Windows核心编程(第5版)>>



1120

时沙

45

精华

108

主题

声望: 10994   虚弱: 0

管理员

↓收集癖,你懂的↓

万神殿圣光永恒炉石无冕者伊利丹·怒风奔波尔菠萝泰坦之握金鸡报晓瓦兰纳尔·远古王者之锤积少成多时沙之瓶炉石天马为了部落!Doge雷施哼哼(lulus制)uiwow(lulus制)银色北伐军黑色宝石猎豹泰兰德·语风莉莉安·沃斯祖国万岁!!小咕荣耀属于联盟!

发表于 7 天前 | 显示全部楼层
之前有想过把az的模块改成dll的 没想到楼主早就已经弄出来了

11

时沙

2

精华

2

主题

声望: 156   虚弱: 0

Lv.2

在下咸蛋 有何贵干 交流群808885317

 楼主| 发表于 7 天前 | 显示全部楼层
ayase 发表于 2020-1-11 11:50
之前有想过把az的模块改成dll的 没想到已经有人早就弄出来了

刚刚随手翻了下Azerothcore的commit  为了做dynamic link 把 ACE_Singleton  去掉了   其实不用改  原因是跨进程空间内存访问的问题  使用一个inline的函数封装一下  再导出就可以了  因为对象不跨进程但函数可以   压栈之后会访问到该进程的内存环境

19

时沙

0

精华

0

主题

声望: 55   虚弱: 0

Lv.1

炉石

发表于 6 天前 | 显示全部楼层
ayase 发表于 2020-1-11 11:50
之前有想过把az的模块改成dll的 没想到楼主早就已经弄出来了

一小时只能创建5个副本,如果要改动,应该在源代码里面哪个地方改

88

时沙

1

精华

1

主题

声望: 116   虚弱: 0

Lv.2

炉石

发表于 6 天前 | 显示全部楼层
没有看到付费的选项啊
[发帖际遇]: wh11经常偷加摩尔的钱,积攒70 金币. 幸运榜 / 衰神榜

637

时沙

13

精华

29

主题

声望: 2894   虚弱: 0

荣誉会员

万神殿炉石无冕者奔波尔菠萝金鸡报晓瓦兰纳尔·远古王者之锤积少成多时沙之瓶炉石天马Doge雷施uiwow(lulus制)泰兰德·语风祖国万岁!!小咕

发表于 5 天前 | 显示全部楼层
本帖最后由 萌萌的战神 于 2020-1-13 00:53 编辑
wh11 发表于 2020-1-12 23:31
没有看到付费的选项啊

回复错了....不好意思啊
梦想遥不可及 但我并不放弃

637

时沙

13

精华

29

主题

声望: 2894   虚弱: 0

荣誉会员

万神殿炉石无冕者奔波尔菠萝金鸡报晓瓦兰纳尔·远古王者之锤积少成多时沙之瓶炉石天马Doge雷施uiwow(lulus制)泰兰德·语风祖国万岁!!小咕

发表于 5 天前 | 显示全部楼层
感谢大神分享,我辈楷模。谢谢了,学习中
梦想遥不可及 但我并不放弃

165

时沙

1

精华

1

主题

声望: 977   虚弱: 0

Lv.4

炉石祖国万岁!!

发表于 5 天前 | 显示全部楼层
大佬就是大佬,论坛已经好久没有大佬发这么有深度的帖子了,谢谢大佬分享

49

时沙

0

精华

2

主题

声望: 395   虚弱: 2

Lv.2

炉石瓦格里的标记

发表于 4 天前 | 显示全部楼层
大佬的操作看不懂  但是知道很强!!!!

11

时沙

2

精华

2

主题

声望: 156   虚弱: 0

Lv.2

在下咸蛋 有何贵干 交流群808885317

 楼主| 发表于 4 天前 | 显示全部楼层
cong9191 发表于 2020-1-14 22:02
大佬的操作看不懂  但是知道很强!!!!

以后就发发入门帖
快速回复 返回顶部 返回列表