This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Hallo, Gast
Sie müssen sich registrieren bevor Sie auf unserer Seite Beiträge schreiben können.

Benutzername
  

Passwort
  





Durchsuche Foren

(Erweiterte Suche)

Foren-Statistiken
» Mitglieder: 24
» Neuestes Mitglied: Lilida
» Foren-Themen: 589
» Foren-Beiträge: 1.531

Komplettstatistiken

Aktive Themen
Helicopter flight over ce...
Forum: Informationen und aktuelle Meldungen
Letzter Beitrag: Lukas
16.03.2024, 19:20
» Antworten: 1
» Ansichten: 91
Wie man am einfachsten Ro...
Forum: Informationen und aktuelle Meldungen
Letzter Beitrag: Cheryl Furse
10.03.2024, 16:23
» Antworten: 0
» Ansichten: 120
On Trailer Park
Forum: Informationen und aktuelle Meldungen
Letzter Beitrag: Cheryl Furse
09.03.2024, 23:27
» Antworten: 0
» Ansichten: 81
Nightlife bus drive on BC...
Forum: Informationen und aktuelle Meldungen
Letzter Beitrag: Cheryl Furse
07.03.2024, 22:47
» Antworten: 2
» Ansichten: 243
PMAC POSER V2.8 - WAS BRA...
Forum: Animieren
Letzter Beitrag: Cheryl Furse
06.03.2024, 14:04
» Antworten: 10
» Ansichten: 900
Vorsicht ANYDESK wurde ge...
Forum: Sicherheitssoftware und Hersteller
Letzter Beitrag: Lukas
02.03.2024, 13:03
» Antworten: 10
» Ansichten: 1.262
Teleports im Grid
Forum: OpenSim
Letzter Beitrag: Scarlett Candor
28.02.2024, 19:03
» Antworten: 5
» Ansichten: 890
Expo Center Gallerie
Forum: Informationen und aktuelle Meldungen
Letzter Beitrag: Cheryl Furse
27.02.2024, 23:33
» Antworten: 3
» Ansichten: 366
Torture ship on BCL
Forum: Informationen und aktuelle Meldungen
Letzter Beitrag: Cheryl Furse
25.02.2024, 16:35
» Antworten: 0
» Ansichten: 140
Koffer im HG
Forum: OpenSim
Letzter Beitrag: Trawell
19.02.2024, 17:58
» Antworten: 4
» Ansichten: 604

 
  Helicopter flight over central park
Geschrieben von: Cheryl Furse - 15.03.2024, 22:29 - Forum: Informationen und aktuelle Meldungen - Antworten (1)

Helicopter flight over central park. On roof of our Penthouse we start and fly over central park up to trailer park in little New Jersey and back. Jimmy is pilot and let me enjoy the ride with him ? Is just a short flight but is nice to watch with music of Prince - Purple Rain. This route of the helicopter was made with the route hud. You can get it on Big City Life or I can tell you how you can make your own route hud by yourself. Really easy.


https://rumble.com/v4jh7dq-helicopter-fl...-park.html

Drucke diesen Beitrag

  Wie man am einfachsten Routen für animesh Leute macht
Geschrieben von: Cheryl Furse - 10.03.2024, 16:23 - Forum: Informationen und aktuelle Meldungen - Keine Antworten

Nachdem mich viele Leute gefragt haben, wie ich die Animesh-Leute auf meiner Sim herumlaufen lasse, habe ich ein kurzes Anleitungsvideo gemacht. Ich zeige den einfachsten Weg, wie man Routen ohne Koordinatenkenntnisse oder das Einstellen der einzelnen Punkte erstellen kann, einfach indem man Routen mit einem Skript erstellt, das man in einem Hud auf dem Bildschirm trägt. Es wird für Anfänger der einfachste Weg sein. Diese Methode wird nur für animesh Leute empfohlen, die herumlaufen, die Root-Prim auf 0 Grad Winkel und für Helikopterflüge (mit Root-Prim auf 0 Grad Winkel). Es ist nicht für das Fahren mit Route Auto oder Schiff oder Flugzeug. Für Autos braucht man die Old-School-Methode, um jeden Punkt anzupassen, um realistische Kurven zu erstellen. Aber wenn Sie Routen für Menschen zu Fuß oder Hubschrauberflüge machen wollen, dann ist diese Hud-Methode ideal und sehr einfach für alle.

[video=facebook]https://www.facebook.com/permalink.php?story_fbid=pfbid02wgEZGz2iBrAypG4g2PWknKnKDNH7HTCb2jmugpxHU2e3WtRGMFZXhZY3pJzXmJSdl&id=100094894710723[/video]


Facebook video tuts auch nicht hier. Dann kopiert einfach den link oder ichsetze es hier nochmal ein

https://www.facebook.com/permalink.php?s...4894710723

Drucke diesen Beitrag

  On Trailer Park
Geschrieben von: Cheryl Furse - 09.03.2024, 23:27 - Forum: Informationen und aktuelle Meldungen - Keine Antworten

On Trailer Park

Close to landing point is the trailer park at the Jersey River. It is not known, if there are already trash trailer girls. But could be in time. lol Have already seen one girl with tiny hotpants.
It looks already inviting and a Motel is on the other side of the street. Could become a nice place to gather just to watch the the cars and ships passing by... of course !

https://rumble.com/v4i8stu-on-trailer-park.html

Drucke diesen Beitrag

  Nightlife bus drive on BCL
Geschrieben von: Cheryl Furse - 07.03.2024, 14:43 - Forum: Informationen und aktuelle Meldungen - Antworten (2)

Hi everyone

two new videos

The first is a 19 min bus drive.

Warning! It is the longest video I ever made. Is a boring video and just a bus drive through the City and suburb. But you can listen to Mike Oldfield Incantation, which is 20 min long. The whole bus drive on my 7x7 sim takes 38 min and this video is just the first part. I will add another bus driving from Park Avenue Plaza to Expo Center. Then there is always every 20 min about a bus arriving. If you want to watch the arts of opensim it takes 20 min and if you want to gather on Park Avenue then you can go to the Fashion Week or in Jazz Club or Musical hall or opera house or just listening to the street musicians on Plaza. So the timing is ok. You can go from Park Avenue Plaza also in Central Park and then you won't leave the sim anyway. lol You can take always one of the yellow cabs, if you want to drive earlier lol

https://rumble.com/v4hppml-from-expo-cen...h-bus.html

The second is a nightlife action trailer

Cheryl Furse on mission to perfect her virtual world lol

https://rumble.com/v4hs0yl-big-city-life...ailer.html

Drucke diesen Beitrag

  Expo Center Gallerie
Geschrieben von: Cheryl Furse - 25.02.2024, 16:38 - Forum: Informationen und aktuelle Meldungen - Antworten (3)

Ich habe jetzt auf BCL das original Expo Center von Sergio Rodriguez bekommen und suche nun Künstler, die hier gerne ausstellen wollen. Falls jemand Künstler ist und Interesse hat ... bitte einfach melden.

Hier ein Video wie man hin kommt.

https://rumble.com/v4fg739-with-train-to...enter.html

Drucke diesen Beitrag

  Torture ship on BCL
Geschrieben von: Cheryl Furse - 25.02.2024, 16:35 - Forum: Informationen und aktuelle Meldungen - Keine Antworten

The legendary torture ship party is in rl at Bodensee in Germany. I put a modified yacht with lot of toys and furniture on my Big City Life. You can fly with heli (route scripted) from landing point directly to the torture ship and also fly further around whole sim. A Dominatrix walks around and is greeting all guests. You can also stop her and chat with her. You can also tell her to stop talking.

https://rumble.com/v4flwc0-torture-ship.html

Drucke diesen Beitrag

  Neue Anmeldungen hier im Forum
Geschrieben von: Lukas - 17.02.2024, 14:53 - Forum: Informationen und aktuelle Meldungen - Keine Antworten

Sehr geehrte Damen und Herren,

natürlich freuen wir uns über alle Neuanmeldungen, Interesse und Mitarbeit im Forum.

Es ist uns aber nicht möglich, neue Benutzerkonten mit Wegwerf-E-Mail-Adresse und Fake Name zu erstellen.

Eine ehrliche Anmeldung mit OpenSim- Benutzername und einem Hinweis auf die Grid-Zugehörigkeit unterstützen wir sehr gern.

Beste Grüße

Forum Team

Drucke diesen Beitrag

  mein kleines Mini-Grid Projekt
Geschrieben von: Trawell - 15.02.2024, 18:41 - Forum: Serversoftware - Antworten (12)

Hallo zusammen,
gerne möchte ich euch mal ein bisserl erzählen, woran ich gerade mit Opensimulator unterwegs bin.

Ich schreibe für Linux (Debian 12) ein Installer und ein kleinen Manager in Bash, was ich später zum Download anbieten möchte.
Lukas hat schon mal die erste Version in einem Video gesehen, das verlinke ich weiter unten.
Seit daher habe ich noch vieles angepasst und wie es scheint wird es noch eine Weile dauern bis zur ersten Version die ich veröffentlichen werde.

Die Grundfunktionen sind etwa folgende:

Man lädt die Scripte hoch auf den Debian Server und passt die Datei mit den Variablen für seine Installation an.
Dann gibt man den Scripten mit chmod Ausführungsrechte und meldet sich danach als root an, um einige Dinge auch wirklich als root auszuführen.
Das sind Sachen wie System Updates, Installationen diverser Pakete und die Firewall Einstellungen.

Jetzt verlässt man die root shell wieder und startet das eigentliche Installations Script.
Auch hier wird man nochmals nach dem root gefragt, damit die entsprechende Datenbanken und User auch als root gemacht werden.
Natürlich wird die Variable mit dem Kennwort dann wieder unsettet.

Es wird die Robust Instanz komplett erstellt mit Datenbank, User, die Opensim Instanz mit Robust konfiguriert und nun gehts zur Schleife, wo die einzelnen Regionen ähnlich erstellt werden.

Am Anfang habe ich in den INi Files jede Zeile mit sed angefasst, das lasse ich nun grösstenteils sein und kopiere erst angepasste Ini Dateien, wo ich nur die nötigen Konfigurationen aus der Datei mit den Variablen ändere, so Port Nummer, Grid Name, IP oder Domain und so Zeugs.

Hier überlege ich mir noch eine zentrale Config zu bauen.

Bei jedem Durchgang der Schleife wird die Region auch gleich angepasst mit terrain fill und die Grösse der Region, so das diese fixfertig bereit stehen.

Ein Mini Grid mit vier Regionen habe ich so in ca. 6 Minuten fixfertig und betriebsbereit installiert, ohne manuell was an den Konfigs zu schrauben, Dateien zu kopieren und dergleichen.

Noch habe ich aber viel zu tun.

Ich will noch eine start.sh und eine stop.sh automatisiert bauen, so das bei einem Server Neustart das Grid auch wieder selber hochfährt, oder ich das Grid herunterfahren kann.

Auch habe ich noch keine Prüfungen für Log Files während der Installation, da muss ich mir noch überlegen wie ich das mache.
Denn ich bin kein grosser Bash Scripter, das habe ich mir nun alles aus den Finger gesaugt sozusagen.

Zu guter letzt möchte ich noch einen klitzekleinen textbasierten Manager bauen mit den wichtigsten Funktionen wie Region erstellen/löschen, Backup&Restore (manuell), ein automatisches Backup der mySQL und Opensim Instanzen und noch so nützliche Sachen Smile

Auch bin ich an einer Webseite, wo das ganze dann veröffentlicht und erklärt wird.
Über die Lizenzierung muss ich mir auch noch Gedanken machen.

Mir macht das unheimlich Spass, obwohl ich es etwas unterschätzt habe.
Zum Glück finde ich hier im Forum auch guten Support und viele Erklärungen, die ich in der Konfiguration berücksichtigen kann.


Jetzt mal aber zum Video, und verzeiht mir, das die Qualität nicht so toll ist.
Es ist mein erstes Video, und ich denke der Rechner ist etwas zu schwach für solche Dinge

https://www.youtube.com/watch?v=ycnq1ft1K-g

Viele Grüße
Trawell

Drucke diesen Beitrag

  PMAC POSER V2.8 - WAS BRAUCHT MAN NOCH DAZU TEIL3
Geschrieben von: Tron Mcp - 15.02.2024, 13:18 - Forum: Animieren - Antworten (10)

PMAC POSER V2.8 - WAS BRAUCHT MAN NOCH UM DEN LAUFFÄHIG ZU BEKOMMEN TEIL3


Dieses sind nun die Basisinfos damit ihr euren PMAC an den Start bekommt.
Ich lasse extra erstmal die "Kür" weg um die Komplexität nicht zu hoch zu setzten.

Checkliste für einen kompletten Minimalposer (Erklärung folgt später im Artikel):
- PMAC 2.8 Script
- Basisanimation mit Namen "~~~~~base_DO_NOT_DELETE_ME!!!!!"
- Notizkarte mit Namen ".PMAC CONFIG"
- Prim mit Namen "~~~positioner" und innenliegenden Script.
- mindestens eine Menükarte mit beispielsweisen Namen ".menu001A Sonnen" für 1 Avatar ".menu002A Sonnen" für 2 Avatare. Bis 8 AVAs werden unterstützt.
- mindestens eine Animation. Der letzte Buchstabe des Animationsnamens sollte Geschlechtsspezifisch sein: F / M  oder beides nicht enthalten.

Checkliste für OPTIONALE Elemente des Basisposers:
- eine NPC Notizkarte mit Namen in der Syntax ".NPC123 Vorname Nachname" hier im Beispiel: ".NPC192 Donna Orphelia"
- ein NPC Profilfoto in der Syntax ".bild Vorname Nachname"  im obigen Beispiel mit Namen: ".bild Donna Ophelia"
- ein NPC Notizkarte mit Profilinfotext in der Syntax ".info Vorname Nachname"  im obigen Beispiel mit Namen: ".info Donna Ophelia"

Zusätzliche weitere Elemente (Props, Rezzitems, etc) werden in weiterführenden Artikeln beschrieben, um den Einstig nicht zu komplex zu gestalten.

Damit ein PMAC2.8 funktioniert muss man zuerst checken ob OSSL Befehle auf der Sim erlaubt sind, und derjenige der den Poser rezzt auch Rechte hat diese zu nutzen.

An OSSL Befehlen werden alle benötigt die mit NPC, Notecards und Geschlechtsbestimmung in Verbindung stehen.

- PMAC 2.8 Script
Das PMAC 2.8 Basisscript muss zwingend im rootprim sein! Die Positionierung aller drauf sitzenden Avatare/NPCs ist immer relativ zu dem Rootprim.
Bewegt sich das Rootprim, so nimmt es die Avatare mit. Daher kann PMAC sehr gut in Booten, Autos etc eingesetzt werden.
Will man aber Simgrenzen queeren, dürfen keine NPCS auf dem Poser sitzen! Denn NPCs dürfen Simgrenzen nicht überschreiten, sonst knallt es im Simulator!

Nun sehen wir uns die oben gelisteten benötigten Zusatzelemente an:

- Basisanimation mit Namen "~~~~~base_DO_NOT_DELETE_ME!!!!!"
Dieses ist eine simple T- Animation ohne Einblending und Ausblendung. Wichtig ist die allerniedrigste Priorität 1 beim Hochladen einzustellen.
Diese Basisanimation wird benötigt um die Animationsschaltungen "sauber" abzuwickeln.

Beispiel: man steht zunächst vor einem Poser und setzt sich dann darauf. Der PMAC stoppt darauf die Stand Animation, und startet die Basisanimaton für den nun auf dem Poser befindlichen AVA. Nun schaut er nach welche Poseranimation gespielt werden soll, stoppt die Basisanimation und schaltet auf diese um.
Entsprechend wird bei jeder Beendigung einer Pose wieder auf Basisanimation zurück gewechselt.
Der Name des Basisanimation ist im Script fest verdrahtet, kann dort aber geändert werden. Ich empfehle es aber nicht, weil ich die gleiche Basisanimation für andere Poser (Tanzposer etc,) verwende.
Wer einen Paramour Tanzball hat, kann diese Basisanimation diesem entnehmen, und evt. umbenennen.


- Notizkarte mit Namen ".PMAC CONFIG"
Diese Karte dient dazu das Poserscript zu konfigurieren um nicht ständig das Scipt ändern zu müssen.

Sie enthält einen wichtigen Eintrag: den Namen der Basis Animations Menükarte.
defaultGroup = Sonnen

Achtet auf Groß/Kleinschreibung!

Alle anderen Einträge sind optional.

Beispiel einer .PMAC CONFIG Notizkarte:

defaultGroup = Sonnen
resetOnQuit = TRUE
ownerUseReq = FALSE
ownerOnlyMenus = FALSE
ownerUseUnlocksPerms = FALSE
autoOn = TRUE
autoTimer = 60
showGroupsMenuFirst = FALSE
allowSoloNPC = TRUE
ownerOnlyRemote = TRUE
silent=TRUE

Details sind im Script Header beschrieben.
Interessant sind: resetOnQuit = TRUE welches bewirkt das der Poser resettet wird sobald alle aufgestanden sind.
Das gibt den verwendeten Speicher auf dem Server frei!!!!! Somit saugt der Poser nicht über die Jahre immer mehr RAM, wie andere Scripte.
Ausserdem startet der Poser dann definiert mit der Anfangspose beim nächsten Benutzen.

weiter interessant:
autoOn = TRUE
autoTimer = 60

Das führt dazu das der Poser automatisch Animationen im 60 Sekunden Raster der Reihe nach abspielt.

allowSoloNPC = TRUE bewirkt das ein eventuell am Poser sitzender NPC nicht gelöscht wird wenn der Avatar aufsteht.


- Prim mit Namen "~~~positioner" und innenliegenden Script.
Dieses Prim wird im Edit Modus des Posers je Avatar gerezzt und dient der Justierung von Posen.
Dazu müssen alle Positionen besetzt sein, um den Edit Modus zu starten.
Nun erscheinen verschiedenfarbige Balken. Mit verschieben/drehen der Balken wird jeweils ein Avatar bewegt.
Selektiert man mehrere Balken zusammen, so kann man mehrere Avas gleichzeitig verschieben.
Mit Speichern am Ende des Edit Modus wird die Notizkarte verändert oder neu geschrieben.

Der Primbalken muss "~~~positioner" heissen und im Rootprim drin liegen.
Das Script im Primbalken heisst: "PMAC 1.0 positioning handle".

Code:
// PARAMOUR MULTI-ANIMATION CONTROLLER (PMAC) v1.0 POSITIONING HANDLE SCRIPT
// by Aine Caoimhe January 2015
// Provided under Creative Commons Attribution-Non-Commercial-ShareAlike 4.0 International license.
// Please be sure you read and adhere to the terms of this license: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// There are no settings in this script that would normally require adjustment by the user.
// Edit at your own risk

default
{
    dataserver(key who,string message)
    {
        if (message=="HANDLE_DIE") llDie();
    }
    changed(integer change)
    {
        if (change & CHANGED_REGION_START) llDie();
    }
}



- mindestens eine Menükarte mit beispielsweisen Namen ".menu001A Sonnen" für 1 Avatar ".menu002A Sonnen" für 2 Avatare. Bis 8 AVAs werden unterstützt.

Die erste Menükarte des Posers muss genau so heissen wie sie in der ".PMAC CONFIG" eingetragen wurde.

Ich nehme als Beispiel nun die: .menu001A Sonnen Notizkarte.
Wie man an der 1 erkennt ist sie für nur einen Avatar gedacht. Setzt sich ein Weiterer wird er abgewiesen. Daher sollte man bei Duo Posern keine 1-Ava Notizkarten als default reinsetzten, sonst muss sich erst einer setzten und das Menü auf Duo umschalten, bevor der 2. auch sitzen darf.

Jede Notizkarte entspricht also genau einem Gruppeneintrag im Posermenü.
Der Inhalt der Notizkarten gliedert sich zeilenweise, und wird je Datenfeld durch die Trenner "|" unterteilt.

Jede Zeile enthält die komplette Beschreibung einer Pose für alle sitzenden AVAs. 
Die Trenner sind fest vorgegeben, Leerzeichen besonders am Zeilenende nicht erlaubt. Auch sollen keine Leerzeilen in der Notizkarte sein.
Wenn man Fehler macht, erkennst man das meist an kryptischen Bezeichungen in den Menüeinträgen.

Jede Zeile startet mit dem Namen der Posenbezeichnung die im Menü später zu wählen ist. Dieser erste Eintrag ist der eindeutige Indentifier, wird er mehrfach verwendet, so werden die anderen Zeilen mit gleichen Namen nie angespielt. Da das Menü sehr längenbeschränkt ist, sollten diese Namen kurz und absolut Eindeutig sein. Für die 1. Zeile wähle ich "Entspannen", für die 2. "Eincremen"

Die nächste Spalte dient der Steuerung externer Zusatzscripte. Das erkläre ich an dieser Stelle noch nicht, das ist Teil eines Aufbau Kurses, denn damit läßt sich extrem viel anstellen. Nur für den Hinterkopf: RLV, Props, Rezzitems, Attachments, Remote Befehle, Gesichtsanimationen, Kleidersteuerung, Bodysteuerung,... und das alles pro Animation.
Wichtig ist nur für den Start hier den Eintrag  "NO COM" drin zu lassen. Was als Erweitertes "nichts zu tun" interpretiert wird.

Nach dem nächsten | Trenner folgt die Animationsbeschreibung für den ersten Avatar. Beispielsweise
01SonnenF|<-0.786,-0.244,1.46>|<0.04061,0.005671,-0.138193,0.989556>

Dabei ist "01SonnenF" der Name der Animation die im ersten Posenpaar für den 1. Avatar gespielt wird. Hier am F hinten erkennbar, die weibliche Pose.
<-0.786,-0.244,1.46>  ist der relative Vector des 1. Avatars bezogen zum rootprim (wird über Editmenü mit Balken eingestellt)
<0.04061,0.005671,-0.138193,0.989556> ist die Rotation des 1. Avatars bezogen zum rootprim (wird auch über Editmenü mit Balken eingestellt)
Dahinter kommt kein Trennzeichen am Zeilenende. Da wir das Menü ".menu001A Sonnen"  nur für einen Avatar gemacht haben, wären wir nun fertig.
 
Würden wir ein F/M Paar auf dem Poser unterstützen, wie zum Beispiel 2: ".menu002A Sonnen", dann würde wieder einTrenner | kommen, und danach die Parameter für den 2. Avatar: Beispielsweise "01SonnenM|<-0.381,-0.854,1.493>|<-0.000873,0.000008,0.008727,0.999962>"

Somit wären die zusammengesetzten Zeilen:

für 1 Avatar:

Code:
Entspannen|NO COM|01SonnenF|<-0.786,-0.244,1.46>|<0.04061,0.005671,-0.138193,0.989556>


für 2 Avatare:

Code:
Entspannen|NO COM|01SonnenF|<-0.786,-0.244,1.46>|<0.04061,0.005671,-0.138193,0.989556>|01SonnenM|<-0.381,-0.854,1.493>|<-0.000873,0.000008,0.008727,0.999962>


Diese Eintragungen macht man mit copy paste auf eine neue Notizkarte und speichert sie unter dem Namen:

für 1 Avatar:       .menu001A Sonnen

für 2 Avatare:     .menu002A Sonnen

Stört euch nicht an den Vektoren und Rotationen. Da nimmt man als Standard <0.0,0.0,0.0>|<0.0,0.0,0.0,1.0>
Alles weitere macht man gemütlich im Edit Modus durch schieben/drehen der Balken.
Aber immer Notizkarte Sichern am Schluß auswählen.

Weitere Posen Notizkarten sind optional. Sobald gülige im Poser erkannt werden (Scriptreset PMAC 2.8 Script!) werden diese im Menü angeboten


- mindestens eine Animation. Der letzte Buchstabe des Animationsnamens sollte Geschlechtsspezifisch sein: F / M  oder beides nicht enthalten.
Nun das haben wir im obigen Beispiel schon gesehen.

Dort haben wir ein Posenpaar verwendet mit den Namen  01SonnenF und 01SonnenM

Für die 2. Zeile "Eincremen" wollen wir dann zum Beispiel die Posen  "02EincremenF"  und  "02ZuschauenM" nehmen.

Nun würde sich die neue Notizkarte für 1 Ava so gestalten:

Code:
Entspannen|NO COM|01SonnenF|<0.0,0.0,0.0>|<0.0,0.0,0.0,1.0>
Eincremen|NO COM|02EincremenF|<0.0,0.0,0.0>|<0.0,0.0,0.0,1.0>


Mit diesen Einstellungen würden wir dann nach Scriptreset des PMAC 2.8 scriptes in den Edit Modus wechseln, und beide Posen justieren.

für 2 Avas wäre das dann entsprechend:

Code:
Entspannen|NO COM|01SonnenF|<0.0,0.0,0.0>|<0.0,0.0,0.0,1.0>|01SonnenM|<0.0,0.0,0.0>|<0.0,0.0,0.0,1.0>
Eincremen|NO COM|02EincremenF|<0.0,0.0,0.0>|<0.0,0.0,0.0,1.0>|02ZuschauenM|<0.0,0.0,0.0>|<0.0,0.0,0.0,1.0>



So- das wäre es für das Erste.

Falls jemand Problem hat, bitte Melden

Natürlich ist es einfacher sich inwold das Script und die Hilfsdateien geben zu lassen.

Drucke diesen Beitrag

  PMAC POSER V2.8 BASISSCRIPT TEIL2
Geschrieben von: Tron Mcp - 15.02.2024, 11:01 - Forum: Animieren - Keine Antworten

PMAC POSER V2.8 BASISSCRIPT TEIL2

Dieser Artikel enthält meine Weiterentwicklung des PMAC Posers. Ein Fork der Version 2.0

Das Script kann direkt in vorhandenen alten PMAC Poser bis 2.2 zum Austausch verwendet werden.

Ihr müsst es aber in 2 Teilen herunterladen und im Script Editor zu einem Script zusammen setzen.
Der Code ist zu lang für einen Artikel des Forums. Dieses ist der 2.Teil!
Als eindeutige Beschriftung empfehle ich: P607 PMAC 2.8 Poser UNIVERSAL + NPC 122022.lsl


TEIL2:    "P607 PMAC 2.8 Poser UNIVERSAL + NPC 122022.lsl"

Code:
    // *** BEFEHLE AUS MENÜEINGABEN AUSWERTEN
    listen (integer channel, string name, key who, string message)
    {
        if (who!=user)
        {
            if (message=="TAKE CONTROL")
            {
                if (myState!="RUNNING")
                {
                    if (who==llGetOwner()) llOwnerSay("Cannot give you control because I am not in RUNNING state. Current state is: "+myState);
                    else llRegionSayTo(who,0,"Sorry, you cannot take control at the moment because I am not currently in normal operation mode.");
                    return;
                }
                ChangeMenuUser(who);
            }
            else if (message=="CANCEL") return;
            else return;
        }
        else if (message=="-") startListening();
        else if (message=="SYNCH") { SyncAvas(); startListening();}
        else if (message=="OPTIONS") showOptionsMenu();
        else if (message=="GROUPS") showGroupsMenu();
        else if (message=="<< BACK") loadAnimGroup(llList2String(currentAn,0));
        else if (message=="QUIT") QuitEditMode();
        else if (menu=="MENU_GROUPS")
        {
            if ((message=="< PREV") || (message=="NEXT >"))
            {
                if (message=="< PREV") groupPage-=6;
                else groupPage+=6;
                if (groupPage>=llGetListLength(groupList)) groupPage=0;
                else if (groupPage<=-6) groupPage=llGetListLength(groupList)-6;
                if (groupPage<0) groupPage=0;
                showGroupsMenu();
            }
            else loadAnimGroup(message);
        }
        else if (menu=="MENU_ANIM")
        {
            if ((message=="< PREV") || (message=="NEXT >"))
            {
                if (message=="< PREV") anPage-=6;
                else anPage+=6;
                if (anPage>=llGetListLength(anList)) anPage=0;
                else if (anPage<=-6) anPage=llGetListLength(anList)-6;
                if (anPage<0) anPage=0;
                showAnMenu();
            }
            else if (message=="ADD NPC")
            {
                if (llListFindList(positions,[NULL_KEY])==-1)
                {
                    llRegionSayTo(user,0,"Cannot add a new NPC at this time as there are no vacant positions");
                    showOptionsMenu();
                } else buildNpcList();
            }
            else
            {
                playAnimation(message);
                showAnMenu();
            }
        }
        else if (menu=="MENU_ADD_NPC") // MENU NPC HINZUFÜGEN GEWÄHLT
        {
            if (message=="CANCEL") showOptionsMenu();
            else if (llListFindList(positions,[NULL_KEY])==-1)
            {
                llRegionSayTo(user,0,"Cannot add a NPC as there are no longer any vacant positions");
                showOptionsMenu();
            }
            else if ((message=="< PREV") || (message=="NEXT >"))
            {
                if (message=="< PREV") npcPage-=9;
                else npcPage+=9;
                if (npcPage>=llGetListLength(npcList)) npcPage=0;
                else if (npcPage<=-9) npcPage=llGetListLength(npcList)-9;
                if (npcPage<0) npcPage=0;
                showAddNpcMenu();
            }
            else
            {
                string npcToLoad=llList2String(invNpc,llListFindList(invNpc,[message])-2);
                if (llGetInventoryType(npcToLoad)!=INVENTORY_NOTECARD)
                {
                    llRegionSayTo(user,0,"ERROR! Unable to locate the appearance notecard for this NPC.\nButton was: "+message+"\nCard should be: "+npcToLoad);
                    startListening();
                    return;
                }
                key npc = npc_rezzer(npcToLoad, llGetKey(), llGetPos()+<0.0,0.0,2.0>);
                showOptionsMenu();
            }
        }
        else if (menu=="MENU_SWAP_TO_POSITION")
        {
            if (message=="CANCEL") showOptionsMenu();
            else SwapAvaPositions(llListFindList(positions,user),((integer)message)-1);
            showOptionsMenu();
        }
        else if (menu=="MENU_UNSIT_POSITION")
        {
            if (message=="CANCEL") showOptionsMenu();
            else
            {
                integer posToUnsit=(integer)message-1;
                key thisKey=llList2Key(positions,posToUnsit);
                if (osIsNpc(thisKey))
                {
                    positions=[]+llListReplaceList(positions,[NULL_KEY],posToUnsit,posToUnsit);
                    osNpcRemove(thisKey);
                }
                else llUnSit(thisKey);
                showOptionsMenu();
            }
        }
        else if (menu=="MENU_SELECT_AUTO_MODE")
        {
            if (message=="AUTO OFF")
            {
                autoOn=FALSE;
                llSensorRemove();
                if (!silent) llRegionSayTo(user,0,"Auto mode now off");
            }
            else if (message!="CANCEL")
            {
                autoOn=TRUE;
                if(message!="AUTO ON") autoTimer=(float)message;
                llSensorRepeat("THIS_WILL_NEVER_RETURN_A_SENSOR_RESULT",NULL_KEY,AGENT,0.001,0.0,autoTimer);
                if (!silent) llRegionSayTo(user,0,"Auto mode is on and set to "+(string)llRound(autoTimer)+" seconds");
            }
            showOptionsMenu();
        }
        else if (menu=="MENU_SPECIALS")
        {
            if (message=="CANCEL") showOptionsMenu();
            else if ((message=="< PREV") || (message=="NEXT >"))
            {
                if (message=="< PREV") specPage-=18;
                else specPage+=18;
                if (specPage>=llGetListLength(specials)) specPage=0;
                else if (specPage<=-18) specPage=llGetListLength(specials)-18;
                if (specPage<0) specPage=0;
                showSpecialsMenu();
            }
            else llMessageLinked(LINK_THIS,0,llList2String(specials,llListFindList(specials,[message])+1)+"|"+user,llDumpList2String(positions,"|"));
        }
        else if (menu=="MENU_OPTIONS")
        {
            if (message=="AUTO") showAutoMenu();
            else if (message=="SPECIAL") showSpecialsMenu();
            else if (llSubStringIndex(message,"MENUS")==0)
            {
                ownerOnlyMenus=!ownerOnlyMenus;
                if (ownerOnlyMenus) llOwnerSay("Menus are now locked. Only you can control me");
                else llOwnerSay("Menus are now unlocked");
                showOptionsMenu();
            }
            else if (message=="EDIT ON")
            {
                if (llListFindList(positions,[NULL_KEY])>=0)
                {
                    llRegionSayTo(who,0,"Sorry, all positions must be filled before you can enter edit mode and there is currently at least one that is empty.");
                    showOptionsMenu();
                }
                else if (currentGroup!=llList2String(currentAn,0))
                {
                    llRegionSayTo(user,0,"Cannot enter edit mode because the animation currently playing is not from the same notecard as your currently loaded group. Either select an animation from this card or load the group that the current animation belongs to.");
                    showOptionsMenu();
                }
                else
                {
                    if (autoOn) { autoOn=FALSE; llSensorRemove();}
                    integer l=llGetListLength(positions);
                    while (--l>=0) { if (!osIsNpc(llList2Key(positions,l))) llRegionSayTo(llList2Key(positions,l),0,"The Owner has entered edit mode and all functions are temporarily disabled. Please do not stand while these adjustments are being made.");}
                    myState="EDIT";
                    llMessageLinked(LINK_THIS,0,"GLOBAL_NOTICE_ENTERING_EDIT_MODE",llDumpList2String(positions,"|"));
                    editHandles=[];
                    rezzingHandles=TRUE;
                    rezHandles();
                }
            }
            else if (message=="SWAP")
            {
                integer i=llGetListLength(positions);
                if (i==1)
                {
                    llRegionSayTo(user,0,"The current animation group is for only one position so cannot swap positions.");
                    showOptionsMenu();
                }
                else if (i==2)
                {
                    SwapAvaPositions(0,1);
                    showOptionsMenu();
                }
                else
                {
                    txtDia="SWAP POSITION\n\nSelect the position number you would like to swap with\n";
                    butDia=[];
                    integer p;
                    while (llGetListLength(butDia)<11)
                    {
                        if (p<i)
                        {
                            key thisKey=llList2Key(positions,p);
                            if (thisKey==user) txtDia+="\n"+(string)(p+1)+". (you are curently here)";
                            else
                            {
                                butDia=[]+butDia+[(string)(p+1)];
                                if (thisKey==NULL_KEY) txtDia+="\n"+(string)(p+1)+". (empty)";
                                else txtDia+="\n"+(string)(p+1)+". "+llGetUsername(thisKey);
                            }
                            p++;
                        }
                        else butDia=[]+butDia+["-"];
                    }
                    butDia=[]+butDia+["CANCEL"];
                    while (llListFindList(butDia,["-","-","-"])>=0) { butDia=[]+llDeleteSubList(butDia,llListFindList(butDia,["-","-","-"]),llListFindList(butDia,["-","-","-"])+2); }
                    menu="MENU_SWAP_TO_POSITION";
                    startListening();
                }
            }
            else if (message=="UNSIT")
            {
                list whoCanUnsit;
                integer i=llGetListLength(positions);
                while (--i>=0)
                {
                    key thisKey=llList2Key(positions,i);
                    if ((thisKey!=user) && (thisKey!=llGetOwner()) && (thisKey!=NULL_KEY)) whoCanUnsit=[]+[i,thisKey]+whoCanUnsit;
                }
                integer l=llGetListLength(whoCanUnsit);
                if (l==0)
                {
                    llRegionSayTo(user,0,"There are no users you can remove");
                    showOptionsMenu();
                }
                else if (l==2)
                {
                    integer thisInd=llList2Integer(whoCanUnsit,0);
                    key thisUser=llList2Key(whoCanUnsit,1);
                    if (osIsNpc(thisUser))
                    {
                        positions=[]+llListReplaceList(positions,[NULL_KEY],thisInd,thisInd);
                        osNpcRemove(thisUser);
                } else llUnSit(thisUser);
                showOptionsMenu();
                }
                else
                {
                    txtDia="UNSIT A USER\n\nSelect the user to unsit (selecting NPC it will remove it). The number is the position they currently occupy.\n";
                    butDia=[];
                    i=0;
                    while (llGetListLength(butDia)<11)
                    {
                        if (i<l)
                        {
                            txtDia+="\n"+(string)(llList2Integer(whoCanUnsit,i)+1)+". "+llGetUsername(llList2Key(whoCanUnsit,i+1));
                            butDia=[]+butDia+[(string)(llList2Integer(whoCanUnsit,i)+1)];
                            i+=2;
                        }
                        else butDia=[]+butDia+["-"];
                    }
                    butDia=[]+butDia+["CANCEL"];
                    while (llListFindList(butDia,["-","-","-"])>=0) { butDia=[]+llDeleteSubList(butDia,llListFindList(butDia,["-","-","-"]),llListFindList(butDia,["-","-","-"])+2); }
                    menu="MENU_UNSIT_POSITION";
                    startListening();
                }
            }
            else if (message=="ADD NPC")
            {
                if (llListFindList(positions,[NULL_KEY])==-1)
                {
                    llRegionSayTo(user,0,"Cannot add a new NPC at this time as there are no vacant positions");
                    showOptionsMenu();
                } else buildNpcList();
            }
            else llOwnerSay("ERROR! Received unexpected message from Options menu: "+message);
        }
        else if (menu=="MENU_EDIT")
        {
            if (myState!="EDIT")
            {
                llOwnerSay("No longer in edit mode so unable to handle a response from that menu.");
                showOptionsMenu();
            }
            llSetTimerEvent(0.0);
            integer valid=TRUE;
            integer check=llGetListLength(positions);
            while (valid && (--check>=0)) { if (!getUserLink(llList2Key(positions,check))) valid=FALSE; }
            if (!valid)
            {
                llOwnerSay("ERROR! A user appears to have stood. Cannot remain in edit mode unless all positions are occupied. Ignoring your selection, reverting to stored position for this animation, and leaving edit mode without saving any changes. Once all positions are filled once more you may return to edit mode to resume work or save the stored data.");
                playAnimation(llList2String(currentAn,1));
                removeHandles();
                return;
            }
            if (message=="STORE ADDON") llMessageLinked(LINK_THIS,0,"GLOBAL_STORE_ADDON_NOTICE",llDumpList2String(positions,"|"));
            else if (message=="REVERT THIS") playAnimation(llList2String(currentAn,1));
            else
            {
                persistChanges();
                if (message=="EDIT OFF") removeHandles();
                else if ((message=="STORE THIS") || (message=="< PREV") || (message=="NEXT >"))
                {
                    integer anToPlay=llListFindList(anList,[llList2String(currentAn,1)]);
                    if (message=="< PREV") anToPlay--;
                    else if (message=="NEXT >") anToPlay++;
                    if (anToPlay<0) anToPlay=llGetListLength(anList)-1;
                    if (anToPlay>=llGetListLength(anList)) anToPlay=0;
                    playAnimation(llList2String(anList,anToPlay));
                }
                else if ((message=="SAVE CARD") || (message=="SAVE NEW"))
                {
                    string cardName=llList2String(invGroups,llListFindList(invGroups,[currentGroup])-3);
                    string strToSay;
                    if (message=="SAVE NEW")
                    {
                        integer num=2;
                        while (llGetInventoryType(cardName+(string)num)==INVENTORY_NOTECARD) { num++; }
                        cardName=""+cardName+(string)num;
                        currentGroup=llGetSubString(cardName,10,-1);
                        invGroups=[]+invGroups+[cardName,(integer)(llGetSubString(cardName,7,7)),llGetSubString(cardName,8,8),currentGroup];
                        groupList=[]+groupList+[currentGroup];
                        currentAn=[]+llListReplaceList(currentAn,[currentGroup],0,0);
                        strToSay="All data stored to a new notecard and now working with the newly created group: "+currentGroup;
                    }
                    else strToSay="All data now updated in notecard for the group: "+currentGroup;
                    saveCard(cardName);
                    llRegionSayTo(user,0,strToSay);
                }
                else llOwnerSay("ERROR! Message not expected in Edit menu handling: "+message);
            }
            if (myState=="EDIT")
            {
                llSetTimerEvent(editTimer);
                showEditMenu();
            }
        }
    }
}


Dieses Script ist zunächst als Austauschobjekt für vorhandene PMACs gedacht um diese zu modernisieren.

Um es Standalone einzusetzten bedarf es noch mehrere zusätzlicher Elemente und Erklärungen.
Dies folgen in weiteren Artikel Teilen.

Drucke diesen Beitrag