elona吧 关注:76,082贴子:1,131,136

回复:E+代码分析讨论

取消只看楼主收藏回复

接着上楼说,由于魔法杖类基本只有攻击治愈和加速/减速(还有非战斗类的魔力杖),BUFF类普遍集中在药水。
因此在魔法大成前,以上都是比较值得期待的姿势,同时BUFF药水也多少能为强力队友锦上添花吧。
因此这么想的话,距离魔道具邪道杀神,LZ目前只剩下最后200级的魔道具升级了嘛...如果稍微认真刷刷的话...咳咳
然后是邪道杀神法2,栗子杀神。
这个无论是上面那个帖子还是某个精华帖都有提到。为此楼主在一两个月前还专门研究了一下囤积栗子的姿势。
不过在实用之前还是要稍微看一下相关代码公式,毕竟很多数据精华都神隐了想要多学一门手艺也只能自力更生了...
最后是邪道杀神法3,咒酒杀神。
也是帖子里面提到的,非常imba。比起楼主在系列贴2里面咒酒杀中位神。利用速度差异加快进度无疑是省时省力的好办法。
需要研究的代码是,厌食症中吃到饭团,以及噎死(好像是1/3?)的概率,毕竟之前亲测半小时直接吐死都刷不出饭团,所以不确认下的话感觉还是有点虚。
咒酒噎死是目前最好的邪道,基本上LZ已经满足了全部条件。所以里神武什么的,LZ表示近日有机会的话就不客气的笑纳了。
于是LZ漫漫屠神路系列就此半路太监...(大雾)
诶,其实这么执着于邪道杀神,主要还是希望提前拿里神武啦。LZ还是会继续养成角色,有朝一日正面肛神,走进千级觉醒新时代的~


IP属地:湖南30楼2017-01-19 10:12
回复
    【食物系统初探】1
    源码版本:V1.64
    测试环境:1.62Custom
    考虑到参数编号因版本而变化,本次解析不太好设置定位行,因为基本上每句代码都和编号有关...
    大致定位从 if ( ibit(18, var_522) == 1 ) { 开始,进入药草套餐的效果代码。
    由于食物种类很多,这里只给出重要道具的解析,其他道具相关代码将暂以[未整理]处理。
    那么开始正文。
    程序跳转 *label_1936 后。先赋值 var_244 = var_243 ,两者皆指代(吃食物的)角色。
    然后声明一个哑变量数组var_1377(10行两列,默认0),用于储存食物营养效果。
    var_1378代表饱食度。默认2500,如果是货物,那么默认5000。(问题是货物能吃?)
    不过没关系,这些变量大多都会随具体情况而重新赋值。
    接下来是各种情况的处理,同层判定会以同类型编号处理,从(01)开始。
    (01) 首先是(混入药物)←即药草套餐 的处理。
    对于PC是八维+速度经验+800
    对于宠物是八维+速度经验+8000
    (02) 然后是对一般各类食物的基本营养处理。
    基本规则是,每类食物会对几项属性有20-50不等的基本经验增加,我们称之为营养(Nutrition)。
    然后对于个别类食物,附加值(就是食物后面的+1,+4,+9这样的,类似武器强化)也会增加到相应经验上。
    对此,WIKI已经做了非常详细的整理:
    http://elona.wikia.com/wiki/Food/Technical
    LZ就不再特意重复一个中文版了。
    那么怎么看这个表呢?比如水果(Fruit)这项,
    是感知(PER)+30,魔力(MAG)+50,魅力(CHR)+20经验。
    30和50下面有(PV),就表示附加值会加到这个经验上面。
    而20下面没有(PV),那就是说附加值不会影响这个经验。
    比如柠檬+5, 就是35感知,55魔力,20魅力。
    而基本饱食度(Satiation)就是最后一列,比如水果就是1500,而鱼是3000。
    食物种类有8大类,基本经验只取决于种类,与具体食物编号无关。
    比如鲸鱼和蝌蚪,虽然卖价差别极大,但是作为同类食物,他们的基本营养是相同的。
    (03) 接下来是根据食物料理等级来对营养做修正。
    修正饱食度=基础饱食度*(100+料理等级*15)/100
    如果料理等级<3, 那么 修正营养=基础营养/2
    否则 修正营养=基础营养*(50+料理等级*20)/100
    当然,理论上如果 基础营养 为负值,会有另一套计算公式,因为实际碰不到,所以这里就略过了。
    料理等级共分9级,未料理算0级。
    (04) 如果角色是PC的话,会根据不同食物输出不同提示。
    基本上,料理等级越高,评价也会越好。吃到生的或腐败的东西也会分情况提示。
    宠物基本上只有吃到生的食物会给出“一脸痛苦”的提示。
    (05) 然后是各类药草的处理
    具体数值还是见WIKI的整理表。有(G)的表示会加潜力。
    这里需要说明的是箭毒草加潜力和其他药草不同。
    其他加潜力的药草都是+40潜力,而箭毒草虽然每项都加,但是只加1。(多到让人无言以对)
    (06) PC吃到腐烂食物又没有相应特殊能力的话,此时八维营养(经验)全部减100
    (07) PC如果有相应变异特征(喜好人肉),那么吃非人肉时饱食度修正为2/3倍。
    如果没有相应特征,那么吃人肉后会受到一些负面影响,但同时也有1/5的概率获得该变异特征。
    (08) 接下来是对于各种特殊尸体的处理(如果晒成肉干的话只有1/3几率触发)。
    特殊肉的效果在Wiki有总结,这里灰常复杂,所以楼主就只Mark个位置不整理了。
    需要强调的是:所有尸体的特殊营养,都不参与后续计算。
    比如快可灵系列的2000速度经验,是不会因为(09)中饱食度的影响而有损失。
    当然,之前(03)中料理等级对营养的修正显然也不适用于此处。
    还有,宠物在此处获取的经验是PC的4倍。比如2000速度经验在这里变为8000速度经验。
    (09) 最后就是把营养通过 skillexp 换算成经验了。
    对于PC,默认100%将营养转化为经验。
    但是如果饱食度>=5000时(非饥饿状态),那么转化率将修正为:
    转换率=100/(100+A),其中A的计算公式为:A=(饱食度-5000)/25
    对于宠物,默认转化率为1500%。
    但是如果材质是生的(35),且已经腐烂。那么转换率减少为500%。
    (10) 祝福的食物饱食度*1.5,诅咒的食物饱食度*0.5
    如果此时饱食度>=3000,那么角色会有1/10的概率增重。
    肉干的饱食度*0.5,且下限为1000,上限为3000
    然后修正完毕的饱食度会累加到当前角色的饱食状态中(Fullness),上限为15000。
    (11) 对于PC,吃到3级及以上料理时,会恢复 附加值*1.5+料理等级 的SP。
    这个恢复量上限为31,下限为3。
    以上便是最基础的食物系统解析。
    简要总结:想直接看基本结论的可以参考 p/4340352641 美食学。
    根据上述解析,几个附加补充是
    <1> 一般食物的修正值基本没啥软用。
    比如+10的修正值,不过强化了相应属性10点经验而已。
    至于回的那些SP,一顿吃饱了不知道下次再回要到什么时候。远不如其他办法。
    <2> 一般食物基本没啥软用。好吧这个结论有点快,我们稍微分析一下。
    对于宠物而言,箭毒草药草套餐,其为八维+速度每项提供的经验为:
    8000+100*15=9500。9项共计:9500*9=85500经验
    而与此相对,一般食物最多单项只能提供50*(50+9*20)/100*15=1725点经验。
    按照平均3项来算,不过是1725*3=5175点经验。(实际可能还并没有这么多)
    那么也就是说,将近16+个一般食物才顶的上一颗草。
    先不说成长的速度,但就是多喂了16倍次数,就够麻烦的。
    对于PC而言,300点经验和的最高等一般食物,似乎也就是几次哑铃(快进不到一秒)的事情...
    因此,别纠结一般食物了。PC哪怕顿顿吃旅粮也不会弱到哪里去。
    留着纠结食物的心,干点其他啥都是好的。
    宠物就是一辈子的灵草套餐,省心,更省力。
    <3> 食物不需要祝福,除非你特别想增重。
    祝福的食物并不加影响,只加饱食度。这意味着同样时间反而能吃的东西更少了。
    更可怕的是...诅咒的药草套餐加成并不会有任何损失。
    只要你能习惯宠物一直吐啊吐的,那么这种方式的进食效率是最高的...(虽然楼主不会这样虐待喵神啦)
    <4> 只要到最轻程度的饥饿状态就可进食,否则就算拖到快饿死也不会有更多收益的。
    <5> 虽然食物没啥用,但是你一定想靠吃锻炼的话,请尽量做成高等料理。
    当然也不用太纠结。因为对7-9级的料理,同等饱食度所能提供的营养基本上已经差不了多少了。
    <6> 还有食物卖价和食物营养是两回事,贵的不代表好的。所以料理最主要的用途是提价卖钱。


    IP属地:湖南32楼2017-01-21 11:23
    收起回复
      2025-05-25 04:04:15
      广告
      【食物系统初探】2
      源码版本:V1.64
      测试环境:1.62Custom
      接下来终于到楼主真正想研究的内容了。我们接着32L说。
      (12) 如果进食角色是大妖精(收获神神仆),那么吃到饱食度4000以上食物后,会吐出1-3个种子。
      【未整理】
      (13) 如果进食角色是白金鹅(财富神神仆),那么吃到饱食度5000以上食物后,会吐出1枚白金币。(好弱...)
      【未整理】
      (14) 如果食物是小妹妹的肉,那么会做两次随机判定。
      生命力和法力分别有 2000/相应裸装等级^2的概率 +1点。
      同时所有技能潜力加1-10%
      这相当于,33生命力以前,每吃1块肉必增1点生命力。(对于贫血种族)
      100生命力时,1块肉大概有20%的概率增加生命力。(对于一般种族)
      500生命力时,1块肉大概有0.8%的概率增加生命力。(食用极限)
      于是好羡慕死灵神的天生500法力啊...
      (15) 如果食物是手制巧克力,那么会回一定的HPMP和SP。还可能会根据类型附加一些BUFF。
      【未整理】
      (16) 一些加属性的食物,无视潜力(skillmod)增加固定经验。
      镜饼,幸运经验固定+2000。(即2点属性,下同)
      兔子的尾巴, 幸运经验固定+1000。
      幸运苹果, 幸运经验固定+20000。
      英雄奶酪,生命力固定+3000。
      魔法果,法力固定+3000。
      (17) 如果食物是伊斯烧,1/5概率增加幻惑抗性,增加5-14点San值。
      (18) 如果食物是库莱姆莓,增加1-10点San值。
      (19) 如果食物是幸运饼干,那么会给出一些小贴士。
      祝福的是真的,未祝福的是假的。
      (20) 如果食物是妹妹的爱心便当,-30San值。
      (21) 如果食物是特制深海便当,会增加2500强度的超再生和500强度的再生BUFF,恢复1/8 HP,以及增加50回合的湿身状态。
      (22) 如果食物是玉手便当,那么:
      祝福状态增加年龄1000-2999岁,普通状态增加年龄100-299岁,诅咒状态增加年龄10-29岁。
      (23) 如果食物是逆玉手便当,那么:
      祝福状态变为0岁,普通状态变为6岁,诅咒状态变为10岁。
      (24) 如果食物是不可思议国度的蘑菇汤,那么:
      身高变为当前身高与150cm的中间值,体重变为当前体重与40KG的中间值。(兵长化!)
      (25) 如果食物是禁忌的肉块。那么角色的显示性别会随之反转。
      祝福状态正常反转,一般状态问号反转(伪娘这种),诅咒状态就是双性和无性两者切换。
      附加一句。只有PC使用该食物才会真正从数据层面[cdata]反转性别。
      对于宠物只是文字显示反转,实际性别还是未变。有点类似携带Y染色体的大姐姐这样的感觉。
      (26) 如果食物有毒(bit),那么进食角色会扣血。送给别人吃的话视情况-善恶1点。
      (27) 如果食物加了春天的药(bit),那么PC会表示兴奋,其他人则有可能生产蛋或奶,PC善恶-10。
      同时好感在100以下时,会执行modimp程序提高30点好感。(modimp类似skillexp,会对30做修正)
      【未整理】
      (28) 如果PC食用了面包系食物或者内裤,那么在gdata相应位置或累加食用次数记录。
      (29) 将食物(装备)中的附魔转换为相应BUFF或属性追加,其中:
      <吸收攻击对象体力>:恢复rnd(强度/50+1)+1的SP。
      <吸收攻击对象魔力>:恢复(rnd(强度/25+1)+1)/5的MP。
      <终结一切>: 执行 evadd 18, var_243
      <偶尔时停>:产生int(强度/100)+2回合的时停。
      <属性增加>:调用skillexp,相应属性增加(INT(强度/50)+1)*100*A经验。
      若进食角色为PC,则A=1,否则A=6。
      这里简单说明一下,属性增加的INT(强度/50)+1就是装备上显示的增加量。
      比如吃掉一个+1200力量的装备,可以为PC提供120000经验。
      可以对400潜力,500力量的PC提供9点属性的提升,1000力量的PC提供4点。
      其实也没有想象中辣么多对不对。
      所以当说明这个方法同样可以为生命力法力速度幸运带来经验的时候,楼主的内心毫无波动。
      <属性维持>(适用八维+速度):增加2000回合的属性成长期,成长幅度为(INT(强度/50)+1)*5*A
      若进食角色为PC,则A=1,否则A=3。
      根据28L 【经验获取完整版】,此处获得的成长幅度(可通过c键查看BUFF获知)即(05)<i>中的正整数m。
      属性维持还是蛮吸引人的,中后期值得好好利用。
      rnd(A)代表0到A-1的随机整数,具体强度可以通过Elona ME查看。
      幸运够高时,生成装备的附魔强度普遍也会提高。
      (30) 最后,如果食物是祝福状态,那么进入一个幸运日的判定。【未整理】
      以上,便是食物系统的进阶解析。
      由于相应分析以列举在条目中,这里就不再赘述啦。


      IP属地:湖南34楼2017-01-21 13:06
      收起回复
        关于汉化版1.63 Elona Me 无法锁定角色名称问题的解决
        汉化版Me无法提供角色姓名的锁定貌似是个老问题了。
        这两天想制作一份Elona Custom 1.62的Me文件,也是遇到同样问题。
        然而E+原版1.62(对应ME1.44)就完全没事儿,
        甚至可以说任意版本编号的E+原版都可以用同样的Me文件。
        这就不禁让人怀疑是由于第三方再编译所导致的指针变动。
        因而每个不同版本的中文版,或者是英文的Elona Custom,都要随每个版本的变动而重新更正指针。
        改就改嘛,其他都还好说,唯有角色姓名这一个指针是无法用传统办法通过CE锁定的。
        哪怕用类似修改其他指针的办法找到PC姓名(0号角色)的基址,也会发现往后的角色姓名根本对不上号。
        稍微看了一下这段内存,发现问题源于两点:
        一是内存里面储存姓名等信息的顺序,其实和cdatan的排列顺序正好相反。(即倒序排列)
        二是内存中,0号角色和1号角色完全不相连。0号角色处于段落的开头,1号角色却正好处于段落结尾。
        当然,第二点属于猜测,因为0号角色姓名的地址比1号小非常多。(偏移量为十进制660624)
        如果假设第二点是成立的,那么显然我们只要在ME中修改两处,就可以完成所有非PC角色的姓名查找:

        1 将N值偏移从880改为-880。实现倒序排列。
        2 修改OFFSET为 660624+880=661504。这个修改是我们从倒序逆推一个虚拟的0号角色地址(正好在1号角色后面一个位置),以这个值作为cdatan变量的基址指针。那么这个虚拟基址与实际基址(即0号角色姓名的虚拟位置和实际位置)之差就是上面的计算结果。
        OK,放到1.63汉化版里测试一下,结果可行。队友,冒险者,以及当前地图的其他角色姓名都可以正常显示。
        可以认为改进是成功的。
        @剑牛黑猫控 大大如果感兴趣不妨参考一下哈~
        另外我顺便放了份改好的 Skills.yas 及 States.yas 在 00代码相关 里。大家有需要欢迎自取。


        IP属地:湖南35楼2017-01-23 08:58
        收起回复
          【今天的我,开始魔改】
          呃,以前憋着不改主要是想多感受E+原版风格。然后摸鱼了两个多月后,忽然感觉魔改起来没什么包袱了。
          个人魔改的风格类似E+ custom,仅仅是为了节省游戏外时间,所以游戏内做不到的不会改。
          好哒,那么第一个魔改点就是重要累积型道具名称了。
          (广告,E+ Custom: https://tieba.baidu.com/p/5065908293
          (0)由于自己反编译的hsp可能存在一些莫名BUG,休整起来很麻烦(主要很难保证完全无隐患),所以直接用的网上的1.66反编译文件:http://elona.wikia.com/wiki/Thread:22264 中搜索 Here it is, 1.66.3 Hotfix 1 on
          (1)找个文字编写软件打开source.hsp.然后对照游戏中的名字在程序中的道具名前加特殊符号。
          比如我们想给丰收书魔法书加标记。那么对照游戏,搜索: harvest"
          最后加上" 是因为harvest后面没有文字,加上可以帮助减少搜索范围。(不加也可以,只要找对就行)
          如果找对位置的话,那么应该是类似下面这样的结构:

          (2)我们在英文名harvest前面加上五个实心方块:■■■■■
          后,就相当于做好标记了。其他重要道具类同,结果如下:

          次一等的重要道具可以用不同类别的特殊符号表示,比如:

          (3)改好后保存,然后编译hsp就可以把执行文件放到游戏主目录运行了。效果如下:

          这样的话,以后再从商店里买重要道具就很方便了,扫一眼过去把有标记的全部买下,连名字都不用看,也不用担心会漏掉。地城的随机掉落收集起来也会因此方便一些。


          IP属地:湖南37楼2017-04-12 02:08
          回复
            丧心病狂水

            配合喵神和黑天使用春雨太太的美图扣了一些立绘和头像。
            从边缘的仔细程度可以看出楼主对两者喜爱程度的差别(好吧其实都是 随便乱扣的...)
            为了达到最佳效果,以后分辨率统一用1152*760了。

            每位有5-6张,预览图就不放了。文件放在 美化素材/队友素材 里。


            IP属地:湖南41楼2017-04-13 18:54
            收起回复
              诶,简单做个临时小记录吧。
              1.66更新有个最大坑爹的地方就是稀有道具击杀掉落的模式改变了。
              The equipment that NPCs spawn with and rare drops that have a 1/100 chance of getting generated or less now have 5-20 times the rate of getting generated. However, there is a trigger that decides if they will get generated, and this has a 1/4 chance of being turned on at the start of each day. Once [a rare piece of artifact equipment or rare drop] spawns, this trigger is turned off. These items will never drop/spawn when the trigger is off.
              虽然本身掉率上升,但是受FLAG控制。一旦掉落后FLAG置0当天就再也不可能掉落了。
              刚才看了下代码,发现...几乎所有的稀有击杀掉落都TM被同一个FLAG控制!同一个!
              ....也就是说你要是不小心刷出了个兔子尾巴...呵呵,那你真是走运了...
              基本上这段时间下面这一串道具就同时跟你绝缘了:
              库米罗妮的秘密经验
              再构造宝玉
              《封印·骑士盾》
              《地龙棍》
              《精灵手甲》
              《新巴拉利亚的头》
              星芒光笔
              《常春藤刺》
              被原爆杀死的狮子
              《席娜的内裤》
              《乞丐的项链》
              《梦魇》
              《香草石》
              《落椿》
              《红凛》
              《黄金·大葱》
              《大剑》
              《双刃》
              《弩张》
              《GAU-17 Minigun 改》
              《新星·手榴弹》
              《卡尔内阿德斯之板》
              《英雄的披风》
              《辉月之光》
              《Eagle&Lion》
              《杀人Joker》
              《深渊》
              《斩铁剑》
              《HL-KRSW》
              《鬼之短裤》
              《离子环刃》
              幸福床
              《迷之贝》
              进化药水
              而FLAG重新置100的概率是25%(每天判定一次),更令人发指的是即使重新置100了,第二天仍然有75%的概率重新置0。没错,也就是说每天FLAG开不开的概率都是单算的,不会因为等了好几天后FLAG打开的概率就会有任何提高...
              所以,这个改动的最终效果是...每天有1/4的概率,大伙可以从上面所有击杀道具中看脸碰到相应怪物,再反复击杀杀看脸获得一件,同时也就仅此一件了。剩下3/4的概率,把脸洗蜕皮也是什么都没有的...
              那么问题来了,你知道当天你的概率是那1/4还是3/4吗?
              唉,这个变量的地址是 gdata(250 + 347),也就是说用ME的PLAYER表里,偏移量597*4=2388就是。
              开的时候是100,关的时候是0。
              如果锁定成100呢...
              咳咳,总之我怀疑这个坑爹变动后续版本还会改,如果真不改...那么楼主也就只能帮大家到这里了...


              IP属地:湖南42楼2017-04-14 10:40
              收起回复
                【魔改-修改任务生成概率】
                众所周知,E+中期开始PC的成长取决于技能,而技能的潜力几乎取决于白金币(以及少数稀有道具)。
                白金币的主流获取途径,除了邪道降速外,主要靠任务获取。
                那么高效刷任务获取白金币,就是补偿木桶短板的最有效途径。
                本次魔改的目标有二:
                1 降低费时任务的生成概率
                2 提高省时任务的生成概率
                修改前,我们需要先了解任务的类型(编号及代码)
                编号 代码 中文
                1001 HUNT 清理森林
                1002 DELIVER 运送物品
                1003 COOK 料理系列
                1004 SUPPLY 上交礼物
                1005 - -
                1006 HARVEST 收获农作
                1007 ESCORT 护卫系列
                1008 CONQUER 讨伐单一怪
                1009 PARTY 演奏系列
                1010 HUNTEX 危机群体怪
                1011 COLLECT 上交物品
                在上述任务中:
                1001 清理森林难度低,配合宠物+影步很好做。只是白金币奖励少。
                1008 讨伐单一怪限定声望>50000才触发,配合空间垂钓是最好做白金币奖励也最多的任务。
                1004 上交礼物很多是送块矿石当礼物,很好做。
                1011 上交物品与1004的区别是物品已存在于某另一NPC手里,可偷可换。也很好做。
                1010 危机群体怪限定声望>30000才触发,由于中期开始怪物实力整体增加很大,比较费时,不推荐。
                1009 演奏任务游戏耗时长,新版有修正(可不用等到最后直接离开),但还是不够效率。
                1006 收获农作类似演奏,游戏耗时长,不够效率。
                1003 料理系列,手头有材料就好做,没有就懵逼。但综合考虑还是有些费脑子,最好减少。
                1002 运送物品,就是坑爹,坚决抵制。
                1007 护卫系列,更是坑爹,果断取缔。
                1005 这个任务类型是不存在的
                综上,大幅提高 讨伐单一怪 概率;大幅减少 料理,运送,护卫 概率。即可达成目的。
                具体的改法是: 搜索 qdata(3, 这个变量代表任务类型

                找到那些对该变量赋值的语句,这些就是在生成任务时,定义新任务类型的位置。
                那么往前看 IF 这里,就是对条件进行判定的地方。
                任务生成是看概率的,所以频繁用到rnd(x)==0这个条件。
                这个条件的意思是:有1/X(X为正整数)的概率,满足判定条件。
                所以,把X改小,就相当于增加了该任务的生成概率,反之亦然。
                任务类型是逐个判定,如果上个任务类型不满足条件,那么跳到下一个任务类型继续判定。
                如果都不满足,那就定义为 1002 运送任务 兜底。
                所以不要只把任务概率改低,有的也要改高,不然就是满屏的运送任务。

                楼主这里的改法是把该提高的提高到5倍概率,该降低的降低到1/10概率。
                多一个1/14提升到1/7的上交物品任务,不过影响不大。
                最终效果如下图所示:


                可以看出Challenge(讨伐单一怪) 任务明显升高,相应该降低的任务也有降低。
                冒出很多Party演奏任务是因为楼主看的王城告示板,天生有演奏任务概率加成(rnd(2)=0)。
                换到其他城就更加正常了~


                IP属地:湖南43楼2017-04-15 07:33
                回复
                  2025-05-25 03:58:15
                  广告
                  丧心病狂水2.0

                  由于晴天娃娃性别是♂,考虑再三...还是我家素素最有气质。
                  布偶也是娃娃,陨石术就是素素的大绝“怒火烧尽九重天”,简直毫无违和嗯嗯。

                  素素辣么萌,LZ抠图都扣得更有精神了!哈哈
                  可惜木有配套行走图,只好自己搞了个静态的长图像...


                  IP属地:湖南44楼2017-04-15 22:27
                  收起回复
                    【反编译次级索引】(请勿回复次级索引)
                    如何反编译和再次编译E+呢。 百度搜索 elona 反编译 第一个就是巫女控的教程。
                    英文版教程可以看这里:http://elona.wikia.com/wiki/Thread:17104
                    简单说,准备好:
                    反编译软件 (推荐新版;hspdecom110,可显示变量名称)
                    编译软件 http://hsp.tv/make/downlist.html 最新的安定版就OK
                    然后一个比较靠谱的代码编写软件(可以看超长几十万行的那种最好)
                    反编译比较简单,连续两次把相关文件拖动到反编译软件里就好(第二次时要把第一次的生成文件拖进去)
                    目的是获得source.hsp这个主程序(10M+大小)
                    然后再编译的话就用编译软件中hsed3.exe 打开主程序
                    F5是查错,如果有错会报让你改。改好后就可以用Ctrl+F9来生成exe执行文件。
                    呃,顺便一说新手改反编译的错有点不太靠谱...所以最好是能拿到一份已经改好的hsp。(见楼中楼)
                    有了exe执行文件后放到游戏根目录里打开就行了。
                    中途魔改的话,就是在无错的hsp基础上对代码进行一些编辑调整,然后生成exe就生效了。
                    『如果以上内容有更新,会在楼中楼内提示,请感兴趣的小伙伴注意查看!』


                    IP属地:湖南46楼2017-04-22 14:05
                    收起回复
                      【代码研究次级索引】(请勿回复次级索引)
                      鉴于反编译软件更新后可显示变量名,为代码研究提供极大便利。
                      从此以后,所有整理后代码研究内容统一以下述格式发布。
                      如果没有按该格式发布的研究内容,那一定是LZ还没有研究清楚(用来骗水的)...
                      ---------格式分隔符---------
                      【研究内容标题】
                      源码版本:指明反编译所基于的代码版本,便于与后续更新区别&比较
                      测试环境:指明相关测试所基于的游戏版本,便于与后续更新区别&比较
                      代码备份:研究内容相关代码的下载路径,便于与后续更新区别&比较
                      内容正文:按代码顺序展开的注释,便于对照理解代码内容
                      简要结论:基于正文获得的主要结论,便于快速了解研究内容。
                      ---------格式分隔符---------
                      『如果以上内容有更新,会在楼中楼内提示,请感兴趣的小伙伴注意查看!』


                      IP属地:湖南47楼2017-04-22 14:15
                      收起回复
                        【Snack-ME研究次级索引】(请勿回复次级索引)
                        任何游戏的进行都时刻伴随着大量数据的变动,由此涉及到对数据表的操作,Elona也必然如此。
                        基于数据表查询修改的两大传统软件:
                        (1)Elosnack(针对存档)以及(2)Eloma ME(针对内存)
                        就是理解&监控E+数据表的重要工具。同时也算是研究代码时必不可少的辅助工具。
                        因为代码很大程度上作用,就是修改数据表,而代码的结果,也可以从数据表中显现。
                        所以能够清晰追踪数据表,明确理解相关信息的话,自然研究起代码来也是事半功倍。
                        然而由于两者皆是只存在英文版,不少玩家并不十分熟悉其功能。
                        同时更多的玩家仅仅是把两者当成简单的游戏修改器,这不免有些大材小用之感。
                        本帖将对两者的“基础”与“应用”进行针对性说明,目的不是为了单纯的修改角色变强。
                        而是试图实现“想怎么玩,就怎么玩”,让玩家能够沿着自己的思路玩出想要的风格!
                        『如果以上内容有更新,会在楼中楼内提示,请感兴趣的小伙伴注意查看!』


                        IP属地:湖南48楼2017-04-22 14:30
                        收起回复
                          【丧心病狂次级索引】(请勿回复次级索引)
                          呃,其实就是一些不属于上述三大类别的杂七杂八内容。
                          费劲搞出来不发出去总感觉亏了,但是内容和技术很LOW又自觉不是很上得台面。
                          所以就低调的在这里丧心病狂的来一发索引吧。
                          『如果以上内容有更新,会在楼中楼内提示,请感兴趣的小伙伴注意查看!』


                          IP属地:湖南49楼2017-04-22 14:56
                          收起回复
                            【skillexp经验获取函数完整版V1.1】
                            源码版本:E+1.66Custom
                            测试环境:同上
                            代码备份:00代码相关/050L skillexp.txt
                            内容正文:
                            #deffunc skillexp int P1, int P2, int P3, int P4, int P5
                            这个函数的作用在于将某个原始经验增加量(参考等级,潜力等各种因素)修正为实际增加量。
                            属性,技能,魔法的经验增加都由此函数控制。
                            值得一提的是,经验减少同样由该函数控制,此时增加量为负值。
                            其中参数P1代表技能编号,P2代表角色编号,P3代表原始经验增加量(以下简称原始增加量)
                            P4与技能对应属性经验获取有关,P5与角色LV经验EXP获取相关。
                            在本函数中,技能等级如未特殊说明,一律采用裸装等级。(考虑各种加成时描述为[有效技能/属性])
                            (01) 如果对应技能等级为0,那么完全不增加经验,程序结束。(就是说一定要先学技能才可以)
                            (02) 如果原始增加量为0,那么完全不增加经验,程序结束。(呃...好有道理我竟无言以对)
                            (03) 技能对应的属性,增加参数P3/ (2 + P4) 经验。(以此处结果为原始增加量重新执行skillexp函数,增加对应属性经验)
                            (04) 如果对应技能潜力为0,那么完全不增加经验,程序结束。(该塞钱塞钱,该嗑药嗑药,你懂哒)
                            (05) 由此开始正式计算:
                            经验A=原始增加量*技能潜能/(100+技能等级*10)
                            <i>如果八维,速度,幸运处于成长期。(存在效果为正整数m的BUFF),那么经验A(重新赋值为)=经验A*(100+m)/100
                            <ii>如果此时经验A为0,那么有1/(int(技能等级/10)+1)的概率,经验A上调为1,(程序继续)。否则完全不增加经验,程序结束。
                            此外,如果原始增加量为负值(即经验减少的情况),那么<i>-<ii>不参与计算,经验A直接=原始增加量(该值为负)。
                            <iii>如果使用了技能高速猛攻(gdata(193) == 1200),那么有70%概率经验A归0;
                            如果身处巨蛋空间(当前map=35),或者身为沙包状态(cbit25为1),那么经验A归0
                            <iv>如果技能编号大于等于100(属性以外的技能or魔法),且不是在城镇魔法实习(gdata(175) != 11111111 ))那么执行奖励经验修正,奖励修正发生条件为rnd([有效学习属性]+50)>rnd(1000)。rnd(r)表示从0到r-1的随机整数。效果为将经验A修正为经验A*B,其中B=int(sqrt([有效学习属性])/10)+2,B值下限为2,上限为5
                            <v>如果技能编号大于等于100(属性以外的技能or魔法)且为队友,那么经验A扩大为4倍。
                            <vi>此时经验A大于20000时会修正为20000上限。
                            <vii>如果游戏模式为20倍经验模式,那么此时经验A扩大为20倍。
                            <viii>如果困倦度大于等于49(达到红色睡眠提醒),那么PC和队友都不会增加经验。
                            <ix>(根据经验A做)一些关于EXP经验的修正。
                            如果技能编号大于等于100(属性以外的技能or魔法),且参数P5不等于1000,则
                            对于EXP最大值(LV升级所需经验)小于1000的情况:
                            经验B=rnd(LV升级所需经验 *经验A / 1000 / (角色当前LV + P5) + 1) + rnd(2)
                            对于其他情况:
                            经验B=rnd(LV升级所需经验 / 1000 * 经验A / (角色当前LV + P5) + 1) + rnd(2)
                            然后角色当前EXP追加经验B,同时gdata(92) 追加经验B。
                            gdata(92) 的作用在于统计距离上次睡眠累积的总经验值(包括PC和队友)
                            该值越多的话,睡眠醒来时恢复的潜力越多。(睡醒时有%号潜力恢复的提示)
                            <x>最后,将当前技能的经验千分比(即等级后小数点后三位)叠加到经验A上。
                            (06)根据此时的经验A,对技能等级,经验千分比,潜力做调整。调整规律为:
                            <i>如果经验A满1000,达成升级条件,那么每升一级:
                            潜力*0.9处理,如果技能编号>=400(即魔法),则再次*0.9处理
                            如果此时潜力小于1,那么重置为1。
                            然后是一些文字输出提醒玩家有升级。
                            <ii> 如果经验A小于0,即达成降级条件,那么每降一级:
                            潜力*1.1+1处理(注意魔法降级没有再次*1.1,虽然比起魔法可能只有属性才会降级)。
                            如果潜力>400,则修正为400上限。
                            另外,降级最多只能降到1级,经验千分比为0的情况。
                            然后是一些文字输出提醒玩家有降级。
                            <iii>其他情况(不升级也不降级)时,直接将等级千分比赋值为经验A,实现了经验的获取。
                            此时没有文字输出。
                            简要结论:(各种细节还请自行阅览正文)
                            (01) 潜能越高越好,但是升级会消耗潜能。
                            (02) 等级越高,修正后经验越少。不过就算再少,也有极小概率增长1点经验。
                            (03) 正常来说,不要在特殊情况练技能(红色困倦,巨蛋空间,潜力低or技能等级太高),不然血亏。
                            (04) 如果你在正常状态修正后得不到经验,那么20倍经验模式一样不可以。
                            (05) 魔法升级潜力消耗更快
                            以上便是skillexp的全部代码解析。欢迎小伙伴们一起来围观吐槽哈~
                            @农农酱 28L关于EXP的小误会我补完了~


                            IP属地:湖南50楼2017-04-22 18:58
                            收起回复
                              2025-05-25 03:52:15
                              广告
                              【elosnack&Elona Me】基础理论篇
                              在介绍两者前,首先需要简单说明下E+的数据表。
                              E+的数据表分两种,一种是写死在主程序里的(非魔改不能变动),
                              另一种在存档里,记录着玩家的操作所引发的各种结果。我们要研究的,就是这种。
                              打开你的存档,你会发现以下几类文件:
                              其中一些为唯一性文件,同类仅此一个:
                              gdata.s1 记录着重要的全局变量信息,比如时间,地点,击杀数,困倦度,游戏模式,天气,剧情FLAG等等。
                              mat.s1 记录着各种原材料的持有情况。
                              kitem.s1 记录着PC各种魔法的库存量。
                              trait.s1 记录着PC各种特征及天赋。
                              spact.s1 记录着PC各种特殊技能的掌握情况(没有级别)。
                              qdata.s1 记录着近一段时间的各种告示板任务信息。
                              knpc.s1 记录着各种类型NPC的累积生成数量和击杀数量。
                              kitem.s1 记录着各种类型道具的鉴定情况和累积生成数量。
                              另一些为复数性质文件,几乎每个地图都有一个甚至更多:
                              cdata.s1 记录着每位角色的个人信息。比如位置,等级,饱食度,身高体重,金币,技能点,INIT,PVDV等等。
                              cdatan.s1 记录着每位角色的文字信息。比如名称/化名/种族/职业/语调等。
                              sdata.s1 记录着每位角色的属性信息。包括可升级,有潜能的各种基本属性/技能/抗性/魔法。裸装值和有效值。
                              inv.s1 记录着当前背包里道具的各种信息。比如道具种类,数量,装备属性,附魔情况,食物类型等。
                              上面这些s1和其他地图相关的同类文件的区别就是s1只针对当前PC,队友,以及游戏中其他冒险者。
                              而地图同类文件针对的是身处该地图的NPC。
                              不要问我是怎么知道这些...如果你从网上找到Elosnack的合集包,你可以了解得更多。
                              因为标准的snack配置文件首行就是针对的存档文件,以及数据表数组类型声明
                              而下面每行则是数组中每个变量的说明和偏移地址。

                              这些内容完全可以自行增减修改DIY,所以站在前人的肩膀上,大家完全可以做的更好。
                              当然,退而求其次,至少能活用前人留下的经验,也是很好的。
                              然后snack和ME之间又有什么关联呢?
                              我们在48L【Snack-ME研究次级索引】提到过,两者都是监控E+数据表的工具。
                              从本质讲,两者针对的,都是同一个东西。只是Snack从存档编辑,而ME直接从内存编辑。
                              因此,大家在ME中使用的几个表,完全可以从存档或者Snack的配置文件找到对应。
                              而且更关键的是,两者内含所有变量的位置对应关系完!全!相!同!可以对照理解。
                              毕竟两者从一开始所应对的,就是同一批数据表嘛。
                              LZ来列举一下两者的对应关系:
                              ME↔snack
                              Player↔gdata.s1 全局变量信息
                              States↔cdata.s1 角色个人信息
                              Skills↔sdata.s1 角色属性信息
                              Item↔inv.s1 背包里道具信息
                              以此类推...
                              由于两者都可以自行DIY。也就是说,snack表中各个变量的注释,可以用在Me上,反之亦然。
                              你明白其中一个,另一个完全可以照猫画虎根据对应位置自己制作出来。
                              所以剩下大家要做的,就是学好英语看懂注释了...(大雾)


                              IP属地:湖南51楼2017-04-22 20:43
                              收起回复