1、确定两个人用的版本一模一样,否则会出现your lua files aren*t the same as server,那时你就跪了,并且双方必须同时打过某种mod或都没有打过mod,只有其中一人打了某种mod而另一人没有是无法连接的,不管是内置还是需要手动启动的mod。确定这个是最基础也是最必须的,因为这个和别人联机的时候跪了数次。。。。
2、如果已经确定版本完全一致后,就可以开始以下步骤了,首先,安装个蛤蟆吃,并且和基友连上,关于这个的方法自行百度,教程满天飞。
3、接着先设置服务器,如果想玩物资为稀少,一天一小时,很早停水停电的联机的请无视
打开你游戏的根目录,找到这个
点开它
点击左上的settings,然后找到
点击,会叫你选择服务器文件的保存位置,保存在
然后确定,接下来可以开始设置
这些选项都可以在沙盒设置中找到对应的中文,我就不细说了,只告诉你们,第一个是僵尸数量设置
day length是一天长度,water shut off和electricity shut off是停水停电时间设置,loot rarity是物资丰富度
rere是稀少,abundant是充足,也是最多的选项。
点击zombie lore,把那个勾去掉可以设置将是选项
同样可以在沙盒中找到,transmission是感染方式,选择never还是none就是从不感染,infection mortality是感染致死时间,选择instant是立刻就死,当然你选择了从不感染就不用管它了。其他的随意,设置完以后点save然后确定即可。
4、接下来就是比较重要的步骤了,打开开服器(一般拉到最底就可以看见),
xp一般都选32位开服器,win7可以在桌面上右键计算机,点属性看系统位数然后选择相应的开服器。第一次开服它会让你设置密码,随你喜好,设置好以后他会要确认密码,在输一遍即可。然后,关掉开服器。没错关掉它。也别急着开游戏。
5、很多人都不知道如何选地图,如何设置一个固定出生点,万能的撸主就在此大发慈悲的教导你们!
找到zombied文件夹,这个文件夹不在我的文档里面,xp在c盘documents and settings/administrater下
win7在c盘user/username(就是你给自己电脑用户命名的名字)下
打开它,找到server文件夹,再打开,打开servertesti,用记事本打开
第一个pvp,就是选择是否允许人类互相伤害的选项,把true改成false就不会有队友伤害
spawnpoint,可以强制固定出生点
map,就是选择地图
下面那个新手别去管他,和出生点的可选择设置有关,但撸主一直未能解读里面所指向的文件的编码,在此就不做说明
pinglimit,这个事在网络稳定状态下最高延迟限制,超出的会被自动踢出,如果有基友的延迟高可以改成2000啊什么的,但是高于400还是建议你别连了,碰到三个僵尸的话僵尸就会莫名其妙消失外带瞬移。。。。
改好了这些,ctrl+s保存,然后重新打开开服器
开服器加载完毕后,打开游戏,进入多人游戏界面,服主在ip里填127.0.0.1即可,但其他人必须填你的蛤蟆吃地址。
服务器命令可以在开服器的cmd窗口输入,不在游戏内输。
如果版本完全一致但机油仍被提示lua文件不同的话吧zombied/mutiplayer文件夹下的severtest文本删掉,实在不行把这个zombied文件夹删了都行,不碍事,丢点单机存档而已,反正可以还原。
僵尸毁灭工程
Project Zomboid发行商:Indie Stone Studios平台:PC类型:角色扮演(RPG)发售日期:2013年11月8日进入专题>>随着需求不断迭代,业务系统的业务代码突飞猛进,在你自豪于自己的代码量产出很高时,有没有回头看看线上真正的客户使用量又有多少呢?
~费事费力耗费大量人力成本~上线的功能,可能一年没人使用,如果不进行适当的下线,就会增加系统维护成本,此时就需要计划删除无用代码。但是我们怎么知道真实线上的一行行代码层面,是否真实在使用,或者真实没人用,怎么可以放心删除下线功能呢!
二. 分析原因实际上多数业务系统都会存在这个通病:线上僵尸代码
•可能是前期产品对业务场景没有分析到位
•可能是研发期间需求功能偏离了正确方向
•可能是上线后因外界因素使客户业务量下降
•······
三. 采取措施问产品经理哪些能下线?NO 没人敢承诺
观测 UMP接口是否有流量?NO 只知道接口维度,有流量的接口难道所有代码都有用么
使用jacoco(Java Code Coverage)进行线上代码分析,对系统做瘦身。
Jacoco本质上是一个测试覆盖率工具,通过A字节码增强技术在源代码中加入探针从而获取代码覆盖率。Jacoco主要是通过Jave agent在main函数执行之前通过指定方法在执行的代码中加入探针来记录代码是否被执行过。
Java agent是Java提供的一个启动参数,有别于代理方式的动态增强和annotation processor的编译时增强,该参数通过指定路径的jar包中的premain方法将在main方法执行之前被调用增强源代码,通过实现该方法我们可以对加载的Class文件进行修改源代码增强,使用此技术的还有大部分APM工具。
https://www.jacoco/jacoco/trunk/doc/index.html
四. 实践步骤4.1 依赖jacoco.ant在工程内的pom中引入jar依赖
<dependency> <groupId>org.jacoco</groupId> <artifactId>org.jacoco.ant</artifactId> <version>0.8.3</version></dependency><dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.9.9</version> </dependency>4.2 赋能Rest请求
添加一个url地址,通过ant执行dump task用于Dump Coverage文件,避免使用配置文件且同时需要运维同事帮忙操作的问题。
@RestController@RequestMapping("/coverage")public class CoverageController { @PostMapping("dump") @NoCheckMenuPermission public Result<Boolean> dumpCoverageFile() { DumpTask dumpTask = new DumpTask(); // dump文件地址 dumpTask.setDestfile(new File("/export/Data/coverage/code-cover.exec")); // 多次dump追加形式 dumpTask.setAppend(true); // 选一个空闲接口即可 dumpTask.setPort(8840); // 默认本机 dumpTask.setAddress("127.0.0.1"); dumpTask.execute(); return Result.succeed(true); }}4.3嵌入jacocoagent
由于jacoco需要在服务端由jacocoagent增强的jar包,为了避免需要麻烦运维同事,通过maven依赖我们可以发现org.jacoco.agent这个jar包中包含由jacocoagent这个包,所以通过在部署的启动脚本添加以下命令即可通过解压的方式获得该jar包!
java启动参数添加如下:存在多个javaagent时比如pfinder之类在其后添加即可。
#decompress file 解压依赖,获得jacocoagent.jar包,避免需要联系运维上传包jar -xvf $BASEDIR/lib/org.jacoco.agent-0.8.3.jar
-javaagent:$BASEDIR/bin/jacocoagent.jar=includes=com.jdwl.*,output=tcpserver,port=8840,address=127.0.0.1 -Xverify:none
premain方法中我们可以通过Instrumention的addTransformer添加ClassFileTransformer接口的实现类,该接口中仅有一个方法如下,通过实现ClassTransformer我们可以定义自己的代码增强方法。可以使用A,亦可以使用javasist等高级类库。
相关实践:Diving Into Bytecode Manipulation: Creating an Audit Log With A and Javassist | New Reli
4.4 JDOS资源预留资源预留/export目录自定义处理
增加配置脚本 /home/admin/clean_export.sh(脚本默认内容上增加了 && $9 != "coverage")输出的文件路径为/export/Data/coverage/code-cover.exec
#! /bin/bashls -lh /export | awk 'NR >1 {print}' | awk '{if ($9 != "Data") print $9}' | xargs -i /bin/rm -rf /export/{} > /dev/null 2>&1ls -lh /export/Data | awk 'NR >1 {print}' | awk '{if ($9 != "jdos.jd" && $9 != "coverage") print $9}' | xargs -i /bin/rm -rf /export/Data/{} > /dev/null 2>&1
4.5 下载cover文件/export/Data/coverage/code-cover.exec
登录堡垒机终端
cd /export/Data/coverage
jdos下载文件
curl -s up.bastion.jd/file/up | bash4.6 分析代码
打开idea -> run -> show coverage data选择对应的exec文件即可获取服务端的代码覆盖情况。
绿色覆盖(活跃代码)
红色未覆盖(僵尸代码)
Reference
JaCoCo - Documentatiojavaagent使用指南 - rickiyang - 博客园 (cnblogs使用Jacoco统计服务端代码覆盖情况实践 - M104 - 博客园 (cnblogsDiving Into Bytecode Manipulation: Creating an Audit Log With A and Javassist | New Reli五. 效能提升5.1 需求交付效率提升5.1.1 缩短需求交付周期因为僵尸代码删除,减少开发需求的范围,降低老代码认知成本,降低测试回归成本。
需求交付周期整体呈缩短趋势!2023/1月落地实践,之前需求交付周期约15天,之后约12天。
5.1.2 降低开发阶段停留时长僵尸代码大量存在,研发认知需求改动点负荷很高,需要耗费大量时间成本。
2023/1月落地后,开发阶段时长缩短到 4天 以下(由 4.54 缩短至 3.11,缩短约31%),呈明显缩短趋势!
5.2 人效提升5.2.1 降低研发认知负荷删除无用僵尸代码,圈复杂度会大幅度降低,重复代码块也会降低,则研发认知负荷也会随之降低!
平均系统重复代码块数从 31 下降至 27 左右,降低了系统维护成本!
5.2.2 提升人均需求吞吐量因为减少人力认知成本,缩小需求范围,所以会直接提升需求的吞吐量!
自从2023/1月落地实践后,人均需求的吞吐量也大幅度提升,从之前 1.5 提升到 2.5 左右。
5.3 过程质量提升5.3.1 减少自动化bug数由于存量僵尸代码减少,则整体回滚用例和场景变得精简,黄金流程也不会被僵尸代码干扰,则自动化bug数也有明显下降趋势!
随着2023年1月以来的不断实践,自动化发现的bug数也逐月递减,从11个/月 -> 9个/月 -> 6个/月 -> 5个/月。
5.3.2 提升单测覆盖率自从2023年1月落地实践后,随着删除掉大量僵尸代码,整体代码总量在减少,无效代码被无情下线,同时提升了单测代码覆盖率,呈上升趋势!单测行覆盖率从 51.33% -> 52.28%,提升系统质量!
六. 简要总结随着需求不断迭代交付,业务代码必然不断累积,运维成本不断升高,如果线上无用功能的代码一直残留,对研发来说是巨大的累赘!对于此类代码约定俗成为 “僵尸代码”。赶快利用jacoco探针深入分析系统的一行行代码,看到线上功能运行最真实的一面,参照代码的覆盖情况,针对性下线和删除僵尸代码,让系统瘦身,让研发减负!作者:京东物流 周奕儒
来源:京东云开发者社区 自猿其说Tech
Project Zomboid
【游戏介绍】
《僵尸毁灭计划》(Project Zomboid)是一款僵尸肆虐的开放结局沙盒游戏。它只为玩家带来一个简单的问题—你会怎么死?在僵尸横行的马尔德劳(Muldraugh)和西点(West Point),幸存者们必须搜刮房屋,构建防御工事,尽一切可能延迟他们不可避免的死亡—哪怕只是多活一天。这里没有救援—要继续活下去全靠他们自己的计谋、运气和能力来躲避无尽的僵尸潮。
【游戏截图】
【游戏测评】
以下是对新人玩家的一些游玩建议
1时请勿关闭音量
2.心血管疾病患者与癫痫患者请调低音量
3.室内清扫房间时警惕开门杀,可通过叫喊后倾听砸门声确定门后有没有僵尸
4.常驻室内时,请关闭所有窗户并放下窗帘,对于没有窗帘的窗户/带窗门/玻璃门可以挂上窗帘布起到一样效果(挂上后记得放下)
5.灶台与烤箱除了烹饪食材,不要放入别的东西
6.做饭结束记得关火
7.对于上锁的门,可以翻窗进入
8.被打破的窗户在翻入前,请先清理掉窗沿上的碎片,避免划伤或是碎片刺入
9.保证身体与衣物清洁,武器也可以清洗;过于脏污的衣服可能会导致染病,血污较多的衣物配合上身体创口可能导致感染尸毒
10.对着开关点左键可以打开/关闭室内灯光,多数家具也可以以此互动
11.无论室内室外,翻找橱柜或是捡尸时建议时不时看一下身后
12.对抗僵尸时建议也按照第十一项行事
13.裹住伤口的绷带与创口贴等随着时间最终会变脏,长时间不更换可能导致伤口感染
14.脏绷带可以洗干净,除非你想用污水;创口贴在肮脏后取下会直接消失
15.上锁的车辆可以砸开车玻璃进入(可能触发警报),但其他车门与后备箱依然要靠进入驾驶位以后解锁
16.进入车辆后手套箱内也会有物资,有时车钥匙也会放在里面
17.在车内按V键开启车辆轮盘,锁门/空调/车窗与座位更换都可以在此控制
18.小心驾驶,行车不规范,破窗自助餐
19.避免驾车碾过尸潮,毕竟趴窝等于开席
20.必须要闯过尸潮时,锁好门关闭窗户,砸开车窗的车辆不要闯进尸群里
21.下车时记得拔掉带走钥匙
22.不建议在夜赶路,如必须要走夜路时请带上手电
23.如果你的手电打不开了,那就是要换电池了
24.在射击等级较低时,请勿对着尸群开枪
25.避免在街道中开枪,除非你有把握面对枪响后四面八方涌来的僵尸
26.弹匣满时长按R键可以额外上膛一发子弹(30+1),或是退掉所有子弹
27.如果你的射击等级很低,但真的很喜欢枪,拿起喷子吧
28.射击时, 尤其注意身后
29.匕首在背刺僵尸时,靠近僵尸可处决其一击秒杀,但有一段动作硬直,并且匕首可能留在尸体身上
30.近战砍僵尸时,除非你听到了清脆的骨骼破裂声,否则多砍几刀
31.如果你站在尸堆上左键却是向着地上砍去时,小心没死透的僵尸
32.你不是斯巴达,打不过就跑吧
33.如果你被咬伤,之后开始发热,请告知队友并准备后事
34.平常带上一份毛巾,身体潮湿时可以把自己擦干净防止感冒;潮湿的毛巾在一段时间后会自行干透
35.拿上一个腕表可以让你知道当前时间,只要放在背包里即可;而电子表还能让你知道日期和当前气温(华氏度)
36.感冒后时不时地会突然打个喷嚏,带上卫生纸可以避免引起僵尸注意
37.僵尸造成的伤害区别为撕裂伤与咬伤(手抓与啃咬),撕裂伤有一定概率不受感染,而咬伤大概率感染尸毒
38.感染尸毒的症状表现为被僵尸咬伤的一段时间后毫无征兆的持续发热,之后根据进入游戏前的设定会在一定时间内倒下并起尸,而感染尸毒后死亡尸体也会再次爬起来
39.当想破窗进入车辆时,在相应车门前一定距离内(脚下有绿色方框)对着车门底端按右键,便会有破窗选项;破窗时有概率划伤自己,甚至造成有玻璃碎片刺入的深伤口
(这个判定位置非常怪,类似于角色脚的高度,如果右键的位置比较靠上则菜单里不会有破窗的选项)
(后日补:站在绿框中直接按V键呼出轮盘,里面包含破窗选项)
40.不要贸然进入树丛:树木与灌木会遮挡视线,角色在穿过树木时也有概率划破衣服并划伤自己;有僵尸穿越的树木模型会晃动
41.完全封锁没有窗户的房间,可以用武器直接将门破坏进入,当你有足够工具时也可以拆解大门进入
42.空旷的室外比起狭窄的房间更适合应对大量僵尸,但请 小心身后
43.为枪械配套携带有多个弹匣时,持有该武器并长按右键,在呼出的圆盘中便可为空弹匣压弹
若在背包中单独点选弹匣压弹,如携带有多个弹匣会默认叠放一格,装满的弹匣则会放置于最上层,导致下方的空弹匣无法显示在右键菜单中
44.武器配件的安装需要从武器的右键菜单中设置,安装时需持有螺丝刀(置于背包中将自动取出占据主手,建议在安全环境中安装)
45.大型只能背负在背部(霰弹枪、步枪、自动步枪),而小型武器可以置于穿戴后的枪套中(手枪、部分
mod中的短冲锋枪),单手近战可以挂在皮带上
以上操作均为以数字键快速切换武器,增加应变能力
46.命中率会随着瞄准时间增加,移动会命中率,因此不建议于室内CQB中使用火器