我玩贪婪洞窟的时间不多,对其的了解也不多,对其配置文件的研究也只是走马观花,因此,一些设想可能根本就无法实现。而且本人只有半瓶水的水平,又有点急性子,难免出错。遇到这些情况,欢迎大家狠命拍砖。
上篇文章说了改钻石(钻石、水晶,傻傻分不清楚,^_^)。它是通过修改任务配置文件中的任务奖励来间接达到无限钻石这个目的的。还稍微讲解了一下对任务表的研究。经过验证,对任务表的各种修改都是可行的,比如将杀怪数量降低为1、修改奖励钻石和金币等等。
修改配置文件并能生效(这不是废话,有些联网的游戏并不使用本地的配置),这使得我们修改游戏成为了可能。但是,贪婪洞窟没有使用脚本,所有的游戏逻辑直接嵌在了可执行文件中,这又对游戏逻辑、游戏玩法上的修改造成了一定的限制。
那么问题又回到了上篇文章中所提出来的:改什么?怎么改?
先抛开这两个问题,想想贪婪洞窟原版中的内容。
在操作上,它只是简单地触摸、点击、移动,这些,直接实现在程序内部,我们想搞点“组合输入”、“搓招”是不可能的。
主要玩法很常规,进地牢刷怪、得装备、变强,进下层地牢刷更强的怪、得更强的装备。装备属性依照等级在一定范围内随机。装备可以强化到+10。强化一件装备需要消耗另外一件装备;被消耗的装备的等级越高、品质越高,强化成功率就越高。强化等级每提高一级,装备属性(包括基本属性和附加属性)都会根据装备等级提高一个定值。装备可以在地牢中附魔,附魔属性不受强化等级影响,而根据附魔材料的等级在一定范围内随机。每件装备最多可以变换一条属性为另一条随机属性,变换的次数没有限制。强化和变换都需要通过铁匠npc完成,该npc出现在城镇,在梦境中也出现在地牢中。装备分为普装和套装。套装根据穿戴的件数不同而激活不同的套装属性。装备具有品质,白、蓝、金、暗金,分别拥有最多0、1、2、3条附加属性。套装必然是暗金装备。套装具有固定来源,有的是Boss掉落,有的是购买获得。部分装备具有特殊属性,具有特别的功效,换种说法,就是被动技能。在地牢中,人物一旦死亡,本次探险将不会有任何收获;只有通关或者使用“逃脱卷轴”,才能将到目前为止的收获带出到地牢之外(装备和物品只有金色及其以上品质的才能带出地牢;金色以下的物品可以通过点金成为金色品质。点金不会影响装备的属性数目和属性值)。地牢的0.5层、10.5层、20.5层、……是“连接点”(下次探险可直接从该层开始),并且有一个商人npc,出售垃圾装、药水、部分附魔材料,玩家也可向其卖出物品。地牢随机生成。怪物分为普通怪、精英怪和Boss三种。精英怪每1-3层随机出现一个;Boss每20层固定出现一个。每层地牢随机产生杂物堆、罐子、钱袋、木箱、金箱、水晶箱、密室、符文。杂物堆掉落附魔材料;罐子掉落药水、铲子、逃脱卷轴、灵视卷轴;钱袋掉落金币;木箱掉落低品质装备;金箱可能掉落金色品质装备;水晶箱掉落金色及其以上品质装备,但需要消耗钻石才能开启,且仅出现在密室中。密室必须有玩家打开暗门方能进入,密室具有通往下一层的入口。符文分为5种:hp、map、物攻、物防、魔力,永久提升人物属性。充值、老婆婆商店只是为了获得更好的装备,不谈;转转盘、社交等也不谈。人物属性、技能、物品技能,怪物属性、技能暂时略过,下面再说。
有了上面的这些了解之后,我们再说说非常重要的打斗。
打斗伤害分为三种:魔法、物理、属性(木、水、火、光、暗)。部分怪物具有弱点,遭受某种类型的攻击时伤害翻倍。属性伤害只有在进行物理攻击时才会触发。
打斗中技能的低位相当重要,有时直接决定着胜败。我们先看看物品上的被动技能。物品被动技能在suitSkill.plist中,不多,但也不少,如果手动整理的话,也是蛮痛苦的。解决的办法还是那两个:正则或者Swift。这次我使用Swift解决问题,正则就作为“家庭作业”自己完成吧,如果大家有兴趣的话。
将物品被动技能整理为html表格的Swift代码如下:
let version = "贪婪洞窟(v1.5.0)"
let localString:NSDictionary? = NSDictionary(contentsOfFile:"/Users/x/ \(version)/LocalString_zh.plist")
let suitSkills:NSDictionary? = NSDictionary(contentsOfFile:"/Users/x/\(version) /suitSkill.plist")
// 对key排个序
let allKeys = suitSkills!.allKeys.sort({ (t1, t2) -> Bool in
return NSInteger.init(t1 as! String)! < NSInteger.init(t2 as! String)! ? true:false
})
var result = "
result += "
func find(keyForLocalString:String?)->String
{
if keyForLocalString==nil
{
return ""
}
else
{
let name:String? = localString!.valueForKey("\(keyForLocalString!)") as? String
if name == nil
{
return ""
}
return name!
}
}
for key in allKeys
{
let name = find(suitSkills!.valueForKeyPath("\(key).name") as? String)
let des = find(suitSkills!.valueForKeyPath("\(key).des") as? String)
result += " "\(key) \(name) \(des)
}
result += ""
print(result)
整理出的技能列表如下:
id |
名称 |
des |
10101 |
无尽杀意 |
每次攻击受到50点伤害 |
10201 |
无尽杀意 |
生命偷取 |
10301 |
无尽杀意 |
攻击有几率附带火伤害 |
10401 |
无尽杀意 |
攻击有几率附带水伤害 |
10501 |
无尽杀意 |
攻击有几率附带木伤害 |
10601 |
无尽杀意 |
攻击有几率附带光伤害 |
10701 |
无尽杀意 |
攻击有几率附带暗伤害 |
10801 |
无尽杀意 |
攻击可能冻结敌人 |
10901 |
无尽杀意 |
攻击可能使敌人中毒 |
11001 |
无尽杀意 |
攻击可能使敌人燃烧 |
11101 |
无尽杀意 |
攻击可能使敌人流血 |
11201 |
无尽杀意 |
首次攻击必定暴击 |
11301 |
无尽杀意 |
攻击可能使下次技能不消耗魔法值 |
11401 |
无尽杀意 |
攻击可能提升攻击速度 |
11501 |
无尽杀意 |
攻击可能偷取黄金 |
11601 |
无尽杀意 |
攻击可能封印敌人的属性攻击力 |
11701 |
无尽杀意 |
技能有几率施放两次 |
11801 |
无尽杀意 |
施放技能会提升攻击力 |
11901 |
无尽杀意 |
|
12001 |
无尽杀意 |
|
12101 |
无尽杀意 |
受到攻击可能反弹伤害 |
12201 |
无尽杀意 |
受到攻击可能回复魔法值 |
12301 |
无尽杀意 |
受到攻击可能回复生命值 |
12401 |
无尽杀意 |
闪避后有几率秒杀敌人 |
12501 |
无尽杀意 |
生命值低于20%时,必定暴击 |
12601 |
无尽杀意 |
避免一次死亡,复活后该装备被摧毁 |
12701 |
无尽杀意 |
生命值越低攻击力越高 |
12801 |
无尽杀意 |
受到所有属性伤害减少 |
12901 |
无尽杀意 |
受到攻击会提升闪避率 |
13001 |
无尽杀意 |
攻击有几率视怪物所有属性为弱点 |
13101 |
无尽杀意 |
拾取钱袋的黄金翻倍 |
20101 |
无尽杀意 |
攻击力 +100 |
20102 |
无尽杀意 |
魔力 +100 |
20103 |
无尽杀意 |
生命值 +1000 |
20104 |
无尽杀意 |
防御 +285 |
20105 |
无尽杀意 |
闪避率 +8 |
20106 |
无尽杀意 |
穿透 +750 |
20107 |
无尽杀意 |
幸运 +45 |
20108 |
无尽杀意 |
生命值 +2500 |
20109 |
无尽杀意 |
魔力 +500 |
30001 |
无尽杀意 |
攻击可能使敌人中毒 |
30002 |
无尽杀意 |
攻击可能使敌人中毒 |
30003 |
无尽杀意 |
攻击可能使敌人中毒 |
30004 |
无尽杀意 |
攻击可能使敌人中毒 |
30005 |
无尽杀意 |
攻击可能使敌人中毒 |
30006 |
无尽杀意 |
攻击可能使敌人中毒 |
30007 |
无尽杀意 |
攻击可能使敌人中毒 |
30008 |
无尽杀意 |
攻击可能使敌人中毒 |
40001 |
无尽杀意 |
显示密室所在位置 |
40002 |
无尽杀意 |
使用技能后的下一次攻击伤害提高(魔力*25%) |
40003 |
无尽杀意 |
受到的流血伤害减少 |
40004 |
无尽杀意 |
受到的毒伤害减少 |
40005 |
无尽杀意 |
所有技能魔法值消耗减少 |
40006 |
无尽杀意 |
攻击可能使敌人中毒 |
40007 |
无尽杀意 |
攻击可能使敌人中毒 |
40008 |
无尽杀意 |
攻击可能使敌人中毒 |
40009 |
无尽杀意 |
受到的攻击力衰减效果降低 |
40010 |
无尽杀意 |
攻击可能使敌人中毒 |
40011 |
无尽杀意 |
生命值 +3500 |
40012 |
无尽杀意 |
幸运 +60 |
40013 |
无尽杀意 |
攻击力 +720 |
对于名称全是“无尽杀意”这点,大家呵呵就好,本人表示绝对不是Swift代码的问题。
同理,整理出主角的技能(包含主动和被动,Swift代码就不贴了,和上面的类似,plist为skill.plist):
1001 |
攻击力 |
造成物理伤害的能力,每升一级增加1%攻击力 |
1002 |
防御 |
抵抗物理伤害的能力,每升一级增加1%防御 |
1003 |
魔力 |
提高某些魔法技能的效果,每升一级增加1%魔力 |
1004 |
暴击率 |
物理攻击产生暴击的几率,每升一级增加0.5%暴击率 |
1005 |
闪避率 |
闪避敌人攻击的几率,每升一级增加0.5%闪避率 |
1006 |
魔法值 |
每升一级增加1%魔法值上限 |
1007 |
生命值 |
每升一级增加1%生命值上限 |
1008 |
额外黄金 |
每升一级增加额外的黄金获取 |
1009 |
额外经验 |
每升一级增加额外的经验获取 |
1010 |
幸运值 |
每升一级增加获得稀有装备的几率 |
2001 |
虹吸斩 |
造成(攻击力*100%)物理伤害,并回复(50+本次伤害40%)生命值。 |
2002 |
治疗术 |
回复(60+魔力*350%)生命值。 |
2003 |
荆棘装甲 |
每次受到物理攻击,反弹受到伤害的10%给敌人。 |
2004 |
元素掌控 |
所有属性攻击力增加30%。 |
2005 |
反击 |
尝试格挡敌人的攻击,若格挡成功,则对攻击者造成(攻击力*150%)物理伤害。 |
2006 |
连击 |
快速连续攻击3次,每次攻击造成(攻击力*50%)物理伤害。 |
2007 |
肾上腺素 |
在一次战斗中每当造成暴击,提升20%攻击力,可叠加3次。 |
2008 |
弱点洞悉 |
攻击敌人弱点属性的伤害增加50%。 |
2009 |
舍身一击 |
造成(攻击力*375%)物理伤害,但自身会减少10%生命值。 |
2010 |
魔法吸取 |
造成(50+魔力*125%)魔法伤害,并回复(10 + 最大魔法值2% )点魔法值。 |
2011 |
割裂 |
普通攻击会撕裂敌人,造成(本次攻击伤害5%/秒)的流血伤害,可叠加3次。 |
2012 |
瞬身术 |
每次成功的闪避会降低敌人20%攻击力,可叠加3次。 |
2013 |
狂战士之怒 |
造成(攻击力*100%)物理伤害和额外伤害,当生命值越低时额外伤害越高。 |
2014 |
能量爆裂 |
造成(魔力*250%)魔法伤害和额外伤害,当魔法值越高时额外伤害越高。 |
2015 |
一刀两断 |
每次普通攻击有6%的几率造成敌人当前生命值50%的额外伤害。(对首领无效) |
2016 |
致命打击 |
每次普通攻击有3%的几率立即杀死敌人。(对首领无效) |
2017 |
要害重击 |
增加20%暴击率,造成(攻击力*100%)物理伤害,暴击时造成的伤害提高到300%。 |
2018 |
守护力场 |
获得一个可吸收(300+魔力*400%)伤害的守护力场,守护力场存在期间,魔力增加50%。 |
2019 |
隔空取物 |
打开视野范围内的任意宝箱。 |
2020 |
显示宝箱 |
在地图上标示出本层洞窟内一个最高品质宝箱的位置。 |
2021 |
陷阱抗性 |
受到的所有地形伤害降低50%。 |
2022 |
拆除陷阱 |
解除视野范围内的所有陷阱。 |
2023 |
瞬间移动 |
传送到视野范围内的任意位置。 |
2024 |
随机传送 |
随机传送到本层洞窟的任意位置。 |
1打头的技能对应的是主角升级后的加点效果。2打头的才是我们印象中的真正的技能。不管是1还是2,它们的升级效果全部在“skilllvup.plist”中定义,具体的打开一看便知。
还记得“00002 贪婪洞窟.001”中的那个列表吗?里头有个“skillEffect.plist”,看名字我们知道它是啥,但打开后看它的内容,倒也不至于傻眼,应当是Boss战中的各种Buf和Debuf。可是它们竟然没有name,倒让我怎么整理?其实根本无需整理,因为它们仅是被“物品被动技能”引用。好吧,这么一来,“物品被动技能表”这个说法并不准确,因为它包含了物品的被动技能和Boss等造成的Buf和Debuf,叫做“物品和怪物被动技能表”或许更合适,但谁知道新版中会不会包含其他东西呢?
仔细观察一下技能表,或者玩玩贪婪洞窟,就会发现怪物的技能实在是太少了,种类都不全。在玩WOW的时候,各种读条、打断、控制、召唤、驱散等等。贪婪洞窟只有几种Buf和Debuf叠加。由此,要给怪物添加一些有趣的技能估计不现实。那只能修改现有技能的平衡性数据了。但修改平衡性数据不是最终目的,而是要通过修改平衡性数据来改变玩家的体验。比如,不用技能,玩家要10刀才能砍死怪,而用了技能,3刀就砍死了。这时,玩家就会觉得技能好用,高攻。但如果用技能后需要用9刀,那么玩家就会觉得这个技能很鸡肋。
给怪物添加全新的技能不现实,但在现有条件下改变它的技能应当是可以的(下面会进行实际修改,如果证明行不通,至少也是一种研究性尝试)。怪物和物品所用的技能都在“物品和怪物被动技能表”中,增加现有条目的克隆,改变它的数值或者作用对象。
主角技能就不能增加现有条目的克隆了,因为需要和界面中的选项一一匹配。不过我们可以修改它,比如增加技能等级以及技能数值。
技能暂时先说到这。别问我为啥还不进行技能的修改——这还为时尚早啊,看下去就知道了。
下面说说战斗的流派。
有人喜欢物攻流,有人喜欢魔攻流,也有人喜欢双修或者其他什么的。但不管什么攻,都有一些因子选项:攻击力、防御力、伤害、攻击速度、暴击、韧性、闪避、命中……还有一些特殊的选择:反伤、吸血、吸魔、禁魔……
贪婪洞窟中的魔力流比较无敌,本人不喜欢它,那就专门说说物攻流。
同样是玩物攻的,也可分为好多种:中攻中防中血流、暴击流、低攻低防高血反伤流、闪避流、恢复流、速攻流……
要想同时满足全部的流派,是不可能的。但好在改游戏的是我,玩游戏的也是我。我当然就要按照自己的喜好来了。那我的喜好是什么?我说,我想把各种流派都玩上一遍……得,没啥改变,总之一句话:尽量满足全部的流派。
其实不管什么流派,都是由各种因子组合起来的。我们完全可以抛开流派,专注于这些因子。那么看看贪婪洞窟中的因子有哪些:
主角属性:hp、mp、物攻、物防、魔力、属性攻击、属性防御、穿透、暴击率、闪避率、hp回复、mp回复、幸运、额外黄金、额外经验。注意,hp回复、mp回复是在杀死某个怪物之后进行的单次回复,和幸运、额外黄金、额外经验一样,都不直接影响战斗过程。
主角技能(升级属性点和探险技能暂略):
主动:吸血 |
主动:治疗 |
被动:反伤 |
被动:属性攻击力增加 |
主动:格挡反伤(几率触发) |
主动:快攻 |
被动:敌流血 |
被动:弱点伤害增加 |
主动:扣血提攻 |
主动:回魔(不是吸魔) |
被动:暴击后攻击力提高(可叠加) |
被动:闪避后敌攻击力降低(可叠加) |
主动:低hp造成高伤害 |
主动:高mp造成高伤害 |
被动:对非Boss额外伤害(几率触发) |
被动:直接杀死非Boss(几率触发) |
主动:提高暴击几率及伤害 |
主动:法力护盾 |
有点蛋疼,表中一行上的两个技能只能选择其中的一个。我们得看看能不能将和自己喜欢的流派有关的技能排列到一列中。对我来说这个很难。有些技能单个看起来无所谓,但和其他方面搭配起来,就可能比较好玩。比如说扣血提攻,这里的扣血扣的是百分比,血牛肯定不喜欢这招,但贫血又容易被怪秒,但如果能够搞到较高的闪避,嘿嘿,那就有点意思了。从正面按照喜好程度获得前9个技能对我行不通,那就只能使用排除法了。
首先,我不玩魔力流,因此,将魔攻(不包括mp)相关的去除,这就包括:高mp造成高伤害、法力护盾。
物攻流对mp的需求不大,因此,可以去除:回魔(不是吸魔)。
属性攻击是附加在物理攻击上的,去除吧:属性攻击力增加。这也要求我们,如果有怪物是免疫物理攻击的,应当做出相应的调整(改掉或者删除)。
魔力流不玩、属性攻击又被去掉,那所谓的“弱点”便毫无意义,去掉:弱点伤害增加。
刷小怪技能适合于Loot流、打金流,去掉:对非Boss额外伤害、直接杀死非Boss。
治疗一般是法职技能,虽然对于恢复流、消耗流很重要,但还是去掉吧。
现在,就还剩下一个去掉的名额了,去谁呢:
主动:吸血 |
主动:治疗 |
被动:反伤 |
被动:属性攻击力增加 |
主动:格挡反伤(几率触发) |
主动:快攻 |
被动:敌流血 |
被动:弱点伤害增加 |
主动:扣血提攻 |
主动:回魔(不是吸魔) |
被动:暴击后攻击力提高(可叠加) |
被动:闪避后敌攻击力降低(可叠加) |
主动:低hp造成高伤害 |
主动:高mp造成高伤害 |
被动:对非Boss额外伤害(几率触发) |
被动:直接杀死非Boss(几率触发) |
主动:提高暴击几率及伤害 |
主动:法力护盾 |
正犹豫不定时想起还有个“物品和怪物被动技能表”。表中的都是被动技能,可以应用到物品上,而物品可被主角装备,主角也就变相地拥有了物品上的技能。换句话说,表中的技能也可被主角所用。那它们会有哪些帮助呢。
每次攻击受到50点伤害 |
攻击者受到伤害?可能是作用在主角身上的Debuf,不用理会。X |
生命偷取 |
! |
攻击有几率附带属性伤害 |
X |
攻击可能冻结敌人 |
! |
攻击可能使敌人中毒 |
! |
攻击可能使敌人燃烧 |
! |
攻击可能使敌人流血 |
! |
首次攻击必定暴击 |
! |
攻击可能使下次技能不消耗魔法值 |
X |
攻击可能提升攻击速度 |
! |
攻击可能偷取黄金 |
俺不打金。X |
攻击可能封印敌人的属性攻击力 |
! |
技能有几率施放两次 |
! |
施放技能会提升攻击力 |
! |
受到攻击可能反弹伤害 |
! |
受到攻击可能回复魔法值 |
! |
受到攻击可能回复生命值 |
! |
闪避后有几率秒杀敌人 |
对Boss肯定行不通。X |
生命值低于20%时,必定暴击 |
! |
避免一次死亡,复活后该装备被摧毁 |
! |
生命值越低攻击力越高 |
! |
受到所有属性伤害减少 |
! |
受到攻击会提升闪避率 |
! |
攻击有几率视怪物所有属性为弱点 |
! |
拾取钱袋的黄金翻倍 |
X |
攻击力 +100 |
! |
魔力 +100 |
X |
生命值 +1000 |
! |
防御 +285 |
! |
闪避率 +8 |
! |
穿透 +750 |
! |
幸运 +45 |
探险中使用。X |
显示密室所在位置 |
探险中使用。X |
使用技能后的下一次攻击伤害提高(魔力*25%) |
根据魔力提高伤害,可惜了。X |
受到的流血伤害减少 |
! |
受到的毒伤害减少 |
! |
所有技能魔法值消耗减少 |
物攻流不在乎这个。X |
受到的攻击力衰减效果降低 |
! |
有些技能看起来一样,比如吸血和生命偷取。到底是不是一样的,我们还需要研究一下。
算了,这章就先到这了。修改的问题会在以后不定期更新。下一章说说真正的破解——解密存档文件。