/// <summary>Flags this unit as dead and generates XP and loot.</summary> protected virtual void SetDeath(Unit killer) { Health = 0; States.Add((byte)CreatureState.Dead); // Death State SendCollatedHit(); Pet pet = (killer as Pet); Player credited = (pet != null) ? pet.Owner : (killer as Player); PacketOut Out = new PacketOut((byte)Opcodes.F_OBJECT_DEATH, 12); Out.WriteUInt16(Oid); Out.WriteByte(1); Out.WriteByte(0); Out.WriteUInt16(credited?.Oid ?? killer.Oid); Out.Fill(0, 6); DispatchPacket(Out, true); AbtInterface.Cancel(true); ScrInterface.OnDie(this); BuffInterface.RemoveBuffsOnDeath(); AiInterface.OnOwnerDied(); EvtInterface.Notify(EventName.OnDie, this, credited ?? killer); if (credited != null && credited.Zone != null && !credited.PendingDisposal) { HandleDeathRewards(credited); } ClearTrackedDamage(); }
protected override void SetDeath(Unit killer) { Health = 0; States.Add((byte)CreatureState.Dead); PacketOut Out = new PacketOut((byte)Opcodes.F_OBJECT_DEATH, 12); Out.WriteUInt16(Oid); Out.WriteByte(1); Out.WriteByte(0); Out.WriteUInt16(killer.IsPet() ? killer.GetPet().Owner.Oid : killer.Oid); Out.Fill(0, 6); DispatchPacket(Out, true); AbtInterface.Cancel(true); ScrInterface.OnDie(this); BuffInterface.RemoveBuffsOnDeath(); EvtInterface.Notify(EventName.OnDie, this, killer); Pet pet = killer as Pet; Player credited = (pet != null) ? pet.Owner : (killer as Player); if (credited != null) { HandleDeathRewards(credited); } AiInterface.ProcessCombatEnd(); SetRespawnTimer(); EvtInterface.RemoveEventNotify(EventName.OnReceiveDamage, OnReceiveDamage); if (!FlagGuard.Info.KeepLord) { _keep.OnKeepNpcAttacked(0); return; } /*Log.Info(_keep.Info.Name, (_keep.Realm == Realms.REALMS_REALM_ORDER ? "Order" : "Destruction") + " keep lord slain by " + killer.Name + " of " + (killer.Realm == Realms.REALMS_REALM_ORDER ? "Order" : "Destruction"));*/ if (_keep.Realm == killer.Realm) { /*if (FlagGuard.Info.KeepLord) * Log.Info(_keep.Info.Name, (_keep.Realm == Realms.REALMS_REALM_ORDER ? "Order" : "Destruction") + " keep lord respawned.");*/ _logger.Debug($"Kill request from own realm {killer.Name} {_keep.Realm}"); FlagGuard.Creature = new KeepCreature(Spawn, FlagGuard, _keep); Region.AddObject(FlagGuard.Creature, Spawn.ZoneId); Destroy(); } else { _keep.OnLordKilled(); } }
protected override void SetDeath(Unit killer) { Health = 0; PacketOut Out = new PacketOut((byte)Opcodes.F_OBJECT_DEATH, 12); Out.WriteUInt16(Oid); Out.WriteByte(1); Out.WriteByte(0); Out.WriteUInt16(killer.IsPet() ? killer.GetPet().Owner.Oid : killer.Oid); Out.Fill(0, 6); DispatchPacket(Out, true); AbtInterface.Cancel(true); ScrInterface.OnDie(this); BuffInterface.RemoveBuffsOnDeath(); EvtInterface.Notify(EventName.OnDie, this, killer); Pet pet = killer as Pet; Player credited = (pet != null) ? pet.Owner : (killer as Player); if (credited != null) { HandleDeathRewards(credited); } ClearTrackedDamage(); _buildState = EConstructionState.Destroying; foreach (Player plr in _interactors) { plr.Palisade = null; } _interactors.Clear(); foreach (NewBuff buff in _interactionBuffs) { buff.BuffHasExpired = true; } _interactionBuffs.Clear(); GroundTarget gt = new GroundTarget(_constructor, new Point3D(WorldPosition), GameObjectService.GetGameObjectProto(23)); Region.AddObject(gt, Zone.ZoneId); gt.BuffInterface.QueueBuff(new BuffQueueInfo(_constructor, 40, AbilityMgr.GetBuffInfo(23762))); gt.SetExpiry(TCPManager.GetTimeStampMS() + 5000); }
public override void OnLoad() { Faction = Spawn.Proto.Faction; while (Faction >= 8) { Faction -= 8; } if (Faction < 2) { Rank = 0; } else if (Faction < 4) { Rank = 1; } else if (Faction < 6) { Rank = 2; } else if (Faction < 9) { Rank = 3; } Faction = Spawn.Proto.Faction; Level = Spawn.Proto.Level; MaxHealth = Math.Min(1, Spawn.Proto.HealthPoints); Health = TotalHealth; X = Zone.CalculPin((uint)(Spawn.WorldX), true); Y = Zone.CalculPin((uint)(Spawn.WorldY), false); Z = (ushort)(Spawn.WorldZ); Heading = (ushort)Spawn.WorldO; SetOffset((ushort)(Spawn.WorldX >> 12), (ushort)(Spawn.WorldY >> 12)); ScrInterface.AddScript(Spawn.Proto.ScriptName); base.OnLoad(); IsActive = true; Looted = false; }
/// <summary> /// Kill this unit, Generate Xp and Loots /// </summary> /// <param name="Killer"></param> public virtual void SetDeath(Unit Killer) { Health = 0; States.Add(3); // Death State PacketOut Out = new PacketOut((byte)Opcodes.F_OBJECT_DEATH); Out.WriteUInt16(Oid); Out.WriteByte(1); Out.WriteByte(0); Out.WriteUInt16(Killer.Oid); Out.Fill(0, 6); DispatchPacket(Out, true); CbtInterface.Evade(); WorldMgr.GenerateXP(Killer, this); GenerateLoot(Killer); ScrInterface.OnDie(this); EvtInterface.Notify(EventName.ON_DIE, this, null); }
protected override void SetDeath(Unit killer) { Health = 0; States.Add((byte)CreatureState.Dead); // Death State PacketOut Out = new PacketOut((byte)Opcodes.F_OBJECT_DEATH, 12); Out.WriteUInt16(Oid); Out.WriteByte(1); Out.WriteByte(0); Out.WriteUInt16(killer.IsPet() ? killer.GetPet().Owner.Oid : killer.Oid); Out.Fill(0, 6); DispatchPacket(Out, true); AbtInterface.Cancel(true); ScrInterface.OnDie(this); BuffInterface.RemoveBuffsOnDeath(); EvtInterface.Notify(EventName.OnDie, this, killer); AiInterface.ProcessCombatEnd(); EvtInterface.AddEvent(RezUnit, 10000, 1); // Clear the object in 10 seconds. if (_ownerUILinked) { SendPetRemove(true); IPetCareerInterface petInterface = Owner.CrrInterface as IPetCareerInterface; petInterface?.Notify_PetDown(); _ownerUILinked = false; } }
public override void OnLoad() { InteractType = Spawn.Proto.InteractType; SetFaction(Spawn.Faction != 0 ? Spawn.Faction : Spawn.Proto.Faction); ItmInterface.Load(CreatureService.GetCreatureItems(Spawn.Entry)); if (Spawn.Proto.MinLevel > Spawn.Proto.MaxLevel) { Spawn.Proto.MinLevel = Spawn.Proto.MaxLevel; } if (Spawn.Proto.MaxLevel <= Spawn.Proto.MinLevel) { Spawn.Proto.MaxLevel = Spawn.Proto.MinLevel; } if (Spawn.Proto.MaxLevel == 0) { Spawn.Proto.MaxLevel = 1; } if (Spawn.Proto.MinLevel == 0) { Spawn.Proto.MinLevel = 1; } if (Spawn.Level != 0) { if (Spawn.Level > 2) { Level = (byte)StaticRandom.Instance.Next(Spawn.Level - 1, Spawn.Level + 1); } else { Level = (byte)StaticRandom.Instance.Next(Spawn.Level, Spawn.Level + 1); } } else { Level = (byte)StaticRandom.Instance.Next(Spawn.Proto.MinLevel, Spawn.Proto.MaxLevel + 1); } SetCreatureStats(); Health = TotalHealth; X = Zone.CalculPin((uint)Spawn.WorldX, true); Y = Zone.CalculPin((uint)Spawn.WorldY, false); Z = (ushort)Spawn.WorldZ; // TODO : Bad Height Formula /*int HeightMap = HeightMapMgr.GetHeight(Zone.ZoneId, X, Y); * if (Z < HeightMap) * { * Log.Error("Creature", "["+Spawn.Entry+"] Invalid Height : Min=" + HeightMap + ",Z=" + Z); * return; * }*/ Heading = (ushort)Spawn.WorldO; WorldPosition.X = Spawn.WorldX; WorldPosition.Y = Spawn.WorldY; WorldPosition.Z = Spawn.WorldZ; SetOffset((ushort)(Spawn.WorldX >> 12), (ushort)(Spawn.WorldY >> 12)); ScrInterface.AddScript(Spawn.Proto.ScriptName); SaveSpawnData(); LoadInterfaces(); AiInterface.SetBrain(new DummyBrain(this)); States.Add(0x12); States.Add((byte)CreatureState.UnkOmnipresent); Speed = 350; StsInterface.Speed = 350; MvtInterface.SetBaseSpeed(Speed); MvtInterface.FollowReacquisitionInterval = 100; IsActive = true; }
public override void OnLoad() { InteractType = GenerateInteractType(Spawn.Title != 0 ? Spawn.Title : Spawn.Proto.Title); SetFaction(Spawn.Faction != 0 ? Spawn.Faction : Spawn.Proto.Faction); ItmInterface.Load(WorldMgr.GetCreatureItems(Spawn.Entry)); if (Spawn.Proto.MinLevel > Spawn.Proto.MaxLevel) { Spawn.Proto.MinLevel = Spawn.Proto.MaxLevel; } if (Spawn.Proto.MaxLevel <= Spawn.Proto.MinLevel) { Spawn.Proto.MaxLevel = Spawn.Proto.MinLevel; } if (Spawn.Proto.MaxLevel == 0) { Spawn.Proto.MaxLevel = 1; } if (Spawn.Proto.MinLevel == 0) { Spawn.Proto.MinLevel = 1; } Level = (byte)RandomMgr.Next((int)Spawn.Proto.MinLevel, (int)Spawn.Proto.MaxLevel + 1); StsInterface.SetBaseStat((byte)GameData.Stats.STATS_WOUNDS, GenerateWounds(Level, Rank)); StsInterface.ApplyStats(); Health = TotalHealth; X = Zone.CalculPin((uint)(Spawn.WorldX), true); Y = Zone.CalculPin((uint)(Spawn.WorldY), false); Z = (ushort)(Spawn.WorldZ); /* * if (Zone.ZoneId == 161) * { * Z += 16384; * X += 16384; * Y += 16384; * } */ // TODO : Bad Height Formula /*int HeightMap = HeightMapMgr.GetHeight(Zone.ZoneId, X, Y); * if (Z < HeightMap) * { * Log.Error("Creature", "["+Spawn.Entry+"] Invalid Height : Min=" + HeightMap + ",Z=" + Z); * return; * }*/ Heading = (ushort)Spawn.WorldO; WorldPosition.X = Spawn.WorldX; WorldPosition.Y = Spawn.WorldY; WorldPosition.Z = Spawn.WorldZ; SetOffset((ushort)(Spawn.WorldX >> 12), (ushort)(Spawn.WorldY >> 12)); ScrInterface.AddScript(Spawn.Proto.ScriptName); base.OnLoad(); if (Spawn.Title == 0 && Spawn.Icone == 0 && Spawn.Proto.Title == 0 && Spawn.Icone == 0 && Spawn.Emote == 0 && Spawn.Proto.FinishingQuests == null && Spawn.Proto.StartingQuests == null) { if (Faction <= 1 || Faction == 128 || Faction == 129) { SFastRandom Random = new SFastRandom(X ^ Y ^ Z); for (int i = 0; i < 3; ++i) { Waypoint Wp = new Waypoint(); Wp.X = (ushort)(X + Random.randomInt(50) + Random.randomInt(100) + Random.randomInt(150)); Wp.Y = (ushort)(Y + Random.randomInt(50) + Random.randomInt(100) + Random.randomInt(150)); Wp.Z = (ushort)Z; Wp.Speed = 10; Wp.WaitAtEndMS = (uint)(5000 + Random.randomIntAbs(10) * 1000); AiInterface.AddWaypoint(Wp); } } } IsActive = true; }
public override void OnLoad() { InteractType = GenerateInteractType(Spawn.Title != 0 ? Spawn.Title : Spawn.Proto.Title); SetFaction(Spawn.Faction != 0 ? Spawn.Faction : Spawn.Proto.Faction); ItmInterface.Load(WorldMgr.GetCreatureItems(Spawn.Entry)); if (Spawn.Proto.MinLevel > Spawn.Proto.MaxLevel) { Spawn.Proto.MinLevel = Spawn.Proto.MaxLevel; } if (Spawn.Proto.MaxLevel <= Spawn.Proto.MinLevel) { Spawn.Proto.MaxLevel = Spawn.Proto.MinLevel; } if (Spawn.Proto.MaxLevel == 0) { Spawn.Proto.MaxLevel = 1; } if (Spawn.Proto.MinLevel == 0) { Spawn.Proto.MinLevel = 1; } if (Spawn.Level != 0) { if (Spawn.Level > 2) { Level = (byte)RandomMgr.Next((int)Spawn.Level - 1, Spawn.Level + 1); } else { Level = (byte)RandomMgr.Next((int)Spawn.Level, Spawn.Level + 1); } } else { Level = (byte)RandomMgr.Next((int)Spawn.Proto.MinLevel, (int)Spawn.Proto.MaxLevel + 1); } StsInterface.SetBaseStat((byte)GameData.Stats.STATS_WOUNDS, GenerateWounds(Level, Rank)); StsInterface.ApplyStats(); Health = TotalHealth; X = Zone.CalculPin((uint)(Spawn.WorldX), true); Y = Zone.CalculPin((uint)(Spawn.WorldY), false); Z = (ushort)(Spawn.WorldZ); /* * if (Zone.ZoneId == 161) * { * Z += 16384; * X += 16384; * Y += 16384; * } * //*/ // TODO : Bad Height Formula /* * //int HeightMap = HeightMapMgr.GetHeight(Zone.ZoneId, X, Y); * int HeightMap = ClientFileMgr.GetHeight(Zone.ZoneId, X, Y); * * if (Z < HeightMap) * { * Log.Error("Creature", "["+Spawn.Entry+"] Invalid Height : Min=" + HeightMap + ",Z=" + Z); * return; * }*/ Heading = (ushort)Spawn.WorldO; WorldPosition.X = Spawn.WorldX; WorldPosition.Y = Spawn.WorldY; WorldPosition.Z = Spawn.WorldZ; SetOffset((ushort)(Spawn.WorldX >> 12), (ushort)(Spawn.WorldY >> 12)); ScrInterface.AddScript(Spawn.Proto.ScriptName); base.OnLoad(); /*AiInterface.Waypoints = WorldMgr.GetNpcWaypoints(Spawn.Guid); * * if (Spawn.Title == 0 && Spawn.Icone == 0 && Spawn.Proto.Title == 0 && Spawn.Icone == 0 && Spawn.Emote == 0 && Spawn.Proto.FinishingQuests == null && Spawn.Proto.StartingQuests == null) * { * if (Faction <= 1 || Faction == 128 || Faction == 129) * { * if (AiInterface.Waypoints.Count <= 4) * { * int i = 0; * if (AiInterface.Waypoints.Count != 0) * i = AiInterface.Waypoints.Count - 1; * for (; i < 3; ++i) * { * AiInterface.AddWaypoint(new Waypoint()); * } * } * foreach (Waypoint Wp in AiInterface.Waypoints) * { * AiInterface.RandomizeWaypoint(Wp); * } * } * }*/ IsActive = true; if (InteractType == GameData.InteractType.INTERACTTYPE_TRAINER) { States.Add(1); } if (InteractType == GameData.InteractType.INTERACTTYPE_BANKER) { States.Add(11); // 11 } if (InteractType == GameData.InteractType.INTERACTTYPE_GUILD_VAULT) // added { States.Add(0); // dont know what states are yet ? } if (InteractType == GameData.InteractType.INTERACTTYPE_AUCTIONEER) { States.Add(12); } if (InteractType == GameData.InteractType.INTERACTTYPE_GUILD_REGISTRAR) { States.Add(14); } if (InteractType == GameData.InteractType.INTERACTTYPE_FLIGHT_MASTER) { States.Add(15); } if (InteractType == GameData.InteractType.INTERACTTYPE_DYEMERCHANT) { States.Add(26); } }
public override void OnLoad() { Faction = Spawn.Proto.Faction; while (Faction >= 8) { Faction -= 8; } if (Faction < 2) { Rank = 0; } else if (Faction < 4) { Rank = 1; } else if (Faction < 6) { Rank = 2; } else if (Faction < 9) { Rank = 3; } Faction = Spawn.Proto.Faction; // Setting realm...? if (Faction > 63 && Faction < 118) { Realm = Realms.REALMS_REALM_ORDER; } else if (Faction > 127 && FactionId < 181) { Realm = Realms.REALMS_REALM_DESTRUCTION; } else if (Faction == 1) { Realm = Realms.REALMS_REALM_HOSTILE; } Level = Spawn.Proto.Level; MaxHealth = Spawn.Proto.HealthPoints; Health = TotalHealth; X = Zone.CalculPin((uint)(Spawn.WorldX), true); Y = Zone.CalculPin((uint)(Spawn.WorldY), false); Z = (ushort)(Spawn.WorldZ); Heading = (ushort)Spawn.WorldO; WorldPosition.X = Spawn.WorldX; WorldPosition.Y = Spawn.WorldY; WorldPosition.Z = Spawn.WorldZ; UpdateOffset(); ScrInterface.AddScript(Spawn.Proto.ScriptName); base.OnLoad(); IsActive = true; Looted = false; Interactable = true; IsAttackable = Spawn.Proto.IsAttackable; if (Entry == 2000589) { EvtInterface.AddEvent(CheckPlayersInCloseRange, 6000, 0); } }