北大侠客行MUD论坛

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

另一個有趣的perl function(MUSH)

[复制链接]
发表于 2010-1-19 01:20:54 | 显示全部楼层 |阅读模式
  1. ######################
  2. sub AnalyzeCommand {
  3.     my ($sText) = @_;
  4.     my $a       = 0;
  5.     my $match   = "#IF\\(([^#]*)\\s+([^#]*)\\s+([^#]*)\\)\\{([^{}]*)\\}(\\{([^{}]*)\\})?";
  6.     while (1) {
  7.         $a++;
  8.         if ($sText =~ /$match/) {

  9.             my ($left, $compare, $right, $cmd, $cmd2) = ($1, $2, $3, $4, $6);
  10.             if ($compare eq "<") {
  11.                 if (GetVariable($left) < $right) {
  12.                     $sText =~ s/$match/$4/;
  13.                 }
  14.                 else {
  15.                     $sText =~ s/$match/$cmd2/;
  16.                 }
  17.             }
  18.             elsif ($compare eq ">") {
  19.                 if (GetVariable($left) > $right) {
  20.                     $sText =~ s/$match/$4/;
  21.                 }
  22.                 else {
  23.                     $sText =~ s/$match/$cmd2/;
  24.                 }
  25.             }
  26.             elsif ($compare eq "=") {
  27.                 if (GetVariable($left) == $right) {
  28.                     $sText =~ s/$match/$4/;
  29.                 }
  30.                 else {
  31.                     $sText =~ s/$match/$cmd2/;
  32.                 }
  33.             }
  34.             elsif ($compare eq ">=") {
  35.                 if (GetVariable($left) >= $right) {
  36.                     $sText =~ s/$match/$4/;
  37.                 }
  38.                 else {
  39.                     $sText =~ s/$match/$cmd2/;
  40.                 }
  41.             }
  42.             elsif ($compare eq "<=") {
  43.                 if (GetVariable($left) <= $right) {
  44.                     $sText =~ s/$match/$4/;
  45.                 }
  46.                 else {
  47.                     $sText =~ s/$match/$cmd2/;
  48.                 }
  49.             }
  50.         }
  51.         else {
  52.             $sText =~ s/[{}]//g;
  53.             last;
  54.         }

  55.     }
  56.     my @splitedCommand = split(/;/, $sText);
  57.     for my $index (0 .. $#splitedCommand) {
  58.         my $command = $splitedCommand[$index];
  59.         if ($command =~ /^#(\d+)\s+(.*)$/)

  60.           # --------------------------------------------
  61.           # Command: #3 fight bonze %i
  62.           # Send:    fight bonze
  63.           #          fight bonze 2
  64.           #          fight bonze 3
  65.           # --------------------------------------------
  66.         {
  67.             my ($counts, $cmd) = ($1, $2);
  68.             for (my $i = 1 ; $i <= $counts ; $i++) {
  69.                 my $curCmd = $cmd;
  70.                 $curCmd =~ s/\%i/$i/;
  71.                 AnalyzeCommand($curCmd);
  72.             }
  73.         }
  74.         elsif ($command =~ /^#dis$/)

  75.           # --------------------------------------------
  76.           # Command: #dis
  77.           # For Disconnect;
  78.           # --------------------------------------------
  79.         {
  80.             Disconnect();
  81.         }
  82.         elsif ($command =~ /^#wa\s+(\d+)$/)

  83.           # --------------------------------------------
  84.           # Command: #wa 2000
  85.           # Will send command after 2 second
  86.           # --------------------------------------------
  87.         {
  88.             my $second = $1 / 1000;
  89.             my $cmd = join ';', @splitedCommand[ ($index + 1) .. $#splitedCommand ];

  90.             #$world->Note($cmd);
  91.             #$world->Note("$priorCmd,$second,$cmd");
  92.             $second = 0.1   if ($second < 0.1);
  93.             $second = 86399 if ($second > 86399);
  94.             DoAfterSpecial($second, "AnalyzeCommand("$cmd")", "12");
  95.             last;
  96.         }

  97.         #elsif($command =~ /^set (\w+)=(.+)/)
  98.         ## --------------------------------------------
  99.         ## Command: #set var=value
  100.         ## Will set a variable to value
  101.         ## --------------------------------------------
  102.         #{
  103.         #    if(SetVariable($1,$2) == 0){
  104.         #        Note("Set $1 to $2");
  105.         #    }else{
  106.         #        Note("Can not set $1 to $2");
  107.         #    }
  108.         #}
  109.         else {
  110.             Execute($command);
  111.         }
  112.     }
  113. }
复制代码
在mush perl script 中不能加入中文.
so 沒寫什麼注釋...

[ 本帖最后由 vase 于 2010-1-19 01:22 AM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-1-19 08:10:56 | 显示全部楼层
不错!
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-1-19 10:08:25 | 显示全部楼层
这是天书吗?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-11-13 14:46:41 | 显示全部楼层
请问楼主实现了zmud到mush的快速转换了吗?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-11-13 14:47:17 | 显示全部楼层
晕,挖了个历史幽久的坟.......楼主人还在不啊
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-11-14 09:18:40 | 显示全部楼层
看不懂...
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 05:32 AM , Processed in 0.009961 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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