Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
        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;
            }
        }