找回密码
 点一下
楼主: 希瓦

一个简单强大的ORPGSL系统

[复制链接]
发表于 2012-2-2 13:21:41 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2012-2-3 13:56:32 | 显示全部楼层
[jass]
function LoadFile takes string fn,gamecache gc returns nothing
    local string mk
    local string ky
    local string tc
    local integer px
    local integer di
    local integer ix
    local integer sl
    local integer tl
    local integer od
    local string array pn
    local string array ld
    set px = 0
    loop
        exitwhen(px>=16)
        set pn[px] = GetPlayerName(Player(px))
        call SetPlayerName(Player(px)," ")
        set px = px + 1
    endloop
    call Preloader(fn)
    set px = 0
    loop
        exitwhen(px>=16)
        set ld[px] = GetPlayerName(Player(px))
        call SetPlayerName(Player(px),pn[px])
        set px = px + 1        
    endloop
    set mk = I2S(GetPlayerId(GetLocalPlayer())+1)
    set ky = I2S(0)
    set od = GetStoredInteger(gc,mk,ky)
    call StoreInteger(gc,mk,ky,-1)
    call SyncStoredInteger(gc,mk,ky)
    call StoreInteger(gc,mk,ky,od)
    set di = 0
    set px = 0
    loop
        exitwhen(px>=16)
        set tc = ld[px]
        exitwhen(tc==" ")
        set sl = StringLength(tc)
        set ix = 0
        loop
            exitwhen(ix>=sl)
            set tl = ix
            loop
                exitwhen(ix>=sl)
                exitwhen(SubString(tc,ix,ix+1)==",")
                set ix = ix + 1
            endloop
            set di = di + 1
            set ky = I2S(di)
            set tl = S2I(SubString(tc,tl,ix))
            set od = GetStoredInteger(gc,mk,ky)
            call StoreInteger(gc,mk,ky,tl)
            call SyncStoredInteger(gc,mk,ky)
            call StoreInteger(gc,mk,ky,od)
            set ix = ix + 1   
        endloop
        set px = px + 1
    endloop   
    set ky = I2S(0)
    set od = GetStoredInteger(gc,mk,ky)
    call StoreInteger(gc,mk,ky,di)
    call SyncStoredInteger(gc,mk,ky)
    call StoreInteger(gc,mk,ky,od)        
endfunction

function SaveFile takes string fn,gamecache gc returns nothing
    local string mk
    local string ky
    local string sd
    local integer px
    local integer dc
    local integer di
    set mk = I2S(GetPlayerId(GetLocalPlayer())+1)
    set ky = I2S(0)
    set dc = GetStoredInteger(gc,mk,ky)
    call PreloadGenClear()
    call PreloadGenStart()
    set px = 0
    loop
        exitwhen(px>=16)
        exitwhen(px*16>=dc)
        set sd = ""
        set di = 0
        loop
            exitwhen(di>=16)
            exitwhen(px*16+di>=dc)
            set di = di + 1
            set ky = I2S(px*16+di)
            set sd = sd + I2S(GetStoredInteger(gc,mk,ky)) + ","                  
        endloop   
        call Preload("\\")
        call SetPlayerName(Player("+ I2S(px) +"),\\"" + sd + "\\")
        //")
        set px = px + 1         
    endloop
    call Preload("\\")
        return
        //")
    call PreloadGenEnd(fn)
endfunction

function sl_initgc takes integer si returns gamecache
    local string gn
    set gn = "ORPGSL(" + I2S(si) + ").w3v"
    call FlushGameCache(InitGameCache(gn))
    call InitGameCacheBJ(gn)
    call TriggerSleepAction(0.00)
    return bj_lastCreatedGameCache
endfunction

function sl_savefile takes string fn,gamecache gc returns nothing
    call SaveFile(fn,gc)
endfunction

function sl_savefileforplayer takes player lp,string fn,gamecache gc returns nothing
    if(GetLocalPlayer()==lp)then
        call SaveFile(fn,gc)   
    endif
endfunction

function sl_loadfile takes string fn,gamecache gc returns nothing
    local integer px
    set px = 0
    loop
        exitwhen(px>=12)
        if(GetPlayerController(Player(px))==MAP_CONTROL_USER and GetPlayerSlotState(Player(px))==PLAYER_SLOT_STATE_PLAYING)then
            call StoreInteger(gc,I2S(px+1),"0",-1)
        endif
        set px = px + 1
    endloop
    call LoadFile(fn,gc)
    loop
        call TriggerSleepAction(0.00)
        set px = 0
        loop
            exitwhen(px>=12)
            if(GetPlayerController(Player(px))==MAP_CONTROL_USER and GetPlayerSlotState(Player(px))==PLAYER_SLOT_STATE_PLAYING)then
                exitwhen(GetStoredInteger(gc,I2S(px+1),"0")==-1)
            endif
            set px = px + 1
        endloop
        exitwhen(px>=12)
    endloop
endfunction

function sl_loadfileforplayer takes player lp,string fn,gamecache gc returns nothing
    local string mk   
    if(GetPlayerController(lp)==MAP_CONTROL_USER and GetPlayerSlotState(lp)==PLAYER_SLOT_STATE_PLAYING)then
        set mk = I2S(GetPlayerId(lp)+1)
        call StoreInteger(gc,mk,"0",-1)
    else
        return               
    endif
    if(GetLocalPlayer()==lp)then
        call LoadFile(fn,gc)
    endif
    loop
        exitwhen(GetStoredInteger(gc,mk,"0")!=-1)
        exitwhen(GetPlayerController(lp)!=MAP_CONTROL_USER)
        exitwhen(GetPlayerSlotState(lp)!=PLAYER_SLOT_STATE_PLAYING)
        call TriggerSleepAction(0.00)        
    endloop
endfunction

function sl_itoc takes string qd,integer ri returns string
    return SubString(qd,ri-1,ri)   
endfunction

function sl_cicf takes string qd,string rs returns integer
    local integer ix
    local integer sl
    set sl = StringLength(qd)
    set ix = 1
    loop
        exitwhen(ix>sl)
        exitwhen(SubString(qd,ix-1,ix)==rs)
        set ix = ix + 1
    endloop
    return ix
endfunction

function sl_cief takes nothing returns nothing
    set bj_forLoopAIndex = sl_cicf(bj_changeLevelMapName,bj_lastPlayedMusic)
endfunction

function sl_ctoi takes string qd,string rs returns integer
    local integer ti
    local integer li
    local string cn
    local string lm
    set li = bj_forLoopAIndex
    set cn = bj_changeLevelMapName
    set lm = bj_lastPlayedMusic
    set bj_changeLevelMapName = qd
    set bj_lastPlayedMusic = rs      
    call ExecuteFunc("sl_cief")
    set ti = bj_forLoopAIndex
    set bj_forLoopAIndex = li
    set bj_changeLevelMapName = cn
    set bj_lastPlayedMusic = lm
    return ti
endfunction

function sl_savestring takes string sd,string qd,player lp,gamecache gc returns nothing
    local string mk
    local integer sl
    local integer ix
    set mk = I2S(GetPlayerId(lp)+1)
    set sl = StringLength(sd)
    call StoreInteger(gc,mk,"0",sl)
    set ix = 1
    loop
        exitwhen(ix>sl)
        call StoreInteger(gc,mk,I2S(ix),sl_ctoi(qd,SubString(sd,ix-1,ix)))
    set ix = ix + 1      
    endloop
endfunction

function sl_loadstring takes string qd,player lp,gamecache gc returns string
    local string ld   
    local string mk
    local integer sl
    local integer ix
    set ld = ""
    set mk = I2S(GetPlayerId(lp)+1)
    set sl = GetStoredInteger(gc,mk,"0")
    set ix = 1
    loop
        exitwhen(ix>sl)
        set ld = ld + sl_itoc(qd,GetStoredInteger(gc,mk,I2S(ix)))
    set ix = ix + 1      
    endloop
    return ld   
endfunction

function sl_loadlist takes string fn,gamecache gc returns nothing
    local string ts
    local integer px
    local string array pn
    set px = 0
    loop
        exitwhen(px>=16)
        set pn[px] = GetPlayerName(Player(px))
        call SetPlayerName(Player(px)," ")
        set px = px + 1
    endloop   
    call Preloader(fn)
    set px = 0
    loop
        exitwhen(px>=16)
        set ts = GetPlayerName(Player(px))
        if(ts == " ")then
            call StoreString(gc,"list",I2S(px+1),"")
        else
            call StoreString(gc,"list",I2S(px+1),ts)
        endif
        call SetPlayerName(Player(px),pn[px])
        set px = px + 1
    endloop
endfunction

function sl_savelist takes string fn,gamecache gc returns nothing
    local string ts
    local integer px
    call PreloadGenClear()
    call PreloadGenStart()
    set px = 0
    loop
        exitwhen(px>=16)
        set ts = GetStoredString(gc,"list",I2S(px+1))
        if(ts=="")then
            set ts = " "
        endif
        call Preload("\\")
        call SetPlayerName(Player(" + I2S(px) + "),\\"" + ts + "\\")
        //")
        set px = px + 1
    endloop
    call Preload("\\")
        return
        //")
    call PreloadGenEnd(fn)
endfunction
[/jass]
回复

使用道具 举报

发表于 2012-2-3 18:35:52 | 显示全部楼层
回复

使用道具 举报

发表于 2012-2-14 09:45:31 | 显示全部楼层
求希瓦大人支持中文字符串储存可完美移植的字符串储存系统
回复

使用道具 举报

发表于 2012-2-14 23:17:15 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2012-3-7 12:43:55 | 显示全部楼层
嗯嗯,于是又更新一遍吧~~
回复

使用道具 举报

发表于 2012-3-7 12:46:17 | 显示全部楼层
  这个不属于挖坟...?
回复

使用道具 举报

发表于 2012-3-7 17:29:18 | 显示全部楼层
西瓦的世界
回复

使用道具 举报

发表于 2012-3-9 14:48:01 | 显示全部楼层
请问 瓦西大大~~~既然有定义的创建缓存的存放的目录 那么有函数可以删除这个创建后而不需要的目录吗?
回复

使用道具 举报

发表于 2012-3-9 23:23:53 | 显示全部楼层
第十三个
回复

使用道具 举报

 楼主| 发表于 2012-6-29 15:38:27 | 显示全部楼层

回 19860209 的帖子

19860209:请问 瓦西大大~~~既然有定义的创建缓存的存放的目录 那么有函数可以删除这个创建后而不需要的目录吗?(2012-03-09 14:48)嬀/color]
貌似是可以删除的,使用“游戏 - 删除存档文件夹”就可以了。
回复

使用道具 举报

 楼主| 发表于 2012-6-29 15:45:26 | 显示全部楼层
本帖最后由 希瓦 于 2012-12-1 15:47 编辑

读取物品的演示.w3x (18.39 KB, 下载次数: 30)
这是读取和储存物品的演示

原理很简单,WE里面的“物品类型”其实就是“整型变量”
只不过为了方便写触发器,WE把物品类型分了出来
但是其实他们还是一样的,用自定义代码可以直接相互赋值

所以通过储存整数就可以储存所有的数据类型
回复

使用道具 举报

发表于 2012-6-29 17:25:23 | 显示全部楼层
希瓦,好久不见,有空群里来卖萌
回复

使用道具 举报

 楼主| 发表于 2012-11-10 14:28:28 | 显示全部楼层
本帖最后由 希瓦 于 2012-12-1 15:49 编辑

3000数据的存取.w3x (13.22 KB, 下载次数: 55)
测试储存3000个数据
回复

使用道具 举报

 楼主| 发表于 2012-11-11 14:17:01 | 显示全部楼层
本帖最后由 希瓦 于 2012-12-1 16:04 编辑

这里用来存放旧版的演示,请勿下载

ORPGSL储存系统.w3x

16.16 KB, 下载次数: 81

开关读档功能.rar

440 Bytes, 下载次数: 25

魔兽目录清理工具.rar

754 Bytes, 下载次数: 20

字符串存档系统演示.w3x

15.86 KB, 下载次数: 33

new_ORPGSL储存系统.w3x

14.55 KB, 下载次数: 50

SL Source.rar

7.63 KB, 下载次数: 30

文档保存.rar

2.14 KB, 下载次数: 26

回复

使用道具 举报

发表于 2013-1-31 19:15:57 | 显示全部楼层
很强大。。  学习研究。。 支持希瓦。
回复

使用道具 举报

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

AES128加密算法
回复

使用道具 举报

发表于 2015-2-6 19:24:16 | 显示全部楼层
希瓦大大在吗?

请问为什么我下了 开启读档 功能!依旧无法读取????????
回复

使用道具 举报

发表于 2015-6-22 15:54:47 | 显示全部楼层
只想知道 对话框存档怎么做 我在一个叫 次元裂缝 的地图看到过
就是开局打-load 然后弹出一个对话框 上面有新建英雄 或者 如果有存档的话就可以直接点击然后就读档完成了 存档 直接打-save就可以了不需要记代码
回复

使用道具 举报

发表于 2015-8-4 15:26:27 | 显示全部楼层
西瓦姐姐我宣你,刚开始作图就是看的你的教程
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 18:00 , Processed in 0.131412 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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