Beiträge von IPrototypeI


    sowas ist nicht umbedingt nötig da davor der code schon abgebrochen wurde.
    und die Klammern benutzt man um ein Anweisungsblock zu erstellen.

    new Z_Timer[2],b_name[15];
    #define ZOMBIE_NAME "Zombie_"
    #define MAX_ZOMBIES 100
    forward Connectbots();

    OnGameModeInit(){
    Z_Timer[0] = SetTimer("Connectbots", 3000, 1);
    .....
    }


    public Connectbots()
    {
    if(Z_Timer[1] != MAX_ZOMBIES)return KillTimer(Z_Timer[0]);
    strdel(b_name,0,15);
    valstr(b_name,Z_Timer[1]);
    strins(b_name,ZOMBIE_NAME,0);
    ++Z_Timer[1];
    return ConnectRNPC(b_name);
    }


    was ist daran so schwierig :D den Timer so killen wenn eine variabel den jeweiligen wert hat


    //edit bei valstr muss natürlich Z_Timer[1] rein

    Vielen Dank hat geklappt
    Die Leerzeichen waren anscheinend wirklich das Problem :/
    Ich dachte das funktioniert
    Das Speichersystem ist übrigens SII


    War erst ihrgend wie bei Y_INI stehen geblieben :D daher habe ich nochmal nach gefragt


    Er kann ja erstmal folgendes machen, bis er die Variablen richtig verwendet:


    #pragma unused IsNumeric
    #pragma unused ReturnUser
    Dann wären immerhin erstmal die Warnings weg, bist du die Variablen in deinen Script verwendest ;)


    #pragma ist nicht mal umbedingt nötig man kann auch da zumal ISNumeric eine funktion ist stock davor hängen so wird es nicht mit compilt sollte es nicht verwendet werden
    das gilt ebenso für variabeln , Floats etc


    new stock var;


    sollte diese nicht verwendet werden so wird sie nicht mit compilt


    xD jetzt zwar unnötig aber das wäre auch möglich


    new stock static const var;

    so nun sollte es gehen
    hab die Klammer bei PRIMARY KEY vergessen

    stock CreateMySQLTabelle()
    {
    new Query2[1050]="CREATE TABLE IF NOT EXISTS `Tabelle_Spieler`(`Name` varchar(24) NOT NULL,`Passwort` varchar(50) NOT NULL,`Level` INT(11) NOT NULL DEFAULT '0',`Registriert` INT(11) NOT NULL DEFAULT '0',`Adminlevel` INT(11) NOT NULL DEFAULT '0',`Premium` INT(11) NOT NULL DEFAULT '0',`Kills` INT(11) NOT NULL DEFAULT '0',`Tode` INT(11) NOT NULL DEFAULT '0',`Skin` INT(11) NOT NULL DEFAULT '0',`Geld` INT(11)NOT NULL DEFAULT '0',`Gebannt` INT(50) NOT NULL DEFAULT '0',`BannGrund` varchar(50) ";
    strcat(Query2,"NOT NULL DEFAULT '0',`Banner` varchar(24) NOT NULL DEFAULT '0',`BannDatum` varchar(25) NOT NULL,`Registrierungsdatum` varchar(30) NOT NULL,`Email` varchar(30) NOT NULL,`SpielMinuten` INT(11) NOT NULL DEFAULT '0',`PayDayZeit` INT(11) NOT NULL DEFAULT '0',`Respektpunkte`");
    strcat(Query2,"INT(11) NOT NULL DEFAULT '0',`Job` INT(11) NOT NULL DEFAULT '0',`Gehalt` INT(11) NOT NULL DEFAULT '0',`JobKuendigungZeit` INT(11) NOT NULL DEFAULT '0',`BankAccount` INT(11) NOT NULL DEFAULT '0',`BankGuthaben` INT(11) NOT NULL DEFAULT '0', PRIMARY KEY ( `Name` )) COLLATE='utf8_general_ci' ENGINE=InnoDB");
    return mysql_query(Query2);
    }

    kannst ja mal die koordinaten ausprinten lassen oder am 0 punkt schauen sollte dies der fall sein hat er womöglich ein Problem mit Spawn X das auszulesen
    besser gsagt mit dem leerzeichen kannst ja mal probieren Spawn X ind SpawnX zu ändern.
    Da ich gerade hier kein ersichtlicher fehler finde.
    welches speichersystem verwendest du ?

    stock CreateMySQLTabelle()
    {
    new Query2[1050]="CREATE TABLE IF NOT EXISTS `Tabelle_Spieler`(`Name` varchar(24) NOT NULL,`Passwort` varchar(50) NOT NULL,`Level` INT(11) NOT NULL DEFAULT '0',`Registriert` INT(11) NOT NULL DEFAULT '0',`Adminlevel` INT(11) NOT NULL DEFAULT '0',`Premium` INT(11) NOT NULL DEFAULT '0',`Kills` INT(11) NOT NULL DEFAULT '0',`Tode` INT(11) NOT NULL DEFAULT '0',`Skin` INT(11) NOT NULL DEFAULT '0',`Geld` INT(11)NOT NULL DEFAULT '0',`Gebannt` INT(50) NOT NULL DEFAULT '0',`BannGrund` varchar(50) ";
    strcat(Query2,"NOT NULL DEFAULT '0',`Banner` varchar(24) NOT NULL DEFAULT '0',`BannDatum` varchar(25) NOT NULL,`Registrierungsdatum` varchar(30) NOT NULL,`Email` varchar(30) NOT NULL,`SpielMinuten` INT(11) NOT NULL DEFAULT '0',`PayDayZeit` INT(11) NOT NULL DEFAULT '0',`Respektpunkte`");
    strcat(Query2,"INT(11) NOT NULL DEFAULT '0',`Job` INT(11) NOT NULL DEFAULT '0',`Gehalt` INT(11) NOT NULL DEFAULT '0',`JobKuendigungZeit` INT(11) NOT NULL DEFAULT '0',`BankAccount` INT(11) NOT NULL DEFAULT '0',`BankGuthaben` INT(11) NOT NULL DEFAULT '0',PRIMARY KEY ( `Name` )COLLATE='utf8_general_ci' ENGINE=InnoDB");
    return mysql_query(Query2);
    }


    dein string war zu klein du bekommst die größe mit strlen(....); hier ist er um die 1040 bissl mehr und du hast paar weitere kleine fehler drinne gehabt

    -r waren die zusatzinformationen also Header size, Code size ,Data size ...
    -d3 war das compilen mit zusätzlichen informationen (debug modus)
    -d2 müsste das selbe sein wie bei -d3 genannt
    -d0 entfernt paar extra informationen von der .amx die nicht gebraucht werden dabei wird die .xml datei nicht erstellt so wie bei -d2, -d3
    -O2 gibt es jedoch nicht mehr damit konnte man macro anweisungen und gepackte opcodes generieren.
    -O1 optimierung
    ...


    laut Y_Less soll die beste kombination -d0 -r sein

    Ich selber Scripte nicht, ich werde mal den Scripter bescheid geben. Ich wollte mich mal erkundigen, woran das liegen könnte. Das Problem ist, das das Script die Datenbank oder Tabelle wie auch immer, von selbst Erstellt. Wenn man aber auf dem Server ein paar Minuten spielt, crashed die Datenbank einfach mal so. Uns fehlen schon langsam die Nerven dafür :S .


    compilt das skript im debug modus das gibt auch den error aus und die zeile wo es crasht es muss nicht umbedingt an mysql liegen.
    also downloadet euch das crashdetect plugin
    http://forum.sa-mp.com/showthread.php?t=262796


    und ändert entweder die parameter von pawno oder erstellt eine pawn.cfg wo ihr rein schreibt -d3 -r das ändert den compiler etwas ab beim compilen als es werden zusätzlich informationen mit compilt.


    Das ist ein bisschen tricky aber es sollte gehen, hook einfach die Funktion mysql_query und printe dir alle Querys die übergeben werden, der letzte Query der gerpintet wird, da ist der Fehler halt ;)


    mfg. :thumbup:


    dafür gibts auch den "debug"modus womit du das ganze loggen kannst und je nach MySQL plugin gibt noch ein Callback

    Wenn sie zu langsam geladen werden nimm Streamer_VisibleItems() und stell das auf 700 hoch, ansonsten die Tickrate.


    Nun gut BloodyEric wenn man bei weniger Objekte als 500 Objekte ist bingts auch nicht viel ^^.
    und
    ReborN ja Streamer_TickRate ist für CreateDynamicObject dafür brauchst mir keine extra Pn schreiben

    Das ist beides das gleiche wie return 0; auch return false; ist
    jedoch darfst du return 0; oder return 1; nicht verwenden wenn du eine funktion erstellst mit dem tag bool; davor
    beispiel:


    stock bool:valequal(intes){
    if(intes > 10)return true;
    else return false;
    }


    Der Code ist wirklich lustig :D


    Aber mein Makro ist doch "kuhl" ;)


    8o


    Das ist sehr simpel und um dir noch was kleines beizubringenmit #emit XCHG drehst du das was in der pri. register und was in der alt. register rein geschrieben wurde um.
    und Move.alt habe ich zwar nicht verwendet das ist auch nicht in der pawn_implementer_guide.pdf ausgeführt jedoch kannst du damit auch die jeweiligen register verschieben besser gesagt die werte .


    Mit deinem Makro warum zur hölle benutzt du die zuweisung eines datentyps besser gesagt ein tag damit veränderst du die variabel nicht.

    Bitte vergesst nicht, das der thread hier Nützliche Codeschnipsel heisst...


    theoretisch ist es ja in ihrgend einer form sinnvoll :D
    beispiel

    stock swap_ints(int1, int2){
    #emit LREF.S.pri int1
    #emit LREF.S.alt int2
    #emit SREF.S.pri int2
    #emit SREF.S.alt int1
    }



    stock swap_ints(int1, int2){
    #emit LOAD.S.pri int1
    #emit LOAD.S.alt int2
    #emit STOR.S.pri int2
    #emit STOR.S.alt int1
    }


    somit kann man dne inhalt vertauschen beide codes machen das selbe die laden die zwei inhalte (offsets) in die temporäre register
    und übergeben diese werte wieder an die jeweilige variabeln.

    Jetzt will ich mich mal auch so kuhl fühlen wie Kaliber und ein #emit code posten um den inhalt eines arrays zu verändern
    index ist optional


    stock ChangeData(array[], val, index=sizeof(array)){
    new i;
    for(; i < index; ++i){
    #emit LOAD.S.pri i
    #emit SMUL.C 4
    #emit LOAD.S.alt array
    #emit ADD
    #emit LOAD.S.alt val
    #emit XCHG
    #emit STOR.I
    }
    }

    Sollte auch gehen
    format (pInfo[playerid][pKey], 64, Key);


    Zu strcat -> String Concatenation -> Anhängen von Zeichenketten.
    Damit würdest du nur den Text anhängen und nicht den letzten Überschreiben.
    Somit hättest du mehrere Namen bis Länge 64 irgendwann gefüllt.


    daher sollte man auch meist strdel benutzen
    und wen es dich interessiert ist format ein 400 Zeichenlanger code , welcher Key von AmxModx kopiert hat.


    und noch zu dem thema strcat ist 2 mal schnelle rals format obwohl man sagen muss das format im großen und ganzem auch nicht gerade langsam ist
    es gibt dennoch diesen unterschied ist ja klar.

    Was das beste wäre ist das du die ganzen variabeln in eine include rein haust und diese einfach includierst ins Filterskript dennoch hast du auch die
    möglichkeit die .pwn zu includieren


    #include file.pwn
    jedoch um dann die selben callbacks zu nutzen musst du diese hooken.


    weitere möglichkeiten


    CallRemoteFunction (schon genannt)
    Pvars( schon genannt)
    arbeiten mit setproperty und getproperty
    jedoch nicht mit arrays möglich