您的位置:网站首页 > net源码 > 正文

我的世界》18刷怪机制源码解析net源码

类别:net源码 日期:2015-2-15 18:53:02 人气: 来源:
重庆中考论坛zslpsh,重庆学校zslpsh,重庆学校zslpsh,重庆市中学生网,重庆中学生网,重庆中学生网站,重庆中学生网好,重庆中学生学习网,重庆中学学习网,重庆中学生网家教,重庆中学生论坛,重庆学生zslpsh,重庆高考论坛zslpsh,重庆中学排名zslpsh,重庆中学zslpsh,重庆中学生,重庆学生网中考,重庆中考zslpsh,重庆中学生交友,重庆初中生,重庆中学生学习网,重庆土话网,西南云南方言网,最新电影淘娱淘乐,tianyanmao.cn,重庆18680好,岳阳yy房产网,重庆18680,云南西南方言网,网店taoyutaole,电影淘娱淘乐,最新电影淘娱淘乐,电影淘娱淘乐,娱乐资讯taoyutaole,影视淘娱淘乐,taoyutaole笑话,taoyutaole淘娱淘乐,娱乐taoyutaole,时尚taoyutaole,重庆生活新闻,贵州西南方言网,027旅游新闻网,重庆特产18680,0871昆明旅游人才网,重庆生活18680好,观赏虾之家zadull,022天津交友,022天津交友网,水草造景zadull,18680重庆特产,0755深圳交友网,0755深圳旅游招聘,0755深圳旅游招聘网,0755深圳旅游新闻

  《我的世界》中如何刷怪?今天给大家带来玩家“etflly”总结分享的1.8刷怪机制(源码解析),感兴趣的一起来看看吧。

  昨天把MC中刷怪的源码过了一遍,主要部分是net.minecraft.world.SpawnerAnimals中的findChunksForSpawning函数。有些刷怪机制还是wiki上没有涉及或描述不准(精)确的。明确刷怪机制对刷怪塔制作还是很有帮助的,这里把刷怪的流程简述一下。

  MC源码:点击进入

  刷怪机制

  注:循环嵌套比较乱,我将几个循环从大到小定义为刷怪循环(每种生物类型进行1次),区块刷怪(每个可行区块进行1次),刷怪(每次区块刷怪进行3次,每次刷怪只会刷一种生物),刷怪尝试(每次刷怪进行4次刷怪尝试)

  findChunksForSpawning在每个游戏刻运行一次,其参数是(WorldServer world, boolean

  spawnHostileMobs, boolean spawnPeacefulMobs, boolean

  isAnimaltick),world不需多说,spawnHostileMobs表示是否生成性生物,spawnPeacefulMobs表示是否生成和平生物,isAnimaltick表示这个tick(游戏刻)是否应该生成动物。其中isAnimaltick的算法是在游戏的总时间

  % 400 == 0,即20s一次

  如果spawnHostileMobs和spawnPeacefulMobs均为lse,直接退出

  统计应该刷怪的区块及其数量。即每个玩家(非观察者)所在区块东南西北四个方向各延伸8个区块,共1717区块(不是圆形区域),但是边界的区块是只计入刷怪区块个数,并不会进行刷怪的。当多个玩家的刷怪区块重叠时,重复区块只会记录一次。(这里有一个bug,如果一个玩家的刷怪边界区块在另一个玩家刷怪区块内部,那么这个区块会在计算区块数时被统计两次,会使刷怪上限不准确,不过刷怪时还是只会对这个区块刷一次,所以影响不是特别大)

  对每一种生物类型(、动物、水生、):如果当前类型可以刷(取决于spawnHostileMobs,

  spawnPeacefulMobs,isAnimaltick三个参数),则进行一次刷怪循环(5 -

  12)。(这里有一个非常严重的bug,豹猫的生成在的刷怪循环里! ,见附2)

  计算刷怪上限和已有数量。实际刷怪上限为刷怪单位上限(见附1) 刷怪区块数 /

  (1717)。数量统计的部分还没看(TODO),根据已有说法,应该是已加载区块中生物总数,具体生物类型见附1。如果已经到达刷怪上限,则退出本次刷怪循环。

  对每一个刷怪区块进行一次区块刷怪(7 - 12)。

  在区块中随机选取一个中心方块,先随机选X,Z,之后选Y,Y不会高于当前(X,Z)的最高值+16(应该是这样,没太仔细看,这样一来刷怪的高度就没有了,即可能刷在玩家128格外,不过可能刷出后会直接despawn,待细读TODO)。如果选中的方块是一个NormalCube(见附5),则放弃在此区块刷怪,否则进行3次刷怪(8

  - 12),每次只刷一种生物。

  每次刷怪的初始化工作:将刷怪坐标(x,y,z)初始化为中心方块,重置要刷出的生物。然后进行4次刷怪尝试(9 - 12)。

  每次刷怪尝试的初始化工作:将现在的刷怪坐标(x,y,z)的x,z坐标随机加减0~5(4次最多加减20,事实上是可能超出当前区块的),如果当前半径24米的圆内有玩家(非观察者)或spawn

  point,放弃本次刷怪尝试进行下一次。

  如果还没有确定本次刷怪的,则根据当前坐标可以刷出的,随机确定一个,随机算法为权值随机。具体每种生物群系(建筑)可刷及其权值见附2。

  如果当前允许刷出这种,且当前满足生物刷怪要求,则进行刷怪。

  判断此种生物在当前区块是否已达到上限(见附4),若是,则退出本次区块刷怪(不会再去进行本区块其他生物的刷怪)。

  附1. 类型及刷怪单位上限(17 17为单位)

  注:本节表示括号内的被统计在相应类别的数量中,并不一定会在相应刷怪循环中刷出

  注2:骑士生物(如僵尸鸡骑士)的坐骑也算作单独的生物

  :上限70(骷髅,僵尸,巨人僵尸,蜘蛛,洞穴蜘蛛,爬行者,女巫,史莱姆,蠹虫,恶魂,岩浆怪,僵尸猪人,烈焰人,凋灵骷髅,末影螨,末影人,者,远古者,龙,凋零)

  动物:上限10(鸡,牛,哞菇,豹猫,猪,兔子,羊,狼,马)

  :上限15(蝙蝠)

  水生:上限5(鱿鱼)

  附2. 每种生物群系(建筑)可刷及其权值

  TODO

  附3. 各种生物刷怪要求

  (脚下方块为当前方块y坐标-1,头顶方块为当前方块y坐标+1)

  鱿鱼和者:当前方块是液体,脚下方块是液体,头顶方块不是NormalCube

  其他:脚下方块有完整的上表面,且不是基岩、屏障;当前方块不是NormalCube且不是液体;头顶方块不是NormalCube(头顶方块没有液体判断)

  每种生物还有更具体的要求,待补充TODO

  附4. 每种生物单个区块刷怪上限

  TODO

  附5. NormalCube定义及列表

  TODO

关键词:net源码
0
0
0
0
0
0
0
0
下一篇:没有资料

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

CopyRight 2002-2012 技术支持 源码吧 FXT All Rights Reserved

赞助合作: