北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 9319|回复: 11

有人要的半成品框架

[复制链接]
发表于 2010-12-10 21:37:20 | 显示全部楼层 |阅读模式
http://helllua.googlecode.com/files/luamudbot.zip

其实才开始写了一点。
但都是一些比较底层的部分

有 以#开头的通用alias序列的解析。最终目标是能LOOP,if-then,selectcase,dowhihe,define block,希望能比zmud的命令还强大,仅用一串字符串就能新建个机器人。把机器人从写一个代码文件转为写一串宏

命名空间。没有命名空间也是后期hellua难以维护的地方。lua的命名空间不是那么标准。

类的实现。lua是基于anasi c的,本身并不直接支持类,要靠修改meta表来实现。

其它还有什么?我都忘了。

不过现在的似乎是彻底放弃oop。

lua和mud的形式都不太适合oop,更接近于REST的风格。

参考:http://jarln.net/?p=659

现在的想法是。

定义一系列的资源。

新的mod就是挂在新的位置的资源。

然后通过put,get,post,del(这个是http的方法,个人认为new,get,edit,del更直观好用点)

通过操作资源的方式来更适合lua。

比如,以rest的思路,walk走下一步,不是call一个walk函数。而是访问这么个资源。

post(因为是编辑)  "http://system/base/walking/stepnum" '                     ?step="++"'

我希望能用这样的lua代码实现。

system.base.walking.stepnum._edit({step="++"})


rest的方式虽然和传统的编程方式格格不入,现在也只是用在服务器上。

但是作为框架的话。

我觉得提供一个中间层

所有的trigger直接 用正则把 需要的部分 剥离成 参数表 传递给rest的服务器 处理

把mud传回的信息统一化资源化。

然后通过一个 判断 状态的序列 来作为主函数,根据现在的mud状态来判断该干什么。

是最接近人玩mud的方式,理论上也是容错性最高的。

而且 rest方式的文档比较好些。

这个mod里有哪些资源,比如:

system.mod.pkuxkx.food

system.mod.pkuxkx.food.vendor

system.mod.pkuxkx.food.vendor.loc

system.mod.pkuxkx.food.order

............................

所有和食物有关的函数,就是对这些资源的new,edit,get,del操作。

可能更容易维护点。


这些仅是个人刚冒出来的想法
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2010-12-10 21:38:40 | 显示全部楼层
后面的rest部分仅为想法
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-12-10 21:50:25 | 显示全部楼层
半沙发
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-12-10 21:53:20 | 显示全部楼层
第一眼的印象,觉得是某人提供服务器,然后多人共享使用?
还使用到post,get方法---远程机器人资源共享?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-12-10 22:06:15 | 显示全部楼层
仔细看了http://jarln.net/?p=659

本人对oop花过大力气研究,对REST一点都没有接触过,但如果两者真的是某种意义上的对立的话,或许可以这么理解
1 OOP的构建,对于系统本身是资源共享的(或者说是几乎共享的),REST的构建,对于不同的系统,也可以做到资源共享---这个是纯粹猜的
2 基于1的猜测成立的话,如果REST机器人,可能会是一种革命性的变化,就象有了七巧的孩子,可以使用七巧板拼出任意想象中的效果,还不用苦苦考虑某一块板怎么来做
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2010-12-10 22:57:09 | 显示全部楼层
编程的主流依然是oop,只是lua实现oop很累,很没有意义的。
rest根本不是一种编程方法,而是一种web服务器的实现思路,和rpc,soap之类的对应。
rpc和soap其实是把远程的服务器上的函数映射到本机来。相当于一个远程的dll。

就目前来说,基本没有一种语言能用rest的方式编程。

rest其实本质类似于sql语句,put对应create,get对应select,post对应alter,del对应drop
然后传递的参数就相当于sql的from,where之类
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2010-12-10 23:04:19 | 显示全部楼层
就我现在思路来看。我既然要做框架,那么自然就是要在musclient收到的raw data和 写模块的moudlue两个层直接提供一个中间接口。

那么,必然可以把从真实mud收到的数据看成数据库,我们的框架就是服务器对外的接口,而开发的人写的模块作为客户端,把lua的调用函数看成http。本质上其实也是这么回事。

一般来说,现在流行的服务器 形式有两种,rpc,soap和rest形式的。前者是函数导向,后者是资源导向的。

比如walk,rpc形式的服务器,或者说框架,提供的就是一个dowalk函数,甚至是一个walk类。然后客户端通过调用这个函数来实现功能。

而rest风格的呢,是这样。使用3个个资源。locto,要去的位置,locnew,现在的位置。walkingstatus,行走状态。

变更行走状态为start,则开始走。

本质上都是一样的函数,只不过接口不一样。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2010-12-10 23:16:05 | 显示全部楼层
那么,既然本质一样,所谓的rest风格,对于写lua的框架有什么好处?

1.lua的局限
没有真正的面向对象和命名空间之类。比如我的helllua,虽然写的不规范,但很明显看出,带有一定的oop的痕迹。我有个newmode函数,在notepad里生成新模块模板,其实就是基础类的。但是,用起来总有不方便的地方。

2.mud机器人的特性
oop的理念是同样的处理方式,多组数据。寻找出处理数据的共同的方式。但是对于一个mud来说,大部分情况,其实是所有的类只有1个实例,都是静态类。这样,用不用oop其实本质是一样的。作为mud的客户端,我认识,其实就是一个大的数据库,里面储存里你在mud里的各种状态。然后在这个数据库上衍生出尽可能多的函数来实现各种功能。和oop关系实在不大。其实,真正来看,没有几个机器人是用了oop的思路的…………根本没必要。

3.维护的难易度。
描述你的模块有几个资源,总比你的模块有多少种实现要来的容易。
描述资源可选的参数,也总比函数固定的参数,或者类似重载的功能要容易。
资源要加功能,只要多一个对参数的分析就可以了。入口,文档还是一样。
比如,查询帮派
/system/fam?name="fb" 按名字查
/system/fam?zhengqi="+"按正气查
维护起来,肯定是不一样的。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2010-12-10 23:19:33 | 显示全部楼层
最后,也是最最关键的,和写机器人的思路有关。
helllua是基于hook,do_end,do_ok的模式。
本质上还是固定流程的,然后hook乱入。
对于解决单一问题很简单。
但是对于解决跨任务,比如同时执行多个任务,就不是那么简单了。
和人的思维方式也不同。

我更倾向于贴近真人的方式。

就是根据自己的状态来处理。

血少了,治疗,迷路了,找路,中毒了,解毒。

就是要尽量多的收集系统中的状态,然后再来处理。

所以才产生了这样做的想法。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-12-13 14:07:35 | 显示全部楼层
大牛啊,太有想法了
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-28 11:31 AM , Processed in 0.011251 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表