找回密码
 点一下
查看: 5275|回复: 0

[hackwaly][zyj_gods要得save机制,有制作方法]

  [复制链接]
发表于 2006-3-28 15:57:02 | 显示全部楼层 |阅读模式
首先确认你要存档的数据的信息量,什么意思呢。比如说你要存档的只有英雄的等级,而英雄等级可以取的值在
0-10之间,那么信息量就是11,再比如你要存档的还有英雄的力量,敏捷,智力,那么信息量就是 [等级]乘[力量]乘[敏捷]乘[智力],假设英雄的3围属性都不会大于100,那么信息量就是10×100×100×100,如果你还有更多的信息要存储,那么依此计算。

再确定你的存档码方式,就是说玩家在游戏中得到的档案码的元素多少,比如说档案码由0-9和大写字母组成,那么元素个数就有26+10=36。存档码就是用这些元素来存储你要存档的信息。存档码同样有信息量,就说刚才的存档码方式,那么1位存档码信息量就有36,2位就是36×36,位数越多,信息量就越大,当然玩家要记的也越多。

然后就要加密,就是把原来的信息(要存档的信息)转化为新的信息(存档码),这样玩家才不能随心所欲的自己想要什么就是什么。加密有几种方式的:1,全信息加密,就是由加密者和解密者知道加密算法,而原信息量=密码信息量,这样的话任意的密码就对应任意的原信息,魔兽地图不好采用这种,不用去了解。2,随机加密,就是加密后的信息量大大超过原信息量,亡者之夜就是这种,你输错了,它就能知道。3,有损加密,如MD5码加密方式。用不到它,不用管。所以我们就采用第2种。

然后确认并熟悉你需要的函数,比如说GetHeroStr(),GetHeroLevel,取得英雄的技能Id的函数(如果你需要的话),等等,这些是取得原信息的工具,另外还要一些String API的函数,才能把玩家输入的存档码分解成1个1个的,再反加密回原信息。

下面是我的新图用的方法

我的新图的原信息为等级<10>,力量<360>,敏捷<360>,智力<360>,游戏次数<360>,密码<1000>,技能1类别<60>, 技能1等级<6>,技能2类别<60>,技能2等级<6>,技能3类别<60>,技能3等级<6>,英雄模型<10>,通关次数<60>,随机信息<1000>。注意<>内的表示信息量,密码是玩家输入了存档码后要输入才能获得英雄的东东,即有存档码没密码只能看读出的英雄,不能用。随机信息是每次游戏时生成的与上次不一样的3位数,可以自己写函数(要用到GetRandomInt()和T)

存档码方式为数字0-9,小写a-z除去l,大写A-Z除去O,一共是60个元素。
存档码的位数是XXXXXXXX-XXXXXXXX。

现在就要设计加密算法了,设存档码第一位为String A1,第二位为A2,依次A3,A4,A5,A6,A7,A8,B1,B2,B3,B4,B5,B6,B7,B8。注意B为短线后的

先做一个映射函数
function YingShe1 takes string X returns integer
if X=="0" then return *
elseif X=="1" then return *
elseif X=="2" then return *
.....................
else return *
end funtion
再做它的反函数YingShe2
注意*为你的映射的数值,如a被屏蔽广告表25,Q被屏蔽广告表59,等等。请设为0-59
这个函数表示把单个的字符转化为整数(其对应的数值)

建立一个T(save):事件为玩家输入的message
条件为,内容完全符合"-save"
动作为,收集原信息到相应的变量中

现在假设收集好了,就该计算存档码的每一位了
PA1=YingShe2((等级×360+游戏次数)÷60)
PA2=取余数(YingShe2((等级×360+游戏次数)÷60))
PA3=YingShe2((密码第一位×360+力量)÷60)
PA4=取余数(YingShe2((密码第一位×360+力量)÷60)
PA5=YingShe2((密码第二位×360+敏捷)÷60)
PA6=取余数(YingShe2((密码第二位×360+敏捷)÷60)
……………
PB8=取余数(YingShe2((技能3等级×360+技能3类别×随机信息第三位)÷60)
中间的就照这种商余法计算

这样还没好,因为如果玩家的信息没改变,那么得到的存档码就只有B的部分才有变化。
我们可以A1=YingShe2(YingShe1(PAn)+YingShe1(PBn)(如果大于等于60,就减去60。自己做函数)),这样每次游戏得到的存档码都不一样
Bn=PBn

display给玩家"你的存档码为A1A2A3A4A5A6A7A8-B1B2B3B4B5B6B7B8" (这里也可以使用换位加密)

我们还可以作成存档码显示给玩家时字母一种颜色,数字一种颜色的效果,方便玩家辨认


再建立一个T(load):事件为玩家输入的message
条件为,被屏蔽广告码(功能是取输入的内容的前6位)="-load "
动作为,依次取A1=第7位,A2=第8位……一直到B8(如果你用了换位加密,这里就要把位置换回来)

再用函数,IA1=YingShe1(A1),IA2=YingShe1(A2)……一直到IB8

等级=((IA1-IB2(如果小于0就加上60))×60+IA2)÷360
游戏次数=取余数((IA1-IB2(如果小于0就加上60))×60+IA2)÷360
……………
一直到取得所有的原信息
再调用相应的函数和动作给中立玩家一个英雄,并设置好相应的属性
做个对话框有按纽0-9和"上一个密码",display给触发玩家,获取玩家点的值,转化为数字。
和比对密码第一位,第二位,第三位比较,如果符合,就更换刚创建的英雄的所属者和颜色

基本上差不多了
有的地图在原信息中加入了玩家名字,读档是核对,我觉得没多大必要,因为很多玩家名字随时都在变,而且这个功能也不完善,你玩亡者之夜把名字输成中文之后,就可以换其他中文名字用原来的存档码,别人也可以。没起到保护作用。

以上部分功能需要在T和J共同合作下完成,如果不会,请去请教高手


注:密码功能是被屏蔽广告替随机加密中的随机信息的(即可以删去随机信息,因为即使你乱输的存档码不是错的,但密码相应的你不知道了),为原创。转载请保留

评分

参与人数 1威望 +8 收起 理由
alexries + 8

查看全部评分

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

本版积分规则

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

GMT+8, 2024-4-25 06:17 , Processed in 0.171057 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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