Beiträge von Hagi

    Also besteht nicht die Möglichkeit, sagen wir mal durch


    new checkvar = WBB_IsValidUser ( Username[ ] , Index );


    den Wert direkt auszulesen?



    Ich weiß nämlich grad nicht, wie ich den Wert aus dem Callback in meinen zur Zeit auszuführenden Code bekomme.

    Habe eine Frage zu der Verwendung mancher Funktionen. Möchte ich z.B. Abfragen ob ein Account bereits registriert ist, verwende ich folgende Funktion:


    WBB_IsValidUser ( Username[ ] , Index );


    Gibt diese Funktion einen Rückgabewert zurück? Dies wird nämlich aus der Dokumentation im ersten Post nicht deutlich.
    Heißt das im "Nein-Fall", dass ich zwingend den Callback
    WBB_GotUserValidState
    verwenden muss? Wie bekomme ich dann aus diesem Callback den Kontrollwert (1 oder 0) in eine laufende Sequenz einer anderen Methode?

    Selber Fehler (nur andere Zeile in der Include) wie mit der alten Include. In beiden Includes steht auch an der angegebenen Stelle das gleiche:


    Code
    else
    	{
    		while (index < 56 char)
    		{
    			ctx[E_MD5_CONTEXT_IN][index++] = 0; // Fehlerzeile laut Log
    		}
    	}


    edit: Okay hab es anders gelöst. Ich frage direkt bei MYSQL mit md5('string") die Passwörter ab.

    Ja einmal den include


    #include <md5> // Außerhalb von Publics oben im Script


    Register


    format(query,sizeof(query),"UPDATE `%s`.`User` SET `Password` = '%s' WHERE `User`.`Name` = '%s'",mysqldb,MD5_Hash(inputtext),player);
    mysql_query(query);


    Login


    format(pwmd5,sizeof(pwmd5),"%s",MD5_Hash(inputtext));
    if(strcmp(data,pwmd5,false)==0 && laenge != 0) // in data steht der String aus der MYSQL


    An der Verwendung im Script sollte es eigentlich nicht liegen, da ich dort nichts geändert habe und es vorher schonmal funktionierte.

    Moin Leute,


    wollte gerade meinen Server starten, was aber nicht funktioniert. In der Server log steht folgendes.


    Zitat

    [16:26:14] [debug] Server crashed while executing Mafia-Policev9X_1.amx
    [16:26:14] [debug] AMX backtrace:
    [16:26:14] [debug] #0 00002630 in MD5_Final (ctx[E_MD5_CONTEXT:22]=@0x00000000, string=0) at M:\...\pawno\include\md5.inc:343
    [16:26:14] [debug] System backtrace:


    Ich gehe davon aus, dass es am Include liegt. Eventuell ist dies veraltet und nutzt nicht mehr vorhandene Funktionen.


    Hat jemand eine Lösung für das Problem? Es muss allerdings mit MD5 funktionieren, da meine Passwörter bereits in MD5 verschlüsselt sind und wir so keine andere crypt Methode verwenden können.


    Angehängt findet ihr die MD5 Include

    Ja das war mein Fehler. Bei SAMP werden Boolean-Variablen nicht durch boolean sondern bool deklariert.
    Aber eigentlich düftest du nicht spawnen wenn unter OnPlayerRequestClass das einzige mal OnPlayerSpawn verwendet wird.


    Versuchs mal so


    public OnPlayerRequestClass(playerid, classid)
    {
    if(loggedIn[playerid] == true){
    SetSpawnInfo(playerid,0,101,1230.0509,-914.0554,43.0938,0,0,0,0,0,0,0);
    SpawnPlayer(playerid);
    }
    return 1;
    }

    Also die Entfernung ist einfach.


    Die Distanz zwischen zwei Punkten im dreidimensionalen Raum ermitteln.
    Als Punkte nimmst du die x,y,z Koordinaten der playerid und killerid.
    Google hilft dir da sicher gerne bei dieser mathematischen Berechnung weiter.


    Interessanter ist der Headshot. Meines Wissens nach ist es weder mit OnPlayerDeath noch mit OnPlayerTake/GiveDamage möglich das Körperteil zu filtern und demnach auch nicht möglich auf einen Headshot zu überprüfen. Aber kann sein, dass ich in den letzten zwei SAMP Versionen was nicht mitbekommen hab. Denke aber nicht dass das geht.

    Da liegt der Fehler. OnPlayerRequest Class wird aufgerufen, wenn der Spieler zur Auswahl bekommst.
    http://wiki.sa-mp.com/wiki/OnPlayerRequestClass


    Das geschieht nach eigener Erfahrung aber meist auch wenn man den Registerdialog (sofern bei OnPlayerConnect aufgerufen) schließt.
    Du solltest das aber ganz einfach umgehen können, indem du einen boolean verwendest.


    Global deklarieren


    new boolean:loggedIn[MAX_PLAYERS];


    Bei OnPlayerConnect initialisieren


    loggedIn[playerid] = false;


    Beim logindialog wenn man eingeloggt ist


    loggedIn[playerid] = true;


    Bei OnPlayerRequestClass



    public OnPlayerRequestClass(playerid, classid)
    {
    if(loggedIn[playerid] == false) return 1;
    SetSpawnInfo(playerid,0,101,1230.0509,-914.0554,43.0938,0,0,0,0,0,0,0);
    SpawnPlayer(playerid);
    return 1;
    }

    Echt super gemappt. Trotz der Größe erhält man nicht den Eindruck als gehöre es dort nicht hin. Auch das Interior ist in der Größe super gelungen. Also echt top Arbeit.

    if(strcmp(cmd,"/polizeitor", true) == 0)
    {
    if(IsACop(playerid) || IsPlayerInFrac(playerid, 22) || IsPlayerInFrac(playerid, 7))
    {
    if(!IsPlayerInRangeOfPoint(playerid,15.0,1418.7482,-1743.8313,13.5191)) return SendClientMessage(playerid,COLOR_RED,"Außerhalb der Reichweite");
    MoveObject(MVTor2,1418.94, -1743.55, 5.27, 3.0);
    SetTimer("CloseMVTor2", 5000, 0);
    SendClientMessage(playerid, COLOR_YELLOW,"Das Hoftor ist offen. Beeil dich es schließt in 5 Sekunden");
    }
    else SendClientMessage(playerid, COLOR_RED, "Du hast nicht die Erlaubnis dazu!");
    return 1;
    }



    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys & KEY_CROUCH)
    {
    if(IsACop(playerid) || IsPlayerInFrac(playerid, 22) || IsPlayerInFrac(playerid, 7))
    {
    if(!IsPlayerInRangeOfPoint(playerid,15.0,1418.7482,-1743.8313,13.5191)) return SendClientMessage(playerid,COLOR_RED,"Außerhalb der Reichweite");
    MoveObject(MVTor2,1418.94, -1743.55, 5.27, 3.0);
    SetTimer("CloseMVTor2", 5000, 0);
    SendClientMessage(playerid, COLOR_YELLOW,"Das Hoftor ist offen. Beeil dich es schließt in 5 Sekunden");
    }
    else SendClientMessage(playerid, COLOR_RED, "Du hast nicht die Erlaubnis dazu!");
    return 1;
    }
    }


    Das sollte eigentlich hinhaun.

    Beim Betreten der Arena


    SetPVarInt(playerid,"arena",1); // ggf kann hier auch mit Array und enum gearbeitet werden. Dann boolean zu emfpehlen.


    Bei OnPlayerSpawn


    if(GetPVarInt(playerid,"arena") == 1)
    {
    SetPlayerPos(...);
    }


    Bei /exit
    SetPVarInt(playerid,"arena",0);

    Ich gaube mit Error meint er den Error den PAWNO wirft wenn die Zeile zu lang ist.
    Du kannst den String in einer anderen Zeile weiterschreiben und dort den bereits erstellten String einfügen.


    format(string,sizeof(string),"%s bla bla bla",string);

    Da gibts eigentlich auch kein Limit. Jedoch hat man bei Pawno das Problem, dass die Zeilenlänge im Editor begrenzt ist. Aber das kann man ja mit concat oder format mit dem bereits erstellen String in einen anderen umgehen.