diff options
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | 167 |
1 files changed, 74 insertions, 93 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 32ad21f..154179c 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -1733,7 +1733,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1733 | SaveNotecard(notecardName, notecardData.ToString()); | 1733 | SaveNotecard(notecardName, notecardData.ToString()); |
1734 | } | 1734 | } |
1735 | 1735 | ||
1736 | protected void SaveNotecard(string notecardName, string notecardData) | 1736 | /// <summary> |
1737 | /// Save a notecard to prim inventory. | ||
1738 | /// </summary> | ||
1739 | /// <param name="notecardName"></param> | ||
1740 | /// <param name="notecardData"></param> | ||
1741 | /// <returns>Prim inventory item created.</returns> | ||
1742 | protected TaskInventoryItem SaveNotecard(string notecardName, string notecardData) | ||
1737 | { | 1743 | { |
1738 | // Create new asset | 1744 | // Create new asset |
1739 | AssetBase asset = new AssetBase(UUID.Random(), notecardName, (sbyte)AssetType.Notecard, m_host.OwnerID.ToString()); | 1745 | AssetBase asset = new AssetBase(UUID.Random(), notecardName, (sbyte)AssetType.Notecard, m_host.OwnerID.ToString()); |
@@ -1770,6 +1776,66 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1770 | taskItem.AssetID = asset.FullID; | 1776 | taskItem.AssetID = asset.FullID; |
1771 | 1777 | ||
1772 | m_host.Inventory.AddInventoryItem(taskItem, false); | 1778 | m_host.Inventory.AddInventoryItem(taskItem, false); |
1779 | |||
1780 | return taskItem; | ||
1781 | } | ||
1782 | |||
1783 | /// <summary> | ||
1784 | /// Load the notecard data found at the given prim inventory item name or asset uuid. | ||
1785 | /// </summary> | ||
1786 | /// <param name="notecardNameOrUuid"></param> | ||
1787 | /// <returns>The text loaded. Null if no notecard was found.</returns> | ||
1788 | protected string LoadNotecard(string notecardNameOrUuid) | ||
1789 | { | ||
1790 | UUID assetID = CacheNotecard(notecardNameOrUuid); | ||
1791 | StringBuilder notecardData = new StringBuilder(); | ||
1792 | |||
1793 | for (int count = 0; count < NotecardCache.GetLines(assetID); count++) | ||
1794 | notecardData.Append(NotecardCache.GetLine(assetID, count, 255) + "\n"); | ||
1795 | |||
1796 | return notecardData.ToString(); | ||
1797 | } | ||
1798 | |||
1799 | /// <summary> | ||
1800 | /// Cache a notecard's contents. | ||
1801 | /// </summary> | ||
1802 | /// <param name="notecardNameOrUuid"></param> | ||
1803 | /// <returns> | ||
1804 | /// The asset id of the notecard, which is used for retrieving the cached data. | ||
1805 | /// UUID.Zero if no asset could be found. | ||
1806 | /// </returns> | ||
1807 | protected UUID CacheNotecard(string notecardNameOrUuid) | ||
1808 | { | ||
1809 | UUID assetID = UUID.Zero; | ||
1810 | StringBuilder notecardData = new StringBuilder(); | ||
1811 | |||
1812 | if (!UUID.TryParse(notecardNameOrUuid, out assetID)) | ||
1813 | { | ||
1814 | foreach (TaskInventoryItem item in m_host.TaskInventory.Values) | ||
1815 | { | ||
1816 | if (item.Type == 7 && item.Name == notecardNameOrUuid) | ||
1817 | { | ||
1818 | assetID = item.AssetID; | ||
1819 | } | ||
1820 | } | ||
1821 | } | ||
1822 | |||
1823 | if (assetID == UUID.Zero) | ||
1824 | return UUID.Zero; | ||
1825 | |||
1826 | if (!NotecardCache.IsCached(assetID)) | ||
1827 | { | ||
1828 | AssetBase a = World.AssetService.Get(assetID.ToString()); | ||
1829 | |||
1830 | if (a == null) | ||
1831 | return UUID.Zero; | ||
1832 | |||
1833 | System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); | ||
1834 | string data = enc.GetString(a.Data); | ||
1835 | NotecardCache.Cache(assetID, data); | ||
1836 | }; | ||
1837 | |||
1838 | return assetID; | ||
1773 | } | 1839 | } |
1774 | 1840 | ||
1775 | /// <summary> | 1841 | /// <summary> |
@@ -1790,18 +1856,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1790 | CheckThreatLevel(ThreatLevel.VeryHigh, "osGetNotecardLine"); | 1856 | CheckThreatLevel(ThreatLevel.VeryHigh, "osGetNotecardLine"); |
1791 | m_host.AddScriptLPS(1); | 1857 | m_host.AddScriptLPS(1); |
1792 | 1858 | ||
1793 | UUID assetID = UUID.Zero; | 1859 | UUID assetID = CacheNotecard(name); |
1794 | |||
1795 | if (!UUID.TryParse(name, out assetID)) | ||
1796 | { | ||
1797 | foreach (TaskInventoryItem item in m_host.TaskInventory.Values) | ||
1798 | { | ||
1799 | if (item.Type == 7 && item.Name == name) | ||
1800 | { | ||
1801 | assetID = item.AssetID; | ||
1802 | } | ||
1803 | } | ||
1804 | } | ||
1805 | 1860 | ||
1806 | if (assetID == UUID.Zero) | 1861 | if (assetID == UUID.Zero) |
1807 | { | 1862 | { |
@@ -1809,22 +1864,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1809 | return "ERROR!"; | 1864 | return "ERROR!"; |
1810 | } | 1865 | } |
1811 | 1866 | ||
1812 | if (!NotecardCache.IsCached(assetID)) | ||
1813 | { | ||
1814 | AssetBase a = World.AssetService.Get(assetID.ToString()); | ||
1815 | if (a != null) | ||
1816 | { | ||
1817 | System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); | ||
1818 | string data = enc.GetString(a.Data); | ||
1819 | NotecardCache.Cache(assetID, data); | ||
1820 | } | ||
1821 | else | ||
1822 | { | ||
1823 | OSSLShoutError("Notecard '" + name + "' could not be found."); | ||
1824 | return "ERROR!"; | ||
1825 | } | ||
1826 | }; | ||
1827 | |||
1828 | return NotecardCache.GetLine(assetID, line, 255); | 1867 | return NotecardCache.GetLine(assetID, line, 255); |
1829 | } | 1868 | } |
1830 | 1869 | ||
@@ -1845,48 +1884,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1845 | CheckThreatLevel(ThreatLevel.VeryHigh, "osGetNotecard"); | 1884 | CheckThreatLevel(ThreatLevel.VeryHigh, "osGetNotecard"); |
1846 | m_host.AddScriptLPS(1); | 1885 | m_host.AddScriptLPS(1); |
1847 | 1886 | ||
1848 | UUID assetID = UUID.Zero; | 1887 | string text = LoadNotecard(name); |
1849 | string NotecardData = ""; | ||
1850 | |||
1851 | if (!UUID.TryParse(name, out assetID)) | ||
1852 | { | ||
1853 | foreach (TaskInventoryItem item in m_host.TaskInventory.Values) | ||
1854 | { | ||
1855 | if (item.Type == 7 && item.Name == name) | ||
1856 | { | ||
1857 | assetID = item.AssetID; | ||
1858 | } | ||
1859 | } | ||
1860 | } | ||
1861 | 1888 | ||
1862 | if (assetID == UUID.Zero) | 1889 | if (text == null) |
1863 | { | 1890 | { |
1864 | OSSLShoutError("Notecard '" + name + "' could not be found."); | 1891 | OSSLShoutError("Notecard '" + name + "' could not be found."); |
1865 | return "ERROR!"; | 1892 | return "ERROR!"; |
1866 | } | 1893 | } |
1867 | 1894 | else | |
1868 | if (!NotecardCache.IsCached(assetID)) | ||
1869 | { | ||
1870 | AssetBase a = World.AssetService.Get(assetID.ToString()); | ||
1871 | if (a != null) | ||
1872 | { | ||
1873 | System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); | ||
1874 | string data = enc.GetString(a.Data); | ||
1875 | NotecardCache.Cache(assetID, data); | ||
1876 | } | ||
1877 | else | ||
1878 | { | ||
1879 | OSSLShoutError("Notecard '" + name + "' could not be found."); | ||
1880 | return "ERROR!"; | ||
1881 | } | ||
1882 | }; | ||
1883 | |||
1884 | for (int count = 0; count < NotecardCache.GetLines(assetID); count++) | ||
1885 | { | 1895 | { |
1886 | NotecardData += NotecardCache.GetLine(assetID, count, 255) + "\n"; | 1896 | return text; |
1887 | } | 1897 | } |
1888 | |||
1889 | return NotecardData; | ||
1890 | } | 1898 | } |
1891 | 1899 | ||
1892 | /// <summary> | 1900 | /// <summary> |
@@ -1906,18 +1914,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1906 | CheckThreatLevel(ThreatLevel.VeryHigh, "osGetNumberOfNotecardLines"); | 1914 | CheckThreatLevel(ThreatLevel.VeryHigh, "osGetNumberOfNotecardLines"); |
1907 | m_host.AddScriptLPS(1); | 1915 | m_host.AddScriptLPS(1); |
1908 | 1916 | ||
1909 | UUID assetID = UUID.Zero; | 1917 | UUID assetID = CacheNotecard(name); |
1910 | |||
1911 | if (!UUID.TryParse(name, out assetID)) | ||
1912 | { | ||
1913 | foreach (TaskInventoryItem item in m_host.TaskInventory.Values) | ||
1914 | { | ||
1915 | if (item.Type == 7 && item.Name == name) | ||
1916 | { | ||
1917 | assetID = item.AssetID; | ||
1918 | } | ||
1919 | } | ||
1920 | } | ||
1921 | 1918 | ||
1922 | if (assetID == UUID.Zero) | 1919 | if (assetID == UUID.Zero) |
1923 | { | 1920 | { |
@@ -1925,22 +1922,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1925 | return -1; | 1922 | return -1; |
1926 | } | 1923 | } |
1927 | 1924 | ||
1928 | if (!NotecardCache.IsCached(assetID)) | ||
1929 | { | ||
1930 | AssetBase a = World.AssetService.Get(assetID.ToString()); | ||
1931 | if (a != null) | ||
1932 | { | ||
1933 | System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); | ||
1934 | string data = enc.GetString(a.Data); | ||
1935 | NotecardCache.Cache(assetID, data); | ||
1936 | } | ||
1937 | else | ||
1938 | { | ||
1939 | OSSLShoutError("Notecard '" + name + "' could not be found."); | ||
1940 | return -1; | ||
1941 | } | ||
1942 | }; | ||
1943 | |||
1944 | return NotecardCache.GetLines(assetID); | 1925 | return NotecardCache.GetLines(assetID); |
1945 | } | 1926 | } |
1946 | 1927 | ||
@@ -2412,7 +2393,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2412 | } | 2393 | } |
2413 | } | 2394 | } |
2414 | }); | 2395 | }); |
2415 | 2396 | ||
2416 | return result; | 2397 | return result; |
2417 | } | 2398 | } |
2418 | 2399 | ||