public UUID FindUUIDForName(string groupName) { UUID fnd = GetUserID(groupName); if (!CogbotHelpers.IsNullOrZero(fnd)) { return(fnd); } return(UUID.Zero); }
internal object GetAvatar() { var av = WorldSystem.m_TheSimAvatar; if (av != null) { return(av); } if (!CogbotHelpers.IsNullOrZero(Self.AgentID)) { return(TheSimAvatar); } return(this); }
private SimGeneric DeclareGroupRole(UUID groupID, UUID key) { // Create a non UUID.Zero for the "Everyone" GroupRole if (key == UUID.Zero) { byte[] i = groupID.GetBytes(); for (int index = 0; index < i.Length; index++) { i[index] ^= 0xff; } key = CogbotHelpers.GetUUID(i, 0); } return(DeclareGeneric("GroupRole", key, "DeclareGroupRole")); }
public override void Friends_OnFriendNamesReceived(object sender, FriendNamesEventArgs e) { IEnumerable names = e.Names; base.Friends_OnFriendNamesReceived(sender, e); string clientMasterNameToLower = client.MasterName; foreach (KeyValuePair <UUID, string> kvp in names) { if (CogbotHelpers.IsNullOrZero(kvp.Key)) { continue; } string kvpValueToLower = kvp.Value; AddName2Key(kvpValueToLower, kvp.Key); if (clientMasterNameToLower == kvpValueToLower) { MasterIsFriendYet = true; client.MasterKey = kvp.Key; } else if (kvp.Key == client.MasterKey && CogbotHelpers.IsNullOrZero(client.MasterKey)) { client.MasterName = kvp.Value; MasterIsFriendYet = true; } } if (!MasterIsFriendYet) { if (!string.IsNullOrEmpty(clientMasterNameToLower)) { { lock (Name2Key) { if (Name2Key.ContainsKey(clientMasterNameToLower)) { var clientMasterKey = Name2Key[clientMasterNameToLower]; if (!MasterIsFriendYet && !CogbotHelpers.IsNullOrZero(clientMasterKey)) { client.Friends.OfferFriendship(clientMasterKey); MasterIsFriendYet = true; } } } } } } if (!MasterIsFriendYet) { var clientMasterKey = client.MasterKey; if (!CogbotHelpers.IsNullOrZero(clientMasterKey)) { client.Friends.OfferFriendship(clientMasterKey); MasterIsFriendYet = true; } } if (!MasterIsFriendYet) { if (!string.IsNullOrEmpty(clientMasterNameToLower)) { UUID clientMasterKey = GetUserID(client.MasterName); if (!CogbotHelpers.IsNullOrZero(clientMasterKey)) { client.Friends.OfferFriendship(clientMasterKey); MasterIsFriendYet = true; } } } }
private SimObject GetSource(Simulator sim, UUID sourceID, SimObject source, ref object s, PCode isAvatar) { if (source != null) { s = source; return(source); } source = GetSimObjectFromUUID(sourceID); if (source != null) { s = source; return(source); } //TODO can we ever find a Primitive we hadnt yet interned?! Primitive sp = null;// GetPrimitive(sourceID, null); if (sp != null) { source = GetSimObject(sp); } else { if (sim != null && !RequestParcelObjects) { RequestParcelObjects = true; client.Parcels.RequestAllSimParcels(sim, false, 250); client.Grid.RequestMapItems(sim.Handle, GridItemType.AgentLocations, GridLayerType.Objects); } switch (isAvatar) { case PCode.Tree: case PCode.Grass: case PCode.NewTree: case PCode.Prim: if (!CogbotHelpers.IsNullOrZero(sourceID)) { source = CreateSimObject(sourceID, this, null); } break; case PCode.Avatar: DeclareAvatar(sourceID); break; case PCode.None: case PCode.ParticleSystem: SourceDetect(sourceID); break; default: throw new ArgumentOutOfRangeException("isAvatar hint = " + isAvatar); } // client.Self.RequestSit(sourceID,Vector3.Zero); // client.Directory. } if (source != null) { s = source; } else { lock (AvatarRegion) if (AvatarRegion.ContainsKey(sourceID)) { Debug("found it!"); } else { lock (Name2Key) { foreach (KeyValuePair <string, UUID> key in Name2Key) { string name = key.Key; if (name.StartsWith("(")) { } if (key.Value == sourceID) { var list = SimAccounts.CopyOf(); foreach (SimAvatar set in list) { if (set.ID == sourceID) { s = source = set; return(source); } } foreach (SimAvatar set in list) { string n = set.GetName(); if (n != null && n.Equals(name)) { s = source = set; return(source); } } Debug("No avatar object for " + name); SimAvatar impl = CreateSimAvatar(key.Value, this, sim); impl.AspectName = name; s = source = impl; return(source); } } } } } if (isAvatar == PCode.Prim) { SimObject impl = CreateSimObject(sourceID, this, sim); s = source = impl; return(source); } if (s == null) { s = sourceID; } return(source); }
/// <summary> /// Process an incoming effect /// </summary> private void ViewerEffectHandler(object sender, PacketReceivedEventArgs e) { Simulator simulator = e.Simulator; var packet = e.Packet; if (!IsMaster(simulator)) { return; } if (simulator != client.Network.CurrentSim) { //Debug("ViewerEffectHandler: from a differnt sim than current " + simulator); } if (!MaintainEffects) { return; } ViewerEffectPacket effect = (ViewerEffectPacket)packet; GridClient Client = client; foreach (ViewerEffectPacket.EffectBlock block in effect.Effect) { EffectType type = (EffectType)block.Type; // most effect types have at least these properties UUID sourceAvatar = CogbotHelpers.GetUUID(block.TypeData, 0); UUID targetObject = CogbotHelpers.GetUUID(block.TypeData, 16); Vector3d targetPos = new Vector3d(block.TypeData, 32); //Color4 color; //if (block.Color.Length == 4) //{ // color = new Color4(block.Color, 0); //} //else //{ // Client.Log("Received a ViewerEffect.EffectBlock.Color array with " + block.Color.Length + // " bytes", Helpers.LogLevel.Warning); // color = Color4.Black; //} if (sourceAvatar == UUID.Zero) { var ag1 = Client.Self.AgentID; var ag2 = block.AgentID; var ag3 = effect.AgentData.AgentID; Debug("Received a " + type.ToString() + " ViewerEffect sourceAvatar==NULL " + targetObject + " " + GetObject(ag1) + " " + GetObject(ag2) + " " + GetObject(ag3), Helpers.LogLevel.Warning, Client); } // Each ViewerEffect type uses it's own custom binary format for additional BVHData. Fun eh? switch (type) { case EffectType.Beam: case EffectType.Point: case EffectType.Trail: case EffectType.Sphere: case EffectType.Spiral: case EffectType.Edit: // if (Avatars_OnEffect != null) { if (block.TypeData.Length == 56) { PCode sourceType = PCode.Avatar; if (type == EffectType.Edit || type == EffectType.Point || type == EffectType.Beam) { sourceType = PCode.Avatar; } try { SendEffect(simulator, sourceAvatar, targetObject, targetPos, "EffectType-" + type.ToString(), block.Duration, block.ID, sourceType); } catch (Exception ex) { Logger.Log(ex.Message, Helpers.LogLevel.Error, Client, ex); } } else { Debug("ERROR: Received a " + type.ToString() + " ViewerEffect with an incorrect TypeData size of " + block.TypeData.Length + " bytes", Helpers.LogLevel.Warning, Client); } return; } break; case EffectType.LookAt: //if (OnLookAt != null) { if (block.TypeData.Length == 57) { LookAtType lookAt = (LookAtType)block.TypeData[56]; try { SendEffect(simulator, sourceAvatar, targetObject, targetPos, "LookAtType-" + lookAt.ToString(), block.Duration, block.ID, PCode.Avatar); } catch (Exception ex) { Debug(ex.Message, Helpers.LogLevel.Error, Client, ex); } return; } else { Debug("Received a LookAt ViewerEffect with an incorrect TypeData size of " + block.TypeData.Length + " bytes", Helpers.LogLevel.Warning, Client); } } break; case EffectType.PointAt: // if (Avatars_OnPointAt != null) { if (block.TypeData.Length == 57) { PointAtType pointAt = (PointAtType)block.TypeData[56]; try { SendEffect(simulator, sourceAvatar, targetObject, targetPos, "PointAtType-" + pointAt.ToString(), block.Duration, block.ID, PCode.Avatar); } catch (Exception ex) { Debug(ex.Message, Helpers.LogLevel.Error, Client, ex); } return; } else { Debug("Received a PointAt ViewerEffect with an incorrect TypeData size of " + block.TypeData.Length + " bytes", Helpers.LogLevel.Warning, Client); } } break; case EffectType.Text: case EffectType.Icon: case EffectType.Connector: case EffectType.FlexibleObject: case EffectType.AnimalControls: case EffectType.AnimationObject: case EffectType.Cloth: case EffectType.Glow: default: SendNewRegionEvent(SimEventType.EFFECT, "OnViewerEffect", type, sourceAvatar, targetObject, targetPos); break; } SendEffect(simulator, sourceAvatar, targetObject, targetPos, "EffectType." + type, 0.1f, block.ID, PCode.None); } }