Beiträge von Goldkiller

    if(GetPlayerVehicleID(playerid == mediccars[i]))
    Was soll denn das bewirken :-O ? Würde immer die VehicleID von Spieler 0 ODER Spieler 1 abfragen.
    Du willst wohl folgendes:
    if( GetPlayerVehicleID(playerid) == mediccars[i] )


    Übrigens ist es besser,du fragst die VehicleID 1x ab,legst den Wert in einer Variable ab und vergleichst die mit mediccars[ i ].Bringt ja nicht,in der Schleife die VehicleID neu abzufragen.

    Nein würde ich nicht, da die Ausgabe sowieso wieder verpatzt wird.


    format(stringh, 256, "Deine neue Handynummer: %s",nummer);
    format(stringh, 256, "Deine neue Handynummer: %09d",SpielerInfo[playerid][pHandynummer]); // oder so
    format(stringh, 256, "Deine neue Handynummer: %09d",strval(nummer)); // oder so


    //Edit,

    Zitat

    Was ist an deiner Funktion "richtiger", als an unserem Tipp die Variable in einen String umzuwandeln, statt sie als Integer zu speichern?
    Wenn er eine Null vornedran stehen haben will, kann er doch auch einfach gleich als String speichern, statt eine Funktion zu schreiben, die seinen Integer nur wieder als String zurückgibt.
    So oder so, beides wäre möglich.


    Du hast da wohl was falsch verstanden :\.
    Die ist nicht richtiger, ich wollte nur zeigen,wie man es macht,dass die Zahl immer die Null vorne dran hat.
    Das der String mehr Platz verbraucht als eine Zahl ist nicht so wichtig,sollte man dennoch nicht ganz vergessen.Beides ist richtig,ja. Es ging mir mit falschen Antworten auch eher um die Codes die gepostet wurden, ohne überhaupt mal ausprobiert zu werden.
    Mal die Posts hier zum Beispiel:
    http://forum.sa-mp.de/san-andr…0%E2%82%AC-tg/#post876017
    http://forum.sa-mp.de/san-andr…0%E2%82%AC-tg/#post876012
    http://forum.sa-mp.de/san-andr…0%E2%82%AC-tg/#post875997
    Um nur 3 zu nennen ... .

    Sensationell wie viele falsche Antworten man bekommt,wenn es um 30€ geht ... .
    Wieso sollte man bei der Zahl 24 noch ganze vielen 0 davor angezeigt bekommen ? Ist doch völlig bescheuert. Wenn ihr 0 davor haben wollt,dann macht sie manuell dort hin. Die Funktion strval "löscht" die 0 ja nicht,sie machen eh keinen Sinn. Oder vielleicht macht es doch Sinn,aber dann musst du ja vor jede Zahl unendlich viele 0 schreiben. Macht keiner, außerdem wirst du damit nie fertig.


    stock String_Handynummer( nummer ) {
    new
    s[12];
    format(s,sizeof(s),"%08d",nummer);
    return s;
    }
    Das wird immer 8 Stellig die Zahl zurück geben als String. Falls die Zahl weniger als 8 Stellen hat,werden alle davor mit 0 aufgefüllt.

    Zitat

    12345 -> 00012345
    12 -> 00000012


    Ich beobachte mal weiter die fatalen Antworten hier ... .

    Wie ich es mir dachte,dafür brauch man keinen Timer.


    Du kannst einfach das Datum,wann die Donator-Zeit abläuft in das Userprofil schreiben ( du hast sicherlich Userdatein ) und beim betreten des Servers prüfen, ob das Datum in der Vergangenheit oder Zukunft liegt. So einfach lässt es sich prüfen, ob man noch Donator ist oder nicht.

    Man ließt Sätze generell immernoch bis zum Ende. Wenn du aber schon so komisch kommst,mach ich das auch mal ;).


    Dennoch,es geht nicht.
    Die Zahl kannst du dir in PAWN nicht mal ordentlich darstellen lassen.
    Versuch doch mal dir "1000*60*60*24*7*4" in PAWN ausgeben zu lassen.
    Du kannst nur positive Zahlen bis 2^31 - 1 darstellen lassen, 1000*60*60*24*7*4 ist aber größer.Wir haben also eine negative Zahl, es geht also so nicht.
    Natürlich kannst es über Umwege machen, indem du einen Tagestimer machst du denn dann X mal laufen lässt, ist trotzdem immernoch total sinnlos.


    Zitat

    das wäre 1 Monat ^^


    Nein,das wäre -1875767296.

    Nein.Es ist ein String der aus Zahlen besteht.
    "1234" ist nicht 1234.
    Das erste ist ein String,der aus Zahlen besteht. Nämlich 1 , 2 , 3 und 4 . Du hättest ja auch "1234a" eingeben können, dann ist wohl klarer,dass es ein String ist.
    Das Zweite ist eine konkrete Zahl,nämlich 1234.

    Das heisst konkret ? Du willst maximal X Zeilen anzeigen lassen ?
    Falls maximal X Zeilen:


    Erstellst eine Variable und erhöhst die immer um 1, wenn ein neuer Eintrag hinzugefügt wird zu der Liste.Ist dann ein bestimmter Wert erreicht ( z.B. 10 ) , dann lässt du die Schleife beenden mit "break;" .

    format(string, sizeof(string),"Codes/%d.ini",inputtext);
    Entweder strval(inputtext) oder den Platzhalter von %d auf %s ändern.


    Hättest aber gemerkt,wenn du das gedebugt hättest:
    format(string, sizeof(string),"Codes/%d.ini",inputtext);
    printf(string);

    Gar nicht,weil das total bescheuert ist. Du lässt den Server doch sicher nicht 1 Monat laufen OHNE mal den GM neu zu starten.
    Abgesehen davon, was meinst du wieviele Timer es wohl am Ende wären, wenn jeder Spieler der mal Online war 1 Timer bekommt.


    Was hast du denn konkret vor.Das kann man sicherlich auch einfacher lösen ;).

    Du bist dir auch sicher,dass die Funktion überhaupt aufgerufen wird? Außer "es wird Niemand gekickt" hast du ja nicht gesagt,ob überhaupt irgendwas funktioniert bei dem Befehl.


    dcmd_kick(playerid,params[])
    {


    printf("dcmd_kick #1");
    if(SpielerInfo[playerid][pAdmin]>=1)
    {
    printf("dcmd_kick #2");
    new pID, reason[128],string[128];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,cBlue,"/kick [id] [grund]");
    format(string,sizeof(string),"AdmCmd: %s wurde von %s gekickt. Grund: %s",SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessageToAll(cRed,string);
    Kick(pID);
    }
    else
    {
    printf("dcmd_kick #3");
    SendClientMessage(playerid,cRed,"Diesen Befehl kannst du nicht nutzen. Mindestens benötigter Rang: {00FF5A}Supporter");
    }
    return 1;
    }


    Was hast du denn vor DCMD benutzt ? Wäre auch wichtig zu wissen.

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(SupportTicket[i] == 1)
    {
    if(TicketAngenommen[i] == 0)
    {
    new string[128], DerSpieler[MAX_PLAYER_NAME];
    GetPlayerName(i, DerSpieler, sizeof(DerSpieler));
    format(string, sizeof(string), "[%d] %s\n", i, DerSpieler);
    ShowPlayerDialog(playerid, Tickets, DIALOG_STYLE_LIST, "Tickets", string, "Okay", "");
    }
    }
    }

    Du zeigst den Dialog auch in der Schleife an und formatierst immer in der Schleife.
    Den String musst du außerhalb der Schleife erstellen und in der Schleife erweitern.
    Danach,wenn die Schleife beendet ist,den Dialog anzeigen.

    new string[256];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(SupportTicket[i] == 1)
    {
    if(TicketAngenommen[i] == 0)
    {
    new DerSpieler[MAX_PLAYER_NAME];
    GetPlayerName(i, DerSpieler, sizeof(DerSpieler));
    format(string, sizeof(string), "%s[%d] %s\n",string, i, DerSpieler); // "Alten" string erweitern!
    }
    }
    }
    ShowPlayerDialog(playerid, Tickets, DIALOG_STYLE_LIST, "Tickets", string, "Okay", "");

    Du musst die Funktion "gPM_UserCall(playerid)" auch in dem Filterscript / Gamemode einfügen, worüber sich die Spieler einloggen.
    Steht dort ja auch :
    "gPM <> Funktion gPM_UserCall fehlt [...]".


    Welches Script benutzt du,um die Spieler einzuloggen ? Dort musst du irgendwo gPM_UserCall einfügen. Falls es dort eingefügt hast, kannst mir ja mal das Script zukommen lassen ( PM ).

    Das ist eigentlich so richtig.
    Ich würde aber trotzdem gerne wissen,was dir hier ausgegeben wird:
    public gPM_UserCall(playerid)
    {
    new status;
    if( playerid == INVALID_PLAYER_ID ) return 1;


    status = (GetPVarInt(playerid,"loggedin")==1);
    printf("gPM_UserCall status = %d",status);


    return status;
    }
    Für gPM_UserCall heisst alles außer 0 eingeloggt.Nur 0 heisst nicht eingeloggt. Ich befürchte daher,dass status dort 0 ist. Kannst du das mal überprüfen?

    MoveDynamicObject(fbitor, 777.9546,-1330.6935,13.5488,5.0);


    MoveDynamicObject(fbitor, 777.9546,-1330.6935, 13.5488,5.0);
    Mal die Koordinaten vergleicht ? Die sind identisch ... .


    SetTimerEx("PlaySoundForPlayer",2000,0,"id",playerid,1036);
    Das funktioniert nicht. Du kannst keine native Funktionen direkt über SetTimer aufrufen.

    Das wievielte Thema ist es heute von dir eigentlich ?
    Du ließt einfach nicht die Dokumentation zu dem Plugin ...


    stock LoadHaus()
    {
    new str[3];
    new cmd[128];
    // --- MÜLL
    mysql_query("SELECT * FROM hauser WHERE ID='hausid'");
    mysql_store_result();new resultline[200];
    if(mysql_fetch_row_format(resultline))
    {
    // --- MÜLL Ende
    mysql_query("SELECT * FROM hauser");
    mysql_store_result();
    while(mysql_retrieve_row()) //this will be running until all rows are processed
    {
    valstr(str,hausid);
    Haus[hausid][ID] = mysql_GetInt("hauser", "ID", "ID", str);
    strmid(Haus[hausid][Owner],mysql_GetString("hauser", "Besitzer", "ID", str),0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    Haus[hausid][ax] = mysql_GetFloat("hauser", "ax", "ID", str);
    Haus[hausid][ay] = mysql_GetFloat("hauser", "ay", "ID", str);
    Haus[hausid][az] = mysql_GetFloat("hauser", "az", "ID", str);
    Haus[hausid][ix] = mysql_GetFloat("hauser", "ix", "ID", str);
    Haus[hausid][iy] = mysql_GetFloat("hauser", "iy", "ID", str);
    Haus[hausid][iz] = mysql_GetFloat("hauser", "iz", "ID", str);
    Haus[hausid][interior] = mysql_GetInt("hauser", "interior", "ID", str);
    Haus[hausid][vworld] = mysql_GetInt("hauser", "virtual_world", "ID", str);
    Haus[hausid][kosten] = mysql_GetInt("hauser", "kosten", "ID", str);
    Haus[hausid][kosten2] = mysql_GetInt("hauser", "kosten2", "ID", str);
    Haus[hausid][kaufen] = mysql_GetInt("hauser", "nicht_zum_kauf", "ID", str);
    Haus[hausid][schloss] = mysql_GetInt("hauser", "verschlossen", "ID", str);
    Haus[hausid][heal] = mysql_GetInt("hauser", "Heal", "ID", str);
    Haus[hausid][armour] = mysql_GetInt("hauser", "Armour", "ID", str);
    Haus[hausid][Type] = mysql_GetInt("hauser", "Type", "ID", str);
    Haus[hausid][Miete] = mysql_GetInt("hauser", "Miete", "ID", str);
    Haus[hausid][Mietbar] = mysql_GetInt("hauser", "Mietbar", "ID", str);
    sscanf(resultline,"p<|>dsffffffddddddddddd",Haus[hausid][ID],Haus[hausid][Owner], Haus[hausid][ax], Haus[hausid][ay], Haus[hausid][az], Haus[hausid][ix], Haus[hausid][iy], Haus[hausid][iz], Haus[hausid][interior], Haus[hausid][vworld], Haus[hausid][kosten],Haus[hausid][kosten2], Haus[hausid][kaufen], Haus[hausid][schloss], Haus[hausid][heal], Haus[hausid][armour], Haus[hausid][Type],Haus[hausid][Miete],Haus[hausid][Mietbar]);
    printf("ID:%d Owner:%s AX:%f AY:%f AZ:%f IX:%f IY:%f IZ:%f Int:%d VW:%d KOSTEN:%d SCORE:%d KAUFE:%d SCHLOSS:%d HEAL:%d ARMOUR:%d TYPE:%d",Haus[hausid][ID],Haus[hausid][Owner], Haus[hausid][ax], Haus[hausid][ay], Haus[hausid][az], Haus[hausid][ix], Haus[hausid][iy], Haus[hausid][iz], Haus[hausid][interior], Haus[hausid][vworld], Haus[hausid][kosten],Haus[hausid][kosten2], Haus[hausid][kaufen], Haus[hausid][schloss], Haus[hausid][heal], Haus[hausid][armour], Haus[hausid][Type]);
    hausid++;
    }
    format(cmd,sizeof(cmd),"Besitzer : %s\n Größe : %s\nKosten : %d\nLevel: %d\n/buyhouse zum kaufen",Haus[hausid][Owner],HausGrosse(hausid),Haus[hausid][kosten],Haus[hausid][kosten2]);
    Haus[hausid][lbl_haus] = Create3DTextLabel(cmd,COLOR_GREEN,Haus[hausid][ax], Haus[hausid][ay], Haus[hausid][az]+1,15.0,0);
    UpdateHausInfo(hausid);
    }
    mysql_free_result();
    }
    Der markierte Bereich ist total überflüssig und gibt bestimmt auch nur Fehler in der mysql.log aus.
    // --- MÜLL
    mysql_query("SELECT * FROM hauser WHERE ID='hausid'"); // <-- Die Abfrage klappt doch niemals. WHERE ID = 'hausid' ????
    mysql_store_result();new resultline[200];
    if(mysql_fetch_row_format(resultline))
    {
    // --- MÜLL Ende
    Übrigens ist die sscanf Zeile auch unnötig.Das auslesen machst du sowieso schon davor. Die Möglichkeit mit sscanf ist lediglich besser,aber wohl zu komplex um es einem MySQL Anfänger zu erklären :\.


    format(cmd,sizeof(cmd),"Besitzer : %s\n Größe : %s\nKosten : %d\nLevel: %d\n/buyhouse zum kaufen",Haus[hausid][Owner],HausGrosse(hausid),Haus[hausid][kosten],Haus[hausid][kosten2]);
    Haus[hausid][lbl_haus] = Create3DTextLabel(cmd,COLOR_GREEN,Haus[hausid][ax], Haus[hausid][ay], Haus[hausid][az]+1,15.0,0);
    UpdateHausInfo(hausid);

    Der Teil muss sicherlich auch in die While-Schleife. Zumindest die format und Create3D... Zeilen.

    Das klappt so einfach nicht. So schnell wie der Code hintereinander abläuft, weiss der Server noch gar nicht,dass der Spieler Energie und Rüstung verloren hat. ( Genau genommen, wird erst frühstens nachdem die Funktion durchgelaufen ist der Status von Energie und Rüstung wieder aktualisiert =
    Du müsstest den vorher / nachher Vergleich etwas zeitverzögert aufrufen.Erstell also einen Timer,übergib am besten playerid,Energie vorher und Armor vorher und lass diese Werte testen gegen die Energie und Rüstung wenige ms später.


    SetTimerEx("Hack_Check",50,false,"dff",playerid, health, armor );


    public Hack_Check(playerid,Float:health,Float:armor) {
    // ...
    }