Beiträge von BlackLegend

    Zu 1.: die Tänze 1-3 unterscheiden sich nicht im Anfang, sondern in den Bewegungen, die du als Spieler selbst tun kannst.
    Probier es mal aus: verwende /dance 1 und benutze dann die Tasten "W", "A", "S", "D" und "Leertaste". Probiere dasselbe mit den anderen Tänzen,
    du wirst feststellen, dass sie alle andere Bewegungen bieten.


    Zu 2.: so sollte es funktionieren:


    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_NONE);
    SetPlayerDrunkLevel (playerid, 0);
    ClearAnimations(playerid);
    ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 0, 0);//Es wird einfach eine kurze Animation ausgeführt, die zwar nicht zu sehen ist, die vorherige Animation aber ausser Kraft setzt, diese MUSS nach "ClearAnimations" aufgerufen werden.


    Hoffe ich konnte dir damit helfen.


    BlackLegend


    (e): Code korrigiert.

    Dann schreib mal das:


    new Float:bla = 51.051345;
    bla = floatround(bla);
    printf("%f", bla);
    printf("%0.f", bla);
    printf("%.0f", bla);


    unter OnGameModeInit() in ein Beispielscript.


    Besserwisser solltens besser wissen...
    Aufjedenfall ist die richtige Lösung (und damit b2t) die, die ich bereits gepostet habe.
    Denn er möchte ja erreichen, dass nur die Zahl angezeigt wird, ohne Nachkommastellen,
    er möchte die Zahl nicht runden.


    BlackLegend

    Das war ein Beispiel :whistling: .
    Genauso könnte ich zu dir sagen, dass bei %f alle Stellen angezeigt werden, er aber nur eine will.
    Natürlich kann ers auch einfach zu


    new Float:health, string[50];
    GetPlayerHealth(i,health);
    format(string, sizeof(string), "Health: %.0f",health);


    ändern.....



    BlackLegend

    :whistling:


    new Float:health, string[50];
    GetPlayerHealth(i,health);
    format(string, sizeof(string), "Health: %.2f",health);



    Zum 2. Problem:
    Sieht so aus, als ob da etwas nicht funktioniert und der Compiler abbricht, ich habe da konkret die Variable "Waffenname" im Verdacht.
    Probier mal nach jeweils ein paar Zeilen ein print("0"); zu setzen,
    dann können wir rausfinden, in welcher Zeile der Fehler auftritt.



    BlackLegend

    Du musst zum Passenden Include auch das jewilige Plugin in deinen Plugins Ordner packen
    und dieses dann in die Server.cfg schreiben.
    (Keine Ahnung ob du das hast, aus deinem Text geht nur hervor, dass du die Includes tauscht
    und laut der Fehlermeldung ist das Include ja mit dem Plugin inkompatibel.)



    Zum zweiten Problem:
    SetObjectMaterialText ist so aufgebaut:


    SetObjectMaterialText(objectid, text[], materialindex = 0, materialsize = OBJECT_MATERIAL_SIZE_256x128, fontface[] = "Arial", fontsize = 24, bold = 1, fontcolor = 0xFFFFFFFF, backcolor = 0, textalignment = 0)


    Du kannst alle Parameter weglassen, bis auf die ersten beiden.


    Beispiel:


    OnGameModeInit()
    {
    new Object = CreateObject(....);//Hier dein Object, die Position usw.
    SetObjectMaterialText(Object, "Test");
    }


    So sollte das funktionieren.



    BlackLegend

    Wenn du einen Command aus einem Filterscript aufrufen möchtest, dann geht das nur mit einem Include.
    Um ein Include zu erstellen, erstellst du als erstes eine Datei im Ordner "pawno/include",
    diese nennst du wie du willst und änderst den Dateityp auf ".inc".
    Beispiel: "MeinInclude.inc"



    Dann fügst du das in das Include:



    forward CallFSCommand(playerid, cmdtext[]);
    public CallFSCommand(playerid, cmdtext[])//Funktion zum Aufrufen der Funktion "OnPlayerCommandText" des Filterscripts
    {
    return CallLocalFunction("OnPlayerCommandText", "is", playerid, cmdtext);//Aufrufen der Funktion "OnPlayerCommandText" des Filterscripts
    }


    Dieses Include fügst du ins Filterscript ein, aber nur ins Filterscript, nicht in den Gamemode.


    #include <MeinInclude>


    Jetzt kannst du diese Funktion in OnGameModeInit (oder wo auch immer du möchtest) aufrufen, du musst dabei aber "CallRemoteFunction" verwenden:


    public OnGameModeInit()
    {
    CallRemoteFunction("CallFSCommand", "is", 0, "/feuerwerk");//Aufrufen der Funktion, die die Funktion "OnPlayerCommandText" des Filterscripts aufruft.
    }


    Wobei das ganze wesentlich einfacher und sinnvoller wäre, wenn du den Befehl (und alles was dazu gehört) aus dem Filterscript in den GameMode übertragen würdest.


    BlackLegend


    (e): Verbesserungen vorgenommen.

    Ist doch ganz einfach, deine Funktion funktioniert nicht, weil gettime 3 Parameter hat.
    Der erste ist die Stunde, dann folgt die Minute und zum Schluss die Sekunde.
    Diese kannst du weglassen, dann wird entweder der Zeitstempel, die Stunde, die Stunde und die Minute oder die Stunde, die Minute und die Sekunde (bei 3 übergebenen Parametern) zurückgegeben.
    Da du nur einen Parameter übergeben hast, wird nur die Stunde zurückgegeben, da der erste Parameter, wie gesagt, die Stunde ist.
    So sollte es funktionieren:


    public OnGameModeInit()
    {
    SetTimer("TimeMessage", 60000, 1);//Es wird ein Timer initialisiert, der alle 60 Sekunden die Funktion "TimeMessage" aufruft.
    }



    forward TimeMessage();
    public TimeMessage()
    {
    new Hour, Minute;//Variablen, in der die Stunde und die Minute gespeichert werden
    GetTime(Hour, Minute);//Definieren der Variablen, Hour und Minute erhalten die entsprechenden Werte
    if(Minute == 0)
    {
    new string[32];
    format(string, sizeof(string), "Es ist %d Uhr.", Hour);
    SendClientMessageToAll(COLOR_WEISS, string);
    }
    }



    BlackLegend

    Der Fehler liegt in der Funktion "DeagleEventTimer", dort erhöhst du die Variable "DeagleTime" immer um 1,
    jedoch innerhalb der for-Schleife, heißt also, wenn 1 Spieler am Event teilnimmt, wird die Variable einmal um 1 erhöht.
    Wenn nun aber 2 Spieler am Event teilnehmen, wird die Variable zweimal um 1 erhöht.
    So sollte es funktionieren:



    public DeagleEventTimer()
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(deagleeventteilnehmer[i])
    {
    if(DeagleTime >= 1)
    {
    if(DeagleTime == 2)
    {
    SendClientMessage(i,Hellblau,"Das Event startet in 20 Sekunden.");
    }
    else if(DeagleTime == 7)
    {
    SendClientMessage(i,Hellblau,"Das Event startet in 15 Sekunden.");
    }
    else if(DeagleTime == 12)
    {
    SendClientMessage(i,Hellblau,"Das Event startet in 10 Sekunden.");
    }
    else if(DeagleTime == 19)
    {
    SendClientMessage(i,Hellblau,"Das Event startet in 3 Sekunden.");
    }
    else if(DeagleTime == 20)
    {
    SendClientMessage(i,Hellblau,"Das Event startet in 2 Sekunden.");
    }
    else if(DeagleTime == 21)
    {
    SendClientMessage(i,Hellblau,"Das Event startet in 1 Sekunde.");
    }
    else if(DeagleTime == 22)
    {
    SendClientMessage(i,Hellblau,"Viel Glück!");
    TogglePlayerControllable(i,1);
    DeagleCheckTimer=SetTimer("DeagleCheck",1000,1);
    KillTimer(DeagleTimer);
    }
    }
    }
    }
    DeagleTime++;
    }



    BlackLegend

    Zitat

    Grafik: 1GB


    Hilft uns nicht viel, kannst du uns villeicht auch noch die dazugehörige Grafikkarte nennen?
    Prozessor und Arbeitsspeicher reichen aufjedenfall aus.




    BlackLegend

    Das einzigste was ich erkennen kann, ist, dass hier eine Klammer fehlt:


    if(newstate==PLAYER_STATE_DRIVER)
    {
    for(new i=0; i<sizeof(Krankenwagen); i++) // expected token: "-identifier-", but found "="
    {
    if(GetPlayerVehicleID(playerid)==Krankenwagen[i]) //error 029: invalid expression, assumed zero
    {
    if(GetPVarInt(playerid,"Fraktion")!=2)
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,ROT,"Du hast keine Schlüssel für dieses Auto.");
    }
    }
    }
    return 1;
    }// Hier


    Denn wenn ichs bei mir lokal teste, funktioniert alles.
    An sich ist der Code auch nicht falsch, heißt wenn es nicht an der Klammer gelegen hat,
    befindet sich der Fehler ganz woanders.



    BlackLegend

    if(!strcmp("/god", cmd, true))
    {
    new param[256];//Der 1. Parameter, einfach ein String
    param = strtok(cmdtext, idx);//Splittet den eingegebenen Befehl nach Leerzeichen und deklariert param als 1. Parameter, idx ist der aktuelle Parameter (1, 2, 3, etc.)
    if(!strlen(param))//strlen liest aus, aus wievielen Zeichen der String (param) besteht, wenn das Ergebnis 0 ist, wurde kein Parameter übergeben.
    {
    SendClientMessage(playerid,ROT,"Benutzung: /God[an|aus]");
    return 1;
    }
    if(!strcmp("an", param, true))//Vergleicht zwei strings, param und "an", Groß- und Kleinschreibung wird ignoriert. Wenn also der 1. Parameter (param) gleich "an" ist, wird der Godmode aktiviert.
    {
    SendClientMessage(playerid,GRÜN,"Dein God Modus wurde Aktiviert.");
    SetPlayerHealth(playerid,99999999999999);
    // Code
    }
    else if(!strcmp("aus", param, true))//Fals nicht "an" sondern "aus" als Parameter gewählt wurde, wird der Godmode deaktiviert
    {
    SendClientMessage(playerid,ROT,"Dein God Modus wurde Deaktiviert.");
    SetPlayerHealth(playerid,100);
    // Code
    }
    else//Wenn weder "an" noch "aus" als Parameter gewählt wurden, wird eine Infonachricht ausgegeben.
    {
    SendClientMessage(playerid,ROT,"Benutzung: /God[an|aus]");
    return 1;
    }
    return 1;


    }


    So, jetzt sollte es eigentlich funktionieren.
    Hat nur ein return 1; gefehlt und die erste Abfrage war falsch.


    //Edit: Erklärungen hinzugefügt.


    BlackLegend

    Erstmal brauchst du die strtok Funktion:


    strtok(const string[], &index)
    {
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
    index++;
    }


    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    return result;
    }


    Diese fügst du am besten ganz unten im Script ein.


    Unter OnPlayerCommandText schreibst du folgendes:


    new cmd[256], idx;
    cmd = strtok(cmdtext, idx);


    if(!strcmp("/god", cmdtext, true))
    {
    new param[256];
    param = strtok(cmdtext, idx);
    if(!strlen(param))
    {
    SendClientMessage(playerid,COLOR_WHITE,"Benutzung: /God[an|aus]");
    return 1;
    }
    if(!strcmp("an", param, true))
    {
    // Code
    }
    else if(!strcmp("aus", param, true))
    {
    // Code
    }
    else
    {
    SendClientMessage(playerid,COLOR_WHITE,"Benutzung: /God[an|aus]");
    return 1;
    }


    }


    BlackLegend

    Dieses Zeichen dient zur Näheren Bestimmung von Daten. Meistens benutzt man ihn bei Strings (%s) bzw. generell Variablen.
    Wenn du ganz penibel sein willst machst du es so:

    SQL
    SELECT 'something' FROM 'somewhere' WHERE 'something' = 'something'


    Normalerweise reicht es aber wie gesag, diese Zeichen vor und nach Daten zu setzen, die Strings sind.





    BlackLegend

    Ich glaube das sollte den Fehler schon beheben:


    stock AccountLaden(playerid)
    {
    new Int[5][20]={
    "Level",
    "Geld",
    "Adminlevel",
    "Fraktion",
    "Skin"
    };
    new string[100];
    for(new i=0;i<sizeof(Int);i++)
    {
    format(string,sizeof(string),"SELECT %s FROM accounts WHERE Name = '%s'",Int[i],Spieler[playerid][MySQL_Name]);
    mysql_query(string);
    mysql_store_result();
    switch(i)
    {
    case 0: Spieler[playerid][Level]=mysql_fetch_int();
    case 1: Spieler[playerid][Geld]=mysql_fetch_int();
    case 2: Spieler[playerid][Adminlevel]=mysql_fetch_int();
    case 3: Spieler[playerid][Fraktion]=mysql_fetch_int();
    case 4: Spieler[playerid][Skin]=mysql_fetch_int();
    }
    mysql_free_result();
    }
    return 1;
    }



    BlackLegend

    Japp, frage mich wer da auf Officebereich kommt....
    Mit ner GTX 550ti schaffts Battlefield locker:




    Für die Maximaleinstellungen wird aber eine GTX 560 empfohlen, mit der GTX 550ti sollte es zwar auch funktionieren, aber getestet hab ichs nicht.


    //Edit: Bei deinen letzten beiden Vorschlägen würde ich dir den letzteren empfehlen.


    BlackLegend

    So sollte es richtig sein, die Variable pID war sinnlos und bei SetPlayerPos hast du playerid verwendet und nicht den Spieler, der ins Gefängnis sollte (player):


    ocmd:einspeeren(playerid,params[])
    {
    if(!isPlayerInFrak(playerid,1))return SendClientMessage(playerid,Rot,"Du bist nicht In dieser Fraktion!");
    new player,string[256];
    if(sscanf(params,"u",player))return SendClientMessage(playerid,Blau,"[Benutzung:] /einspeeren [ID]");
    if(player == INVALID_PLAYER_ID)return SendClientMessage(playerid,Rot,"Dieser Spieler ist Nicht Online!");
    format(string,sizeof(string),"Beamter %s hat %s Ins Gefängniss gesteckt.",SpielerName(playerid), SpielerName(player));
    SendClientMessage(player,Rot,string);
    SetPlayerPos(player,-1607.2662,719.9185,12.2784);
    format(string,sizeof(string),"Du hast %s ins Gefängniss Gesteckt.",SpielerName(player));
    SendClientMessage(playerid,Hellgrün,string);
    return 1;
    }



    BlackLegend