yllr 发表于 2012-7-27 13:43:34

[ytin]求教关于ytin的一个问题。

使用了很长时间的ytin了,一直感觉很好,基本上需要的功能也都有。

最近出现个必须要act抓取匹配结束标志的问题,怎么都找不到ytin的结束标志。试了$,根据ytin作者给我回的邮件又试了\$,\\$,都宣告失败。

我现在遇到的问题,必须要匹配行结束才行,不然无法解决。不知道哪位ytin高手知道ytin的结束标志是什么。

坐等答案哦。

北大侠客行MUD,中国最好的MUD

alucar 发表于 2012-7-27 19:00:31

ytin应该和tintin++类似吧,@redcoat

redcoat 发表于 2012-7-27 19:17:42

ytin的语法的确和tt++差不多,毕竟ytin是yet another tintin++,呵呵!
如果ytin采用的是tintin++的act的话,下面是官方的解释:If the message ends with a $ the end of the action message and mud message must match.所以$在结尾就行。楼主已经提出了不工作,那就是ytin的用法不一样了。

redcoat 发表于 2012-7-27 19:41:19

我查了一下ytin的源码,粗略浏览下,貌似没有对$的限制,只有对^的限制:(见源码17行)/******************************************************************/
/* check if a text triggers an action and fill into the variables */
/* return TRUE if triggered                                       */
/******************************************************************/

int check_a_action(const char *line, const char *action, struct session* ses)
{   
      char result;
      char *temp2, *tptr = result;
      const char *line2;
      inti, len, flag;
      
      for(i = 0; i < 10; i++)
                var_len = -1;
      substitute_myvars(action, result, ses);
      
      if(*tptr == '^') {
                if((len = match_a_string(line, ++tptr)) == -1)
                        return(FALSE);
                line += len;
                tptr += len;
      }
      else {
                flag = TRUE;
                len = -1;
                while(*line && flag)
                        if((len = match_a_string(line, tptr)) != -1)
                        flag = FALSE;
                else
                        line++;
               
                if(len != -1) {
                        line += len;
                        tptr += len;
                }
                else
                        return(FALSE);
      }
      
      while(*line && *tptr) {
                temp2 = tptr+2;
                if(!*temp2) {
                        var_len-'0'] = strlen(line);
                        var_ptr-'0'] = line;
                        return(TRUE);
                }
               
                line2 = line;
                flag = TRUE;
                len = -1;
               
                while(*line2 && flag)
                        if((len = match_a_string(line2, temp2)) != -1)
                        flag = FALSE;
                else
                        line2++;
               
                if(len != -1) {
                        var_len-'0'] = line2-line;
                        var_ptr-'0'] = line;
                        line = line2+len;
                        tptr = temp2+len;
                }
                else
                        return(FALSE);
      }
      
      return(*tptr ? FALSE : TRUE);
}

redcoat 发表于 2012-7-27 19:44:49

ytin基于早期的tt++,现在tt++已经和早期的tt++完全不一样了。从代码层上,基本上已经重新实现。而且有很多很酷的新功能。
如果喜欢ytin的话,建议尝试下tt++

yllr 发表于 2012-7-31 17:04:55

正准备转型到ytin,谢谢帮忙,我就没想到去看源码。不过我的c水平太差,看了也看不懂。

对了,再问redcoat一个问题,tintin里面怎么改变当前文件路径,比如ytin里面有个cd命令,可以改变文件系统的当前路径。
再有就是tintin里面是不是默认颜色的?怎么开关颜色触发?

redcoat 发表于 2012-7-31 17:18:06

回复 7# yllr


    linux下的话调用#system命令就行,比如#system cd来改变路径。

颜色触发用~来触发,比如#act {~颜色代码some thing}
颜色代码#config convert来查看。
为了便于阅读,最好把颜色做成变量,比如:
#var RED 红色的颜色代码

yllr 发表于 2012-7-31 20:26:35

测试了半天tintin++的windows版本,感觉很别扭。没有ytin好用,主要有以下几点:

1.tintin++的windows版本是调用putty实现的远程登录,服务器的响应很慢,感觉像慢动作。字体显示的颜色也很暗淡,很不爽。
2.最后输入的命令不保留,如果你想连续用一个命令,必须一次一次的输入,很郁闷。
3.没有找到字符串的处理和文件方面的处理命令,这个在ytin里面非常全。
4.ytin其实就少个地图的功能,不知道北侠没有地图能不能活下去。。。。。。。。

yllr 发表于 2012-7-31 20:31:18

其实class在ytin里面虽然没有专门的命令,但是可以通过用变量来实现,默认这些act都开着,用变量来控制开关。我这里有个例子,其实ytin真的很好用,很爽的。

/var hyrCLASS 0

/nop ***********************hyrCLASS************************
/act {殷正廉在你的耳边悄声说道:一个蒙面黑衣人偷了本官的%0} {/if {$hyrCLASS}{findhyr}}
/act {向%1边逃跑了,你去把他杀掉。} {/if {$hyrCLASS}{/var hyplace %1}}
/act {$_HIR「$_HIG%1$_HIR」$_NOR -(你目前在$_HIY%2$_NOR)} {/if {$hyrCLASS}{/var iweizhi %1;/var Iweizhi %2;/sleep 0.5;Gotohyr}}
/act {$_HIR「$_HIY%1$_HIR」$_NOR -(你目前在$_HIY%2$_NOR)} {/if {$hyrCLASS}{/var iweizhi %1;/var Iweizhi %2;/sleep 0.5;Gotohyr}}
/act {$_HIR「$_HIY莽林之中$_HIR」$_NOR -(你目前在$_HIY%2$_NOR)} {/if {$hyrCLASS}{/var mlCLASS 1}} {4}

redcoat 发表于 2012-7-31 20:40:09

本帖最后由 redcoat 于 2012-7-31 09:00 PM 编辑

回复 9# yllr


1.tintin++的windows版本是调用putty实现的远程登录,服务器的响应很慢,感觉像慢动作。字体显示的颜色也很暗淡,很不爽。
我用的是linux,没有出现这种情况哦
2.最后输入的命令不保留,如果你想连续用一个命令,必须一次一次的输入,很郁闷。
#config repeat on
3.没有找到字符串的处理和文件方面的处理命令,这个在ytin里面非常全。
考虑用lua或perl,perl是众所周知的字符串处理的明星
4.ytin其实就少个地图的功能,不知道北侠没有地图能不能活下去。。。。。。。。
ytin和tintin++本属一家,喜欢哪个就用哪个吧,地图可以调用数据库解决
页: [1] 2
查看完整版本: [ytin]求教关于ytin的一个问题。