[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Oh, ich bin dumm dachte Array wäre, wenn man die Stirng-Länge angibt :X

    Das stimmt auch quasi, da in PAWN ein String einfach nur ein Array ist in dem die Buchstaben einzelnd gespeichert werden.


    Die Query kann so garnicht funktionieren und sollte eigentlich einen Fehler ausgeben, da du vor dem WHERE ID = %d ein Komma zu viel hast. Nach dem letzten Wert der eingetragen werden soll, darf kein Komma folgen.
    Merke beim schreiben gerade, dass du die Query auch nirgendwo ausführst.


    Und bist du sicher, dass du es nur einmal bei OnPlayerDisconnect ausrufst und sonst nirgends? Zeig uns mal den Codeteil.

  • In Zeile 55. ist kein Komma. Das Komma kommt nach  "


    Wie gesagt, beim Disconnect:
    SpielerSpeichern(playerid);


    Oh, ja die Query wird jetzt auch ausgeführt.
    Jetzt updatet der Wert auch.


    Warum es da doppelt kommt weiß ich allerdings nicht :(

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • STRG + F gedrückt und geschaut, wird sonst nicht ausgeführt, nur beim Disconnect erscheint beides sofort.
    Ist auch egal, Fehler wurde aufgeschrieben, bis ich vorerst keine negativen Auswirkungen festelle, verschiebe ich das mal...


    Bin gerade überfordert, wie frage ich in einer Schleife ab, ob ein Spieler in der Nähe ist mit einer Nachricht wenn nicht.
    So hört er ja komplett auf, wenn ich das return und wenn ich in der schleife den else part mache ist ja komplett doof :D


    Was wäre effektiv? (Zeile 4.)


    Also so gehts nicht

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • versuchs mal damit.



    Wenn du diese Zeile nutzt, solltest du dahinter keine Klammer öffnen. Es sind beide Fälle durchs return geregelt:


    if(!IsPlayerInRangeOfPoint(playerid,2.5,gInfo[i][gX],gInfo[i][gY],gInfo[i][gZ])) return SCM(playerid,-1,"Nicht in näheee");


    ich hoffe mal ich habe das ganze richtig verstanden :D

    MfG. Adrian

  • Ja das letzte ist mir bewusst, habe es eben geändert, um zu zeigen was mein Ziel ist :D


    Aber es ist doch so, dass er ja bei der Schleife mit der 0 beginnt, wenn ich dann returne gibts keinen Callback mehr zumindest geht der nicht weiter.
    Heißt die Schleife macht theoretisch dann nicht mehr weiter oder?


    Ist der Spieler nicht in der Nähe von i returnt er ja, was ist mit dem Rest?

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Einfach alle Returns rausnehmen und anders bauen. So sollte es klappen, allerdings ist mir die Funktion des Bereichs zwischen meinen Kommentaren ein wenig fragwürdig.

    MfG. Adrian

  • Ich habe in einer Datenbank einmal die WorldIDs http://prntscr.com/o5jzt9
    Und einmal ein InteriorType http://prntscr.com/o5k001


    Wie kriege ich den höchsten Wert raus wo InteriorType 1 ist?
    Damit ich für den nächsten Eintrag +1 rechnen kann. Jeder Typ kann ja 255 Virtual Worlds haben

    Prinzipiell kannst du Merkmalsabfragen per WHERE spezifizieren => WHERE InteriorType = 1. Falls du den letzten Eintrag haben möchtest, kannst du per ORDER BY id DESC LIMIT 1 dir deine Dateneinträge abwärts nach ID sortieren und dir einen Eintrag (LIMIT 1) holen. Damit hättest du dann den höchsten Wert innerhalb der Tabelle -> dein Vorhaben klingt aber so, dass das auch ein AUTO_INCREMENT übernehmen könnte?

  • Ja aber, wo das InteriorType = 2 ist soll ja auch neu gezählt werden. So das jeder Typ die maximale Anzahl an VirtuellenIDS erstellen kann, dann habe ich am Ende mehr davon.
    AUTO_INCREMENT hilft ja dann, hätte ich dieses Types nicht würde ich sagen.



    Wie erstelle ich ein DynamicPickup in allen Virtuellen Welten? Das selbe auch für 3DTextLabels,
    soll ich wirklich eine Schleife durchlaufen lassen? Oder gibts da was anderes?

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Beitrag von Jameso ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Doppelpost ().
  • Wie erstelle ich ein DynamicPickup in allen Virtuellen Welten? Das selbe auch für 3DTextLabels,
    soll ich wirklich eine Schleife durchlaufen lassen? Oder gibts da was anderes?


    Normalerweise solltest du beim Pickups-Erstellen eine virtuelle welt eintragen können. Wenn du dort -1 einträgst, ist dieses in allen VW's sichtbar.

    MfG. Adrian

  • Bin am verzweifeln, was ist denn hier falsch? er zeigt mir sogar den Wert an, heißt das es doch richtig sein muss.

    C
    mysql_format(handle, query, sizeof(query), "INSERT INTO garage (X, Y, Z, ID, Kaufpreis, InteriorType, existiert, Lock) VALUES");
    			mysql_format(handle, query, sizeof(query), "%s ('%f','%f','%f','%d','%d','%d','%d','%d')"//query,........

    http://prntscr.com/o5lawi



    Code
    [16:06:41] [DEBUG] processing internal specifier 'c'
    [16:06:41] [DEBUG] pushed value '1' onto AMX stack
    [16:06:41] [DEBUG] processing internal specifier 's'
    [16:06:41] [DEBUG] pushed value 'INSERT INTO garage (X, Y, Z, ID, Kaufpreis, InteriorType, existiert, Lock) VALUES ('775.807861','-1379.737549','13.651802','3','25825','1','1','1')' onto AMX stack
    [16:06:41] [DEBUG] processing internal specifier 's'
    [16:06:41] [DEBUG] pushed value '' onto AMX stack
    [16:06:41] [DEBUG] processing internal specifier 's'
    [16:06:41] [DEBUG] pushed value 'You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Lock) VALUES ('775.807861','-1379.737549','13.651802','3','25825','1','1','1')' at line 1' onto AMX stack
    [16:06:41] [DEBUG] processing internal specifier 'c'

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Das wusste ich gar nicht, habe es überall so und es geht, heißt quasi nur bei %e die ' benutzen ?


    Allerdings ändert das nichts, Fehler tritt immer noch auf

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Huhu,
    ich habe vor wenn der Server startet alle Häuser aus der MySQl-Tabelle in die Enumvariable zu setzen.
    Es gibt max. 700 Häuser(MAX_HOUSES). Und da ich aktuell per Schleife 700 Datenbankanfragen habe, suche ich nach einer besseren alternative, die häuser anhand ihrer hID in die richtige Variable zu setzen.
    Ein Haus, dass einmal die hID 15 hatte, soll diese nach dem Speichern und laden auch weiterhin behalten.
    Soweit klappt es nur stört mich diese Schleife im....




    ...OnGameModeInit:

    Code
    for(new i=0, j=MAX_HOUSES; i<=j; i++)
    	{
    		loadHouse(i);//Hier lade ich das Haus anhand seiner ID
    	}
    
    
    	new housesstring[64];
    	format(housesstring, sizeof(housesstring), "Geladene Häuser: %d", loadedHouses);
    	print(housesstring);




    stock loadHouse(houseid):

    Code
    stock loadHouse(houseid)
    {
    	new query[256];
    	mysql_format(handle, query, sizeof(query), "SELECT * FROM houses WHERE h_id = '%d'", houseid);
    	mysql_pquery(handle, query, "onHouseLoaded", "d", houseid);
    	return 1;
    }


    onHouseLoaded:


    Ich bedanke mich schonmal im Voraus und hoffe auf eine passendere Lösung.

    MfG. Adrian

  • Das wusste ich gar nicht, habe es überall so und es geht, heißt quasi nur bei %e die ' benutzen ?


    Allerdings ändert das nichts, Fehler tritt immer noch auf

    Du brauchst auch bei %e die ' nicht, die werden durch das Escapen automatisch eingefügt.
    Aber ja, die ' brauchst du nur bei Strings.



    Warum lädst du nicht einfach alle Häuser aus der Datenbank, indem du das WHERE Statement weglässt und loopst dann durch alle Zeilen durch? Dann lädst du doch alle vorhandenen Häuser.

  • Warum lädst du nicht einfach alle Häuser aus der Datenbank, indem du das WHERE Statement weglässt und loopst dann durch alle Zeilen durch? Dann lädst du doch alle vorhandenen Häuser.

    Hey, danke für den Tipp. Könntest du mir ggf. auch sagen, wie ich durch die Zeilen loope?
    Und prüfe welche hID die entsprechende Zeile hat bzw. diese dann zuweise?
    Stelle mir das wie folgt vor, bin mir aber ein wenig unsicher.

    Code
    stock loadHouses()
    {
    	new query[256];
    	mysql_format(handle, query, sizeof(query), "SELECT * FROM houses");
    	mysql_pquery(handle, query, "onHouseLoaded");
    	return 1;
    }


    MfG. Adrian

  • Ah ok, im Endeffekt bleibt es ja fast gleich. #BrainDamagedHorse


    Eine Sache noch:
    -Die h_db ist mein Primary Key in der Enumvariable sollte i allerdings hID(Wert der die houseid speichert) sein.
    Kann ich dann einfach folgendes machen?



    MfG. Adrian