Ver código fonte

feat(framework): 利用新的 load-file 机制,减少重复代码

dzp 2 anos atrás
pai
commit
12b9c03e11

+ 1 - 1
framework/main.tin

@@ -66,7 +66,7 @@ PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 
         event.Define {user-online} {无参} {framework} {已经登录到服务器,所有命令都可以正常使用了。};
         load-module lib/ui;
         #if { "$user[manual]" != "true" } {
-            #delay KeepAlive {#zap} {$session[reconnect]};
+            #delay online.WatchDog {#zap} {$session[reconnect]};
         };
     };
 };

+ 5 - 10
framework/online.tin

@@ -12,20 +12,15 @@ PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 
 
 #class main open;
 
-#nop 武当、少林等门派的诵经文本会干扰机器运行,使用全局替换从一开始就屏蔽掉。;
-#substitute {~\e[1;36m%+1u..\e[2;37;0m} {};
+#alias {online.KeepAlive} {uptime};
 
-#ticker {eat}       {xtt.Send eat $char[favorite][food]}    {60};
-#ticker {drink}     {xtt.Send drink $char[favorite][water]} {60};
+#tick {online.KeepAlive} {online.KeepAlive} {60};
 
 #delay 1 {
     load-lib    ga;
+    load-module silent;
     load-module basic/char;
     load-module shortcut;
-    load-module silent;
-
-    event.Handle {char/hpbrief} {prompt} {framework/online} {prompt.UpdateHP};
-    event.Handle {char/status}  {prompt} {framework/online} {prompt.UpdateSM};
 
     tmux.SetTheme GAME;
 
@@ -36,8 +31,8 @@ PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 
 };
 
 #event {RECEIVED OUTPUT} {
-    #undelay KeepAlive;
-    #delay KeepAlive {#zap} 180;
+    #undelay online.WatchDog;
+    #delay online.WatchDog {#zap} 180;
 };
 
 #class main close;

+ 36 - 0
mud/pkuxkx/framework/online.extra.tin

@@ -0,0 +1,36 @@
+#nop vim: set filetype=tt:;
+
+/*
+模块名称:几个常用的别名
+模块说明:本文件属于框架代码的一部分,不建议修改。如有需求请在 GitHub 发 issue 或者 PR
+版权声明:本文件属于 PaoTin++ 的一部分
+===========
+PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
+你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
+===========
+*/
+
+#nop 武当、少林等门派的诵经文本会干扰机器运行,使用全局替换从一开始就屏蔽掉。;
+#substitute {~\e[1;36m%+1u..\e[2;37;0m} {};
+
+#alias {online.KeepAlive} {
+    #local blankly {true};
+    #if { @isFalse{$char[HP][忙]} } {
+        #if { $char[HP][食物] < $char[HP][最大食物] } {
+            xtt.Send eat $char[favorite][food];
+            #local blankly {false};
+        };
+        #if { $char[HP][饮水] < $char[HP][最大饮水] } {
+            xtt.Send drink $char[favorite][water];
+            #local blankly {false};
+        };
+    };
+    #if { @isTrue{$blankly} } {
+        ga.Sync;
+    };
+};
+
+event.HandleOnce {user-online} {pkuxkx/online} {pkuxkx/online} {
+    event.Handle {char/hpbrief} {prompt} {framework/online} {prompt.UpdateHP};
+    event.Handle {char/status}  {prompt} {framework/online} {prompt.UpdateSM};
+};

+ 113 - 0
mud/pkuxkx/plugins/basic/login.extra.tin

@@ -0,0 +1,113 @@
+#nop vim: set filetype=tt:;
+
+/*
+模块名称:几个常用的别名
+模块说明:本文件属于框架代码的一部分,不建议修改。如有需求请在 GitHub 发 issue 或者 PR
+版权声明:本文件属于 PaoTin++ 的一部分
+===========
+PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
+你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
+===========
+*/
+
+#alias {login.auto-login} {
+    #class login.auto-login open;
+
+    #config {IAC GA} {OFF};
+
+    #nop 如果角色设置了 GMCP 支持,则积极回应服务器的 GMCP 协商请求。;
+    #if { "$user[GMCP]" == "true" } {
+        load-lib gmcp;
+        gmcp.Enable;
+    };
+
+    #if { "$session[UTF8]" == "true" } {
+        #config {charset} {UTF-8};
+    };
+    #else {
+        #config {charset} {GBK1TOUTF8};
+    };
+
+    #line oneshot #action {^北大侠客行已经执行了%*。$} {
+        #local uptime {@time.ParseDoC{%%1}};
+    };
+
+    #line oneshot #action {^Input 1 for GBK, 2 for UTF8, 3 for BIG5$} {
+        #nop;
+    };
+
+    #line oneshot #action {^您的英文名字(要注册新人物请输入new。):$} {
+        #if { "$session[UTF8]" == "false" } {
+            #delay 0 #send {2};
+        };
+
+        #config {charset} {UTF-8};
+
+        #if { "$login[user][id]" != "" } {
+            xtt.Answer {$login[user][id]};
+        };
+        #else {
+            #line oneshot #macro {\n} {
+                #cursor get {login[user][id]};
+                #cursor clear;
+                #if { "$login[user][id]" == "#%*" } {
+                    #var login[user][id] {};
+                };
+                #if { "$login[user][id]" != "" } {
+                    xtt.Answer {$login[user][id]};
+                };
+            };
+        };
+    };
+
+    #line oneshot #action {^此ID档案已存在,请输入密码:$} {
+        #if { "$login[user][passwd]" != "" } {
+            xtt.Answer {$login[user][passwd]};
+            #delay {login.check} {look} 1;
+        };
+        #else {
+            #cursor flag echo on;
+            #line oneshot #macro {\n} {
+                #cursor get {login[user][passwd]};
+                #cursor clear;
+                #if { "$login[user][passwd]" != "" } {
+                    xtt.Answer {$login[user][passwd]};
+                };
+            };
+        };
+    };
+
+    #line oneshot #action {^您要将另一个连线中的相同人物赶出去,取而代之吗?(y/n)$} {
+        xtt.Answer y;
+    };
+
+    #line oneshot #action {^%s欢迎来到北大侠客行!%s$} {
+        #delay {login.login-success} {login.login-success 重新登录} 0;
+    };
+
+    #line oneshot #action {^%s目前权限:(player)%s$} {
+        #delay {login.login-success} {login.login-success} 1;
+    };
+
+    #line oneshot #action {^如果同意请用agree %w命令签署确认这些条款。$} {
+        #if { @isTrue{$user[AGREE]} } {
+            #send {agree %%1};
+        };
+        #else {
+            #undelay {login.login-success};
+            #undelay {login.check};
+            warnLog 请在十秒内输入 agree %%1 命令以继续游戏。;
+            #delay {login.agree.fail} {#zap} 10;
+        };
+    };
+
+    #line oneshot #action {^感谢您同意北侠玩家要约,现在可以正常进入游戏。$} {
+        #undelay {login.agree.fail};
+    };
+
+    #line oneshot #action {^重新连线完毕。$} {
+        #delay {login.login-success} {login.login-success 断线重连} 0;
+    };
+
+    #class login.auto-login close;
+};

+ 0 - 196
mud/pkuxkx/plugins/basic/login.tin

@@ -1,196 +0,0 @@
-#var login[session]     {};
-#var login[user]        {};
-#var login[autoexec]    {};
-
-#alias {login} {
-    #var    login[session]  {%1};
-    #var    login[user]     {%2};
-    #var    login[autoexec] {%3};
-    #session {$session[name]} {$session[host]} {$session[port]};
-};
-
-#event {SESSION CONNECTED} {
-    #if { "%0" !== "$login[session][name]" } {
-        #return;
-    };
-
-    login.auto-login;
-};
-
-#alias {login.auto-login} {
-    #class login.auto-login open;
-
-    #config {IAC GA} {OFF};
-
-    #nop 如果角色设置了 GMCP 支持,则积极回应服务器的 GMCP 协商请求。;
-    #if { "$user[GMCP]" == "true" } {
-        load-lib gmcp;
-        gmcp.Enable;
-    };
-
-    #if { "$session[UTF8]" == "true" } {
-        #config {charset} {UTF-8};
-    };
-    #else {
-        #config {charset} {GBK1TOUTF8};
-    };
-
-    #line oneshot #action {^北大侠客行已经执行了%*。$} {
-        #local uptime {@time.ParseDoC{%%1}};
-    };
-
-    #line oneshot #action {^Input 1 for GBK, 2 for UTF8, 3 for BIG5$} {
-        #nop;
-    };
-
-    #line oneshot #action {^您的英文名字(要注册新人物请输入new。):$} {
-        #if { "$session[UTF8]" == "false" } {
-            #delay 0 #send {2};
-        };
-
-        #config {charset} {UTF-8};
-
-        #if { "$login[user][id]" != "" } {
-            xtt.Answer {$login[user][id]};
-        };
-        #else {
-            #line oneshot #macro {\n} {
-                #cursor get {login[user][id]};
-                #cursor clear;
-                #if { "$login[user][id]" == "#%*" } {
-                    #var login[user][id] {};
-                };
-                #if { "$login[user][id]" != "" } {
-                    xtt.Answer {$login[user][id]};
-                };
-            };
-        };
-    };
-
-    #line oneshot #action {^此ID档案已存在,请输入密码:$} {
-        #if { "$login[user][passwd]" != "" } {
-            xtt.Answer {$login[user][passwd]};
-            #delay {login.check} {look} 1;
-        };
-        #else {
-            #cursor flag echo on;
-            #line oneshot #macro {\n} {
-                #cursor get {login[user][passwd]};
-                #cursor clear;
-                #if { "$login[user][passwd]" != "" } {
-                    xtt.Answer {$login[user][passwd]};
-                };
-            };
-        };
-    };
-
-    #line oneshot #action {^您要将另一个连线中的相同人物赶出去,取而代之吗?(y/n)$} {
-        xtt.Answer y;
-    };
-
-    #line oneshot #action {^%s欢迎来到北大侠客行!%s$} {
-        #delay {login.auto-login.success} {login.auto-login.success 重新登录} 0;
-    };
-
-    #line oneshot #action {^%s目前权限:(player)%s$} {
-        #delay {login.auto-login.success} {login.auto-login.success} 1;
-    };
-
-    #line oneshot #action {^如果同意请用agree %w命令签署确认这些条款。$} {
-        #if { @isTrue{$user[AGREE]} } {
-            #send {agree %%1};
-        };
-        #else {
-            #undelay {login.auto-login.success};
-            #undelay {login.check};
-            warnLog 请在十秒内输入 agree %%1 命令以继续游戏。;
-            #delay {login.agree.fail} {#zap} 10;
-        };
-    };
-
-    #line oneshot #action {^感谢您同意北侠玩家要约,现在可以正常进入游戏。$} {
-        #undelay {login.agree.fail};
-    };
-
-    #line oneshot #action {^重新连线完毕。$} {
-        #delay {login.auto-login.success} {login.auto-login.success 断线重连} 0;
-    };
-
-    #alias {login.auto-login.success} {
-        #local type {%%1};
-
-        #showme 登录成功。;
-
-        #if { @isTrue{$login[user][manual]} } {
-            login.write-id-file;
-            login.init-game;
-        };
-
-        #local handler $login[autoexec];
-        #class login.auto-login kill;
-        #undelay login.auto-login.success;
-        kill-module login;
-        $handler;
-        #if { "$user[GMCP]" == "true" } {
-            #delay 1 {
-                load-module gmcp;
-                gmcp.pkuxkx.Enable;
-            };
-        };
-    };
-
-    #class login.auto-login close;
-};
-
-#alias {login.init-game} {
-    #if { "$login[user][id]" == "" || "$user[id]" != "" } {
-        #return;
-    };
-
-    #var user[id]           {$login[user][id]};
-    #var user[passwd]       {$login[user][passwd]};
-    #gts #var user[id]      {$login[user][id]};
-    #gts #var user[passwd]  {$login[user][passwd]};
-
-    #local path {$user[id]};
-    #if { "$session[log_path]" != "" } {
-        #local path {$session[log_path]};
-    };
-
-    #if { !@InitLog{$path} } {
-        #echo {<119>创建日志目录 $gLog[PATH]/$path 时遇到错误。<299>};
-        #echo {<139>请检查你的安装环境,或者参考使用手册重新安装本软件。<299>};
-        #return;
-    };
-
-    log.Open;
-    #screen set title GAME-$user[id];
-
-    NOTE 启动配置文件已生成,下次你可以直接 start $login[user][id] 进入游戏。;
-};
-
-#alias {login.write-id-file} {
-    #if { "$login[user][id]" == "" || "$user[id]" != "" } {
-        #return;
-    };
-
-    #local id-file {ids/$login[user][id]};
-
-    #local output {};
-    #script output {test -d var/ids && echo true || echo false};
-    #if { "$output[1]" == "true" } {
-        #local id-file {var/$id-file};
-    };
-
-    #if { @existsFile{$id-file} } {
-        #return;
-    };
-
-    #script output {cp ids/pkuxkx $id-file};
-    #script output {sed -i.bak 's/^#var user\[id\]       {.*};$/#var user[id]       {$login[user][id]};/' $id-file};
-    #script output {sed -i.bak 's/^#var user\[name\]     {.*};$/#var user[name]     {};/' $id-file};
-    #script output {sed -i.bak 's/^#var user\[passwd\]   {.*};$/#var user[passwd]   {$login[user][passwd]};/' $id-file};
-    #script output {sed -i.bak '/^#nop 上面三处修改完毕之后,请删除下面这行文字:;$/d' $id-file};
-    #script output {sed -i.bak '/^#var user\[manual\]   {true};$/d' $id-file};
-    #script output {rm ${id-file}.bak};
-};

+ 2 - 17
mud/thuxyj/framework/online.tin → mud/thuxyj/framework/online.extra.tin

@@ -10,23 +10,8 @@ PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 
 ===========
 */
 
-#ticker {save-data}     {xtt.Send save}     {600};
-#ticker {backup-data}   {xtt.Send backup}   {1800};
+#alias {online.KeepAlive} {localtime};
 
-#delay 1 {
+event.HandleOnce {user-online} {thuxyj/online} {thuxyj/online} {
     set openmap 1;
-
-    load-module basic/char;
-    load-module shortcut;
-
-    event.Handle {char/hpbrief} {prompt} {framework/online} {prompt.UpdateHP};
-    event.Handle {char/status}  {prompt} {framework/online} {prompt.UpdateSM};
-
-    #nop 提供给用户的自动执行函数;
-    user-online;
-};
-
-#event {RECEIVED OUTPUT} {
-    #undelay KeepAlive;
-    #delay KeepAlive {#zap} 180;
 };

+ 88 - 0
mud/thuxyj/plugins/basic/login.extra.tin

@@ -0,0 +1,88 @@
+#nop vim: set filetype=tt:;
+
+/*
+模块名称:几个常用的别名
+模块说明:本文件属于框架代码的一部分,不建议修改。如有需求请在 GitHub 发 issue 或者 PR
+版权声明:本文件属于 PaoTin++ 的一部分
+===========
+PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
+你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
+===========
+*/
+
+#alias {login.auto-login} {
+    #class login.auto-login open;
+
+    #config {IAC GA} {OFF};
+
+    #nop 如果角色设置了 GMCP 支持,则积极回应服务器的 GMCP 协商请求。;
+    #if { "$user[GMCP]" == "true" } {
+        load-lib gmcp;
+        gmcp.Enable;
+    };
+
+    #if { "$session[UTF8]" == "true" } {
+        #config {charset} {UTF-8};
+    };
+    #else {
+        #config {charset} {GBK1TOUTF8};
+    };
+
+    #line oneshot #action {^%sWelcome to Xi You Ji! Select GB or BIG5 (gb/big5):$} {
+        #line oneshot #event {CATCH VT100 ERASE SCREEN ALL} {#0;#buffer end};
+        xtt.Answer gb;
+    };
+
+    #line oneshot #action {^您是否是中小学学生或年龄更小?(yes/no)$} {
+        #delay 0 #send no;
+    };
+
+    #line oneshot #action {^您的英文名字:(新玩家请键入 new 注册)$} {
+        #if { "$login[user][id]" != "" } {
+            xtt.Answer {$login[user][id]};
+        };
+        #else {
+            #line oneshot #macro {\n} {
+                #cursor get {login[user][id]};
+                #cursor clear;
+                #if { "$login[user][id]" == "#%*" } {
+                    #var login[user][id] {};
+                };
+                #if { "$login[user][id]" != "" } {
+                    xtt.Answer {$login[user][id]};
+                };
+            };
+        };
+    };
+
+    #action {^请输入相应密码:$} {
+        #if { "$login[user][passwd]" != "" } {
+            xtt.Answer {$login[user][passwd]};
+            #delay {login.check} {look} 1;
+        };
+        #else {
+            #cursor flag echo on;
+            #line oneshot #macro {\n} {
+                #cursor get {login[user][passwd]};
+                #cursor clear;
+                #if { "$login[user][passwd]" != "" } {
+                    xtt.Answer {$login[user][passwd]};
+                };
+            };
+        };
+    };
+
+    #line oneshot #action {^您要将另一个连线中的相同人物赶出去,取而代之吗?(y/n)$} {
+        xtt.Answer y;
+    };
+
+    #line oneshot #action {^%s目前权限:(player)%s$} {
+        #delay {login.login-success} {login.login-success} 1;
+    };
+
+    #line oneshot #action {^重新连线完毕。$} {
+        #delay {login.login-success} {login.login-success 断线重连} 0;
+    };
+
+    #class login.auto-login close;
+};

+ 0 - 163
mud/thuxyj/plugins/basic/login.tin

@@ -1,163 +0,0 @@
-#nop vim: filetype=tt
-
-#var login[session]     {};
-#var login[user]        {};
-#var login[autoexec]    {};
-
-#alias {login} {
-    #var    login[session]  {%1};
-    #var    login[user]     {%2};
-    #var    login[autoexec] {%3};
-    #session {$session[name]} {$session[host]} {$session[port]};
-};
-
-#event {SESSION CONNECTED} {
-    #if { "%0" !== "$login[session][name]" } {
-        #return;
-    };
-
-    login.auto-login;
-};
-
-#alias {login.auto-login} {
-    #class login.auto-login open;
-
-    #config {IAC GA} {OFF};
-
-    #nop 如果角色设置了 GMCP 支持,则积极回应服务器的 GMCP 协商请求。;
-    #if { "$user[GMCP]" == "true" } {
-        load-lib gmcp;
-        gmcp.Enable;
-    };
-
-    #if { "$session[UTF8]" == "true" } {
-        #config {charset} {UTF-8};
-    };
-    #else {
-        #config {charset} {GBK1TOUTF8};
-    };
-
-    #line oneshot #action {^%sWelcome to Xi You Ji! Select GB or BIG5 (gb/big5):$} {
-        #line oneshot #event {CATCH VT100 ERASE SCREEN ALL} {#0;#buffer end};
-        xtt.Answer gb;
-    };
-
-    #line oneshot #action {^您是否是中小学学生或年龄更小?(yes/no)$} {
-        #delay 0 #send no;
-    };
-
-    #line oneshot #action {^您的英文名字:(新玩家请键入 new 注册)$} {
-        #if { "$login[user][id]" != "" } {
-            xtt.Answer {$login[user][id]};
-        };
-        #else {
-            #line oneshot #macro {\n} {
-                #cursor get {login[user][id]};
-                #cursor clear;
-                #if { "$login[user][id]" == "#%*" } {
-                    #var login[user][id] {};
-                };
-                #if { "$login[user][id]" != "" } {
-                    xtt.Answer {$login[user][id]};
-                };
-            };
-        };
-    };
-
-    #action {^请输入相应密码:$} {
-        #if { "$login[user][passwd]" != "" } {
-            xtt.Answer {$login[user][passwd]};
-            #delay {login.check} {look} 1;
-        };
-        #else {
-            #cursor flag echo on;
-            #line oneshot #macro {\n} {
-                #cursor get {login[user][passwd]};
-                #cursor clear;
-                #if { "$login[user][passwd]" != "" } {
-                    xtt.Answer {$login[user][passwd]};
-                };
-            };
-        };
-    };
-
-    #line oneshot #action {^您要将另一个连线中的相同人物赶出去,取而代之吗?(y/n)$} {
-        xtt.Answer y;
-    };
-
-    #line oneshot #action {^重新连线完毕。$} {
-        #delay {login.auto-login.success} {login.auto-login.success 断线重连} 0;
-    };
-
-    #alias {login.auto-login.success} {
-        #local type {%%1};
-
-        #if { @isTrue{$login[user][manual]} } {
-            login.write-id-file;
-            login.init-game;
-        };
-
-        #showme 登录成功。;
-
-        #local handler $login[autoexec];
-        #class login.auto-login kill;
-        #undelay login.auto-login.success;
-        kill-module login;
-        $handler;
-    };
-
-    #class login.auto-login close;
-};
-
-#alias {login.init-game} {
-    #if { "$login[user][id]" == "" || "$user[id]" != "" } {
-        #return;
-    };
-
-    #var user[id]           {$login[user][id]};
-    #var user[passwd]       {$login[user][passwd]};
-    #gts #var user[id]      {$login[user][id]};
-    #gts #var user[passwd]  {$login[user][passwd]};
-
-    #local path {$user[id]};
-    #if { "$session[log_path]" != "" } {
-        #local path {$session[log_path]};
-    };
-
-    #if { !@InitLog{$path} } {
-        #echo {<119>创建日志目录 $gLog[PATH]/$path 时遇到错误。<299>};
-        #echo {<139>请检查你的安装环境,或者参考使用手册重新安装本软件。<299>};
-        #return;
-    };
-
-    log.Open;
-    #screen set title GAME-$user[id];
-
-    NOTE 启动配置文件已生成,下次你可以直接 start $login[user][id] 进入游戏。;
-};
-
-#alias {login.write-id-file} {
-    #if { "$login[user][id]" == "" || "$user[id]" != "" } {
-        #return;
-    };
-
-    #local id-file {ids/$login[user][id]};
-
-    #local output {};
-    #script output {test -d var/ids && echo true || echo false};
-    #if { "$output[1]" == "true" } {
-        #local id-file {var/$id-file};
-    };
-
-    #if { @existsFile{$id-file} } {
-        #return;
-    };
-
-    #script output {cp ids/thuxyj $id-file};
-    #script output {sed -i.bak 's/^#var user\[id\]       {.*};$/#var user[id]       {$login[user][id]};/' $id-file};
-    #script output {sed -i.bak 's/^#var user\[name\]     {.*};$/#var user[name]     {};/' $id-file};
-    #script output {sed -i.bak 's/^#var user\[passwd\]   {.*};$/#var user[passwd]   {$login[user][passwd]};/' $id-file};
-    #script output {sed -i.bak '/^#nop 上面三处修改完毕之后,请删除下面这行文字:;$/d' $id-file};
-    #script output {sed -i.bak '/^#var user\[manual\]   {true};$/d' $id-file};
-    #script output {rm ${id-file}.bak};
-};

+ 106 - 0
plugins/basic/login.tin

@@ -0,0 +1,106 @@
+#nop vim: set filetype=tt:;
+
+/*
+模块名称:几个常用的别名
+模块说明:本文件属于框架代码的一部分,不建议修改。如有需求请在 GitHub 发 issue 或者 PR
+版权声明:本文件属于 PaoTin++ 的一部分
+===========
+PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
+你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
+===========
+*/
+
+#var login[session]     {};
+#var login[user]        {};
+#var login[autoexec]    {};
+
+#alias {login} {
+    #var    login[session]  {%1};
+    #var    login[user]     {%2};
+    #var    login[autoexec] {%3};
+    #session {$session[name]} {$session[host]} {$session[port]};
+};
+
+#event {SESSION CONNECTED} {
+    #if { "%0" !== "$login[session][name]" } {
+        #return;
+    };
+
+    login.auto-login;
+};
+
+#alias {login.login-success} {
+    #local type {%%1};
+
+    #showme 登录成功。;
+
+    #if { @isTrue{$login[user][manual]} } {
+        login.write-id-file;
+        login.init-game;
+    };
+
+    #local handler $login[autoexec];
+    #class login.auto-login kill;
+    #undelay login.login-success;
+    kill-module login;
+    $handler;
+    #if { "$user[GMCP]" == "true" } {
+        #delay 1 {
+            load-module gmcp;
+            gmcp.${gCurrentMUDLIB}.Enable;
+        };
+    };
+};
+
+#alias {login.init-game} {
+    #if { "$login[user][id]" == "" || "$user[id]" != "" } {
+        #return;
+    };
+
+    #var user[id]           {$login[user][id]};
+    #var user[passwd]       {$login[user][passwd]};
+    #gts #var user[id]      {$login[user][id]};
+    #gts #var user[passwd]  {$login[user][passwd]};
+
+    #local path {$user[id]};
+    #if { "$session[log_path]" != "" } {
+        #local path {$session[log_path]};
+    };
+
+    #if { !@InitLog{$path} } {
+        #echo {<119>创建日志目录 $gLog[PATH]/$path 时遇到错误。<299>};
+        #echo {<139>请检查你的安装环境,或者参考使用手册重新安装本软件。<299>};
+        #return;
+    };
+
+    log.Open;
+    #screen set title GAME-$user[id];
+
+    NOTE 启动配置文件已生成,下次你可以直接 start $login[user][id] 进入游戏。;
+};
+
+#alias {login.write-id-file} {
+    #if { "$login[user][id]" == "" || "$user[id]" != "" } {
+        #return;
+    };
+
+    #local id-file {ids/$login[user][id]};
+
+    #local output {};
+    #script output {test -d var/ids && echo true || echo false};
+    #if { "$output[1]" == "true" } {
+        #local id-file {var/$id-file};
+    };
+
+    #if { @existsFile{$id-file} } {
+        #return;
+    };
+
+    #script output {cp ids/$gCurrentMUDLIB $id-file};
+    #script output {sed -i.bak 's/^#var user\[id\]       {.*};$/#var user[id]       {$login[user][id]};/' $id-file};
+    #script output {sed -i.bak 's/^#var user\[name\]     {.*};$/#var user[name]     {};/' $id-file};
+    #script output {sed -i.bak 's/^#var user\[passwd\]   {.*};$/#var user[passwd]   {$login[user][passwd]};/' $id-file};
+    #script output {sed -i.bak '/^#nop 上面三处修改完毕之后,请删除下面这行文字:;$/d' $id-file};
+    #script output {sed -i.bak '/^#var user\[manual\]   {true};$/d' $id-file};
+    #script output {rm ${id-file}.bak};
+};