1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Downloads
  4. Galerie
    1. Alben
  5. Toolbox
    1. Passwort Generator
    2. Portchecker
  6. Mitglieder
    1. Mitgliedersuche
    2. Benutzer online
    3. Trophäen
    4. Team
Mi: 02 Juli 2025
  • Anmelden oder registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Forum
  • Dateien
  • Seiten
  • Bilder
  • Erweiterte Suche

Schön, dass du den Weg zu NodeZone.net gefunden hast! Aktuell bist du nicht angemeldet und kannst deshalb nur eingeschränkt auf unsere Community zugreifen. Um alle Funktionen freizuschalten, spannende Inhalte zu entdecken und dich aktiv einzubringen, registriere dich jetzt kostenlos oder melde dich mit deinem Account an.

Anmelden oder registrieren
    1. Nodezone.net Community
    2. Mitglieder
    3. Doxylamin

    Beiträge von Doxylamin

    • Platzierte Objekte in der Datenbank speichern

      • Doxylamin
      • 9. September 2015 um 10:46

      Hi,

      ich werde mich mal ein wenig damit ausseinandersetzen. Kann dir aber nicht versprechen, dass das ganze funktioniert.

      Und es wird eine Menge SQL-Querys hervorrufen, da du bei jedem "placen" eines Objekts dieses in der DB speichern müsstest, sowie bei jedem Serverrestart die Objekte aus der Datenbank abrufen müsstest.

    • Bewerte den Track über dir !

      • Doxylamin
      • 31. August 2015 um 15:12
      Zitat von Kamikatze

      10/10

      und nochmal Kontra K ;D


      Externer Inhalt www.youtube.com
      Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
      Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

      100/10


      Externer Inhalt www.youtube.com
      Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
      Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    • Bewerte den Track über dir !

      • Doxylamin
      • 31. August 2015 um 12:08

      9/10 - gefällt mir ganz gut.

      Externer Inhalt www.youtube.com
      Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
      Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    • Bewerte den Track über dir !

      • Doxylamin
      • 27. August 2015 um 17:50

      Ebenfalls 10/10 - Knife Party mal wieder at it's best.

      Spoiler anzeigen

      Externer Inhalt www.youtube.com
      Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
      Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    • Bewerbung zum Moderator

      • Doxylamin
      • 25. August 2015 um 18:53

      Hallo Drachenlord,

      vielen Dank für deine Bewerbung. Ich habe mir diese gründlich durchgelesen und bin zu folgendem Entschluss gekommen:

      Leider können wir deine Bewerbung zum Moderator nicht berücksichtigen, da für den Posten eine gute bis sehr gute Artikulation sowie Rechtschreibung und Grammatik elementar sind.
      Des Weiteren werden (wie hier beschrieben: [WIR SIND VOLL] Derzeit werden keine Moderatoren gesucht) aktuell keine Moderatoren gesucht bzw. eingestellt.

      Bitte überarbeite deine Bewerbung und sende sie erneut ein, sobald wir eine Stellenausschreibung zum Moderator veröffentlicht haben.

      "Fehlerkorrektur"


      Freundliche Grüße
      Die Administration von Native-Gamer.net

    • [Tutorial] Neustarts von Programmen (ohne Extraprogramme)

      • Doxylamin
      • 14. August 2015 um 20:44
      Zitat von Vetox

      Bei mir wird der Prozess zwar geschlossen, jedoch startet dieser mit der Planung nicht neu. Die restart.bat an sich läuft jedoch einwandfrei.

      Hast du in der Restart.bat auch den Programmpfad zum Starten angegeben?

      Gesendet von meinem A0001 mit Tapatalk

    • Rootserver Teamspeak 3

      • Doxylamin
      • 14. August 2015 um 11:01

      Falsches Forum
      #verschoben

    • [Tutorial] FTP-Server unter Debian installieren

      • Doxylamin
      • 9. August 2015 um 20:36

      FTP-Server unter Debian einrichten

      ProFTPD ist ein weit verbreiteter, gut konfigurierbarer FTP Server für UNIX-basierte Betriebssysteme. Dieser Artikel zeigt die Installation und Konfiguration von ProFTPD unter Debian Linux. Im gezeigten Beispiel wird eine TLS Verschlüsselung am FTP Server konfiguriert, um die Kommunikation zwischen FTP Client (z.B. FileZilla) und dem FTP Server ProFTPD zu verschlüsseln. Als Testsystem wurde Debian Wheezy 7.7 verwendet.


      Installation


      ProFTPD Konfiguration: ProFTPD kann entweder per inetd oder standalone gestartet werden.
      ProFTPD ist bereits in den Debian Wheezy Paketquellen enthalten und wird somit bequem mit folgendem Kommando installiert:

      Code
      sudo apt-get install proftpd-basic


      Bei der Installation wird abgefragt ob der FTP-Server als Dienst von inet.d oder eigenständig (standalone) gestartet werden soll. In diesem Beispiel wird die Option standalone gewählt.


      Konfiguration

      Im Folgenden wird die Konfiguration des ProFTPD Servers beschrieben. Das Verzeichnis /etc/proftpd/ enthält grundsätzlich die Konfigurationsdateien von ProFTPD.
      Eigene Konfigurationsdateien werden aber am Besten im Verzeichnis conf.d abgelegt. Bei Paket-Aktualisierungen bleiben die Dateien in diesem Verzeichnis unberührt. Per include Direktive werden alle Dateien im conf.d Verzeichnis in der proftpd.conf eingebunden.
      In diesem Beispiel wird die Datei custom.conf für die Anpassungen des ProFTPD Servers verwendet, damit die Konfiguration wirksam wird:

      Code
      $ sudo vi /etc/proftpd/conf.d/custom.conf
      Code
      # Ftp user doesn't need a valid shell
      <Global>
          RequireValidShell off
      </Global>
      # If desired turn off IPv6
      UseIPv6 off
      # Default directory is ftpusers home
      DefaultRoot ~ ftpuser
      # Limit login to the ftpuser group
      <Limit LOGIN>
          DenyGroup !ftpuser
      </Limit>
      Alles anzeigen

      Anschließend wird die Datei gespeichert und der ProFTPD Server neu gestartet:

      Code
      $ sudo service proftpd restart

      SSL/TLS verschlüsselte FTP-Verbindung mit mod_tls
      Das TLS Modul ermöglicht eine verschlüsselte Verbindung über SSL/TLS zum ProFTPD Server.
      Achtung: Ohne Verschlüsselung überträgt das FTP-Protokoll sowohl Login- als auch normale Daten im Klartext! Der Einsatz von SSL/TLS wird für Produktivumgebungen daher dringend empfohlen.
      Standardmäßig unterstützt ProFTPD das TLS-Modul:

      Code
      $ sudo proftpd -vv | grep tls
      Code
      mod_tls/2.4.3

      Es ist in /etc/proftpd/modules.conf bereits enthalten und automatisch aktiv.
      Zertifikat erstellen
      Das folgende Beispiel verwendet als Zertifikat das selbst-signierte Snakeoil Zertifikat des ssl-cert Packages (siehe Ubuntu default snakeoil SSL-Zertifikat erneuern:(

      Code
      $ sudo apt-get install ssl-cert
      $ sudo make-ssl-cert generate-default-snakeoil --force-overwrite
      $ sudo ls -la /etc/ssl/certs/ssl-cert-snakeoil.pem
      -rw-r--r-- 1 root root 997 Oct 30 08:25 /etc/ssl/certs/ssl-cert-snakeoil.pem
      $ sudo ls -la /etc/ssl/private/ssl-cert-snakeoil.key
      -rw-r----- 1 root ssl-cert 1704 Oct 30 08:25 /etc/ssl/private/ssl-cert-snakeoil.key

      TLS konfigurieren
      Das aktuelle ProFTPD Debian Paket in der Version 1.3.4a-5+deb unterstützt nur TLSv1, jedoch kein v1.1 oder v1.2. Dies ist erst ab der Version 1.3.5 möglich.[1]
      Im conf.d Verzeichnis wird wiederum eine eigene Konfigurationsdatei für SSL/TLS erstellt:

      Code
      $ sudo vi /etc/proftpd/conf.d/tls.conf
      Code
      <IfModule mod_tls.c>
              TLSEngine on
              TLSLog /var/log/proftpd/tls.log
              TLSProtocol TLSv1
              TLSRSACertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
              TLSRSACertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
              TLSVerifyClient off
              TLSRequired on
      </IfModule>

      Anschließend wird ProFTPD neu gestartet.


      FTP Benutzer erstellen

      Für den FTP Zugriff wird ein eigener Benutzer erstellt, ohne gültiger Login Shell und mit dem Homeverzeichnis /var/www/upload:

      Code
      $ sudo adduser ftpuser --shell /bin/false --home /var/www/upload
      ------------------------------------------------------------------------------
      Adding user `ftpuser' ...
      Adding new group `ftpuser' (1001) ...
      Adding new user `ftpuser' (1001) with group `ftpuser' ...
      Creating home directory `/var/www/upload' ...
      Copying files from `/etc/skel' ...
      Enter new UNIX password: 
      Retype new UNIX password: 
      passwd: password updated successfully
      [...]
      Alles anzeigen

      Anonymous Zugang
      Um einen anonymen Lesezugriff zu erlauben wird folgende Datei erstellt:

      Code
      $ sudo vi /etc/proftpd/conf.d/anon.conf
      Code
      <Anonymous ~ftpuser>
              User    ftp
              Group   ftp
              # Users can also login with ftp
              UserAlias       anonymous       ftp
              # All files belong to ftp
              DirFakeUser on ftp
              DirFakeGroup on ftp
              RequireValidShell       off
              MaxClients      10
              <Directory *>
                      <Limit WRITE>
                      DenyAll
                      </Limit>
              </Directory>
      </Anonymous>
      Alles anzeigen

      Damit der Benutzer ftp auf den anonymen FTP-Bereich zugreifen darf, muss er der Gruppe ftpuser hinzugefügt werden:

      Code
      $ sudo adduser ftp ftpuser
      Adding user `ftp' to group `ftpuser' ...
      Adding user ftp to group ftpuser
      Done.
    • [Tutorial] Installation von Minecraft (Debian / Ubuntu)

      • Doxylamin
      • 9. August 2015 um 20:26

      Installation von Minecraft (Debian / Ubuntu)

      Die Installation von Minecraft (Bukkit) gestaltet sich relativ einfach und schnell.

      Zuerst installieren wir Java und Screen:

      Code
      apt-get update
      apt-get install openjdk-7-jre-headless screen


      Danach erstellen wir einen unpriviligierten Nutzer namens minecraft:

      Code
      useradd -m minecraft

      Nun laden wir Craftbukkit direkt via wget als Nutzer minecraft herunter:

      Code
      su minecraft -c wget -O /home/minecraft/craftbukkit.jar http://dl.bukkit.org/latest-rb/craftbukkit.jar

      Abschließend legen wir zum automatisierten Start ein initscript an und starten den Minecraft Server:

      Code
      editor /etc/init.d/minecraft

      Initscript:

      Bash
      #!/bin/bash
      # /etc/init.d/minecraft
      # version 0.3.9 2012-08-13 (YYYY-MM-DD)
      
      
      
      
      ### BEGIN INIT INFO
      # Provides:   minecraft
      # Required-Start: $local_fs $remote_fs
      # Required-Stop:  $local_fs $remote_fs
      # Should-Start:   $network
      # Should-Stop:    $network
      # Default-Start:  2 3 4 5
      # Default-Stop:   0 1 6
      # Short-Description:    Minecraft server
      # Description:    Starts the minecraft server
      ### END INIT INFO
      
      
      
      
      #Settings
      SERVICE='craftbukkit.jar'
      OPTIONS='nogui'
      USERNAME='minecraft'
      WORLD='world'
      MCPATH='/home/minecraft'
      BACKUPPATH='/media/remote.share/minecraft.backup'
      MAXHEAP=$(/usr/bin/free -m |sed -e '1d' |grep Mem: |awk '{print $4}')
      MINHEAP=$(/usr/bin/free -m |sed -e '1d' |grep Mem: |awk '{print $4}')
      HISTORY=1024
      CPU_COUNT=$(cat /proc/cpuinfo |grep -c processor)
      INVOCATION="java -Xmx${MAXHEAP}M -Xms${MINHEAP}M -XX:+UseConcMarkSweepGC \
      -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts \
      -jar $SERVICE $OPTIONS"
      
      
      
      
      ME=`whoami`
      as_user() {
        if [ $ME == $USERNAME ] ; then
          bash -c "$1"
        else
          su - $USERNAME -c "$1"
        fi
      }
      
      
      
      
      mc_start() {
        if  pgrep -u $USERNAME -f $SERVICE > /dev/null
        then
          echo "$SERVICE is already running!"
        else
          echo "Starting $SERVICE..."
          cd $MCPATH
          as_user "cd $MCPATH && screen -h $HISTORY -dmS minecraft $INVOCATION"
          sleep 7
          if pgrep -u $USERNAME -f $SERVICE > /dev/null
          then
            echo "$SERVICE is now running."
          else
            echo "Error! Could not start $SERVICE!"
          fi
        fi
      }
      
      
      
      
      mc_saveoff() {
        if pgrep -u $USERNAME -f $SERVICE > /dev/null
        then
          echo "$SERVICE is running... suspending saves"
          as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
          as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
          as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
          sync
          sleep 10
        else
          echo "$SERVICE is not running. Not suspending saves."
        fi
      }
      
      
      
      
      mc_saveon() {
        if pgrep -u $USERNAME -f $SERVICE > /dev/null
        then
          echo "$SERVICE is running... re-enabling saves"
          as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
          as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
        else
          echo "$SERVICE is not running. Not resuming saves."
        fi
      }
      
      
      
      
      mc_stop() {
        if pgrep -u $USERNAME -f $SERVICE > /dev/null
        then
          echo "Stopping $SERVICE"
          as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
          as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
          sleep 10
          as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
          sleep 7
        else
          echo "$SERVICE was not running."
        fi
        if pgrep -u $USERNAME -f $SERVICE > /dev/null
        then
          echo "Error! $SERVICE could not be stopped."
        else
          echo "$SERVICE is stopped."
        fi
      }
      
      
      
      
      mc_update() {
        if pgrep -u $USERNAME -f $SERVICE > /dev/null
        then
          echo "$SERVICE is running! Will not start update."
        else
          MC_SERVER_URL=http://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar?v=`date | sed "s/[^a-zA-Z0-9]/_/g"`
          as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
          if [ -f $MCPATH/minecraft_server.jar.update ]
          then
            if `diff $MCPATH/$SERVICE $MCPATH/minecraft_server.jar.update >/dev/null`
            then
              echo "You are already running the latest version of $SERVICE."
            else
              as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/$SERVICE"
              echo "Minecraft successfully updated."
            fi
          else
            echo "Minecraft update could not be downloaded."
          fi
        fi
      }
      
      
      
      
      mc_backup() {
         mc_saveoff
      
      
      
      
         NOW=`date "+%Y-%m-%d_%Hh%M"`
         BACKUP_FILE="$BACKUPPATH/${WORLD}_${NOW}.tar"
         echo "Backing up minecraft world..."
         #as_user "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"
         as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"
      
      
      
      
         echo "Backing up $SERVICE"
         as_user "tar -C \"$MCPATH\" -rf \"$BACKUP_FILE\" $SERVICE"
         #as_user "cp \"$MCPATH/$SERVICE\" \"$BACKUPPATH/minecraft_server_${NOW}.jar\""
      
      
      
      
         mc_saveon
      
      
      
      
         echo "Compressing backup..."
         as_user "gzip -f \"$BACKUP_FILE\""
         echo "Done."
      }
      
      
      
      
      mc_command() {
        command="$1";
        if pgrep -u $USERNAME -f $SERVICE > /dev/null
        then
          pre_log_len=`wc -l "$MCPATH/server.log" | awk '{print $1}'`
          echo "$SERVICE is running... executing command"
          as_user "screen -p 0 -S minecraft -X eval 'stuff \"$command\"\015'"
          sleep .1 # assumes that the command will run and print to the log file in less than .1 seconds
          # print output
          tail -n $[`wc -l "$MCPATH/server.log" | awk '{print $1}'`-$pre_log_len] "$MCPATH/server.log"
        fi
      }
      
      
      
      
      #Start-Stop here
      case "$1" in
        start)
          mc_start
          ;;
        stop)
          mc_stop
          ;;
        restart)
          mc_stop
          mc_start
          ;;
        update)
          mc_stop
          mc_backup
          mc_update
          mc_start
          ;;
        backup)
          mc_backup
          ;;
        status)
          if pgrep -u $USERNAME -f $SERVICE > /dev/null
          then
            echo "$SERVICE is running."
          else
            echo "$SERVICE is not running."
          fi
          ;;
        command)
          if [ $# -gt 1 ]; then
            shift
            mc_command "$*"
          else
            echo "Must specify server command (try 'help'?)"
          fi
          ;;
      
      
      
      
        *)
        echo "Usage: mc-control {start|stop|update|backup|status|restart|command \"server command\"}"
        exit 1
        ;;
      esac
      
      
      
      
      exit 0
      Alles anzeigen
      Code
      chmod +x /etc/init.d/minecraft && update-rc.d minecraft defaults
      /etc/init.d/minecraft start
    • [Tutorial] [UNSAFE & OUT OF DATE] Installation von MySQL Server

      • Doxylamin
      • 9. August 2015 um 20:24

      Installation von MySQL Server

      Bei MySQL handelt es sich um die größte Open-Source-Datenbank die es gibt. So ziemlich jedes CMS setzt auf MySQL.
      Zuerst holen wir uns die Pakete:

      Code
      sudo apt-get install mysql-server

      Wir werden gefragt welches Passwort wir vergeben wollen.

      Wunschpasswort eingeben, Enter drücken und dass ganze nochmals wiederholen.
      Und das war es auch schon. Zur Vereinfachung der Befehle empfiehlt sich PHPMyAdmin.

      Code
      sudo apt-get install phpmyadmin


      Passwort eingeben und und der Installation folgen.
      Nun im Browser mit der IP/phpmyadmin (http://xxx.xxx.xxx.xxx/phpmyadmin) auf PHPMyAdmin zugreifen und mit 'root' und dem eben gesetzten Passwort einloggen.

      Herzlichen Glückwunsch, eurer MySQL Server ist nun Einsatzbereit.

    • [Tutorial] Froxlor Webserver-Solution unter Debian installieren [OUT OF DATE]

      • Doxylamin
      • 9. August 2015 um 02:55

      Heute zeige ich Euch, wie ihr ganz fix unter Debian 7 (Codename: Wheezy) Froxlor installiert.
      Als erstes loggt ihr euch als Root-User auf eurem Server ein.

      Tipp: Da viele Anbieter ältere Images zum Installieren verwenden, empfehle ich euch nach dem ersten Login,
      euren Server mit folgendem Command zu Aktualisieren.

      1 apt-get update && apt-get upgrade

      Als nächstes, fügen wir eine neue Sourcelist hinzu.
      Hinweis: Das hinzufügen in /etc/apt/source.list ist veraltet, stattdessen werden nun neue Sources so hinzugefügt:

      1 touch /etc/apt/sources.list.d/froxlor.list

      Nun fügen wir die passende Source in die Froxlor Sourcelist ein.

      1 echo 'deb http://debian.froxlor.org wheezy main' > /etc/apt/sources.list.d/froxlor.list

      Als nächstes fügen wir folgenden Berechtigungsschlüssel für die Froxlor-Pakete zu:

      1 apt-key adv --keyserver pool.sks-keyservers.net --recv-key FD88018B6F2D5390D051343FF6B4A8704F9E9BBC

      Anschließend aktualisieren wir die Paketliste erneut:

      1 apt-get update && apt-get upgrade


      Nun ist unser Server bereit für die Installation von Froxlor.

      1 apt-get install froxlor


      Während der Installation werdet ihr nach einem MySqL Passwort gefragt, dieses sollte sehr sicher sein.
      Merkt euch dieses Passwort oder schreibt es euch auf, dies braucht ihr bei der späteren konfiguration eurer Dienste.
      Tipp: Nutzt einen Passwort Generator so wie diesen hier.

      Zum Schluss müssen alle Server Dienste noch konfiguriert werden:
      Ihr öffnet zunächsten den Browser eures Vertrauens, und gebt die IP oder den Hostname eures Server ein,
      in meinem Fall testserver.global-gamer.net und leitet dann ins verzeichnis /froxlor.
      Da klickt ihr dann auf „Start install“

      Als nächstes checkt Froxlor ob auch alle Dienste richtig installiert sind.

      Wenn dort alles Grün ist, könnt ihr mit die Installation fortfahren.
      Im nächsten schritt möchte Froxlor Zugangsdaten haben.

      Wenn alle eingaben Korrekt sind, klickt ihr auf „Installation fortsetzen“.
      Das nächste Fenster zeigt euch an, das alles Ordnungsgemäß installiert ist, und leitet euch zum Login-Fenster weiter.
      Dort loggt ihr euch ein, und jetzt kommt die eigentliche Aufgabe, das Konfigurieren der Dienste.

      Im Loginbereich von Froxlor seht ihr auf der linken Seite die Abteilung Server, dort klickt ihr auf Konfiguration.
      Dann werdet ihr aufgefordert eure Distribution anzugeben. (In unserem Fall: Debian 7)

      Im Feld drunter, werdet ihr gefragt welchen Dienst ihr Konfigurieren wollt.
      Wir fangen an mit dem Webserver.
      Im diesem Fall gebt ihr beim Daemon Nginx an, da dieser selbst für größere Webseiten sehr stabil ist.
      Wenn ihr diese Eingaben komplett erledigt habt, bekommt ihr im mittleren Bereich des Browsers Anweisungen was ihr machen müsst.
      Dieses macht ihr für alle Daemons und schon seid ihr fertig, mit der Installation von Froxlor auf einem Debian Wheezy Server.

    • [Tutorial] Neustarts von Programmen (ohne Extraprogramme)

      • Doxylamin
      • 9. August 2015 um 02:45

      Einen wunderschönen guten Wunderschönen,

      in diesem Tutorial erkläre ich euch, wie ihr Programme unter Windows automatisch neustarten lassen könnt.

      Schritt 1:
      Erstelle eine Batch-Datei (.bat) mit folgendem Inhalt:

      Code: restart.bat (Ohne Inhalt)
      taskkill /IM [name-des-prozesses].exe /F
      timeout 10
      [Pfad des zu startenden Prozesses]
      Code: restart.bat (Beispiel: ArmA III Server)
      taskkill /IM arma3server.exe /F
      timeout 10
      C:\Arma3\A3Master\arma3server.exe -port= 2302 "-profiles=C:\ArmA3\A3Master" -config=server.cfg -world=empty -bepath=C:\ArmA3\AeMaster\battleye-maxMem=4096 -enableHT -mod=@life_server;@extDB;@asm


      Schritt 2:
      Öffne die Windows Aufgabenplanung (WIN+R, "taskschd.msc"), klicke auf "Neue Aufgabe erstellen" und fülle das Formular wie folgt aus:

      Und schon sind wir fertig.

      Vielen Dank für das Lesen meines Tutorials.

    • [Tutorial] Repair und Revive Animationen [Fix]

      • Doxylamin
      • 9. August 2015 um 02:15
      Zitat von Sheed am 26. Dezember 2014


      Moin,

      hier ein kleines Tutorial, wie ihr die Animation beim reparieren und wiederbeleben fixed, sodass sie auch richtig dargestellt werden.

      Weiterführung vom Thread: Animationen von Repair, Umlackieren, Aufbrechen und Revive flackern....

      Also, um die Revive und Repair Animation zu fixen, geht ihr einfach in eure Altis Life PBO.

      /core/medical/fn_revivePlayer.sqf

      und

      /core/actions/fn_repairTruck.sqf

      Nun ersetzt ihr folgende Zeilen:

      Code
      if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then {
      [[player,"AinvPknlMstpSnonWnonDnon_medic_1"],"life_fnc_animSync",true,false] spawn life_fnc_MP;	
      	player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1";	
      };

      Mit

      Code
      if(animationState player != "AinvPknlMstpsnonWnonDnon_medic_1" ) then {
          player action ["SwitchWeapon", player, player, 100];   //EDIT
          player playMove "AinvPknlMstpsnonWnonDnon_medic_1"; //Durée action 6.5 secondes
          player playActionNow "stop";
          player playMove "AinvPknlMstpsnonWnonDnon_medic_1";
          player playActionNow "stop";
          player playMove "AinvPknlMstpsnonWnonDnon_medic_1";
          };

      Anschließend müsst ihr noch sleep ändern, welches sich direkt darunter befindet.

      Also folgende Zeile:

      Code
      sleep 0.15;

      mit

      Code
      sleep 0.195;

      ersetzen.

      Schon funktioniert wieder alles sauber und flüssig.

      Vielen Dank an Blaze59

      Gruß

      ps.: Ich hab übrigens versucht, das ganze mit anderen Animationen zu versehen, das wollte bei mir allerdings nicht klappen.
      Ich habe folgende Animationen benutzt:

      Acts_carFixingWheel // Animation zum reparieren - Dauer = 20 Sekunden lt. Editor

      Und hier verschiedene Animationen zum wiederbeleben:

      PercMstpSlowWrlfDnon_TreatingWounded
      Acts_TreatingWounded01
      Acts_TreatingWounded02
      Acts_TreatingWounded03
      Acts_TreatingWounded04
      Acts_TreatingWounded05
      Acts_TreatingWounded06
      TreatingWounded_PercMstpSlowWrlfDnon

      Will allerdings nicht funktionieren. Wer da noch Ideen hat, kann gerne hier schreiben.

      Gruß

      Alles anzeigen
    • [Tutorial] Permanentes Impounden

      • Doxylamin
      • 9. August 2015 um 02:10
      Zitat von Zaros (10. September 2014)


      Guten Tag ^^

      Ich hau euch heute ein kleines Tutorial für das Permanente Impounden von Fahrzeuge raus :) (Bis zum nächsten Restart).

      Erstellt folgende Datei:

      \core\actions\fn_impoundPermAction.sqf

      Spoiler anzeigen
      Code
      /*
      File: fn_impoundAction.sqf
      Author: Bryan "Tonic" Boardwine
      
      
      
      
      Description:
      Impounds the vehicle
      */
      private["_vehicle","_type","_time","_price","_vehicleData","_upp","_ui","_progress","_pgText","_cP"];
      _vehicle = cursorTarget;
      if(!((_vehicle isKindOf "Car") || (_vehicle isKindOf "Air") || (_vehicle isKindOf "Ship"))) exitWith {};
      if(player distance cursorTarget > 10) exitWith {};
      if((_vehicle isKindOf "Car") || (_vehicle isKindOf "Air") || (_vehicle isKindOf "Ship")) then
      {
      _vehicleData = _vehicle getVariable["vehicle_info_owners",[]];
      if(count _vehicleData == 0) exitWith {deleteVehicle _vehicle}; //Bad vehicle.
      _vehicleName = getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName");
      [[0,format[localize "STR_NOTF_BeingImpounded",(_vehicleData select 0) select 1,_vehicleName]],"life_fnc_broadcast",true,false] spawn life_fnc_MP;
      life_action_inUse = true;
      
      
      
      
      _upp = localize "STR_NOTF_Impounding";
      //Setup our progress bar.
      disableSerialization;
      5 cutRsc ["life_progress","PLAIN"];
      _ui = uiNameSpace getVariable "life_progress";
      _progress = _ui displayCtrl 38201;
      _pgText = _ui displayCtrl 38202;
      _pgText ctrlSetText format["%2 (1%1)...","%",_upp];
      _progress progressSetPosition 0.01;
      _cP = 0.01;
      while{true} do
      {
      sleep 0.09;
      _cP = _cP + 0.01;
      _progress progressSetPosition _cP;
      _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp];
      if(_cP >= 1) exitWith {};
      if(player distance _vehicle > 10) exitWith {};
      if(!alive player) exitWith {};
      };
      5 cutText ["","PLAIN"];
      
      
      
      
      if(player distance _vehicle > 10) exitWith {hint localize "STR_NOTF_ImpoundingCancelled"; life_action_inUse = false;};
      if(!alive player) exitWith {life_action_inUse = false;};
      //_time = _vehicle getVariable "time";
      //if(isNil {_time}) exitWith {deleteVehicle _vehicle; hint "This vehicle was hacked in"};
      //if((time - _time) < 120) exitWith {hint "This is a freshly spawned vehicle, you have no right impounding it."};
      if((count crew _vehicle) == 0) then
      {
      [_vehicle] call life_fnc_clearVehicleAmmo;
      if(!((_vehicle isKindOf "Car") || (_vehicle isKindOf "Air") || (_vehicle isKindOf "Ship"))) exitWith {life_action_inUse = false;};
      _type = getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName");
      switch (true) do
      {
      case (_vehicle isKindOf "Car"): {_price = (call life_impound_car);};
      case (_vehicle isKindOf "Ship"): {_price = (call life_impound_boat);};
      case (_vehicle isKindOf "Air"): {_price = (call life_impound_air);};
      };
      
      
      
      
      life_impound_inuse = true;
      [[_vehicle,true,player,true],"TON_fnc_vehicleStore",false,false] spawn life_fnc_MP;
      waitUntil {!life_impound_inuse};
      hint format[localize "STR_NOTF_Impounded",_type,_price];
      [[0,format[localize "STR_NOTF_HasImpounded",player getVariable["realname",name player],(_vehicleData select 0) select 1,_vehicleName]],"life_fnc_broadcast",true,false] spawn life_fnc_MP;
      life_atmcash = life_atmcash + _price;
      }
      else
      {
      hint localize "STR_NOTF_ImpoundingCancelled";
      };
      };
      life_action_inUse = false;
      Alles anzeigen

      Danach wechselt ihr in \core\vehicle\fn_vInteractionMenu.sqf

      Hier müssen wir erstmal den Button definieren!

      Spoiler anzeigen
      Code
      #define Btn7 37456

      und nicht vergessen in die private zu adden

      Spoiler anzeigen
      Code
      private["_display","_curTarget","_Btn1","_Btn2","_Btn3","_Btn4","_Btn5","_Btn6","_Btn7"];

      Danach noch ca. Zeile 32-22 folgenden Code hinzufügen:

      Spoiler anzeigen
      Code
      _Btn7 = _display displayCtrl Btn7;

      Jetzt setzen wir die Funktion, welche ausgeführt werden soll, wenn man Button 7 auswählt. Fügt dazu folgenden Code im Playerside-Check für West/east ein

      Spoiler anzeigen
      Code
      _Btn7 ctrlSetText localize "STR_vInAct_Impound_Perm";
      _Btn7 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_impoundPermAction;";


      Das sollte dann so aussehen (immernoch fn_vInteractoinMenu.sqf):

      Spoiler anzeigen
      Code
      if((playerSide in [west, east])) then {
      _Btn2 ctrlSetText localize "STR_vInAct_Registration";
      _Btn2 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_searchVehAction;";
      
      
      
      
      _Btn3 ctrlSetText localize "STR_vInAct_SearchVehicle";
      _Btn3 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_vehInvSearch;";
      
      
      
      
      _Btn4 ctrlSetText localize "STR_vInAct_PullOut";
      _Btn4 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_pulloutAction;";
      if(count crew _curTarget == 0) then {_Btn4 ctrlEnable false;};
      
      
      
      
      _Btn5 ctrlSetText localize "STR_vInAct_Impound";
      _Btn5 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_impoundAction;";
      
      
      
      
      if(_curTarget isKindOf "Ship") then {
      _Btn6 ctrlSetText localize "STR_vInAct_PushBoat";
      _Btn6 buttonSetAction "[] spawn life_fnc_pushObject; closeDialog 0;";
      if(_curTarget isKindOf "Ship" && {local _curTarget} && {count crew _curTarget == 0}) then { _Btn6 ctrlEnable true;} else {_Btn6 ctrlEnable false};
      } else {
      if(typeOf (_curTarget) in ["C_Kart_01_Blu_F","C_Kart_01_Red_F","C_Kart_01_Fuel_F","C_Kart_01_Vrana_F"]) then {
      _Btn6 ctrlSetText localize "STR_vInAct_GetInKart";
      _Btn6 buttonSetAction "player moveInDriver life_vInact_curTarget; closeDialog 0;";
      if(count crew _curTarget == 0 && {canMove _curTarget} && {locked _curTarget == 0}) then {_Btn6 ctrlEnable true;} else {_Btn6 ctrlEnable false};
      } else {
      _Btn6 ctrlSetText localize "STR_vInAct_Unflip";
      _Btn6 buttonSetAction "life_vInact_curTarget setPos [getPos life_vInact_curTarget select 0, getPos life_vInact_curTarget select 1, (getPos life_vInact_curTarget select 2)+0.5]; closeDialog 0;";
      if(count crew _curTarget == 0 && {canMove _curTarget}) then { _Btn6 ctrlEnable false;} else {_Btn6 ctrlEnable true;};
      };
      };
      _Btn7 ctrlSetText localize "STR_vInAct_Impound_Perm";
      _Btn7 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_impoundPermAction;";
      } else {
      Alles anzeigen

      Jetzt legen wir die Position des Buttons wie folgt fest: \dialog\pInteraction.h

      Ganz unten am Ende der Datei wird bei euch Button 6 sein. Nach diesem fügt ihr folgenden Code ein:

      ACHTUNG! KLAMMERN BEACHTEN!

      Spoiler anzeigen
      Code
      class ButtonSeven : life_RscButtonMenu
      {
      idc = 37456;
      colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5};
      text = "";
      sizeEx = 0.025;
      x = BGX + 0.03;
      y = BGY + 0.37;
      w = 0.24;
      h = 0.038;
      };
      Alles anzeigen

      Als nächstes fügen wir die Funktion in der Functions.h unter class Actions hinzu:

      Spoiler anzeigen
      Code
      class impoundPermAction {};

      Nun noch den Button-Text in die Stringtable im Package "Vehicle_Interaction"

      Spoiler anzeigen
      Code
      <Key ID="STR_vInAct_Impound_Perm">
      <Original>Impound Vehicle</Original>
      <English>Impound Vehicle</English>
      <German>Permanent Beschlagnahmen</German>
      <French>Mise en fourrière</French>
      <Italian>Sequestra Veicolo</Italian>
      <Portuguese>Apreender Veículo</Portuguese>
      </Key>

      Folgendes File solltet ihr am besten komplett übernehmen:
      life_server\Functions\Systems\fn_vehicleStore.sqf

      Spoiler anzeigen
      Code
      /*
      File: fn_vehicleStore.sqf
      Author: Bryan "Tonic" Boardwine
      
      
      
      
      Description:
      Stores the vehicle in the 'Garage'
      */
      private["_vehicle","_impound","_vInfo","_vInfo","_plate","_uid","_query","_sql","_unit","_impound_perm"];
      _vehicle = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param;
      _impound = [_this,1,false,[true]] call BIS_fnc_param;
      _unit = [_this,2,ObjNull,[ObjNull]] call BIS_fnc_param;
      _impound_perm = [_this,3,false,[true]] call BIS_fnc_param;
      if(isNull _vehicle OR isNull _unit) exitWith {life_impound_inuse = false; (owner _unit) publicVariableClient "life_impound_inuse";life_garage_store = false;(owner _unit) publicVariableClient "life_garage_store";}; //Bad data passed.
      
      
      
      
      _vInfo = _vehicle getVariable["dbInfo",[]];
      if(count _vInfo > 0) then
      {
      _plate = _vInfo select 1;
      _uid = _vInfo select 0;
      };
      
      
      
      
      if(_impound) then
      {
      if(count _vInfo == 0) then 
      {
      life_impound_inuse = false;
      (owner _unit) publicVariableClient "life_impound_inuse";
      if(!isNil "_vehicle" && {!isNull _vehicle}) then {
      deleteVehicle _vehicle;
      };
      } 
      else
      {
      
      
      
      
      if(_impound_perm) then {
      diag_log "Impound Permanent";
      _query = format["UPDATE vehicles SET active='2' WHERE pid='%1' AND plate='%2'",_uid,_plate];
      
      
      
      
      } else {
      diag_log "Impound to Garage";
      _query = format["UPDATE vehicles SET active='0' WHERE pid='%1' AND plate='%2'",_uid,_plate];
      };
      
      
      
      
      
      
      
      waitUntil {!DB_Async_Active};
      _thread = [_query,1] call DB_fnc_asyncCall;
      //waitUntil {scriptDone _thread};
      if(!isNil "_vehicle" && {!isNull _vehicle}) then {
      deleteVehicle _vehicle;
      };
      life_impound_inuse = false;
      (owner _unit) publicVariableClient "life_impound_inuse";
      };
      }
      else
      {
      if(count _vInfo == 0) exitWith
      {
      [[1,(localize "STR_Garage_Store_NotPersistent")],"life_fnc_broadcast",(owner _unit),false] spawn life_fnc_MP;
      life_garage_store = false;
      (owner _unit) publicVariableClient "life_garage_store";
      };
      
      
      
      
      if(_uid != getPlayerUID _unit) exitWith
      {
      [[1,(localize "STR_Garage_Store_NoOwnership")],"life_fnc_broadcast",(owner _unit),false] spawn life_fnc_MP;
      life_garage_store = false;
      (owner _unit) publicVariableClient "life_garage_store";
      };
      
      
      
      
      
      
      
      diag_log "STORING VEHICLE IN GARAGE";
      _query = format["UPDATE vehicles SET active='0' WHERE pid='%1' AND plate='%2'",_uid,_plate];
      waitUntil {!DB_Async_Active};
      _thread = [_query,1] call DB_fnc_asyncCall;
      //waitUntil {scriptDone _thread};
      if(!isNil "_vehicle" && {!isNull _vehicle}) then {
      deleteVehicle _vehicle;
      };
      life_garage_store = false;
      (owner _unit) publicVariableClient "life_garage_store";
      [[1,(localize "STR_Garage_Store_Success")],"life_fnc_broadcast",(owner _unit),false] spawn life_fnc_MP;
      };
      Alles anzeigen

      Nun müsst ihr noch in eurem Datenbank-Programm folgenden code zur Funktion "resetLifeVehicle" hinzufügen:

      SQL
      UPDATE vehicles SET `active`= 0 WHERE `active`= 2;

      WENN IHR FAHRZEUGE PERMANENT LÖSCHEN WOLLT ÄNDERT DEN LETZTEN CODE WIE FOLGT AB!

      SQL
      UPDATE vehicles SET `alive`= 0 WHERE `active`= 2

      Ich glaube das wars... falls ihr Fehler findet bitte posten!

      Alles anzeigen
    • [Tutorial - 3.1.4.8] Rucksack Inventarplatz erhöhen

      • Doxylamin
      • 9. August 2015 um 02:08

      Rework des alten Tutorials von @Doxylamin

      Vorab:

      Hiermit untersage ich wie immer die Verbreitung dieser Daten und die des von mir verfassten Tutorials in anderen Foren ohne vorher mein Einverständnis dazu einzuholen.


      Schritt 1:

      öffnet die Datei core\init_survival.sqf in eurer Mission und sucht nach folgendem:

      C: init_survival.sqf
      { private["_bp","_load","_cfg"]; while{true} do { waitUntil {backpack player != ""}; _bp = backpack player; _cfg = getNumber(configFile >> "CfgVehicles" >> (backpack player) >> "maximumload"); _load = round(_cfg / 8); life_maxWeight = life_maxWeightT + _load; waitUntil {backpack player != _bp}; if(backpack player == "") then  { life_maxWeight = life_maxWeightT; }; };};

      Schritt 2:

      dort sucht ihr nach der Zeile _load = round(_cfg / 8); und fügt darunter folgendes ein:

      C: init_survival.sqf
      if (backpack player == "Rucksack ID") then { _load = Inventargrösse; };


      Dies sollte dann zum Beispiel so aussehen:

      [color=#000000]

      C: init_survival.sqf
      { private["_bp","_load","_cfg"]; while{true} do { waitUntil {backpack player != ""}; _bp = backpack player; _cfg = getNumber(configFile >> "CfgVehicles" >> (backpack player) >> "maximumload"); _load = round(_cfg / 8); if (backpack player == "B_AssaultPack_cbr") then { _load = 35; }; if (backpack player == "B_Kitbag_mcamo") then { _load = 45; }; if (backpack player == "B_TacticalPack_oli") then { _load = 50; }; if (backpack player == "B_FieldPack_ocamo") then { _load = 50; }; if (backpack player == "B_Bergen_sgg") then { _load = 60; }; if (backpack player == "B_Kitbag_cbr") then { _load = 65; }; if (backpack player == "B_Carryall_oli") then { _load = 80; }; if (backpack player == "B_Carryall_khk") then { _load = 80; }; life_maxWeight = life_maxWeightT + _load; waitUntil {backpack player != _bp}; if(backpack player == "") then  { life_maxWeight = life_maxWeightT; }; };};


      [color=#000000]Ob das so auch in den neuen Versionen funktioniert kann ich nicht sagen. Vielleicht erklärt sich jemand bereit dies zu testen.
      Das war es auch schon wenn Ihr Fragen hierzu habt, seid nicht schüchtern und klatscht Sie in die Kommentare

    • [Tutorial] SQL Smartphone - 3.1.4.8 extDB

      • Doxylamin
      • 9. August 2015 um 02:00

      Das Urheberrecht dieses Beitrags liegt bei McCarrett, am 25. Oktober 2014

      Zitat von McCarrett

      Guten Tag,

      ich zeige euch heute, da ich gesehen habe, dass einige beim SQL Smartphone einige Probleme haben,
      die Lösung des Problems an. Hier ist einfach nur das Tutorial von @Noldy überarbeitet.

      Bitte vorher ein Backup machen!


      1. Öffnet eure configuration.sqf und fügt folgendes unter Life Variables ein:

      Code
      life_smartphoneTarget = ObjNull;

      2. Geht in eure Functions.h und fügt folgendes unter class Player_Menu ein:

      Code
      class smartphone {};
      class newMsg {};
      class showMsg {};

      3. Geht in euer Ordner /dialog/player_inv.hpp und sucht nach class ButtonCell. Dort findest du ein onButtonClick Event mit einem Code dahinter. Ersetze diesen mit folgendem:

      Code
      onButtonClick = "createDialog ""Life_my_smartphone"";";

      4. Öffnet euer Ordner /dialog/MasterHandler.h und fügt folgendes dazu:

      Code
      #include "smartphone.hpp"

      5. Öffnet eure /dialog/common.hpp und sucht nach der class Life_RscListNBox und komentiert dieses aus in den {} Das ganze sieht so aus:

      Code
      class Life_RscListNBox
      {
          /*style = 16;
          type = 102;
          shadow = 0;
          font = "PuristaMedium";
          sizeEx = "(            (            (            ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
          color[] = {0.95,0.95,0.95,1};
          colorText[] = {1,1,1,1.0};
          colorDisabled[] = {1,1,1,0.25};
          colorScrollbar[] = {0.95,0.95,0.95,1};
          colorSelect[] = {0,0,0,1};
          colorSelect2[] = {0,0,0,1};
          colorSelectBackground[] = {0.8,0.8,0.8,1};
          colorSelectBackground2[] = {1,1,1,0.5};
          soundSelect[] = {"",0.1,1};
          soundExpand[] = {"",0.1,1};
          soundCollapse[] = {"",0.1,1};
          period = 1.2;
          maxHistoryDelay = 0.5;
          autoScrollSpeed = -1;
          autoScrollDelay = 5;
          autoScrollRewind = 0;
          class ListScrollBar: Life_RscScrollBar{};
          class ScrollBar: Life_RscScrollBar{};*/
      Alles anzeigen


      Direkt darunter fügt nun folgendes ein:

      Code
      style = 16;
          type = 102;
          shadow = 0;
          font = "PuristaMedium";
          sizeEx = "(            (            (            ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
          color[] = {0.95,0.95,0.95,1};
          colorText[] = {1,1,1,1.0};
          colorDisabled[] = {1,1,1,0.25};
          colorScrollbar[] = {0.95,0.95,0.95,1};
          colorSelect[] = {0,0,0,1};
          colorSelect2[] = {0,0,0,1};
          colorSelectBackground[] = {0.8,0.8,0.8,1};
          colorSelectBackground2[] = {1,1,1,0.5};
          soundSelect[] = {"",0.1,1};
          soundExpand[] = {"",0.1,1};
          soundCollapse[] = {"",0.1,1};
          period = 1.2;
          maxHistoryDelay = 0.5;
          autoScrollSpeed = -1;
          autoScrollDelay = 5;
          autoScrollRewind = 0;
          rowHeight = 0.04;
          drawSideArrows = 0;
          idcLeft = -1;
          idcRight = -1;
          class ListScrollBar: Life_RscScrollBar{};
          class ScrollBar: Life_RscScrollBar{};
      Alles anzeigen


      Das ganze müsste jetzt so aussehen:

      Code
      class Life_RscListNBox
      {
          /*style = 16;
          type = 102;
          shadow = 0;
          font = "PuristaMedium";
          sizeEx = "(            (            (            ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
          color[] = {0.95,0.95,0.95,1};
          colorText[] = {1,1,1,1.0};
          colorDisabled[] = {1,1,1,0.25};
          colorScrollbar[] = {0.95,0.95,0.95,1};
          colorSelect[] = {0,0,0,1};
          colorSelect2[] = {0,0,0,1};
          colorSelectBackground[] = {0.8,0.8,0.8,1};
          colorSelectBackground2[] = {1,1,1,0.5};
          soundSelect[] = {"",0.1,1};
          soundExpand[] = {"",0.1,1};
          soundCollapse[] = {"",0.1,1};
          period = 1.2;
          maxHistoryDelay = 0.5;
          autoScrollSpeed = -1;
          autoScrollDelay = 5;
          autoScrollRewind = 0;
          class ListScrollBar: Life_RscScrollBar{};
          class ScrollBar: Life_RscScrollBar{};*/
          style = 16;
          type = 102;
          shadow = 0;
          font = "PuristaMedium";
          sizeEx = "(            (            (            ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
          color[] = {0.95,0.95,0.95,1};
          colorText[] = {1,1,1,1.0};
          colorDisabled[] = {1,1,1,0.25};
          colorScrollbar[] = {0.95,0.95,0.95,1};
          colorSelect[] = {0,0,0,1};
          colorSelect2[] = {0,0,0,1};
          colorSelectBackground[] = {0.8,0.8,0.8,1};
          colorSelectBackground2[] = {1,1,1,0.5};
          soundSelect[] = {"",0.1,1};
          soundExpand[] = {"",0.1,1};
          soundCollapse[] = {"",0.1,1};
          period = 1.2;
          maxHistoryDelay = 0.5;
          autoScrollSpeed = -1;
          autoScrollDelay = 5;
          autoScrollRewind = 0;
          rowHeight = 0.04;
          drawSideArrows = 0;
          idcLeft = -1;
          idcRight = -1;
          class ListScrollBar: Life_RscScrollBar{};
          class ScrollBar: Life_RscScrollBar{};
      };
      Alles anzeigen

      6. Datei im Anhang herunterladen und im Ordner dialog einfügen.

      7. Geht in euer stringtable.xml und fügt folgendes dazu in einer neuen Package:

      Code
      <Package name="Smartphone">
              <Key ID="STR_PM_Smartphone">
                  <Original>Smartphone</Original>
              </Key>
              <Key ID="STR_SMARTPHONE_TITLE">
                  <Original>Smartphone Menu</Original>
              </Key>
              <Key ID="STR_SMARTPHONE_PLAYERLISTTITLE">
                  <Original>Playerlist</Original>
              </Key>
              <Key ID="STR_SMARTPHONE_MESSAGETITLE">
                  <Original>Nachrichten  | VON | WANN</Original>
              </Key>
              <Key ID="STR_SMARTPHONE_RANDOMTITLE">
                  <Original>Nachricht zum lesen auswählen</Original>
              </Key>
              <Key ID="STR_Global_Close">
                  <Original>Close</Original>
              </Key>
              <Key ID="STR_SMARTPHONE_SCHREIBEN">
                  <Original>Schreiben</Original>
              </Key>
              <Key ID="STR_SMARTPHONE_NOTRUF">
                  <Original>Notruf</Original>
              </Key>
              <Key ID="STR_SMARTPHONE_Absenden">
                  <Original>Absenden</Original>
              </Key>
              <Key ID="STR_SMARTPHONE_NACHRICHTTITLE">
                  <Original>Nachricht an:</Original>
              </Key>
              <Key ID="STR_SMARTPHONE_Notruftitle">
                  <Original>NOTRUFE | Ausnutzung führt zum Ban!</Original>
              </Key>
          </Package>
      Alles anzeigen

      8. Datei im Anhang herunterladen, und folgende 3 Dateien in den /core/pmenu Ordner machen:

      fn_newMsg.sqf
      fn_showMsg.sqf
      fn_smartphone.sqf


      Das war es an der MPMissions. Nun geht es ab zu dem @life_server.

      9. Öffnet eure config.cpp und sucht nach class TON_system und fügt folgendes darunter:

      Code
      class Smartphone
              {
                  file = "\life_server\Functions\Smartphone";
                  class handleMessages {};
                  class msgRequest {};
                  class cleanupMessages {};
              };


      Das ganze sollte nun so aussehen:

      Code
      class TON_System
          {
              tag = "TON";
              class Systems
              {
                  file = "\life_server\Functions\Systems";
                  class managesc {};
                  class cleanup {};
                  class huntingZone {};
                  class getID {};
                  class vehicleCreate {};
                  class vehicleDead {};
                  class spawnVehicle {};
                  class getVehicles {};
                  class vehicleStore {};
                  class vehicleDelete {};
                  class spikeStrip {};
                  class logIt {};
                  class federalUpdate {};
                  class chopShopSell {};
                  class clientDisconnect {};
                  class cleanupRequest {};
                  class setObjVar {};
                  class keyManagement {};
                  class robShops {}; 
                  class shopState {};
              };
      
              class Housing
              {
                  file = "\life_server\Functions\Housing";
                  class addHouse {};
                  class fetchPlayerHouses {};
                  class initHouses {};
                  class sellHouse {};
                  class updateHouseContainers {};
                  class updateHouseTrunk {};
                  class houseCleanup {};
              };
      
              class Gangs
              {
                  file = "\life_server\Functions\Gangs";
                  class insertGang {};
                  class queryPlayerGang {};
                  class removeGang {};
                  class updateGang {};
              };
      
              class Smartphone
              {
                  file = "\life_server\Functions\Smartphone";
                  class handleMessages {};
                  class msgRequest {};
                  class cleanupMessages {};
              };
          };
      };
      Alles anzeigen

      10. Ebenfalls in der Datei vorhanden. Der Ordner Smartphone einfach in den functions Ordner ziehen.

      11. Das letzte was ihr jetzt noch machen müsst, ist folgendes in eure Datenbank einzuspielen:

      Code
      CREATE TABLE IF NOT EXISTS `messages` (
        `uid` int(12) NOT NULL AUTO_INCREMENT,
        `fromID` varchar(50) NOT NULL,
        `toID` varchar(50) NOT NULL,
        `message` text,
        `fromName` varchar(32) NOT NULL,
        `toName` varchar(32) NOT NULL,
        `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
        PRIMARY KEY (`uid`)
      ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

      Mit diesem Tutorial sollte es einwandfrei von Version 3.1.4.5 - 3.1.4.8 funktionieren.
      Der ADAC Button und der Button zum löschen aller empfangener Daten ist auch schon vorhanden.


      Ich hoffe es stört @Noldy nicht, dass ich sein Tutorial einfach nur geklaut und überschrieben habe.


      Dateien zum downloaden: http://www.file-upload.net/download-9936388/Smartphone.rar.html


      PS.: @Maiksdl hat mir dabei geholfen, dass Smartphone funktionstüchtig zu machen auf Version 3.1.4.8

      Alles anzeigen
    • [Tutorial] SpyGlass entfernen

      • Doxylamin
      • 9. August 2015 um 01:54

      Hallo zusammen!

      Da immer mehr Leute danach fragen wie sie am besten SpyGlass restlos aus ihrer Missionsdatei entfernen könne, erklär ich euch das ganze hier einmal kurz.


      Schritt 1:

      Lösche deinen SpyGlass Ordner im Hauptverzeichnis deiner Missionsdatei.


      Schritt 2:

      Öffne die Datei "Functions.h" und entferne folgenden Eintrag aus der Datei:

      Code
      class SpyGlass
      {
          tag = "SPY";
          class Functions
          {
              file = "SpyGlass";
              class cmdMenuCheck{};
              class cookieJar{};
              class menuCheck{};
              class notifyAdmins{};
              class observe{};
              class payLoad{};
              class variableCheck{};
              class initSpy {};
          };
      };
      Alles anzeigen

      Schritt 3:


      Anschließend öffnest du die Datei "description.ext" und entfernst dort folgenden Eintrag:

      Code
      class SpyGlass
          {
              title = "The SpyGlass sees you";
              subTitle = "You were detected by the SpyGlass";
              description = "You were detected for cheating and have been reported to the server. Enjoy your day.";
              pictureBackground = "";
              picture = "";
              pictureColor[] = {0,0.3,0.6,1};
          };

      Schritt 4:

      Lösche die Datei "clientValidator.sqf", welche sich in deinem Core Ordner befindet. Danach öffne die Datei "initPlayerLocal.sqf" im Hauptverzeichnis deiner Missionsdatei und entferne dort folgenden Eintrag:


      Code
      [] execVM "SpyGlass\fn_initSpy.sqf";

      Schritt 5:

      Öffne die Datei "fn_requestReceived.sqf" im Verzeichnis core\session\ und entferne dort diesen Eintrag:

      Code
      //Lets make sure some vars are not set before hand.. If they are get rid of them, hopefully the engine purges past variables but meh who cares.
      if(!isServer && (!isNil "life_adminlevel" OR !isNil "life_coplevel" OR !isNil "life_donator")) exitWith {
          [[profileName,getPlayerUID player,"VariablesAlreadySet"],"SPY_fnc_cookieJar",false,false] spawn life_fnc_MP;
          [[profileName,format["Variables set before client initialization...\nlife_adminlevel: %1\nlife_coplevel: %2\nlife_donator: %3",life_adminlevel,life_coplevel,life_donator]],"SPY_fnc_notifyAdmins",true,false] spawn life_fnc_MP;
          sleep 0.9;
          ["SpyGlass",false,false] execVM "\a3\functions_f\Misc\fn_endMission.sqf";
      };

      Schritt 6:

      Zum Schluss öffnest du die Datei fn_MPexec.sqf" im Verzeichnis core\functions\network\ und entfernst dort auch einen Eintrag:


      Code
      if(_callerUID != "__SERVER__" && _callerName != "__SERVER__" && toLower(_functionName) in ["spy_fnc_cookiejar","spy_fnc_notifyadmins"]) then {
          //Check if the sender & reported UID match, if they don't exit.
          if(toLower(_functionName) == "spy_fnc_cookiejar") exitWith {
              private["_reportUID"];
              _reportUID = _params select 1;
              if(_reportUID != _callerUID) exitWith {
                  if(isServer && _mode == 0) then {
                      [_callerName,_callerUID,"false_reports_to_spyglass"] call SPY_fnc_cookieJar;
                      [[_callerName,"False reporting to SpyGlass (cheater)"],"SPY_fnc_notifyAdmins",true,false] spawn life_fnc_MP;
                  };
                  _exitScope = true;
              };
          };
          //So it's not the cookiejar, let's check the admin notification and make sure the report matches.
          private["_reportName"];
          _reportName = _params select 0;
          if(_callerName != _reportName) exitWith {
              if(isServer && _mode == 0) then {
                  [_callerName,_callerUID,"false_reports_to_spyglass"] call SPY_fnc_cookieJar;
                  [[_callerName,"False reporting to SpyGlass (cheater)"],"SPY_fnc_notifyAdmins",true,false] spawn life_fnc_MP;
              };
              _exitScope = true;
          };
      };
      Alles anzeigen


      Und diesen Eintrag:

      Code
      if(!(["life_fnc_",_functionName] call BIS_fnc_inString) && {!(["SPY_fnc_",_functionName] call BIS_fnc_inString)} && {!(["DB_fnc_",_functionName] call BIS_fnc_inString)} && {!(["TON_fnc_",_functionName] call BIS_fnc_inString)} &&
      {!(toLower(_functionName) in ["bis_fnc_execvm","bis_fnc_effectkilledairdestruction","bis_fnc_effectkilledairdestructionstage2"])} && {!(["SOCK_fnc_",_functionName] call BIS_fnc_inString)}) exitWith {false};

      Nun sollte SpyGlass restlos entfernt sein. Viel Spaß! :P

    Registrieren oder Einloggen

    Du bist noch kein Mitglied von NodeZone.net? Registriere dich kostenlos und werde Teil einer großartigen Community!

    Registrieren

    Wichtige Links & Informationen

    Server & Hosting-Ressourcen

      Server Administration & Hosting Basics

      Windows Server Support & Guides

      Linux Server Configuration & Help

      Setting up TeamSpeak 3 & VoIP Servers

      Domains & Web Hosting for Beginners & Professionals

      Cloud Hosting, Docker & Kubernetes Tutorials

    Gameserver & Modding-Ressourcen

      ArmA 3 Tutorials & Script Collection

      Renting & Operating Gameservers

      DayZ Server Management & Help

      FiveM (GTA V) Server & Script Development

      Rust Server Modding & Administration

      Setting up & Optimizing ARK Survival Servers

    NodeZone.net – Deine Community für Gameserver, Server-Hosting & Modding

      NodeZone.net ist dein Forum für Gameserver-Hosting, Rootserver, vServer, Webhosting und Modding. Seit 2015 bietet unsere Community eine zentrale Anlaufstelle für Server-Admins, Gamer und Technikbegeisterte, die sich über Server-Management, Hosting-Lösungen und Spielemodding austauschen möchten.


      Ob Anleitungen für eigene Gameserver, Hilfe bei Root- und vServer-Konfigurationen oder Tipps zu Modding & Scripting – bei uns findest du fundiertes Wissen und praxisnahe Tutorials. Mit einer stetig wachsenden Community findest du hier Antworten auf deine Fragen, Projektpartner und Gleichgesinnte für deine Gaming- und Serverprojekte. Schließe dich NodeZone.net an und werde Teil einer aktiven Community rund um Server-Hosting, Gameserver-Management und Modding-Ressourcen.

    Wer jetzt nicht teilt ist selber Schuld:
    1. Nutzungsbestimmungen
    2. Datenschutzerklärung
    3. Impressum
    4. Urheberrechts- oder Lizenzverstoß melden
  • Trimax Design coded & layout by Gino Zantarelli 2023-2025©
    Community-Software: WoltLab Suite™