Beiträge von Jeffry

    Meinst du sowas wie in dem Video?

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Dann musst du diesen FS verwenden:
    http://forum.sa-mp.com/showthread.php?t=330879



    Oder hier noch eine Auswahlmöglichkeit: http://forum.sa-mp.com/showthread.php?t=329813

    Alles vorherige ist falsch, da keines davon die "0" als Eingabe akzeptiert. Mag sein, dass niemand 0 Jahre alt ist, aber jemand mag dies vielleicht für etwas anderes benötigen, wo eine 0 logisch ist.


    So ist es korrekt und funktionsfähig:
    case DIALOG_ALTER:
    {
    if(response)
    {
    if (!IsNumeric(inputtext) || (strval(inputtext) < 0 || strval(inputtext) > 99))
    {
    ShowPlayerDialog(playerid,DIALOG_ALTER,DIALOG_STYLE_INPUT,"Bitte gib dein Alter an","Bitte tippe dein Alter in das,\nuntere Feld ein.","Absenden","Abbrechen");
    return 1;
    }
    new string[124],spieler[MAX_PLAYER_NAME];
    GetPlayerName(playerid,spieler,MAX_PLAYER_NAME);
    format(string,sizeof(string),"Du hast angegeben das du {41FF00}%d Jahre alt bist.",strval(inputtext));
    SendClientMessage(playerid,REGIFARBE,string);
    SpielerInfo[playerid][pAlter] = strval(inputtext); //pAlter ist sicher ein Integer, alles andere wäre sinnlos.
    }
    else return ShowPlayerDialog(playerid,DIALOG_ALTER,DIALOG_STYLE_INPUT,"Bitte gib dein Alter an","Bitte tippe dein Alter in das,\nuntere Feld ein.","Absenden","Abbrechen");
    }



    stock IsNumeric(string[])
    {
    for (new i = 0, j = strlen(string); i < j; i++)
    {
    if ((string[i] > '9' || string[i] < '0')) return 0;
    }
    return 1;
    }

    if (strcmp("/gotobsn", cmdtext, true, 10) == 0)
    {
    if(isPlayerAnAdmin(playerid,3))
    {
    SetPlayerPos(playerid,1189.6290,-924.1056,43.1300);
    SendClientMessage(playerid,WEIß,"Erfolgreich teleportiert!");
    return 1;
    }
    else if(isPlayerAnAdmin(playerid,4))
    {
    SetPlayerPos(playerid,1189.6290,-924.1056,43.1300);
    SendClientMessage(playerid,WEIß,"Erfolgreich teleportiert!");
    return 1;
    }
    else if(isPlayerAnAdmin(playerid,5))
    {
    SetPlayerPos(playerid,1189.6290,-924.1056,43.1300);
    SendClientMessage(playerid,WEIß,"Erfolgreich teleportiert!");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du bist kein Admin.");
    return 1;
    }
    }
    return 0; //Das hier fehlte...
    }
    //-----------------------------------------------OCMD Befehle------------------------------------------------
    ocmd:makeleader(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,3))return SendClientMessage(playerid,ROT,"Rang zu Niedrig.");
    new pID,fID;
    if(sscanf(params,"ui",pID,fID))return SendClientMessage(playerid,BLAU,"/makeleader [playerid] [fraktionsid]");
    SetPVarInt(pID,"Fraktion",fID);
    SendClientMessage(playerid,BLAU,"Erfolgreich.");
    return 1;
    }

    Wegen den Errors: Setzte in deiner server.cfg das crashdetect Plugin an die letzte Stelle.


    Wenn der Server wegen den scriptfiles abstürzt, dann liegt es wohl daran, dass ein Ordner bzw. eine Datei aufgerufen wird, der/die nicht existiert. Prüfe deine Pfade.

    Spieler-Variable instantiieren: Oben im Code
    new Text:FPSTextDraw[MAX_PLAYERS] = {Text:-1, ...};


    Textdraw erstellen: OnPlayerConnect
    FPSTextDraw[playerid] = TextDrawCreate(491.000000, 118.000000,"-- FPS");
    TextDrawBackgroundColor(FPSTextDraw[playerid], -1);
    TextDrawFont(FPSTextDraw[playerid], 3);
    TextDrawLetterSize(FPSTextDraw[playerid], 0.529999, 1.600000);
    TextDrawColor(FPSTextDraw[playerid], 65535);
    TextDrawSetOutline(FPSTextDraw[playerid], 0);
    TextDrawSetProportional(FPSTextDraw[playerid], 1);
    TextDrawSetShadow(FPSTextDraw[playerid], 0);
    TextDrawUseBox(FPSTextDraw[playerid], 1);
    TextDrawBoxColor(FPSTextDraw[playerid], 255);
    TextDrawTextSize(FPSTextDraw[playerid], 608.000000, 0.000000);
    TextDrawShowForPlayer(playerid, FPSTextDraw[playerid]);


    Textdraw löschen: OnPlayerDisconnect
    if(FPSTextDraw[playerid] != Text:-1)
    {
    //Textdraw existiert.
    TextDrawDestroy(FPSTextDraw[playerid]);
    FPSTextDraw[playerid] = Text:-1;
    }



    Anzeige: Dort wo du die FPS-Anzeige aktualisierst
    new b1[16];
    format(b1,sizeof(b1),"%d FPS ", pFPS[playerid]);
    TextDrawSetString(FPSTextDraw[playerid],b1);

    !) Die gibt es schon lange. Mir sind keine derartigen Fehler bekannt.


    2) Ja. X und Y ist klar. Z nimmst du einfach einen Wert, egal welchen. Am besten natürlich einen der nahe am tatsächlichen Wert liegt, also jetzt nicht 10000000 reinsetzen, das wäre schlecht.


    3) Weiß ich nicht, ich tippe mal nein. Probier es einfach aus.

    Strichpunkt hinter der if-Abfrage weg, der hat da nichts zu suchen.


    Warnungen sollte ein Code auch nicht haben, ich würde dir dringends raten, diese noch zu beheben.

    Goldkiller: Der Sinn hinter dem Code ist, ein zufälliges, aber noch nicht gespawntes Vehikel zu finden. Wird Beispielsweise 23 ausgewählt, das wurde aber schonmal gespawnt, dann wird 24 versucht, falls das auch schon gespawnt ist, 25, usw. Daher muss 51 der 0 entsprechen, sonst sprengt es das Array bei 51 Autos (0-50).


    Hier der Code für das Aufbrechen:
    if (strcmp("/aufbrechen", cmdtext, true) == 0)
    {
    new Float:vehx, Float:vehy, Float:vehz;
    for(new i=0; i<sizeof(AutodiebCar); i++)
    {
    GetVehiclePos(AutodiebCar[i],vehx,vehy,vehz);
    if(IsPlayerInRangeOfPoint(playerid,1,vehx,vehy,vehz))
    {
    SetTimer("AutodiebAufbrechenT",120000,0);
    break; //beendet die Schleife
    }
    }
    return 1;
    }


    Du hattest vergessen, zu suchen, welches Auto er eigentlich aufbrechen soll.
    Etwas mehr selbstständige Beschäftigung mit einem Code würde sicher nicht schaden. ;)

    Ein funktionierendes Beispiel haste ja jetzt oben, dann probier doch mal, das Beispiel zu übernehmen, sprich format und msg.


    Versuch es, mehr wie scheitern geht nicht. Wenn es nicht klappt, kannst ja immer noch fragen.

    Platzhalter müssen formatiert werden.
    Außerdem musst du auf deine Einrückung achten, das sieht ja aus wie Kraut und Rüben.


    ocmd:setadmin(playerid,params[])
    {
    if(IsPlayerAdmin(playerid))
    {
    new pID, rank, msg[144];
    if(sscanf(params,"ui",pID,rank))return SendClientMessage(playerid,ROT,"/setadmin [spieler] [level] ");
    if(rank<1||rank>5)return SendClientMessage(playerid,ROT,"Bitte gültigen Rang angeben.");
    SetPVarInt(pID,"Adminlevel",rank);
    SpielerSpeichern(pID);
    format(msg, sizeof(msg),"%s hat dein Admin Level auf %i gesetzt.",SpielerName(playerid),GetPVarInt(pID,"Adminlevel"));
    SendClientMessage(playerid,BLAU,msg);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du bist kein Admin.");
    }
    return 1;
    }

    stock SpielerSpeichern(playerid)
    {
    if(GetPVarInt(playerid,"loggedin")==1)
    {
    new name[MAX_PLAYER_NAME], pfad[64];
    GetPlayerName(playerid,name,sizeof(name));
    format(pfad,sizeof(pfad),"/Accounts/%s.txt",name);
    dini_IntSet(pfad,"Level",GetPlayerScore(playerid));
    dini_IntSet(pfad,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(pfad,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
    dini_IntSet(pfad,"Fraktion",GetPVarInt(playerid,"Fraktion"));
    dini_IntSet(pfad,"Baned",GetPVarInt(playerid,"Baned"));
    dini_IntSet(pfad,"timeban",GetPVarInt(playerid,"timeban"));
    dini_IntSet(pfad,"Tode",GetPVarInt(playerid,"Tode"));
    dini_IntSet(pfad,"Kills",GetPVarInt(playerid,"Kills"));
    dini_IntSet(pfad,"Skin",GetPVarInt(playerid,"Skin"));
    }
    return 1;
    }

    Ich bin kein Freund von sscanf und nutze es auch nicht, von daher kann ich dir den Grund nicht genau sagen, aber versuche mal:
    new string[264],pID,Grund[32],Kicker[MAX_PLAYER_NAME],Gekickter[MAX_PLAYER_NAME];
    if(sscanf(params,"us[32]",pID,Grund)) return SendClientMessage(playerid, GRAU,"Benutze: /kick [playerid] [Grund]");


    Falls das nicht tut, nutze strtok anstatt sscanf, das ist (meiner Meinung nach) wesentlich besser, da man mehr Freiheiten hat.

    Spoiler anzeigen
    ocmd:kick(playerid,params[])
    {
    if(Eingeloggt[playerid] == 0) return SendClientMessage(playerid,GRAU,"Du bist nicht eingeloggt.");
    new string[264],pID,Kicker[MAX_PLAYER_NAME],Gekickter[MAX_PLAYER_NAME];
    new tmp[256], tmp2[256], idx;
    tmp = strtok(params, idx); tmp2 = strtok(params, idx);
    if(!strlen(tmp2)) return SendClientMessage(playerid, GRAU,"Benutze: /kick [playerid] [Grund]");
    if(!IsNumeric(tmp)) pID = ReturnPlayerID(tmp);
    else pID = strval(tmp);
    GetPlayerName(pID,Gekickter,MAX_PLAYER_NAME);
    GetPlayerName(playerid,Kicker,MAX_PLAYER_NAME);
    if(SpielerInfo[playerid][pTeam] <= 1)return SendClientMessage(playerid,GRAU,"Dieser Befehl ist für dich nicht verfügbar.");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid, GRAU,"Es ist kein Spieler mit diesem/dieser Name/id online.");
    format(string,sizeof(string),"Supporter %s hat den Spieler %s vom Server gekickt. Grund: %s.",Kicker,Gekickter,params[strlen(tmp)+1]);
    SendClientMessageToAll(GRAU,string);
    Kick(pID);
    return 1;
    }


    Und hier die benötigten Funktionen, falls du sie noch nicht hast:

    Spoiler anzeigen
    //Aus der dutils.inc
    stock strtok(const string[], &index,seperator=' ')
    {
    new length = strlen(string);
    new offset = index;
    new result[256];
    while ((index < length) && (string[index] != seperator) && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }

    Spoiler anzeigen
    result[index - offset] = EOS;
    if ((index < length) && (string[index] == seperator))
    {
    index++;
    }
    return result;
    }

    Spoiler anzeigen
    stock ReturnPlayerID(PlayerName[]) //©Jeffry
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(!strcmp(pName(i),PlayerName, true)) return i;
    }
    }
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(strfind(pName(i),PlayerName,true)!=-1) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }

    Spoiler anzeigen
    stock IsNumeric(string[])
    {
    for (new i = 0, j = strlen(string); i < j; i++)
    {
    if ((string[i] > '9' || string[i] < '0')) return 0;
    }
    return 1;
    }

    Spoiler anzeigen
    ...einfach unten im Code einfügen.

    Auf Anfrage in PM:


    Du hast die VehicleID nirgends gespeichert.



    Unter das Array mit den Auto-Werten:
    new AutodiebCarID[sizeof(AutodiebCar)];


    Command:
    AutodiebCarID[Veh] = CreateVehicle(AutodiebCar[Veh][carid],AutodiebCar[Veh][x],AutodiebCar[Veh][y],AutodiebCar[Veh][z],AutodiebCar[Veh][r],AutodiebCar[Veh][farbe1],AutodiebCar[Veh][farbe2],0);


    Und damit auch:
    if(GetPlayerVehicleID(playerid)==AutodiebCarID[i])