Merge branch 'master' into presence-refactor
commit
7f960cd595
|
@ -1,4 +1,31 @@
|
|||
using System;
|
||||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
|
|
|
@ -1,3 +1,30 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using pbd = global::Google.ProtocolBuffers.Descriptors;
|
||||
using pb = global::Google.ProtocolBuffers;
|
||||
namespace Sirikata.Protocol {
|
||||
|
|
|
@ -1,4 +1,31 @@
|
|||
using System;
|
||||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
namespace PBJ
|
||||
{
|
||||
|
||||
|
|
|
@ -1,3 +1,30 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using pbd = global::Google.ProtocolBuffers.Descriptors;
|
||||
using pb = global::Google.ProtocolBuffers;
|
||||
namespace Sirikata.Persistence.Protocol {
|
||||
|
@ -812,7 +839,7 @@ namespace Sirikata.Persistence.Protocol {
|
|||
public StorageElement Reads(int index) {
|
||||
return new StorageElement(super.GetReads(index));
|
||||
}
|
||||
public Builder AddReads(StorageElement value ) {
|
||||
public Builder AddReads(StorageElement value) {
|
||||
super.AddReads(value._PBJSuper);
|
||||
return this;
|
||||
}
|
||||
|
@ -919,7 +946,7 @@ namespace Sirikata.Persistence.Protocol {
|
|||
public StorageElement Reads(int index) {
|
||||
return new StorageElement(super.GetReads(index));
|
||||
}
|
||||
public Builder AddReads(StorageElement value ) {
|
||||
public Builder AddReads(StorageElement value) {
|
||||
super.AddReads(value._PBJSuper);
|
||||
return this;
|
||||
}
|
||||
|
@ -1026,7 +1053,7 @@ namespace Sirikata.Persistence.Protocol {
|
|||
public StorageElement Writes(int index) {
|
||||
return new StorageElement(super.GetWrites(index));
|
||||
}
|
||||
public Builder AddWrites(StorageElement value ) {
|
||||
public Builder AddWrites(StorageElement value) {
|
||||
super.AddWrites(value._PBJSuper);
|
||||
return this;
|
||||
}
|
||||
|
@ -1155,7 +1182,7 @@ namespace Sirikata.Persistence.Protocol {
|
|||
public StorageElement Reads(int index) {
|
||||
return new StorageElement(super.GetReads(index));
|
||||
}
|
||||
public Builder AddReads(StorageElement value ) {
|
||||
public Builder AddReads(StorageElement value) {
|
||||
super.AddReads(value._PBJSuper);
|
||||
return this;
|
||||
}
|
||||
|
@ -1170,7 +1197,7 @@ namespace Sirikata.Persistence.Protocol {
|
|||
public StorageElement Writes(int index) {
|
||||
return new StorageElement(super.GetWrites(index));
|
||||
}
|
||||
public Builder AddWrites(StorageElement value ) {
|
||||
public Builder AddWrites(StorageElement value) {
|
||||
super.AddWrites(value._PBJSuper);
|
||||
return this;
|
||||
}
|
||||
|
@ -1322,7 +1349,7 @@ namespace Sirikata.Persistence.Protocol {
|
|||
public StorageElement Reads(int index) {
|
||||
return new StorageElement(super.GetReads(index));
|
||||
}
|
||||
public Builder AddReads(StorageElement value ) {
|
||||
public Builder AddReads(StorageElement value) {
|
||||
super.AddReads(value._PBJSuper);
|
||||
return this;
|
||||
}
|
||||
|
@ -1337,7 +1364,7 @@ namespace Sirikata.Persistence.Protocol {
|
|||
public StorageElement Writes(int index) {
|
||||
return new StorageElement(super.GetWrites(index));
|
||||
}
|
||||
public Builder AddWrites(StorageElement value ) {
|
||||
public Builder AddWrites(StorageElement value) {
|
||||
super.AddWrites(value._PBJSuper);
|
||||
return this;
|
||||
}
|
||||
|
@ -1352,7 +1379,7 @@ namespace Sirikata.Persistence.Protocol {
|
|||
public CompareElement Compares(int index) {
|
||||
return new CompareElement(super.GetCompares(index));
|
||||
}
|
||||
public Builder AddCompares(CompareElement value ) {
|
||||
public Builder AddCompares(CompareElement value) {
|
||||
super.AddCompares(value._PBJSuper);
|
||||
return this;
|
||||
}
|
||||
|
@ -1493,7 +1520,7 @@ namespace Sirikata.Persistence.Protocol {
|
|||
public StorageElement Reads(int index) {
|
||||
return new StorageElement(super.GetReads(index));
|
||||
}
|
||||
public Builder AddReads(StorageElement value ) {
|
||||
public Builder AddReads(StorageElement value) {
|
||||
super.AddReads(value._PBJSuper);
|
||||
return this;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,30 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using pbd = global::Google.ProtocolBuffers.Descriptors;
|
||||
using pb = global::Google.ProtocolBuffers;
|
||||
namespace Sirikata.Physics.Protocol {
|
||||
|
|
|
@ -1,3 +1,30 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using pbd = global::Google.ProtocolBuffers.Descriptors;
|
||||
using pb = global::Google.ProtocolBuffers;
|
||||
namespace Sirikata.Protocol {
|
||||
|
@ -3809,7 +3836,7 @@ namespace Sirikata.Protocol {
|
|||
public ConnectToSpace SpaceProperties(int index) {
|
||||
return new ConnectToSpace(super.GetSpaceProperties(index));
|
||||
}
|
||||
public Builder AddSpaceProperties(ConnectToSpace value ) {
|
||||
public Builder AddSpaceProperties(ConnectToSpace value) {
|
||||
super.AddSpaceProperties(value._PBJSuper);
|
||||
return this;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,30 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using pbd = global::Google.ProtocolBuffers.Descriptors;
|
||||
using pb = global::Google.ProtocolBuffers;
|
||||
namespace Sirikata.Subscription.Protocol {
|
||||
|
|
|
@ -1,3 +1,30 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using pbd = global::Google.ProtocolBuffers.Descriptors;
|
||||
using pb = global::Google.ProtocolBuffers;
|
||||
namespace Sirikata.PB {
|
||||
|
@ -407,7 +434,7 @@ namespace Sirikata.PB {
|
|||
public Types.SubMessage Submessers(int index) {
|
||||
return new Types.SubMessage(super.GetSubmessers(index));
|
||||
}
|
||||
public Builder AddSubmessers(Types.SubMessage value ) {
|
||||
public Builder AddSubmessers(Types.SubMessage value) {
|
||||
super.AddSubmessers(value._PBJSuper);
|
||||
return this;
|
||||
}
|
||||
|
@ -1651,7 +1678,7 @@ namespace Sirikata.PB {
|
|||
public Types.SubMessage Submessers(int index) {
|
||||
return new Types.SubMessage(super.GetSubmessers(index));
|
||||
}
|
||||
public Builder AddSubmessers(Types.SubMessage value ) {
|
||||
public Builder AddSubmessers(Types.SubMessage value) {
|
||||
super.AddSubmessers(value._PBJSuper);
|
||||
return this;
|
||||
}
|
||||
|
@ -1709,7 +1736,7 @@ namespace Sirikata.PB {
|
|||
public ExternalMessage Extmessers(int index) {
|
||||
return new ExternalMessage(super.GetExtmessers(index));
|
||||
}
|
||||
public Builder AddExtmessers(ExternalMessage value ) {
|
||||
public Builder AddExtmessers(ExternalMessage value) {
|
||||
super.AddExtmessers(value._PBJSuper);
|
||||
return this;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,30 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using pbd = global::Google.ProtocolBuffers.Descriptors;
|
||||
using pb = global::Google.ProtocolBuffers;
|
||||
namespace Sirikata.Network.Protocol {
|
||||
|
|
|
@ -93,7 +93,7 @@ namespace OpenSim.Client.Sirikata
|
|||
|
||||
public void PostInitialise()
|
||||
{
|
||||
if(!m_enabled)
|
||||
if (!m_enabled)
|
||||
return;
|
||||
|
||||
m_listener = new TcpListener(IPAddress.Any, 5943);
|
||||
|
@ -102,7 +102,7 @@ namespace OpenSim.Client.Sirikata
|
|||
|
||||
private void ListenLoop()
|
||||
{
|
||||
while(m_running)
|
||||
while (m_running)
|
||||
{
|
||||
m_listener.BeginAcceptTcpClient(AcceptSocket, m_listener);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
|
||||
namespace OpenSim.Data
|
||||
{
|
||||
public class XInventoryFolder
|
||||
{
|
||||
public string folderName;
|
||||
public int type;
|
||||
public int version;
|
||||
public UUID folderID;
|
||||
public UUID agentID;
|
||||
public UUID parentFolderID;
|
||||
}
|
||||
|
||||
public class XInventoryItem
|
||||
{
|
||||
public UUID assetID;
|
||||
public int assetType;
|
||||
public string inventoryName;
|
||||
public string inventoryDescription;
|
||||
public int inventoryNextPermissions;
|
||||
public int inventoryCurrentPermissions;
|
||||
public int invType;
|
||||
public UUID creatorID;
|
||||
public int inventoryBasePermissions;
|
||||
public int inventoryEveryOnePermissions;
|
||||
public int salePrice;
|
||||
public int saleType;
|
||||
public int creationDate;
|
||||
public UUID groupID;
|
||||
public bool groupOwned;
|
||||
public int flags;
|
||||
public UUID inventoryID;
|
||||
public UUID avatarID;
|
||||
public UUID parentFolderID;
|
||||
public int inventoryGroupPermissions;
|
||||
}
|
||||
|
||||
public interface IXInventoryData
|
||||
{
|
||||
XInventoryFolder[] GetFolders(string[] fields, string[] vals);
|
||||
XInventoryItem[] GetItems(string[] fields, string[] vals);
|
||||
|
||||
bool StoreFolder(XInventoryFolder folder);
|
||||
bool StoreItem(XInventoryItem item);
|
||||
|
||||
bool DeleteFolders(string field, string val);
|
||||
bool DeleteItems(string field, string val);
|
||||
|
||||
bool MoveItem(string id, string newParent);
|
||||
XInventoryItem[] GetActiveGestures(UUID principalID);
|
||||
int GetAssetPermissions(UUID principalID, UUID assetID);
|
||||
}
|
||||
}
|
|
@ -153,6 +153,11 @@ namespace OpenSim.Data.MySQL
|
|||
UUID.TryParse(reader[name].ToString(), out uuid);
|
||||
m_Fields[name].SetValue(row, uuid);
|
||||
}
|
||||
else if (m_Fields[name].GetValue(row) is int)
|
||||
{
|
||||
int v = Convert.ToInt32(reader[name]);
|
||||
m_Fields[name].SetValue(row, v);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Fields[name].SetValue(row, reader[name]);
|
||||
|
|
|
@ -91,7 +91,7 @@ namespace OpenSim.Data.MySQL
|
|||
rollbackStore = GridDataMySqlFile.ParseFileReadValue("rollback") == "true";
|
||||
opengridmode = GridDataMySqlFile.ParseFileReadValue("opengridmode") == "true";
|
||||
|
||||
if(rollbackStore)
|
||||
if (rollbackStore)
|
||||
m_log.Warn("[MysqlInventory] Enabling rollback mode in: " + rollbackDir);
|
||||
|
||||
database =
|
||||
|
@ -264,7 +264,7 @@ namespace OpenSim.Data.MySQL
|
|||
{
|
||||
database.Reconnect();
|
||||
m_log.Error(e.ToString());
|
||||
return null;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -552,7 +552,7 @@ namespace OpenSim.Data.MySQL
|
|||
|
||||
private void StoreRollbackItem(UUID ItemID)
|
||||
{
|
||||
if(rollbackStore == true)
|
||||
if (rollbackStore == true)
|
||||
{
|
||||
string todaysPath = RollbackGetTodaysPath();
|
||||
|
||||
|
@ -1008,7 +1008,7 @@ namespace OpenSim.Data.MySQL
|
|||
StoreRollbackFolder(f.ID);
|
||||
deleteOneFolder(f.ID);
|
||||
|
||||
if(rollbackStore)
|
||||
if (rollbackStore)
|
||||
{
|
||||
foreach (InventoryItemBase itemBase in getInventoryInFolder(f.ID))
|
||||
{
|
||||
|
|
|
@ -0,0 +1,156 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Reflection;
|
||||
using System.Collections.Generic;
|
||||
using log4net;
|
||||
using MySql.Data.MySqlClient;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
|
||||
namespace OpenSim.Data.MySQL
|
||||
{
|
||||
/// <summary>
|
||||
/// A MySQL Interface for the Asset Server
|
||||
/// </summary>
|
||||
public class MySQLXInventoryData : IXInventoryData
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(
|
||||
MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
private MySQLGenericTableHandler<XInventoryFolder> m_Folders;
|
||||
private MySqlItemHandler m_Items;
|
||||
|
||||
public MySQLXInventoryData(string conn, string realm)
|
||||
{
|
||||
m_Folders = new MySQLGenericTableHandler<XInventoryFolder>(
|
||||
conn, "inventoryfolders", "InventoryStore");
|
||||
m_Items = new MySqlItemHandler(
|
||||
conn, "inventoryitems", String.Empty);
|
||||
}
|
||||
|
||||
public XInventoryFolder[] GetFolders(string[] fields, string[] vals)
|
||||
{
|
||||
return m_Folders.Get(fields, vals);
|
||||
}
|
||||
|
||||
public XInventoryItem[] GetItems(string[] fields, string[] vals)
|
||||
{
|
||||
return m_Items.Get(fields, vals);
|
||||
}
|
||||
|
||||
public bool StoreFolder(XInventoryFolder folder)
|
||||
{
|
||||
return m_Folders.Store(folder);
|
||||
}
|
||||
|
||||
public bool StoreItem(XInventoryItem item)
|
||||
{
|
||||
return m_Items.Store(item);
|
||||
}
|
||||
|
||||
public bool DeleteFolders(string field, string val)
|
||||
{
|
||||
return m_Folders.Delete(field, val);
|
||||
}
|
||||
|
||||
public bool DeleteItems(string field, string val)
|
||||
{
|
||||
return m_Items.Delete(field, val);
|
||||
}
|
||||
|
||||
public bool MoveItem(string id, string newParent)
|
||||
{
|
||||
return m_Items.MoveItem(id, newParent);
|
||||
}
|
||||
|
||||
public XInventoryItem[] GetActiveGestures(UUID principalID)
|
||||
{
|
||||
return m_Items.GetActiveGestures(principalID);
|
||||
}
|
||||
|
||||
public int GetAssetPermissions(UUID principalID, UUID assetID)
|
||||
{
|
||||
return m_Items.GetAssetPermissions(principalID, assetID);
|
||||
}
|
||||
}
|
||||
|
||||
public class MySqlItemHandler : MySQLGenericTableHandler<XInventoryItem>
|
||||
{
|
||||
public MySqlItemHandler(string c, string t, string m) :
|
||||
base(c, t, m)
|
||||
{
|
||||
}
|
||||
|
||||
public bool MoveItem(string id, string newParent)
|
||||
{
|
||||
MySqlCommand cmd = new MySqlCommand();
|
||||
|
||||
cmd.CommandText = String.Format("update {0} set parentFolderID = ?ParentFolderID where inventoryID = ?InventoryID", m_Realm);
|
||||
cmd.Parameters.AddWithValue("?ParentFolderID", newParent);
|
||||
cmd.Parameters.AddWithValue("?InventoryID", id);
|
||||
|
||||
return ExecuteNonQuery(cmd) == 0 ? false : true;
|
||||
}
|
||||
|
||||
public XInventoryItem[] GetActiveGestures(UUID principalID)
|
||||
{
|
||||
MySqlCommand cmd = new MySqlCommand();
|
||||
cmd.CommandText = String.Format("select * from inventoryitems where avatarId = ?uuid and assetType = ?type and flags = 1", m_Realm);
|
||||
|
||||
cmd.Parameters.AddWithValue("?uuid", principalID.ToString());
|
||||
cmd.Parameters.AddWithValue("?type", (int)AssetType.Gesture);
|
||||
|
||||
return DoQuery(cmd);
|
||||
}
|
||||
|
||||
public int GetAssetPermissions(UUID principalID, UUID assetID)
|
||||
{
|
||||
MySqlCommand cmd = new MySqlCommand();
|
||||
|
||||
cmd.CommandText = String.Format("select bit_or(inventoryCurrentPermissions) as inventoryCurrentPermissions from inventoryitems where avatarID = ?PrincipalID and assetID = ?AssetID group by assetID", m_Realm);
|
||||
cmd.Parameters.AddWithValue("?PrincipalID", principalID.ToString());
|
||||
cmd.Parameters.AddWithValue("?AssetID", assetID.ToString());
|
||||
|
||||
IDataReader reader = ExecuteReader(cmd);
|
||||
|
||||
int perms = 0;
|
||||
|
||||
if (reader.Read())
|
||||
{
|
||||
perms = Convert.ToInt32(reader["inventoryCurrentPermissions"]);
|
||||
}
|
||||
|
||||
reader.Close();
|
||||
CloseReaderCommand(cmd);
|
||||
|
||||
return perms;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -577,6 +577,7 @@ namespace OpenSim.Data.Tests
|
|||
.IgnoreProperty(x=>x.RegionUUID)
|
||||
.IgnoreProperty(x=>x.Scene)
|
||||
.IgnoreProperty(x=>x.Children)
|
||||
.IgnoreProperty(x=>x.PassCollision)
|
||||
.IgnoreProperty(x=>x.RootPart));
|
||||
}
|
||||
|
||||
|
|
|
@ -828,7 +828,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
|
||||
public void SendGroupActiveProposals(IClientAPI sender,UUID agentID, UUID sessionID, UUID groupID, UUID transactionID, Dictionary<int, string> VoteID, Dictionary<int, string> VoteInitiator, Dictionary<int, string> Majority, Dictionary<int, string> Quorum, Dictionary<int, string> TerseDateID, Dictionary<int, string> StartDateTime, Dictionary<int, string> EndDateTime, Dictionary<int, string> ProposalText)
|
||||
{
|
||||
foreach(KeyValuePair<int, string> Blank in VoteID)
|
||||
foreach (KeyValuePair<int, string> Blank in VoteID)
|
||||
{
|
||||
GroupActiveProposalItemReplyPacket GAPIRP = new GroupActiveProposalItemReplyPacket();
|
||||
|
||||
|
@ -851,7 +851,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
GAPIRP.ProposalData[0] = ProposalData;
|
||||
OutPacket(GAPIRP, ThrottleOutPacketType.Task);
|
||||
}
|
||||
if(VoteID.Count == 0)
|
||||
if (VoteID.Count == 0)
|
||||
{
|
||||
GroupActiveProposalItemReplyPacket GAPIRP = new GroupActiveProposalItemReplyPacket();
|
||||
|
||||
|
@ -878,7 +878,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
|
||||
public void SendGroupVoteHistory(IClientAPI sender,UUID agentID, UUID sessionID, UUID groupID, UUID transactionID, Dictionary<int, string> VoteID, Dictionary<int, string> VoteInitiator, Dictionary<int, string> Majority, Dictionary<int, string> Quorum, Dictionary<int, string> TerseDateID, Dictionary<int, string> StartDateTime, Dictionary<int, string> EndDateTime, Dictionary<int, string> VoteType, Dictionary<int, string> VoteResult, Dictionary<int, string> ProposalText)
|
||||
{
|
||||
foreach(KeyValuePair<int, string> Blank in VoteID)
|
||||
foreach (KeyValuePair<int, string> Blank in VoteID)
|
||||
{
|
||||
GroupVoteHistoryItemReplyPacket GVHIRP = new GroupVoteHistoryItemReplyPacket();
|
||||
|
||||
|
@ -904,7 +904,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
GVHIRP.VoteItem[0] = VoteItem;
|
||||
OutPacket(GVHIRP, ThrottleOutPacketType.Task);
|
||||
}
|
||||
if(VoteID.Count == 0)
|
||||
if (VoteID.Count == 0)
|
||||
{
|
||||
GroupVoteHistoryItemReplyPacket GVHIRP = new GroupVoteHistoryItemReplyPacket();
|
||||
|
||||
|
|
|
@ -2054,6 +2054,13 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
group.Children.Count, remoteClient.AgentId, pos)
|
||||
&& !attachment)
|
||||
{
|
||||
// The client operates in no fail mode. It will
|
||||
// have already removed the item from the folder
|
||||
// if it's no copy.
|
||||
// Put it back if it's not an attachment
|
||||
//
|
||||
if (((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) && (!attachment))
|
||||
remoteClient.SendBulkUpdateInventory(item);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -1893,11 +1893,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
string data = "";
|
||||
if (obj != null)
|
||||
{
|
||||
if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name))
|
||||
if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name))
|
||||
{
|
||||
bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
|
||||
//If it is 1, it is to accept ONLY collisions from this object
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
DetectedObject detobj = new DetectedObject();
|
||||
detobj.keyUUID = obj.UUID;
|
||||
|
@ -1919,7 +1919,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
|
||||
//If it is 1, it is to accept ONLY collisions from this object, so this other object will not work
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
DetectedObject detobj = new DetectedObject();
|
||||
detobj.keyUUID = obj.UUID;
|
||||
|
@ -1944,11 +1944,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
if (av.LocalId == localId)
|
||||
{
|
||||
if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name))
|
||||
if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name))
|
||||
{
|
||||
bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
|
||||
//If it is 1, it is to accept ONLY collisions from this avatar
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
DetectedObject detobj = new DetectedObject();
|
||||
detobj.keyUUID = av.UUID;
|
||||
|
@ -1970,7 +1970,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
|
||||
//If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
DetectedObject detobj = new DetectedObject();
|
||||
detobj.keyUUID = av.UUID;
|
||||
|
@ -1998,7 +1998,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
if (m_parentGroup.Scene == null)
|
||||
return;
|
||||
if(m_parentGroup.PassCollision == true)
|
||||
if (m_parentGroup.PassCollision == true)
|
||||
{
|
||||
//TODO: Add pass to root prim!
|
||||
}
|
||||
|
@ -2029,11 +2029,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
string data = "";
|
||||
if (obj != null)
|
||||
{
|
||||
if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name))
|
||||
if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name))
|
||||
{
|
||||
bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
|
||||
//If it is 1, it is to accept ONLY collisions from this object
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
DetectedObject detobj = new DetectedObject();
|
||||
detobj.keyUUID = obj.UUID;
|
||||
|
@ -2055,7 +2055,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
|
||||
//If it is 1, it is to accept ONLY collisions from this object, so this other object will not work
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
DetectedObject detobj = new DetectedObject();
|
||||
detobj.keyUUID = obj.UUID;
|
||||
|
@ -2080,11 +2080,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
if (av.LocalId == localId)
|
||||
{
|
||||
if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name))
|
||||
if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name))
|
||||
{
|
||||
bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
|
||||
//If it is 1, it is to accept ONLY collisions from this avatar
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
DetectedObject detobj = new DetectedObject();
|
||||
detobj.keyUUID = av.UUID;
|
||||
|
@ -2106,7 +2106,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
|
||||
//If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
DetectedObject detobj = new DetectedObject();
|
||||
detobj.keyUUID = av.UUID;
|
||||
|
@ -2160,11 +2160,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
string data = "";
|
||||
if (obj != null)
|
||||
{
|
||||
if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name))
|
||||
if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name))
|
||||
{
|
||||
bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
|
||||
//If it is 1, it is to accept ONLY collisions from this object
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
DetectedObject detobj = new DetectedObject();
|
||||
detobj.keyUUID = obj.UUID;
|
||||
|
@ -2186,7 +2186,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
|
||||
//If it is 1, it is to accept ONLY collisions from this object, so this other object will not work
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
DetectedObject detobj = new DetectedObject();
|
||||
detobj.keyUUID = obj.UUID;
|
||||
|
@ -2211,11 +2211,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
if (av.LocalId == localId)
|
||||
{
|
||||
if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name))
|
||||
if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name))
|
||||
{
|
||||
bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
|
||||
//If it is 1, it is to accept ONLY collisions from this avatar
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
DetectedObject detobj = new DetectedObject();
|
||||
detobj.keyUUID = av.UUID;
|
||||
|
@ -2237,7 +2237,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
|
||||
//If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
DetectedObject detobj = new DetectedObject();
|
||||
detobj.keyUUID = av.UUID;
|
||||
|
|
|
@ -1851,7 +1851,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (collisionPoint.ApproxEquals(m_requestedSitOffset + part.AbsolutePosition, 0.2f))
|
||||
{
|
||||
SitRaycastFindEdge(collisionPoint, normal);
|
||||
m_log.DebugFormat("[SIT]: Raycast Avatar Position succeeded at point: {0}, normal:{1}", collisionPoint, normal );
|
||||
m_log.DebugFormat("[SIT]: Raycast Avatar Position succeeded at point: {0}, normal:{1}", collisionPoint, normal);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -129,10 +129,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
private float m_verticalAttractionEfficiency = 1.0f; // damped
|
||||
private float m_verticalAttractionTimescale = 500f; // Timescale > 300 means no vert attractor.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
internal void ProcessFloatVehicleParam(Vehicle pParam, float pValue)
|
||||
{
|
||||
switch (pParam)
|
||||
|
@ -229,7 +225,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
break;
|
||||
|
||||
}
|
||||
|
||||
}//end ProcessFloatVehicleParam
|
||||
|
||||
internal void ProcessVectorVehicleParam(Vehicle pParam, Vector3 pValue)
|
||||
|
@ -242,12 +237,12 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
case Vehicle.ANGULAR_MOTOR_DIRECTION:
|
||||
m_angularMotorDirection = new Vector3(pValue.X, pValue.Y, pValue.Z);
|
||||
// Limit requested angular speed to 2 rps= 4 pi rads/sec
|
||||
if(m_angularMotorDirection.X > 12.56f) m_angularMotorDirection.X = 12.56f;
|
||||
if(m_angularMotorDirection.X < - 12.56f) m_angularMotorDirection.X = - 12.56f;
|
||||
if(m_angularMotorDirection.Y > 12.56f) m_angularMotorDirection.Y = 12.56f;
|
||||
if(m_angularMotorDirection.Y < - 12.56f) m_angularMotorDirection.Y = - 12.56f;
|
||||
if(m_angularMotorDirection.Z > 12.56f) m_angularMotorDirection.Z = 12.56f;
|
||||
if(m_angularMotorDirection.Z < - 12.56f) m_angularMotorDirection.Z = - 12.56f;
|
||||
if (m_angularMotorDirection.X > 12.56f) m_angularMotorDirection.X = 12.56f;
|
||||
if (m_angularMotorDirection.X < - 12.56f) m_angularMotorDirection.X = - 12.56f;
|
||||
if (m_angularMotorDirection.Y > 12.56f) m_angularMotorDirection.Y = 12.56f;
|
||||
if (m_angularMotorDirection.Y < - 12.56f) m_angularMotorDirection.Y = - 12.56f;
|
||||
if (m_angularMotorDirection.Z > 12.56f) m_angularMotorDirection.Z = 12.56f;
|
||||
if (m_angularMotorDirection.Z < - 12.56f) m_angularMotorDirection.Z = - 12.56f;
|
||||
m_angularMotorApply = 10;
|
||||
break;
|
||||
case Vehicle.LINEAR_FRICTION_TIMESCALE:
|
||||
|
@ -261,7 +256,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
// m_linearMotorOffset = new Vector3(pValue.X, pValue.Y, pValue.Z);
|
||||
break;
|
||||
}
|
||||
|
||||
}//end ProcessVectorVehicleParam
|
||||
|
||||
internal void ProcessRotationVehicleParam(Vehicle pParam, Quaternion pValue)
|
||||
|
@ -272,7 +266,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
// m_referenceFrame = pValue;
|
||||
break;
|
||||
}
|
||||
|
||||
}//end ProcessRotationVehicleParam
|
||||
|
||||
internal void ProcessTypeChange(Vehicle pType)
|
||||
|
@ -444,7 +437,8 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
{
|
||||
if (!m_linearMotorDirection.ApproxEquals(Vector3.Zero, 0.01f)) // requested m_linearMotorDirection is significant
|
||||
{
|
||||
if(!d.BodyIsEnabled (Body)) d.BodyEnable (Body);
|
||||
if (!d.BodyIsEnabled(Body))
|
||||
d.BodyEnable(Body);
|
||||
|
||||
// add drive to body
|
||||
Vector3 addAmount = m_linearMotorDirection/(m_linearMotorTimescale/pTimestep);
|
||||
|
@ -472,7 +466,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
m_lastLinearVelocityVector = Vector3.Zero;
|
||||
}
|
||||
|
||||
|
||||
// convert requested object velocity to world-referenced vector
|
||||
m_dir = m_lastLinearVelocityVector;
|
||||
d.Quaternion rot = d.BodyGetQuaternion(Body);
|
||||
|
@ -484,7 +477,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
// .Z velocity and gravity. Therefore only 0g will used script-requested
|
||||
// .Z velocity. >0g (m_VehicleBuoyancy < 1) will used modified gravity only.
|
||||
Vector3 grav = Vector3.Zero;
|
||||
if(m_VehicleBuoyancy < 1.0f)
|
||||
if (m_VehicleBuoyancy < 1.0f)
|
||||
{
|
||||
// There is some gravity, make a gravity force vector
|
||||
// that is applied after object velocity.
|
||||
|
@ -498,27 +491,27 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
} // else its 1.0, no gravity.
|
||||
|
||||
// Check if hovering
|
||||
if( (m_flags & (VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.HOVER_GLOBAL_HEIGHT)) != 0)
|
||||
if ((m_flags & (VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.HOVER_GLOBAL_HEIGHT)) != 0)
|
||||
{
|
||||
// We should hover, get the target height
|
||||
d.Vector3 pos = d.BodyGetPosition(Body);
|
||||
if((m_flags & VehicleFlag.HOVER_WATER_ONLY) == VehicleFlag.HOVER_WATER_ONLY)
|
||||
if ((m_flags & VehicleFlag.HOVER_WATER_ONLY) == VehicleFlag.HOVER_WATER_ONLY)
|
||||
{
|
||||
m_VhoverTargetHeight = _pParentScene.GetWaterLevel() + m_VhoverHeight;
|
||||
}
|
||||
else if((m_flags & VehicleFlag.HOVER_TERRAIN_ONLY) == VehicleFlag.HOVER_TERRAIN_ONLY)
|
||||
else if ((m_flags & VehicleFlag.HOVER_TERRAIN_ONLY) == VehicleFlag.HOVER_TERRAIN_ONLY)
|
||||
{
|
||||
m_VhoverTargetHeight = _pParentScene.GetTerrainHeightAtXY(pos.X, pos.Y) + m_VhoverHeight;
|
||||
}
|
||||
else if((m_flags & VehicleFlag.HOVER_GLOBAL_HEIGHT) == VehicleFlag.HOVER_GLOBAL_HEIGHT)
|
||||
else if ((m_flags & VehicleFlag.HOVER_GLOBAL_HEIGHT) == VehicleFlag.HOVER_GLOBAL_HEIGHT)
|
||||
{
|
||||
m_VhoverTargetHeight = m_VhoverHeight;
|
||||
}
|
||||
|
||||
if((m_flags & VehicleFlag.HOVER_UP_ONLY) == VehicleFlag.HOVER_UP_ONLY)
|
||||
if ((m_flags & VehicleFlag.HOVER_UP_ONLY) == VehicleFlag.HOVER_UP_ONLY)
|
||||
{
|
||||
// If body is aready heigher, use its height as target height
|
||||
if(pos.Z > m_VhoverTargetHeight) m_VhoverTargetHeight = pos.Z;
|
||||
if (pos.Z > m_VhoverTargetHeight) m_VhoverTargetHeight = pos.Z;
|
||||
}
|
||||
|
||||
// m_VhoverEfficiency = 0f; // 0=boucy, 1=Crit.damped
|
||||
|
@ -526,11 +519,11 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
// pTimestep is time since last frame,in secs
|
||||
float herr0 = pos.Z - m_VhoverTargetHeight;
|
||||
// Replace Vertical speed with correction figure if significant
|
||||
if(Math.Abs(herr0) > 0.01f )
|
||||
if (Math.Abs(herr0) > 0.01f)
|
||||
{
|
||||
d.Mass objMass;
|
||||
d.BodyGetMass(Body, out objMass);
|
||||
m_dir.Z = - ( (herr0 * pTimestep * 50.0f) / m_VhoverTimescale);
|
||||
m_dir.Z = - ((herr0 * pTimestep * 50.0f) / m_VhoverTimescale);
|
||||
//KF: m_VhoverEfficiency is not yet implemented
|
||||
}
|
||||
else
|
||||
|
@ -569,7 +562,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
if (m_angularMotorApply > 0)
|
||||
{
|
||||
// ramp up to new value
|
||||
// current velocity += error / ( time to get there / step interval )
|
||||
// current velocity += error / (time to get there / step interval)
|
||||
// requested speed - last motor speed
|
||||
m_angularMotorVelocity.X += (m_angularMotorDirection.X - m_angularMotorVelocity.X) / (m_angularMotorTimescale / pTimestep);
|
||||
m_angularMotorVelocity.Y += (m_angularMotorDirection.Y - m_angularMotorVelocity.Y) / (m_angularMotorTimescale / pTimestep);
|
||||
|
@ -589,11 +582,10 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
m_angularMotorVelocity -= m_angularMotorVelocity / (m_angularMotorDecayTimescale / pTimestep);
|
||||
} // end motor section
|
||||
|
||||
|
||||
// Vertical attractor section
|
||||
Vector3 vertattr = Vector3.Zero;
|
||||
|
||||
if(m_verticalAttractionTimescale < 300)
|
||||
if (m_verticalAttractionTimescale < 300)
|
||||
{
|
||||
float VAservo = 0.2f / (m_verticalAttractionTimescale * pTimestep);
|
||||
// get present body rotation
|
||||
|
@ -615,7 +607,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
// Error is 0 (no error) to +/- 2 (max error)
|
||||
// scale it by VAservo
|
||||
verterr = verterr * VAservo;
|
||||
//if(frcount == 0) Console.WriteLine("VAerr=" + verterr);
|
||||
//if (frcount == 0) Console.WriteLine("VAerr=" + verterr);
|
||||
|
||||
// As the body rotates around the X axis, then verterr.Y increases; Rotated around Y then .X increases, so
|
||||
// Change Body angular velocity X based on Y, and Y based on X. Z is not changed.
|
||||
|
@ -640,7 +632,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
|
||||
if (!m_lastAngularVelocity.ApproxEquals(Vector3.Zero, 0.01f))
|
||||
{
|
||||
if(!d.BodyIsEnabled (Body)) d.BodyEnable (Body);
|
||||
if (!d.BodyIsEnabled (Body)) d.BodyEnable (Body);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* Copyright (c) Contributors, http://opensimulator.org/
|
||||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
|
@ -294,7 +296,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
m_taintselected = value;
|
||||
m_isSelected = value;
|
||||
}
|
||||
if(m_isSelected) disableBodySoft();
|
||||
if (m_isSelected) disableBodySoft();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -872,7 +874,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
|
||||
public void ProcessTaints(float timestep)
|
||||
{
|
||||
//Console.WriteLine("ProcessTaints for " + m_primName );
|
||||
//Console.WriteLine("ProcessTaints for " + m_primName);
|
||||
if (m_taintadd)
|
||||
{
|
||||
changeadd(timestep);
|
||||
|
@ -885,7 +887,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
|
||||
if (m_taintrot != _orientation)
|
||||
{
|
||||
if(childPrim && IsPhysical) // For physical child prim...
|
||||
if (childPrim && IsPhysical) // For physical child prim...
|
||||
{
|
||||
rotate(timestep);
|
||||
// KF: ODE will also rotate the parent prim!
|
||||
|
@ -1572,7 +1574,7 @@ Console.WriteLine(" JointCreateFixed");
|
|||
else
|
||||
{
|
||||
//Console.WriteLine("Move " + m_primName);
|
||||
if(!d.BodyIsEnabled (Body)) d.BodyEnable (Body); // KF add 161009
|
||||
if (!d.BodyIsEnabled (Body)) d.BodyEnable (Body); // KF add 161009
|
||||
// NON-'VEHICLES' are dealt with here
|
||||
if (d.BodyIsEnabled(Body) && !m_angularlock.ApproxEquals(Vector3.Zero, 0.003f))
|
||||
{
|
||||
|
@ -1890,7 +1892,7 @@ Console.WriteLine(" JointCreateFixed");
|
|||
m_log.Error("[PHYSICS]: PrimGeom dead");
|
||||
}
|
||||
}
|
||||
//Console.WriteLine("changePhysicsStatus for " + m_primName );
|
||||
//Console.WriteLine("changePhysicsStatus for " + m_primName);
|
||||
changeadd(2f);
|
||||
}
|
||||
if (childPrim)
|
||||
|
|
|
@ -2753,7 +2753,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
m_host.CollisionFilter.Clear();
|
||||
if(id != null)
|
||||
if (id != null)
|
||||
{
|
||||
m_host.CollisionFilter.Add(accept,id);
|
||||
}
|
||||
|
@ -3818,6 +3818,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
Util.Clip((float)color.z, 0.0f, 1.0f));
|
||||
m_host.SetText(text, av3, Util.Clip((float)alpha, 0.0f, 1.0f));
|
||||
m_host.ParentGroup.HasGroupChanged = true;
|
||||
m_host.ParentGroup.ScheduleGroupForFullUpdate();
|
||||
}
|
||||
|
||||
public LSL_Float llWater(LSL_Vector offset)
|
||||
|
@ -4240,7 +4241,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public void llPassCollisions(int pass)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
if(pass == 0)
|
||||
if (pass == 0)
|
||||
{
|
||||
m_host.ParentGroup.PassCollision = false;
|
||||
}
|
||||
|
@ -7437,7 +7438,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
// makes it more difficult to determine a child prim's actual inworld position).
|
||||
if (part.ParentID != 0)
|
||||
v = ((v - llGetRootPosition()) * llGetRootRotation()) + llGetRootPosition();
|
||||
res.Add( v );
|
||||
res.Add(v);
|
||||
break;
|
||||
|
||||
case (int)ScriptBaseClass.PRIM_SIZE:
|
||||
|
|
|
@ -1965,7 +1965,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
|
||||
for (int i = 0; i < 21; i++)
|
||||
{
|
||||
ret.Add(new LSL_Float( stats[i] ));
|
||||
ret.Add(new LSL_Float(stats[i]));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -649,7 +649,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
|||
}
|
||||
public void osKickAvatar(string FirstName,string SurName,string alert)
|
||||
{
|
||||
m_OSSL_Functions.osKickAvatar( FirstName, SurName, alert);
|
||||
m_OSSL_Functions.osKickAvatar(FirstName, SurName, alert);
|
||||
}
|
||||
public void osSetSpeed(string UUID, float SpeedModifier)
|
||||
{
|
||||
|
|
|
@ -126,6 +126,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
|||
m_InitialValues = GetVars();
|
||||
}
|
||||
|
||||
public virtual void StateChange(string newState)
|
||||
{
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
// m_sponser.Close();
|
||||
|
|
|
@ -591,7 +591,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
|||
|
||||
Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> linemap;
|
||||
|
||||
lock(m_ScriptErrors)
|
||||
lock (m_ScriptErrors)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
|
|
@ -59,6 +59,7 @@ namespace OpenSim.Services.Interfaces
|
|||
/// </summary>
|
||||
/// <param name="userID"></param>
|
||||
/// <returns></returns>
|
||||
[Obsolete]
|
||||
InventoryCollection GetUserInventory(UUID userID);
|
||||
|
||||
/// <summary>
|
||||
|
@ -67,6 +68,7 @@ namespace OpenSim.Services.Interfaces
|
|||
/// </summary>
|
||||
/// <param name="userID"></param>
|
||||
/// <param name="callback"></param>
|
||||
[Obsolete]
|
||||
void GetUserInventory(UUID userID, InventoryReceiptCallback callback);
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using log4net;
|
||||
|
@ -102,7 +103,17 @@ namespace OpenSim.Services.InventoryService
|
|||
// See IInventoryServices
|
||||
public bool CreateUserInventory(UUID user)
|
||||
{
|
||||
InventoryFolderBase existingRootFolder = GetRootFolder(user);
|
||||
InventoryFolderBase existingRootFolder;
|
||||
try
|
||||
{
|
||||
existingRootFolder = GetRootFolder(user);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// Munch the exception, it has already been reported
|
||||
//
|
||||
return false;
|
||||
}
|
||||
|
||||
if (null != existingRootFolder)
|
||||
{
|
||||
|
|
|
@ -0,0 +1,508 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using OpenMetaverse;
|
||||
using log4net;
|
||||
using Nini.Config;
|
||||
using System.Reflection;
|
||||
using OpenSim.Services.Base;
|
||||
using OpenSim.Services.Interfaces;
|
||||
using OpenSim.Data;
|
||||
using OpenSim.Framework;
|
||||
|
||||
namespace OpenSim.Services.InventoryService
|
||||
{
|
||||
public class XInventoryService : ServiceBase, IInventoryService
|
||||
{
|
||||
private static readonly ILog m_log =
|
||||
LogManager.GetLogger(
|
||||
MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
protected IXInventoryData m_Database;
|
||||
|
||||
public XInventoryService(IConfigSource config) : base(config)
|
||||
{
|
||||
string dllName = String.Empty;
|
||||
string connString = String.Empty;
|
||||
//string realm = "Inventory"; // OSG version doesn't use this
|
||||
|
||||
//
|
||||
// Try reading the [InventoryService] section first, if it exists
|
||||
//
|
||||
IConfig authConfig = config.Configs["InventoryService"];
|
||||
if (authConfig != null)
|
||||
{
|
||||
dllName = authConfig.GetString("StorageProvider", dllName);
|
||||
connString = authConfig.GetString("ConnectionString", connString);
|
||||
// realm = authConfig.GetString("Realm", realm);
|
||||
}
|
||||
|
||||
//
|
||||
// Try reading the [DatabaseService] section, if it exists
|
||||
//
|
||||
IConfig dbConfig = config.Configs["DatabaseService"];
|
||||
if (dbConfig != null)
|
||||
{
|
||||
if (dllName == String.Empty)
|
||||
dllName = dbConfig.GetString("StorageProvider", String.Empty);
|
||||
if (connString == String.Empty)
|
||||
connString = dbConfig.GetString("ConnectionString", String.Empty);
|
||||
}
|
||||
|
||||
//
|
||||
// We tried, but this doesn't exist. We can't proceed.
|
||||
//
|
||||
if (dllName == String.Empty)
|
||||
throw new Exception("No StorageProvider configured");
|
||||
|
||||
m_Database = LoadPlugin<IXInventoryData>(dllName,
|
||||
new Object[] {connString, String.Empty});
|
||||
if (m_Database == null)
|
||||
throw new Exception("Could not find a storage interface in the given module");
|
||||
}
|
||||
|
||||
public bool CreateUserInventory(UUID principalID)
|
||||
{
|
||||
// This is braindeaad. We can't ever communicate that we fixed
|
||||
// an existing inventory. Well, just return root folder status,
|
||||
// but check sanity anyway.
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
InventoryFolderBase rootFolder = GetRootFolder(principalID);
|
||||
|
||||
if (rootFolder == null)
|
||||
{
|
||||
rootFolder = ConvertToOpenSim(CreateFolder(principalID, UUID.Zero, (int)AssetType.Folder, "My Inventory"));
|
||||
result = true;
|
||||
}
|
||||
|
||||
XInventoryFolder[] sysFolders = GetSystemFolders(principalID);
|
||||
|
||||
if (!Array.Exists(sysFolders, delegate (XInventoryFolder f) { if (f.type == (int)AssetType.Animation) return true; return false; }))
|
||||
CreateFolder(principalID, rootFolder.ID, (int)AssetType.Animation, "Animations");
|
||||
if (!Array.Exists(sysFolders, delegate (XInventoryFolder f) { if (f.type == (int)AssetType.Bodypart) return true; return false; }))
|
||||
CreateFolder(principalID, rootFolder.ID, (int)AssetType.Bodypart, "Body Parts");
|
||||
if (!Array.Exists(sysFolders, delegate (XInventoryFolder f) { if (f.type == (int)AssetType.CallingCard) return true; return false; }))
|
||||
CreateFolder(principalID, rootFolder.ID, (int)AssetType.CallingCard, "Calling Cards");
|
||||
if (!Array.Exists(sysFolders, delegate (XInventoryFolder f) { if (f.type == (int)AssetType.Clothing) return true; return false; }))
|
||||
CreateFolder(principalID, rootFolder.ID, (int)AssetType.Clothing, "Clothing");
|
||||
if (!Array.Exists(sysFolders, delegate (XInventoryFolder f) { if (f.type == (int)AssetType.Gesture) return true; return false; }))
|
||||
CreateFolder(principalID, rootFolder.ID, (int)AssetType.Gesture, "Gestures");
|
||||
if (!Array.Exists(sysFolders, delegate (XInventoryFolder f) { if (f.type == (int)AssetType.Landmark) return true; return false; }))
|
||||
CreateFolder(principalID, rootFolder.ID, (int)AssetType.Landmark, "Landmarks");
|
||||
if (!Array.Exists(sysFolders, delegate (XInventoryFolder f) { if (f.type == (int)AssetType.LostAndFoundFolder) return true; return false; }))
|
||||
CreateFolder(principalID, rootFolder.ID, (int)AssetType.LostAndFoundFolder, "Lost And Found");
|
||||
if (!Array.Exists(sysFolders, delegate (XInventoryFolder f) { if (f.type == (int)AssetType.Notecard) return true; return false; }))
|
||||
CreateFolder(principalID, rootFolder.ID, (int)AssetType.Notecard, "Notecards");
|
||||
if (!Array.Exists(sysFolders, delegate (XInventoryFolder f) { if (f.type == (int)AssetType.Object) return true; return false; }))
|
||||
CreateFolder(principalID, rootFolder.ID, (int)AssetType.Object, "Objects");
|
||||
if (!Array.Exists(sysFolders, delegate (XInventoryFolder f) { if (f.type == (int)AssetType.SnapshotFolder) return true; return false; }))
|
||||
CreateFolder(principalID, rootFolder.ID, (int)AssetType.SnapshotFolder, "Photo Album");
|
||||
if (!Array.Exists(sysFolders, delegate (XInventoryFolder f) { if (f.type == (int)AssetType.LSLText) return true; return false; }))
|
||||
CreateFolder(principalID, rootFolder.ID, (int)AssetType.LSLText, "Scripts");
|
||||
if (!Array.Exists(sysFolders, delegate (XInventoryFolder f) { if (f.type == (int)AssetType.Sound) return true; return false; }))
|
||||
CreateFolder(principalID, rootFolder.ID, (int)AssetType.Sound, "Sounds");
|
||||
if (!Array.Exists(sysFolders, delegate (XInventoryFolder f) { if (f.type == (int)AssetType.Texture) return true; return false; }))
|
||||
CreateFolder(principalID, rootFolder.ID, (int)AssetType.Texture, "Textures");
|
||||
if (!Array.Exists(sysFolders, delegate (XInventoryFolder f) { if (f.type == (int)AssetType.TrashFolder) return true; return false; }))
|
||||
CreateFolder(principalID, rootFolder.ID, (int)AssetType.TrashFolder, "Trash");
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private XInventoryFolder CreateFolder(UUID principalID, UUID parentID, int type, string name)
|
||||
{
|
||||
XInventoryFolder newFolder = new XInventoryFolder();
|
||||
|
||||
newFolder.folderName = name;
|
||||
newFolder.type = type;
|
||||
newFolder.version = 1;
|
||||
newFolder.folderID = UUID.Random();
|
||||
newFolder.agentID = principalID;
|
||||
newFolder.parentFolderID = parentID;
|
||||
|
||||
m_Database.StoreFolder(newFolder);
|
||||
|
||||
return newFolder;
|
||||
}
|
||||
|
||||
private XInventoryFolder[] GetSystemFolders(UUID principalID)
|
||||
{
|
||||
XInventoryFolder[] allFolders = m_Database.GetFolders(
|
||||
new string[] { "agentID" },
|
||||
new string[] { principalID.ToString() });
|
||||
|
||||
XInventoryFolder[] sysFolders = Array.FindAll(
|
||||
allFolders,
|
||||
delegate (XInventoryFolder f)
|
||||
{
|
||||
if (f.type > 0)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
|
||||
return sysFolders;
|
||||
}
|
||||
|
||||
public List<InventoryFolderBase> GetInventorySkeleton(UUID principalID)
|
||||
{
|
||||
XInventoryFolder[] allFolders = m_Database.GetFolders(
|
||||
new string[] { "agentID" },
|
||||
new string[] { principalID.ToString() });
|
||||
|
||||
if (allFolders.Length == 0)
|
||||
return null;
|
||||
|
||||
List<InventoryFolderBase> folders = new List<InventoryFolderBase>();
|
||||
|
||||
foreach (XInventoryFolder x in allFolders)
|
||||
{
|
||||
m_log.DebugFormat("[INVENTORY]: Adding folder {0} to skeleton", x.folderName);
|
||||
folders.Add(ConvertToOpenSim(x));
|
||||
}
|
||||
|
||||
return folders;
|
||||
}
|
||||
|
||||
public InventoryFolderBase GetRootFolder(UUID principalID)
|
||||
{
|
||||
XInventoryFolder[] folders = m_Database.GetFolders(
|
||||
new string[] { "agentID", "parentFolderID"},
|
||||
new string[] { principalID.ToString(), UUID.Zero.ToString() });
|
||||
|
||||
if (folders.Length == 0)
|
||||
return null;
|
||||
|
||||
return ConvertToOpenSim(folders[0]);
|
||||
}
|
||||
|
||||
public InventoryFolderBase GetFolderForType(UUID principalID, AssetType type)
|
||||
{
|
||||
XInventoryFolder[] folders = m_Database.GetFolders(
|
||||
new string[] { "agentID", "type"},
|
||||
new string[] { principalID.ToString(), ((int)type).ToString() });
|
||||
|
||||
if (folders.Length == 0)
|
||||
return null;
|
||||
|
||||
return ConvertToOpenSim(folders[0]);
|
||||
}
|
||||
|
||||
public InventoryCollection GetFolderContent(UUID principalID, UUID folderID)
|
||||
{
|
||||
// This method doesn't receive a valud principal id from the
|
||||
// connector. So we disregard the principal and look
|
||||
// by ID.
|
||||
//
|
||||
m_log.DebugFormat("[INVENTORY]: Fetch contents for folder {0}", folderID.ToString());
|
||||
InventoryCollection inventory = new InventoryCollection();
|
||||
inventory.UserID = principalID;
|
||||
inventory.Folders = new List<InventoryFolderBase>();
|
||||
inventory.Items = new List<InventoryItemBase>();
|
||||
|
||||
XInventoryFolder[] folders = m_Database.GetFolders(
|
||||
new string[] { "parentFolderID"},
|
||||
new string[] { folderID.ToString() });
|
||||
|
||||
foreach (XInventoryFolder x in folders)
|
||||
{
|
||||
m_log.DebugFormat("[INVENTORY]: Adding folder {0} to response", x.folderName);
|
||||
inventory.Folders.Add(ConvertToOpenSim(x));
|
||||
}
|
||||
|
||||
XInventoryItem[] items = m_Database.GetItems(
|
||||
new string[] { "parentFolderID"},
|
||||
new string[] { folderID.ToString() });
|
||||
|
||||
foreach (XInventoryItem i in items)
|
||||
{
|
||||
m_log.DebugFormat("[INVENTORY]: Adding item {0} to response", i.inventoryName);
|
||||
inventory.Items.Add(ConvertToOpenSim(i));
|
||||
}
|
||||
|
||||
return inventory;
|
||||
}
|
||||
|
||||
public List<InventoryItemBase> GetFolderItems(UUID principalID, UUID folderID)
|
||||
{
|
||||
// Since we probably don't get a valid principal here, either ...
|
||||
//
|
||||
List<InventoryItemBase> invItems = new List<InventoryItemBase>();
|
||||
|
||||
XInventoryItem[] items = m_Database.GetItems(
|
||||
new string[] { "parentFolderID"},
|
||||
new string[] { UUID.Zero.ToString() });
|
||||
|
||||
foreach (XInventoryItem i in items)
|
||||
invItems.Add(ConvertToOpenSim(i));
|
||||
|
||||
return invItems;
|
||||
}
|
||||
|
||||
public bool AddFolder(InventoryFolderBase folder)
|
||||
{
|
||||
XInventoryFolder xFolder = ConvertFromOpenSim(folder);
|
||||
return m_Database.StoreFolder(xFolder);
|
||||
}
|
||||
|
||||
public bool UpdateFolder(InventoryFolderBase folder)
|
||||
{
|
||||
return AddFolder(folder);
|
||||
}
|
||||
|
||||
public bool MoveFolder(InventoryFolderBase folder)
|
||||
{
|
||||
XInventoryFolder[] x = m_Database.GetFolders(
|
||||
new string[] { "folderID" },
|
||||
new string[] { folder.ID.ToString() });
|
||||
|
||||
if (x.Length == 0)
|
||||
return false;
|
||||
|
||||
x[0].parentFolderID = folder.ParentID;
|
||||
|
||||
return m_Database.StoreFolder(x[0]);
|
||||
}
|
||||
|
||||
// We don't check the principal's ID here
|
||||
//
|
||||
public bool DeleteFolders(UUID principalID, List<UUID> folderIDs)
|
||||
{
|
||||
// Ignore principal ID, it's bogus at connector level
|
||||
//
|
||||
foreach (UUID id in folderIDs)
|
||||
{
|
||||
InventoryFolderBase f = new InventoryFolderBase();
|
||||
f.ID = id;
|
||||
PurgeFolder(f);
|
||||
m_Database.DeleteFolders("folderID", id.ToString());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool PurgeFolder(InventoryFolderBase folder)
|
||||
{
|
||||
XInventoryFolder[] subFolders = m_Database.GetFolders(
|
||||
new string[] { "parentFolderID" },
|
||||
new string[] { folder.ID.ToString() });
|
||||
|
||||
foreach (XInventoryFolder x in subFolders)
|
||||
{
|
||||
PurgeFolder(ConvertToOpenSim(x));
|
||||
m_Database.DeleteFolders("folderID", x.folderID.ToString());
|
||||
}
|
||||
|
||||
m_Database.DeleteItems("parentFolderID", folder.ID.ToString());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool AddItem(InventoryItemBase item)
|
||||
{
|
||||
return m_Database.StoreItem(ConvertFromOpenSim(item));
|
||||
}
|
||||
|
||||
public bool UpdateItem(InventoryItemBase item)
|
||||
{
|
||||
return m_Database.StoreItem(ConvertFromOpenSim(item));
|
||||
}
|
||||
|
||||
public bool MoveItems(UUID principalID, List<InventoryItemBase> items)
|
||||
{
|
||||
// Principal is b0rked. *sigh*
|
||||
//
|
||||
foreach (InventoryItemBase i in items)
|
||||
{
|
||||
m_Database.MoveItem(i.ID.ToString(), i.Folder.ToString());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool DeleteItems(UUID principalID, List<UUID> itemIDs)
|
||||
{
|
||||
// Just use the ID... *facepalms*
|
||||
//
|
||||
foreach (UUID id in itemIDs)
|
||||
m_Database.DeleteItems("inventoryID", id.ToString());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public InventoryItemBase GetItem(InventoryItemBase item)
|
||||
{
|
||||
XInventoryItem[] items = m_Database.GetItems(
|
||||
new string[] { "inventoryID" },
|
||||
new string[] { item.ID.ToString() });
|
||||
|
||||
if (items.Length == 0)
|
||||
return null;
|
||||
|
||||
return ConvertToOpenSim(items[0]);
|
||||
}
|
||||
|
||||
public InventoryFolderBase GetFolder(InventoryFolderBase folder)
|
||||
{
|
||||
XInventoryFolder[] folders = m_Database.GetFolders(
|
||||
new string[] { "folderID"},
|
||||
new string[] { folder.ID.ToString() });
|
||||
|
||||
if (folders.Length == 0)
|
||||
return null;
|
||||
|
||||
return ConvertToOpenSim(folders[0]);
|
||||
}
|
||||
|
||||
public List<InventoryItemBase> GetActiveGestures(UUID principalID)
|
||||
{
|
||||
XInventoryItem[] items = m_Database.GetActiveGestures(principalID);
|
||||
|
||||
if (items.Length == 0)
|
||||
return null;
|
||||
|
||||
List<InventoryItemBase> ret = new List<InventoryItemBase>();
|
||||
|
||||
foreach (XInventoryItem x in items)
|
||||
ret.Add(ConvertToOpenSim(x));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
public int GetAssetPermissions(UUID principalID, UUID assetID)
|
||||
{
|
||||
return m_Database.GetAssetPermissions(principalID, assetID);
|
||||
}
|
||||
|
||||
// CM never needed those. Left unimplemented.
|
||||
// Obsolete in core
|
||||
//
|
||||
public InventoryCollection GetUserInventory(UUID userID)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
|
||||
{
|
||||
}
|
||||
|
||||
// Unused.
|
||||
//
|
||||
public bool HasInventoryForUser(UUID userID)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// CM Helpers
|
||||
//
|
||||
private InventoryFolderBase ConvertToOpenSim(XInventoryFolder folder)
|
||||
{
|
||||
InventoryFolderBase newFolder = new InventoryFolderBase();
|
||||
|
||||
newFolder.ParentID = folder.parentFolderID;
|
||||
newFolder.Type = (short)folder.type;
|
||||
newFolder.Version = (ushort)folder.version;
|
||||
newFolder.Name = folder.folderName;
|
||||
newFolder.Owner = folder.agentID;
|
||||
newFolder.ID = folder.folderID;
|
||||
|
||||
return newFolder;
|
||||
}
|
||||
|
||||
private XInventoryFolder ConvertFromOpenSim(InventoryFolderBase folder)
|
||||
{
|
||||
XInventoryFolder newFolder = new XInventoryFolder();
|
||||
|
||||
newFolder.parentFolderID = folder.ParentID;
|
||||
newFolder.type = (int)folder.Type;
|
||||
newFolder.version = (int)folder.Version;
|
||||
newFolder.folderName = folder.Name;
|
||||
newFolder.agentID = folder.Owner;
|
||||
newFolder.folderID = folder.ID;
|
||||
|
||||
return newFolder;
|
||||
}
|
||||
|
||||
private InventoryItemBase ConvertToOpenSim(XInventoryItem item)
|
||||
{
|
||||
InventoryItemBase newItem = new InventoryItemBase();
|
||||
|
||||
newItem.AssetID = item.assetID;
|
||||
newItem.AssetType = item.assetType;
|
||||
newItem.Name = item.inventoryName;
|
||||
newItem.Owner = item.avatarID;
|
||||
newItem.ID = item.inventoryID;
|
||||
newItem.InvType = item.invType;
|
||||
newItem.Folder = item.parentFolderID;
|
||||
newItem.CreatorId = item.creatorID.ToString();
|
||||
newItem.Description = item.inventoryDescription;
|
||||
newItem.NextPermissions = (uint)item.inventoryNextPermissions;
|
||||
newItem.CurrentPermissions = (uint)item.inventoryCurrentPermissions;
|
||||
newItem.BasePermissions = (uint)item.inventoryBasePermissions;
|
||||
newItem.EveryOnePermissions = (uint)item.inventoryEveryOnePermissions;
|
||||
newItem.GroupPermissions = (uint)item.inventoryGroupPermissions;
|
||||
newItem.GroupID = item.groupID;
|
||||
newItem.GroupOwned = item.groupOwned;
|
||||
newItem.SalePrice = item.salePrice;
|
||||
newItem.SaleType = (byte)item.saleType;
|
||||
newItem.Flags = (uint)item.flags;
|
||||
newItem.CreationDate = item.creationDate;
|
||||
|
||||
return newItem;
|
||||
}
|
||||
|
||||
private XInventoryItem ConvertFromOpenSim(InventoryItemBase item)
|
||||
{
|
||||
XInventoryItem newItem = new XInventoryItem();
|
||||
|
||||
newItem.assetID = item.AssetID;
|
||||
newItem.assetType = item.AssetType;
|
||||
newItem.inventoryName = item.Name;
|
||||
newItem.avatarID = item.Owner;
|
||||
newItem.inventoryID = item.ID;
|
||||
newItem.invType = item.InvType;
|
||||
newItem.parentFolderID = item.Folder;
|
||||
newItem.creatorID = item.CreatorIdAsUuid;
|
||||
newItem.inventoryDescription = item.Description;
|
||||
newItem.inventoryNextPermissions = (int)item.NextPermissions;
|
||||
newItem.inventoryCurrentPermissions = (int)item.CurrentPermissions;
|
||||
newItem.inventoryBasePermissions = (int)item.BasePermissions;
|
||||
newItem.inventoryEveryOnePermissions = (int)item.EveryOnePermissions;
|
||||
newItem.inventoryGroupPermissions = (int)item.GroupPermissions;
|
||||
newItem.groupID = item.GroupID;
|
||||
newItem.groupOwned = item.GroupOwned;
|
||||
newItem.salePrice = item.SalePrice;
|
||||
newItem.saleType = (int)item.SaleType;
|
||||
newItem.flags = (int)item.Flags;
|
||||
newItem.creationDate = item.CreationDate;
|
||||
|
||||
return newItem;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue