找回密码
 点一下
查看: 798|回复: 0

草稿

[复制链接]
发表于 2012-2-3 13:58:33 | 显示全部楼层 |阅读模式
系统原理

利用Preload系列函数在本地储存与读取数据

系统作用

在本地储存与读取数据,使地图可以接着上次玩

使用环境

1)支持多玩家
2)支持魔兽所有版本
3)不需要使用ORPG登陆器
4)读档必须开启Allow Local Files注册表项

使用方法

本系统包含两个基础函数,读取文件:LoadFile 和 保存文件:SaveFile
每个函数都包括两个参数,存档文件路径:fn 和 储存数据的游戏缓存 gc
[jass]
function LoadFile takes string fn,gamecache gc returns nothing
function SaveFile takes string fn,gamecache gc returns nothing
[/jass]
使用前必须将函数的定义代码复制到地图的自定义代码区,然后通过自定义代码调用。
本系统只能存取整数,其中“类别名”为玩家序号,“使用名称”为数据序号,其中“0”号数据储存数据数量。

使用读档函数之前,我们首先需要建立用来读档的游戏缓存,然后还要设置好存档文件路径
由于读档需要消耗一段时间,所以我们一般选择在“游戏开始0.00秒”的时候进行读档
但是如果想要一个英雄一个存档,也可以使用英雄的名字作为存档名,在选择英雄的时候进行读档
这样,在玩家输入读档指令的时候,就可以瞬间将这些数据从游戏缓存中读取出来了
[trigger]Init
    事件
        地图初始化
    条件
    动作
        游戏缓存 - 创建游戏缓存,使用文件名: ORPGSL.w3v
        游戏缓存 - 删除 (最后创建的游戏缓存)
        游戏缓存 - 创建游戏缓存,使用文件名: ORPGSL.w3v
        设置 gc = (最后创建的游戏缓存)
        自定义代码: call sl_loadfile("save\\orpgsl\\test.sav",udg_gc)
[/trigger]
本系统只能存取整数,其中“类别名”为玩家序号,“使用名称”为数据序号,其中“0”号数据储存数据数量
在玩家输入读档指令之后,我们首先检查“0”号数据储存的数据数量是否等于我们需要读取的数据的数量
如果相等,说明读档成功,然后就可以将这些数据拿出来使用了;
如果不相等,说明读档失败,这时候注意提醒玩家,检查是否开启了Allow Local Files注册表项
[trigger]Load
    事件
        玩家 - 玩家1(红色) 输入的聊天信息包含 load ,匹配方式: 完全匹配
        玩家 - 玩家2(蓝色) 输入的聊天信息包含 load ,匹配方式: 完全匹配
    条件
    动作
        如果所有条件成立则做动作1,否则做动作2
            If - 条件
                (从游戏缓存读取整数,名称: 0 类别: (转换 ((触发玩家) 的玩家索引号) 为字符串) 缓存: gc) 等于 2
            Then - 动作
                英雄 - 设置 (触发玩家) 的血魔法师  的经验值为 (从游戏缓存读取整数,名称: 1 类别: (转换 ((触发玩家) 的玩家索引号) 为字符串) 缓存: gc) , 隐藏 升级动画
                单位组 - 选取 (触发玩家) 的火凤凰 内所有单位 (单位 - 删除 (选取单位))
                单位 - 创建 (从游戏缓存读取整数,名称: 2 类别: (转换 ((触发玩家) 的玩家索引号) 为字符串) 缓存: gc) 个 火凤凰 给 (触发玩家) 在 (游戏开始位置)
                游戏 - 对 (所有玩家) 发送文本信息: 读取成功!
            Else - 动作
                游戏 - 对 (所有玩家) 发送文本信息: 读取失败!
[/trigger]
[trigger]Save
    事件
        玩家 - 玩家1(红色) 输入的聊天信息包含 save ,匹配方式: 完全匹配
        玩家 - 玩家2(蓝色) 输入的聊天信息包含 save ,匹配方式: 完全匹配
    条件
    动作
        游戏缓存 - 记录 2 ,使用名称: 0 类别名: (转换 ((触发玩家) 的玩家索引号) 为字符串) 缓存: gc
        游戏缓存 - 记录 (触发玩家) 的血魔法师  的经验值 ,使用名称: 1 类别名: (转换 ((触发玩家) 的玩家索引号) 为字符串) 缓存: gc
        游戏缓存 - 记录 (触发玩家) 的火凤凰 中的单位数量) ,使用名称: 2 类别名: (转换 ((触发玩家) 的玩家索引号) 为字符串) 缓存: gc
        如果所有条件成立则做动作1,否则做动作2
            If - 条件
                (触发玩家) 等于 (本地玩家)
            Then - 动作
                自定义代码: call sl_savefile("save\\orpgsl\\test.sav",udg_gc)
                游戏 - 对 (所有玩家) 发送文本信息: 储存成功!
            Else - 动作
[/trigger]

本系统使用简单,自定义代码区只有两个函数的定义,分别为:
function sl_loadfile takes string f,gamecache g returns nothing//读档函数
function sl_savefile takes string f,gamecache g returns nothing//存档函数
其中两个参数string f和gamecache g分别为“文件路径”和“缓存变量名”
如:
call sl_savefile("save\\orpgsl\\test.sav",udg_gc)
即可将自定义游戏缓存变量gc中储存的数据
储存在魔兽安装目录中的save\orpsl路径下的test.sav文件中
移植时请根据地图名进行修改,避免冲突

储存缓存数据的格式如下:
//“使用名称”为数据序号,“1”即为第一号数据
//“类别名”类别即为玩家序号,“1”表示玩家一
//其中“0”号数据用来储存数据总数,“2”表示共两个数据
游戏缓存 - 记录 2 ,使用名称: 0 类别名: 1 缓存: gc
游戏缓存 - 记录 100 ,使用名称: 1 类别名: 1 缓存: gc
游戏缓存 - 记录 100 ,使用名称: 2 类别名: 1 缓存: gc
//为玩家一储存1:100,2:100共两个数据
游戏缓存 - 记录 2 ,使用名称: 0 类别名: 2 缓存: gc
游戏缓存 - 记录 200 ,使用名称: 1 类别名: 2 缓存: gc
游戏缓存 - 记录 200 ,使用名称: 2 类别名: 2 缓存: gc
//为玩家二储存1:200,2:200共两个数据

演示地图在此下载:

最新版Beta
可以直接储存字符串的演示



注意事项:
1)使用前需先开启魔兽争霸Allow Local Files注册表项
2)为避免超过魔兽执行限制,如果储存数据的数量大于100,最好分成几个文件储存

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-9-28 07:04 , Processed in 0.123287 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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