结构很简单。
只不过在command_giver身上多了一个叫sentence_t的数据指针结构。
该数据结构包括:
function.s 函数string name
function.f 函数指针
next 指向下一个sentence
flag 来判断传入的参数是一个string还是一个function
ob 函数的own ob指针
verb 指令string
然后每加一个add_action,是在栈顶连上一个sent的结构,然后把
把sent结构的next指向当前栈顶,然后移动command_giver->sent
指针,让它指向sent。
这里就产生了一个BUG,由于搜索add_action的时候是从栈顶往栈底
搜索,所以后加进来的add_action实际上会被先搜索到。这里就会
产生很多BUG,比如新加一个add_action("do_sth","",1)来让do_sth()
获取所有指令的执行权。
那么我们要修改这个BUG,我建议的方法是在simulate.c中找到这两句:
p->next = command_giver->sent;
command_giver->sent = p;
改成:
if (! command_giver->sent ) {
command_giver->sent = p;
return;
}
bb = command_giver->sent; //bb在前面要声明一下:sentence_t *bb;
while(bb->next) bb = bb->next;
bb->next = p;
然后重新编译你的mudos即可修改掉这个BUG。
尊重作者 转载请注明出处52mud.com