网络游戏脚本执行问题

山中岁月 2007-11-27 04:35:13
想讨论一下网络游戏中,类似lua这样的脚本是怎么执行的。
最简单的想法是在服务器执行,因为这样很安全。但是又想到lua这种脚本的执行效率是很低的,如果玩家的每一个操作都要在服务器执行一段脚本的话,服务器的压力就会很大。
魔兽世界也是采用lua的,不知道他是怎么做的。

还有就是在网游里面,lua可以实现哪个层面的功能。是仅仅实现任务流程,还是承担了伤害计算、各种辅助系统(比如装备打造)等大部分逻辑。

我想如果仅仅是任务的话,完全可以不必使用脚本;如果实现主要逻辑的话,又会影响效率。

我曾经想过把刷怪、吃血瓶这种逻辑都用lua实现。就是说,我每使用一个物品,就调用那个物品的一个脚本,由脚本来控制这个物品的实际作用。
这样程序只需要实现一个最基本的框架和一套脚本接口就可以了。
不过后来这种想法没能实现,感觉中间有很多难点没有想通。

写的有点乱,但都是最新想到的一些问题,想和大家讨论一下:)
...全文
1329 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pro_X 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 weixiaohua 的回复:]
这样很不会很慢,我测试的结果是LUA比Delphi和C++慢了10倍左右.
[/Quote]
script & bin?
budweiser 2010-05-27
  • 打赏
  • 举报
回复
楼上的几位说的都不错 学习了
weixiaohua 2010-05-26
  • 打赏
  • 举报
回复
这样很不会很慢,我测试的结果是LUA比Delphi和C++慢了10倍左右.
KHacker_001 2010-04-22
  • 打赏
  • 举报
回复
呵呵呵,新手飘过
Pro_X 2010-04-18
  • 打赏
  • 举报
回复
看娱乐贴真欢乐~
引力场变动源 2010-04-18
  • 打赏
  • 举报
回复
使用Lua并且在乎性能的话,也可以试试LuaJIT,性能比原始的Lua要高一些,据说平均能达到C语言的53%的效率。
x23105612 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhangyilan 的回复:]

你所设想的脚本使用方式,其实现在的游戏服务器就是这样制作的,当然不局限于UI的控制,包括了大部分的游戏逻辑都采用Lua一类的脚本实现。
效率当然是要考虑的,所以有的特殊地方还是不能使用脚本的。
[/Quote]

顶,基本上说完了我想说的
ouloba_cs 2010-04-10
  • 打赏
  • 举报
回复
最好的Lua编辑器:http://download.csdn.net/source/2151412
mgphuang 2008-02-03
  • 打赏
  • 举报
回复
为什么要用脚本,是因为应对变化。
MMORPG的脚本应该有三个应用层次。
Server:逻辑接口。就是你们现在说的。
Client:SDK接口。对图形,网络,音频,文件,物理等的脚本封装接口。
    逻辑层。对Server层次的仿真也用脚本来实现。这部分也是容于变动的。
nightfallrove 2007-12-26
  • 打赏
  • 举报
回复
我曾经想过把刷怪、吃血瓶这种逻辑都用lua实现。就是说,我每使用一个物品,就调用那个物品的一个脚本,由脚本来控制这个物品的实际作用。
这样程序只需要实现一个最基本的框架和一套脚本接口就可以了。

实际上就是这样的,游戏的逻辑、任务、NPC功能基本上都是用脚本来做,这样作主要是为了灵活更新,效率可以有其他办法解决,况且lua的效率是比较高的。
我们甚至更彻底,网络数据过来了,引擎接收并解析成协议,根据协议调用脚本的函数,此后的大部分工作都在脚本完成,只是把个别使用频繁、逻辑固定(不会经常改)的功能提到引擎里做成接口给脚本调用。就这样的模式,设计的好的话,2D游戏,单服5000人没问题。
zhangyilan 2007-12-18
  • 打赏
  • 举报
回复
你所设想的脚本使用方式,其实现在的游戏服务器就是这样制作的,当然不局限于UI的控制,包括了大部分的游戏逻辑都采用Lua一类的脚本实现。
效率当然是要考虑的,所以有的特殊地方还是不能使用脚本的。
xuh2006 2007-12-11
  • 打赏
  • 举报
回复
脚本的使用,主要是程序的灵活性。
谁都知道,服务器端一般是要跑上一周,甚至更长的时间,如果程序出现问题又必须立即解决,你不可能停机更新程序,这个时间,
脚本的作用便凸现出来了,通过刷服务器端的脚本,可以随时地更新新的内容,解决燃眉之急。

在游戏服务器的设计当中,要避免硬编码,使用数据驱动,灵活的控制游戏。
aceattacker 2007-11-29
  • 打赏
  • 举报
回复
lua脚本,我用过它来做UI的控制。与你有相同的想法以后还准备做,如AI的智商,是主动进攻还是被动防御、是站着不动还是来回巡逻、是穷追还是归队等。都可以使用嵌入式lua来实现游戏中对数据的驱动。

“这样程序只需要实现一个最基本的框架和一套脚本接口就可以了”这句是对的。我的理解为,如刷怪(脚本在服务器端)lua先是在服务器端程序会据当前怪物数传给lua嵌入程序,lua嵌入程序再来调用lua脚本。而当前脚本(我以文本文件为例),的语句为:
if(AI.Num < //任数量 )then AI.Create()
end
如果小于某个量,就创建新怪。
这新就轻松的实现了脚本对程序的数据驱动,而不用在程序中去硬编码(将刷怪的判断语句置入内部),从而开发更为灵活。
另外,你讲的“我每使用一个物品,就调用那个物品的一个脚本”这样看来,脚本量将非常大。我的方法是一控制脚本使用另一数据脚本(我没有读完lua不知道直接嵌套行不行),而每个怪物的刷新都使用同一个脚本,这样数据量就会相对减少一些效率也会高一些。
其它的情况就依些类推。


8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧