[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
    • Offizieller Beitrag

    Wurdest du mir den Quellcode schicken, bin grad am Handy

    Naja anpassen müsstest du es ja sowieso auf deine Vorstellungen aber grob würde es so funktionieren


    Code
    ocmd:moin(playerid, params[])
    {
    	new vw = GetPlayerVirtualWorld(playerid);
    	if(vw == 1 || vw > 2 && vw < 19)
    	{
    		SendClientMessage(playerid, -1, "Moin, Moin!");
    	}
    	return 1;
    }
  • Naja anpassen müsstest du es ja sowieso auf deine Vorstellungen aber grob würde es so funktionieren

    Code
    ocmd:moin(playerid, params[])
    {
    	new vw = GetPlayerVirtualWorld(playerid);
    	if(vw == 1 || vw > 2 && vw < 19)
    	{
    		SendClientMessage(playerid, -1, "Moin, Moin!");
    	}
    	return 1;
    }

    Bin wieder zuhause.


    Hab folgendes Problem:


    error 021: symbol already defined: "ocmd_ic"

  • Wie hole ich im MySQL plugin R39-5 von BlueG im mysql_tquery()-Callback die Felder eines mit diesem Callback verbundenen INSERT-Queries?
    Dass ich die ID bspw. mit cache_insert_id() hole, ist mir bekannt. Ich könnte also theoretisch einfach mit der einen neuen Query senden, der dann die Daten holt. Ebenso könnte ich dem Callback auch einfach die Daten übergeben. Beides möchte ich aber vermeiden.
    Gibt es also eine Möglichkeit, die direkt im Callback des INSERT-Queries zu laden?


    Danke im Voraus.

  • Hey mal eine frage wie kann ich die Höchste ID herrausfinden ? Steht gerade aufm Schlauch :D
    z.b wenn ich dort 5 werte habe dass ich die ID vom 5 bekomme so würde ich ja den ersten Treffer bekommen wo es zustimmt

    Code
    for(new i = 0; i<sizeof(hbf[]); i++)
    		{
    		    if(hbf[playerid][i] != 0) continue;

    Jemand eine Ideee

  • Hay.


    Also. Ich will es so ungefähr haben: Spieler spawnt (Nur wenn 2 Spieler on sind) er muss ca. 10 sekunden warten und spawnt dann in eine andere virtuelle Welt da spawn anschließend Fahrzeuge.

  • Beitrag von MGPK-1323 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Wie hole ich im MySQL plugin R39-5 von BlueG im mysql_tquery()-Callback die Felder eines mit diesem Callback verbundenen INSERT-Queries?
    Dass ich die ID bspw. mit cache_insert_id() hole, ist mir bekannt. Ich könnte also theoretisch einfach mit der einen neuen Query senden, der dann die Daten holt. Ebenso könnte ich dem Callback auch einfach die Daten übergeben. Beides möchte ich aber vermeiden.
    Gibt es also eine Möglichkeit, die direkt im Callback des INSERT-Queries zu laden?


    Danke im Voraus.

    Also du möchtest einen Datensatz erstellen und beim Funktionsaufruf die Daten, die du übermittelt hast, direkt wieder verwenden? Funktionieren die anderen cache_* Funktionen denn nicht? Ansonsten sollte es da keine (mir bekannte) Möglichkeit geben, das abzuwickeln. Welchen Verwendungszweck soll das denn erfüllen? Eventuell kann man da einen anderen Lösungsansatz finden -> eventuell sind PVars o.ä. interessant?


    Hay.


    Also. Ich will es so ungefähr haben: Spieler spawnt (Nur wenn 2 Spieler on sind) er muss ca. 10 sekunden warten und spawnt dann in eine andere virtuelle Welt da spawn anschließend Fahrzeuge.

    Du hast eine Variable, die Spieleranzahl, die immer +1 gerechnet wird, wenn ein Spieler beitritt. Sollte diese gleich zwei sein, erstellst du einen Timer mit einem Intervall von 1000*10, welcher dann eine Funktion aufruft, der alle Spieler durchgeht und setzt deren virtuelle Welt + ersetellst Fahrzeuge. Falls nicht alle Spieler, die auf dem Server sind, in eine andere virtuelle Welt gesetzt werden soll, musst du bei der Schleife noch eine Bedingung hinzufügen.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Hey, mein Haussystem spinnt. Es werden 200 Häuser erstellt(MAX_HOUSE Wert). Kann mir einer erklären warum?
    @Jeffry


    ocmd:chouse(playerid, params[]){new price, interior, typ;if(!isPlayerAnAdmin(playerid,4))return SCM(playerid, ERROR_FARBE, ERROR_ADMIN);if(sscanf(params,"ddd",price,interior,typ))return SCM(playerid, -1, "Tippe: /chouse [price] [interior] [typ]");for(new i=0; i<MAX_HOUSE; i++){if(strval(hInfo[i][house_id])) continue;new Float:x, Float:y, Float:z, string[64], string2[MAX_PLAYER_NAME], query[512];GetPlayerPos(playerid, x, y, z);format(string,sizeof(string), "Zum verkauf");format(string2,sizeof(string2), "Niemand");hInfo[i][house_id] = i;hInfo[i][house_owner] = string2;hInfo[i][house_description] = string;hInfo[i][house_price] = price;hInfo[i][house_interior] = interior;hInfo[i][house_typ] = typ;hInfo[i][house_x] = x;hInfo[i][house_y] = y;hInfo[i][house_z] = z;format(query, sizeof(query), "INSERT INTO houses (id, owner, description, price, interior, posx, posy, posz, typ) VALUES ('%d', '%s', '%s', '%d', '%d', '%f', '%f', '%f', '%d')",i, hInfo[i][house_owner], hInfo[i][house_description], hInfo[i][house_price], hInfo[i][house_interior], hInfo[i][house_x], hInfo[i][house_y], hInfo[i][house_z], hInfo[i][house_typ]);mysql_tquery(handle, query);format(string,sizeof(string), "Du hast erfolgreich das Haus(ID: %d) erstellt.",i);printf("%s", query);SCM(playerid, BABYBLAU, string);}return 1;}

    Erst einmal solltest du bei einer Schleife, wenn du nur ein Haus erstellen willst (wie auch Kaliber bereits meinte), die Schleife durch ein return oder break beenden, sonst durchläuft der die komplette Schleife, auch wenn bereits ein Haus erstellt wurde (-> ergibt keinen Sinn).


    Zweitens meint er, dass deine Prämisse keinen Sinn ergibt, die du dort angibst innerhalb der Schleife. Du überprüfst lediglich, ob der Wert eine Zahl ist, sonst nichts. Fraglich ist für mich auch, was es bringt einer Variable einen Index zuzuweisen, auf welche du nur zugreifen kannst, wenn du eh den Index brauchst.


    Du kannst entweder eine Variable hinzufügen (z.B. boolean), die auf true setzen wenn ein Slot / Index belegt ist und diese als Bedingung nutzen, oder eben einen Default Wert beim Besitzer setzen und ermitteln, ob dieser gegeben ist oder nicht.

  • Beschreibung ist enthalten mit einem ==> am besten ließt du dir den post von Douq dazu auch nochmal durch.

  • Beschreibung ist enthalten mit einem ==> am besten ließt du dir den post von Douq dazu auch nochmal durch.

    Ok, hab das von Douq nicht ganz verstanden aber mal versucht umzusetzen.
    ocmd:chouse(playerid, params[])
    {
    new price, interior, typ, i;
    if(!isPlayerAnAdmin(playerid,4))return SCM(playerid, ERROR_FARBE, ERROR_ADMIN);
    if(sscanf(params,"ddd",price,interior,typ))return SCM(playerid, -1, "Tippe: /chouse [price] [interior] [typ]");
    hInfo[i][house_id] = -1;
    for(i=0; i<MAX_HOUSE; i++)
    {
    if(hInfo[i][house_id] == -1){ break; } else {
    new Float:x, Float:y, Float:z, string[64], string2[MAX_PLAYER_NAME], query[512];
    GetPlayerPos(playerid, x, y, z);
    format(string,sizeof(string), "Zum verkauf");
    format(string2,sizeof(string2), "Niemand");
    hInfo[i][house_id] = i;
    hInfo[i][house_owner] = string2;
    hInfo[i][house_description] = string;
    hInfo[i][house_price] = price;
    hInfo[i][house_interior] = interior;
    hInfo[i][house_typ] = typ;
    hInfo[i][house_x] = x;
    hInfo[i][house_y] = y;
    hInfo[i][house_z] = z;
    format(query, sizeof(query), "INSERT INTO houses (id, owner, description, price, interior, posx, posy, posz, typ) VALUES ('%d', '%s', '%s', '%d', '%d', '%f', '%f', '%f', '%d')",
    i, hInfo[i][house_owner], hInfo[i][house_description], hInfo[i][house_price], hInfo[i][house_interior], hInfo[i][house_x], hInfo[i][house_y], hInfo[i][house_z], hInfo[i][house_typ]);
    mysql_tquery(handle, query);
    format(string,sizeof(string), "Du hast erfolgreich das Haus(ID: %d) erstellt.",i);
    printf("%s", query);
    SCM(playerid, BABYBLAU, string);
    }
    }
    return 1;
    }


    Er erstellt jetzt garnichts mehr :(

  • Versuchs mal so:


    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Also du möchtest einen Datensatz erstellen und beim Funktionsaufruf die Daten, die du übermittelt hast, direkt wieder verwenden?

    Richtig

    Funktionieren die anderen cache_* Funktionen denn nicht?

    Nein, leider nicht. Die waren auch meine erste Idee.



    Gut, wenn sonst auch niemand eine andere Idee hat, muss ich wohl oder übel die drölftausend Werte als Parameter an das Callback übergeben. ^^


    Danke für die Antwort.

  • Tagchen, hätte mal eine Frage zu einer recht neueren Funktion der "r40" BlueG SQL Plugin Reihe.
    Und zwar wollte ich fragen ob die INI datei im Main Ordner liegen muss oder im Scriptfiles ordner und ob meine Konfiguration richtig ist.
    Die 2 Fragen kommen auf, da der errno -1 ausgibt und der errno meines Wissens nach auf 0 stehen muss für eine aktive Verbindung.


    -> SQL Konfigurationsdatei <-


    -> SQL Verbindung <-

  • Und zwar wollte ich fragen ob die INI datei im Main Ordner liegen muss oder im Scriptfiles ordner und ob meine Konfiguration richtig ist.
    Die 2 Fragen kommen auf, da der errno -1 eingibt und der errno meines Wissens nach auf 0 stehen muss für eine aktive Verbindung.

    1. Ehh probiers aus? ^^ Das sollte nicht sehr lange dauern xD


    2. Richtig, er muss 0 sein. errno steht für Error Code, und wenn dieser -1 ist, bedeutet dies invalid connection handle. Sprich, da stimmt etwas mit dem connecten nicht :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • @Kaliber
    Hab bereits beide ausprobiert, also Main & Scriptfiles Ordner und hatte diese Konfig angegeben, connecten tut er aber nicht.
    Finde diese Methode aber echt interessant und toll, da man dafür nur noch eine Zeile im Quellcode braucht fast um sich zur Datenbank zu verbinden.

    1. Es steht im Wiki: You can't specify any directories in the file name, the connection file has to be in the SA-MP server root folder.
    Also es darf nicht in den scriptfiles liegen.


    2. Hat man davor doch auch...mysql_connect...


    Du musst immer noch prüfen..ob alles geklappt hat oder nicht.


    Der einzige Vorteil ist, du musst dein Passwort nicht im Skript angeben :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen