protected void CreditQuestKill(Player killer)
        {
            if (killer.PriorityGroup != null)
            {
                List <Player> curMembers = killer.PriorityGroup.GetPlayersCloseTo(killer, 150);
            }

            if (!string.IsNullOrEmpty(Spawn.Proto.TokUnlock))
            {
                killer.TokInterface.AddToks(Spawn.Proto.TokUnlock);

                if (killer.WorldGroup != null)
                {
                    List <Player> members = killer.WorldGroup.GetPlayerListCopy();

                    foreach (var member in members)
                    {
                        if (member != killer)
                        {
                            member.TokInterface.AddToks(Spawn.Proto.TokUnlock);
                        }
                    }
                }
            }

            killer.QtsInterface.HandleEvent(Objective_Type.QUEST_KILL_GO, Spawn.Entry, 1);
            PublicQuest pq = killer.QtsInterface.PublicQuest;

            pq?.HandleEvent(killer, Objective_Type.QUEST_KILL_GO, Spawn.Entry, 1, 100);
        }
        private void HandleInteractionEvents(Player player)
        {
            if (!IsDead)
            {
                player.QtsInterface.HandleEvent(Objective_Type.QUEST_USE_GO, Spawn.Entry, 1);
            }

            // This will spawn a creature after interacting with the GO
            if (this.Spawn.Proto.CreatureId != 0 && IsAttackable == 0)
            {
                SpawnNPCFromGO();
            }

            // This will play sound after clicking on the GO
            long now = TCPManager.GetTimeStampMS();

            if (this.Spawn.SoundId != 0 && now > SoundCooldown)
            {
                this.PlaySound((ushort)this.Spawn.SoundId);
                SoundCooldown = TCPManager.GetTimeStampMS() + 60 * 1000;
            }

            HandleCustomInteraction();

            PublicQuest pq = player.QtsInterface.PublicQuest;

            pq?.HandleEvent(player, Objective_Type.QUEST_USE_GO, Spawn.Entry, 1, 50);

            if (Spawn.Proto.TokUnlock != null && Spawn.Proto.TokUnlock.Length > 1 && IsAttackable == 0)
            {
                player.TokInterface.AddToks(Spawn.Proto.TokUnlock);

                // This check if the GO we clicked is a Door - if it is we don't want to mess with its
                // VFXState because we can break it
                if (this.Spawn.DoorId == 0)
                {
                    this.EvtInterface.AddEvent(EventSendMeTo, 60000, 1);
                    if (this.Spawn.AllowVfxUpdate == 1)
                    {
                        this.VfxState = 1;
                    }
                    foreach (Player plr in PlayersInRange)
                    {
                        this.UpdateVfxState(VfxState);
                    }
                }
            }

            if (Spawn.TokUnlock != null && Spawn.TokUnlock.Length > 1 && IsAttackable == 0)
            {
                player.TokInterface.AddToks(Spawn.TokUnlock);

                // This check if the GO we clicked is a Door - if it is we don't want to mess with its
                // VFXState because we can break it
                if (this.Spawn.DoorId == 0)
                {
                    this.EvtInterface.AddEvent(EventSendMeTo, 60000, 1);

                    if (this.Spawn.AllowVfxUpdate == 1)
                    {
                        this.VfxState = 1;
                    }
                    foreach (Player plr in PlayersInRange)
                    {
                        this.UpdateVfxState(VfxState);
                    }
                }
            }
        }