请选择 进入手机版 | 继续访问电脑版

GA地精研究院

 找回密码
 立即注册
查看: 25363|回复: 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, 下载次数: 433)

评分

参与人数 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~~
加密倒不是难事,只是加密算法是个问题~
回复 支持 反对

使用道具 举报

发表于 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 | 显示全部楼层
嗯嗯~真开心~
谢谢头目大人~~
我会继续努力完善它的~~
回复 支持 反对

使用道具 举报

发表于 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, 2019-10-23 01:05 , Processed in 0.325285 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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