Beiträge von BlackLegend

    Sprites zu benutzen ist relativ einfach, sie werden genauso wie Textdraws erstellt, nur dass man als Text den Namen des Sprites angeben und den Font auf "4" einstellen muss.


    Beispiel:


    new Text:Sprite = TextDrawCreate(72.0, 197.0, "LD_BEAT:circle");
    TextDrawFont(Sprite , 4);


    Die Namen der Sprites findet ihr mithilfe des von Logan_Adams bereits genannten Tools.
    Falls jemand ein erweitertes Tutorial benötigt, verweise ich hier mal aufs englische Forum:
    -> http://forum.sa-mp.com/showthread.php?t=320117


    Hoffe ich konnte helfen.




    BlackLegend

    Schau mal hier (http://pc-eagle.de/) vorbei, da findest du sicherlich was.


    Ist nicht für PC geplant, kann man nur vorbestellen ... weil PC auch nicht die beste Rechenleistung hat (im Vergleich zu XBox 360 und PS3)
    http://www.amazon.de/Rockstar-…TF8&qid=1353002171&sr=8-2



    GTA V wurde noch nicht für den PC angekündigt, ich gehe aber mal stark davon aus, dass dies wieder ein paar Monate nach Veröffentlichung der Konsolenversionen erfolgen wird.
    Die Gründe warum die PC Version oft erst später als die Konsolenversionen rauskommt, sind schlicht und einfach einerseits die Portierung (wobei das von der XBox zum PC noch leichter ist als zum Beispiel von der PS3 zum PC) und anderseits natürlich, dass auf dem PC viel mehr möglich ist als auf einer Konsole (bessere Grafik, bessere Shader, usw.), da selbst ein etwas älterer PC noch eine wesentlich bessere
    Leistung als zum Beispiel die XBox 360 hat. Deine Aussage, das PC´s nicht gerade die beste Rechenleistung haben, ist also einfach falsch, zum Vergleich: die XBox 360 besitzt ungefähr 512 MB RAM sowie einen ATI Grafikchip mit ungefähr 500 MhZ. Soviel zum Thema GTA V und PC.


    Back to Topic:
    Ich würde dir die Firma Medion empfehlen, weil dort das Preisleistungsverhältnis meiner Meinung nach sehr gut ist.


    Hier mal einer als Beispiel: http://www.medion.com/de/prod/…R%C2%AE+X5368+D/210017061


    Der packt locker jedes Spiel auf maximalen Einstellungen, auch wenns nicht umbedingt nen Core i7 sein muss.



    BlackLegend

    Soweit ich weiß, geht dies unter Linux nicht so ohne weiteres.
    Was du aber machen könntest wäre, dir mit PHP und der SampRconAPI etwas eigenes zu basteln,
    entweder in ein Programm, welches auf die PHP Datei zugreifen kann, einbauen oder eben via Webinterface.




    BlackLegend

    Das liegt daran, dass du nicht alle verfügbaren Fahrzeugslots durchgehst, sondern nur den 1. und den 2. (0 und 1).
    Du solltest hier mit einer for-Schleife arbeiten:


    if (strcmp("/carlist", cmdtext, true)==0)
    {
    new bool:hasCar = false;
    for(new i = 0; i < MAX_PLAYER_CARS; i++)
    {
    if(Dtc_PlayerHaveCar[playerid][i])
    {
    SendClientMessage(playerid,0xFFFFFFFF,">> Carliste <<");
    format(string,sizeof(string),"Fahrzeug: %s || Kennzeichen: %s",CarName[PlayerCar[playerid][i][CarModel]-400],PlayerCar[playerid][i][Nummernschild]);
    SendClientMessage(playerid,0x00FFFFFF,string);
    SendClientMessage(playerid,0xFFFFFFFF,">> Carliste <<");
    if(!hasCar){hasCar = true;}
    }
    }
    if(!hasCar)
    {
    SendClientMessage(playerid,0xFF0000FF,"Du hast garkein Fahrzeug!");
    }
    return 1;
    }



    "MAX_PLAYER_CARS" müsstest du noch durch deine Definierung für die Maximale Anzahl an Fahrzeugen ersetzen.
    Aber du solltest es damit nicht übertreiben, Samp 0.3e unterstützt nur 2000 Fahrzeuge, Bei mehr als 200 Spielern wirds
    also problematisch, wenn du noch andere Fahrzeuge verwenden möchtest (Fraktionsfahrzeuge usw.).



    BlackLegend

    Das ist kein Fehler, dir wird nur der Speicherverbrauch deines Scriptes angezeigt.
    Das ist bei größeren Scripten, bzw. Scripten mit vielen/großen Variablen Standart,
    darum brauchst du dir keine Sorgen zu machen.




    BlackLegend

    Hier, so sollte das funktionieren:


    SpielerInfo[playerid][Score1] += 1;
    new zeitstring[64];
    SpielerInfo[playerid][rennen] = 3;
    GameTextForPlayer(playerid, "~r~Finish", 2000, 1);
    new rtime,minutes,sek;
    rtime = GetTickCount() - rzeit[playerid];
    minutes=rtime/60000;
    rtime-=(60000*minutes);
    sek=rtime/1000;//sekunden
    rtime-=(sek*1000);
    format(zeitstring,128,"Deine zeit: %02d:%02d",minutes,sek);
    GameTextForPlayer(playerid,zeitstring,3000, 1);


    new string[64];
    new read[128];
    new File:hFile = fopen("Topscore.txt", io_read);
    fread(hFile, string);
    while(fread(hFile,read))
    {
    format(string,sizeof (string), "%s%s",string,read);//Auslesen der alten Bestzeit, es sollte nur eine Zeile in der Datei stehen.
    }
    fclose(hFile);


    TextDrawSetString(Textdraw2, string);


    new time1, time2, CharIndex, tmpString[64];
    while(string[CharIndex] != ':'){CharIndex++;}
    CharIndex++;//Überspringen des ersten ':'
    while(string[CharIndex] != ':'){CharIndex++;}
    CharIndex += 2;//Überspringen des zweiten ':' und des Leerzeichens
    while(string[CharIndex] != ':'){format(tmpString, sizeof(tmpString), "%s%c", tmpString, string[CharIndex]);CharIndex++;}//Parsen der Minuten
    time1 = strval(tmpString);//Speichern der Minuten
    CharIndex++;
    while(string[CharIndex] >= '0' && string[CharIndex] <= '9'){format(tmpString, sizeof(tmpString), "%s%c", tmpString, string[CharIndex]);CharIndex++;}//Parsen der Sekunden
    time2 = strval(tmpString);//Speichern der Sekunden


    if(time1 < minutes || (time1 == minutes && time2 < sek))// Neue Bestzeit
    {
    new entry[256];
    new pName1[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pName1,sizeof(pName1));
    format(entry, sizeof(entry), "Name: %s Zeit: %d:%d\n",pName1,minutes,sek);
    new File:hFile;
    hFile = fopen("Topscore.txt", io_write);
    fwrite(hFile, entry);
    fclose(hFile);
    }
    SpawnPlayer(playerid);


    Arbet von ca. zwei Minuten, hoffe du kannst damit etwas anfangen.


    BlackLegend


    (e): Code überarbeitet

    if(IsPlayerInRangeOfPoint(playerid, range, x, y, z) || IsPlayerInRangeOfPoint(playerid, range, x, y, z) || IsPlayerInRangeOfPoint(playerid, range, x, y, z))


    || steht für oder, so kannst du in einer Abfrage mehrere Bedingungen unterbringen.




    BlackLegend

    Sollte so funktionieren:


    ocmd:f(playerid,params[])
    {
    new result[128];
    if(sscanf(params,"s[128]",result)) return SendClientMessage(playerid,Grau, "Benutze: /f(raktion) [Text]");

    new resultstring[256];
    new Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, sizeof(Name));
    new member = SpielerInfo[playerid][pFraktion];
    if(SpielerInfo[playerid][pFraktion]!=0)
    {
    if(member==1)
    {
    if(SpielerInfo[playerid][pFrakrang] == 7) { format(resultstring, sizeof(resultstring), "Captain %s: %s", Name, result); }
    else if(SpielerInfo[playerid][pFrakrang] == 6) { format(resultstring, sizeof(resultstring), "Lieutnant %s: %s", Name, result); }
    else if(SpielerInfo[playerid][pFrakrang] == 5) { format(resultstring, sizeof(resultstring), "Oberkommissar %s: %s", Name, result); }
    else if(SpielerInfo[playerid][pFrakrang] == 4) { format(resultstring, sizeof(resultstring), "Kommissar %s: %s", Name, result); }
    else if(SpielerInfo[playerid][pFrakrang] == 3) { format(resultstring, sizeof(resultstring), "Bewährungshelfer %s: %s", Name, result); }
    else if(SpielerInfo[playerid][pFrakrang] == 2) { format(resultstring, sizeof(resultstring), "Officer %s: %s", Name, result); }
    else if(SpielerInfo[playerid][pFrakrang] == 1) { format(resultstring, sizeof(resultstring), "Cadet %s: %s", Name, result); }
    }
    else if(member==2)
    {
    if(SpielerInfo[playerid][pFrakrang] == 7) { format(resultstring, sizeof(resultstring), "Director %s: %s", Name, result); }
    else if(SpielerInfo[playerid][pFrakrang] == 6) { format(resultstring, sizeof(resultstring), "Deputy Director %s: %s", Name, result); }
    else if(SpielerInfo[playerid][pFrakrang] == 5) { format(resultstring, sizeof(resultstring), "Supervisor %s: %s", Name, result); }
    else if(SpielerInfo[playerid][pFrakrang] == 4) { format(resultstring, sizeof(resultstring), "Elite Agent %s: %s", Name, result); }
    else if(SpielerInfo[playerid][pFrakrang] == 3) { format(resultstring, sizeof(resultstring), "Special Agent %s: %s", Name, result); }
    else if(SpielerInfo[playerid][pFrakrang] == 2) { format(resultstring, sizeof(resultstring), "Professional Agent %s: %s", Name, result); }
    else if(SpielerInfo[playerid][pFrakrang] == 1) { format(resultstring, sizeof(resultstring), "Agent %s: %s", Name, result); }
    }
    for(new i; i<MAX_PLAYERS; i++)
    {
    if(SpielerInfo[i][pFraktion])
    {
    SendClientMessage(i, ChatGreen, resultstring);
    }
    }
    }
    return 1;
    }


    Sscanf gibt bei keinem Fehler 0 zurück, bei einem Fehler 1.
    Also wenn ein Fehler auftritt, wird dem Spieler eine Nachricht ausgegeben und gleichzeitig der Rückgabewert der Funktion "SendClientMessage" zurückgegeben.
    Das heißt, der Code danach wird nicht mehr ausgeführt.



    BlackLegend


    (e): Code eingerückt.

    Oben im Script:


    new players;


    Und dann wird bei OnPlayerConnect und OnPlayerDisconnect die Variable entweder erhöht oder erniedrigt und ggf. eine Nachricht ausgegeben:


    public OnPlayerConnect(playerid)
    {
    players++;
    new string[64];
    format(string, sizeof(string), "Es sind %d Spieler online.", players);
    SendClientMessage(playerid, Farbe, string);
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    players--;
    }



    BlackLegend

    Es gibt aber auch Anticheatsysteme, die einfach die bereits vorhandenen Funktionen überschreiben,
    also SetPlayerPos bleibt SetPlayerPos. Zum Beispiel Junkbuster nutzt diese Funktion.
    Ist meiner Meinung nach sinnvoller und besser, als andere Funktionen zu benutzen (SS_SetPlayerPos usw.).




    BlackLegend


    (e) Fehler korrigiert.

    Da hat es schon ganz anderes gegeben, z.B. Handbuch mit der Seriennummer vergessen oder Ähnliches.
    Passiert halt im Massenbetrieb.
    Da hilft dir nur, wie schon erwähnt wurde, der Gang zu Media Markt und umtauschen.
    Die CD an sich gibt es 100%ig zum Downloaden, dies wäre aber illegal, da auch die anderen CD´s gedownloadet werden könnten
    und das Spiel dann, ohne es gekauft zu haben, gespielt werden könnte.



    BlackLegend

    Aber für 800€ aufjedenfall zu schlecht.
    Da kriegst du für dasselbe Geld was besseres.
    Würde dir in diesem Fall davon abraten, den PC zu kaufen.




    BlackLegend

    Welche Zeile betrifft denn den Fehler?
    Ausserdem solltest du die 4 auf 6 ändern.
    Denn der 2. Teil des Arrays gibt an, aus wievielen einzelnen Werten ein Teil des Arrays besteht:


    new Float:RandomBaum[][6]=
    {
    {1524.6999511719, -1659, 12.39999961853, 90, 186.41931152344, 265.58071899414},
    {1524.2998046875, -1713, 12.5, 90, 173.185546875, 278.80847167969},
    {1525.19921875, -1692, 12.39999961853, 90, 186.96418762207, 265.02987670898},
    {1525.0999755859, -1630.8000488281, 12.39999961853, 90, 186.26092529297, 265.73315429688}
    };


    BlackLegend

    forward hacktimer(playerid);
    public hacktimer(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,2496.3586,2778.2888,10.8203))
    {
    MoveObject(tor[0],2498.19995117,2772.89990234,19.50000000,5);
    SendClientMessage(playerid,BLAU,"Du hast erfolgreich das Mafiator gehackt");
    DisablePlayerCheckpoint(playerid);
    }
    else if(IsPlayerInRangeOfPoint(playerid,5.0,2334.3945,2439.9675,6.0607))
    {
    MoveObject(tor[1],2335.10009766,2443.50000000,7.09999990-10,5);
    SendClientMessage(playerid,BLAU,"Du hast erfolgreich das Polizeitor gehackt");
    DisablePlayerCheckpoint(playerid);
    }
    else
    {
    SendClientMessage(playerid,ROT,"Da du nicht im Checkpoint geblieben bist wurde der hack abgebrochen");
    DisablePlayerCheckpoint(playerid);
    }


    return 1;
    }



    BlackLegend