Beiträge von Pablo Borsellino

    Irgendwo in das Script:
    new Level[MAX_PLAYERS];


    Dort, wo sich die Punkte aktualisieren:
    if(Level[playerid]==2&&Spieler[playerid][Punkte]==1000)Level[playerid]++;
    if(Level[playerid]==3&&Spieler[playerid][Punkte]==1500)Level[playerid]++;
    if(Level[playerid]==4&&Spieler[playerid][Punkte]==2000)Level[playerid]++;
    if(Level[playerid]==5&&Spieler[playerid][Punkte]==2500)Level[playerid]++;
    //usw.


    Dort, wo das Textdraw erstellt/aktualisiert wird:
    format(newtext,sizeof(newtext),"Punkte:%d/%d",Spieler[playerid][Punkte],Level[playerid]*500);
    TextDrawSetString(Punkte,newtext);


    Unter OnPlayerConnect:
    if(Level[playerid]<=1)Level[playerid]=2;


    Die Variable Level müsstest du auch speichern, wenn du willst, dass das Level nach Ausloggen behalten wird. Ganz Simple, pro Level braucht man 500 Punkte, du willst bei 1000 Anfangen, also fängt jeder bei Level 2 an. Am besten Level im Enumerator "Spieler" speichern. Beim Verbinden vom Spieler wird überprüft, ob der Spieler unter oder genau Level 1 ist, falls ja, wird er auf Level 2 aufgestuft - da du wiegesagt bei 1000 anfängst.

    dcmd_kick(playerid,params[])
    {
    new Spieler,Grund[256],Text[256];
    if(pInfo[id][padmin]<1)return SendClientMessage(playerid,COLOR_TIMESTAMP,"Du bist kein Admin!");
    if(sscanf(params,"us",Spieler,Grund))SendClientMessage(playerid,COLOR_TIMESTAMP,"Tipp: {FFFFFF}/kick <ID> <Grund>");
    if(!IsPlayerConnected(Spieler))return SendClientMessage(playerid,COLOR_TIMESTAMP,"Info: {FFFFFF}Player wurde nicht gefunden.");
    if(pInfo[id][padmin]>pInfo[playerid][padmin])return SendClientMessage(playerid, grau, "Info: Du kannst diesen Spieler nicht kicken, da er ein höheres Adminlevel hat als du!");
    format(Text,sizeof Text,"Server Info: {FFFFFF}Admin/Mod %s Hat %s gekickt, Grund: %s",GetName(playerid),GetName(Spieler),Grund);
    SendClientMessageToAll(COLOR_TIMESTAMP,Text);
    Kick(Spieler);
    return 1;
    }


    stock GetName(playerid)
    {
    new Name[28];
    GetPlayerName(playerid,Name,28);
    return Name;
    }


    Ich empfehle die Funktion GetName ins Script einzufügen, da es einfach übersichtlicher ist - und man anstatt jedes mal new Name[];, GetPlayerName() etc. nur GetName(playerid) braucht - da diese Funktion den Spielernamen zurückgibt. Mein Befehl kannst du nur benutzen, wenn du sscanf benutzt - dies empfehle ich, damit sind Parameter in Befehlen einfach - einfach zu erstellen.


    Editierung: Sscanf ist ein Plugin, mit vielen nützlichen Funktionien. Lade dir einfach das Plugin hierherunter, schau in den Hauptthreadfür nützliche Funktionen und binde das Plugin ein - fertig ;)

    Ohne den Code (Script Ausschnitt), kann dir hier kaum jemand helfen. Wenn du lieber Fernwartung via TeamViewer o.ä. möchtest - solltest du dies erwähnen. Niemand kann dein Problem lösen, wenn er nicht mal einsehen kann - wo das Problem/der Fehler steckt. Bitte denk nächstes mal daran, den benötigten Code mit zu posten, damit es zu keiner erhöten Wartezeit deiner sowie unserer Seite gibt.


    Du wolltest zwar ein Tutorial, aber dein Versuch hättest du auch posten können - damit wir es dir zeigen könnten, wie es richtig fehlerfrei funktioniert.

    Ich entdecke, bei anschauen das Befehl's keinen Fehler. Doch hier mal eine abgeänderte Version - mit anhang (Falls der Spieler, an keinen dieser Orte ist - wird eine Nachricht gesendet). Dazu kommt, das ich das (soweit ich weiß - ressourcen fressendere IsPlayerToPoint) mit IsPlayerInRangeOfPoint gewechselt habe:
    if(!strcmp(cmd,"/exit",true))
    {
    for(new i=0;i<sizeof(HouseInfo);i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,3,HouseInfo[i][hExitx],HouseInfo[i][hExity],HouseInfo[i][hExitz]))
    {
    SetPlayerInterior(playerid,0);
    SetPlayerPos(playerid,HouseInfo[i][hEntrancex],HouseInfo[i][hEntrancey],HouseInfo[i][hEntrancez]);
    PlayerInfo[playerid][pInt] = 0;
    PlayerInfo[playerid][pLocal] = 255;
    if(HouseInfo[i][hHel] == 1)
    {
    new Float:tempheal;
    GetPlayerHealth(playerid,tempheal);
    if(tempheal < 100.0)
    {
    SetPlayerHealth(playerid,100.0);
    }
    }
    }
    }
    for(new i=0;i<sizeof(BizzInfo);i++)
    {
    if(PlayerToPoint(playerid,3,BizzInfo[i][bExitX], BizzInfo[i][bExitY], BizzInfo[i][bExitZ]))
    {
    SetPlayerInterior(playerid,0);
    PlayerInfo[playerid][pInt] = 0;
    SetPlayerPos(playerid,BizzInfo[i][bEntranceX],BizzInfo[i][bEntranceY],BizzInfo[i][bEntranceZ]);
    PlayerInfo[playerid][pLocal] = 255;
    }
    }
    if(GetPlayerVehicleID(playerid) >= 71 && GetPlayerVehicleID(playerid) <= 77)
    {
    TogglePlayerControllable(playerid, 1);
    RemovePlayerFromVehicle(playerid);
    }
    else if(PlayerToPoint(playerid,3,387.7978,173.8582,1008.3828))
    {
    SetPlayerInterior(playerid,0);
    SetPlayerPos(playerid,-2162.2554,-2385.9541,30.6250);
    PlayerInfo[playerid][pInt] = 0;
    PlayerInfo[playerid][pLocal] = 255;
    }
    else if(PlayerToPoint(playerid,8,-1404.5299,-259.0602,1043.6563))
    {
    SetPlayerInterior(playerid,0);
    SetPlayerPos(playerid,2695.6235,-1704.6960,11.8438);
    }
    else if(PlayerToPoint(playerid,8,-1443.0554,-581.1879,1055.0472))
    {
    SetPlayerInterior(playerid,0);
    SetPlayerPos(playerid,-2111.5686,-443.9720,38.7344);
    }
    else if(PlayerToPoint(playerid,8,-1464.7732,1557.5533,1052.5313))
    {
    SetPlayerInterior(playerid,0);
    SetPlayerPos(playerid,-2080.3079,-406.0309,38.7344);
    }
    else if(NoFuel[playerid] == 1)
    {
    TogglePlayerControllable(playerid, 1);
    RemovePlayerFromVehicle(playerid);
    NoFuel[playerid] = 0;
    }
    else SendClientMessage(playerid,0xAFAFAFFF," Du kannst diesen Befehl (/exit), hier nicht nutzen!");
    return 1;
    }

    Eine kürzere (von meiner Seite aus übersichtlicher, ist halt Geschmackssache) - Version von deinem Befehl, die funktioniert.
    dcmd_eadmin(playerid, params[])
    {
    new id,string[265],Name[MAX_PLAYER_NAME],sendername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,sendername,sizeof(sendername));
    GetPlayerName(id,Name,sizeof(Name));
    if(pInfo[playerid][padmin] >= 6)return SendClientMessage(playerid,tipporange,"Info: {FFFFFF}Du bist kein Admin");
    if (strlen(params))return SendClientMessage(playerid,tipporange, "Tipp: {FFFFFF}/eadmin ");
    id = strval(params);
    if (IsPlayerConnected(id))return SendClientMessage(playerid,tipporange, "Info: {FFFFFF}Player wurde nicht gefunden.");
    pInfo[id][padmin] +=1;
    printf("AdmCmd: %s hat %s zu einem Level %d Admin befördert.", sendername,Name, pInfo[id][padmin]);
    format(string, sizeof(string), " Du wurdest durch %s zu einem Level %d Admin befördert", sendername, pInfo[id][padmin]);
    SendClientMessage(id, tipporange, string);
    format(string, sizeof(string), " Du hast %s zu einem Level %d Admin befördert.",Name,pInfo[id][padmin]);
    SendClientMessage(playerid, tipporange, string);
    return 1;
    }

    Du verwendest einfach mehrere If - Abfragen in einem Befehl d.h. es wird bei Eingabe des Befehls abgefragt ob der Spieler in der nähe von den Koordinaten X,Y,Z sind - wenn nicht dann wird abgefragt ob er an den anderen Koordinaten ist, wenn ja wird der nächste Schritt eingeleitet ;) Ganz simple.

    @Kingston: Sinn? Wofür new timer? Und dann auch noch ohne ; ?


    Einfach unter OnPlayerConnect SetTimer("FunktionsName",Interval,Wiederholung); und dazu die gehörige Funktion und ein forward. Dazu ein Boolean, um abzufragen ob der Timer bereits gestartet wurde - dmait er nur einmal startet, beim ersten der auf den Server joint ;)

    Debug das mal, um zu ermitteln wo der Code genau abschmiert. Pack in jede zweite Zeile print("1"); nur die Zahl aufsteigend, also zwei Zeilen weiter print("2"); etc. dann kompilier das Script und starte den Server, schau in die Konsole und es werden Nummern ausgegeben, diese zeigst du uns und erneut den Code mit dem print("X"); - dann wissen wir genauer wo, der Fehler liegt.

    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate==PLAYER_STATE_DRIVER)
    {
    for(new i=0; i<sizeof(YakuzaCar); i++)
    {
    if(GetPlayerVehicleID(playerid)==YakuzaCar[i]&&pInfo[playerid][Fraktion] !=YAKUZA FRAKTIONS ID&&!isPlayerInFrakt(playerid))
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,ROT,"Du Bist nicht in der Yakuza Gang");
    }
    }
    }
    return 1;
    }


    Editierung:
    Mir fällt auf, das du für deine Code Ausschnitte keinen PWN (Pawn) BB Code verwendest. Um den PWN BB Code anzuwenden, musst du lediglich vor dem Code Ausschnitt [pwn ] ohne Leertaste - und nach dem Code Ausschnitt [/pwn ] ohne Leertaste einfügen. Diese Funktion bietet Übersichtlichkeit, es werden Pawn Operatoren, Kommentare und sonstiges kenntlich gemacht. Dazu ist die Nichtbenutzung dieses BB Codes ein Defizit für eventuell erwartete Hilfe, die so unwahrscheinlicher gegeben wird. Zur Veranschaulichung, wie es ohne/mit PWN BB Code aussieht und die Verwendung verdeutlicht hier eine Grafik: » Klick mich «.