装正经的开头

8月份的时候一直潜伏在六六云的tg群中,在刚好和优惠码擦肩而过的次日入手了35元/月的美西cera小鸡。
六六云是国人新商家,2020年1月份成立。两天内非恶意使用无条件全额退款。目前来说它家还算稳定,很少有闹事的出现,总体的话购买人数不算多,资源充足,价格上优势不算大。另外,它家的美西双程GIA小鸡可发工单解锁港区、美区Netflix。

吐槽

没啥好吐槽的……tg群也意外的安静。原域名是666cloud.tech,正版WHMCS,后台没有过多花里胡哨。
后台

款式

cera机房,三网回程CN2 GIA。2G防御(几乎等于没有),100G内秒解。
CERA-CN2-1H1G-30M
1vCPU
1G 内存
15G SSD高速硬盘
30Mbps 峰值带宽
双向500GB流量
1个独立IP
测试站点:点击前往
100MB测试文件:点击下载

Bench测试

Bench测试

UnixBench跑分

UnixBench跑分

宝塔跑分

宝塔跑分
极速安装

Ping值

Ping值

LemonBench及回程路由

LemonBench
详情见:https://paste.ubuntu.com/p/m2rvqV6RZz/

后记

SSH十分顺畅!也能够解锁美区Netflix。川大总统搞事情,再加上是新商家,推荐月付并做好备份,另外2G的防御还是有点小了。到本文发布前,Cera美西已经补货,优惠码可以使用。
另外,这家Cera美西机房有优惠码:月付八折:cera_20month 年付七折:cera_30year。
点击购买(有AFF)

附文

因为机器比较稳定,上手也比较舒服,再加上之前错过优惠码比较郁闷,在优惠码可用后又入手了2H2G款。当然要跑下分啦。
Bench测试2
UnixBench跑分2
宝塔跑分2
LemonBench的完整内容见:https://paste.ubuntu.com/p/cCpS5d95KH/

参考资料

[1]VPS收割者-六六云美西CERA-CN2-1H1G-50M套餐评测报告
[2]羊毛党之家-六六云|1h|1g内存|20gssd|20mbps|500g流量|香港|45

请输入图片描述

装正经的开头

7月份热网互联开始提供洛杉矶Cera机房小鸡。身为十年商家,并且口碑也比较好,于是便趁着其年终特惠之际入手了一个月小鸡进行折腾。另外商家还提供了三网回程GIA的日本小鸡等等,之前也有数者做过相应的评测,再次不再赘述。

吐槽

虽然作为看起来比较靠谱的商家,而且似乎采用的自研面板,却总感觉撞衫狗云后台了……另外,其开出的小鸡,光是跑分时就需要安装额外的一堆组件,真的是很纯净的系统。安装系统时,可供选择的有许多。后台功能也比较全面实用。
个人中心
后台管理

款式

随客洛杉矶Cera机房自营区,提供三网回程CN2-GIA线路; Cera机房的网络质量和稳定性有目共睹,我们完全采用了他们的定价最高、网络最优秀的大陆网络优化方案,本区免费提供20G DDOS防御。
S0 R10
CPU:1核
内存:1GB RAM
硬盘:20GB SSD
带宽:15 Mbps
流量:1000 G/月
测试站点:点击前往
100MB测试文件:点击下载

Bench测试

Bench测试

UnixBench跑分

UnixBench跑分

宝塔跑分

宝塔跑分
极速安装

Ping值

Ping值

LemonBench及回程路由

LemonBench
详细见https://paste.ubuntu.com/p/dVHDSxhRwK/

后记

SSH有滞后感,跑脚本可能会有一点可以解决的问题。最近川大总统搞事情,暂时也不敢轻举妄动。此篇仅记录一下对于Cera小鸡的一个尝试,以应付十二维度的可能迁移计划。
另外,这家正在年中特惠做活动,预存款充值优惠、年付七五折优惠、20元代金券限量派送,活动日期延长到9月30日,有需要的可以看下:热网互联年中特惠
点击购买(无AFF)

参考资料

[1]主机测评-hotiis:7.5折优惠,低至30元/月,香港cn2 gia、日本cn2 gia、日本软银(三网)、美国cn2 gia,充值还送钱。

前言

因为有放上一个看板娘的需要,我从某鸽子画师那里借来了一个live2d的cmoc3文件。由于cmoc3文件不能直接在网页上放出来,并且像网络上的插件都或多或少有些瑕疵,不满足需要。当然,如果只是一般的需求,则网络上的插件基本能实现了,但由于本人强迫症,对于不显示表情、动作表现不全、没有随即加载动作、定位不准、模糊等瑕疵很在意,于是便有了这几天的折腾过程。
由于本篇并非一步到位法,而是属于自我折腾范畴,故仅限于闲的没事的来报错。
本篇折腾过程全部基于live2d2.0,如果想要寻找关于live2d3.0的教程可以移步至参考资料。


文件结构

在进行魔改之前,我们先认清一个放在网页上的一般模型的文件结构。
参阅Live2DViewerEX的例子(这是个跨平台动态壁纸解决方案,与我们需要用的不同):live2d配置例子
最基本的只含有moc文件和材质文件,贴图格式是png。moc文件相当于提供骨架和其它数据,而表现出来还要联系材质文件。同一人物,相同动作的换装也是依靠切换材质文件。当然,如果只是最基本的模型的话,没有动作的话,太显得单调了。因此将最基本的模型通过软件稍稍处理,就会得到下面的例子,含动作文件夹motions:

model.json //对模型各种文件的关系配置,即引用关系。
model.moc//3d骨架,格式是moc(live2d2.0)。
physics.json//物理效果,比如头发随动作的摆动。
pose.json//部件置换的姿势效果。
textures //文件夹,存放材质文件,往3d骨架上贴的,有时候一个模型加载需要几个材质文件。

a.png
b.png
...

motions //文件夹,存放mtn动作文件,这些动作由于json中的引用,会在不同的事件中表现出来。

jump.mtn
dance.mtn
...

expressions //文件夹,命名各异,存放表情文件,但是在部分插件表情文件会被忽略。

f00.exp.json
f01.exp.json
···

sound //文件夹,存放声音文件,可以在点击事件中引用。

normal_01.mp3
normal_02.mp3

出于多种原因,绝大部分制作师发布时只会发布导出后的模型文件(moc或moc3)。如果获得源文件(cmox或cmo3),就能通过软件自定义一些动作和表情,同时也能轻松地解决点击事件的区域问题,这一点接下来会说明。
当然,具体的命名方式要依情况而定。比如有些插件规定要将配置文件命名为index.json;又比如有些插件规定要将moc文件命名为name.model.moc,这个时候就要编辑配置文件,更改一下相关的路径。因此,接下来介绍模型设置model.json。
这是一个扒自OkYes个人博客的看板娘的例子。原因是他上次嘲笑我看板娘错位了。

{
    "version":"Sample 1.0.0",
    "model":"seifuku.moc",
    "textures":[
        "seifuku.1024/L2DMSR_U_00.png",
        "seifuku.1024/L2DMSR_U_01.png",
        "seifuku.1024/L2DMSR_U_02.png"
    ],
    "lip_sync": "false",
    "layout": {
        "center_x":0.0,
        "center_y":-0.05,
        "width":2.0
    },
    "hit_areas_custom":{
        "head_x":[-0.3, 1.12],
        "head_y":[0.26, 0.56],
        "body_x":[-0.41, 0.58],
        "body_y":[0.46, -1.12]
    },
    "motions":{
        "flick_head":[
            {
                "file":"seifuku.motions/motion1.mtn"
            },
            {
                "file":"seifuku.motions/motion10.mtn"
            },
            {
                "file":"seifuku.motions/motion11.mtn"
            },
            {
                "file":"seifuku.motions/motion12.mtn"
            },
            {
                "file":"seifuku.motions/motion2.mtn"
            },
            {
                "file":"seifuku.motions/motion4.mtn"
            },
            {
                "file":"seifuku.motions/motion5.mtn"
            },
            {
                "file":"seifuku.motions/motion6.mtn"
            },
            {
                "file":"seifuku.motions/motion7.mtn"
            },
            {
                "file":"seifuku.motions/motion8.mtn"
            }
        ],
        "tap_body":[
            {
                "file":"seifuku.motions/motion1.mtn"
            },
            {
                "file":"seifuku.motions/motion10.mtn"
            },
            {
                "file":"seifuku.motions/motion11.mtn"
            },
            {
                "file":"seifuku.motions/motion12.mtn"
            },
            {
                "file":"seifuku.motions/motion2.mtn"
            },
            {
                "file":"seifuku.motions/motion4.mtn"
            },
            {
                "file":"seifuku.motions/motion5.mtn"
            },
            {
                "file":"seifuku.motions/motion6.mtn"
            },
            {
                "file":"seifuku.motions/motion7.mtn"
            },
            {
                "file":"seifuku.motions/motion8.mtn"
            }
        ],
        "talk":[
            {
                "file":"talk/DK_NOZOMU_0041.mtn"
            },
            {
                "file":"talk/DK_NOZOMU_0061.mtn"
            },
            {
                "file":"talk/DK_NOZOMU_0067.mtn"
            }
        ],
        "idle":[
            {
                "file":"seifuku.motions/motion3.mtn"
            },
            {
                "file":"seifuku.motions/motion9.mtn"
            }
        ]
    },
    "expressions":[
        {"name":"f01.exp.json","file":"expressions/f01.exp.json"},
        {"name":"f02.exp.json","file":"expressions/f02.exp.json"},
        {"name":"f03.exp.json","file":"expressions/f03.exp.json"},
        {"name":"f04.exp.json","file":"expressions/f04.exp.json"},
        {"name":"f05.exp.json","file":"expressions/f05.exp.json"},
        {"name":"f06.exp.json","file":"expressions/f06.exp.json"},
        {"name":"f07.exp.json","file":"expressions/f07.exp.json"},
        {"name":"f08.exp.json","file":"expressions/f08.exp.json"}
    ],
    "physics":"physics.json",
    "pose":"seifuku.pose.json"
}

关键的参数有以下几个:

路径(model&textures&expressions&physics&pose):

依次为相应文件对应的路径。

激活自动对口型功能(lip_sync):

在这里用不上的东西,可以直接删去。

布局(layout):

layout的center_x字段和center_y字段用于偏移显示模型,日后若有显示错位可以修改此处的值。width定义缩放。

自定义HIT_AREA的方法(hit_areas_custom):

此处是Jad大佬用来解决问题而自定义的方法,如果你使用的插件是基于Jad大佬提供的js修改的版本,这个参数就能实现接下来的功能。但是接下来因我要从live2d-widget.js引用,这个参数将无意义。
用来设置头部和身体的点击区域,设置过后就能确定头部和身体在的位置,配置motions点击过后做出相应的动作和声音。头身体都是正方形区域,head_x是头左上角定点坐标,head_y是头部右下角定点坐标,身体和头相同。

怎么获取坐标?
在live2d.js中搜索DEBUG_MOUSE_LOG,将值改为1,这样控制台就会显示你点击的坐标值,这样就可以设置了。

触发区域名(hit_areas):

官方的web只定义了头部和身体的点击区域。其中id为制作模型时定义的区域id值,如下所示,可以自动地定义点击区域。
如果你没有源文件的话,就不知道id,只能通过上面的参数来手动设置区域。

"hit_areas": [
        {
            "name": "head",
            "id": "D_PSD.55"
        },
        {
            "name": "body",
            "id": "D_PSD.16"
        }
    ]

如何获取部件ID?
在拥有源文件的前提下,在Cubism 3 Editor中打开源文件,点击相应部件,在左下角窗口的属性中,即可查看部件ID。
【图】

动作(motion):

根据我接下来要进行接头霸王的而引用的js文件中显示:
可配置的只有这几个:"idle","sleepy","tap_body","flick_head","shake"。
依次对应为“待机时动作”、“闲置时动作”、“点击body时动作”、“点击head时动作”、“摇动时动作(限支持重力感应功能的设备使用)”。
尽管如此,有些动作,由于不同插件的定义问题,是不显示的。通常会在网页live2d上显示的的动作有"idle","tap_body","flick_head"。而我需要显示的也只是这几个动作,因此足够了。当然,由于版本问题,存在更多的动作,根据js内容可能会显示,比如其中的"talk"(对话)。
在关键词其后面的参数file是动作文件路径,依据实际情况来更改,是必须指明的。
除此之外,关键词后的参数还可以包含"pinch_in","pinch_out","sound",依次对应为“淡入”、“淡出”、“声音文件路径”。

将源文件转换成我们所需要的文件

在获得鸽子画师提供的源文件(cmo3)后,如果想要将之放在网页上,还需要一些必经的处理。
接下来会使用的工具有:Cubism 3 EditorLive2D Viewer

将模型格式由v3转v2

准备工作

cmo3是v3格式的模型文件,但是我们此次基于live2d2.0,因此选择将模型文件由v3转为v2。
我们进入Cubism 3 Editor,打开cmo3文件。因为模型材质图的分辨率高达8192px,因此我们只能使用专业版来操作。不过专业版有42天的试用时间,试用期间功能与正常版本无异,足够满足暂时的需求了。这里我们采用另外一个模型来演示。

如果42天后仍想白嫖,可移步至参考资料查看方法(不建议)。

【图】

删除和修改部件

如上图所示,如果要把天依放在网页上,有一些部件是不需要的,有两种方法来解决。
一是将目标区域的材质图修改为透明,那么在显示时自然就会消失;
二是删除目标区域部分的模型。为了减少模型文件大小和减轻运算量,推荐使用第二种方法。当然第一种方法并不是不可以,在无法接触到模型的源文件时,这也是唯一的方法。
在主界面内点击想要删除的部件,出现红框即代表此部件被选中,然后按下Del键删除。
或者在左下角的菜单中,选中三个背景,按下Del键删除,更加简单利索。如图所示。
【图】
如果想对显示结果中的部分区域做修改,可以选择导出材质图,用图像处理软件进行修改注意不要对材质图进行任何的移动或裁剪。之后再将材质图导入软件中即可(也可以在导出后的textures文件夹中直接修改)。
如果想进行更加精细的操作,可以在建模-纹理-编辑纹理中实现。如修改分辨率来降低文件大小(同时这样也避免了高分辨率需要专业版进行编辑的尴尬),如将无用纹理删除。如下面两张图演示。
【图】
【图】

更改尺寸

现在我们看到,天依处于画面右方,且多出来许多空白画面,会影响到看板娘的显示。因此我们需要更改尺寸和裁剪。
如果觉得天依太大了,可以在文件-模型尺寸中按比例缩小。这里我设置为50%。
为了裁剪画布多余的空白区域,如下图所示,在文件-画布设置中,
【图】
我们设置画布的大小。注意选择区域。这里因为缩小后天依处在靠画布正上方的位置,我们需要先将画布从正上方裁剪。我给定的数值裁剪效果会不好,之后再重复步骤,直到天依显示在画面正中央且没有过多多于画布即可。
【图】
想要看看此时模型的实际大小,可以点击下方的1:1按钮显示原始尺寸。当然,裁剪之后我们应该点击产生随机动作,来检查模型做动作时是否会超出画布。之后在从建模-参数-恢复默认设置中恢复默认姿态。
【图】

转换部件ID

由于v3格式与v2的部位ID不同,直接导出的话会出现不跟随鼠标动作等问题,需要把v3格式的部位ID转为v2格式,编辑器已经包含了这个功能:
在主窗口中依次点击建模-转换模型ID打开ID转换窗口。保持默认,点击OK即可。
【图】

解决小问题

再进行最后一步的导出工作前,我们来检查一下不同版本到底产生了哪些问题,并尽量改过来。以下是我遇到的问题和解决方案。

天依的闭眼和睁眼反了
从上方的演示图以及在开启随机动作后不难发现,天依的闭眼和睁眼动作反了过来。为了防止误操作,我们可以点击坐上方两个按钮,锁定绘画部件和变形器。之后,在左下角窗口参数中找到控制睁眼闭眼的参数。点击参数后面的数据,在接下来显示的列表中先选择参数,再点击反转即可。
【图】
鸽子画师的模型脸整没了
这里是不透明度和绘图顺序的问题。找出遮住脸的黑幕,原来是后发部分。如果设置完全透明的话,后发会消失。因此我们改变其绘图顺序,将之放在脸这一图层的下方即可。
【图】

导出模型

经过测试后,如果一切基本上没有问题了,则导出模型。在文件-导出嵌入式数据-导出moc文件(2.1用)导出。导出的文件应该包含textures文件夹、moc文件和model.json配置文件。
同时,为了接下来的工作需要,我们还通过文件-保存为2.1所用模型(cmox),另存一个2.1版本的源文件。
在导出模型时,可以根据需要选择分辨率。在网页上显示的话,我才用1024px就足够了。
【图】

增加动作

导出后的模型,理论上已经可以在插件中使用了,但是因为缺乏动作、表情、物理效果等文件,会呆呆地站在那里。在这一步中,我们为其加入动作。

如果已经有动作文件(can3)

在打开了模型的前提下打开动作文件。画布尺寸没有必要调。
在窗口左侧的场景中可以看到总共录了一个动作,名称为“= =”。
【图】
同时和上面所说一样,这里也出现了闭眼睁眼反了的毛病。我们展开下方的Live2D参数,找准控制睁闭眼的参数对应的几个关键帧,将参数移至睁眼。
【图】
整理点小问题后,接下来选择文件-导出嵌入式数据-导出动作数据,根据不同需要进行调整,注意勾选导出为2.1格式(mtn)。因为只有一个场景,所以我只导出了选中场景。为了应对在后期测试时发现动作有问题的情况,建议在文件-另存为中将修改后的动作另存为can3。
【图】

如果没有动作文件(can3)

没有动作文件的话,我们需要自己录制。在Cubism 3 Editor中,点击右下角的录制,便可自行设计动作。具体方法可以参照官网的说明。最后将动作导出为2.1格式(mtn)。

增加表情

因为兼容性问题,我们用2.1的办法来增加表情和物理效果。
打开Live2D Viewer,引入2.1格式的源文件。如图所示,已经给出了一些例子,另外基本的表情参数也能在官网上找到。在设置时自行调试就行。当然,局限于模型的精细度,一些参数没用上的话,例子也可能并不奏效。
在鼠标按右键保存后,需要更改格式为json。
【图】

增加物理效果

和上一步一样,软件已经给出了头发的物理效果模型。加入即可。之后可以在窗口右边观察更改后模型的情况。

将模型组装起来

根据之前对json的介绍,我们来依样画葫芦。在之前导出模型的操作中,我们已经得到一个json文件,现在用文本编辑器编辑。
将原来的内容:

{
    "type": "Live2D Model Setting",
    "name": "Model[洛天依]",
    "model": "Model[洛天依].moc",
    "textures": [
        "Model[洛天依].1024/texture_00.png"
    ]
}

考虑到尽量避免中文命名和相关的需求,进行相应地修改:

{
    "type": "Live2D Model Setting",
    "name": "luotianyi",
    "model": "model.moc",
    "textures": [
        "textures/texture_00.png"
    ],
    "layout": {
        "center_x":0.0,
        "center_y":-0.05,
        "width":2.0
    },
    "hit_areas":[
        {"name":"head","id":"D_PSD_01"},
        {"name":"body","id":"D_PSD_17"}
    ],
    "motions":{
        "idle":[
            {
                "file":"motions/abaaba.mtn"
            }
        ],
        "flick_head":[
            {
                "file":"motions/= =.mtn"
            }
        ]
    },
    "expressions":[
        {"name":"zhengyan.json","file":"expressions/zhengyan.json"},
        {"name":"biyan.json","file":"expressions/biyan.json"}
    ],
    "physics":"physics.json"
}

此时,模型的文件结构如下:

expressions

zhengyan.json
biyan.json

motions

= =.mtn
abaaba.mtn

textures

texture_00.png

model.json
model.moc
physics.json

进行模型的检查

此时可以在本地服务器上放上看板娘,来检查有无问题。这里选择直接使用保罗大佬的Pio插件来检查。
【图】
显示模型没有问题。
而这时,通过这个插件会出现一些麻烦。
其一,控制台报错:

l2d.js:1 Uncaught TypeError: Cannot read property '0' of undefined
    at o.r.hitTestSimpleCustom (l2d.js:1)
    at o.hitTestCustom (l2d.js:1)
    at o.tapEvent (l2d.js:1)
    at p (l2d.js:1)
    at g (l2d.js:1)

这个是因为我们没有写上hit_areas_custom属性,也因此导致了点击事件没有识别区域,故点击事件全部木大的效果。如果要使用这个插件,有关解决方法在此:看板娘插件文档
其二,表情不加载,需要修改l2d.js来解决。
其三,在缩放中定位出现偏差:即使填写了hit_areas_custom属性,但在拥有源文件的情况下如此这般一则定位可能不准,二则该插件在手机上干脆取消了点击事件。
其四,鸽子画师总是喜欢哔哔赖赖,说自己的模型十分高清,显示出来却一片模糊,岂可修。
如果你使用另一个版本的话,则可以解决第一个和第四个问题,但在解决第四个问题的同时会使得第三个问题更加严重。因此,由于特殊需要,我决定进行缝合,寻找万恶之源的衍生万恶之源

将看板娘放在网页上

引入脚本

无论是保罗大佬的插件还是FGHRSH的一条龙服务,都不能满足鸽子画师和我的需求,因此我找到了上文所说的万恶之源。
百度上有很多关于这个看板娘的教程,但都是告诉添加L2Dwidget.min.js这个脚本,然后使用。关于 L2Dwidget.min.js 这个脚本的源码怎么来的,却没有说明。以至于一开始我这个菜鸟直接下载万恶之源却发现用不了,以为是万恶之源遗漏了L2Dwidget.min.js文件,以至于去其演示页F12偷取,真是贻笑大方。
在此之前,应该准备些什么?在本地或云服务器上安装nodeJs以及cnpm,才能进行编译操作,这一部分的详细情况在参考资料中。
之后,将项目git下来(感谢@叉鸡临时给我补习我Linux的操作)。L2Dwidget.min.js脚本是需要编译生成的。

根据需求进行修改

刚Git下来的目录,是没有 lib和 node_modules目录的。
【图】
接下来我们安装依赖和编译项目,在当前目录打开命令窗口,输入如下命令:

cnpm install

这一步安装依赖和编译项目后,若成功,node_modules目录就生成了。之后,我们执行脚本,编译项目:

cnpm run build:dev

成功后,将生成lib目录,其中的L2Dwidget.min.js和L2Dwidget.0.min.js脚本成功生成。
不过在cnpm run build:dev 运行后,一直不退到输入界面,在成功后需要直接关闭。
当一切看起来完美无缺时,我们按照步骤在网页上插入以下部分:

  <script src="lib/L2Dwidget.min.js"></script>
  <script type="text/javascript">
    L2Dwidget.init();
  </script>

这个时候加载出的是默认配置,可以通过src/config/defaultConfig.js查看到:

  const defaultConfig = {
  model: {
    jsonPath: 'https://unpkg.com/live2d-widget-model-shizuku@latest/assets/shizuku.model.json',
    scale: 1,
  },
  display: {
    superSample: 2,
    width: 200,
    height: 400,
    position: 'right',
    hOffset: 0,
    vOffset: -20,
  },
  mobile: {
    show: true,
    scale: 0.8,
    motion: true,
  },
  name: {
    canvas: 'live2dcanvas',
    div: 'live2d-widget',
  },
  react: {
    opacity: 1,
  },
  dev: {
    border: false
  },
  dialog: {
    enable: false,
    script: null
  }
}

同时,可以定义的部分在src/index.js文件中也有注释。具体的解释请参考官方文档
在引入的时候,为了显示出我需要的模型,需要更改一下模型配置文件的路径:

L2Dwidget.init({
    "model": {
        "jsonPath": "www.example.com/name/model.json"
    }//省略了别的参数,省略部分将加载默认配置
});

当一切准备就绪后,在网页上显示出了人物模型,定位问题也完美的解决了,也通过定义超采样等级使模型清晰起来。但是遗憾的是,并没有满足需求。虽然能够切换表情了,但是冒出了一些更奇怪的问题。比如点击头部只会发生切换表情的事件,再比如多个动作时每次加载只会执行其中一个动作,除非刷新页面等。另外叉鸡还很不稀罕自带的对话框,始终想着FGHRSH大佬的对话框,又美观、功能又多,因此还要继续做修改。

随机的动作

修改cModel.js的第369行开始的if语句:

if (this.motions[name] == null)
{
    this.loadMotion(name, this.modelHomeDir + motionName, function(mtn) {
        motion = mtn;

        thisRef.setFadeInFadeOut(name, no, priority, motion);

    });
}
else
{
    motion = this.motions[name];


    thisRef.setFadeInFadeOut(name, no, priority, motion);
}

修改成:

if (this.motions[motionName] == null)
{
    this.loadMotion(motionName, this.modelHomeDir + motionName, function(mtn) {
        motion = mtn;

        thisRef.setFadeInFadeOut(name, no, priority, motion);

    });
}
else
{
    motion = this.motions[motionName];


    thisRef.setFadeInFadeOut(name, no, priority, motion);
}

切换表情

我的需求是点击头部的时候会切换表情,也会反应点击事件,因此修改cManager.js的第89行:

this.models[i].setRandomExpression();

改成:

this.models[i].setRandomExpression();
this.models[i].startRandomMotion(cDefine.MOTION_GROUP_FLICK_HEAD,
        cDefine.PRIORITY_NORMAL);

如果将思路拓展开来,其它的需求也能通过类似的方法满足。

编译

当我们将所要做的修改工作完成后,再次编译。

cnpm run build:dev

此后新的js文件将替换成原文件。在清除缓存后,这两个问题就能解决,基本满足了需求。可谓舍近求远、南辕北辙、绕道前行的大成功。

将对话框缝合

如果你不需要缝合对话框,到此处的配置便已经满足需求了,只需要在L2Dwidget.init();中修改配置,就能轻松地达成效果。

样式问题和亲爱的F12

简化并引用

引用高清涩图和路径问题

测试效果和评估完成度

参考资料

《大可怜时代》是着重记录风栖第四任社长可怜在位时身先士卒的真实史书(认真脸)。其中作者引经据典、多有考据,工作量巨大,时常废寝忘食、乐不思蜀。终于从6月17日正式开坑,直至7月29日风栖七周年庆典前夕得以勉强敷衍成型。

关于本作的创作初衷(正经向),在作者之前的文章曾有透露:


……
正如上段所述。可怜社长任职以来,一直在谨慎而又周全地处理着有为与无为的问题。就目前看来,可怜社长任职不过一个多月,已经取得了显著的成绩。首先,在上任之初,可怜社长便让圆桌议会将民主制度写入《风栖条例》,解决了前几任社长遗留下来的历史性难题;之后,可怜社长一直保持着不露山水的姿态,走入基层,为人民服务,树立了社长亲民之风的典范;同时在社长的统筹下,风栖社区与各个合作方的联系与合作进一步开展,各项项目均取得了飞速的进展;接着可怜社长以无为的方式促使了社员的自发性宣传,有效地扩张了社区及社区的研究范围,吸引了一些各领域的青年精英,为联合社区注入了新活力;并且在火山的倒退潮流下立场分明地支持外委会工作,对思想的偏颇及时地采取了整风;更难得的是,面临着前任社长的夺权,可怜社长坚持捍卫社区民主,迫使前任社长承认错误,保证不再干涉联合社区内政。在可怜社长的掌舵下,风栖社区扬帆起航,在2020年创造了一个好的开始,也为雾幻公司的各项事务展开注入了定心丸,这份功绩确实无比瞩目。
……


正是因为可怜社长的卓越领导,风栖在第四任社长在位期间得到了长足的发展,在画下不少新饼的同时也偶尔完成了积攒多久的部分填坑工作,例如红叶谷丽莎、雾幻公司等等。因为可怜社长的业绩斐然,其本人也深受风栖众人的爱戴。也正因为如此,在2016年的《存在》划上尾声后,2020年新时代作品《大可怜时代》充当了继往开来的先锋。

在本书结尾,作者向出演本作的众人表达崇高的敬意,同时也向风栖已经离去但曾经发光发热的前辈表达衷心的祝愿。我谨在博采风栖文献之同时,适当做些补充,同时与多方进行了单方面的“梦幻联动”,糊成了此部贻笑大方的史书。在本书完结后,还有《风栖之旅》这部大作继续谱写着新时代的乐章,敬请期待。

另外,由于作者水平有限,再加上时间仓促,难免会出现BUG,遇到这种情况,也就睁一只眼闭一只眼过去了罢。在最后,我想为本书的一些部分再打一点补丁,以期望本书能拥有一个完整的畸形生命。

一、取材问题

本书绝大部分情节设定都尊重历史,从真实事件改编,参考了包括“轻栖游文馆”在内的众多历史文献,具有一般意义上的史料参考价值。

二、角色定位

本书历经提纲、修改提纲、初稿、修改初稿等多次重复造轮子的无用功,以至于角色的定位在不同阶段有着不同程度的更改。

尤其是叉鸡的角色,一开始是想塑造成英明的正面角色形象,后来觉得叉鸡和修行者不是一个人,于是参考了历代最终反派,致力于将叉鸡塑造成最屑的最终反派。

再者是军临含糊不清的叛变,我在二版后否决了一版提纲中关于公平对决的理由,原因是与军临二百五的人物形象不符,故为了增加人物的生草程度,采取了最愚蠢的做法。当然,为了突出主角,对他人的适当削弱是情有可原的,同时,考虑到这并不是发刀向作品,尽量避免伤亡的同时对伤亡采取了淡化处理。

三、风格借鉴

本书创作中,大量借鉴了《存在》的篇章安排。例如保留了序章、前言、后记、诞生等充满风格的部分,但因为是七周年的庆典之鉴作,故本书的重心不再是解迷、黑深残,而主打生草和屑的风格,故本书的风格如果让诸君心生不快、似被喂屎,那正是作者不忘初心的体现,敬请谅解。

为了缓解主线剧情的尴尬,以及营造风栖和谐、有爱的氛围,在本篇结束后,我特意加入了番外部分,同时也拉入了一大批龙套,使得这部具有纪念意义的鉴作更加鉴了,真是可喜可贺,可喜可贺。另外,新增的幕间物语不纳入番外内容,因为幕间物语和主线剧情的关联更加密切,同时也是填坑和凑字数的一个重要手段。

四、几点想法

Q:二点五次元世界的设定?

A:二点五次元是独立于三次元的另一个二百五世界。当然,它也拥有着平行空间。在主世界中拥有的逸事传闻会在二代五次元通过技能、经历来体现。就目前设计来说,并没有将二点五次元范围拓宽的表现,仅仅只是将其冰山一角的风栖部分展现开来。为了找个替罪羊,暂且将二点五次元世界的管理交给了拉文德世界调查局来操办。

Q:最终决战时叉鸡绿色的血液?

A:叉鸡绿色的血液表示其是泥巴人。这点在完全剧透的演员表已经有所暗示,并且在最终决战时也有对复制可怜的暗示。同时,叉鸡对Kira的话,表现出了一种弗兰肯斯坦的剧情。就目前想法而言,倾向于修行者是拥有叉鸡和修行者两种人格的杰基尔博士,在洞察了世界本质后试图以捏造泥巴的方式分离出自己的叉鸡人格,却由于不熟练而产生了一系列失败品,在最终分离成功后却惨遭叉鸡反杀,进而进入了《大可怜时代》的世界线。而在平行世界中,修行者在制造了一系列失败品后,选择先复制可怜,从而进入了另外一条世界线。总之,这种设定,其实是在挖坑,为了之后能够不用费心再构想世界观提供了一个便捷的接口,真是鉴作啊。

Q:那个人是谁?

A:在本篇中被反复提及的那个人可以通过《存在》来解读,当然由于作者的变化,人物形象OOC严重。出于实际考量,对于已经离任的风栖元老,采取了一种较为隐秘的致敬方法。

Q:为什么人物描写很少?

A:因为很多人我都不认识,只能通过主观臆想来自行解决。而外貌描写并非本作重点,因此也就从简了。

Q:难忘的部分?

A:个人感觉在写番外的时候最畅快,简直要飞起来了一样。另外,由于心境变化,对感情戏情有独钟,但真正下笔后又鸽了许久,导致最后几章很不连贯。虽然尽量严谨,在前期设置了一大笔伏笔,但在后期忘得差不多了,真的是多此一举的屑。

Q:第二十章视角转变问题?

A:用叉鸡视角来吐出可怜的无敌,同时也感到叉鸡更屑了,真是可喜可贺,可口可乐。

Q:一些头痛的地方?

比如说后遗症,一看到“说”“道”就觉得头痛,这种强烈的违和感使得写作时对对话部分感到极为苦手,帝天的建议也曾考虑,但最终碍于凑字数还是没有采纳。

由于角色太多,而篇幅有限,所以很多角色打酱油是必须的。

小说的表现力,尤其在战斗方面,实在是很难有动画一般的感觉,至少目前为止还没有什么头绪来解决。尤其在多人运动中,更是写成了过家家。

大纲没用。借用经常在本作引用的故弄玄虚的网抑云名言:“我大纲就是个摆设,上一个小时写的大纲,这个小时写正文,马上就脱纲。”每次都要在床上和洗澡时找到灵感,之后鸽掉。

由于并没有海上乘船的经历,并且引经据典之时也懒得查了,所以本篇严重失真,真是屑作!同时因为鸽太久了,前后文发生冲突就是常事!以至于第十二篇后就向叉鸡抱怨道自己又脱纲了,后来越来越严重,本来想写死迷糊的都没办成!可恶!

Q:冷落枭是谁?为什么“我”形象被毁?

A:因为我打错字了,并且看起来这个名字更中二,并且唯本人也认可了,所以就不改了。这样也好,出事了后就说“我写‘冷落枭’和‘唯’有什么关系”,甩锅那是妥妥的。至于诸君觉得本作中出现的形象不符合自己,那谁叫你不早点给我提建议,活该!

五、提纲摘录

如无特殊情况,涉及到合作方的具体名称均在番外篇展示。部分本篇中未涉及的人物或要点,因避免多次修改,移到番外补充。

本篇中非常重要但没啥卵用的写作特点:迷糊出场被爆破,Kafe退场被枪毙。

拟写提纲时,至少要把人事公开栏的人写到。

前半段叉鸡只能在对话中出现。别人打外敌(Kira、爬爬勇士),我们窝里斗(冷落枭、Kira、叉鸡)。前半篇围绕Kira、冷落枭展开,而后半篇开始进入真正的主线!

六、再次鸣谢

本书的成书过程很大部分上参考了风栖文献,之前也提到过了,这里再次鸣谢文献作者。同时,为了深入了解史实,尽量避免偏差,在写作过程种还不同程度地参考了叉鸡、可怜、帝天、唯等人的建议,在此表示感谢。

本作作为风栖七周年庆典的实力鉴作,能被如此青睐,真是叉鸡瞎了眼了,真是可喜可贺,可喜可贺,再次感谢!

最后,再次鸣谢风栖大家庭,感谢各位的出演、斧正、嘲讽和建议,还好我都没听!

感谢您的阅读!

怨回纥

泛海孤舟上,听潮猛打风。独伤难入睡,身世沉沦中。
飞鸟忽飘逝,星云薆不逢。更愁心欲寄,何处送之能?

生查子

银杏落层云,露水滴衣袂。寒气未散时,神色还如醉。
微阳湖边轻,鸟语花间脆。值此好青春,努力与君会。

渔家傲

白日昏昏春未晓,梧桐落叶萧萧绕。醉眼推云风袅袅,拂小草,微微珍珠悄悄皎。
更念春时风景好,应将浮生欢年少。只是无人同我老,空盼找,斜阳道尽春还早。

鹧鸪天

碧水奔流山又山,曾经年少画神仙。寒风吹彻延延地,清霭铺陈泛泛天。
风流断,水波连。栏杆何意作蹒跚。当初一曲梅花落,黯淡诗人多少年?

临江仙

流水晴光同散,楼台桂树群生。轻风随意捋花丛。往来人沸沸,新旧事匆匆。
昨夜载歌载舞,今朝面色微红。繁华如梦总成空。白云好缱绻,为我酿愁浓。

咕咕!
为了简化操作流程,将范畴缩小到了纯音乐和几个大的主题,不然光是FATE各种角色曲(纯音乐或者非纯音乐)和真爱粉彩姐翻唱的好几个专辑就搞死我了。还有一些纯粹是因为没有热度、没有印象深刻的曲子、没有熟肉、没有专辑或没有相关信息(如《拜托了!爱因兹贝伦咨询室》)以及诸如魔法少女之类过多的衍生作品,而不被统计在内。
另外鉴于本鸽仍有许多Fate系列作品未接触,如CCC这种生肉和无限代码、老虎大乱斗这种格斗游戏,故只能以部分熟悉的音乐安利。
面向对象:FATE系列粉丝
类型:纯音乐
注意:鉴于Fate系列作品在问世后多次翻版更新,发布多张不同版本的专辑,音乐安利时会注意表明对应的专辑。
以下按照名称/类型/主要参与作曲家/最初发行时间 来谈谈。某些信息会适当参考Bilibili、萌娘百科、Bangumi和豆瓣。曲目信息以网易云音乐为准。不出意外的话应该会很久才能填完坑,基本按照发行时间的先后顺序来排列吧。
部分参考于知乎贴吧
开始!


Fate/stay night Galgame 芳贺敬太、永田大祐 2004

Fate/hollow ataraxia Galgame 芳贺敬太、永田大祐 2005

Fate/stay night 番剧 川井宪次 2006

Fate/stay night UNLIMITED BLADE WORKS 剧场版 川井宪次 2010

幻想嘉年华 番剧 高梨康治 2011

Fate/Zero 番剧 梶浦由记 2011

Fate/Prototype 动画 高梨康治 2011

Fate/EXTRA CCC PSP游戏 芳贺敬太、永田大祐 2013

Fate/kaleid liner 魔法少女☆伊莉雅 番剧 加藤达也 2013

Fate/stay night [Unlimited Blade Works] 番剧 深泽秀行 2014

Fate/Grand Order 手游 芳贺敬太、永田大祐 2015

Fate/EXTELLA 游戏 芳贺敬太、永田大祐 2016

Fate/Grand Order ‐First Order‐ 剧场版 川崎龍 2016

Fate/Apocrypha 番剧 横山克 2017

Fate/kaleid liner 魔法少女☆伊莉雅:雪下的誓言 剧场版 加藤达也 2017

Fate/stay night [Heaven’s Feel]: I.presage flower 剧场版 梶浦由记 2017

Fate/Grand Order -Moonlight Lostroom- 动画 川崎龙 2017

卫宫家今天的饭 番剧 椎名豪 2018

Fate/EXTRA Last Encore 番剧 神前晓 2018

Fate/EXTELLA LINK 游戏 芳贺敬太、永田大祐 2018

从漫画了解!Fate/Grand Order 动画 毛蟹、深泽秀行 2018

Fate/stay night [Heaven's Feel]: II.lost butterfly 剧场版 梶浦由记 2019

Fate/Grand Order -絶対魔獣戦線バビロニア- 番剧 芳贺敬太、川崎龙 2019

君主·埃尔梅罗二世事件簿 -魔眼收集列车 Grace note- 番剧 梶浦由记 2019

除了以上,还有些因各种因素额外发行的专辑,归纳就等鸽子回来了再说。这部分按照专辑名称/音乐人/发行时间/关联作品 标注。部分专辑由于某些因素,拥有多张或者延续集,在此通通只标明首张专辑。

Fate/stay night - EMIYA #0 芳贺敬太 2004 Fate/stay night原声补充

Fate/Zero Original Image Soundtrack RETURN TO ZERO ZIZZ STUDIO 2007 Fate/Zero广播剧的CD

Fate/stay night Original Soundtrack & Drama CD: Garden of Avalon - glorious, after image 深泽秀行 2016 阿瓦隆之庭的CD

Fate/Prototype 蒼銀のフラグメンツ Drama CD & Original Soundtrack 1 -東京聖杯戦争- 池田善哉 2017 Fate/Prototype 苍银的碎片 的CD

Fate/Grand Order Orchestra Concert -Live Album- 深澤秀行、三宅一徳 2019 Fate/Grand Order交响乐改编

2
1
3
这就是新时代的掩耳盗铃吗?这就是面对强奸案件少年化的PTSD吗?初中生应该不分男女,高中生不能单独接触,大学生抓紧谈个对象,毕业生必须马上结婚?你避讳什么?既想二胎多生点,又要别人不懂爱,干脆研发无性生殖,直接一个人就能传宗接代!
和谐掉是为了适宜全年龄向吗?这种一刀切还要干多久?小学生有兴趣看这种吗?青春期就不能有情愫吗?着实的1984,反倒是那些整日乱七八糟、有伤风化的狗血神剧、爱恨情仇天天轮播,我可真是谢谢你了!
时代在进步,思想在倒流,越往前走路,越是想低头。你不抬头看看,只晓得找回头路来溜溜,终始在圈子里绕来绕去,与闭关何异!性教育始终缺失,不管;营销号造谣惹事,不管;上级发号施令,下级扭曲执行,怪罪底层人民,不管;索性凡事一刀切,凡事都管管,封建家长制,换了个皮更畅销?更还有上世纪封建的大人们神助攻,一个劲拍马屁吹嘘着粉饰太平,还要自己插手美其名曰“关爱下一代”,然后作文只能正能量,没有正能量跳楼去;然后爱情只能虚无化,血肉感情全都抹杀掉;然后反手律师函、抬头就告状、私下买舆论、明面装正气,教得大腹便便者纵横四海,满面油光?举报、封杀;封杀、举报——然后就是谁的故事又耗资千万,用“心”出发?
得了,我啊,可真是满怀心意地谢谢你啊!


那些口口声声,说一代更比一代强的人,应该看着你们;像我一样,我看着你们,满怀羡慕。
你们拥有了,我们曾经梦寐以求的权利,选择的权利。你所热爱的就只是你的生活。你们有幸遇见这样的时代,但是时代不得不更有幸,遇见这样的你们。我看着你们,满怀敬意。向你们的专业态度致敬。
你们正在把传统的包装成现代的,把糟粕的变成流行的;把吹胡的变成学术的;把民族的变成厕所的。你们把一个和成千上万的人分享快乐的事业,变成了自己的热爱。向你们的自信致敬。
弱小的人,才习惯嘲讽与否定;强权的人,从来贪图鼓励与赞美。向你们的大气致敬。同而不和小人,美美与共君子,自不平等。
有一天我终于发现,不只是我们在启发你们如何生活,你们也在管我们,怎样去更生的活着。
那些憧憬一代更比一代强的人,应该看看你们,就像我一样,我看着你们,满怀感激。
因为你们,这个世界会更喜欢中国。因为一个国家最好看的风景,就是这个国家的你们。因为你们,这世上的小说、音乐、电影所表现的青春就不能是忧伤迷茫,而是善良、勇敢、无私、无所畏惧,是心里有火,眼里有光。不应活成我们想象中的样子,我们这一代人的想象力不足以想象你们的未来。
如果你们依然需要我们的祝福,那么,奔涌吧,前浪。我们在同一条奔涌的河流。

6.13 咕咕
6.14 还没想好
6.15 头晕 鸽了
6.16 准备阶段考试以及阅读校对《存在》
6.17 如上
6.18 略
6.19 下次一定
6.21 昨天忘了说前天忘了更了
6.24 鸽了

火种是什么?火种是传递者,亦是被寄予希望者;相较于前者,后者是大前提。无人寄予希望的火种无法实现价值,只能于荒野中孤独地燃烧殆尽;被寄予希望的火种才有方向和目标,才会具备传递燎原之火的实力。

当火种被寄予希望时,如何教它能传递下去?清明节时,我去给先人烧纸,当明亮的红焰被淹没于层层纸钱之下,当烟雾已然断绝多时,火种似乎决然归寂了。这时猛地翻开上层的纸,隐藏于其下的那蓝色焰心,忽然窜出新的红色火焰,继续燃烧。我们常注视着火焰最广大的红焰,却经常忽略着内部极端的芯;红色的火焰在燎原时最是平凡,蓝色的火焰则显得极端格格不入;红色的火焰甚是能煽动人心,而极端的焰心总是冰冷无情。

可是火种之传递,需要极端的芯。极端的芯是火焰延续的根本。外焰张扬,焰心内敛;外焰昌盛,焰心委琐;外焰圆滑易散,焰心偏僻难消。当草原被燎原的火烧彻,若不开辟新的战场,如何教燎原大火延续?是需要上面的风来吹唤吗?但零星的外焰一碰就死,如何是好?是不指望火种,只期望大火尽兴扩散?然则若周遭尽是些湿泥,如何使得大火跨过此坎?大火将火种包裹为极端的芯,使之在风的鼓舞下激流勇进,来栽植于新的天地,将火焰延续。

除此之外,极端的芯还是推动火焰与空气中庸的动力。大火之烧彻,确实需要外焰的奋力,而绝不可少焰心的扎根。你可随时扑灭外焰,而极端的焰心却随时准备复燃。可焰心毕竟是极端,它无需也无法与大众的空气亲密接触,便借着极端的言语,掺和空气中的氧,中庸出新的外焰,使之圆滑而满意,得以绽放出耀眼的光芒。没有焰心的火焰是死的,因之缺少极端的激情,终将被一阵凌烈的寒雨浇灭;只有那一小撮极端的芯,始终如一地辅佐着外焰,才教得火种成为曙光。

但也绝非任何极端的芯都是必需品。作为极端的芯,它必须极端、精简、稳固且被寄予希望,即极端的芯需要纯正的资格。所谓极端,就是要异议,当软弱的外焰成为墙头草,极端的芯要将之中庸式地扶正;所谓精简,则表明极端的芯仅仅需要却也只可需要一小部分,多则为空气不容,少则令火焰无力;所谓稳固,要求极端的芯需要保持自己的极端性,虽然会遭到很多的诽谤非议,却必须要发出声音;所谓被寄予希望,证明极端的芯需要属于被寄予希望的火种,它源于天下的大火,了解自己的方向和角色,不会越界破格,亦不会嘈杂脏污。只有保持纯正的资格的火种,拥有纯正的不多不少的焰心,才能促使光明的火焰产生及壮大。

极端不是错误的代名词,相反,火种所以为希望的延续,正是因为极端的芯的特性。无论在何处,我们都希望火种能载着希望延续,无论在何处;无论在何处,极端的芯都将艰难刻苦地做着本分工作,却清醒地认识自己的工作并非无意义。燎原的火种,要承载着希望,朝着明确的方向,将风化为推力,将湿泥无视,执着地飞进新天地,去开辟新的曙光,去燃烧新的热情,绝离不开遭人轻视的极端的芯。社会宛如草原,制度好似大火,人类便是空气,火种正是延续的光芒,极端正是火种的本源。

当时过境迁,原来的燎原大火逐渐黯淡,甚至被杂质污染,我们需要被寄予希望的火焰,亦呼唤被寄予希望的极端的芯。它,他们,可能在这段时间四散,可能极端到空气不容,但若他们真的是纯净的,他们将作为恶者推动正义的曙光绽放,我相信这便是更加美好的制度诞生的过程。

在众人随着流量摆动之时,当歧视仍然隐藏于草丛中之时,当血染的馒头被资产伪装之时,当社会的大火展开黑色的獠牙扑面而来时,我渴求具有极端的芯的火种能够出现。那些具有极端的芯的激情的火种们,请坚持下去,并为吾等带来澄澈的烈焰罢!


灵感源于叉鸡