Beiträge von zabus

    ja musst du suchen... du hast die klammer irgendwo geöffnet aber nicht mehr geschlossen , such am besten da wo du als letztes gescriptet hast

    zeig mal wie du die sachen aus der datei rausliest ... oder mach einfach zu test einen debug befehl z.B:
    dcmd_debug(playerid,params[])
    {
    new string[128];
    format(string,sizeof(string),"Wohnort:%s Alter:%d",pInfo[playerid][pWohnort],Alter);
    SendClientMessage(playerid,COLOR,string);
    return 1;
    }


    wenn da nix kommt dann weißt du dass ein fehler beim rauslesen(aus der datei in die variable) ist ...

    26 errors = Klammerfehler du hast vergessen so eine } klammer zu machen
    und das nächste mal die SUFU benutzen und Regeln lesen !

    Hallo leute in diesem Tutorial will ich euch den Timestamp vorstellen , vor allem Beispiele wie man ihn sinnvoll in einem Gamemode benutzen kann.


    Zuerst mal was ist ein Timestamp(Zeitstempel) ?


    Ein Timestamp zu deutsch Zeitstempel genannt ist nichts anderes als ein Datum das was in einem bestimmten Format angegeben wird .
    Ja ok ein datum ? Super oder ^^ ... natürlich muss auch gesagt werden welches Datum ? Es wird bei bestimmten Ereignissen benutzt ein gutes Beispiel ist z.B: ein Textdokument auf euren PC
    hier habt ihr einen Zeitstempel wann das Dokument das letzte mal Bearbeitet worden ist , oder wann es erstellt worden ist u.s.w ....
    Ich hoffe ihr versteht was ich meine ;)


    Viele fragen euch sicher was euch so ein Timestamp hilft ... doch ich werde euch hier von einem bestimmten Timestamp erzählen
    Das ist der Unix-Timestamp(Unixzeit) , dieser Timestamp kennzeichnet den tag 1970 1.Januar 00:00 Uhr er wird in Sekunden angeben .
    Ihr fragt euch sicher wie das gemeint ist , ganz einfach es sind die Sekunden von 1970 bis jetzt .


    Wie kann man den Unix-Timestamp sinvoll in einem Gamemode nutzen ?


    Zuerst ein mal hier ein gutes Beispiel .
    Der Spieler X darf einmal pro "echte" stunde den befehl /selbstmord eingeben . Manche würden hierzu ein Timer nehmen .
    Aber wenn der Server off geht dann ist ende im gelände und der timer ist weg. Also können wir hier gemütlich den Timestamp nutzen
    Hier das beispiel:
    Zuerst brauchen wir mal ne timestamp funktion , wir nutzen wie gesagt die Unix Timestamp funktion .Jetzt fragen sich viele warum,
    ganz einfach weil diese sehr verbreitet ist und z.B: auch in php seinen einsatz findet(wenn ihr z.B ein gamemode mit euren ucp verwendet wollt und dem spieler anzeigen lassen wollt wann er das nächste mal /selbstmord benutzen kann)
    Hier die funktion (credits an mabako)


    stock mktime(hour,minute,second,day,month,year)
    {
    new timestamp2;


    timestamp2 = second + (minute * 60) + (hour * 3600);


    new days_of_month[12];


    if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) {
    days_of_month = {31,29,31,30,31,30,31,31,30,31,30,31}; // Schaltjahr
    } else {
    days_of_month = {31,28,31,30,31,30,31,31,30,31,30,31}; // keins
    }
    new days_this_year = 0;
    days_this_year = day;
    if(month > 1) { // No January Calculation, because its always the 0 past months
    for(new i=0; i<month-1;i++) {
    days_this_year += days_of_month[i];
    }
    }
    timestamp2 += days_this_year * 86400;


    for(new j=1970;j<year;j++) {
    timestamp2 += 31536000;
    if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) timestamp2 += 86400; // Schaltjahr + 1 Tag
    }


    return timestamp2;
    }


    stock Now()
    {
    new hour,minute,second,year,month,day;
    gettime(hour, minute, second);
    getdate(year, month, day);
    return mktime(hour,minute,second,day,month,year);
    }


    also bekommen wir mit Now() den aktuellen Unix-Zeitstempel


    so jetzt brauchen wir ne Variable für den Spieler , das machen wir ganz oben


    mit new NextKill[MAX_PLAYERS];


    so und für den befehl nutze ich mal ocmd(danke kleiner_opa )


    ocmd:selbstmord(playerid,params[])
    {
    if(Now()<NextKill[playerid]) return SendClientMessage(playerid,COLOR,"Sie können nur alle 60Minuten /selbstmord machen!");//jetzt überprüfen wir ob NextKill größer als der der Aktuelle Zeitstempel ist , wenn ja sind die 60 minuten noch nicht um
    NextKill[playerid]=Now()+3600;//Hier zählen wir die 60Minuten dazu (in Sekunden natürlich)
    SetPlayerHealth(playerid,0);
    SendClientMessage(playerid,COLOR,"Du hast selbstmord begangen!");
    return 1;
    }


    Jetzt müsst ihr natürlich den NextKill wert irgendwo speichern , damit er noch vorhanden ist wenn der Spieler Off geht



    so das war ein beispiel von vielen !
    Man kann es auch z.B; bei einem Taxi fahrer machen wo man die "Abrechnung" in sekunden macht , oder bei einem WaffenTransport der nur einmal pro tag gehen soll u.s.w
    Der Vorteil ist ein Timestamp verbraucht keine Ressourcen ,man braucht dazu nur eine Variable im Gegensatz zu einem Timer der sehr viel Ressourcen braucht.


    Ich hoffe , dass ich euch hier den Timestamp gut erklärt habe und ihr ihn öfters nutzen werdet , ich bedanke mich auch bei php_exec der mir den Timestamp so gut und ausführlich gezeigt hat.

    ocmd:invite(playerid,params[])
    {
    new pID;
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,COLOR,"Benutzung invite [PLAYER] ");
    if(Spieler[playerid][Leader]==0) return SendClientMessage(playerid,COLOR,"Sie sind kein Leader");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR,"Spieler nicht online");
    Spieler[pID][Fraktion]=Spieler[playerid][Fraktion];
    return 1;
    }


    btw: mehr infos das nächste mal ....über deine variablen

    static gleader kann weg .....weil du es schon im enum hast


    da du nicht geschrieben hast ob du dcmd oder etwas anderes benutzt mache ich es mal in ocmd...


    ocmd:makeleader(playerid,params[])
    {
    new pID,fID;
    if(sscanf(params,"ud",pID,fID)) return SendClientMessage(playerid,COLOR,"Benutzung: makeleader [ID] [FraktionsID]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR,"Spieler nicht online!");
    Spielerinfo[pID][Leader]=fID;
    return 1;
    }


    und ich hab keine Ahnung was du mit dem speichern meinst ...

    Zitat

    versuche es mal umzunnene (kleinschrift)


    du bist glaub ich mehr auf koks , wenn du die 2 warnings weg haben willst hast du 2 Möglichkeiten
    1. Irgendwo benutzen
    2. #undef [VARIABLE]


    edit:verbessert

    if(strcmp(strget(cmdtext,0), "/port", true) ==0)
    {
    if(!strlen(strget(cmdtext,1))) return SendClientMessage(playerid, FARBE_WEISS, "Benutze: /port [ort]");
    new i;
    for(;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i))
    {
    new txt[256];
    txt = strval(strget(cmdtext,1));
    if(strcmp(txt,"pns",true)==0)
    {
    SetPlayerPos(i, 1025.2003,-1032.2845,31.9213);
    }
    }
    }
    return 1;
    }


    edit:als pwn code makiert

    da du keine weiteren angaben gemacht hast , mache ich es mal mit ocmd+sscanf und du hast auch nicht die Sufu benutzt ;)


    ocmd:setteam(playerid,params[])
    {
    new pID,fID;
    if(sscanf(params,"ud",pID,fID)) return SendClientMessage(playerid,COLOR,"Benutzung: /setteam [ID] [FraktionsID]");
    Team[pID]=fID;//sorry übersehen ^^
    return 1;
    }
    edit1: verbessert
    edit2: nochmal verbessert

    sorry aber das ist lächerlich , so ein Tutorial zu machen , das ist eher ein codeschnipsel oder sonstwas


    Zitat

    strcmp(cmd = hier sagen wird das es ein command gibt


    epic fail ... wenn du es schon erklärst dann auch richtig , strcmp vergleicht 2 Strings also kommt deine Erklärung gar nicht hin



    omg , ich kann da auch return 2 eingeben oder 5 ... er wiederholt es nicht 1 mal sondern er gibt 1 zurück und das macht man nicht um ein Befehl zu "beenden" sondern bei commands macht man das ,damit er "Unkown Command" nicht ausgibt sonst hat es hier keine größere Bedeutung .


    Bitte lern zuerst selber die Basics bevor du ein Tutorial schreibst , wo du neue Spieler nur mehr verwirrst .....


    edit:verbessert
    edit2: verbesser

    tor1 = CreateObject(Object id,2720.501953125 , -2409.619140625, 12.560000419617, 0, 0,90 );


    für Object ID muss die ID des Objektes einfügen was du erstellen willst , ist ja logisch -.-