找回密码
 点一下
查看: 9142|回复: 20

新手向·最基础的SC2多人版Bank数据存取演示

[复制链接]
发表于 2011-4-20 19:32:05 | 显示全部楼层 |阅读模式
注意:本演示是用来教大家如何使用Bank系统来联机存取数据。但是由于是最基础的演示。没有进行任何的Bank加密或者签名。毕竟对于本演示所面向的初学者们来说,先得把最基本的存取功能学会才是真的。


其实这演示是由于通宵尸王同学的《四方争霸》地图想要搞个战绩系统。保存每个玩家的战绩。但是他遇到了超多问题。导致无法正常存取数据。所以我做了这个演示并顺便改成了面向所有Bank初学者的演示来发了,这对大家都有好处的吧。


这个演示,简单地说,可以进2个玩家。然后每5秒会刷出几只zergling来送死。你的击杀数会被显示在右上角的记分板上(所以这顺便也是个新手向记分板演示拉)。然后你按屏幕右边的“保存”按钮的话,你当前的击杀数就会被记录下来。你下次进游戏,你的击杀数就会以这个值为基数来往上加了。虽然是个简单的演示,但已经包含了ban数据存取的所有必要内容。对于Bank用法不了解的同学可以慢慢研究下。



例子:两个玩家分别点击保存,一个在自己65分时按了保存按钮,另一个在87分时按了保存钮。(有人问,为啥和右上角不一致啊?那是因为截图的时候离按保存的时候已经过了一段时间了,所以之后又多杀了几个而已。)

   Screenshot2011-04-20 19_18_56.jpg

下一次开这个地图的时候

Screenshot2011-04-20 19_19_56.jpg

直接变成65分和87分了。

BankTest.SC2Map

16 KB, 下载次数: 545

发表于 2011-4-20 21:25:42 | 显示全部楼层
-。-依旧悲剧中。。。不过貌似有点眉目了
回复

使用道具 举报

发表于 2011-4-23 00:08:16 | 显示全部楼层
先下来看看
回复

使用道具 举报

发表于 2011-4-23 08:40:23 | 显示全部楼层
这是相当有好处的。我没用过Bank,看过外国作者的.galaxy,觉得有些复杂。支持头目
回复

使用道具 举报

发表于 2011-4-25 08:24:12 | 显示全部楼层
突然发现第一副截图的小狗血液呈双螺旋结构。

点评

DNA的说  发表于 2014-7-30 20:50
回复

使用道具 举报

发表于 2011-4-27 16:15:48 | 显示全部楼层
有几个问题想问下头目,好像之前提到过bank系统的存储文件可以放到任意文件夹和战网上的,应该怎么操作呢?

另外想问的是,除外BankLoad和BankSave两个函数,bank系统其它的api的效率如何呢?和DataTable会差多少呢?
回复

使用道具 举报

发表于 2011-4-27 16:17:52 | 显示全部楼层
那个说的是debug文件。可以输出到任意目录。

至于战网上的版本,那是以后的事情,基本上至少要虫群之心。
回复

使用道具 举报

发表于 2011-4-27 16:32:07 | 显示全部楼层
啊啊,明白了。

发现是自己记错了
回复

使用道具 举报

发表于 2011-6-18 09:24:57 | 显示全部楼层
问个问题,该地图中Init Bank触发中用了两个载入。
1,        BankPreload("TestBank",1)
2,                BankLoad(bankName,player)
这两个载入有什么区别?
回复

使用道具 举报

 楼主| 发表于 2011-6-18 09:40:29 | 显示全部楼层
BankPreload其实是伪代码,是个预处理的指令。

实际上并无这句脚本,这是告诉编译器要做什么。

“帮我预载并同步玩家1的Bank”。


SC2的脚本,出于减少断线危险的考虑。原则上是要求严格同步的。所以不能我读我的,你读你的,这样它就容易断线(因为别人电脑上没有你的Bank)。Preload并不仅仅是在地图初始化时把你硬盘上的Bank预先读取到内存里,加快以后读数据的速度那么简单。

更重要的是它会进行一次同步,把指定玩家的Bank向所有联机的玩家发放,存进他们的内存当中。(当然,并不会覆盖他们自己的Bank。这些Bank在内存中是按照玩家号来存放的。)。这样当读取数据时,所有的玩家读到的玩家1的Bank都是一致的数据。才不会因为数据不一致而导致断线。而且也可以大幅度缓解读取Bank时的网络延迟问题。


如果你了解一些war3的话,可以看看之前的那个war3 preload漏洞。利用那个漏洞可以让War3模拟出sc2的bank的功能。但是不同的是,war3就得自行处理不同步的问题。而sc2只要加入这样一条预处理指令即可。
回复

使用道具 举报

 楼主| 发表于 2011-6-18 09:41:13 | 显示全部楼层
其实你只要打开脚本文件看看就知道,根本不存在这样一句代码。而且BankPreload()也根本不是Native函数。
回复

使用道具 举报

 楼主| 发表于 2011-6-18 09:44:46 | 显示全部楼层
投影到水渠和war3综合区,让大家能更容易搞清楚SC2的Bank和War3的Preload S\\L系统的异同。
回复

使用道具 举报

发表于 2011-6-20 12:03:44 | 显示全部楼层
疑问,我设置了个点击按钮,读取数据。

当Bank文件不存在,或者存储的条目不存在的时候,就会提示一个无法从某str提取到数据,这个报错如何消除?是直接关闭地图debug么?还是可以有类似try catch的方法?
回复

使用道具 举报

 楼主| 发表于 2011-6-20 12:11:33 | 显示全部楼层
先用BankKeyExists判断一次是否有这个Key。
回复

使用道具 举报

发表于 2014-11-28 21:34:22 | 显示全部楼层
头目,打开怎么看不到变量那些名字,都是无值!
回复

使用道具 举报

发表于 2014-12-6 08:28:46 | 显示全部楼层
如何解决,yxxiaobin
回复

使用道具 举报

发表于 2014-12-7 15:30:20 | 显示全部楼层
zjm1001010 发表于 2014-12-6 08:28
如何解决,yxxiaobin

最简单的一个方法就是自己重命名一下所有的变量和触发器。当然这些名字因为无可读意义,所以对读懂触发器多少有些妨碍。如果你有MPQ编辑器,则可以打开后修复触发器文本。
我这里正好有自己修复过的存档,发一份给你好了。
bank演示.SC2Map (17.59 KB, 下载次数: 61)
回复

使用道具 举报

发表于 2017-10-24 16:45:47 | 显示全部楼层
感谢头目,另外求问头目,编辑器自带的加密签名怎么弄啊,我的bank做出来没有加密随便都能改啊。。。

点评

我在本区发过一个加密的演示,你可以参考一下。另外偷懒的话,也可以使用自带的存档加密功能。  发表于 2017-11-2 16:26
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-21 23:39 , Processed in 0.446268 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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