Beiträge von Padarom

    Beim 1. hab ich beim Überfliegen keinen Fehler gefunden, aber Nummer 2 ist doch offensichtlich. Du nutzt eine For-Schleife, die überhaupt keinen Sinn hat. Du gehst alle Spieler durch, und wenn die aktuelle ID connected ist sperrst du den Spieler weg, den du mit der Funktion ausgewählt hast. Mach die Schleife weg und das if(IsPlayerConnected(i)) zu if(IsPlayerConnected(pID)). Außerdem musst du 2 Klammern wegmachen, da du einerseits mit der Rangeabfrage die Nachricht returnst und andererseits direkt mit dem Code darunter weitermachst.

    Alternativ geht auch ein #pragma unused strtok unter den Defines/Includes. Damit wird dem Script nur gesagt, dass strtok nicht genutzt wird und es wird vom Compiler ignoriert - Solltest du es später noch nutzen, kannst du einfach das Pragma ausklammern/Löschen.


    Da du strtok aber nicht im Script hast, wie du es sagst, sollte dieses Warning (!) eigentlich nicht auftreten. Ansonsten kannst du es eigentlich eh getrost ignorieren, da Warnings das Kompilieren nicht abbrechen, das tun nur Errors.


    Mit freundlichen Grüßen
    Padarom

    Hallo zusammen,
    ich bin gerade dabei in mein Anti-Scorehack-System eine Logfunktion einzubauen, welche jedes mal wenn ein Spieler Punkte bekommt dies im Log vermerkt. Dabei wird im Script überall nur dieses bestimmte Callback benutzt. Die Datei wird zwar erstellt und bleibt bestehen (bereits beim Login mit der fcreate(filename[])-Funktion aus der SAMP-Wiki), allerdings wird keine neue Zeile erstellt, sondern einfach die erste ersetzt, sodass stehts das neuste dasteht. Ich hoffe ihr findet das Problem.
    stock SetPlayerScoreEx(playerid, score)
    {
    new Year, Month, Day, Hour, Minute, Second, Name[MAX_PLAYER_NAME], logtext[128], logtxt[256];
    getdate(Year, Month, Day);
    gettime(Hour, Minute, Second);
    GetPlayerName(playerid,Name,MAX_PLAYER_NAME);
    format(logtext,128,"/%s-Log.txt",Name);
    new File:log = fopen(logtext, io_readwrite);
    format(logtxt,128,"[%02d.%02d.][%02d:%02d:%02d]: %i Punkte\r\n",Day,Month,Hour,Minute,Second,score);
    fwrite(log, logtxt);
    fclose(log);
    SetPVarInt(playerid,"points",score); // PVar für Anti-Scorehack - Wird bei Timer abgefragt und wenn Score anders ist: Kick/Ban
    SetPlayerScore(playerid,score);
    return 1;
    }


    Mit freundlichen Grüßen
    Padarom

    Ich glaube Steam checkt die IP des Nutzers und nicht den eingetragenen Standort - Sonst würde es ja auch nicht gehen wenn Grex es macht (Außer er ändert den Standort, was dann aber genauso unsinnig wäre, dann könnte er es ja auch einfach erklären wie). Hätte ich mal wieder eine 20€ PSC würde ich gerne mal auf eines deiner Angebote eingehen, ich find das echt klasse :)


    Mit freundlichen Grüßen
    Padarom

    Das Problem dabei ist, dass OnPlayerRequestClass erst aufgerufen wird, wenn man beim Skinselect einen Button drückt (einen Pfeil z.B.) - Hatte selber mal mit dem Problem zu kämpfen^^ Abhilfe schafft dann einfach ein Timer, der bei OnPlayerConnect ausgelöst wird und den Spieler nach einigen Sekunden (die man eben so braucht bis man im Skinselect ist) spawnt.

    Baue folgendes ein:
    forward SendReset(playerid);
    new bool:SendMessage[MAX_PLAYERS]=false ;
    Die Abfrage if(health < 294) erweiterst du auf if(health<294 && SendMessage[i]==false) und setzt unter SendClientMessage den Bool auf true und startest den Timer SetTimerEx("SendReset", 3000, false, "i", playerid) und setzt bei der Funktion des Timeraufrufens den Bool des jeweiligen Spielers wieder auf False. So wird die Nachricht alle 3 Sekunden nur 1x angezeigt (andernfalls erweitere 3000 auf mehr).


    Mit freundlichen Grüßen
    Padarom

    Meines Wissens nach gibt es keine Funktion, die das Passwort abruft. Was du jedoch machen könntest, wäre am Anfang des Scriptes unter OnGameModeInit das Passwort mit dem RCON Befehl "rcon_password [PASSWORD]" zu setzen und in einer Variable zu speichern, die du dann bei /rconpass ausgibst. RCON Funktionen findest du hier.


    Mit freundlichen Grüßen
    Padarom


    edit: Maddin war schneller, dafür hab ich aber noch den Link dazugepostet ;D

    Ich glaube, dass ich das Problem jetzt gefunden habe.
    Vor den Dialogen wird folgendes aufgerufen:
    IsATC[playerid] = false;
    atcbelegt[ATCPos[playerid]] = false;
    ATCPos[playerid] = -1;
    Die ATCPos des Spielers ist allerdings von Anfang an auf -1 definiert, und da atcbelegt ein Array ist, der mit 0 beginnt, hat er keinen -1 Wert, und irgendwas crasht, bzw. die Funktion wird beendet. Jetzt habe ich ATCPos auf 0 gesetzt und atcbelegt um eins erhöht, sodass überall im Script jetzt ein um 1 gesteigerter Wert genutzt wird.

    Bloody: Hätte ich jetzt überhaupt Filterscripts geladen :(
    An die anderen: Danke, werde in Zukunft das \r weglassen, steht nur so auch in der Wiki deswegen habe ich es immer übernommen.
    Findet trotzdem niemand den Ursprung des Problems? Die nachfolgenden Callbacks gehen inzwischen wieder, war deshalb vll nur ein Lag, wenn ich bei dem Callback etwas auswähle, kommt trotzdem keine Antwort.


    edit:
    Scheinbar lag es an diesem Code:
    IsATC[playerid] = false;
    atcbelegt[ATCPos[playerid]] = false;
    ATCPos[playerid] = -1;
    Aber was ist daran falsch?
    Vielleicht, dass ATCPos auf -1 gesetzt wird? Und wenn ja, wieso wird dann die Funktion beendet?

    Opa_Schlumpf: Ich schreibe einen Luftfahrtserver (der inzwischen schon fast fertig ist, siehe u.A. meine Signatur - Um keine Werbung zu machen *hust*), atcpos steht für Air Traffic Controller Position, kurz atcpos. \r\n ist ein Zeilenumbruch im Dialog oder allgemein in Pawn.


    @BlackAce: Ich habe 30 Dialoge in meinem Script, die sind ALLE über #define name fortlaufende zahl definiert. keiner über new.


    edit: Der Dialog ging ja vorher schon, allerdings hatte case 2 noch keine Funktion und deswegen hab ich den jetzt implementiert.

    Hallo,
    ich habe vor einigen Minuten einer meiner Dialoge erweitert (vorher war der case 2 zwar vorhanden, aber noch mit einem return 1; versehen), und seitdem reagiert der Dialog auf keine meiner Antwortmöglichkeiten mehr. Es ist zur Info ein DIALOG_STYLE_LIST mit drei Auswahlmöglichkeiten und folgendem Code. Nachdem ich die Änderung rückgängig gemacht habe, gab es noch das gleiche Problem. Andere Dialoge funktionieren, also liegt es wohl am Code.


    if(dialogid == changefrak && response)
    {
    new home[20];
    GetPVarString(playerid,"heimat",home,20);
    IsATC[playerid] = false;
    atcbelegt[ATCPos[playerid]] = false;
    ATCPos[playerid] = -1;
    switch(listitem)
    {
    case 0:
    {
    if(!strcmp(home,"ls"))
    {
    SetPlayerPos(playerid,1887.5907,-2393.4739,13.5391);
    SetPlayerFacingAngle(playerid,281.8907);
    SetPlayerSkin(playerid, 61);
    }
    else if(!strcmp(home,"lv"))
    {
    SetPlayerPos(playerid,1595.2727,1448.6219,10.8282);
    SetPlayerFacingAngle(playerid,86.6821);
    SetPlayerSkin(playerid, 61);
    }
    else if(!strcmp(home,"sf"))
    {
    SetPlayerPos(playerid,-1264.0547,23.0747,14.1484);
    SetPlayerFacingAngle(playerid,133.7686);
    SetPlayerSkin(playerid, 61);
    }
    }
    case 1:
    {
    if(!strcmp(home,"ls"))
    {
    SetPlayerPos(playerid,2019.4186,-2443.2949,13.5469);
    SetPlayerFacingAngle(playerid,87.9982);
    SetPlayerSkin(playerid, 16);
    }
    else if(!strcmp(home,"lv"))
    {
    SetPlayerPos(playerid,1318.7860,1256.9487,10.8203);
    SetPlayerFacingAngle(playerid,0.8514);
    SetPlayerSkin(playerid, 16);
    }
    else if(!strcmp(home,"sf"))
    {
    SetPlayerPos(playerid,-1225.8724,49.1484,14.1346);
    SetPlayerFacingAngle(playerid,226.0345);
    SetPlayerSkin(playerid, 16);
    }
    }
    case 2:
    {
    ShowPlayerDialog(playerid, atcpos, DIALOG_STYLE_LIST, "Position auswählen.", "Tower\r\nDelivery","Auswählen","Abbrechen");
    printf("%s: ATC selected.", playerid); // War zur Überprüfung ob der Case ausgelöst wird. Wird er nicht, die anderen aber auch nicht.
    SendClientMessage(playerid, COLOR_LIMEGREEN, "ATC selected."); // Ebenfalls Überprüfung
    }
    }
    return 1;
    }
    Ich hoffe ihr könnt den Fehler finden.


    mit freundlichen Grüßen
    Padarom


    edit: Gerade geschaut ob die nachfolgenden Dialoge gehen. Tun sie leider nicht... Müsste also an dem Code hier liegen.

    Du hast mit Sicherheit entweder irgendwo ein ~ zu wenig, oder der String (wenn der Textdraw über einen String formatiert wird) zu kurz ist.

    Yo danke, ich hab den Tankinhalt so formatiert, dass er je nach Inhalt eine andere Farbe hat (weniger Inhalt: kritisch). Dabei habe ich statt ~w~ nur w~ gemacht. Bei Fahrzeugen mit weniger als 100 Inhalt wurde der Tank so nicht formatiert und deshalb hat es nicht gecrashed.

    Hallo zusammen,
    ich denke mal, dass das hier reingehört, da ich momentan einen recht großen- beliebig oft reproduzierbaren- Bug habe. Ich weiß jedoch nicht wo.
    Ich habe mein Racescript von RaceCheckpoints auf normale Checkpoints umgeschrieben und dann geschaut, ob das ganze funktioniert. Nebenbei habe ich noch
    eine Anzeige des Nummernschilds als Textdraw integriert (sodass folgendes als Textdraw auftaucht: Fahrzeugname, Geschwindigkeit, Motor an/aus, Tankinhalt & Zustand UND Nummernschild). Dies sollte eigentlich aus der .ini des Fahrzeuges (dynamisch gehalten) geladen werden.
    Wenn ich nun ingame gehe und in ein Fahrzeug steige, so wird anfangs alles richtig dargestellt. Steige ich allerdings aus und wechsle das Fahrzeug, so werde ich entweder direkt auf den Desktop geschleudert, oder ich kann etwa 20 Sekunden fahren und bekomme dann einen Crash.
    Das ist bei jedem Clienten der auf dem Server ist der Fall. Ich habe mehrfach überprüft, ob ich vielleicht ein nicht erstelltes Textdraw anzeige, oder ein solches ohne Inhalt, aber dem ist nicht so. Ich hoffe ihr könnt mir helfen.



    Mit freundlichen Grüßen
    Padarom

    Was genau willst du machen? Willst du, dass du Raute drückst und sich dann der Adminchat öffnet oder willst du anstatt/adminchat o.Ä. einfach # eingeben?
    Für das zweite einfach if(strcmp(cmd, "#", true) == 0 )
    Ich würde das if(IsPlayerConnected) übrigens rauslassen, da der Spieler einen Command eingibt ist er zwangsweise auch online.


    Mit freundlichen Grüßen
    Padarom