Mush中python调用模块的问题
在mush中用python如何调用module?目前我遇到的困难是:凡是跟mush需要直接相互交流的程序模块都必须在mush的scripting配置文件中而不能在一个主scripting文件调用的模块文件中。例如:
在mush中配置的主scripting文件为:main.py,此外另有一个模块文件存有我定义的一些函数:my_module.py。 在main.py 中用“import my_module”来调用此模块。
如果我在mush中有trigger,把trigger中变量发送到script的函数Y(),但是此函数是在my_module.py中定义,而不是在main.py.
当trigger触发后,mush会出错显示,此函数Y()没有定义。所以貌似mush对主script文件main.py调用 的模块就不认。
请问这有什么解决办法吗?还是我哪里做错了。
另外我希望用模块的方式,这样方便功能扩展和管理。
北大侠客行MUD,中国最好的MUD 方法1,
import my_module
from my_module import my_func
这样就可以了,简单快捷。但只能是全局函数,对于封装还是不够彻底。
方法2,
使用发送到 “10:执行(作为输入的命令重新分析)”
这样可以发送任何类的对象的任何函数,但是需要自己拼接生成调用函数的字符串。
封装的集成度高,但是写法比较丑陋,最好先用基类,处理一下这个问题,其他类再
调用就比较优雅了。 回复 2# xxxcc
还是不行,我那样做了,但是在import的模块函数中有用到world.的方法,比如world.GetTriggerWildcards,然后就出错,mush说不认识world,或者干脆说函数不能解析,但是在主script文件中的world语法,mush就能认,相同的函数放到主script文件中mush就可以顺利的执行。
不知道为什么,我参看littleknife的框架文件,他都是用模块来做的,可是调用起来很流畅。我不是太懂lua,不知道是不是Mush对lua的兼容要比python好的多,还是是我自己的问题。 本帖最后由 xxxcc 于 2015-1-25 03:49 PM 编辑
回复 3# windyhawk
只要把主script中的world传递给模块文件就行了。
方法很多,比如直接将world作为参数传递给模块中的函数,或者直接把world作为类的属性,这样直接可以通过self.world来调用了。
lua确实是使用最方便的,python虽然写起来麻烦,但是python的第三方库很多....你懂的。
下面的压缩包可以稍作参考。
我也学python没几天,所以用的都是最基本的语法。
但是很好的实现了模块的分割功能。 回复 3# windyhawk 本帖最后由 windyhawk 于 2015-1-25 05:38 PM 编辑
回复 5# xxxcc
非常非常感谢,我就说么!看小刀前辈的文件源码,他的模块里用了很多的self,我还以为是lua专用的语法。
我之所以坚持用python主要是工作中要用到,所以希望在玩这个游戏的时候也能有机会练习python:) 回复 4# xxxcc
另外一个问题,望不吝赐教。貌似很多人包括你的script里trigger的用法都是在script中设置trigger。是不是这样比在mush中设置trigger以后在script中调用更灵活,或者说还有其他优点? 回复 7# windyhawk
基本上所有的trigger,我都做了底层的封装,将他们作为协程的一部分,优点是模块化程度高。
如果在Mush中设置,则会变得凌乱且难以维护。
比如睡觉函数,我是这么写的:
def Sleep(loop):
subloop = Segment(loop)
def Loop(segment)
while True:
yield('singleline', u'^你一觉醒来...|^三分钟...|^你正忙...', 'sleep')
if u'醒' in segment.line:
break;
else:
yield ('timer', 5)
subloop.Run(Loop)
这样就单独实现了一个睡觉的函数,不需要建立触发(当然底层还是使用触发方式),而且所有的
代码都在一个函数中,不需要额外设置trigger之类的,非常方便维护,比如发现了sleep某些情况下
无法正常运行的情况,那么只要在这个函数中修复了这个bug,所有调用Sleep的模块,都会解决这个
Bug。
使用也非常方便,比如:
def Study():
if cp > 200:
LearnFromZhuxi()
else:
Sleep()
这种写机器人的思路,我也在另外《远离触发》那个帖子里面提到了。
之所以在那边没上传代码,主要是觉得,既然使用了python,那么对编码肯定有自己独到的见解,
也不会轻易使用别人的代码,而且我的python也是刚学,代码上很多处理并不优雅,所以就只是
写一下思路。 回复 8# xxxcc
真是很有启发,多谢你耐心指导!希望以后能多向你学习。
页:
[1]