找回密码
 点一下
查看: 37950|回复: 82

一个简单强大的ORPGSL系统

[复制链接]
发表于 2011-6-9 22:47:08 | 显示全部楼层 |阅读模式
本帖最后由 希瓦 于 2018-6-20 11:59 编辑

系统原理

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

系统作用

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

系统代码

[jass]
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号数据用来储存数据数量
[/jass]
  
使用环境

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

使用方法

1)使用前,先将代码拷贝到地图的自定义代码区
Code.png

2)然后,将触发复制到地图中,并根据需求进行修改
Init.png
Load.png
Save.png

3)演示地图在此下载
ORPG演示.w3x (16.14 KB, 下载次数: 462)
需要红狼UI(或更新的UI)才能打开
Red_Wolf UI V1.2.2.rar (262.77 KB, 下载次数: 225)

注意事项

1)作者注意事项
    1)不能在“地图初始化”的时候读取存档
    2)读档需要一段同步时间,所以推荐在“游戏开始0.00秒”时读档

    3)如果想要每个英雄一个存档,也可以在选英雄的时候读档,并使用英雄名来做存档文件名
    4)数据读取到缓存中时,类别名即为玩家序号,使用名为数据序号(0号数据用来储存数据数量)
    5)读档时可以通过检查0号数据来判断读档是否成功,存档时必须将数据数量储存到第0号数据当中
    6)每个存档最多储存3000个数据,如果想要储存更多的数据,可以把数据分成几个文件(注意修改缓存文件名)

    7)如果存档数据超过2000,你需要把“储存数据到缓存”和“储存缓存到文件”分开,以避免超过循环次数上限
    8)单玩家游戏读档时只需要0.1秒的同步时间;多玩家游戏时,同步时间会随数据量的增加而呈非线性增长
    9)可以将读档和存档的触发写在“本地玩家”的条件判断中,以实现对指定玩家的读档和存档功能
    10)请在地图完成后使用SLK优化器对地图进行优化,不然可能会导致地图在联机时可能掉线

2)玩家注意事项
    1)想要正常读取存档,必须先开启魔兽读取本地文件的注册表项,下载在此
         
开关读档功能.rar (440 Bytes, 下载次数: 196)
    2)开启注册表项后如果联机掉线,说明魔兽目录中的本地文件覆盖了魔兽文件
         可以关闭注册表项后联机(不能读档),或者使用下面的工具来清理一下魔兽目录
         
魔兽目录清理工具.rar (754 Bytes, 下载次数: 132)

扩展功能

除了上面的函数之外
这里还有一些扩展函数可供使用


通过使用它们可以实现下面的效果

    1)存档加密
    2)为指定玩家读取或保存数据
    3)读取数据并等待直到同步结束
    4)字符串的储存和读取(支持中文)
    5)以本地字符串的形式储存存档列表

详细使用方法请参考下面的演示地图
字符串存档系统演示.w3x (15.86 KB, 下载次数: 429)

本文到了这里已经到了结尾,希望能对你有所帮助吧
如果你在使用本系统的过程中遇到了什么问题,或者有什么其他需求,可以发信息给我,我会尽量提供技术支持的:)

评分

参与人数 1威望 +7 收起 理由
麦德三世 + 7 非常之好

查看全部评分

发表于 2011-6-9 23:51:13 | 显示全部楼层
希瓦好敬业啊,来顶下
回复

使用道具 举报

发表于 2011-6-11 00:24:57 | 显示全部楼层
貌似有个战役叫做什么“精灵游侠”什么的,
打过一遍之后,即使删除了通关记录文件W3j什么的,
再重新开始也仍然是十级,
也还保存了物品属性什么的,
不知道这什么的跟那什么的有没有啥关系?
回复

使用道具 举报

发表于 2011-6-11 10:39:57 | 显示全部楼层
可惜无法本地加密……
回复

使用道具 举报

 楼主| 发表于 2011-6-11 11:01:51 | 显示全部楼层
正在改进优化,我准备把它做成UI~~
加密倒不是难事,只是加密算法是个问题~

点评

支持西瓦大大 我也想做个ORPG地图 可是存档方面一直是最大苦手的地方=-= 简直弱的不行。 做好了可一定要@小的我啊~  详情 回复 发表于 2015-9-13 02:38
AES128加密算法  详情 回复 发表于 2014-12-11 16:36
回复

使用道具 举报

发表于 2011-6-11 11:44:45 | 显示全部楼层
问题在于你的加密脚本本身就在j中,拆开就全部知道了……
回复

使用道具 举报

 楼主| 发表于 2011-6-11 12:29:22 | 显示全部楼层
所以只需要用简单的字符替换来加密就可以了吧……
毕竟再好的加密也挡不住会JASS的人……
回复

使用道具 举报

发表于 2011-6-11 14:26:42 | 显示全部楼层
不过需要一个效验算法,省的瞎填都会有效
回复

使用道具 举报

发表于 2011-6-12 00:38:24 | 显示全部楼层
哈哈哈....
回复

使用道具 举报

发表于 2011-6-12 08:55:09 | 显示全部楼层
强大.支持希瓦.
回复

使用道具 举报

发表于 2011-6-12 17:10:57 | 显示全部楼层
ORPGSL系统.w3x (15 K) 下载次数:0

AllowLocalFiles.rar (1 K) 下载次数:0

一幅ORPG地图.w3x (19 K) 下载次数:4

。。看来大家比较关心那张地图~~
回复

使用道具 举报

发表于 2011-6-13 19:14:55 | 显示全部楼层
非常之好~~希瓦加油啊~~
回复

使用道具 举报

 楼主| 发表于 2011-6-13 19:36:06 | 显示全部楼层
嗯嗯~真开心~
谢谢头目大人~~
我会继续努力完善它的~~

点评

西瓦大大 我找到一张很老的ORPG 我发现他的那个SL系统不成熟 可是我又对SL一窍不通 我想学习下对这个地图的SL系统进行修改 请问能指导小的学习吗? 虽然可能占用了您百忙之中的闲暇时间,但是真的很想拜托您。 (  详情 回复 发表于 2015-8-25 10:44
回复

使用道具 举报

发表于 2011-6-14 15:45:54 | 显示全部楼层
希瓦缺德啊……居然用那样的方法骗我下载……不过倒也不能全怪希瓦,都是绝影提出来的……
回复

使用道具 举报

发表于 2011-6-14 16:26:27 | 显示全部楼层
什么方法骗你下载?
回复

使用道具 举报

 楼主| 发表于 2011-6-14 16:36:12 | 显示全部楼层
有人说想玩我做的地图~
我就在群里面放出过下载的链接~
结果就是这样了~~
回复 1 0

使用道具 举报

发表于 2011-6-15 16:26:41 | 显示全部楼层
这个贴是为我准备的么?小弟的暗黑图IMPK风云再起正想往这个方向优化S/L系统
真是踏破草鞋无处寻得来全不费工夫  - -!!



问一下老大,此系统能否实现完美支持1.24?可支持多人游戏?
相当的期待
回复

使用道具 举报

发表于 2011-6-15 17:20:24 | 显示全部楼层
这个...离用于实际地图中还有蛮远的差距吧,楼上可能要失望了
回复

使用道具 举报

 楼主| 发表于 2011-6-15 18:14:41 | 显示全部楼层
这个系统虽然很简单,但是其实她已经能够独当一面了呢;
她支持魔兽的所有版本的,支持多玩家;
并且经过多次测试,并没有出现掉线问题。

只是需要注意几点:
1)如果数据太多了的话,最好分成几个文件来储存
2)要使用这个系统,必须开启Allow Local Files的注册表项

如果你想先试试其它的SL系统的话
可以试试U9枫霜前辈制作的ORPG系统
也可以试试楼上的actboy168前辈制作的YDWE的SL系统。

而如果你决定了使用这个SL系统
那么我可是一个认真负责的技术顾问哦~~欢迎随时反馈各种意见以及建议~~
回复

使用道具 举报

 楼主| 发表于 2011-6-15 18:51:14 | 显示全部楼层
引用第17楼leisel于2011-06-15 16:26发表的  :
这个贴是为我准备的么?小弟的暗黑图IMPK风云再起正想往这个方向优化S/L系统
真是踏破草鞋无处寻得来全不费工夫  - -!!



.......
你的地图使用的是记录码储存系统吧?
如果你感兴趣的话,等我上晚自习回来后,写一个可以直接储存/读取记录码的演示出来~
你可以移植试试~
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 09:10 , Processed in 0.364227 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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