Beiträge von Tion

    Das zieht viele Betrüger auf sich.


    :D Deswegen habe ich ihn auf die Seite verwiesen. Auch wenn ich sie "nicht" nutze / ich bin zwar drauf, sammle aber kein Feedback.
    Oder hier auf die Beiträge gucken, am Besten jemand, der mindestens 2 Jahre hier ist und 500+ Beiträge hat :)

    Eine Betaphase, ist ja dazu gedacht das erstellte auf Fehler und Funktionalität zu prüfen. In dieser Zeit kann man bestehende System geringfügig ergänzen und beheben.
    Wenn man jetzt in diesem Fall z.b. Casino's hinzufügt ist das mehr als etwas geringfügig ergänzen. Das meinte ich damit.


    ... dann haben Ubisoft ( "Ghost Recon Online" ), Mojang ( "Minecraft" ) und viele andere Hersteller das Prinzip nicht verstanden :D
    Ich glaube, wir legen das Thema beiseite :D

    Unter "mein-mittelsmann.de" findest du ganz viele mit Skype / ..., da kannst du dir einen aussuchen :)
    Sonst zur allerallerallerallerallerhöchsten Not kann ich einspringen, auch wenn ich keine Lust habe, um 7 aufzustehen *gähn*

    Tion, versteh mich bitte nicht falsch. Eine Beta, sollte aber die Grundlegenden Funktionen schon enthalten und dann nur noch Fehler behoben werden. So ist der allgemeine Begriff in dieser Sektion. Kenne mich als Informatiker ganz gut da aus. Jetzt verstehst Du eventuell meine Hintergedanken, bei meinem Post.


    Nichts gegen dich, aber eine Beta-Version ist "eine unfertige Version eines Computerprogramms".
    Also kann ich das jetzt noch weiter bearbeiten, und es ist noch Beta ;)


    PabloEscobar: Danke für das Feedback, was können wir besser machen ?

    Ich biete euch hier Counter-Strike: Source an. Es handel sich um eine deutsche Steam-Version.


    Das ganze wird bei Steam als GIFT übergeben - nicht mein Account, sondern als Geschenk.


    Zitat von Über das Spiel
    Spielinfos, Anforderungen, ...

    DIE NÄCHSTE VERSION DES BELIEBTESTEN ONLINE-ACTION-SPIELS DER WELT
    Counter-Strike: Source kombiniert die preisgekrönte Teamplay-Funktion von Counter-Strike mit der Spitzentechnologie von Source™. Atemberaubende Grafik sowie brandneue Sounds und Steuermöglichkeiten machen Counter-Strike: Source zu einem Muss für jeden Gamer.

    Zitat von Anforderungen
    Spielinfos, Anforderungen, ...

    Mindestanforderung:
    1,7-GHz-Prozessor, 512 MB RAM, DirectX® 8.1-fähige Grafikkarte (SSE-Unterstützung erforderlich), Windows® 7 (32/64-bit) / Vista / XP, Maus, Tastatur, Internetverbindung


    Empfohlen:
    Pentium 4-Prozessor (3,0 GHz oder höher), 1 GB RAM, DirectX® 9-fähige Grafikkarte, Windows® 7 (32/64-bit)/Vista/XP, Maus, Tastatur, Internetverbindung


    Aktueller Preis Steam: 19,99€
    Aktueller Preis MediaMarkt: 19,99€
    Mein Preis Paysafecard: 15€
    Mein Preis Paypal: 12,99€


    Bis zu 7,01€ Ersparnis :O


    Alle Marken sind Eigentum ihrer jeweiligen Besitzer in den USA und anderen Ländern. Quelle: Steam-Seite


    ______
    Unverbindlicher Hinweis: Die Sicherheit einer Transaktion kann am besten durch die Einschaltung eines Mittelsmannes gewährleistet werden. Weitere Informationen dazu gibt es hier.

    Zitat

    Do not distribute anything we've made. This includes, but not limited
    to, the client or the server software for the game. This also includes
    modified versions of anything we've made. Also, you may not resell any
    gift codes or licence keys - but of course you can give gift codes as
    gifts. This is necessary so that we can help stop piracy and fraud - and
    especially users buying keys that have been fraudulently obtained.


    Verteielt nichts, was wir gemacht haben. Das enthält z.B. die Client- oder Serversoftware von dem Spiel.
    Das enthält auch veränderte Versionen von allen unseren Erzeugnissen. Auch dürft ihr wedergift codes noch Lizensen
    weiterverkaufen - trotzdem dürft ihr die gift codes verschenken. Das ist benötigt, um Piraterie und (Kreditkarten-) Betrug
    zu stoppen.


    Mal etwas frei übersetzt :D

    Dann bringt Euer Anticheat genauso viel wie die 100 anderen. Naja, an guten Code kommt man heutzutage sowieso nie umsonst ;-)^^
    Arbeit ist gut, aber ich mach doch entweder 100%ig Sachen oder ich lass es ganz. Ist meine Meinung.
    Sollte jetzt auch kein Angriff auf Eure Person(en) sein, ist lediglich meine Meinung.


    ... das ist Beta - steht sogar im Titel. Ist noch nicht fertig ;)


    TheGrudgee: In dem Ordner "DT_Anticheat" sollte eine "log.txt" sein - kannst du die bitte posten ? :)
    Btw., kommt nur das, oder crasht der Server ?
    Oder, kannst du mal das Plugin "CrashDetect" ( Link ) laden ? Das sollte dann anzeigen, woran das liegt.


    @[RMR]FloH: Setze ich mal auf die "ToDo"-Liste ;)

    public OnPlayerDisconnect(playerid, reason)
    {
    if(Eingeloggt[playerid] == 1)
    Update(playerid);
    Eingeloggt[playerid] = 0;
    new spielername[24];
    new string[64];
    GetPlayerName(playerid,spielername,24);
    format(string,64,"{7F7F7F}%s {FFFFFF}hat den Server {E50000}verlassen.",spielername);
    SendAdminMessage(Weiß,string);
    return 1;
    }
    Spart Recourcen

    Blödsinn, kann man natürlich auch Manuell machen


    Wie genau Manuell ?



    und bringen keine nennenswerte Vorteile außer das man damit das OOP Konzept verfolgen kann.


    Zitat von Tion

    Ich nutze die Klassen gerne, wenn ich etwas programmiere, da ich gerade in einer "OOP-Phase" bin, in der alles in eine Klasse getan werden muss.



    Zitat von Vincent Petritz

    OOP würde ich das auch nicht unbedingt nennen, nur weil er mit Klassen arbeitet.


    ... kein Kommentar.

    Hey Leute,


    habe die schon ein paar Wochen auf meiner Festplatte rumgammeln, und dachte mir, dass ich sie einfach mal veröffentliche.
    Ich nutze die Klassen gerne, wenn ich etwas programmiere, da ich gerade in einer "OOP-Phase" bin, in der alles in eine Klasse getan werden muss.


    Wie läuft das ganze ab ?
    Ich habe ein paar Klassen geschrieben, die über meinen "ComponentLoader" eingebunden werden. Das sieht dann in etwa so aus:

    PHP
    ComponentLoader::load('files', 'ZIPWriter');


    Der erste Parameter gibt eine Art "Kategorie", der zweite den Klassennamen an.


    Werbung:
    Hier könnte Ihre Werbung stehen. Jetzt buchen - nur 299€ die Stunde.


    Was können die lassen bis jetzt ?
    Bis jetzt kann man mit den Klassen mit ZIP-Archiven arbeiten, auf FTP-Servern tüfteln, ein eigenes Session-System ( anstelle dem PHP-eigenem ) nutzen & ein paar kleine Sachen mehr.


    Hast du eine Liste der Kategorien und Klassen ?
    Klar, sogar mit Beispielen :P

    • client

      • Session


    • connection

      • FTPConnection


    • files

      • IniParser
      • ZIPReader
      • ZIPWriter
      • Update ( nicht zu empfehlen, die zu nutzen, könnt ihr euch angucken, aber kommt aus meiner Anfänger-Zeit )


    • server

      • GlobalVar
      • OutputStream


    • templates

      • InformationStorage
      • InformationStorageInterface



    Beispiel-Liste:

    Code
    Dieses Beispiel wird eine Datei via FTP downloaden und wieder hochladen.Die Datei auf dem FTP-Server heißt "downloadme.txt" und wird auf dem Webspace "uploadme.txt" heißen.##########Benötigte Komponenten:	connection:FTPConnection##########  include_once('./includes/ComponentLoader.class.php');  ComponentLoader::load('connection', 'FTPConnection');  $ftpcon = new FTPConnection('83.133.224.53');  $ftpcon->auth('root', 'kalaga33');  $ftpcon->get('downloadme.txt', 'uploadme.txt');  $ftpcon->put('downloadme.txt', 'uploadme.txt');##########  Als Parameter bei der Initialisierung wird die IP oder die Domain übergeben.  Per "auth" wird sich eingeloggt.  Per "get" gedownloaded, dabei ist der erste Parameter die Datei auf dem FTP-Server, der zweite die 'lokale'.  Per "put" geuploaded, dabei ist wieder der erste Parameter die Datei auf dem FTP-Sevrer und die zweite die 'lokale'  Per "cd" ( "Change Dir" ) kann das Verzeichnis gewechselt werden - Dabei wird als einziger Parameter das neue Verzeichnis übergeben

    Code
    Hier werden wir eine Variable setzen und wieder auslesen.##########Benötigte Komponenten:	server:GlobalVar##########  include_once('./includes/ComponentLoader.class.php');  ComponentLoader::load('server', 'GlobalVar');  GlobalVar::assign('version', '0.1a');  GlobalVar::get('version');##########  Ich nutze diese Klasse oft, wenn ich Variablen zwischen den Klassen und Dateien austauschen muss.

    Code
    Ein "InformationStorage" ist eine SQLite-Datenbank, die OOP ist und schon viele Sachen vorimplementiert hat.Man muss sich zum Beispiel nicht mehr um den Check, ob die DB existiert, kümmern.Anders als die anderen Komponenten muss hier eine eigene Klasse geschrieben werden, die von "InformationStorage" erbt.##########Benötigte Komponenten:	templates:InformationStorage	templates:InformationStorageInterface##########  include_once('./includes/ComponentLoader.class.php');  ComponentLoader::load('templates', 'InformationStorage');  ComponentLoader::load('templates', 'InformationStorageInterface');  class MyStorage extends InformationStorage implements InformationStorageInterface  {    function __construct($dbname)    {      parent::init($this, $dbname);    }    // Wenn die Datenbank erzeugt wird / noch nicht existiert    public function onCreate($dbname)    {      parent::exec('CREATE TABLE user (id INTEGER PRIMARY KEY, name TEXT, email TEXT, password TEXT);');    }    // Immer, wenn eine Query per "exec" ausgefuehrt wird - egal, ob INSERT, SELECT, ALTER, UPDATE, ...    public function onQuery($query)    {      // Hier evtl. etwas loggen ?      // auf jeden Fall nicht in die Datenbank schreiben, sonst koennte es zu einer Endlosschleife kommen ;)    }    // Hier können eigene Funktionen folgen  }##########  Ich habe mir mal die Freiheit genommen, eine eigenen "Login-Storage" zu schreiben:  include_once('./includes/ComponentLoader.class.php');  ComponentLoader::load('templates', 'InformationStorage');  ComponentLoader::load('templates', 'InformationStorageInterface');  class MyStorage extends InformationStorage implements InformationStorageInterface  {    function __construct($dbname)    {      parent::init($this, $dbname);    }    public function onCreate($dbname)    {      parent::exec('CREATE TABLE user (id INTEGER PRIMARY KEY, name TEXT, email TEXT, password TEXT);');    }    public function onQuery($query)    {    }    // EIGENE FUNKTIONEN    public function createUser($name, $email, $password)    {      $name = parent::escape($name);      $email = parent::escape($email);      $password = parent::escape(md5($password));      $sql = 'INSERT INTO user (name, email, password) VALUES ("'. $name .'", "'. $email .'", "'. $password .'");';      parent::exec($sql);    }    public function getUser($email)    {      $email = parent::escape($email);      $sql = 'SELECT id FROM user WHERE email = "'. $email .'";';      $result = parent::exec($sql);      if(parent::numRows($result) != 0)      {        $row = parent::fetchArray($result);        return $row['id'];      }      else        return -1;    }    public function checkUserPassword($userid, $password)    {      if(!is_numeric($userid)) return false;      // $userid muss jetzt  nicht escaped werden, da es zu 100% aus Zahlen besteht ( siehe chack oben )      $sql = 'SELECT password FROM user WHERE id = '. $userid .';';      $result = parent::exec($sql);      $row = parent::fetchArray($result);      return md5($password) == $row['password'];    }  }  // Benutzen der Klasse:  $userstorage = new MyStorage('testdb');  $userstorage->createUser('MaxMustermann', 'max@muster.mann', 'passwort');  $userstorage->createUser('MauriceMustermann', 'maurice@muster.mann', 'passwort2');  $userstorage->createUser('PizzaLieferMann', 'pizza@liefer.mann', 'passwort3');  $pizza = $userstorage->getUser('pizza@liefer.mann');  echo'Der Pizza-Mann hat die ID '. $pizza ."\r\n";  if($userstorage->checkUserPassword($pizza, 'passwort')) // false    echo'Sein Passwort lautet "passwort"'."\r\n";  else if($userstorage->checkUserPassword($pizza, 'passwort2')) // false    echo'Sein Passwort lautet "passwort2"'."\r\n";  else if($userstorage->checkUserPassword($pizza, 'passwort3')) // true    echo'Sein Passwort lautet "passwort3"'."\r\n";

    Code
    Dieses Beispiel wird eine INI-Datei auslesen, ein paar Werte ändern und wieder speichern.##########Benötigte Komponenten:	files:IniParser##########  include_once('./includes/ComponentLoader.class.php');  ComponentLoader::load('files', 'IniParser');  $player = IniParser::parse('user.txt');  $player['Passwort'] = 'NeuesPassword';  IniParser::save($player, 'user.txt');##########  Bei Version > 0.2 wird die PHP-hauseigene Funktion "parse_ini_file" genutzt.

    PHP
    In diesem Beispiel werden wir Ausgaben abfangen, löschen und andere senden.##########Benötigte Komponenten:	server:OutputStream##########  include_once('./includes/ComponentLoader.class.php');  ComponentLoader::load('server', 'OutputStream');  OutputStream::record();  echo'Diesen Text wird niemand zu sehen bekommen';  OutputStream::stop(false); // Das "false" sagt, das alle Ausgaben bis jetzt nicht gesendet und gelöscht werden. Bei weglassen oder "true" würden sie gesendet werden.  echo'Hallo :)';  OutputStream::record();  echo'3.1415';  $text = OutputStream::get(); // in $text ist jetzt "3.1415"  OutputStream::stop(); // Der Benutzer bekommt jetzt "3.1415" gesendet##########  Diese Klasse kann genutzt werden, um an beliebigen Stellen des Scriptes die Header zu verändern oder  eigene Fehlerbildschirme zu erzeugen, die ein eigenes Design haben.  Die OutputStream-Klasse fängt sogar Text außerhalb der "<?php"-Tags ab.

    Code
    In diesem Beispiel werden wir eine neue "Session" initialisieren, ein paar Variablen setzen und sie wieder auslesen.Wichtig: Für dieses Beispiel muss eine Verbindung zu einer MySQL-Datenbank bestehen und die Tabellen, wie sie ganz unten als Dumb stehen,müssen importiert sein !##########Benötigte Komponenten:	client:Session##########  include_once('./includes/ComponentLoader.class.php');  ComponentLoader::load('client', 'Session');  Session::initialisize();  if(Session::firstinit())  {    // Der Benutzer ist zum ersten Mal auf der Seite    Session::set('logedin', false);  }  if(Session::get('logedin') == false)  {    echo'Du bist nicht eingeloggt';  }  else  {    if(Session::exists('username') == false)    {      Session::set('username', 'IrgendeinName');    }    else    {      echo'Wilkommen, '. Session::get('username');    }  }##########Hinweis: Session::initialisize MUSS vor jedem Output via "echo", ... aufgerufen werden.         Sollte es nicht anders gehen, kann die "OutputStream"-Komponente genutzt werden.##########CREATE TABLE `session_indexes`(	`id` int(5) NOT NULL AUTO_INCREMENT,	`session` text NOT NULL,        `useragent` text NOT NULL,	`lastvisit` int(11) NOT NULL,	PRIMARY KEY (`id`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT = 2;CREATE TABLE `session_variables`(	`id` int(4) NOT NULL AUTO_INCREMENT,	`session` int(2) NOT NULL,	`typ` int(1) NOT NULL,	`var` text NOT NULL,	`value` text NOT NULL,	PRIMARY KEY (`id`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT = 4;

    Code
    Dieses Beispiel wird eine ZIP-Datei öffnen, die Namen auslesen und anzeigen, und entpacken.##########Benötigte Komponenten:	files:ZIPReader##########  include_once('./includes/ComponentLoader.class.php');  ComponentLoader::load('files', 'ZIPReader');  $archiv = new ZIPReader('archiv.zip');  echo'<pre>';    print_r($archiv->getFiles());  echo'</pre>';  $archiv->extractAll('.');##########  Diese Komponente wird nicht auf allen Webservern unterstützt, da einige Hoster ihren PHP-Kernel  ohne die ZIP-Bibliothek compiliert haben.

    Code
    Dieses Beispiel wird eine ZIP-Datei öffnen und 2 Dateien hinzufügen.Dabei wird eine Datei nicht wirklich existieren, sondern als String der Inhalt übergeben werden.##########Benötigte Komponenten:	files:ZIPWriter##########  include_once('./includes/ComponentLoader.class.php');  ComponentLoader::load('files', 'ZIPWriter');  $archiv = new ZIPWriter('archiv.zip');  $archiv->addFile('addme.txt', 'addme.txt'); // lokal | im Archiv - letzteres kann weggelassen werden  $archiv->addStringAsFile('virtual.file', 'Ich bin eine Datei im ZIP-Archiv :O');  //$archiv->addFolder('folder');  //$archiv->import('.'); // ein ganzes Verzeichnis rekursiv importieren##########  Diese Komponente wird nicht auf allen Webservern unterstützt, da einige Hoster ihren PHP-Kernel  ohne die ZIP-Bibliothek compiliert haben.


    Lizenz-Bestimmungen:
    Nutzt es einfach, wenn ihr es braucht. Ihr dürft es nur nicht als eures ausgeben, verkaufen, bla, bla, bla.
    Als Hinweis: Ihr dürft es auch in Systeme einbinden, die ihr anderen kostenpflichtig zur Verfügung stellt, wenn ihr meinen Namen irgendwo ins Kleingedruckte schreibt, oder erwähnt, dass dieses "Mini-Framework" drinne ist.


    Source-Code:
    Das sind etliche Dateien 8| Da kann man nicht einfach den Sourcecode posten ;)
    Hier einfach mal der Source von dem ComponentLoader:

    PHP
    <?php  /* @class:      ComponentLoader   * @type:       static   * @author:     Tion   * @container:  .   * @version:    3.3.4  */    class ComponentLoader    {      private static $libs = array();      public static function load($container, $class)      {        $mypath = dirname(__FILE__);        if(substr($mypath, strlen($mypath) - 1) != '/')          $mypath .= '/';        $fullpath = $mypath . $container .'/'. $class .'.class.php';        if(!file_exists($fullpath)) return false;        require_once($fullpath);        $lib = array('container' => $container, 'class' => $class);        self::$libs[] = $lib;        return true;      }      public static function isLoad($container, $class)      {        for($i = 0; $i < sizeof(self::$libs); $i++)        {          if(self::$libs[$i]['container'] == $container && self::$libs[$i]['class'] == $class)            return true;        }        return false;      }    }?>


    Download:
    Tell me have you seen the Marvellous Breadfish - Swimming in the ocean waters - Have you seen the Marvellous Breadfish - He's like an inverse sandwich - For fishermen and sharks.


    Feedback:
    Jaaaaaaaa, bitte auch melden, falls ich eine wichtige Klasse vergessen habe ( was ich 100%ig getan habe ;) )


    Tion