diff --git a/.gitignore b/.gitignore index e6305f54..ef4492ff 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,5 @@ out[1-9] var/* var + +data/* diff --git a/README.md b/README.md index 6331239b..c66d17b9 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ docker run --rm -it --name tt --hostname tt mudclient/paotin mkdir -p $HOME/my-paotin/ # 创建游戏目录结构 -mkdir -p $HOME/my-paotin/{ids,etc,log,plugins} +mkdir -p $HOME/my-paotin/{ids,etc,data,log,plugins} docker run -d -it --name tt --hostname tt -v $HOME/my-paotin:/paotin/var mudclient/paotin daemon ``` @@ -194,7 +194,8 @@ PaoTin++ 大部分模块源码文件都支持重定位,你可以在 `var/` 目 Docker 方式下,可以将本地工作目录 mount 到容器内的 /paotin/var 目录,那么就可以实现容器内外的文件共享。 ``` -mkdir -p $HOME/my-paotin # 先创建一个本地工作目录 +# 先创建一个本地工作目录 +mkdir -p $HOME/my-paotin/{ids,etc,data,log,plugins} docker run -d -it --name tt --hostname tt -v $HOME/my-paotin:/paotin/var mudclient/paotin daemon ``` @@ -213,7 +214,7 @@ ID 配置文件和数据配置文件可分别放置在 `$HOME/my-paotin/ids/` 建议另外新建一个目录,用来存放你的源代码,并将 `var/` 目录通过符号链接指向该目录。例如: ``` -mkdir -p ../my-paotin/{etc,ids,plugins,log} +mkdir -p ../my-paotin/{ids,etc,data,log,plugins} ln -s ../my-paotin var ``` diff --git a/plugins/lib/storage.tin b/plugins/lib/storage.tin new file mode 100644 index 00000000..210e151b --- /dev/null +++ b/plugins/lib/storage.tin @@ -0,0 +1,52 @@ +#nop vim: set filetype=tt:; + +/* +本文件属于 PaoTin++ 的一部分。 +PaoTin++ © 2020~2022 的所有版权均由担子炮(dzp ) 享有并保留一切法律权利 +你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。 +*/ + +#var lib_storage[META] { + {NAME} {通用存储引擎} + {DESC} {可以存储和载入变量,这允许其它模块可以持久化自己的数据} + {AUTHOR} {担子炮} +}; + +#function {lib_storage.Init} { + #local _ {@mkdir{data}}; + #return {true}; +}; + +#alias {storage.Save} { + #local file {%1}; + #local vars {%2}; + + #class comm-store-tmp open; + #local var {}; + #foreach {$vars} {var} { + #var {dump-$var} {${$var}}; + }; + #class comm-store-tmp close; + + #local files {}; + #line quiet #scan dir {var/data/} files; + + #if { &files[] > 0 } { + #class comm-store-tmp write {var/data/${file}.tin}; + }; + #else { + #class comm-store-tmp write {data/${file}.tin}; + }; +}; + +#alias {storage.Load} { + #local file {%1}; + #local vars {%2}; + + #line quiet #class comm-store-tmp {assign} {load-file data/${file}.tin}; + #local var {}; + #foreach {$vars} {var} { + #var {$var} {${dump-$var}}; + }; + #class comm-store-tmp kill; +};