Beiträge von Kaliber

    public BanWithMessage(playerid)
    {
    new string[258];
    BanEx(playerid, GetPVarString(playerid, "Grund", string, 258)); // Hier soll dan der Grund wieder ausgegebn werden
    return 1;
    }


    Der Fehler liegt hier, dass muss so aussehen:


    public BanWithMessage(playerid)
    {
    new string[128];
    GetPVarString(playerid, "Grund", string, 128);
    BanEx(playerid,string);
    return 1;
    }


    //Edit: und in deinem cmd musst du das so machen:


    SetPVarString(pID, "Grund", reason);
    SetTimerEx("BanWithMessage", 100, true, "i", pID); // Hier wird es im Sting gespeichert


    mfg. :thumbup:

    So:


    new bool:var;


    var = false; //eig unnötig, da der Wert eh auf false ist ^.^
    switch(var) {
    case false: print("false");
    case true: print("true");
    }


    Das würde in diesem Fall natürlich false printen ;)


    mfg. :thumbup:

    So, ich finde hier sollte auch wieder mal was rein und da ich mal wieder Langeweile habe, schreibe ich hier mal ein paar Sachen rein:


    Booleans:
    Wenn eine Variable nur 2 Werte annehmen brauch, sagen wir 0 und 1, dann sollte man anstatt so:
    //Falsche Variante
    new var;


    //In irgendeinem Callback
    var = 1;


    //Unter einem anderen Callback
    if(var == 1)


    Sollte man es so machen:


    //Richtige Variante
    new bool:var;


    //In irgendeinem Callback
    var = true;


    //Unter einem anderen Callback
    if(var == true)
    Das sorgt dafür, dass von Anfang an weniger Speicherplatz für diese Variable verbraucht wird.


    Char Arrays
    Das ist ein Thema was ich wirklich jedem ans Herz lege !


    Jeder kennt folgendes:


    new var[MAX_PLAYERS];


    if(var[playerid] == 1)
    Nun das ist aber verdammt schlecht !


    Jede Zelle bzw Spalte im Array verbraucht 4 Bytes, da MAX_PLAYERS (ohne das Makro zu verändern) eine größe von 500 hat, würde diese Variable:


    Code
    4Bytes * 500Bytes = 2000 Bytes


    verbrauchen !
    Aus diesem Grund sogenannte char-Arrays verwenden, dass sähe dann so aus:


    new var[MAX_PLAYERS char];


    if(var{playerid} == 1) //Vorsicht: Hier { } verwenden anstatt [ ] !!!
    Hier würde jede Zelle bzw Spalte im Array nur 1nen Byte verbrauchen !
    Sprich wir verbrauchen 500 Bytes anstatt 2000 ! ^^


    Wichtig noch zu beachten, das geht nur bei 1 dimensionalen Arrays und auch nur bei Integern, wenn man das mit strings machen will muss man strpack benutzen (aber das ist eine andere Geschichte)...


    Außerdem ist zu beachten, dass nur Werte von 0-255 möglich sind!
    Sprich:


    new test[MAX_PLAYERS char];
    test{0} = 259; //Ist nicht möglich, da größer 255!


    Strings-returnen
    Viele von euch werden wahrscheinlich diese Funktion kennen:


    stock PlayerName(playerid) {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    return name;
    }
    Nun, hier returnen wir einen string, das führt zu sog. Memory Leaks und sorgt dafür dass euer Speicher unnötig belegt wird, denn diese Variable "name" wird Lokal erzeugt, aber sie wird durch das return nicht wieder "zerstört", somit bleibt der Speicher vorhanden.
    Aus diesem Grund empfehle ich diese Variante:


    //Oben im Script
    new pName[MAX_PLAYERS][MAX_PLAYER_NAME];


    //Unter OnPlayerConnect
    GetPlayerName(playerid,pName[playerid],MAX_PLAYER_NAME);


    //Nutzung:
    format(string,sizeof(string),"Willkommen lieber %s",pName[playerid]);


    Unnötig große Arrays
    Wie oben schon mal angesprochen verbrauchen große Arrays viel Speicherplatz !
    Ich zeige euch mal einige Beispiele die ihr sicher kennen werdet:


    new string[256], string1[300], string2[499]; /* usw... */
    format(string,sizeof(string),"bla...");


    Also abgesehen davon, dass man das meistens eh mit 1ner Variable lösen kann, zeige ich euch nun das:


    new string[] = "Hier euren Text rein...lieber %s",name[] = "Kaliber";
    format(string,sizeof(string)+sizeof(name),string,name);
    print(string); //würde ausgeben: "Hier euren Text rein...lieber Kaliber"


    So das wars erstmal mit dem gröbsten, werde vielleicht noch einen 2. Part dranhängen, mal sehen ^^


    mfg. :thumbup:


    Spoiler anzeigen
    //Edited: Infos

    Du hast da 3x if(response==1) stehen, merkst du selber das da was falsch ist :huh:


    Du musst das so machen wie mit dem 1. Dialog also:


    if(dialogid == DIALOG_Perso_Nachname) {
    format(SpielerInfo[playerid][sName],24,inputtext); //in "inputtext" steht der Text der eingegeben wurde
    }


    mfg. :thumbup:

    Diese 3 Personen würden auf einer Seite in Facebook mit 10.000 Abos landen , um dort noch ein bisschen berühmter zu werden.


    Fine das ja ein bisschen unsinnig, aber okay ^^


    Es ist eigentlich sehr erfeulich das es viel zu viele gute Dinge gibt als das man sagen könnte "Das ist es!"


    Genau das finde ich auch, aus diesem Grund wird es bestimmt schwer, da einen Sieger festzustellen... ^^


    Aber trotzdem, gutes Gelingen ;)


    mfg. :thumbup:

    Nur über eine globale Variable und das nennt man dann auch nicht mehr Parameter :D


    So z.B.


    //Oben im Script
    new test = 0;


    ocmd:bla(playerid) {
    test = 1;
    }


    //Unterm Callback
    if(test==1)


    mfg. :thumbup:

    Habe eine frage kannst du das für mich machen habe schon mehrmals gemacht und klappt nie ,


    wen ja Dan danke


    Wieso nutzt du nicht meine Include :huh:


    3 Zeilen musst du dann nur machen und dein Tor geht auf + zu :rolleyes:


    mfg. :thumbup:

    Nun meine Frage lautet für was ist dies Nützlich? was könnte man damit machen wie ich sehe werden oben alle Cars aufgelistet könnte man z.B damit ein Autohaus System
    erstellen sagen wir ich klicke ein Auto an und zack habe ich es gekauft? oder wofür benutzt ihr es so?


    Genau dafür kannst du es verwenden :)


    Dörfler hat dafür ein ganz nützliches Include geschrieben, kannst du dir ja mal anschauen: mSelection


    mfg. :thumbup:

    Das erste Problem ist, das die CarHP nicht richtig im Tacho angezeigt werden. Dort steht immer 1% statt die richtige CarDL


    Du musst es so schreiben:


    new Float:carhealth;
    GetVehicleHealth(GetPlayerVehicleID(i),carhealth);
    format(String,sizeof(String),"Fahrzeugzustand: %d%",floatround(carhealth));


    mfg. :thumbup:

    Ich bin mir jetzt nich sicher aber probiers mal so :)



    new preis = "ZuTanken * BENZINPREIS";


    Nein :wacko:


    Schreibe das mal so:


    ocmd:tanken(playerid)
    {
    if(GetPlayerVehicleSeat(playerid) != 0) return SendClientMessage(playerid,COLOR_RED,"Du bist in keinem Fahrzeug (oder kein Fahrer).");
    new car = GetPlayerVehicleID(playerid);
    if(TanktGerade[car]) return SendClientMessage(playerid,ROT,"Du tankst schon!");
    else if(Motor[car] == true) return SendClientMessage(playerid,ROT,"Du musst vor dem Tanken den Motor ausschalten.");
    new ZuTanken = 100-Tank[car];
    new preis = floatround(ZuTanken * BENZINPREIS);
    if(GetPlayerMoney(playerid)-preis < 0) return SendClientMessage(playerid,ROT,"Du hast nicht genug Geld!");
    GivePlayerMoney(playerid, -preis);
    SendClientMessage(playerid, ROT, "Tanken wird gestartet.");
    SetCameraBehindPlayer(playerid);
    TogglePlayerControllable(playerid,0);
    TanktGerade[car] = true;
    tanktimer[playerid] = SetTimerEx("Auftanken",500,true,"i",playerid);
    return 1;
    }


    mfg. :thumbup:

    Nun, es heißt:


    #pragma unused params


    Dennoch rate ich davon ab !


    Lösche einfach params[] oben als Parameter von dem Befehl also anstatt:


    ocmd:bla(playerid,params[])


    //Nur schreiben:
    ocmd:bla(playerid)


    mfg. :thumbup: