了不起的修仙模拟器吧 关注:138,116贴子:1,477,206
  • 27回复贴,共1

有没有看过炼宝dll代码的大佬?

只看楼主收藏回复

rt,有个问题想请教一下


IP属地:河南来自Android客户端1楼2023-12-23 19:40回复
    1.第一张图(InitFabao)应该是炼制法宝时,法宝的阶数和是否为神器的判定。但图片里面,if(godfabao){num=1;Qualityadd=1f}中,为什么是num=1?为神器的话不应该是num=12吗?这里判定感觉有点问题啊。(num = Mathf.Min(30, num)这条我把原版的12改成30了,用于娱乐)
    2.第二三张图是MakeFaBao方法名,下面有一个if(godfabao)语句,而往上第五行有个AddFaBao方法名,打开是第四张图(AddFaBao)。AddFaBao再上面是神器成功率的公式,再结合这四张图,所以几乎可以肯定godfabao这个参数是在InitFabao方法中改变了布尔值(false变true),但问题是我找遍了法宝相关的代码也没有找到使得godfabao改变布尔值的语句,那所有关于godfabao的if语句不就废了吗?但事实肯定不是这样的,所以我想来问问大佬





    IP属地:河南来自Android客户端3楼2023-12-23 20:38
    回复
      捞捞捞捞捞捞捞捞


      IP属地:河南来自Android客户端4楼2023-12-23 20:42
      回复
        godfabao 有没有可能说的是神修法宝


        IP属地:北京来自iPhone客户端5楼2023-12-23 22:44
        收起回复
          可能是反编译导致的,这代码实在写得乱,电脑又不在手边,不能自己看,所以一时间看不太懂。边看边讲吧,讲错了我随时更正。个人没做过面向对象的东西,也没学过Csharp,所以不习惯用“方法”这个名字,以下用“函数(Function)”代替。
          首先Init的意思是初始化。由图片可见,整个逻辑是这样的:人物的行为调用MakeFabao函数,MakeFabao函数调用AddFabao函数,AddFabao函数调用InitFabao函数。也就是“炼制法宝的操作”→Make(godfabao)→Add(godfabao等)→Init(godfabao等)。
          所以godfabao的值显然可以推知是由“炼制法宝的操作”决定的,至于MakeFabao写godfabao=false,应该是Csharp定义初始值的方式。


          IP属地:安徽来自Android客户端6楼2023-12-24 15:06
          收起回复
            图片中godfabao明显不像是决定是否炼出神器(十二阶法宝)的,因为决定法宝质量的语句显然应该并且确实已经写在了MakeFabao函数里了,再看xml文件中神修的相关ID一向是God某某某。所以综合来看,可以推知godfabao的含义是“炼制的法宝为神修法宝”。
            也就是说这三个函数都不包含更改godfabao值的语句。当玩家做出炼制神修法宝的行为时,应该会执行“MakeFabao(true)”这样的语句,从而使godfabao为true。这才是使godfabao为true的方式。


            IP属地:安徽来自Android客户端7楼2023-12-24 15:12
            收起回复
              再说的具体明白一点:玩家指挥角色去炼制法宝,游戏就执行MakeFabao()(等效于“MakeFabao(false)”),如果指挥神修去炼制法宝,就执行MakeFabao(true)。
              执行MakeFabao函数的过程:先根据一些乱七八糟的因素,看一下这次炼制能不能成功(神修必成功,见MakeFabao中的第三个if),如果成功了,就开始根据一些杂七杂八的因素计算法宝的效果质量(见第二张图连着的几个float),决定完之后就执行AddFabao函数。


              IP属地:安徽来自Android客户端8楼2023-12-24 15:19
              回复
                AddFabao的过程:先看看是不是秘宝,然后创建一个物品,物品的本质是一个对象。刚创建出来的物品显然什么玩意都不是,于是让它执行InitFabao方法,对它自己进行初始化。


                IP属地:安徽来自Android客户端9楼2023-12-24 15:22
                回复
                  然后InitFabao我就不是很能看得懂了,不过没关系,我们边看边说。
                  我们知道游戏中神器炼成率是个独立的属性,也就是说如果神器炼成率不够,炼制法宝的时候即使再天时地利物品和,也最多只能炼出11阶法宝。
                  显然InitFabao中的godrate就是神器炼成率的相关参数。见其中第二个if。


                  IP属地:安徽来自Android客户端10楼2023-12-24 15:26
                  回复
                    由此我们就可以推知num应该是品阶,没玩过神修,不清楚,应该是因为神修的法宝需要神国的建筑或者神修的属性来升阶,所以神修法宝的品阶初始为1。


                    IP属地:安徽来自Android客户端11楼2023-12-24 15:31
                    回复
                      不知道楼主是不是专业学编程的,InitFabao这里用了一个递推结构(记不清了也可能叫别的名字),也就是自己调用自己。见其中的倒数第四行可知。
                      这种结构我一向非常非常不喜欢用,因为它不符合人类的思维模式,但它确实也有一些好处。
                      不过通常来说,追求比较低的情况下,它往往都可以用循环代替。
                      因此我们也用循环来解释InitFabao。这个循环的主要目的是决定法宝的品阶。


                      IP属地:安徽来自Android客户端12楼2023-12-24 15:39
                      收起回复
                        根据InitFabao函数的写法,我们可以看出来法宝的品阶不是一次升上去的,而是每次执行“int num=oitem.Rate+……”这一行的时候都升一次,直到循环结束。
                        我看不懂的地方,第一在于循环是什么时候结束的。this.InitFabao……这一行不附属于任何if then语句,也就是说无论什么情况下它都应该会执行——那么这不是死循环了吗?我猜测,可能是在其中某个用到的函数内封装了结束循环的语句,或者通过赋不该赋的值导致报错以达到结束循环的目的。
                        第二个看不懂的是,this.InitFabao……这一行里面传递给InitFabao函数的参数为什么是错位的——kind和Qualityadd参数之间的lingfix不见了,以及前几个参数的类型对不上等。可能是Csharp的特别语法吧。


                        IP属地:安徽来自Android客户端13楼2023-12-24 15:49
                        回复
                          总结:
                          1.godfabao的含义是“此法宝是否是神修法宝”,而不是“此法宝是否是12阶神器”。
                          2.将12更改为30也许能让神器的品阶最高能够达到30阶——但是非神器仍然最多只能炼到11阶,而且神器炼成成功与否的判定有可能会执行多次(因为它在递推循环之内),可能导致神器炼成率指数级降低。
                          如果希望让非神器最高能够达到29阶,可以把>=12的12改为29。如果不希望,但是又希望实现完美效果,建议研究一下所用到的各种函数的意义,然后自己重写InitFabao这个方法——它的写法多多少少有点仪式感的成分在里面(一步一步登天),而实在不是我觉得好用的写法。
                          3.超过12阶的法宝放在交易区或可交易仓库时可能导致门派交易出现异常,这是游戏的老bug了。楼主使用高阶神器时请留心。


                          IP属地:安徽来自Android客户端14楼2023-12-24 15:55
                          收起回复





                            IP属地:河南来自Android客户端16楼2023-12-28 17:46
                            回复