跳至正文

NPC的生成与Boss召唤物

好,我们创造了一个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的概率生成,很简单吧

标签:

《NPC的生成与Boss召唤物》有1个想法

  1. Pingback: Kid:从零到毕业のBoss教程 - 裙中世界

发表回复