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); }
private void ProcessDestruction() { if (_info.ModelId == 5470) { PacketOut Out = new PacketOut((byte)Opcodes.F_UPDATE_STATE, 20); Out.WriteUInt16(Oid); Out.WriteByte(6); //state Out.WriteByte(0); Out.WriteByte(0); Out.WriteByte(8); Out.WriteByte(0); Out.WriteByte(1); Out.Fill(0, 10); DispatchPacket(Out, false); _buildState = EConstructionState.Destroyed; return; } if (_buildProgress > 0) { _buildProgressFloat -= 1f; if (_buildProgressFloat <= 0) { _buildProgressFloat = 1; _buildProgress -= 2; WorldPosition.Z -= 3; Z -= 3; foreach (Player plr in PlayersInRange) { SendRemove(plr); SendMeTo(plr); } } } if (_buildProgress == 0) { _buildState = EConstructionState.Destroyed; } }
private void ProcessConstruction(long tick) { float delta = (tick - _lastTick) * 0.001f; _lastTick = tick; if (_buildProgress < 100 && _interactors.Count > 0) { _buildProgressFloat += delta; if (_buildProgressFloat >= 1) { _buildProgressFloat -= 1; Health += MaxHealth / 10; _buildProgress += 10; WorldPosition.Z += 4; Z += 4; foreach (Player plr in PlayersInRange) { SendRemove(plr); SendMeTo(plr); } SendState(); } } if (_buildProgress >= 100) { foreach (Player player in _interactors) { player.SendClientMessage("Completed construction of the " + _info.Name); player.KneelDown(Oid, false); } _interactors.Clear(); _buildState = EConstructionState.Active; } }