好,我们创造了一个Boss,但是我们需要让它能生成,这有两种办法,一是自然生成,二是使用Boss召唤物
制作一个Boss召唤物
有了boss,我们还需要一个boss召唤物
using Terraria.ID; using Terraria.ModLoader; using Terraria; using Terraria.GameContent.Creative; using Terraria.Audio; using xxx.NPCs.xxx; namespace xxx.Items.xxx { public class xxx : ModItem { public override void SetStaticDefaults() { DisplayName.SetDefault("xxx"); Tooltip.SetDefault("召唤xxx\n不消耗"); } public override void SetDefaults() { Item.width = 40; Item.height = 40; Item.maxStack = 20; Item.value = 114514; Item.rare = 8; Item.useAnimation = 30; Item.useTime = 30; Item.useStyle = ItemUseStyleID.HoldUp; Item.consumable = true; } public override bool CanUseItem(Player player) { return !NPC.AnyNPCs(ModContent.NPCType<xxx>());当世界上不存在该boss才可以召唤 } public override bool? UseItem(Player player) { if (player.whoAmI == Main.myPlayer) { SoundEngine.PlaySound(SoundID.Roar, player.position);//播放吼叫音效 int type = ModContent.NPCType<xxx>(); if (Main.netMode != NetmodeID.MultiplayerClient) { NPC.SpawnOnPlayer(player.whoAmI, type);//生成Boss } else { NetMessage.SendData(MessageID.SpawnBoss, number: player.whoAmI, number2: type);//发包,用来联机同步 } } return true; } } }
好,这时候有人就要问了,那我想要让玩家只能在神圣地召唤这个boss怎么办呢
public override bool CanUseItem(Player player) { return !NPC.AnyNPCs(ModContent.NPCType<xxx>()) && player.ZoneHallow;//当世界上不存在该boss且玩家在神圣地时才可以召唤 }
NPC生成
使用SpawnChance
函数来写NPC生成
public override float SpawnChance(NPCSpawnInfo spawnInfo) { return 0.25f; }
返回的数是生成的机率,1f就是一个很高的生成机率了
原版还有许多npc的生成条件,下面我比较常用的全部列出来
Main.bloodMoon
血夜
Main.raining
下雨
Main.hardMode
困难模式
Main.expertMode
是否是专家大师模式
Main.masterMode
是否是大师模式
Main.dayTime
白天
NPC.AnyNPCs(NPCID.xxx)
如果世界上有xxx,返回true
Math.Abs(spawnInfo.spawnTileX - Main.spawnTileX) > Main.maxTilesX / x
如果位于地图的外侧x分之一上,返回true
NPC.waveNumber
任意事件期间的波数,返回一个值
NPC.CountNPCS(NPCID.xxx) < x
如果世界上xxx的数量少于x个,返回true
spawnInfo.player.ZoneSkyHeight
玩家在太空返回true
其中还有很多spawnInfo.player.xxx
我在这里一一列出
ZoneDungeon
– 地牢ZoneCorrupt
– 腐化ZoneHallow
– 神圣ZoneMeteor
– 流星ZoneJungle
– 丛林ZoneSnow
– 雪原ZoneCrimson
– 血腥ZoneWaterCandle
– 水蜡烛附近ZonePeaceCandle
– 和平蜡烛附近ZoneTowerSolar
– 日耀柱ZoneTowerVortex
– 星璇柱ZoneTowerNebula
– 星云柱ZoneTowerStardust
– 星尘柱ZoneDesert
– 沙漠ZoneGlowshroom
– 发光蘑菇ZoneUndergroundDesert
– 地下沙漠ZoneSkyHeight
– 天空层ZoneOverworldHeight
– 地表层ZoneDirtLayerHeight
– 泥土层ZoneRockLayerHeight
– 岩石层ZoneUnderworldHeight
– 地狱层ZoneBeach
– 沙滩ZoneRain
– 雨ZoneSandstorm
– 沙尘暴
return spawnInfo.spawnTileType == mod.TileType<Tiles.xxx>() ? .Af : Bf;
这个是三元运算符,意思是如果在物块xxx上面,生成概率为Af,不在就是Bf
return spawnInfo.Player.GetModPlayer<ModPlayer>().xxx?.Af : Bf;
意思是玩家的xxx属性如果为true,生成概率为Af,反之就是Bf
我们还可以搞点别的
if(spawnInfo.Player.GetModPlayer<ModPlayer>().xxx>=100) return 1f; else return 0f;
当玩家的xxx属性大于100 有1f的生成机率 ,反之就是0f
小作业
让你的npc在大师模式下的困难模式在玩家血量低于50并且模式为硬核并且位于地图的外侧11分之一并且在丛林王八数量大于10个时并且在霜月第11波以后并且世界并且有大于114秒恶臭debuff时并且玩家名字叫野兽先辈还面向西方并且防御为114并且在钓鱼时并且背包里有臭虎爪并且在下雨的丛林的地下的玩家有水蜡烛和和平蜡烛buff时在旁边的黑曜石上有11.4f的概率生成,很简单吧
Pingback: Kid:从零到毕业のBoss教程 - 裙中世界