if (!("RopeFix" in getroottable())) { ::RopeFixListener <- SpawnEntityFromTable("logic_eventlistener", { eventname = "teamplay_round_start", IsEnabled = true, OnEventFired = "worldspawn,RunScriptCode,RopeFix.SpawnRopes(),-1,-1", }); RopeFixListener.KeyValueFromString("classname", "move_rope"); // preserve ::RopeFix <- { SpawnRopes = function() { local table = {} local len = ropes.len(); for (local i = 0; i < len; i++) table[i] <- { move_rope = ropes[i] }; SpawnEntityGroupFromTable(table); }, ropes = [], }; } function OnPostSpawn() { local kv = { origin = self.GetOrigin(), angles = self.GetAbsAngles(), targetname = NetProps.GetPropString(self, "m_iName"), parentname = NetProps.GetPropString(self, "m_iParent"), spawnflags = NetProps.GetPropInt (self, "m_spawnflags"), NextKey = NetProps.GetPropString(self, "m_iNextLinkName"), Slack = NetProps.GetPropInt (self, "m_Slack"), TextureScale = NetProps.GetPropFloat (self, "m_TextureScale"), Subdiv = NetProps.GetPropInt (self, "m_Subdiv"), ScrollSpeed = NetProps.GetPropFloat (self, "m_flScrollSpeed"), RopeMaterial = NetProps.GetPropString(self, "m_strRopeMaterialModel"), Width = NetProps.GetPropFloat (self, "m_Width"), } local segments = NetProps.GetPropInt(self, "m_nSegments"); if (segments == 10) kv.Type <- 0; else if (segments == 4) kv.Type <- 1; else if (segments != 5) kv.Type <- 2; local lockedpoints = NetProps.GetPropInt(self, "m_fLockedPoints"); if (!(lockedpoints & 2)) kv.Dangling <- 1; local flags = NetProps.GetPropInt(self, "m_RopeFlags"); if (flags & 32) kv.NoWind <- 1; if (flags & 16) kv.Breakable <- 1; if (flags & 4) kv.Collide <- 1; if (flags & 2) kv.Barbed <- 1; RopeFix.ropes.append(kv); self.KeyValueFromString("classname", "kill_rope"); // don't preserve }