Exemplo n.º 1
0
		public SpawnPointMenu(SpawnPoint point)
			: base(point.SpawnEntry.Entry.NameGossipId)
		{
			m_point = point;

			KeepOpen = true;

			AddItem(new GossipMenuItem("Go to Spawn", HandleTeleport));
			AddItem(new GossipMenuItem("Remove Spawn", HandleRemove,
				"This will remove the Spawn with all its Waypoints (" + m_point.SpawnEntry.Entry + ")"));

			AddItem(new GossipMenuItem("Waypoint List", WPMenu = CreateWaypointMenu()));
			AddItem(new GossipMenuItem("Add new Wapyoint", HandleAddWP));

			AddQuitMenuItem("Done");
		}
Exemplo n.º 2
0
		public NPC Create(SpawnPoint spawn)
		{
			var npc = NPCCreator(this);
			npc.SetupNPC(this, spawn);
			return npc;
		}
Exemplo n.º 3
0
		protected internal virtual void SetupNPC(NPCEntry entry, SpawnPoint spawnPoint)
		{
			SpawnEntry spawnEntry;
			if (spawnPoint != null)
			{
				// Spawn-specific information
				spawnEntry = spawnPoint.SpawnEntry;
				m_spawnPoint = spawnPoint;
				Phase = spawnEntry.PhaseMask;
				m_orientation = spawnEntry.Orientation;

				if (spawnEntry.DisplayIdOverride != 0)
				{
					DisplayId = spawnEntry.DisplayIdOverride;
				}
			}
			else
			{
				Phase = 1;
				spawnEntry = entry.FirstSpawnEntry;
			}

			GenerateId(entry.Id);

			SetEntry(entry);
		}
Exemplo n.º 4
0
		public NPC Create(SpawnPoint spawn)
		{
			var npc = Create(spawn.Region.DifficultyIndex);
			npc.SetupNPC(this, spawn);
			return npc;
		}
Exemplo n.º 5
0
Arquivo: NPC.cs Projeto: enjoii/WCell
		protected internal virtual void SetupNPC(NPCEntry entry, SpawnPoint spawnPoint)
		{
			// auras
			m_auras = new NPCAuraCollection(this);

			SpawnEntry spawnEntry;
			if (spawnPoint != null)
			{
				// Spawn-specific information
				spawnEntry = spawnPoint.SpawnEntry;
				m_spawnPoint = spawnPoint;
				Phase = spawnEntry.PhaseMask;
				m_orientation = spawnEntry.Orientation;

				if (spawnEntry.DisplayIdOverride != 0)
				{
					DisplayId = spawnEntry.DisplayIdOverride;
				}
				else if (entry.ModelInfos != null && entry.ModelInfos.Length > 0)
				{
					Model = entry.ModelInfos.GetRandom();
				}
			}
			else
			{
				Phase = 1;
				spawnEntry = entry.FirstSpawnEntry;
			}

			Entry = entry;
			NativeDisplayId = DisplayId;

			// misc stuff
			Faction = entry.Faction;
			NPCFlags = entry.NPCFlags;
			UnitFlags = entry.UnitFlags;
			DynamicFlags = entry.DynamicFlags;
			Class = entry.ClassId;
			Race = entry.RaceId;
			YieldsXpOrHonor = entry.GeneratesXp;
			SheathType = SheathType.Melee;

			// speeds
			m_runSpeed = entry.RunSpeed;
			m_swimSpeed = entry.RunSpeed;
			m_swimBackSpeed = entry.RunSpeed;
			m_walkSpeed = entry.WalkSpeed;
			m_walkBackSpeed = entry.WalkSpeed;
			m_flightSpeed = entry.FlySpeed;
			m_flightBackSpeed = entry.FlySpeed;

			Array.Copy(entry.Resistances, m_baseResistances, m_baseResistances.Length);

			MainWeapon = m_entry.CreateMainHandWeapon();
			RangedWeapon = m_entry.CreateRangedWeapon();
			OffHandWeapon = entry.CreateOffhandWeapon();

			// Set model after Scale
			Model = m_entry.GetRandomModel();

			GossipMenu = entry.DefaultGossip; // set gossip menu

			// TODO: Init stats
			//for (int i = 0; i < 5; i++)
			//{
			//    m_baseStats[i] = statVal;
			//}
			PowerType = PowerType.Mana;
			SetBaseStat(StatType.Strength, 1, false);
			SetBaseStat(StatType.Agility, 1, false);
			SetBaseStat(StatType.Intellect, 1, false);
			SetBaseStat(StatType.Stamina, 1, false);
			SetBaseStat(StatType.Spirit, 1, false);

			// health + power
			var health = entry.GetRandomHealth();
			SetUInt32(UnitFields.MAXHEALTH, health);
			SetUInt32(UnitFields.BASE_HEALTH, health);

			if (spawnEntry == null || !spawnEntry.IsDead)
			{
				SetUInt32(UnitFields.HEALTH, health);
			}

			var mana = entry.GetRandomMana();
			SetInt32(UnitFields.MAXPOWER1, mana);
			SetInt32(UnitFields.BASE_MANA, mana);
			SetInt32(UnitFields.POWER1, mana);

			HoverHeight = entry.HoverHeight;

			m_Movement = new Movement(this);

			PowerCostMultiplier = 1f;

			if (PowerType == PowerType.Mana)
			{
				ManaRegenPerTickInterruptedPct = 20;
			}

			HealthRegenPerTickNoCombat = BaseHealth / 5;

			UpdateUnitState();

			if (m_entry.InhabitType.HasFlag(InhabitType.Air))
			{
				Flying++;
			}

			if (IsImmovable)
			{
				InitImmovable();
			}

			m_spells = NPCSpellCollection.Obtain(this);

			AddStandardEquipment();
			if (m_entry.AddonData != null)
			{
				// first add general addon data
				AddAddonData(m_entry.AddonData);
			}
			if (m_spawnPoint != null && m_spawnPoint.SpawnEntry.AddonData != null)
			{
				// then override with per-spawn addon data
				AddAddonData(m_spawnPoint.SpawnEntry.AddonData);
			}

			CanMelee = m_mainWeapon != GenericWeapon.Peace;

			m_brain = m_entry.BrainCreator(this);
			m_brain.IsRunning = true;

			AddMessage(() =>
						{
							// Set Level/Scale after NPC is in world:
							if (!HasPlayerMaster)
							{
								Level = entry.GetRandomLevel();
							}
							else
							{
								Level = m_master.Level;
							}
						});
		}
Exemplo n.º 6
0
			public WPItem(SpawnPoint point, WaypointEntry wp)
			{
				m_Point = point;
				m_wp = wp;
				Text = "WP #" + wp.Id;

				SubMenu = new GossipMenu(point.SpawnEntry.Entry.NameGossipId);
				SubMenu.AddGoBackItem();
				SubMenu.AddRange(
					new GossipMenuItem("Go to " + Text, HandleGoto),
					new GossipMenuItem("Remove", HandleRemove),
					new GossipMenuItem("Move here", HandleMoveOver),
					new GossipMenuItem("Insert New", HandleInsert));
			}
Exemplo n.º 7
0
		protected internal virtual void SetupNPC(NPCEntry entry, SpawnPoint spawnPoint)
		{
			// auras
			m_auras = new NPCAuraCollection(this);

			var mainWeapon = entry.CreateMainHandWeapon();

			SpawnEntry spawnEntry;
			if (spawnPoint != null)
			{
				// Spawn-specific information
				spawnEntry = spawnPoint.SpawnEntry;
				m_spawnPoint = spawnPoint;
				Phase = spawnEntry.PhaseMask;
				m_orientation = spawnEntry.Orientation;
				if (spawnEntry.MountId != 0)
				{
					Mount(spawnEntry.MountId);
				}

				if (spawnEntry.DisplayIdOverride != 0)
				{
					DisplayId = spawnEntry.DisplayIdOverride;
				}

				SetUInt32(UnitFields.BYTES_0, spawnEntry.Bytes);
				SetUInt32(UnitFields.BYTES_2, spawnEntry.Bytes2);
			}
			else
			{
				Phase = 1;
				spawnEntry = entry.FirstSpawnEntry;
			}

			EmoteState = (spawnEntry != null && spawnEntry.EmoteState != 0) ? spawnEntry.EmoteState : entry.EmoteState;
			Entry = entry;
			NativeDisplayId = DisplayId;

			// misc stuff
			Faction = entry.Faction;
			NPCFlags = entry.NPCFlags;
			UnitFlags = entry.UnitFlags;
			DynamicFlags = entry.DynamicFlags;
			Class = entry.ClassId;
			Race = entry.RaceId;
			YieldsXpOrHonor = entry.GeneratesXp;
			SheathType = SheathType.Melee;

			// speeds
			m_runSpeed = entry.RunSpeed;
			m_swimSpeed = entry.RunSpeed;
			m_swimBackSpeed = entry.RunSpeed;
			m_walkSpeed = entry.WalkSpeed;
			m_walkBackSpeed = entry.WalkSpeed;
			m_flightSpeed = entry.FlySpeed;
			m_flightBackSpeed = entry.FlySpeed;

			Array.Copy(entry.Resistances, m_baseResistances, m_baseResistances.Length);

			MainWeapon = mainWeapon;

			// Set Level/Scale *after* MainWeapon is set:
			var level = entry.GetRandomLevel();
			Level = level;

			// Set model after Scale
			Model = m_entry.GetRandomModel();

			m_gossipMenu = entry.DefaultGossip; // set gossip menu

			// TODO: Init stats
			//for (int i = 0; i < 5; i++)
			//{
			//    m_baseStats[i] = statVal;
			//}
			PowerType = PowerType.Mana;
			SetBaseStat(StatType.Strength, 1, false);
			SetBaseStat(StatType.Agility, 1, false);
			SetBaseStat(StatType.Intellect, 1, false);
			SetBaseStat(StatType.Stamina, 1, false);
			SetBaseStat(StatType.Spirit, 1, false);

			// health + power
			var health = entry.GetRandomHealth();
			SetUInt32(UnitFields.MAXHEALTH, health);
			SetUInt32(UnitFields.BASE_HEALTH, health);

			if (spawnEntry == null || !spawnEntry.IsDead)
			{
				SetUInt32(UnitFields.HEALTH, health);
			}

			var mana = entry.GetRandomMana();
			SetInt32(UnitFields.MAXPOWER1, mana);
			SetInt32(UnitFields.BASE_MANA, mana);
			SetInt32(UnitFields.POWER1, mana);

			OffHandWeapon = entry.CreateOffhandWeapon();
			RangedWeapon = entry.CreateRangedWeapon();

			HoverHeight = entry.HoverHeight;

			m_Movement = new Movement(this);

			PowerCostMultiplier = 1f;

			if (PowerType == PowerType.Mana)
			{
				ManaRegenPerTickInterruptedPct = 20;
			}

			HealthRegenPerTickNoCombat = BaseHealth / 5;

			UpdateUnitState();

			if (m_entry.InhabitType.HasFlag(InhabitType.Air))
			{
				Flying++;
			}

			if (m_entry.Spells != null)
			{
				EnsureSpells();
			}

			if (m_entry.Type == NPCType.Totem || m_entry.Type == NPCType.None)
			{
				m_Movement.MayMove = false;
			}

			AddEquipment();

			CanMelee = mainWeapon != GenericWeapon.Peace;

			// TODO: Don't create talents if this is not a pet
			m_petTalents = new TalentCollection(this);

			m_brain = m_entry.BrainCreator(this);
			m_brain.IsRunning = true;
		}