terraria吧 关注:729,015贴子:9,643,951

【深坑】Terraria源码阅读笔记

只看楼主收藏回复

如题,本贴是我在源码里看到的有趣东西的收录。
大概也算个冷知识贴?我会尽量保证帖子里面的东西在terraria wiki里也看不到的...
目前只有两条内容,但会慢慢变多的23333
会时不时更新,不过最近期末季,即使有更新也会很慢就是了。


IP属地:重庆1楼2019-06-01 20:45回复
    2.幽魂溅射套的套装效果:
    抛射体击中敌人后会检测玩家的ghostDmg值是否大于1000,大于的话就没有溅射效果。如果小于等于,那么将玩家ghostDmg值加上这次溅射的伤害值,然后搜索溅射伤害的受害者。
    溅射伤害的受害者必须可以被追踪(CanBeChasedBy = True,绝大部分怪物都是true),并且距离抛射体击中怪物的位置的曼哈顿距离小于等于800(50格),如果没有满足条件的,那么没有溅射效果。在能成为溅射伤害受害者的怪物中,会优先在距离(还是曼哈顿距离)大于50(3.125格)的怪物中抽取。
    那些带有canGhostHeal = False标签的怪物(没法幽魂吸血),被打中之后也不会触发幽魂溅射效果。
    玩家的ghostDmg值初始为0,每帧下降2.5(即每秒下降150),直到0为止。
    所以这套装的溅射效果稳定下来之后,也就能为玩家多提供150的秒伤害而已。
    另外原版里canGhostHeal = False的NPC少之又少——加起来也就四个,它们是:
    384:开了盾的火星军官
    387:特(磁)斯(暴)拉(线)塔(圈)
    388:火星无人机
    523:教徒残血的时候会放出来的那个紫色的远古末日
    但是不带canGhostHeal = False只是能触发溅射效果的必要条件而不是充分条件。
    总之就是幽魂溅射套的溅射增加的输出比较有限,后期还是考虑塔防混装吧。


    IP属地:重庆3楼2019-06-01 20:48
    收起回复
      前排暖贴


      应用达人
      应用吧活动,去领取
      活动截止:2100-01-01
      去徽章馆》
      IP属地:山东4楼2019-06-01 20:52
      回复


        IP属地:甘肃来自Android客户端5楼2019-06-01 21:00
        回复
          前排


          IP属地:重庆6楼2019-06-01 22:41
          回复


            IP属地:福建7楼2019-06-02 00:21
            回复
              前排顶


              来自Android客户端8楼2019-06-02 00:34
              回复
                硬核dalao_(:з」∠)_


                IP属地:美国来自Android客户端9楼2019-06-02 23:45
                回复
                  真正的粉丝


                  IP属地:重庆来自iPhone客户端10楼2019-06-03 05:57
                  回复
                    拆包诶
                    有点意思


                    IP属地:四川来自Android客户端11楼2019-06-03 23:23
                    回复
                      您是怎么看到源码的啊 qwq


                      IP属地:北京12楼2019-06-04 00:12
                      收起回复
                        看得懂代码真好


                        IP属地:浙江来自Android客户端14楼2019-06-04 08:10
                        回复
                          期末季结束了,可以暂时轻松一下,那么就更新一条。
                          3.关于专家模式下多人联机时的boss血量提升
                          多人联机玩专家模式的话,部分怪物(主要是boss)的生命值会有所上升。多数情况下,是单人模式下的生命值乘以一个值a。为了搞清楚a究竟是多少,我们先用下面这个公式算出一个值a1

                          其中N为玩家个数。
                          当a1大于8时,a 被设定为 (8 + 2*a1)/3
                          如果不是的话,a 就被设定为 a1
                          然后游戏会检测a是不是大于1000,如果是的话就把a设定为1000。(话说这个判定是起不了作用的,毕竟游戏里N最大也就256...
                          大部分会增加血量的怪物都遵循这个规律,但有几种怪物不太一样:
                          哥布林召唤师以及毁灭者的探针是乘以(2*a + 1)/3
                          它召唤出来的幻影是乘以(a + 1)/2
                          以及生命值会增加的怪物如下:
                          克苏鲁眼,世界吞噬者,克苏鲁脑,史莱姆王,哥布林召唤师,哥布林召唤师召唤出来的幻影,蜂后,骷髅王头和手,肉山,肉山的触手与脱缰的触手,毁灭者与其探针,机械骷髅王及其四条手,双子眼,世花,石巨人及其身体组件,猪鲨,邪教徒,幻象龙,远古毁灭,月总身体组件,贝特西龙
                          最后,为什么上面那个公式这么奇怪呢?要弄明白这个问题,就只好请大家做一做下面这道数列题了...

                          只是一道等比数列的练习题而已。
                          最后附上那个乘数a相关的源码

                          当然,不保证我的计算不出问题23333


                          IP属地:重庆15楼2019-06-22 19:43
                          收起回复
                            4.DPS计数器的问题
                            DPS计数器无法计入挥砍武器暴击伤害带来的伤害加成,但射弹的暴击伤害可以被正常计入。
                            这个问题很早就被人发现了,无论是在terraria community forums还是国内的交流平台中——好像都是测量虎爪DPS的时候发现不对劲,然后最终发现的?
                            造成这个bug的原因很简单,是游戏程序员在Player.cs的ItemCheck函数中,给addDPS传递了错误的参数,这个参数是在计算暴击伤害之前的伤害值,于是自然也就没法测量到暴击伤害的加成了。解决方案大概是把参数换成上面某行里StrikeNPC函数的返回值。
                            所以测量虎爪DPS的时候,会发现饰品全Menacing比全Lucky得到的DPS高很多。然而实际上两边测到的DPS都是不准确的(
                            为啥我要说这个问题呢,是因为昨天想用dnSpy把这个bug修掉,结果发现没法把反编译出来的源码编译回去... 而且缺乏这方面的知识导致不知道怎么解决这个问题(


                            IP属地:重庆16楼2019-08-28 09:05
                            回复
                              支持继续分享,尤其是关于场景生成和地图管理


                              IP属地:四川17楼2019-11-12 19:53
                              回复