Beiträge von #S.

    Die Funktion verträgt sich wohl nicht mit ocmd. Server crasht und kriege als Fehlerzeile (ocmd.inc) folgende:



    Die Funktion ist für mich sowieso nicht wichtig, wollte nur wissen ob man es sich vielleicht irgendwie einfacher machen kann, für die faulen :klugs: . Trotzdem danke für deine Hilfe.

    Jeffry, bist du in der Lage mir mal das an dem Beispiel hier zu erläutern (das mit dem Tutorial das du mir geschickt hast):



    SendFormatMessage(playerid, color, text[], {Float,Menu,Text,...,}:...)
    {
    new string[128];
    format(string,strlen(string),text,{mixed});
    SendClientMessage(playerid,color,text);
    return 1;
    }


    Ich verstehe nämlich nicht ganz, wie ich das realisiere (ist 2 Seiten vorher falls du es dir nochmal anschauen musst).

    Moment mal, ich versuche mich jetzt seit einer Stunde dadran, aber irgendwie verstehe ich das nicht.



    SendFormatMessage(playerid, color, text[], {Float,Menu,Text,...,}:...)
    {
    new string[128];
    format(string,strlen(string),text,{mixed});
    SendClientMessage(playerid,color,text);
    return 1;
    }

    Ich wollte mir eigentlich sowas basteln. Wie realisiere ich das jetzt mithilfe des Tutorials? Das müsste mir jemand nochmal genauer erklären.

    Jeffry, schon einmal dran gedacht skripten zu lehren? Damn...
    Funktioniert, danke dir.


    //Edit:


    Bräuchte hier noch einen Denkanstoß:



    ocmd:sellkeys(playerid)
    {
    new string[128],anzahl=0;
    for(loop=0;loop<sizeof(cInfo);loop++)
    {
    if(!cInfo[loop][id_x])continue;
    if(cInfo[loop][besitzer]!=pInfo[playerid][ID])continue;
    format(string,sizeof(string),"Anzahl\tAutoname\tAuto ID\n{FFFFFF}%i\t{FF0000}%s\t{FFFFFF}%i\n",anzahl++,GetVehicleName(cInfo[loop][model]),cInfo[loop][model]);
    ShowPlayerDialog(playerid,DIALOG_SELLKEYS,DIALOG_STYLE_TABLIST_HEADERS,"Auto Verwaltung - Verkaufen",string,"Okay","Abbrechen");
    SetPVarInt(playerid,"sellCarID",)
    }
    return 1;
    }


    Bei SetPVarInt möchte ich die db_id des jeweiligen Autos speichern. Jetzt ist aber das Problem: bei jedem neuen Auto das ich habe, wird ja eine neue "Liste" erstellt. Wie lese ich die Zeile aus, wenn er z.B. 3 Autos hat und er das 2te verkaufen möchte? Bei einem normalen DIALOG_STYLE_LIST mit z.B. 5 festgesetzten Plätzen wäre das für mich kein Problem, hier siehts allerdings anders aus (+ was muss ich dann bei OnDialogResponse bei listitem angeben)...

    Jemand eine Ahnung, warum mein Command nicht über den loop kommt (nur 0.1 - 0.2)?



    ocmd:sellkeys(playerid)
    {
    print("0.1");
    new string[128],anzahl=0;
    print("0.2");
    for(;loop<sizeof(cInfo);loop++)
    {
    print("1");
    if(!cInfo[loop][id_x])continue;
    print("2");
    if(cInfo[loop][besitzer]!=pInfo[playerid][ID])continue;
    print("3");
    anzahl++;
    format(string,sizeof(string),"Anzahl\tAutoname\tAuto ID\n{#FFFFFF}%i\t{#FF0000}%s\t{{#FFFFFF}}%i\n",anzahl,GetVehicleName(cInfo[loop][model]),cInfo[loop][model]);
    ShowPlayerDialog(playerid,DIALOG_SELLKEYS,DIALOG_STYLE_TABLIST_HEADERS,"Auto Verwaltung - Verkaufen",string,"Okay","Abbrechen");
    }
    return 1;
    }

    Gibt es eine Abfrage, um zu schauen ob der Wert, der (in meinem Fall) generiert wurde, bereits in der Tabelle existiert?
    Habe bisher folgendes (als cmd, nur damits schneller geht beim testen):



    ocmd:pin(playerid,params[])
    {
    new pin=randomEx(9990,10000);
    //Abfrage
    new string[128];
    format(string,sizeof(string),"Dein Pin ist '%i'. Bewahre ihn gut auf!",pin);
    SendClientMessage(playerid,CLR_YELLOW,string);
    new query[84];
    format(query,sizeof(query),"UPDATE accounts SET bankkartenpin='%i' WHERE id='%i'",pin,pInfo[playerid][ID]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    Ich möchte natürlich nicht, dass Leute den gleichen Pin haben.

    Der erste print wird immer ausgeführt, der 2te allerdings nie, obwohl ich auf Save drücke. Wo liegt diesmal der Fehler?



    public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
    {
    print("OnPlayerEditObject 1 aufgerufen.");
    new Float:oldX, Float:oldY, Float:oldZ,Float:oldRotX, Float:oldRotY, Float:oldRotZ;
    GetObjectPos(objectid, oldX, oldY, oldZ);
    GetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
    if(!playerobject)return;
    {
    if(!IsValidObject(objectid))return;
    MoveObject(objectid,fX,fY,fZ,0);
    }
    if(response == EDIT_RESPONSE_FINAL)
    {
    print("OnPlayerEditObject 2 aufgerufen.");
    new query[256];
    new id=GetPVarInt(playerid,"ATMID");
    mysql_format(dbhandle,query,sizeof(query),"UPDATE atms SET x='%f',y='%f',z='%f',rx='%f',ry='%f',rz='%f' WHERE id='%i'",fX,fY,fZ,fRotX,fRotY,fRotZ,id);
    mysql_function_query(dbhandle,query,false,"","");
    updateATM(id);
    }
    if(response == EDIT_RESPONSE_CANCEL)
    {
    // Spieler hat abgebrochen
    if(!playerobject) // Objekt ist kein Player-Objekt
    {
    SetObjectPos(objectid, oldX, oldY, oldZ);
    SetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
    }
    }
    }

    Gibt's irgendeinen Fix dafür, dass sobald ich aus dem CJ Haus raus gehe, die Cars unter der Map sind und dann nach 2 sekunden ca. 5m weiter weg komplett falsch spawnen? Habe mal probiert, die Z-Achse mit mit ein paar Werten zu erhöhen, hat aber nichts gebracht. Ich kann auch schlecht solide Objekte überall hinmachen, da die User ja /fpark machen können.
    Irgendwelche bekannten Lösungen?

    Kannst du nicht einfach mit einem Timer, der x=sekunden deiner Wahl lange geht, die Variable serverstarting hochzählen bis sie auf 10 ist? und 10 ist dann in dem Fall fertig z.B. Dann kannst du doch den Timer mit KillTimer(); stoppen, damit er keine Belastung mehr ist.


    public ServerStart(){ serverstartcounter++; switch(serverstartcounter) { case 0: { SendRconCommand("hostname Test 0%"); }//case 10: z.B. Ende (kannst du ja variieren) case 10: { SendRconCommand("hostname Testserver Fertig"); SendRconCommand("password 0"); KillTimer(); }


    So ähnlich. Wäre zumindest eine Möglichkeit, die mir in den Sinn kommt.


    //Edit
    Btw. Jeffry, b_kasse: %i ist nun der richtig eingetragene Wert, WHERE id='%i' ist allerdings jetzt 0. Vorher wars ja genau andersrum, richtige ID aber falsche b_kasse. In der Konsole steht WHERE id='0'.

    Komischerweise wird meine bizkasse nicht gespeichert.



    printf("b_kasse1: %i",bizInfo[i][b_kasse]);
    saveBizKasse(bizInfo[i][b_id]);
    //Wert wird beim print richtig angegeben.



    saveBizKasse(id)
    {
    printf("b_kasse2: %i",bizInfo[id][b_kasse]);
    new query[128];
    format(query,sizeof(query),"UPDATE bizs SET b_kasse='%i' WHERE id='%i'",bizInfo[id][b_kasse],id);
    mysql_function_query(dbhandle,query,false,"","");
    printf("b_kasse3: %i",bizInfo[id][b_kasse]);
    printf(query);
    return 1;
    }
    //Wert ist auf einmal 0.


    Ich bin mir zu 100 % sicher, dass ich den Wert nicht überschriebe. Ist irgendwas bei saveBizKasse falsch?


    mfg.

    Aaah, alles klar. Danke dir.


    //Edit:
    Irgendwas passt da nicht, kriege immer extrem hohe Zahlen wie z.B. 1071393014. Habe einfach nur deine Funktion übernommen und hab mir das Ergebnis printen lassen. Ich überschreibe den Wert nirgends.

    Alles klar, danke schön.
    Wie kann ich es lösen, dass das Script sich automatisch alle anderen Werte erschließt?
    z.B. habe ich eine Preisliste, die von 1.10 bis 2.10 gehen soll. Ich müsste ja jetzt im Array dann jede Zahl einzelnt schreiben, also quasi 1.11,1.12 usw. Gibt es da irgendeinen speziellen Befehl für?
    1.10 ... 2.10 o.Ä.? Oder lässt sich das Problem irgendwie besser lösen. Ich möchte auch nachher aus dem Array random Preise ziehen, wie das geht weiß ich, allerdings vielleicht als Info nebenbei.

    Das sind die Koordinaten, wo das gekaufte Auto gespawnt werden soll. Man kauft es also quasi, und am Rand (falls du es getestet hast) wird es dann gespawnt. Bei createFrakCar siehst du ja fahInfo[id] usw. und im Callback Float:x usw., das sind halt die Koordinaten wo das Auto nach dem Kauf gespawnt wird.