亚服的修改终于上体验服了

妖刀姬转火多加两刀、酒吞的鬼王状态、花鸟卷四只鸟变成三只鸟、青行灯变成了打火机、兵俑一刀砍废了等等。

妖刀姬的话,真不知道有多少人能吃到这次加强的好处。我这种咸鱼玩家当然乐于看加强了。今天还试了一把鸟+36级六星刀刷阴界之门,刀刀的表现马马虎虎,真不如同一套御魂的五星荒……

酒吞的鬼王状态是很厉害的。

花鸟卷削弱应该是针对针女花鸟这种有毒的御魂配置。它确实很有毒。一个奶妈打输出。不能说特别恶心。但,可能脱离策划本来的目的了。

青行灯也算是大加强了,对我这种没有辉夜姬的人来说是福音。虽然我……大部分情况下都靠惠比寿打火……大招升到满级比起辉夜姬来回火能力还是差点的,但好在遇上木魅可以强行克制——没火我也能放大。能吸火,能省火,其实挺好……就看怎么往队伍里放了。
早期阴阳师数值还没这么爆炸,不像现在说出个4S的SSR就出,青灯的数值比较均衡,换言之没有S的属性……其实只能走控制路线……
至于破势爆伤灯……这个我真算了。同样御魂的情况下比玉藻前少至少1000点伤害……

纪念天国被一刀砍废的兵俑。有人说,有拉条啊!
有毒吧……降低40%的速度,可不是降低10点,降低20点,降低30点,可是直接跑不动了……
你镰鼬拉得动试试啊!
其实不仅是拉得动拉不动的问题,是行动顺序打乱了,套路使不出来的问题。
啊,你说妖琴?
等于是用一个妖琴加一个兵俑实现了群控的效果?
??
如果减速是个可被驱散的buff的话,那用雨女哭一下也许就能搞定。
总之,怎么想都是原先一个式神搞的定的群控,现在需要至少两个人的配合。而且这群控还是能一下就被驱散的群控……
简直神了。
好了,拿转换券来,我不会犹豫。

御馔津也被加强了。网易终于发现没什么人用了……其实我是欣喜的,毕竟加强之前就带着四星的她过了几个秘闻本了。
网上有人说御馔津带破势一箭能多少伤害……这……有毒吧……………………
看技能就是打后手的啊……你以为你射箭的时候还能触发破势么……

阴阳师所有攻击频率异常高的式神都可以带针女走输出路线。譬如体验服被削弱的数珠,譬如早就被削弱的彼岸花,譬如花鸟卷……
所以我选择给御馔津带针女(X
开玩笑的,我练度这么低,肯定是带地藏保命。

怎样吃狗粮

阴阳师玩到后期会发现招福达摩这玩意很尴尬。吃还是不吃,这是一个问题。
去年这玩意还有人在评论区吐槽:
“提供经验是普通N卡的1.5倍,花费金币是1.5倍,意义何在?”
今年不知啥时候再一看,似乎改了。现在红蛋怎么喂都是500金币了。
可喜可贺。至少省钱方面有优势了。
但是仔细一看,提供经验:6435,花费金币:500.
再见。我困难25开着经验加成刷3把,两个狗粮都得到了至少6435经验。更何况我还有金币掉落。我只花了9点体力。
所以这个在商店花费勋章是普通破碎符咒1.5倍的玩意到底意义何在?破符还能有几率出R卡,换5骨灰。
我觉得能喂大吉达摩就喂了吧。但是大吉入手难度还是比这玩意高的。仔细一看,保有量完全不是一个数量级。
关键现在刷高等级副本不断地掉落这玩意,掉了就屯在库里了。库里东西多了,选择式神的界面会卡。唉,糟心。
什么时候能给我换成白票就好了。
关于把招福达摩喂大吉达摩。
其实是这样的:
四个招福达摩喂给大吉达摩,然后把该大吉达摩喂给一级2星奉为达摩,会发现它满级了。然后给它升3星,会发现它已经3星满级了。甚至还有经验溢出。
这件事说明了什么道理呢……说明一个大吉(胧车稳定出货,还算有一点点稀有)加上一个奉为达摩的入手难度和一个三星满级奉为的入手难度是持平的。所以没有必要倾家荡产去搞三星奉为来降低肝度……万一入手了也不要不舍得吃……
所以,怎样清库里的招福达摩,这又是一个问题了。

沉迷了一年阴阳师

去年十月份AFK,今年三月份回坑。
果然还是喜欢会动能说话可以360度观察的小哥哥小姐姐。仅此而已。
打算写关于阴阳师的东西了。
这博客里之前到处都是关于单相思的碎碎念。唉。反正事到如今无所谓了。

上海之行:ZH,LJ以及TY

12月24日我连滚带爬来到了上海。
出了徐家汇地铁站我就见到了那仨哥儿俩:ZH,LJ还有TY。其中TY是头一次见本人,虽然Q群里见过这人的名字。
山东的小伙子果然都挺高的啊,这三人都有一米八以上吧。
LJ我毕业之后就没再见过他了,估计有将近四年没见面了。最后一次跟ZH见面是一年半之前来着。但是看上去他们真的一点都没变。
老实说我之前在线上跟他们聊天比实际见面时多,而跟他们最熟的那段时间我大概还是一种线上能说话线下就是悶葫芦的状态。但现在我也不同了,毕竟跟一帮男同事朝夕相处了三年,也在线下有了面对面交流的好朋友。
现在看来LJ就是一非常常见的游戏策划。俗话说得好,策划全凭一张嘴。于是我看到他一直跟ZH还有TY聊各种游戏。回想一下的话,我之前的策划同事也差不多都是这样。
ZH的话,虽然他是一个程序猿,但他并不是一个话少闷头做技术的人。他话真心不少,而且并不都是技术相关,和LJ两个人也挺能聊的。这人你稍一不注意他就自顾自地快速说了很长一段话然而我还没有弄明白他一开始在说什么……
TY的话,这人只让我想起了之前的上司。一样的爱说瞎话,爱口胡。十句话有八句口胡。遇上这种我一般不知道该如何反应就只能干笑。
跟他们来到一个棋牌室玩桌游。
我上一次玩桌游的记录是在趣游和那帮人玩杀人游戏,应该是两年前的事了。这让我确确实实想起了刚进趣游时和大家打成一片的日子,我猛然间有点伤感,然而旋即又意识到那种日子已经离去很久了——也许是人变了,也许大家都没变,只是环境变了。
老实说我并不喜欢玩这种游戏。也不知道从哪年起,我就对有竞技内容的活动有了抵触情绪,因为得失心太重,讨厌失败,所以总是喜欢直接放弃。
两年前我跟趣游那帮人玩杀人游戏的时候就是一随时随地狂笑的傻子。我的乐趣甚至是出局之后作为旁观者看他们互相怼。
这次我其实挺开心的,无论是看TY口胡还是看他们互怼。
有朋友一起玩挺好的。
12月25日我跟LJ还有ZH去了外滩。
看了蒙蒙细雨中的黄浦江和被雾蒙了一半的东方明珠。
难为两位小伙子陪我雨中漫步了。虽然我心里有些过意不去但是我啥都没说。果然是因为觉得实际上不太熟所以也没有跟之前公司的朋友那么坦率吗?他们还请了我日料。
也见识了旁边那条步行街的繁华,在街上看到了一些之前想找没有找到的品牌的店铺。
总觉得即使就去了这么几个地方,也能感到上海比北京要繁华。也可能是因为我在北京太不爱玩了。
在北京的话,即使是去专柜买某款化妆品,我也是不想去的。因为并没有人陪我去。某些牌子的导购会“看上去很亲切”地问我:今天一个人来的呀?然后我心里就觉得自己被鄙视了——我没朋友。
在这里逛步行街的感觉让我想起了唯一一次跟之前的同事一起逛街,逛的是大栅栏。
事实上我过去一年时间里最好的朋友就是在趣游坐在我对面的那位。而我和他除工作时间之外几乎没有任何交集。
这件事的负面影响是我有事没事总喜欢往公司跑,我甚至心甘情愿地没有个人生活。只要他在,我就会开心。
我对他的感情已经说不清了。人总是被各种误会各种错觉所蒙蔽,察觉到的时候心态已经跟之前不一样了。然而即使意识到那些是错觉,心态和感情也回不到从前了。
我不爱他。我喜欢跟他聊天,我几乎什么都会跟他说。

然而当初逛大栅栏的时候,虽然有别人在,我心里想着的却也是:这是我第一次和你逛街。
现在想来,估计那也是最后一次了。
言归正传。
有朋友陪我玩真好。虽然经常LJ和ZH哥儿俩有说有笑地就把我落下十米远。
但我这次不是一个人压马路了。

多谢。

windows崩溃调试经验谈

我是一个对各种语言特性来之不拒的人,我不会因为一个人写了各种goto而抨击这个人的代码质量,同样我也不会因为一个人在c++代码里写了c风格的代码而批评他的c++水平。语言特性本无罪,人为制定规范只是为了降低问题发生的概率,然而bug是恒存在的,因为谁也不能阻止人类犯二。
特别说明一下在C++代码里使用本该被C++替换的C特性的行为。首先必须强调现在的软件开发过程中用到C语言实现的(开源)第三方组件几乎是必然发生的,在发生于这类第三方库内部崩溃的情况下,C++的异常系统是不可用的。所以对我来说,看崩溃dump的时候,C++和C没啥区别。
1.只有栈没有堆的minidump
通常见到的都是minidump。运行于windows上的程序通常都是客户端程序,没有时间和空间来dump整个内存。所以你手上拿到的都是只有栈没有堆的信息,只能通过栈上的临时变量来反推导致崩溃的逻辑。dump会告诉你是怎样的内存访问导致了崩溃,比如下面这一行:
Unhandled exception at 0x0063e8fe (xxx.exe) in crashdump.dmp: 0xC0000005: Access violation reading location 0x2933b000.
意思就是越界读到了0x2933b000这个非法地址。需要注意是reading还是writing,因为这是判断哪个变量出错的关键信息。
2.令人困惑的变量信息
visual studio开了最高的编译优化(ox)之后,visual studio很多时候就不认识自己编译优化后的代码了。无论是debug过程中,还是看dump的过程中,这种情况几乎每次都会出现。它的调用栈是对的,但显示的变量信息是错的。大概是vs不认识自己的栈指针了(
关于这个问题,stackoverflow上有过讨论:

遇到这种情况,只能开汇编代码看了。运气好的话,能看到刚刚从栈上读到寄存器里的出错变量,运气不好的话只能根据栈指针往后查。
3.令人困惑的调用栈
这里讨论的是函数上一层调用和这一层调用完全对不上的情况——也就是说,从一个莫名其妙的函数call到了另一个跟它看似毫无关系的函数。
首先可能的原因就是call的目标地址不对,也就是说函数地址错了。这种情况并不多见,很可能你传入非法地址的时候就读越界崩溃了。
其次是编译优化导致的问题。
第一种情况是inline导致的。这里说的是inline这种编译优化行为,而不是C++里那个关键字。(事实上并不是inline这个关键字就会触发inline优化。)这种情况可以通过反汇编代码轻易判断出来。
第二种情况是编译器把两个函数实现当成了一个实现处理。比如两个不同的类,它们都有一个getter,返回的同样是offset为16的成员变量的值,它们生成的函数实现可能就是一样的。这时候,编译器可能就把这两个实现当成一个函数,于是从这一个类里的函数call到了另一个类的成员函数。这种情况对照一下两个函数的实现也能轻易看出来。
再次就是栈被破坏了。
这种就是典型的写缓冲区越界导致的,写坏了栈,连同之前入栈的返回地址。这种情况下,没人能保证栈上有多少正确的信息。如果后面有幸在当前函数内崩溃的话,你看到的当前函数是正确的,但上层调用很可能已经被抹去了。
PS:一个很容易就破坏栈的方法是用sprintf,第一个参数是一个栈上的临时数组,然后打印出的文本大小超出了数组的范围,就会写到栈上之前的数据。新版本的visual studio默认的编译选项下喜欢把sprintf这种不安全的函数当编译错误处理,你可能会使用sprintf_s来替代它。然而sprintf_s充其量就是不会把栈写坏而已,它会判断字符串大小是否超出了范围,如果超出了范围就会触发断言——然后在用户看来程序还是崩溃了。
4.

又一个bug

一帮人都被某第三方库给坑了。正式版本没问题,发过来的patch有问题。

找出问题代码的方法最后是:

设数据断点,监测一帧里面该变量的变化。有变化就打log,而且打完整的调用栈。

然后把log拿出来,正确的和不正确的一比对,哪个函数没调用就一目了然,顺藤摸瓜地查就是了。

所以很多时候解决问题需要的不是智商,更不是什么所谓的灵感。而是经验。

所以我遇到问题总不会去想问题是什么导致的,而是思考怎样获得更多的足以分析出出错之处的信息。

大部分时候这是有用的。