一个简单强大的ORPGSL系统
本帖最后由 希瓦 于 2018-6-20 11:59 编辑系统原理
利用Preload系列函数在本地储存与读取数据
系统作用
在本地储存与读取数据,使地图可以接着上次玩
系统代码
function SyncInteger takes gamecache gc, string missionKey, string key, integer value returns nothing
local integer oldValue = GetStoredInteger(gc, missionKey, key)
call StoreInteger(gc, missionKey, key, value)
call SyncStoredInteger(gc, missionKey, key)
call StoreInteger(gc, missionKey, key, oldValue)
endfunction
function LoadFile takes string file, gamecache gc returns nothing
local string userId = I2S(GetPlayerId(GetLocalPlayer()) + 1)
local integer count
local integer index
// Load data from file
call SetPlayerTechMaxAllowed(Player(12),0,2147483647)
call Preloader(file)
set count = GetPlayerTechMaxAllowed(Player(12),0)
if(count > 3000)then
set count = 0
endif
// Sync data in the cache
call SyncInteger(gc, userId, "0", -1)
set index = 1
loop
exitwhen (index > count)
if (GetPlayerTechMaxAllowed(Player(12), index) == 0) then
call SyncInteger(gc, userId, I2S(index), GetPlayerTechMaxAllowed(Player(13), index))
else
call SyncInteger(gc, userId, I2S(index), -GetPlayerTechMaxAllowed(Player(13), index) - 1)
endif
set index = index + 1
endloop
// Use 0 as count
call SyncInteger(gc, userId, "0", count)
endfunction
function SaveFile takes string file, gamecache gc returns nothing
local string userId = I2S(GetPlayerId(GetLocalPlayer()) + 1)
local integer count = GetStoredInteger(gc, userId, "0")
local integer index
local integer value
// Use preload bug to save data
call PreloadGenClear()
call PreloadGenStart()
call Preload("\")
call SetPlayerTechMaxAllowed(Player(12), 0, " + I2S(count) + ") //")
set index = 1
loop
exitwhen(index > count)
set value = GetStoredInteger(gc, userId, I2S(index))
if(value >= 0)then
call Preload("\")
call SetPlayerTechMaxAllowed(Player(12), " + I2S(index) + ", 0)
call SetPlayerTechMaxAllowed(Player(13), " + I2S(index) + ", " + I2S(value) + ") //")
else
call Preload("\")
call SetPlayerTechMaxAllowed(Player(12), " + I2S(index) + ", 1)
call SetPlayerTechMaxAllowed(Player(13), " + I2S(index) + ", " + I2S(-(value + 1)) + ") //")
endif
set index = index + 1
endloop
call Preload("\")
return //")
call PreloadGenEnd(file)
endfunction
//LoadFile函数用于读档,可以将文件file里面储存的数据读取到游戏缓存gc里面
//SaveFile函数用于存档,可以把游戏缓存gc里面储存的数据储存到文件file里面
//数据储存在缓存中,类别名即为玩家序号,使用名为数据序号,0号数据用来储存数据数量
使用环境
1)支持多玩家
2)支持魔兽所有版本
3)不需要使用ORPG登陆器
4)读档必须开启Allow Local Files注册表项
使用方法
1)使用前,先将代码拷贝到地图的自定义代码区
2)然后,将触发复制到地图中,并根据需求进行修改
3)演示地图在此下载
需要红狼UI(或更新的UI)才能打开
注意事项
1)作者注意事项
1)不能在“地图初始化”的时候读取存档
2)读档需要一段同步时间,所以推荐在“游戏开始0.00秒”时读档
3)如果想要每个英雄一个存档,也可以在选英雄的时候读档,并使用英雄名来做存档文件名
4)数据读取到缓存中时,类别名即为玩家序号,使用名为数据序号(0号数据用来储存数据数量)
5)读档时可以通过检查0号数据来判断读档是否成功,存档时必须将数据数量储存到第0号数据当中
6)每个存档最多储存3000个数据,如果想要储存更多的数据,可以把数据分成几个文件(注意修改缓存文件名)
7)如果存档数据超过2000,你需要把“储存数据到缓存”和“储存缓存到文件”分开,以避免超过循环次数上限
8)单玩家游戏读档时只需要0.1秒的同步时间;多玩家游戏时,同步时间会随数据量的增加而呈非线性增长
9)可以将读档和存档的触发写在“本地玩家”的条件判断中,以实现对指定玩家的读档和存档功能
10)请在地图完成后使用SLK优化器对地图进行优化,不然可能会导致地图在联机时可能掉线
2)玩家注意事项
1)想要正常读取存档,必须先开启魔兽读取本地文件的注册表项,下载在此
2)开启注册表项后如果联机掉线,说明魔兽目录中的本地文件覆盖了魔兽文件
可以关闭注册表项后联机(不能读档),或者使用下面的工具来清理一下魔兽目录
扩展功能
除了上面的函数之外
这里还有一些扩展函数可供使用
通过使用它们可以实现下面的效果
1)存档加密
2)为指定玩家读取或保存数据
3)读取数据并等待直到同步结束
4)字符串的储存和读取(支持中文)
5)以本地字符串的形式储存存档列表
详细使用方法请参考下面的演示地图
本文到了这里已经到了结尾,希望能对你有所帮助吧
如果你在使用本系统的过程中遇到了什么问题,或者有什么其他需求,可以发信息给我,我会尽量提供技术支持的:)
希瓦好敬业啊,来顶下 貌似有个战役叫做什么“精灵游侠”什么的,
打过一遍之后,即使删除了通关记录文件W3j什么的,
再重新开始也仍然是十级,
也还保存了物品属性什么的,
不知道这什么的跟那什么的有没有啥关系? 可惜无法本地加密…… 正在改进优化,我准备把它做成UI~~
加密倒不是难事,只是加密算法是个问题~ 问题在于你的加密脚本本身就在j中,拆开就全部知道了…… 所以只需要用简单的字符替换来加密就可以了吧……
毕竟再好的加密也挡不住会JASS的人…… 不过需要一个效验算法,省的瞎填都会有效 哈哈哈.... 强大.支持希瓦. ORPGSL系统.w3x (15 K) 下载次数:0
AllowLocalFiles.rar (1 K) 下载次数:0
一幅ORPG地图.w3x (19 K) 下载次数:4
。。看来大家比较关心那张地图~~ 非常之好~~希瓦加油啊~~ 嗯嗯~真开心~
谢谢头目大人~~
我会继续努力完善它的~~ 希瓦缺德啊……居然用那样的方法骗我下载……不过倒也不能全怪希瓦,都是绝影提出来的…… 什么方法骗你下载? 有人说想玩我做的地图~
我就在群里面放出过下载的链接~
结果就是这样了~~ 这个贴是为我准备的么?小弟的暗黑图IMPK风云再起正想往这个方向优化S/L系统
真是踏破草鞋无处寻得来全不费工夫- -!!
问一下老大,此系统能否实现完美支持1.24?可支持多人游戏?
相当的期待 这个...离用于实际地图中还有蛮远的差距吧,楼上可能要失望了 这个系统虽然很简单,但是其实她已经能够独当一面了呢;
她支持魔兽的所有版本的,支持多玩家;
并且经过多次测试,并没有出现掉线问题。
只是需要注意几点:
1)如果数据太多了的话,最好分成几个文件来储存
2)要使用这个系统,必须开启Allow Local Files的注册表项
如果你想先试试其它的SL系统的话
可以试试U9枫霜前辈制作的ORPG系统
也可以试试楼上的actboy168前辈制作的YDWE的SL系统。
而如果你决定了使用这个SL系统
那么我可是一个认真负责的技术顾问哦~~欢迎随时反馈各种意见以及建议~~ 引用第17楼leisel于2011-06-15 16:26发表的:
这个贴是为我准备的么?小弟的暗黑图IMPK风云再起正想往这个方向优化S/L系统
真是踏破草鞋无处寻得来全不费工夫 - -!!
....... images/back.gif
你的地图使用的是记录码储存系统吧?
如果你感兴趣的话,等我上晚自习回来后,写一个可以直接储存/读取记录码的演示出来~
你可以移植试试~