Beiträge von Kaliber

    Ja, das kannst du z.B. so machen:


    enum SpielerEnum //Das hast du bestimmt schon
    {
    pPremium, //Das da einfach reinmachen und abspeichern
    };



    //Da wo du Premium vergibst:
    new tage,pID;
    if(sscanf(params,"ud",pID,tage)) return...;
    SpielerInfo[pID][pPremium] = gettime()+60*60*24*tage; //28,30,31 Tage wäre z.B. 1 Monat


    //Dann da wo du deinen Account Laden lässt:
    if(gettime() > SpielerInfo[playerid][pPremium] && SpielerInfo[playerid][pPremium] != 0)
    {
    SpielerInfo[playerid][pPremium] = 0;
    SCM(playerid,-1,"Dein Premium Account ist ausgelaufen!");
    }


    Ich hoffe du hast den Ansatz so grob verstanden :)


    mfg. :thumbup:


    //Edit: Rechtschreibfehler

    Ich habe bereits alles versucht, aber die werden einfach nicht geladen. An was könnte das liegen???


    Nun, mach mal evtl einen print-Debug (evtl sind die Koordinaten alle auf 0)...


    Wenn da gar nichts aufgerufen wird, hau mal das crashdetect Plugin rein, vielleicht hast du einen Run Time Error...


    Oder dieser Codeblock wird gar nicht erst aufgerufen :)


    mfg. :thumbup:

    Ich hoffe ihr könnt helfen... :/


    Hier mal ganz grob:


    enum e_Eis {
    e_Preis,
    e_ID
    };
    new eis_verkauf[MAX_PLAYERS][e_Eis];


    #define Eis_Reset(%0) eis_verkauf[%0][e_ID]=-1


    //Unter OnPlayerConnect
    eis_verkauf[playerid][e_ID] = -1;


    //gebeeis
    new pID,preis;
    if(sscanf(params,"ud",pID,preis)) return Verwendung /gebeeis [ID][Preis];
    if(!IsPlayerConnected(pID)) return SCM(playerid,-1,"Spieler nicht connected!");
    if(!InRange(playerid,pID,15.0)) return SCM(playerid,-1,"Dieser Spieler ist nicht in deiner Nähe!");
    eis_verkauf[pID][e_Preis] = preis;
    eis_verkauf[pID][e_ID] = playerid;


    //eisannehmen
    if(eis_verkauf[playerid][e_ID] == -1) return SCM(playerid,-1,"Dir hat niemand ein Eis angeboten!");
    if(GetPlayerMoney(playerid) < eis_verkauf[playerid][e_Preis]) return SCM(playerid,-1,"Nicht genug Geld!");
    if(!InRange(playerid,eis_verkauf[playerid][e_ID],15.0)) //Impliziert !IsPlayerConnected
    {
    SCM(playerid,-1,"Der Verkäufer ist nicht in deiner Nähe!");
    return Eis_Reset(playerid);
    }
    GivePlayerMoney(playerid, -eis_verkauf[playerid][e_Preis]);
    //Gib ihm hier ein Eis
    //Nachricht senden...
    Eis_Reset(playerid);
    return 1;


    //Edit: Hier noch die InRange Funktion
    stock InRange(playerid,pID,Float:x) {
    new Float:p[3];
    GetPlayerPos(pID,p[0],p[1],p[2]);
    return IsPlayerInRangeOfPoint(playerid,x,p[0],p[1],p[2]);
    }


    mfg. :thumbup:

    Run time error 4: "Array index out of bounds"


    Genau das dachte ich mir ^^


    Da hast du deinen Fehler, jetzt mach einen print-Debug in der PayDay Funktion bzw evtl weißt du ja, welches Array exakt 16 cells hat...und such dir da den Fehler :)


    Nur zur Verdeutlichung, der Fehler wird durch folgendes verursacht:


    new test[16];
    test[17] = 5; //Hier ist der Fehler


    mfg. :thumbup:

    Der PayDay wird garnicht nach den 60min aufgerufen...


    Dann verwendest du nicht unseren Code...oder es kommt zu einem Run Time Error...(benutzte mal das crashdetect Plugin).


    Den Timer hast du auch nur auf einer Minute gestellt, das weißt du schon oder?


    Ist ja auch richtig...weil pro Minute ++..und 60 Minuten = 1ne Stunde :D


    mfg. :thumbup:

    Schreib es so:


    public ServerMinute()//Dieser Public wird jede Minute aufgerufen
    {
    for(new i; i < MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
    PlayerInfo[i][pPayDayZeit]++;
    if(PlayerInfo[i][pPayDayZeit] == 60) PayDay(i),PlayerInfo[i][pPayDayZeit] = 0;
    }
    return 1;
    }


    mfg. :thumbup:

    Ich hab gerade mal einen Code geschrieben um einen String zu verschlüsseln und dann wieder zu entschlüsseln.


    Im Prinzip nichts großartiges, doch wenn man in einer Datei z.B. etwas speichern will, was nicht jeder lesen soll und aber trotzdem wieder im Klartext haben will, ist es ganz praktisch:


    static stock const c_v[] = { 0xFBCAE, 0xDFC, 0xA8D, 0xAFECB };


    stock Crypt(string[]) {
    for(new i,l=strlen(string),tmp[2]; i<l; i++) {
    format(tmp,sizeof tmp,"%c",string[i]+c_v[0]+(c_v[1]*c_v[2])+c_v[3]+(l*i));
    string[i] = tmp[0];
    }
    return 1;
    }


    stock DeCrypt(string[]) {
    for(new i,l=strlen(string),tmp[2]; i<l; i++) {
    format(tmp,sizeof tmp,"%c",string[i]-c_v[0]-(c_v[1]*c_v[2])-c_v[3]-(l*i));
    string[i] = tmp[0];
    }
    return 1;
    }


    Hier ein Beispiel:


    new string[] = "Hallo Welt";
    Crypt(string);
    print(string);
    DeCrypt(string);
    print(string);


    Das sieht dann so aus:



    //Edit:
    Hier nochmal ein paar mehr Beispiele:




    Also, viel Spaß damit :)


    //Edit²: Rechtschreibfehler


    mfg. :thumbup:

    Könnte mir jemand helfen die fehler zu beheben?


    Nun, anscheinend nutzt du folgende Funktion:


    mysql_store_result


    Aber er kann sie nicht richtig ausführen, weil entweder dein Query irgendwas total verrücktes ist oder du einen Crazy Wert dem Connection-Handle gegeben hast ^^


    Evtl postest du mal deinen Code :)


    (Wenn du nicht weißt, welchen Code er da abruft, arbeite mit print-Debugs um das zu ermitteln)


    mfg. :thumbup:

    so kannst du ihm wenigstens den trick mit der schleife posten


    Hab den Thread gar nicht gelesen gehabt...ups ^^


    Die Schleife, kannst du so schöner schreiben, da musst du nur 1x auf den TAG achten:


    for(new SpielerDaten:i; i != SpielerDaten; ++i) SpielerInfo[playerid][i] = 0;


    mfg. :thumbup:

    format(SpielerInfo[playerid][pHerkunft], 32, "");


    Nur kurz nebenbei, dass ist keine schöne Art einen String zu clearen.


    In Pawn, kann man das sehr gut mit dem NULL Byte einfach machen:


    SpielerInfo[playerid][pHerkunft][0] = '\0';


    So und nun wäre dein String leer :)


    mfg. :thumbup:

    Schreib mal bei OnPlayerRequestClass ganz oben hin:


    //Unter OnPlayerRequestClass
    if(IsPlayerNPC(playerid)) return SetSpawnInfo(playerid,0,253,0,0,3,0,0,0,0,0,0,0),SpawnPlayer(playerid);


    und bei dem Code, schreib mal ein return 1 dahin:


    if(IsPlayerNPC(playerid))
    {
    new botname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, botname, sizeof(botname));
    if(!strcmp(botname, "DERDRIFTER", true))
    {
    SetPlayerSkin(playerid,253);
    PutPlayerInVehicle(playerid, AdCVehicle, 0);
    }
    return 1; //Das ist wichtig :D
    }


    mfg. :thumbup:

    Kann uns jemand helfen?


    Der Crash kommt dann, sobald ein bestimmter Dialog angezeigt bzw abgesendet wird.


    Du solltest ziemlich einfach herausfinden, welcher Dialog das ist und dann mal den Code posten, den du so verwendest :)


    mfg. :thumbup:

    Einfach sowas:


    mfg. :thumbup: