From 50ac61e17f4e164931dc26f01ffbe58dced9e772 Mon Sep 17 00:00:00 2001
From: Melanie Thielker
Date: Sun, 8 Aug 2010 02:01:24 +0200
Subject: In my crusade against facelights, I am striking the killing blow. Add
 a DisableFacelights option to OpenSim.ini to finally kill those immersion-
 breaking, silly vanity lights that destroy nighttime RP. Girls, you look just
 fine without them. Guys, you too. Thank you. Melanie has left the building.

---
 OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 16 ++++++++++++++++
 OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs  |  4 ++++
 bin/OpenSim.ini.example                              |  7 +++++++
 3 files changed, 27 insertions(+)

diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index af2dd85..a0e5521 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -315,6 +315,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
         private int m_cachedTextureSerial;
         private PriorityQueue m_entityUpdates;
         private Prioritizer m_prioritizer;
+        private bool m_disableFacelights = false;
 
         /// <value>
         /// List used in construction of data blocks for an object update packet.  This is to stop us having to
@@ -420,6 +421,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
             set { m_IsLoggingOut = value; }
         }
 
+        public bool DisableFacelights
+        {
+            get { return m_disableFacelights; }
+            set { m_disableFacelights = value; }
+        }
+
         public bool SendLogoutPacketWhenClosing { set { m_SendLogoutPacketWhenClosing = value; } }
 
         #endregion Properties
@@ -3522,6 +3529,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
                         SceneObjectPart part = (SceneObjectPart)update.Entity;
                         if (m_killRecord.Contains(part.ParentGroup.RootPart.LocalId))
                             continue;
+
+                        if (part.ParentGroup.IsAttachment && m_disableFacelights)
+                        {
+                            if (part.ParentGroup.RootPart.Shape.State != (byte)AttachmentPoint.LeftHand &&
+                                part.ParentGroup.RootPart.Shape.State != (byte)AttachmentPoint.RightHand)
+                            {
+                                part.Shape.LightEntry = false;
+                            }
+                        }
                     }
 
                     ++updatesThisCall;
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
index 3b63bcd..bbbf0be 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
@@ -153,6 +153,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
         private int m_defaultRTO = 0;
         private int m_maxRTO = 0;
 
+        private bool m_disableFacelights = false;
+
         public Socket Server { get { return null; } }
 
         public LLUDPServer(IPAddress listenIP, ref uint port, int proxyPortOffsetParm, bool allow_alternate_port, IConfigSource configSource, AgentCircuitManager circuitManager)
@@ -190,6 +192,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
 
                 m_defaultRTO = config.GetInt("DefaultRTO", 0);
                 m_maxRTO = config.GetInt("MaxRTO", 0);
+                m_disableFacelights = config.GetBoolean("DisableFacelights", false);
             }
             else
             {
@@ -907,6 +910,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
                 //this will prevent us from missing important messages
                 //before the modules are bound
                 client.DeliverPackets = false;
+                client.DisableFacelights = m_disableFacelights;
                 
                 Util.FireAndForget(
                     delegate
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example
index 074345d..466da93 100644
--- a/bin/OpenSim.ini.example
+++ b/bin/OpenSim.ini.example
@@ -390,6 +390,13 @@
     ;
     ;TextureSendLimit = 20
 
+    ; Quash and remove any light properties from attachments not on the
+    ; hands. This allows flashlights and lanterns to function, but kills
+    ; silly vanity "Facelights" dead. Sorry, head mounted miner's lamps
+    ; will also be affected.
+    ;
+    ;DisableFacelights = "false"
+
 [Chat]
     ; Controls whether the chat module is enabled.  Default is true.
     enabled = true;
-- 
cgit v1.1