Beiträge von IPrototypeI

    Mal ganz ehrlich das deklarieren von arrays ist unnötigste was es gibt das ist verschwendeter RAM


    wenn es doch ganz einfach auch so geht


    SetObjectMaterial(CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000),0,9515,"bigboxtemp1","poshground_sfw",0);


    Die Vorteile es so zu machen:
    - Es wird Ram gespeichert :thumbup:
    - Leichteres ersetzen der Beschaffenheit der Objekte dank der Replacefunktion von Pawno und anderen editoren. :thumbup:


    und für die ganz Schlauen unter euch, zum schnelleren ändern des Materials einer Objektgruppe. Das arbeiten von defines



    #define objectid 9515
    #define objectgroup "bigboxtemp1"
    #define objecttxt "poshground_sfw"
    #define objectcolor 0


    SetObjectMaterial(CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000),0,objectid ,objectgroup ,objecttxt ,objectcolor);


    so könnt ihr mit paar klicks die Testur oder die Farbe in sekunden ändern ist sowas nicht kuhl.

    Hmm ja..., aber den ganzen script auf MySQL umzuschreiben, würde jetzt etwas dauern....
    Hat sich bei dini wirklich nichts geändert?


    An den meisten Inhalten von Includes verändert sich garnix so fern nicht ihrgend eine funktion von samp entfernt wurde oder diese mit addressen von samp
    arbeitet. Daher musst sowas nie updaten oder nach erneuerungen suchen.


    strok ist fast so schnell wie sscanf :D
    und dcmd und ocmd , etc sind command prozessoren sind zwar langsamer als strok kann man jedoch nicht vergleichen, weil es hier um das splitten geht


    xD aber trotzdem warm drüber über den Fehler " Das is zwar ned schön, aber ich denke sowas sollte man eh selbst hinkriegen ? "

    da wo du ihn einsteigen lässt ist ja meist eine for-schleife wo abgefragt wird ob der spieler in der fraktion ist dort fügst du die jeweiligen abfragen hinzu
    Also insgesammt musst nu nur den Rang abfragen und natürlich das Fahrzeugmodel


    if(PlayerInfo[playerid][pRank] > 4 && GetVehicleModel(akuzaVehs[i]) == 541){
    RemovePlayerFromVehicle(playerid);
    return SendClientMessage(playerid,-1,"Du bist nicht Rang 4");
    }
    else if(PlayerInfo[playerid][pRank] > 5 && GetVehicleModel(akuzaVehs[i]) == 411){
    ....

    Code
    if(!strcmp("spawn", cmdtest)) {
           if(IsPlayerAdmin(playerid)) {
                    SpawnPlayer(strval(inputtext));
           }
    }


    Das is zwar ned schön, aber ich denke sowas sollte man eh selbst hinkriegen ?


    also wenn du dies schon postest dann tu dies bitte richtig die fehlt das / für den jeweiligen command würde zwar so auch gehen, wenn man spawn in das eingabemenü eingibt,
    aber nagut.
    SpawnPlayer(strval(inputtext));


    geht auch nicht strval(inputtext) das OnPlayerCommandText nicht OnDialogResponse. Zu dem musst du die eingabe splitten mit strtok oder sscanf .
    meist verwendet in jedem GF


    Code
    if(!strcmp("/spawn", cmdtest)) {
           if(IsPlayerAdmin(playerid)) {
                    new tmp[20],idx;
                    tmp = strtok(cmdtext, idx);
                    SpawnPlayer(strval(tmp));
           }
           return 1;
    }


    tmp = strtok(cmdtext, idx);
    dann strval(tmp) jedoch hat man die möglichkeit bei jedem GF noch auf ReturnUser zurück zu greifen kommt jedoch auch nicht um die verwendung mit strtok rum

    Und wie Vergleich ich die?


    Sorry ich kenn mich mit sowas nicht aus :D


    Also es wurde ja schon gepostet


    new Float:hp;
    GetPlayerHealth (playerid, hp);
    if (hp <= 20)
    {
    FreezePlayer (playerid);
    }


    GetPlayerHealth gibt wie schon gesagt den Leben des spielers an einer variabel weiter also hier an hp. Da die Variabel eine Float sein muss ist es ja auch verständlich das
    man das ganze auch demenstsprechend deklariert mit dem Keyword Float:, mann könnte jedoch auch den datentyp float: zuweißen ist jedoch nciht nötig und würde nur ein unbedeutenedes warning ausgeben beim compilen. Das momentane Leben wurde dann an die variabel hp weiter gegeben welche du hier auch nun vergleichen kannst.
    die Operator < und = sollten bekannt sein in kombination wie hier bedeutet dies ist das leben kleiner oder gleich 20 so wird der spieler hier nur die nebenfunktion FreezePlayer
    gefreezt.

    das liegt daran das GetPlayerHealth die die entsprechende hp des spielers zurück gibt sondern den wert an die deklarierte float welcher als zweites argument
    eingetragen wurde. Hier health


    @ Undercut du weisst schon das hier hilfe gesucht wird und hier kein codeschnipsel , klein skript gepostet wurde daher lösch besser deinen beitrag


    sowas liegt eindeutig an deiner if Abfrage
    if(!IsPlayerAnAdmin(playerid,1)){


    du prüfst hier bestimmt hab ob der Spieler das Adminlevel 1 hat zuzüglich dem ! Operator alles außer dem Adminlevel 1
    dies bedeutet wenn du das Adminlevel 2 hast wird automatisch der erste string formatiert.


    daher änder diese mal ab
    zu
    if(GetPVarInt(playerid,"Adminlevel") != 0)

    Schöne Villa aber die Bilder wo die Villa grün oder pink/rot ist, sieht meiner Meinung nach schlecht aus,grau ist ganz okay :)


    Ja das in Pink und grün war eigentlich nur zum spaß ich wollte es eigentlich nicht grau haben sondern mehr ins weiße gehen lassen , jedoch geht dies nicht mit dem Object
    also hellere Farben darzustellen auch nicht mit dem drüber hauen einer textur, es ist im großen und ganzem noch nicht fertig zumindestens die ganze inneneinrichtung
    und ich werde weiter hin nach hellen texturen suchen da ich wie oben schon genannt die Farbe grau nicht wirklich passend finde,


    Könntest du mir bitte verraten welche ID die Wände und die Fenster haben? Ich suche schon seit 3-4 Monaten nach ihnen aber ich finde nichts :(
    Btw: Sehr schön und sehr sauber gemappt, 10/10


    Ja klar Leo die wände haben die ID
    19377
    19454
    19435
    Diese Objekte sind von der Beschaffenheit (Textur) immer die selben nur haben diese eine andere größe


    und das Fenster die ID
    19325


    Der Boden hat die ID
    19379


    Jedoch solltest du MTA benutzen musst du natürlich diese neueren Objecte dort hinzufügen
    und hier findest du auch die jeweiligen Objekte http://www.k-dst.de/
    @ all ich bedanke mich für eure ganzen Bewertungen, die negativen Kritikpunkte werde ich mir natürlich auch zur Herzen nehmen und diese versuchen zu beseitigen.

    format(query, sizeof(query), "UPDATE `bizes` SET Besitzer='%s', Name='%s', Preis=%d, Lock=%d, Interior=%d, Kasse=%d WHERE bID='%d'", Biz[i][bizBesitzer], Biz[i][bizName], Biz[i][bizPreis], Biz[i][bizLock], Biz[i][bizInterior], Biz[i][bizKasse], i);


    weisst du eigentlich warum man backtricks benutzt ?
    ich geh mal davon aus das du dies nicht weißt und wann man einen wert mit einem einfachen anführungszeichen kennzeichnet beziehungsweise maskiert


    format(query, sizeof(query), "UPDATE `bizes` SET `Besitzer`='%s', `Name`='%s', `Preis`=%d, `Lock`= %d, `Interior`= %d, `Kasse`= %d WHERE `bID` = %d",
    Biz[i][bizBesitzer],
    Biz[i][bizName],
    Biz[i][bizPreis],
    Biz[i][bizLock],
    Biz[i][bizInterior],
    Biz[i][bizKasse],
    i);


    und zwar backtricks verwendet man damit mysql nicht mit den tabellen namen durcheinander kommt da es auch dort Keywords gibt ( Wörter die von MySQL reserviert sind wie
    WHERE, SELECT, UPDATE...). Wo ist den dann hier der Fehler tja das liegt an LOCK damit kann man tabellen sperren.


    Daher benutzt man bei den Spalten oder tabellennamen immer die backtricks. Nun wann benutzt man die einfachen Anführungszeichen ?
    Nun diese benutzt man wenn man string benutzt besser gesagt den platzhalter sonst sind diese nicht nötig ^^. Hier geht es auch wieder darum das MySQL nicht durcheinander
    kommt mit Anweisungen die von dir natürlich nicht gewollt sind. Beispiel: wenn ich auf deinen Server mit dem namen SELECT betretten würde und du benutzt die einfachen Anführungszeichen nicht bei dem Platzhalter (%s) oder was ich noch vergessen habe das diese auch nicht als spaltennamen angesehen werden.

    Es ist nur, wenn man das 'deagle' macht, bei anderen ist das nicht O.o


    Das kommt von der string überladung du kannst auch rein schreiben duhanswurst da würde der server auch crashen.
    wie schon geschrieben und auch nochmal oben geschrieben kommt dies durch eine string überladung


    dcmd_sirene(playerid,params[])
    {
    new status[4];
    if(sscanf(params,"s",status)) { return SendClientMessage(playerid,0xFF0000,"Benutzung: /sirene [an/aus]"); }
    if(!IsACop(playerid))
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Du bist kein Cop!");
    return 1;
    }


    das ist der übeltäter status[4] dieses problem hat man jedoch beim sscanf plugin nicht mehr da man hier auch die länge angibt also s[4]

    Ganz einfach das was du hier auch gemacht hast völliger rotzt ist


    stock mysql_CheckAccount(playerid)
    {
    new query[64],Namei[MAX_PLAYERS_NAME];
    GetPlayerName(playerid,Namei,sizeof(Namei));
    mysql_format(verbindung,query,"SELECT `Passwort` FROM `accounts` WHERE `Name` = '%e'",Namei);
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows()){


    }else{


    }
    mysql_free_result();
    }


    ich hoffe mal du weißt für was mysql_store_result(); und mysql_free_result(); da sind mit mysql_store_result(); speicherst du so gesehen daten zwischen, welche du dan über weitere
    funktionen von dem jeweiligen mysqlplugin abrufen kannst und mysql_store_result(); löscht diese zwischen gespeicherten daten.
    warum nur das passwort und nicht dieses * ? Der Stern steht für alles aus der reihe ist das in dem fall notwendig ? Nein ist es nicht du willst nur wissen ob der account
    existiert da reicht ein element raus zu greifen und ist auch die schnellste variante.
    warum hier gleich mysql_num_rows in so eine if abfrage rein packen muss ich da nicht dieses count verwenden? Auch hier ist die Antwort nein ganz einfach da
    mysql_num_rows(); die anzahl an Reihen die du über den sqlbefehl abgesendet hast ausspuckt. Beispiel du hast 3 mal den selben account in der daten bank was spuckt
    mysql_num_rows(); wohl aus ganz einfach 3 und dir reicht ja ein ergebnis daher geht dies auch klar. Du kannst das jedoch auch mit der anzahl begrenzen mit dem schönen LIMIT.
    Daher kannst du dein SQL-Befehl ein bissle tunen


    mysql_format(verbindung,query,"SELECT `Passwort` FROM `accounts` WHERE `Name` = '%e' LIMIT 1",Namei);


    nun wird er dir falls ein Ergebnis oder mehrere Ergenisse vorhanden sind nur eins ausspucken, besser gesagt nur 1 auslesen.


    Ich hoffe mal ich konnte damit ein bissle klarheit schaffen

    stock mysql_GetFloat(Table[], Field[], Where[], Is[]) { new query[128], Float:sqlfloat; mysql_real_escape_string(Table, Table); mysql_real_escape_string(Field, Field); mysql_real_escape_string(Where, Where); mysql_real_escape_string(Is, Is); format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is); mysql_query(query); mysql_store_result(); mysql_fetch_float(sqlfloat); mysql_free_result(); /*HIER IST ES HIIIEERR*/return sqlfloat; }



    das liegt an wieder geben einer Float


    stock mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], Float:sqlfloat;
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_float(sqlfloat);
    mysql_free_result();
    return _:sqlfloat;
    }


    oder


    forward Float:mysql_GetFloat(Table[], Field[], Where[], Is[]);


    stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], Float:sqlfloat;
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_float(sqlfloat);
    mysql_free_result();
    return sqlfloat;
    }


    die wahl liegt bei dir welche variante du verwenden willst ^^ das problem lag wie schon oben genannt an dem zurück geben eines strings

    von mir bekommst 9/10
    leider ein Punkt weniger weil meiner meinung nach ist die fassade zu eintönig
    aber echt respekt für die details ^^


    Ja da hast du recht ich selbst muss sagen das meine fassade nicht wirklich das ware ist die Texture wurde zwar geändert dennoch ist das immer noch ziemlich dunkel .
    Naja ich denk sowieso daran eine andere textur zu finden ein helle wo ins weiße übergeht ist jedoch schwer sowas ähnliches zu finden, welches noch die struktur einer
    Wand/Fassade beinhaltet .


    naja trotzdem easy doing :D per define



    #define objectid 10938
    #define objectgroup "cj_barb"
    #define objecttxt "whiteceil_int"
    #define objectcolor 0


    SetDynamicObjectMaterial(CreateDynamicObject(19391, 1477.92, 748.17, 13.76, 0.00, 0.00, 90.00),0, objectid, objectgroup, objecttxt, objectcolor);


    ich wollte mal den aussschnitt hier posten da es erstmal schneller geht die textur zu ersetzen da man replace benutzen kan in pawno
    und auch noch ressourcenfreundlicher da man keine unnötige arrays oder variabeln deklarieren muss

    Enum und PVars kann man nicht vergleichen würde ich sagen.
    PVars benutzen den Arbeitsspeicher, und die normalen Variablen (in eurem Sinne die "Enums") benutzen die CPU.
    Das heißt man kann konkret ohne Daten nicht sagen, was besser ist.
    Das kommt auf den jeweiligen Server an.


    Korrigiert mich wenn ich da falsch liege.


    Ich hoffe dir ist klar das beides CPU und Memory in anspruch nimmt alles variabeln werden Temporär gespeichert und nehmen Memory ein.
    Jedoch haben PVars einen dynamischen Speicher und ....
    mehr hier
    http://wiki.sa-mp.com/wiki/Per-player_variable_system


    jetzt ist ja die Frage CPU für was ist dieser da, der verarbeitet eure Binärcodes/Hexdezimale und macht dies was ein PC eigentlich macht rechnen , vergleichen, sortieren und natürlich auch speichern lassen im Memory oder elemente in der Register ablegen. Im großen und ganzen macht er das was er an Opcodes bekommt.