Teil VI – Entwicklerreferenz
19. Unity Maxim Erfahrungsstatistik
|
Version in der Quelle |
Publikum |
Erfordert |
Anmerkung der Redaktion |
|---|---|---|---|
|
Entwicklerkit; keine Versionsnummer angegeben |
Sim-Besitzer, Spielleiter und Entwickler |
Unity Maxim Meter und benutzerdefinierte Aktivitäten |
Die Questbeispiele werden in eine Vergleichstabelle umgewandelt. |
Unity Maxim ist weit mehr als nur ein Messwert; es ist eine Erlebnisplattform, die es Sim-Besitzern und Entwicklern ermöglicht, vielfältige Simulationen für Rollenspiele zu erstellen. Die Werte für Stärke, Geschicklichkeit, Weisheit und Erfahrung können mit Quests oder Aktivitäten in der Sim verknüpft und dann gegen andere Aktivitäten, Objekte und Prozesse eingesetzt werden. Am besten lässt sie sich so beschreiben: Sie müssen verdient werden.
Beispiele eignen sich wahrscheinlich am besten, um diese Fähigkeit zu erklären:
|
Statistic (EN) |
Statistik (DE) |
Questbeispiel aus der Quelle |
Rollenspielnutzung aus der Quelle |
|---|---|---|---|
|
Wisdom |
Weisheit |
Finde und lies eine Reihe von Büchern, deren Hinweise eine Quest abschließen. |
Durch Weisheit lassen sich Türen, Treffen, Tränke, Fortschritte oder magisches Wissen einschränken. |
|
Dexterity |
Geschicklichkeit |
Finde verschlossene Behälter oder meistere Herausforderungen, bei denen du mit der Maus schaust oder deine Umgebung einbeziehst. |
Schlösser knacken, Seile oder Türme erklimmen und Teamangriffe unterstützen. |
|
Strength |
Stärke |
Schwere Objekte wie Mühlen, Türen oder Steinbarrieren bedienen. |
Bewegen Sie Felsbrocken, durchbrechen Sie Barrieren oder öffnen Sie Tunnelzugänge während komplexer Schlachten. |
Insgesamt handelt es sich hierbei nur um erste Ideen, und ich bin sicher, dass die Communitys viele weitere, deutlich interessantere und komplexere Ideen entwickeln werden. Es könnten Situationen entstehen, in denen man an Turnieren teilnehmen muss, um im Spiel voranzukommen und dadurch alle drei Werte zu verbessern! Ich empfehle Sim-Besitzern und Spielleitern daher dringend, sich Gedanken über die Entwicklung komplexer (und damit unterhaltsamerer) Szenarien und Objekte zu machen. Die Entwicklung liegt letztendlich bei den Sim-Besitzern und Spielleitern. Ich hoffe, einfache Skript-Prototypen und Unterstützung bereitstellen zu können, um dieser Kreativität freien Lauf zu lassen. Bleibt dran … dies ist ein laufendes Projekt.
20. Unity Maxim-Skriptschnittstelle
|
Version in der Quelle |
Publikum |
Erfordert |
Anmerkung der Redaktion |
|---|---|---|---|
|
Dev Kit; no version stated |
Erfahrene LSL-Skripter |
Unity Maxim-Zähler; temporärer Zuhörer auf Kanal 495 |
Der Beispielcode wurde aus dem Quellcode übernommen; lediglich die Fließtextkommentare und Überschriften wurden normalisiert. |
Dieses kleine Paket richtet sich an erfahrene LSL-Skripter, die Objekte oder Aktivitäten in Sims erstellen möchten. Es darf für kommerzielle Angebote verwendet werden, jedoch ist es Ihnen NICHT gestattet, dieses Skript einzeln zu verkaufen oder es zu modifizieren und anschließend einzeln weiterzuverkaufen. Bei Fragen zur Funktionsweise in Second Life kontaktieren Sie mich bitte.
Ich stelle diese Dateien nicht ohne Grund auf Karteikarten bereit. Ich möchte keine Skripte mit vollen Berechtigungen veröffentlichen, die mich als Urheber ausweisen. Ich habe schon zu oft erlebt, dass jemand die Zeilen löscht, einen komplett neuen Code erstellt und ihn dann trotzdem mit meinem Namen als Urheber speichert! Sollten diese Skripte Probleme verursachen, werde ich benachrichtigt! ;-)
Ich werde mehrere Skriptbeispiele bereitstellen, die die Interaktion von Objekten mit dem Unity Maxim-Meter ermöglichen, und diese im Laufe der Zeit erweitern. Schauen Sie daher regelmäßig vorbei, um die Neuerungen zu entdecken.
Ich werde die Community außerdem bitten, ihre unterhaltsamen Skripte für dieses Paket beizusteuern. Wenn ihr also anderen Sim-Besitzern, Entwicklern und Spielleitern helfen möchtet, schickt mir einfach euer Skript. Am besten kopiert ihr es und fügt es in eine Notizkarte ein. Vergesst nicht, das Skript zu kommentieren, damit andere Nutzer verstehen können, was ihr darin tut!
Der Unity Maxim-Meter kommuniziert nun mit Objekten. Genauer gesagt: Auf Anfrage eines Objekts sendet Unity Maxim eine Textzeile mit Informationen zu Stärke, Geschicklichkeit, Weisheit, Erfahrung, Stufe, Rasse und Klasse. Mit diesen Informationen lassen sich Objekte so programmieren, dass sie auf unterhaltsame Weise im Rollenspiel reagieren.
Ein ganz einfaches Beispiel: Eine Tür, die sich nur für eine bestimmte Gruppe öffnet, sagen wir, für Waldläufer. Anstatt eine Karte mit einer langen (und sich ständig ändernden) Liste von Avatar-Namen in der Tür zu führen, müsste man die Tür jetzt nur noch so einstellen, dass sie den Zähler der jeweiligen Person überprüft. Ist die Person ein Waldläufer, wird sie eingelassen.
Der Komplexität dieser Gestaltung sind kaum Grenzen gesetzt. Man könnte beispielsweise ein geheimes Buch haben, das sich nur für Magier ab Stufe 10 mit mindestens 5 Weisheitspunkten und 100 Erfahrungspunkten öffnet! All diese Variablen können angepasst werden, um den Spielspaß und die Spannung im Rollenspiel zu erhöhen.
Ich habe in diesem Paket einige Ideen in der Unity Maxim Experience-Notecard festgehalten, würde aber gerne so viele Nutzerideen wie möglich sammeln. Bitte teilt eure Ideen mit uns, sobald ihr sie umgesetzt habt!
Und vor allem müssen Sie die drei Grundregeln unbedingt befolgen:
Viel Spaß
Sei nett
Verstoße niemals gegen die Regeln 1 und 2.
Antwortformat des Messgeräts
givemeter,level,class,strength,dexterity,wisdom,gender,race,exp
index: 0, 1, 2, 3, 4, 5, 6, 7, 8
Beispielskript 1
// I have made this script fully public - you may use it however you want. Credit appreciated. :-)
// To use this script, create a new script in inventory. Open that new script, delete all the lines,
// copy all of this text and then paste it into the script. Be sure to save it!
//
// This routine can be used to create objects that interact with the Unity Maxim meter. When the
// routine asks for the meter data, the meter returns a comma-delimited string with the data
// fields as follows:
//
// "givemeter,level,class,strength,dexterity,wisdom,gender,race,exp"
// These are the #s 0 1 2 3 4 5 6 7 8
//
// This simply needs to be parsed into a list and then each of the data points can be used to act
// in some manner. The position each data item has in the list is shown above. You will use those
// to work with the information. For instance, if Class (position 2) is found to be Rouge, then you
// could have a door lock picked and opened. If race is not Rogue, then the door remains locked.
//
list meterData;
key toucher;
integer listen_handle;
stop_listen()
{
llListenRemove(listen_handle);
}
default
{
state_entry()
{
llSetText("Touch me",<1,1,1>,1); // Do whatever setup needs to be done here
}
touch_start(integer dummy)
{
listen_handle = llListen(495, "", NULL_KEY, "");; // Open the set channel (495) for communicating.
toucher = llDetectedKey(0); // Get the avatar key of the toucher.
llRegionSayTo(toucher,495, "getmeter"); // Ask the toucher's meter to give you all data.
}
listen(integer chan,string name,key id,string msg)
{
if (llGetSubString(msg,0,8) != "givemeter" || llGetOwnerKey(id) != toucher)
{ // Make sure the communication heard is from
stop_listen(); // the person who touched the object.
return; // If not, turn off the listener and leave.
}
meterData = llParseString2List(msg,[","],[]); // Parse the message into a list for action.
if (llList2String(meterData,2) == "Rogue") // Now see if the toucher's Class matches the
{ // class that you are keying this object to.
llSay(0, "Always happy to open for a Rogue!"); // If it does, then do something here...
}
else // or if not...
{
llSay(0, "You are not a Rogue!"); // then do something here.
}
stop_listen(); // Turn the listener off before you leave!
}
}
Beispielskript 2
// This is just a similar example to other scripts, but is intended to show how to break up
// the communication from the meter into a list, and then convert that list to common-named
// variables like rank, race, etc. This makes it much easier to read the code later when
// you want to make changes or additions.
// To use, copy this entire notecard and paste it into a new script.
integer rank; // set up for the variables we will use
string class;
integer strength;
integer dexterity;
integer wisdom;
string gender;
string race;
integer experience;
key toucher;
list meterList;
string toucherName;
integer listen_handle;
stop_listen() // set up a little routine to
{ // turn off the listener when finished
llListenRemove(listen_handle);
}
default
{
state_entry()
{
llSetText("Demonstration Object - Touch me!",<1,1,1>,1); // Set any floating text here
}
touch_start(integer total_number) // Someone just touched the object
{
listen_handle = llListen(495, "",NULL_KEY,""); // Open the temporary channel to listen on (always 495)
toucher = llDetectedKey(0); // Get the avatar Key of the toucher
toucherName = llKey2Name(toucher); // Get the name of the toucher
llRegionSayTo(toucher,495, "getmeter"); // Ask the toucher's meter to give you all data
}
listen(integer chan,string name,key id,string msg)
{
meterList = llParseString2List(msg,[","],[]); // Break the string up into parts
if (llList2String(meterList,0) != "givemeter") // If this is not a message from the meter, ignore it
{
llResetScript();
}
rank = llList2Integer(meterList,1); // this section gets the parsed list into variables
class = llList2String(meterList,2); // for easier to read coding later on
strength = llList2Integer(meterList,3); //
dexterity = llList2Integer(meterList,4); //
wisdom = llList2Integer(meterList,5); //
gender = llList2String(meterList,6); //
race = llList2String(meterList,7); //
experience = llList2Integer(meterList,8); //
if (class == "Ranger" && rank >= 10) // now that you know all the data about the avatar
{ // you can do something relative to those variables.
// do something here // in this case if the avatar is a Ranger at level
} // 10 or above, then something happens to them.
stop_listen(); // Be sure to turn off the listener before you leave,
// or reset the script
}
}