iliveisl

Scripting Sfaturi: Pune descriere obiect de la o bună utilizare

5 comentarii

Continuarea pe un început, cu tema " Sharing bytecode Mono ", urmat de" Are nevoie de script-ul de şosete ", acesta este un alt post care descrie o alta metoda de a trece opţiuni de configurare pentru script-uri. Am într-adevăr luptat cu titlu de aceasta şi pur şi simplu nu a putut veni cu ceva apropiat aşa de drăguţ " Are nevoie de script-ul de şosete ". Ei bine ...

Pentru a rezuma tema din nou, fiind capabil de a configura script-uri pentru scopuri multiple are cel puţin două avantaje.

  • Script-uri care nu trebuie să fie elaborate pentru a face mici modificări ale parametrilor sprijini schimbul de bytecode.
  • Fiind capabil de a configura un singur script pentru a servi scopuri multiple ar putea face un script mai usor de intretinut.

În ultimul post am descris o modalitate de a configura script-uri prin plasarea de articole de îmbrăcăminte cu nume speciale, în interiorul obiectului. Un alt mod de a seta parametrii de configurare este de a le citi din descrierea obiectului.

Descrierea obiect este un şir de până la 127 de caractere, care pot fi citite şi în scris de la scenariu. Înainte de ianuarie 2008, şirul folosit pentru a fi de cel puţin două ori mai mult. Dar, în scopul de a aborda o serie de bug-uri alte, LL a schimbat lungimea maximă de 127. Acest lucru la rândul său, a cauzat perturbări mult în cadrul comunităţii. Du-te să ia o privire la SVC-1394 şi aspecte conexe pentru mai multe informaţii.

LlGetObjectDesc funcţie este ceea ce se utilizează pentru a citi descrierea obiectului script-ul este inch De fapt, dacă script-ul este într-un prim legat de alte prims, acesta va citi doar descrierea de la Prim conţine script-ul.

objdesc = llToLower (llStringTrim (llGetObjectDesc (), STRING_TRIM));

În exemplul de mai sus, am de economisire şir descrierea obiect într-o variabilă numită "objdesc". Eu folosesc, de asemenea, llToLower funcţia de a face caz, şirul de mici, aşa că nu trebuie să vă faceţi griji despre ce caz lucrurile sunt inch Tot compară eu nu va fi în cazul în care mici. Şi, eu folosesc llStringTrim funcţie pentru a elimina orice conduce şi la sfârşit spaţii. Este uşor să puneţi un gol undeva, nu ai intenţia, eliminând astfel orice conduce şi la sfârşit spaţii ajută la ceva.

În urma llGetObjectDesc cod, script-ul trece printr-o serie de altă parte, dacă şi în cazul declaraţiilor comparativ şir pentru a-mi setări speciale selectate. În acest caz, "depana pe" şi "depanare off". Găsirea una dintre cele, script-ul se transformă un steag de depanare on sau off. Puteţi obţine la fel de complex ca vrei aici, atâta timp cât nu te duci trecut limita de caractere 127. Descrierea obiect ar putea deţine mai multe cuvinte cheie pentru a fi utilizate pentru a stabili mai multe opţiuni în cadrul script-ul.

Unele particularităţi privind descrierea obiectului.

  • În cazul în care descrierea este nulă şi în cazul în care obiectul a fost salvat şi dus la inventar, funcţia va returna "(nici o descriere)" în loc de zero sau un şir de gol. Deci, script-ul are nevoie pentru a permite acest lucru dacă este important să se ştie dacă descrierea este nul.
  • În cazul în care descrierea este nulă şi, dacă obiectul nu a fost salvat şi luate de la inventar, funcţia va returna un şir nul.
  • Dacă aţi tastat vreodată ceva în descrierea şi apoi a încercat să-l eliminaţi, descrierea poate avea acum spaţii. Va trebui să fie conştienţi de acest lucru. Dacă utilizaţi llStringTrim funcţie ca am, apar ca şir nul şi nu trebuie să vă faceţi griji cu privire la cât de multe locuri ar putea fi acolo.
  • Dacă încercaţi să eliminaţi descrierea de a şterge caractere în GUI de editare, se va arata ca acesta este plecat, dar nu este de fapt, salvat ca un nul, atunci când ieşi de editare. Şir va fi tot acolo când te uiţi din nou. Există câteva JIRAs câteva deschise în acest sens. Puteţi seta descrierea înapoi la zero cu ajutorul llSetObjectDesc (""), funcţia.

Câteva note despre alte script-ul probei.

În " Are nevoie de script-ul de şosete "probă, am folosit schimbat eveniment pentru a detecta schimbarea de inventar şi a declanşa reprocesare a opţiunilor în mod automat. Nu există nici o modalitate de a detecta în mod automat de schimbare a descrierii, astfel că va trebui să aibă un mod de a spune script-ul să recitesc o descriere dacă îl schimbaţi sau doar reseta manual script-ul pentru a citi descrierea din nou.

În acest exemplu, am pus toate de prelucrare a opţiunii în subrutina readdesc () şi utilizate apoi touch_start eveniment pentru a declanşa readdesc () subrutină. Din nou, aceasta este un exemplu de cod pentru a demonstra modul de abordare şi poate nu doriţi acest lucru să se întâmple atunci când obiectul este atins. Am, de asemenea, readdesc () în state_entry şi care ar putea fi singurul loc unde doriţi în script-ul.

În unele privinţe, această abordare a configuraţie poate fi mai simplu decât abordarea şosete. Am vazut multe exemple ale acestei abordări descriere obiect în utilizare în SL. Cu toate acestea, este uşor să tastaţi ceva gresit sau nu strica descrierea obiectului aşa că va trebui să decidă cât de mult verificarea erorilor pentru erorile de scriere, trebuie să aveţi în script-ul.

Şi acum, pentru exemplul de cod. Acest eşantion a fost testat atât în SL şi 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. } } 
Stare de nervozitate Digg Reddit Stumbleupon Delicios Facebook Linkedin Plusone Tumblr Posterous Posta

scris de Micheil Merlin

27 ianuarie 2010 la 20:20

postat în Second Life

etichetat cu ,

5 comentarii la "Scripting Sfaturi: Pune descriere obiect de la o bună utilizare"

abona la comentarii cu RSS sau TrackBack pentru 'Sfaturi Scripting: Pune descriere obiect de la o bună utilizare ".

  1. Am folosit descrieri de obiecte de asemenea. Un bug folosit pentru a exista, care a permis vă pentru a stoca o cantitate masivă de date în descrieri obiect, dar teilor s-au stabilit, deoarece aceasta. Aveţi posibilitatea să salvaţi, de asemenea, informaţii de configurare într-o carte de notă. Am facut un tutorial video care arată cum să citească valori dintr-o carte de notă.

    Dedric Mauriac

    29 ianuarie 10 la 10:36 pm

  2. Dedric Mauriac

    29 ianuarie 10 la 10:36 pm

  3. Da, despre notecard. Am fost o salvare pentru ultima, deoarece necesită un efort un pic mai mult decat alt cuplu de metode, dar oferă mult mai mult potenţial.

    Eu folosesc metoda de configurare notecard cele mai multe ori dacă nu am avea doar unul sau două lucruri pentru a seta. Care de obicei nu pare să fie cazul, deşi ... lol. Dar când am doar unul sau două lucruri, voi folosi metoda "şosete".

    Micheil Merlin

    30 ianuarie 10 la 19:23

  4. Ai putea fi interesat să văd cum am abordat în acest RealXtend folosind familiar. INI notaţie în domeniul extins descrierea obiectului.

    Peter capriciu

    30 ianuarie 10 la 11:17

  5. Acum, că este o caracteristică foarte frumos Petru. Mai elegant decât notecards simple vechi. Ar fi frumos dacă SL au avut ceva de genul asta.

    Micheil Merlin

    31 ianuarie 10 la 11:56 pm

lăsa un răspuns - adăugaţi-vă gândurile

puteţi folosi aceste tag-uri: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <CITE> <code> <del datetime = ""> <em> <i> <q cite=""> <strike> <strong>