一哥手游欢迎您
QQ登陆 注册 找回密码
查看: 1235|回复: 0

[精品玩法攻略] 【1.8】我的世界源代码解读-刷怪机制

[复制链接]
  • TA的每日心情
    开心
    2024-10-15 19:31
  • 签到天数: 37 天

    [LV.5]

    管理员

    Rank: 9Rank: 9Rank: 9

    性别
    帅哥
    阳光
    3342
    人气
    25774
    G点
    10982
    任务金卷
    0
    居住地
    湖北省 宜昌市
    QQ
    QQ
    玩的手游
    刀塔传奇

    卓越贡献元老勋章

    发表于 2015-10-10 22:48:39 | 显示全部楼层 |阅读模式
    我的世界源代码解读-刷怪机制,今天大家带来这个我的世界玩法解读,希望大家喜欢。我的世界刷怪机制。我的世界1.8。
    1.JPG
    重要结论

    怪物、水生、环境生物刷怪为每游戏刻(1/20秒)一次,动物每20s一次。

    可刷怪区块为距离任一玩家所在区块7个区块之内的区块。(可刷怪区块不等于统计怪物数量的区块)

    刷怪上限为刷怪单位上限 * 可刷怪区块数 / (17*17),单位上限:怪物70,动物10,环境15,水生5。

    对每种生物类型,每个可刷怪区块单独刷怪,都会刷最多3组怪,每组所刷生物相同,每组最多刷4只。一个区块所刷怪物Y坐标相同。

    玩家半径24米的球内、Spawn Point半径24米的球内不能刷怪。

    同类型各种生物的刷怪概率是不同的,比如在主世界的大部分生物群系,怪物中女巫的刷怪概率最低,动物中牛的刷怪概率最低。

    露天区域怪物刷出会相对稀少。

    虽然亮度小于等于7时均可刷出怪物,但亮度越低概率越大。

    刷怪塔的刷怪区域位置的方块最高高度(即对一个(x,z)来说,存在方块的最大的y)越低,刷怪越频繁。降低刷怪塔的高度(不是说层数)这比提高挂机点高度更有效,提高挂机点高度只可以把过低的位置的怪despawn掉,怪物仍会在低处生成,会占用刷怪塔的刷怪概率;但是降低刷怪塔高度可以直接提高怪物刷在塔内的概率。

    豹猫在怪物刷怪循环中刷怪,但计入动物数量。

    只有橡木林和针叶林才能刷狼。

    史莱姆应该在游戏中满月时生成概率最高而在月朔时不能刷出,但实际这段代码写疵了(调用游戏总时间时实际调用了游戏中一天内的时间),于是无论何时月相都被错误的认为为满月。

    蝙蝠在现实时间10月20日~11月5日时刷出更频繁且刷出亮度要求更低,应该是为了迎合万圣节气氛。

    2.JPG

    刷怪机制

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

    findChunksForSpawning在每个游戏刻运行一次,其参数是(WorldServer world, boolean spawnHostileMobs, boolean spawnPeacefulMobs, boolean isAnimaltick),world不需多说,spawnHostileMobs表示是否生成攻击性生物,spawnPeacefulMobs表示是否生成和平生物,isAnimaltick表示这个tick(游戏刻)是否应该生成动物。其中isAnimaltick的算法是在游戏的总时间 % 400 == 0,即20s一次

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

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

    对每一种生物类型(怪物、动物、水生、环境):如果当前类型可以刷(取决于spawnHostileMobs, spawnPeacefulMobs,isAnimaltick三个参数),则进行一次刷怪循环(5 - 12)。(这里有一个非常严重的bug,豹猫的生成在怪物的刷怪循环里! ,见附2)

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

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

    在区块中随机选取一个中心方块,先随机选X,Z,之后选Y,Y不会高于当前(X,Z)的最高值+16(即高度上没有和玩家的距离限制,不过离玩家过远的刷出后会直接despawn)。如果选中的方块是一个    NormalCube(见附5),则放弃在此区块刷怪,否则进行3次刷怪(8 - 12),每次只刷一种生物。

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

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

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

    如果当前位置允许刷出这种怪物,且当前位置满足生物刷怪要求(见附3),则将怪物刷出。

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

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

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

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

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

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

    环境:上限15(蝙蝠)

    水生:上限5(鱿鱼)

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

    主世界

    基础刷怪: 峭壁(Extreme Hills),峭壁 M(Extreme Hills M),悬崖(Extreme Hills Edge),桦木森林(Birch Forest),桦木森林山丘(Birch Forest Hills),桦木森林M(Birch Forest M),桦木森林山丘 M(Birch Forest Hills M),黑森林(Roofed Forest),黑森林 M(Roofed Forest M),峭壁+(Extreme Hills+),峭壁+ M(Extreme Hills+ M)

    怪物:蜘蛛(100),僵尸(100),骷髅(100),爬行者(100),史莱姆(100),末影人(10),女巫(5)

    动物:羊(12),兔子(10),猪(10),鸡(10),牛(8)

    水生:鱿鱼(10)

    环境:蝙蝠(10)

    森林(Forest),森林山丘(Foreset Hills)

    动物:增加狼(5)

    针叶林(Taiga),针叶林 M(Taiga M),针叶林山丘(TaigaHills),冷针叶林(Cold Taiga),冷针叶林 M(Cold Taiga M),冷针叶林山丘(Cold Taiga Hills),大型针叶林(Mega Taiga),红木森林(Mega Spruce Taiga),大型针叶林山丘(Mega Taiga Hills),红木山丘(Mega Spruce Taiga Hills)

    动物:增加狼(8)

    丛林(Jungle),丛林 M(Jungle M),丛林山丘(JuncleHills)

    怪物:增加豹猫(2)

    动物:增加鸡(10)

    丛林边缘(Jungle Edge),丛林边缘 M(JungleEdge M)

    动物:增加鸡

    平原(Plains),向日葵草原(Sunflower Plains)

    动物:增加马(5)

    热带草原(Savanna),热带草原 M(Savanna M),热带高原(Savanna Plateau),热带高原 M(Savanna Plateau M)

    动物:增加马(1)

    蘑菇岛(MushroomIsland),蘑菇岛岸(MushroomIslandShore)

    动物:只有哞菇(8)

    其他:清空

    沼泽(swampland),沼泽 M(Swampland M)

    怪物:增加史莱姆(1)

    沙滩(Beach),寒冷沙滩(Cold Beach),沙漠(Desert),沙漠 M(Desert M),沙漠山丘(DesertHills),平顶山(Mesa),平顶山(岩柱)(Mesa (Bryce)),平顶山高原 F(Mesa Plateau F),平顶山高原 F M(Mesa Plateau F M),平顶山高原(Mesa Plateau),平顶山高原 M(Mesa Plateau M),海洋(Ocean),冻洋(FrozenOcean),深海(Deep Ocean),河流(River),冻河(FrozenRiver),石滩(Stone Beach),冻原(Ice Plains),冰刺平原(Ice Plains Spikes),雪山(Ice Mountains)

    动物:清空

    沼泽小屋(SwampHut)

    怪物:只有女巫(1)

    其他:同所在生物群系

    海底遗迹(OceanMonument)

    怪物:只有守卫者(1)

    其他:同所在生物群系

    下界

    一般

    怪物:恶魂(50),僵尸猪人(100),岩浆怪(1)

    其他:无

    下界要塞(Nether Fortress)

    怪物:烈焰人(10),僵尸猪人(5),骷髅(10),岩浆怪(3)

    下界要塞的判断条件有点复杂,用了2种判断,可以看出有一种需要判断脚底方块为地狱砖。具体以后再看TODO

    末地

    怪物:末影人(10)

    其他:无

    附3. 各种生物刷怪要求

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

    方块及碰撞箱要求

    鱿鱼和守卫者:当前方块是液体,脚下方块是液体,头顶方块不是NormalCube;碰撞箱内没有其他生物或者船、矿车、末影水晶、点燃的TNT、下落的方块,怪物碰撞箱不和方块有冲突(这段还没太看明白TODO)。

    其他:脚下方块有完整的上表面,且不是基岩、屏障;当前方块不是NormalCube且不是液体;头顶方块不是NormalCube;碰撞箱内没有其他生物或者船、矿车、末影水晶、点燃的TNT、下落的方块,怪物碰撞箱不和方块有冲突(这段还没太看明白TODO),且碰撞箱内无液体。

    其他条件

    怪物一般条件(下文列出但没有说明需要满足此条件的怪物则不需要满足):难度不为和平,天空光照不大于0~31随机数字,亮度(打雷时计算这个亮度时来自天空的亮度-10)不大于随机的0~7随机数字。

    动物一般生成条件:亮度>8,脚下方块为草方块。

    豹猫:高度不低于63,脚下方块必须是草或者树叶,1/3概率生成失败。

    蠹虫:需要满足怪物一般条件,半径5的球内必须没有玩家

    末影螨:需要满足怪物一般条件,半径5的球内必须没有玩家

    史莱姆:难度不为和平。如果在沼泽,高度在大于50小于70,亮度不大于0~7之间的随机数,随机一个0~1的实数小于当前月亮的月相(盈亏,0~1之间实数)(本来是个很有趣的特性,很可惜这段代码写疵了,这个判断条件永远是真,也就是实际运作时史莱姆生成与月相无关,应该不是我看错,有志者可以试验一下),有1/2概率失败;若不在沼泽,需要是史莱姆区块且高度小于40。

    恶魂:难度不为和平,只有1/20的概率生成成功

    岩浆怪:难度不为和平

    僵尸猪人:难度不为和平

    守卫者:需要满足怪物一般条件。如果能直视天空(当前方块和天空之间没有非透明方块阻挡)则只有1/20的概率生成成功。

    鱿鱼:高度大于45小于63

    蝙蝠:高度小于63,随机一个0~3的数字,如果小于当前亮度则可以生成,有一半几率生成失败;10月20日~11月5日(万圣节?)变为,高度小于63,随机0~6数字,如果小于当前亮度则可以生成,无额外失败概率。

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

    狼:8

    马:6

    恶魂:1

    其他:4


        一哥手游平台是重庆一哥手游科技公司旗下手机游戏玩家平台,以精品运营为理念,以贴心服务为宗旨,致力于为各种不同渠道与玩家打造好玩的手机游戏服务平台,同时免费提供丰富的手机游戏下载,立志成为国内一流的综合性手机游戏娱乐平台,不断追求更加卓越的品质!一哥手游!


    捐赠方式支持论坛,捐赠获得阳光请捐赠  一哥网ACG游戏精英家园!
    -----------------------------------------------------------------------------------------------------------
    你就认真回复也行啊!总之!不要白瞟!从我做起,请发帖!请点评!请回复!
    -----------------------------------------------------------------------------------------------------------
    【 认真点评 】 【 认真回复  】认真发帖 】!谢谢大家!
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    客服:| 客服QQ: 2607818610 | 商务QQ:19878895 | 服务邮箱:ohyeah@vip.qq.com | 商务电话:13637860062

    公安机关备案号:50010602501574|网站地图|小黑屋|

    一哥ACG ( 渝ICP备13004552号-1)

    GMT+8, 2025-4-8 09:10 , Processed in 0.256952 second(s), 40 queries , Gzip On.

    Powered by 一哥网 X3.4

    © 2001-2013 www.1g31.com

    快速回复 返回顶部 返回列表