Продължава по тема, започващ с " байткод Mono споделяне ", следван от" вашия скрипт трябва чорапи ", това е друг пост, описващ друг метод, за да премине конфигурационни опции за скриптове. Аз наистина се борят с заглавието на това и просто не може да дойде с нещо близо като сладък като " Трябва ли скрипта ви чорапи ". О, добре ...
За да обобщим темата отново е в състояние да конфигурирате скриптове за различни цели, има най-малко две предимства.
- Скриптове, които не трябва да се компилират, за да правят малки промени в параметрите на подкрепа байткод споделяне.
- Да бъдеш в състояние да конфигурирате един скрипт, за да служат за множество цели, потенциално прави скрипт по-лесно да се поддържа.
В последния пост описах начин за конфигуриране на скриптове, чрез поставяне на дрехи със специални имена вътре в обекта. Друг начин да се определят параметрите на конфигурацията е да ги чете от описанието на обекта.
В описанието на обекта е низ от до 127 знака, които могат да четат, така и написана от скрипта. Преди януари 2008 г. низа, използвани за да бъде поне двойно по-дълго. Но, за да се справи с няколко други бъгове, LL промени максимална дължина до 127. Това от своя страна причинява много нарушения в рамките на Общността. Го погледнете SVC-1394 и свързаните с това въпроси за повече информация.
LlGetObjectDesc функция е това, което се използва за четене на описание на обекта, сценарият е инча Всъщност, ако скриптът е в Прим свързани с други prims, тя само ще прочетете описанието от Прим съдържащ сценария.
objdesc = llToLower (llStringTrim "(llGetObjectDesc (), STRING_TRIM));
В горния пример, аз съм за спасяването на низ описанието на обекта в променлива, нарича "objdesc". Аз също използвате функцията llToLower, за да низа малки букви, така че не е нужно да се притеснявате за това, което са случай нещата. Всички сравнява правя, ще бъде с малки букви. И аз използвам llStringTrim функция за премахване на всички водещи и изоставаше заготовки. Лесно е да се сложи празен някъде, че не е имал намерение, така че премахването на всички водещи и изоставаше заготовки помага донякъде.
След llGetObjectDesc код, скриптът минава през поредица от, ако и друго, ако отчети, сравняващи низ моите специални избраните настройки. В този случай, "дебъгване на" и "дебъгване". Намиране или на тези, скриптът се превръща Debug флаг или изключване. Можете да получите толкова сложен, колкото искате тук толкова дълго, тъй като не отидете миналото 127 лимит от символи. Описанието обект можеше да побере няколко ключови думи, за да бъдат използвани за създаване на няколко варианта в рамките на вашия скрипт.
Някои особености за описанието на обекта.
- Ако описанието е недействително, ако обектът е бил спасен и от инвентара, функцията ще се върне "(без описание)", вместо на нула или празен низ. Така че, скрипта ви трябва да се позволи това, ако това е важно да се знае, ако описанието е недействително.
- Ако описанието е нищожна и ако обектът не е бил спасен и взети от инвентара, функцията ще се върне нулев низ.
- Ако някога сте въвели нищо в описанието и след това се опитах да го премахнете, описанието може да има пространства. Може да се наложи да бъде наясно с това. Ако използвате llStringTrim функция, като имам, низът се появяват като нищожна и не е нужно да се притеснявате за това колко места може да има.
- Ако се опитате да премахнете описанието чрез изтриване на символи в редактиране на GUI, тя ще изглежда все едно е отишъл, но в действителност не се записва като за нищожно, когато излезеш на редактиране. Низът все още ще бъде там, когато погледнете отново. Има няколко JIRAs, отворени за това. Можете да зададете описание обратно към нула, като използвате функцията llSetObjectDesc ("").
Няколко други бележки за примерен скрипт.
В " Трябва ли скрипта ви чорапи "проба, аз използвах променената събитие за откриване на промяна на инвентара и да предизвика преработка на вариантите автоматично. Няма начин за автоматично откриване на промяната на описанието, така че ще трябва да има начин да се каже скрипт да препрочетете описание, ако не го промените или просто ръчно нулиране на скрипт за да я прочетете отново описанието.
В тази извадка, сложих всички опции преработка в подпрограма readdesc () и след това се използва touch_start събитие да предизвика readdesc () подпрограма. Отново, това е някакъв код за проба, за да демонстрират подход и може да не искате това да се случи, когато обектът се докосне. Имам също и readdesc () в state_entry, и че може да бъде единственото място, където го искате във вашия скрипт.
В някои отношения, този подход на конфигурация може да бъде по-лесно, отколкото чорапи подход. Виждал съм много примери за този подход на описанието на обекта в експлоатация в рамките на SL. Въпреки това, той е лесно да напишете нещо погрешно или по друг начин да се месим в описанието на обекта, така че ще трябва да реши колко грешка проверка за грешки, трябва да сте във вашия скрипт.
И сега за примерен код. Тази проба е била тествана в SL както и OpenSim .
// Config Demo - Read Object Desc // // Script to demonstrate the use of the object description to supply // parameters. // // The object description is checked to see if it says either 'debug on' // or 'debug off'. Set the gDebug flag accordingly. // // Micheil Merlin/SL - 1/1/2010 integer gDebug = 0; // Debug flag. readdesc() { string objdesc; // Object description. // Read the description field for the object. // Translate to lower case and trim blanks from the end. objdesc = llToLower(llStringTrim(llGetObjectDesc(), STRING_TRIM)); // Look for an object description of 'debug on' in lower case. if (objdesc == "debug on") { gDebug = 1; // Look for an object description of 'debug off' in lower case. } else if (objdesc == "debug off") { gDebug = 0; // Check for an empty object description. // Empty object descriptions could either be blanks or the string // '(no description)'. Earlier, we trimmed blanks from the string // so if it was blanks, it is now a null string. } else if (objdesc == "" || objdesc == "(no description)") { llSay(0, "No object description exists."); // If the object description is not one of our choices or empty, then // say the string. } else { llSay(0, "Object Description of '" + objdesc + "' found. We weren't expecting this."); } llSay(0, "Debug is set to " + (string)gDebug); // // The object description processing is complete. Other code could be // inserted here. // } default { state_entry() { readdesc(); // Process object description. } // This event is triggered when the object is rezzed. on_rez(integer num) { llResetScript(); // Reset script when object rezzed. } // This event is triggered when the object is touched. touch_start(integer total_number) { readdesc(); // Go check the object description. } } 

































Ползвал съм, както и описанията на обектите. Бъг, който се използва, за да съществува, че позволява да се съхранява голямо количество данни в описанията на обектите, но Lindens неподвижен този. Можете също да записвате информация за конфигурацията в бележка карта. Направих видео урок, който показва как да се чете стойности от картата с бележки.
Dedric Mauriac
29 Jan 10 в 10:36 ч.
А, забравих връзката. Ето това е - http://dedricmauriac.wordpress.com/2008/05/03/configuration-reading-tutorial/
Dedric Mauriac
29 Jan 10 в 10:36 ч.
Да за notecard. Аз го пазела за последно, тъй като изисква малко повече усилия, отколкото друга няколко методи, но осигурява много по-голям потенциал.
Аз използвам метода в notecard конфигурация, най-често, освен ако просто имам една или две неща, които трябва да зададете. Това обикновено не изглежда да е така, въпреки че ... хаха. Но когато имам само една или две неща, ще използвам метода "чорапи".
Micheil Мерлин
30 Jan 10 в 19:23
Може би е интересно да видя как разрешили този в RealXtend запознати. INI нотация в разширената област на описанието на обекта.
Петър приумица
30 Jan 10 в 23:17
Сега това е една наистина хубава черта Петър. По-елегантен от обикновените notecards. Това би хубаво, ако SL имаше нещо такова.
Micheil Мерлин
31 Jan 10 в 11:56 ч.