diff --git a/osmtool.sh b/osmtool.sh index 91c138b..825370b 100644 --- a/osmtool.sh +++ b/osmtool.sh @@ -7,7 +7,7 @@ tput reset # Bildschirmausgabe loeschen inklusive dem Scrollbereich. SCRIPTNAME="opensimMULTITOOL II" -VERSION="V25.4.66.227" +VERSION="V25.4.69.238" echo -e "\e[36m$SCRIPTNAME\e[0m $VERSION" echo "Dies ist ein Tool welches der Verwaltung von OpenSim Servern dient." echo "Bitte beachten Sie, dass die Anwendung auf eigene Gefahr und Verantwortung erfolgt." @@ -18,10 +18,6 @@ echo " " #* Variablen setzen #?────────────────────────────────────────────────────────────────────────────────────────── -# Soll im Hypergrid Modus gearbeitet werden oder in einem Geschlossenen Grid? -hypergrid=" -inifile=Robust.HG.ini" # Ja -# hypergrid=" -inifile=Robust.ini" # Nein - #* FARBDEFINITIONEN COLOR_OK='\e[32m' # Grün (Haken) COLOR_BAD='\e[31m' # Rot (Kreuz) @@ -75,6 +71,47 @@ echo -e "${COLOR_LABEL}Das Arbeitsverzeichnis ist:${COLOR_RESET} ${COLOR_VALUE}$ echo -e "${COLOR_LABEL}Ihre IP Adresse ist:${COLOR_RESET} ${COLOR_VALUE}$system_ip${COLOR_RESET}" blankline +# Soll im Hypergrid Modus gearbeitet werden oder in einem Geschlossenen Grid? +function hypergrid() { + local modus="$1" + local robust_dir="$SCRIPT_DIR/robust/bin" # Korrekter Pfad zu Robust-Dateien + + echo "Modus Einstellung" + + if [[ "$modus" == "hypergrid" ]]; then + echo "Hypergrid Modus aktiviert." + + # Prüfen ob Robust.HG.ini existiert + if [[ ! -f "$robust_dir/Robust.HG.ini" ]]; then + echo -e "${COLOR_BAD}FEHLER: Robust.HG.ini nicht gefunden in $robust_dir${COLOR_RESET}" >&2 + return 1 + fi + + cp "$robust_dir/Robust.HG.ini" "$robust_dir/Robust.ini" || { + echo -e "${COLOR_BAD}FEHLER: Konnte Robust.HG.ini nicht kopieren${COLOR_RESET}" >&2 + return 1 + } + + else + echo "Geschlossener Grid Modus aktiviert." + + # Prüfen ob Robust.local.ini existiert + if [[ ! -f "$robust_dir/Robust.local.ini" ]]; then + echo -e "${COLOR_BAD}FEHLER: Robust.local.ini nicht gefunden in $robust_dir${COLOR_RESET}" >&2 + return 1 + fi + + cp "$robust_dir/Robust.local.ini" "$robust_dir/Robust.ini" || { + echo -e "${COLOR_BAD}FEHLER: Konnte Robust.local.ini nicht kopieren${COLOR_RESET}" >&2 + return 1 + } + fi + + echo -e "${COLOR_OK}Modus erfolgreich auf $modus gesetzt${COLOR_RESET}" + return 0 +} + + KOMMANDO=$1 # Eingabeauswertung fuer Funktionen. #?────────────────────────────────────────────────────────────────────────────────────────── @@ -190,11 +227,11 @@ function opensimstart() { # RobustServer starten if [[ -d "robust/bin" && -f "robust/bin/Robust.dll" ]]; then - echo -e "${SYM_OK} ${COLOR_START}Starte ${COLOR_SERVER}RobustServer${COLOR_RESET} ${COLOR_START}aus ${COLOR_DIR}robust/bin...${COLOR_RESET}" + echo -e "${SYM_OK} ${COLOR_START}Starte ${COLOR_SERVER}RobustServer ${COLOR_RESET} ${COLOR_START}aus ${COLOR_DIR}robust/bin...${COLOR_RESET}" cd robust/bin || exit 1 # -inifile=Robust.HG.ini - screen -fa -S robustserver -d -U -m dotnet Robust.dll "$hypergrid" + screen -fa -S robustserver -d -U -m dotnet Robust.dll cd - >/dev/null 2>&1 || exit 1 sleep $RobustServer_Start_wait else @@ -867,6 +904,102 @@ function database_setup() { echo "Benutzername: ${db_user} Passwort: ${db_pass}" | sudo tee "${SCRIPT_DIR}/mariadb_passwords.txt" >/dev/null } +# string array with parameters: firstname, lastname, password, locationX, locationY, email, userID, model name +# bash osmtool.sh createmasteruser +# oder +# bash osmtool.sh createmasteruser "John" "Doe" "123456" "john@doe.com" "3a1c8128-908f-4455-8157-66c96a46f75e" +# bash osmtool.sh createmasteruser "Manni" "Aabye" "manfred131063" "john@doe" "3a1c8128-908f-4455-8157-66c96a46f75e" +function createmasteruser() { + # 24.04.2025 + # Der Master User ist die zweithöchste Person nach System im Grid. + local VORNAME="${1:-John}" + local NACHNAME="${2:-Doe}" + local PASSWORT="${3:-123456}" + local EMAIL="${4:-john@doe.com}" + local userid="${5:-$(uuidgen)}" + + # Interaktive Benutzerabfrage mit Fallback-Werten + echo -e "${COLOR_INFO}Master User Erstellung (Enter für Default-Werte)${COLOR_RESET}" + + echo -n "Vorname [${VORNAME}]: " + read -r input + VORNAME="${input:-$VORNAME}" + + echo -n "Nachname [${NACHNAME}]: " + read -r input + NACHNAME="${input:-$NACHNAME}" + + echo -n "Passwort [${PASSWORT}]: " + read -r input + PASSWORT="${input:-$PASSWORT}" + + echo -n "E-Mail [${EMAIL}]: " + read -r input + EMAIL="${input:-$EMAIL}" + + echo -n "UserID [automatisch generiert]: " + read -r input + userid="${input:-$(uuidgen)}" + + # Überprüfe ob Robust läuft + if ! screen -list | grep -q "robustserver"; then + echo -e "${COLOR_BAD}CREATEUSER: Robust existiert nicht oder läuft nicht${COLOR_RESET}" + return 1 + fi + + # Bestätigungsabfrage + echo -e "\n${COLOR_INFO}Zusammenfassung:${COLOR_RESET}" + echo "Vorname: $VORNAME" + echo "Nachname: $NACHNAME" + echo "Passwort: $PASSWORT" + echo "E-Mail: $EMAIL" + echo "UserID: $userid" + echo -e "${COLOR_WARNING}Wollen Sie den Benutzer wirklich anlegen? [J/n]${COLOR_RESET}" + read -r -n 1 confirmation + echo "" + + if [[ "$confirmation" =~ [nN] ]]; then + echo -e "${COLOR_INFO}Abgebrochen${COLOR_RESET}" + return 0 + fi + + # create user [ [ [ [ [ []]]]]] + # Create a new user + # Befehlskette zur Benutzererstellung: + screen -S robustserver -p 0 -X eval "stuff 'create user'^M" + screen -S robustserver -p 0 -X eval "stuff '$VORNAME'^M" # Vorname + screen -S robustserver -p 0 -X eval "stuff '$NACHNAME'^M" # Nachname + screen -S robustserver -p 0 -X eval "stuff '$PASSWORT'^M" # Passwort + #screen -S robustserver -p 0 -X eval "stuff '128'^M" # locationX - Robust Fehler + #screen -S robustserver -p 0 -X eval "stuff '128'^M" # locationY - Robust Fehler + screen -S robustserver -p 0 -X eval "stuff '$EMAIL'^M" # E-Mail + screen -S robustserver -p 0 -X eval "stuff '$userid'^M" # User ID + screen -S robustserver -p 0 -X eval "stuff 'Ruth'^M" # Model name Ruth - Robust Fehler + #screen -S robustserver -p 0 -X eval "stuff 'set home'^M" # Home setzen - Robust Fehler + + echo -e "${COLOR_OK}Masteruser $VORNAME $NACHNAME wurde erstellt${COLOR_RESET}" + echo -e "${COLOR_INFO}UserID: $userid${COLOR_RESET}" + + echo -e "\n${SYM_LOG} ${COLOR_LABEL}Benutzerdaten gespeichert in: ${COLOR_FILE}${SCRIPT_DIR}/userinfo.txt${COLOR_RESET}" + echo "Vorname: ${VORNAME} Nachname: ${NACHNAME} Passwort: ${PASSWORT} E-Mail: ${EMAIL} UserID: ${userid}" | sudo tee "${SCRIPT_DIR}/userinfo.txt" >/dev/null + + echo " Der Fehler: Unable to set home for account - Ist ein Fehler in Robust der innerhalb des C# Sourcecode behoben werden muss." + echo "Das was wir machen müssen um diesen Fehler zu beheben ist im Viewer bei der Anmeldung eine Regionsnamen eingeben einer vorhandenen Region und Inworld dann Hier als zuhause auswählen." + blankline +} + +# Noch keine Funktion. +function createlanduser() { + # shellcheck disable=SC2317 + echo "erstellt Estate und Landuser" + # Bei sim1 muss der Estate Name und Owner angegeben werden. + # Benötigt wird: "$gridname $VORNAME $NACHNAME $estatename" + + # Estate Default Estate has no owner set. + # Estate owner first name [Test]: + # Estate owner last name [User]: +} + function setcrontab() { # Strict Mode: Fehler sofort erkennen set -euo pipefail @@ -1588,7 +1721,6 @@ function uncomment_ini_section_line() { return 1 fi } - function comment_ini_line() { local file="$1" local section="$2" @@ -1608,9 +1740,10 @@ function comment_ini_line() { BEGIN { in_section = 0 } $0 ~ "^\\[" section "\\]" { in_section = 1; print; next } in_section && /^\[/ { in_section = 0 } - in_section && $0 ~ key { - # Einfach Semikolon vor die Zeile setzen - print ";" $0 + in_section && $0 ~ key && !/^[[:space:]]*;/ { + # Nur nicht bereits kommentierte Zeilen kommentieren + sub(/^[[:space:]]*/, "&;", $0) + print $0 next } { print } @@ -1630,6 +1763,51 @@ function comment_ini_line() { fi } +function clear_ini_section() { + local file="$1" + local section="$2" + + # Sicherheitsprüfungen + [ ! -f "$file" ] && { echo -e "${COLOR_BAD}Datei nicht gefunden: ${file}${COLOR_RESET}" >&2; return 1; } + [ -z "$section" ] && { echo -e "${COLOR_BAD}Sektion darf nicht leer sein${COLOR_RESET}" >&2; return 1; } + + # Temporäre Datei erstellen + local temp_file + temp_file=$(mktemp) || { echo -e "${COLOR_BAD}Temp-Datei konnte nicht erstellt werden${COLOR_RESET}" >&2; return 1; } + + # AWK zum Leeren der Sektion (behält Header) + awk -v section="$section" ' + BEGIN { in_section = 0 } + + # Sektionsanfang erkennen + $0 ~ "^\\[" section "\\]" { + in_section = 1 + print $0 # Header ausgeben + next + } + + # Sektionsende erkennen + in_section && /^\[/ { + in_section = 0 + } + + # Innerhalb der Sektion: nichts ausgeben (löschen) + in_section { next } + + # Außerhalb der Sektion: normale Ausgabe + { print } + ' "$file" > "$temp_file" + + # Originaldatei ersetzen + if mv "$temp_file" "$file"; then + echo -e "${COLOR_OK}Sektion '[${section}]' erfolgreich geleert${COLOR_RESET}" + return 0 + else + echo -e "${COLOR_BAD}Datei konnte nicht aktualisiert werden${COLOR_RESET}" >&2 + return 1 + fi +} + #?────────────────────────────────────────────────────────────────────────────────────────── #* Konfigurationen der einzelnen Dienste #?────────────────────────────────────────────────────────────────────────────────────────── @@ -1641,6 +1819,11 @@ function comment_ini_line() { # Key = Value # ; Comment +# clean_gridname() { +# echo "$1" | sed -e 's/ä/ae/g' -e 's/ö/oe/g' -e 's/ü/ue/g' -e 's/ß/ss/g' \ +# -e 's/[- &]/_/g' -e 's/__\+/_/g' -e 's/^_//' -e 's/_$//' +# } + # Alle Datenbanken konfigurieren. function database_set_iniconfig() { # 24.04.2025 @@ -1695,6 +1878,9 @@ function welcomeiniconfig() { # 25.04.2025 local ip="$1" local gridname="$2" + + # Gridname bereinigen + gridname=$(echo "$gridname" | sed -e 's/ä/ae/g' -e 's/ö/oe/g' -e 's/ü/ue/g' -e 's/[-&]/_/g' -e 's/ */_/g' -e 's/__\+/_/g') local welcome_ini="${SCRIPT_DIR}/sim1/bin/Regions/$gridname.ini" @@ -1702,15 +1888,17 @@ function welcomeiniconfig() { if [[ -f "$welcome_ini" ]]; then echo -e "${COLOR_INFO}Überspringe Erstellung der Welcome-Region: '$gridname.ini' existiert bereits${COLOR_RESET}" # Vorsichtshalber Region in Robust-Konfigurationen eintragen. - set_ini_key "${SCRIPT_DIR}/robust/bin/Robust.HG.ini" "GridService" "Region_$gridname" "DefaultRegion, DefaultHGRegion" - set_ini_key "${SCRIPT_DIR}/robust/bin/Robust.ini" "GridService" "Region_$gridname" "DefaultRegion" + set_ini_key "${SCRIPT_DIR}/robust/bin/Robust.HG.ini" "GridService" "Region_$gridname" "\"DefaultRegion, DefaultHGRegion, FallbackRegion\"" + set_ini_key "${SCRIPT_DIR}/robust/bin/Robust.ini" "GridService" "Region_$gridname" "\"DefaultRegion, FallbackRegion\"" return fi region_uuid=$(uuidgen) - # 1. Datei erstellen - touch "$welcome_ini" + # Datei erstellen + #touch "$welcome_ini" + #touch "$welcome_ini" || echo "" > "$welcome_ini" + touch "$welcome_ini" 2>/dev/null || echo "" > "$welcome_ini" # 2. Sektion hinzufügen add_ini_section "$welcome_ini" "$gridname" @@ -1722,12 +1910,13 @@ function welcomeiniconfig() { set_ini_key "$welcome_ini" "$gridname" "SizeY" "256" set_ini_key "$welcome_ini" "$gridname" "SizeZ" "256" set_ini_key "$welcome_ini" "$gridname" "InternalPort" "9015" - set_ini_key "$welcome_ini" "$gridname" "ExternalHostName" "\"$ip\"" + set_ini_key "$welcome_ini" "$gridname" "ExternalHostName" "$system_ip" set_ini_key "$welcome_ini" "$gridname" "MaxPrims" "15000" set_ini_key "$welcome_ini" "$gridname" "MaxAgents" "40" set_ini_key "$welcome_ini" "$gridname" "MaptileStaticUUID" "$region_uuid" set_ini_key "$welcome_ini" "$gridname" "InternalAddress" "0.0.0.0" set_ini_key "$welcome_ini" "$gridname" "AllowAlternatePorts" "False" + set_ini_key "$welcome_ini" "$gridname" ";NonPhysicalPrimMax" "512" set_ini_key "$welcome_ini" "$gridname" ";PhysicalPrimMax" "128" set_ini_key "$welcome_ini" "$gridname" ";ClampPrimSize" "false" @@ -1747,28 +1936,28 @@ function welcomeiniconfig() { set_ini_key "$welcome_ini" "$gridname" ";MasterAvatarSandboxPassword" "passwd" # 4. Region in Robust-Konfigurationen eintragen - set_ini_key "${SCRIPT_DIR}/robust/bin/Robust.HG.ini" "GridService" "Region_$gridname" "DefaultRegion, DefaultHGRegion" - set_ini_key "${SCRIPT_DIR}/robust/bin/Robust.ini" "GridService" "Region_$gridname" "DefaultRegion" + # DefaultRegion, DefaultHGRegion, FallbackRegion, NoDirectLogin, Persistent, LockedOut, Reservation, NoMove, Authenticate + set_ini_key "${SCRIPT_DIR}/robust/bin/Robust.HG.ini" "GridService" "Region_$gridname" "\"DefaultRegion, DefaultHGRegion, FallbackRegion\"" + set_ini_key "${SCRIPT_DIR}/robust/bin/Robust.ini" "GridService" "Region_$gridname" "\"DefaultRegion, FallbackRegion\"" echo -e "${COLOR_OK}Welcome_Area.ini Konfiguration abgeschlossen für $gridname${COLOR_RESET}" blankline } -# Konfiguriert MoneyServer.ini im robust/bin Verzeichnis function moneyserveriniconfig() { - # 24.04.2025 local ip="$1" local gridname="$2" - - # Passwort - local password_file="${SCRIPT_DIR}/mariadb_passwords.txt" - # Benutzername und Passwort auslesen (vorausgesetzt die Datei ist im Format: Benutzername: Passwort: ) + # Gridname bereinigen + gridname=$(echo "$gridname" | sed -e 's/ä/ae/g' -e 's/ö/oe/g' -e 's/ü/ue/g' -e 's/[-&]/_/g' -e 's/ */_/g' -e 's/__\+/_/g') + + # Passwort aus Datei laden + local password_file="${SCRIPT_DIR}/mariadb_passwords.txt" local db_user db_pass db_user=$(grep -oP 'Benutzername:\s*\K\S+' "$password_file") db_pass=$(grep -oP 'Passwort:\s*\K\S+' "$password_file") - # Falls Werte nicht gelesen wurden, abbrechen + # Falls keine Benutzer- und Passwortwerte gelesen wurden, abbrechen if [[ -z "$db_user" || -z "$db_pass" ]]; then echo "Fehler: Benutzername oder Passwort konnten nicht ausgelesen werden." return 1 @@ -1777,19 +1966,40 @@ function moneyserveriniconfig() { local dir="$SCRIPT_DIR/robust/bin" local file="$dir/MoneyServer.ini" - if [[ -f "$file.example" ]]; then - cp "$file.example" "$file" - else - touch "$file" + # Sicherstellen, dass die Vorlage existiert + if [[ ! -f "$file.example" ]]; then + echo "FEHLER: Konfigurationsvorlage '$file.example' fehlt!" >&2 + exit 1 fi + + # Kopieren der Vorlage + cp "$file.example" "$file" || { + echo "FEHLER: Konnte '$file' nicht erstellen" >&2 + exit 1 + } + + # [Startup] + set_ini_key "$file" "Startup" "PIDFile" "\"/tmp/money.pid\"" + # [MySql] - set_ini_key "$file" "MySql" "database" "robust" - set_ini_key "$file" "MySql" "username" "$db_user" - set_ini_key "$file" "MySql" "password" "$db_pass" + set_ini_key "$file" "MySql" "hostname" "\"localhost\"" + set_ini_key "$file" "MySql" "database" "\"robust\"" + set_ini_key "$file" "MySql" "username" "\"$db_user\"" + set_ini_key "$file" "MySql" "password" "\"$db_pass\"" + set_ini_key "$file" "MySql" "pooling" "\"true\"" + set_ini_key "$file" "MySql" "port" "\"3306\"" + set_ini_key "$file" "MySql" "MaxConnection" "\"25\"" # [MoneyServer] - set_ini_key "$file" "MoneyServer" "MoneyServerIPaddress" "http://$system_ip:8008" - set_ini_key "$file" "MoneyServer" "MoneyScriptIPaddress" "$system_ip" + set_ini_key "$file" "MoneyServer" "ServerPort" "\"8008\"" + set_ini_key "$file" "MoneyServer" "CurrencyOnOff" "\"on\"" + set_ini_key "$file" "MoneyServer" "CurrencyMaximum" "\"20000\"" + set_ini_key "$file" "MoneyServer" "MoneyServerIPaddress" "\"http://$ip:8008\"" + set_ini_key "$file" "MoneyServer" "DefaultBalance" "\"1000\"" + + # [Certificate] + set_ini_key "$file" "Certificate" "CheckClientCert" "\"false\"" + set_ini_key "$file" "Certificate" "CheckServerCert" "\"false\"" echo -e "${COLOR_OK}MoneyServer.ini Konfiguration abgeschlossen${COLOR_RESET}" blankline @@ -1803,6 +2013,9 @@ function opensiminiconfig() { local base_port=9010 local sim_counter=1 + # Gridname bereinigen + gridname=$(echo "$gridname" | sed -e 's/ä/ae/g' -e 's/ö/oe/g' -e 's/ü/ue/g' -e 's/[-&]/_/g' -e 's/ */_/g' -e 's/__\+/_/g') + # Iteration über alle sim1 bis sim99 Verzeichnisse for i in $(seq 1 99); do sim_dir="$SCRIPT_DIR/sim$i" @@ -1810,12 +2023,18 @@ function opensiminiconfig() { local dir="$sim_dir/bin" local file="$dir/OpenSim.ini" - if [[ -f "$file.example" ]]; then - cp "$file.example" "$file" - else - touch "$file" + if [[ ! -f "$file.example" ]]; then + echo "FEHLER: Konfigurationsvorlage '$file.example' fehlt!" >&2 + echo "Das Programm benötigt diese Datei zum Starten." >&2 + exit 1 # Programm mit Fehlercode beenden fi + # Nur wenn Vorlage existiert: Kopieren + cp "$file.example" "$file" || { + echo "FEHLER: Konnte '$file' nicht erstellen" >&2 + exit 1 + } + echo -e "${COLOR_INFO}Konfiguriere OpenSim.ini in $dir${COLOR_RESET}" # Portberechnung pro Instanz @@ -1959,101 +2178,153 @@ function robusthginiconfig() { local dir="$SCRIPT_DIR/robust/bin" local file="$dir/Robust.HG.ini" - if [[ -f "$file.example" ]]; then - cp "$file.example" "$file" - else - touch "$file" + # Gridname bereinigen + gridname=$(echo "$gridname" | sed -e 's/ä/ae/g' -e 's/ö/oe/g' -e 's/ü/ue/g' -e 's/[-&]/_/g' -e 's/ */_/g' -e 's/__\+/_/g') + + if [[ ! -f "$file.example" ]]; then + echo "FEHLER: Konfigurationsvorlage '$file.example' fehlt!" >&2 + echo "Das Programm benötigt diese Datei zum Starten." >&2 + exit 1 # Programm mit Fehlercode beenden fi + # Nur wenn Vorlage existiert: Kopieren + cp "$file.example" "$file" || { + echo "FEHLER: Konnte '$file' nicht erstellen" >&2 + exit 1 + } + # [Const] set_ini_key "$file" "Const" "BaseHostname" "$ip" + + # [Startup] + # PID-Dateien gehören grundsätzlich in /tmp warum: tmp Wird beim Neustart automatisch geleert. Keine Berechtigungsprobleme (normalerweise schreibbar für alle). + uncomment_ini_line "$file" "PIDFile" + # [ServiceList] uncomment_ini_line "$file" "OfflineIMServiceConnector" uncomment_ini_line "$file" "GroupsServiceConnector" uncomment_ini_line "$file" "BakedTextureService" uncomment_ini_line "$file" "UserProfilesServiceConnector" uncomment_ini_line "$file" "HGGroupsServiceConnector" + + # [Network] # [Hypergrid] uncomment_ini_line "$file" "HomeURI" uncomment_ini_line "$file" "GatekeeperURI" - - # [DatabaseService] Nicht hier! + + # [DatabaseService] wird in database_set_iniconfig eingetragen. # ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=*****;Old Guids=true;SslMode=None;" + # [AssetService] + # FSAssetService und sqlite nutzen das filesystem und beanspruchen die Festplatte so das ich hier nichts machen werde. + # [GridService] für osWebinterface # Der Regionsname wird von welcomeiniconfig geschrieben. uncomment_ini_line "$file" "MapTileDirectory" + + # Key = "\"Value\"" - # [LoginService] für osWebinterface etc. "\${Const|BaseURL}:\${Const|PublicPort}" - set_ini_key "$file" "LoginService" "Currency" "OS$" - set_ini_key "$file" "LoginService" "WelcomeMessage" "Willkommen im $gridname!" - set_ini_key "$file" "LoginService" "MapTileURL" "\${Const|BaseURL}:\${Const|PublicPort}/" - set_ini_key "$file" "LoginService" "SearchURL" "\${Const|BaseURL}:\${Const|PublicPort}/searchservice.php" - set_ini_key "$file" "LoginService" "DestinationGuide" "\${Const|BaseURL}/guide.php" - set_ini_key "$file" "LoginService" "AvatarPicker" "\${Const|BaseURL}/avatarpicker.php" + # [LoginService] für osWebinterface etc. "\${Const|BaseURL}:\${Const|PublicPort}" + uncomment_ini_line "$file" "SearchURL" + uncomment_ini_line "$file" "DestinationGuide" + uncomment_ini_line "$file" "AvatarPicker" + uncomment_ini_line "$file" "MinLoginLevel" + uncomment_ini_line "$file" "Currency" + uncomment_ini_line "$file" "ClassifiedFee" + + set_ini_key "$file" "LoginService" "WelcomeMessage" "\"Willkommen im $gridname!\"" + set_ini_key "$file" "LoginService" "MapTileURL" "\"\${Const|BaseURL}:\${Const|PublicPort}/\"" + set_ini_key "$file" "LoginService" "SearchURL" "\"\${Const|BaseURL}:\${Const|PublicPort}/searchservice.php\"" + set_ini_key "$file" "LoginService" "DestinationGuide" "\"\${Const|BaseURL}/guide.php\"" + set_ini_key "$file" "LoginService" "AvatarPicker" "\"\${Const|BaseURL}/avatarpicker.php\"" + set_ini_key "$file" "LoginService" "Currency" "\"OS$\"" + + #! Testen ob local möglich ist. + #set_ini_key "$file" "LoginService" "DSTZone" "\"America/Los_Angeles\"" + set_ini_key "$file" "LoginService" "DSTZone" "\"local\"" + + # [GatekeeperService] + uncomment_ini_line "$file" "ExternalName" # [GridInfoService] - set_ini_key "$file" "GridInfoService" "gridname" "$gridname" - set_ini_key "$file" "GridInfoService" "gridnick" "$gridname" - set_ini_key "$file" "GridInfoService" "welcome" "\${Const|BaseURL}/welcome" - set_ini_key "$file" "GridInfoService" "economy" "\${Const|BaseURL}:8008/" - set_ini_key "$file" "GridInfoService" "about" "\${Const|BaseURL}/about" - set_ini_key "$file" "GridInfoService" "register" "\${Const|BaseURL}/register" - set_ini_key "$file" "GridInfoService" "help" "\${Const|BaseURL}/help" - set_ini_key "$file" "GridInfoService" "password" "\${Const|BaseURL}/password" - set_ini_key "$file" "GridInfoService" "GridStatusRSS" "\${Const|BaseURL}:\${Const|PublicPort}/GridStatusRSS" + set_ini_key "$file" "GridInfoService" "gridname" "\"$gridname\"" + set_ini_key "$file" "GridInfoService" "gridnick" "\"$gridname\"" + set_ini_key "$file" "GridInfoService" "welcome" "\"\${Const|BaseURL}/welcomesplashpage.php\"" + # Beim MoneyServer von mir werden keinerlei helpers gebraucht. BuyCurrency und LandBuy ist im MoneyServer enthalten. + set_ini_key "$file" "GridInfoService" "economy" "\"\${Const|BaseURL}:8008/\"" + set_ini_key "$file" "GridInfoService" "about" "\"\${Const|BaseURL}/aboutinformation.php\"" + set_ini_key "$file" "GridInfoService" "register" "\"\${Const|BaseURL}/createavatar.php\"" + set_ini_key "$file" "GridInfoService" "help" "\"\${Const|BaseURL}/help.php\"" + set_ini_key "$file" "GridInfoService" "password" "\"\${Const|BaseURL}/passwordreset.php\"" + set_ini_key "$file" "GridInfoService" "GridStatusRSS" "\"\${Const|BaseURL}/gridstatusrss.php\"" + + # [UserAgentService] + uncomment_ini_line "$file" "LevelOutsideContacts" + uncomment_ini_line "$file" "ShowUserDetailsInHGProfile" + + # [Messaging] + set_ini_key "$file" "Messaging" "MaxOfflineIMs" "250" + + # [Groups] + set_ini_key "$file" "Groups" "MaxAgentGroups" "100" echo -e "${COLOR_OK}Robust.HG.ini konfiguriert.${COLOR_RESET}" blankline } -# Konfiguration von Robust.ini im robust/bin Verzeichnis function robustiniconfig() { local ip="$1" local gridname="$2" local dir="$SCRIPT_DIR/robust/bin" - local file="$dir/Robust.ini" + local source_file="$dir/Robust.ini.example" + local target_file="$dir/Robust.local.ini" - if [[ -f "$file.example" ]]; then - cp "$file.example" "$file" - else - touch "$file" + # Gridname bereinigen + gridname=$(echo "$gridname" | sed -e 's/ä/ae/g' -e 's/ö/oe/g' -e 's/ü/ue/g' -e 's/[-&]/_/g' -e 's/ */_/g' -e 's/__\+/_/g') + + if [[ ! -f "$source_file" ]]; then + echo -e "${COLOR_BAD}FEHLER: Konfigurationsvorlage '$source_file' fehlt!${COLOR_RESET}" >&2 + echo -e "${COLOR_BAD}Das Programm benötigt diese Datei zum Starten.${COLOR_RESET}" >&2 + exit 1 fi + # Vorlage nach Robust.local.ini kopieren + cp "$source_file" "$target_file" || { + echo -e "${COLOR_BAD}FEHLER: Konnte '$target_file' nicht erstellen${COLOR_RESET}" >&2 + exit 1 + } + # [Const] - set_ini_key "$file" "Const" "BaseHostname" "$ip" + set_ini_key "$target_file" "Const" "BaseHostname" "$ip" # [ServiceList] - uncomment_ini_line "$file" "OfflineIMServiceConnector" - uncomment_ini_line "$file" "GroupsServiceConnector" - uncomment_ini_line "$file" "BakedTextureService" - uncomment_ini_line "$file" "UserProfilesServiceConnector" + uncomment_ini_line "$target_file" "OfflineIMServiceConnector" + uncomment_ini_line "$target_file" "GroupsServiceConnector" + uncomment_ini_line "$target_file" "BakedTextureService" + uncomment_ini_line "$target_file" "UserProfilesServiceConnector" - # [DatabaseService] - # ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=*****;Old Guids=true;SslMode=None;" - - # [LoginService] für osWebinterface etc. "\${Const|BaseURL}:\${Const|PublicPort}" - set_ini_key "$file" "LoginService" "Currency" "OS$" - set_ini_key "$file" "LoginService" "WelcomeMessage" "Willkommen im $gridname!" - set_ini_key "$file" "LoginService" "MapTileURL" "\${Const|BaseURL}:\${Const|PublicPort}/" - set_ini_key "$file" "LoginService" "SearchURL" "\${Const|BaseURL}:\${Const|PublicPort}/searchservice.php" - set_ini_key "$file" "LoginService" "DestinationGuide" "\${Const|BaseURL}/guide.php" - set_ini_key "$file" "LoginService" "AvatarPicker" "\${Const|BaseURL}/avatarpicker.php" + # [LoginService] Konfiguration + set_ini_key "$target_file" "LoginService" "Currency" "\"OS$\"" + set_ini_key "$target_file" "LoginService" "WelcomeMessage" "\"Willkommen im $gridname!\"" + set_ini_key "$target_file" "LoginService" "MapTileURL" "\"\${Const|BaseURL}:\${Const|PublicPort}/\"" + set_ini_key "$target_file" "LoginService" "SearchURL" "\"\${Const|BaseURL}/searchservice.php\"" + set_ini_key "$target_file" "LoginService" "DestinationGuide" "\"\${Const|BaseURL}/guide.php\"" + set_ini_key "$target_file" "LoginService" "AvatarPicker" "\"\${Const|BaseURL}/avatarpicker.php\"" # [GridInfoService] - set_ini_key "$file" "GridInfoService" "gridname" "$gridname" - set_ini_key "$file" "GridInfoService" "gridnick" "$gridname" - set_ini_key "$file" "GridInfoService" "welcome" "\${Const|BaseURL}/welcome" - set_ini_key "$file" "GridInfoService" "economy" "\${Const|BaseURL}:8008/" - set_ini_key "$file" "GridInfoService" "about" "\${Const|BaseURL}/about" - set_ini_key "$file" "GridInfoService" "register" "\${Const|BaseURL}/register" - set_ini_key "$file" "GridInfoService" "help" "\${Const|BaseURL}/help" - set_ini_key "$file" "GridInfoService" "password" "\${Const|BaseURL}/password" - set_ini_key "$file" "GridInfoService" "GridStatusRSS" "\${Const|BaseURL}:\${Const|PublicPort}/GridStatusRSS" + set_ini_key "$target_file" "GridInfoService" "gridname" "\"$gridname\"" + set_ini_key "$target_file" "GridInfoService" "gridnick" "\"$gridname\"" + set_ini_key "$target_file" "GridInfoService" "welcome" "\"\${Const|BaseURL}/welcome\"" + set_ini_key "$target_file" "GridInfoService" "economy" "\"\${Const|BaseURL}:8008/\"" + set_ini_key "$target_file" "GridInfoService" "about" "\"\${Const|BaseURL}/about\"" + set_ini_key "$target_file" "GridInfoService" "register" "\"\${Const|BaseURL}/register\"" + set_ini_key "$target_file" "GridInfoService" "help" "\"\${Const|BaseURL}/help\"" + set_ini_key "$target_file" "GridInfoService" "password" "\"\${Const|BaseURL}/password\"" + set_ini_key "$target_file" "GridInfoService" "GridStatusRSS" "\"\${Const|BaseURL}:\${Const|PublicPort}/GridStatusRSS\"" - echo -e "${COLOR_OK}Robust.ini konfiguriert.${COLOR_RESET}" + echo -e "${COLOR_OK}Robust.local.ini erfolgreich konfiguriert.${COLOR_RESET}" blankline } @@ -2070,8 +2341,10 @@ function flotsaminiconfig() { echo -e "${COLOR_FILE}Erstelle $file${COLOR_RESET}" mkdir -p "$config_dir" - # 1. Datei erstellen - touch "$file" + # Datei erstellen + #touch "$welcome_ini" + #touch "$welcome_ini" || echo "" > "$welcome_ini" + touch "$file" 2>/dev/null || echo "" > "$file" # 2. Sektion hinzufügen add_ini_section "$file" "AssetCache" @@ -2098,48 +2371,109 @@ function flotsaminiconfig() { blankline } -# GridCommon.ini function gridcommoniniconfig() { - # 25.04.2025 local ip="$1" local gridname="$2" + # Gridname bereinigen + gridname=$(echo "$gridname" | sed -e 's/ä/ae/g' -e 's/ö/oe/g' -e 's/ü/ue/g' -e 's/[-&]/_/g' -e 's/ */_/g' -e 's/__\+/_/g') + for i in $(seq 1 99); do local config_dir="$SCRIPT_DIR/sim$i/bin/config-include" local file="$config_dir/GridCommon.ini" local example_file="$config_dir/GridCommon.ini.example" # Strikte Prüfung - Abbruch wenn etwas fehlt - if [[ ! -d "$config_dir" ]]; then - # echo -e "${COLOR_BAD}✗ KRITISCH: $config_dir fehlt${COLOR_RESET}" >&2 + if [[ ! -d "$config_dir" ]] || [[ ! -f "$example_file" ]]; then return 1 fi - if [[ ! -f "$example_file" ]]; then - #echo -e "${COLOR_BAD}✗ KRITISCH: $example_file fehlt${COLOR_RESET}" >&2 - return 1 - fi + # Vorlage kopieren + cp "$example_file" "$file" || return 1 - # 1. Vorlage kopieren (muss existieren) - cp "$example_file" "$file" || { - #echo -e "${COLOR_BAD}✗ Kopieren fehlgeschlagen${COLOR_RESET}" >&2 - return 1 - } + # [Const] + add_ini_before_section "$file" "Const" "DatabaseService" + set_ini_key "$file" "Const" "BaseHostname" "\"$ip\"" + set_ini_key "$file" "Const" "BaseURL" "\"http://\${Const|BaseHostname}\"" + set_ini_key "$file" "Const" "PublicPort" "\"8002\"" + set_ini_key "$file" "Const" "PrivatePort" "\"8003\"" - # 2. [Const] Sektion hinzufügen - add_ini_before_section "$file" "Const" "DatabaseService" || return 1 - set_ini_key "$file" "Const" "BaseHostname" "$ip" || return 1 - set_ini_key "$file" "Const" "BaseURL" "http://\${Const|BaseHostname}" || return 1 - set_ini_key "$file" "Const" "PublicPort" "8002" || return 1 - set_ini_key "$file" "Const" "PrivatePort" "8003" || return 1 - set_ini_key "$file" "Const" "PrivURL" "http://\${Const|BaseHostname}" || return 1 + # [DatabaseService] wird in database_set_iniconfig eingetragen. + #! löschen: Include-Storage = "config-include/storage/SQLiteStandalone.ini"; + clear_ini_section "$file" "DatabaseService" + set_ini_key "$file" "DatabaseService" "StorageProvider" "\"OpenSim.Data.MySQL.dll\"" + #!set_ini_key "$file" "DatabaseService" "ConnectionString" "\"Data Source=localhost;Database=Database;User ID=User;Password=Password;Old Guids=true;SslMode=None;\"" - # 3. Datenbank konfigurieren - sed -i '/^[[:space:]]*Include-Storage[[:space:]]*=.*/d' "$file" - set_ini_key "$file" "DatabaseService" "StorageProvider" "OpenSim.Data.MySQL.dll" || return 1 + # [Hypergrid] + set_ini_key "$file" "Hypergrid" "GatekeeperURI" "\"\${Const|BaseURL}:\${Const|PublicPort}\"" + set_ini_key "$file" "Hypergrid" "HomeURI" "\"\${Const|BaseURL}:\${Const|PublicPort}\"" - # 4. Hypergrid - set_ini_key "$file" "Hypergrid" "GatekeeperURI" "\${Const|BaseURL}:\${Const|PublicPort}" || return 1 + # [Modules] + set_ini_key "$file" "Modules" "AssetCaching" "\"FlotsamAssetCache\"" + set_ini_key "$file" "Modules" "Include-FlotsamCache" "\"config-include/FlotsamCache.ini\"" + set_ini_key "$file" "Modules" "AuthorizationServices" "\"RemoteAuthorizationServicesConnector\"" + + # [AssetService] + set_ini_key "$file" "AssetService" "DefaultAssetLoader" "\"OpenSim.Framework.AssetLoader.Filesystem.dll\"" + set_ini_key "$file" "AssetService" "AssetLoaderArgs" "\"assets/AssetSets.xml\"" + set_ini_key "$file" "AssetService" "AssetServerURI" "\"\${Const|PrivURL}:\${Const|PrivatePort}\"" + + # [InventoryService] + set_ini_key "$file" "InventoryService" "InventoryServerURI" "\"\${Const|PrivURL}:\${Const|PrivatePort}\"" + + # [GridInfo] + set_ini_key "$file" "GridInfo" "GridInfoURI" "\"\${Const|BaseURL}:\${Const|PublicPort}\"" + + # [GridService] + set_ini_key "$file" "GridService" "GridServerURI" "\"\${Const|PrivURL}:\${Const|PrivatePort}\"" + set_ini_key "$file" "GridService" "MapTileDirectory" "\"./maptiles\"" + set_ini_key "$file" "GridService" "Gatekeeper" "\"\${Const|BaseURL}:\${Const|PublicPort}\"" + + # [EstateDataStore] + set_ini_key "$file" "EstateService" "EstateServerURI" "\"\${Const|PrivURL}:\${Const|PrivatePort}\"" + + # [Messaging] + set_ini_key "$file" "Messaging" "Gatekeeper" "\"\${Const|BaseURL}:\${Const|PublicPort}\"" + + # [AvatarService] + set_ini_key "$file" "AvatarService" "AvatarServerURI" "\"\${Const|PrivURL}:\${Const|PrivatePort}\"" + + # [AgentPreferencesService] + set_ini_key "$file" "AgentPreferencesService" "AgentPreferencesServerURI" "\"\${Const|PrivURL}:\${Const|PrivatePort}\"" + + # [PresenceService] + set_ini_key "$file" "PresenceService" "PresenceServerURI" "\"\${Const|PrivURL}:\${Const|PrivatePort}\"" + + # [UserAccountService] + set_ini_key "$file" "UserAccountService" "UserAccountServerURI" "\"\${Const|PrivURL}:\${Const|PrivatePort}\"" + + # [GridUserService] + set_ini_key "$file" "GridUserService" "GridUserServerURI" "\"\${Const|PrivURL}:\${Const|PrivatePort}\"" + + # [AuthenticationService] + set_ini_key "$file" "AuthenticationService" "AuthenticationServerURI" "\"\${Const|PrivURL}:\${Const|PrivatePort}\"" + + # [FriendsService] + set_ini_key "$file" "FriendsService" "FriendsServerURI" "\"\${Const|PrivURL}:\${Const|PrivatePort}\"" + + # [HGInventoryAccessModule] + set_ini_key "$file" "HGInventoryAccessModule" "HomeURI" "\"\${Const|BaseURL}:\${Const|PublicPort}\"" + set_ini_key "$file" "HGInventoryAccessModule" "Gatekeeper" "\"\${Const|BaseURL}:\${Const|PublicPort}\"" + + # [HGAssetService] + set_ini_key "$file" "HGAssetService" "HomeURI" "\"\${Const|BaseURL}:\${Const|PublicPort}\"" + + # [HGFriendsModule] + set_ini_key "$file" "HGFriendsModule" "LevelHGFriends" "0" + + # [MapImageService] + set_ini_key "$file" "MapImageService" "MapImageServerURI" "\"\${Const|PrivURL}:\${Const|PrivatePort}\"" + + # [AuthorizationService] + set_ini_key "$file" "AuthorizationService" "AuthorizationServerURI" "\"\${Const|PrivURL}/hgauth.php\"" + + # [MuteListService] + set_ini_key "$file" "MuteListService" "MuteListServerURI" "\"\${Const|PrivURL}:\${Const|PrivatePort}\"" echo -e "${COLOR_OK}✓ sim$i: GridCommon.ini erfolgreich${COLOR_RESET}" done @@ -2148,7 +2482,6 @@ function gridcommoniniconfig() { blankline } -# Erstellt osslEnable.ini komplett neu in allen simX/config-include Verzeichnissen function osslenableiniconfig() { # 25.04.2025 for i in $(seq 1 99); do @@ -2159,13 +2492,12 @@ function osslenableiniconfig() { echo -e "${COLOR_FILE}Erstelle $file${COLOR_RESET}" mkdir -p "$config_dir" - # 1. Datei erstellen - touch "$file" + touch "$file" 2>/dev/null || echo "" > "$file" - # 2. Sektion hinzufügen + # Sektion hinzufügen add_ini_section "$file" "OSSL" - # 3. Alle Key-Value Paare setzen + # Basis-Key-Value Paare set_ini_key "$file" "OSSL" "AllowOSFunctions" "true" set_ini_key "$file" "OSSL" "AllowMODFunctions" "true" set_ini_key "$file" "OSSL" "AllowLightShareFunctions" "true" @@ -2175,17 +2507,123 @@ function osslenableiniconfig() { set_ini_key "$file" "OSSL" "osslParcelOG" "\"PARCEL_GROUP_MEMBER,PARCEL_OWNER,\"" set_ini_key "$file" "OSSL" "osslNPC" "\${OSSL|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER" - # Einzeleinstellungen - set_ini_key "$file" "OSSL" "Allow_osSetDynamicTextureData" "true" - set_ini_key "$file" "OSSL" "Allow_osSetProjectionParams" "true" + # Alle Allow_* Einträge + set_ini_key "$file" "OSSL" "Allow_osGetAgents" "true" + set_ini_key "$file" "OSSL" "Allow_osGetAvatarList" "true" + set_ini_key "$file" "OSSL" "Allow_osGetNPCList" "true" + set_ini_key "$file" "OSSL" "Allow_osNpcGetOwner" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osSetSunParam" "ESTATE_MANAGER,ESTATE_OWNER" set_ini_key "$file" "OSSL" "Allow_osTeleportOwner" "true" - set_ini_key "$file" "OSSL" "Allow_osSetSpeed" "true" - set_ini_key "$file" "OSSL" "Allow_osNpcCreate" "GROUP_UUID,ESTATE_MANAGER" - set_ini_key "$file" "OSSL" "Allow_osAvatarPlayAnimation" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" - set_ini_key "$file" "OSSL" "Allow_osAvatarStopAnimation" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" - set_ini_key "$file" "OSSL" "Allow_osForceDetachFromAvatar" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" - set_ini_key "$file" "OSSL" "Allow_osForceOtherSit" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" - set_ini_key "$file" "OSSL" "Allow_osSetRot" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osSetEstateSunSettings" "ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osSetRegionSunSettings" "ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osEjectFromGroup" "true" + set_ini_key "$file" "OSSL" "Allow_osForceBreakAllLinks" "true" + set_ini_key "$file" "OSSL" "Allow_osForceBreakLink" "true" + set_ini_key "$file" "OSSL" "Allow_osGetWindParam" "true" + set_ini_key "$file" "OSSL" "Allow_osInviteToGroup" "true" + set_ini_key "$file" "OSSL" "Allow_osReplaceString" "true" + set_ini_key "$file" "OSSL" "Allow_osSetDynamicTextureData" "true" + set_ini_key "$file" "OSSL" "Allow_osSetDynamicTextureDataFace" "true" + set_ini_key "$file" "OSSL" "Allow_osSetDynamicTextureDataBlend" "true" + set_ini_key "$file" "OSSL" "Allow_osSetDynamicTextureDataBlendFace" "true" + set_ini_key "$file" "OSSL" "Allow_osSetParcelMediaURL" "true" + set_ini_key "$file" "OSSL" "Allow_osSetParcelMusicURL" "true" + set_ini_key "$file" "OSSL" "Allow_osSetParcelSIPAddress" "true" + set_ini_key "$file" "OSSL" "Allow_osSetPrimFloatOnWater" "true" + set_ini_key "$file" "OSSL" "Allow_osSetWindParam" "true" + set_ini_key "$file" "OSSL" "Allow_osTerrainFlush" "ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osAvatarName2Key" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osFormatString" "true" + set_ini_key "$file" "OSSL" "Allow_osKey2Name" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osListenRegex" "true" + set_ini_key "$file" "OSSL" "Allow_osLoadedCreationDate" "true" + set_ini_key "$file" "OSSL" "Allow_osLoadedCreationID" "true" + set_ini_key "$file" "OSSL" "Allow_osLoadedCreationTime" "true" + set_ini_key "$file" "OSSL" "Allow_osMessageObject" "true" + set_ini_key "$file" "OSSL" "Allow_osRegexIsMatch" "true" + set_ini_key "$file" "OSSL" "Allow_osGetAvatarHomeURI" "true" + set_ini_key "$file" "OSSL" "Allow_osNpcSetProfileAbout" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcSetProfileImage" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osDie" "true" + set_ini_key "$file" "OSSL" "Allow_osDetectedCountry" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osDropAttachment" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osDropAttachmentAt" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osGetAgentCountry" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osGetGridCustom" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osGetGridGatekeeperURI" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osGetGridHomeURI" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osGetGridLoginURI" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osGetGridName" "true" + set_ini_key "$file" "OSSL" "Allow_osGetGridNick" "true" + set_ini_key "$file" "OSSL" "Allow_osGetNumberOfAttachments" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osGetRegionStats" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osGetSimulatorMemory" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osGetSimulatorMemoryKB" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osMessageAttachments" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osReplaceAgentEnvironment" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osSetSpeed" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osSetOwnerSpeed" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osRequestURL" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osRequestSecureURL" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osCauseDamage" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osCauseHealing" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osSetHealth" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osSetHealRate" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osForceAttachToAvatar" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osForceAttachToAvatarFromInventory" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osForceCreateLink" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osForceDropAttachment" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osForceDropAttachmentAt" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osGetLinkPrimitiveParams" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osGetPhysicsEngineType" "true" + set_ini_key "$file" "OSSL" "Allow_osGetRegionMapTexture" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osGetScriptEngineName" "true" + set_ini_key "$file" "OSSL" "Allow_osGetSimulatorVersion" "true" + set_ini_key "$file" "OSSL" "Allow_osMakeNotecard" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osMatchString" "true" + set_ini_key "$file" "OSSL" "Allow_osNpcCreate" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcGetPos" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcGetRot" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcLoadAppearance" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcMoveTo" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcMoveToTarget" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcPlayAnimation" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcRemove" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcSaveAppearance" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcSay" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcSayTo" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcSetRot" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcShout" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcSit" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcStand" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcStopAnimation" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcStopMoveToTarget" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcTouch" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osNpcWhisper" "\${OSSL|osslNPC}" + set_ini_key "$file" "OSSL" "Allow_osOwnerSaveAppearance" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osParcelJoin" "ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osParcelSubdivide" "ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osRegionRestart" "ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osRegionNotice" "ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osSetProjectionParams" "true" + set_ini_key "$file" "OSSL" "Allow_osSetRegionWaterHeight" "ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osSetTerrainHeight" "ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osSetTerrainTexture" "ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osSetTerrainTextureHeight" "ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osAgentSaveAppearance" "ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osAvatarPlayAnimation" "true" + set_ini_key "$file" "OSSL" "Allow_osAvatarStopAnimation" "true" + set_ini_key "$file" "OSSL" "Allow_osForceAttachToOtherAvatarFromInventory" "true" + set_ini_key "$file" "OSSL" "Allow_osForceDetachFromAvatar" "true" + set_ini_key "$file" "OSSL" "Allow_osForceOtherSit" "true" + set_ini_key "$file" "OSSL" "Allow_osGetNotecard" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osGetNotecardLine" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osGetNumberOfNotecardLines" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osSetDynamicTextureURL" "ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osSetDynamicTextureURLBlend" "ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osSetDynamicTextureURLBlendFace" "ESTATE_MANAGER,ESTATE_OWNER" + set_ini_key "$file" "OSSL" "Allow_osSetRot" "true" + set_ini_key "$file" "OSSL" "Allow_osSetParcelDetails" "\${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER" echo -e "${COLOR_OK}→ osslEnable.ini neu geschrieben für sim$i${COLOR_RESET}" fi @@ -2200,6 +2638,9 @@ function standalonecommoniniconfig() { local ip="$1" local gridname="$2" + # Gridname bereinigen + gridname=$(echo "$gridname" | sed -e 's/ä/ae/g' -e 's/ö/oe/g' -e 's/ü/ue/g' -e 's/[-&]/_/g' -e 's/ */_/g' -e 's/__\+/_/g') + local config_dir="$SCRIPT_DIR/opensim/bin/config-include" local file="$config_dir/StandaloneCommon.ini" local example_file="$config_dir/StandaloneCommon.ini.example" @@ -2207,8 +2648,10 @@ function standalonecommoniniconfig() { echo -e "${COLOR_FILE}Erstelle StandaloneCommon.ini in opensim/bin${COLOR_RESET}" mkdir -p "$config_dir" - # 1. Datei erstellen - touch "$file" + # Datei erstellen + #touch "$welcome_ini" + #touch "$welcome_ini" || echo "" > "$welcome_ini" + touch "$file" 2>/dev/null || echo "" > "$file" # 2. Const-Sektion hinzufügen add_ini_section "$file" "Const" @@ -2317,8 +2760,12 @@ function regionsiniconfig() { continue fi - # Config-Datei erstellen - touch "$config_file" + # Datei erstellen + #touch "$welcome_ini" + #touch "$welcome_ini" || echo "" > "$welcome_ini" + touch "$config_file" 2>/dev/null || echo "" > "$config_file" + + # Regionseinstellungen hinzufügen add_ini_section "$config_file" "$region_name" # Regionseinstellungen setzen @@ -2411,7 +2858,10 @@ function iniconfig() { echo "Starte welcomeiniconfig ..." welcomeiniconfig "$ip" "$gridname" echo "Starte database_set_iniconfig ..." - database_set_iniconfig + database_set_iniconfig + # Auswahl des Modus Hypergrid oder Geschlossener Grid. + hypergrid "hypergrid" + #hypergrid "closed" } #?────────────────────────────────────────────────────────────────────────────────────────── @@ -2986,6 +3436,7 @@ case $KOMMANDO in regionsiniconfig) regionsiniconfig ;; # Alle neuen Konfigurationen starten. generatename|generate_name) generate_name ;; cleanconfig) clean_config "$2" ;; + createmasteruser) createmasteruser "$2" "$3" "$4" "$5" "$6" ;; # Experimental # configure_pbr_textures) configure_pbr_textures ;;