E+代码分析讨论
elona吧
全部回复
仅看楼主
level 11
gamegame123 楼主
虽然起了一个高大上的标题,但是楼主只是想在系列贴外开个能长期水的帖子(大雾)[乖]
因为楼主是程序小白,所以帖子性质介于(向大神)求助或者(小白们)互助。
代码的来源为E+1.62 custom,下载传送门会放到楼下 (custom自带游戏源码,文件为source.hsp但是可以用txt甚至浏览器打开)[酷]
虽然基本完全看不懂。不过楼主还是会努力在平时慢慢刷“抛砖”技能,更新一些自己看代码及相关验证的记录和疑惑。如果有其他朋友也愿意来一起研究研究自己感兴趣的部分,欢迎一起探讨哈w能从讨论中把大家的“宝石”不断引出来就实现帖子的初衷啦~[太开心]
当然,更欢迎懂程序的前辈大大们能来答疑解惑,指点楼主这样的小白们一些E学经验。[真棒]
2016年12月30日 12点12分 1
level 11
gamegame123 楼主
Elonaplus Custom作为elona衍生作品elonaplus的衍生作品,是由国外有爱的女生AnnaBannana牵头制作的。这个作品主要弥补了自原版以来,英文版elona在剧情方面的严重不足。具体的介绍我会在系列贴第三篇后单讲,这里主要是占个楼给出下载地址,方便大家获取游戏源码。
因为是个人向作品,所以更新不一定很及时。目前的版本对应1.62,因此大家下载custom后,能够看到的源码也是1.62版本的。后续版本对源码的变动还是要等新的custom版本或者保持关注贴吧的最新帖子啦。
2016年12月30日 12点12分 2
鉴于贴吧无法编辑帖子,本楼从今往后只放次级索引。请小伙伴们(跳过旧回复)沿着次级索引查看最新信息,以次级索引内链接内容为当前最新版本。[勉强]
2017年04月22日 05点04分
46L 【反编译次级索引】反编译,再编译,魔改相关内容。
2017年04月22日 07点04分
47L 【代码研究次级索引】代码研究相关内容,欢迎小伙伴们[乖]一起讨论。
2017年04月22日 07点04分
48L 【Snack-ME研究次级索引】关于Elosnack和Elona Me的基础与应用[酷]
2017年04月22日 07点04分
level 11
gamegame123 楼主
于是先简单开个头好了。
【经验计算公式】
因为最近比较关注几个采集技能的成长,所以查了查相关的代码。
目前分析出的情况是:
经验子程序:#deffunc skillexp int prm_623, int prm_624, int prm_625, int prm_626, int prm_627
其中623 对应技能/属性/魔法编号,624未知,625对应经验增长。
比如在每次采集后,程序都会执行:
skillexp 180, 0, 50
意思就是编号为180 的技能获得 50 初始经验
然后这个50初始经验就要通过 skillexp子程序来做修正。
首先会做一个var_82(0, prm_623) != 0 的判定 (没看懂w),如果成立则经验减半
然后是重点:
实际经验=初始经验*潜能/(100+等级*10)
如果技能编号处于10-19之间,且var_57(270 + prm_623 - 10, prm_624) > 0 成立
那么实际经验还要再次修正
实际经验2=实际经验*(100+var_57(270 + prm_623 - 10, prm_624))/100
如果算到这里的实际经验=0,那么会有一定几率调整为1(概率近似10/等级)
然后就是奖励经验的计算。有一定几率根据学习技能来获得一个2-5倍的经验加成。这部分以后再说w
2016年12月30日 12点12分 3
var82那个判定没记错的话,是技能对应的属性获得1/2的经验。 var82(0,a)代表的是a的var82里面的第一个数值,就是技能对应的属性。 应该是这样的……农农酱生病只能卧床要明天才能去开电脑
2016年12月30日 13点12分
@农农酱 原来如此,我再研究看看到时候把问题集中起来一起问好了。祝农农酱早日康复。[委屈]
2016年12月30日 13点12分
临时标签:测试环境V1.62 custom
2017年01月07日 10点01分
var_57是成长期buff,这段代码是结算成长期加成的,以此类推prm_624是人物编号
2017年01月18日 02点01分
level 11
gamegame123 楼主
【经验计算公式-测试】
126级的技能(基因工程,下同),56%潜力做测试。(学习技能超过1000,奖励经验固定为5倍)
理论上是50*56/(100+126*10)=2.05经验,实际获得2经验,奖励经验时实际获得10经验。
6级技能,其他条件不变。
理论获得17.5经验,实际获得18经验,奖励时获得90经验。
10级技能,其他条件不变。
理论获得14经验,实际获得14经验,奖励时获得70经验。
12级技能,其他条件不变。
理论获得12.7经验,实际获得13经验,奖励时获得65经验。
【结论】
1 公式确实成立,地方找对了。
2 此处取整非向下取整,而是采用四舍五入取整。
3 从初始经验到实际经验会进行一次取整,奖励经验时采取取整后的实际经验。
大概就是这样啦[勉强]
2016年12月30日 12点12分 4
level 1
啊…如果有什么不明白的地方 我想我可以提供一些帮助
2016年12月30日 13点12分 5
啊,大神粗线不胜惶恐,顿时感到前路一片光明www谢谢农农酱啦~[笑眼]
2016年12月30日 13点12分
说起来很多子程序里都会冒出类似var_245 = 1 + ("" != "") + ("" != "") + ...这样的语句,后面接着随机数,请问这里的("" != "")代表什么呢?
2016年12月30日 13点12分
@gamegame123 那一整段的意思是在下面显示某些字
2016年12月30日 13点12分
@gamegame123 [太开心]说起来你用不用qq的呀
2016年12月30日 13点12分
level 7
前排
留个名[haha][勉强][茶杯]
程序国内下载不下来
先mark等开学没(上)事(课)再看[滑稽]
2016年12月30日 14点12分 6
[haha]欢迎,等你哦
2016年12月30日 14点12分
level 7
话说这引擎是日本的,中文版使用手册估计没有吧[狂汗],难道要肯英文?
2016年12月30日 14点12分 7
其实只有日文,作者菌能出英文已经很了不得了,虽然英化完成度很低w
2016年12月30日 14点12分
level 1
百度搜索elona反编译 能找到反编译与编译elona的教程 这样的话就可以获取到最新的代码而且可以魔改代码进行测试了[太开心]
2016年12月30日 14点12分 8
黑科技get√ 感谢指点,帮大忙了。[真棒]
2016年12月30日 14点12分
level 1
常用的变量的含义
var_81(A, B)B单位的A技能等级
var_83(A, B)B技能的var_83中的第A+1个数值
注var_83的五个数值分别为:技能对应的属性、技能的类别、技能的消耗、技能的对象、魔法的难易度
var_243施术者
var_244受术者
注0代表PC,1-15代表PC的宠物
var_57(A, B)B单位的编号为A的数值
比如38为等级、34为名声、35为经验、36为升级所需要的经验、70为PV、71为DV……
2016年12月31日 04点12分 10
灰常感谢,看来我也需要建个备忘录了[乖]
2016年12月31日 11点12分
level 1
常用的函数的含义
与技能经验有关的函数skillexp
skillexp 获得经验的技能, 获得经验的单位, 原始经验, 与对应属性经验的获得有关的系数, 与升级经验获得有关的系数
与物理伤害计算有关的函数calcattackdmg
与物理攻击命中有关的函数calcattackhit
检查某BUFF是否存在的函数findbuff
计算BUFF效果的函数calcbuff
与伤害有关的函数dmghp
dmghp 受到伤害的单位, 原始伤害, 伤害的施加者, 伤害的属性, 与异常相关的数值
2016年12月31日 04点12分 11
level 11
gamegame123 楼主
【自家NPC招募相关】
最近被提醒到自家可以多招募魔法店方便刷药水和卷轴,于是涉及到如何多招同类型店的问题。
招募的代码位置大概在:
txt_select lang("誰を雇用する?", "Who do you want to hire ....
这行附近,大致看了下,发现看不懂。
所以果断GOOGLE求解。大概机翻后的理解是:
首先回执行10次循环,每次循环中,
1 根据当前日与某参数A生成一个随机数
2 根据1 50%的概率生成
3 第一次循环生成女仆,后面的循环生成随机职业
4 再次重复步骤1,重新随机
5 根据4生成一个店主,规模为1-15。 (武器店,杂货店,魔法店,万事屋,武器店,黑店六选一)
6 如果存在同名NPC,则消除该生成店主(重要!)
参数A在某个时间段,是固定的。于是很多在游戏中的现象就好解释了。
1 如果直接S/L告示牌,招募列表基本不变。(因为参数A固定)
2 S/L的时候经常是某个角色会变动职业,但是只是在两种职业中来回生成。(与步骤2相关)
3 日期变动,招募列表也会有变动,天数过的越多变动越大。(参考步骤1)
于是,想要全魔法店,全女店主之类的朋友,我们应该怎么做呢?
1 《确保你的当前日招募列表中存在你想要的店主类型。》
具体方法是,每天看看告示牌招募列表,如果有一天出现 女性魔法店主,OK,恭喜你已经成功了一大半。
(如果等不及也可以用Eloname修改日(day),注意修改月和年是没用的,只改日就可以,改一下翻一下告示牌,直到生成理想类型为止。

2 《招募需要的店主,然后i键干涉他/她改个名字。》
这步十分重要,很多玩家就是栽在这步。所以经常抱怨:为什么我招不到第2个魔法店...我最多只能招到N个(N<3,N<4)之类。如果你招了人后立马改名,再看告示牌就会发现完全一样的店主还在招募列表里待着。所以还能继续招,继续改名。以此循环往复。
至于为什么必须改名,其实可以参考步骤6。因为我们说某段时间内参数A是固定的,所以如果当前日会生成某类型店主,那么该店主的名称也是由这个固定的参数A决定,因此名称必然相同。如果不改名,那么根据步骤6,生成的店主会被chara_vanquish消除,于是在招募列表就看不到了,让玩家误以为该类店主无法再生成。
以上便是招募同类店主的具体办法,亲测有效。最后,祝各位刷刷刷刷刷!
(附个人成果,眼熟的话悄悄握个手[滑稽]
2017年01月03日 17点01分 12
目前是4魔法2杂货1黑店1女仆,感觉比之前1魔法店高了整整一个华莱士的水平![真棒]
2017年01月03日 17点01分
参考:http://jbbs[乖].shitara[乖]ba.net/bbs/read_archive.cgi/game/45610/1323020174/
2017年01月03日 17点01分
[惊哭]!!!解开了我好几个月的疑惑!!太可怕了!一定要顶上!
2017年01月08日 10点01分
level 11
gamegame123 楼主
感谢 @农农酱 10L的指点。
目前已把相关属性技能魔法等数据整理完毕。
源码版本:V1.64
下载地址见楼中楼。
2017年01月07日 10点01分 13
唉,以后用统一下载地址 :https://pan.baidu.com/s/1bpqr5H9 好了。 00代码相关-Uncoded170107.xlsx
2017年01月07日 10点01分
level 11
gamegame123 楼主
【魔法消耗】
源码版本:V1.64
测试环境:1.62Custom
本来是想找幸运神魔法学校的,但是没找到,就拿这个先练手了。
另外今后统一注明版本,因为发现版本不同,源码的变量编号也会变...
魔法消耗子程序:#defcfunc calcspellcostmp int prm_987, int prm_988
987代表魔法编号(编号对应魔法,基础消耗资料见楼上),988代表施放角色(0为PC)
(a) 如果是PC施放魔法,那么魔法消耗为:
INT((INT(基础消耗*(100+魔法等级*3)/100)+INT(魔法等级/8))*0.9)
另外,Oracle ,Resurrection,Door Creation ,Wall Creation ,Teleport Other ,Teleport,Short Teleport以及Gravity 8个魔法直接取基础消耗不参与上式计算。
(b) 如果是非玩家施放魔法,那么魔法消耗为:
INT(基础消耗*(50+角色等级*3)/100)
最后,如果施放角色职业为法师,那么最终消耗*0.9后取整。
就是这样了。
P.S.1. 这里贴吧魔法表V1.53那个版本写的是咏唱等级,实际上是错的,应该是角色等级。
P.S.2. 魔法风暴84级时消耗可达150,因为神谕固定消耗150,也就是说之后拿魔法风暴刷经验更好。
2017年01月07日 14点01分 14
参考: 魔法消耗 http://elona.wikia.com/wiki/Spells_(Elona%2B)/Technical
2017年01月07日 14点01分
2017年01月07日 14点01分
参考 贴吧 elona%2B魔法%26技能%26bit表V1.53
2017年01月07日 14点01分
魔法提供的经验是根据基础消耗而不是实际消耗的吧
2017年01月08日 02点01分
level 11
gamegame123 楼主
【库存消耗】
源码版本:V1.64
测试环境:1.62Custom
本来可以接上楼,鉴于贴吧的坑人机制,所以拆成两部分。其实在代码里两者就是连在一起的。
库存消耗子程序:#defcfunc calcspellcoststock int prm_989, int prm_990
989代表魔法编号,990代表施放角色 (话说回来除了PC外其他人还有哪门子的库存呀...)
库存消耗a=INT(基础消耗*200/(魔法等级*3+100))
然后如果 库存消耗a< INT(基础消耗/5), 那么修正为INT(基础消耗/5)
接下来,
库存消耗b=(1 到 库存消耗a/6 之间的一个随机整数)+INT(库存消耗a/6)
如果库存消耗b小于1,那么修正为1。
综上,魔法等级达到300级后,库存消耗a达到下限,下限为基础消耗/5
此时施放一个魔法,需要消费的库存为 基础消耗/30 到 基础消耗/15 之间的一个随机整数。
呃,换句话说...这时候基本上大部分魔法就是1点消耗,没几个魔法能耗到5的...
即使是陨石魔法每次消耗的库存也不过是8-15而已...
(原谅楼主智商感人...同一段内容修改3遍才搞定...)
放个300级预测截图聊表歉意...[委屈]
漏了几个没截上图,不过没关系以后会直接给出文件的。
2017年01月08日 01点01分 17
虽然还是没找到魔法学校,但是楼主还是决定将大喵神当成长期信仰了。即使1.63没有增强我大喵神,但几条鱼就能回满体力的诱惑实在太大...([泪]第三遍...)
2017年01月08日 01点01分
@gamegame123 幸运神魔法学校是啥……?
2017年01月08日 02点01分
@农农酱 艾赫卡托尔流魔术,官方英译是:Ehekatl school of magic[乖]
2017年01月08日 02点01分
@gamegame123 指的是……?
2017年01月08日 04点01分
level 11
gamegame123 楼主
诶,我也是傻了。魔法学校就在使用calcspellcostmp函数的后面。
效果是将魔法消耗变为 2 到 2+int(实际消耗*1.4) 之间的一个整数。
也就是说如果原来计算后的实际消耗很大,那么随机后的修正消耗就可以非常小。当然也可能非常大。
但平均期望在实际消耗的0.7倍,所以感觉上就经常是消耗变少而不是变多。
不过又查到的一个问题是,库存消耗那里按照公式计算后如果结果大于1的数A,那么程序里给出的结果是A-1
假如400级支配库存消耗是5-9,那么实际测试库存消耗就是4-8,费解啊。[委屈]
当然像1-1这样的自然是实测1-1了。
虽然不太明白,不过不管了。[乖]
2017年01月09日 11点01分 18
@csjy0000 找到了[太开心]
2017年01月09日 11点01分
@gamegame123 多谢[大拇指]
2017年01月10日 04点01分
因为rnd(x)的范围是0到x-1呀...
2017年01月10日 04点01分
@农农酱 感谢指点,我傻了,之前明明还看到过这一点了,竟然忘了w[委屈]
2017年01月10日 06点01分
1 2 3 4 5 6 尾页