Beiträge von Goldkiller

    Dann entfern alle Zeile die mit "anzahl" was zu tun haben und öffne stattdessen einen Dialog am Ende.
    dcmd_fischeverkaufen(playerid,params[])
    {
    new anzahl; // <- Weg
    if(sscanf(params,"i",anzahl)) return SendClientMessage(playerid,rot,"Benutze: /fischeverkaufen [Anzahl]!");// <- Weg
    if(!IsPlayerInRangeOfPoint(playerid, 2.0, 1023.5853,-1884.4575,12.7962)) return SendClientMessage(playerid,hellrot,"Du bist nicht am Angelshop...");
    if(AngelInfo[playerid][Fische] == 0) return SendClientMessage(playerid,hellrot,"Du hast keine Fische!");
    if(AngelInfo[playerid][Fische] <= anzahl) return SendClientMessage(playerid,hellrot,"Du hast nicht soviele Fische!");// <- Weg

    new string[56]; // <- Eventuell Weg
    new geld = fischpreis*anzahl; // <- Weg
    format(string,sizeof(string),"Du hast %d Fische verkauft und bekommst dafür $%d!",anzahl,geld);// <- Weg
    SendClientMessage(playerid,neongruen,string);// <- Weg
    AngelInfo[playerid][Fische] -= anzahl;// <- Weg
    GivePlayerMoney(playerid, geld);// <- Weg
    // Dialog anzeigen
    return 1;
    }
    Wenn du das hast,dann probier mal wie du es unter OnDialogResponse verarbeitest. Eigentlich müsstest du die Zeilen die du aus dem Befehl entferst in die Dialog-Verarbeitung verschieben.

    Du brauchst das else doch gar nicht.
    Entweder die Schleife findet einen Cop der in der nähe ist oder nicht.Je nachdem wird IntFluch[] auf 1 gesetzt oder bleibt wie es vorher war.Es gibt viele Möglichkeiten wie du es machen könntest.
    Function WantedChecker(playerid)
    {
    new Float: x, Float: y, Float: z;
    GetPlayerPos(playerid, x, y, z);
    for(new i=0;i<MAX_PLAYERS; i++) {
    if(IsPlayerConnected(i))
    {
    if(IsPlayerInRangeOfPoint(i, 40.0, x,y,z) && IsACop(i))
    {
    IntFlucht[playerid] = 1;
    return true;
    }
    }
    }
    return false;
    }


    Function WantedChecker(playerid)
    {
    new Float: x, Float: y, Float: z;
    new bool:bFoundCop = false;
    GetPlayerPos(playerid, x, y, z);
    for(new i=0;i<MAX_PLAYERS; i++) {
    if(IsPlayerConnected(i))
    {
    if(IsPlayerInRangeOfPoint(i, 40.0, x,y,z) && IsACop(i))
    {
    IntFlucht[playerid] = 1;
    bFoundCop = true
    break;
    }
    }
    }
    if(!bFoundCop) {
    IntFlucht[playerid] = 0;
    }
    return 1;
    }


    Function WantedChecker(playerid)
    {
    new Float: x, Float: y, Float: z;
    new bool:bFoundCop = false;
    GetPlayerPos(playerid, x, y, z);
    for(new i=0;i<MAX_PLAYERS; i++)
    if(IsPlayerConnected(i))
    {
    if(IsPlayerInRangeOfPoint(i, 40.0, x,y,z) && IsACop(i))
    {
    IntFlucht[playerid] = 1;
    bFoundCop = true
    break;
    }
    }
    if(!bFoundCop) {
    IntFlucht[playerid] = 0;
    }
    return 1;
    }
    Falls der Spieler für den WantedChecker läuft auch ein Cop selber sein kann,musst du unbedingt auf "playerid != i" prüfen.

    Zwei Sachen.
    Ich würde prüfen ob i != playerid ist.Könnte bei dir vllt zu Fehler führen,je nachdem wie das im Ganzen bei dir funktioniert.
    Wieso machst du nicht "if(IsPlayerInRangeOfPoint(i, 40.0, x,y,z)" und falls das wahr ist,die Abfrage ob Polizist oder nicht.
    Ist er/sie Polizist,machst ein break und wir wissen,dass mindestens 1 Polizisten in der nähe gefunden wurde.

    Dann teste es nochmal, es funktioniert nicht richtig.
    Wenn ich es so wie von dir mal ausprobiere,bekomme ich falsche Ergebnisse ( Nebenbei, du hast sowieso float geschrieben - float != Float ).


    Falls du es auch probieren möchtest,
    main() {
    new
    Float:fVar;
    r_mysql_Connect_To_Database("localhost", "root", "", "accounts");
    r_LoadSQLEntrance("accounts", "id", "1");
    fVar = r_mysql_GetFloat("prozent");
    printf("%f",fVar);
    }
    Hier der Datenbank Eintrag:
    http://s14.directupload.net/file/d/2879/235nfdew_png.htm
    Lass ich das mal laufen:

    Zitat

    [23:49:52] [profiler] Attached profiler to 'gamemodes\rft.amx' (no debug symbols)
    [23:49:52] OnGameo
    [23:49:52] MySql: Verbindung zur Datenbank: accounts wird hergestellt...
    [23:49:52] MySql: Verbindung zur Datenbank: accounts erfolgreich hergestellt...
    [23:49:52] 1123478016.000000


    1123478016.000000 != 123.457


    Änder ich deine Funktion um in:
    stock Float:r_mysql_GetFloat(Var[])
    {
    return floatstr(r_mysql_GetString(Var));
    }
    und teste nochmal:

    Zitat

    [23:51:45] [profiler] Attached profiler to 'gamemodes\rft.amx' (no debug symbols)
    [23:51:45] OnGameo
    [23:51:45] MySql: Verbindung zur Datenbank: accounts wird hergestellt...
    [23:51:45] MySql: Verbindung zur Datenbank: accounts erfolgreich hergestellt...
    [23:51:45] 123.457000


    Jetzt stimmt der Wert :/.

    Mein Meistertitel wurde mir hier wohl aberkannt... .


    r_mysql_GetFloat
    Funktioniert nicht richtig.Das Tag fehlt im Funktionskopf.
    new bool:r_GET[3][64];
    Ehm,bool :-O?
    format(query, sizeof(query), "SELECT * FROM %s WHERE `%s`='%s'", r_GET[0], r_GET[1], r_GET[2]);
    Dann nimm doch direkt `%s` ( Var ) anstatt * , ist doch unnötiges Laden da du das Ergebnis danach eh wieder löschst und nur den gesuchten Eintrage daraus ausließt.


    Stimme dennoch Austrianer zu.Da würde ich lieber bei den Funktionieren von Maddin bleiben,die beim Tutorial bei liegen.

    Was willst n da auch großartig sehen ?
    1661.5585,-2159.5645,1661.4371,-2158.6670


    1661.5585 = minX
    1661.4371 = maxX


    -2159.5645 = minY
    -2158.6670 = maxY


    maxX ist kleiner als minX,wäre also von der logik sowieso schon nicht richtig.Außerdem ist deine Fläche sowas von verdammt klein,bezweifel,dass die Zonen auf die Nachkommastelle genau sind. Da wird bestimmt auf eine ganze Zahl gerundet ( Denke ich,weiss ich aber nicht 100% . Macht aber auch nichts ) . Somit wäre deine Fläche also maximal 1<FE>².
    Auch die Farbe ist fast durchsichtig mit 0x5B. Probier zum testen lieber 0xFF bzw FF aus ;).
    Mach die Fläche mal größer und probier es nochmal.

    Du hast bestimmt noch mehr Spalten als nur Name. Damit du nur Name einfügen kannst,musst du für die Tabelle einstellen,dass die Anderen Werte automatisch null sind.Sonst klappt INSERT nämlich nicht.

    Eine Datei die mit DINI erstellt wurde ist nichts Anders,als eine die du mit Notepad öffnest und dort etwas rein schreibst.Es könnte auch mit SII,YINI oder sonst was erstellt worden sein,ist egal.
    Da so ein UCP sicherlich über PHP läuft und man sehr wohl mit PHP auch einfache Dateien öffnen kann die mit zB DINI erstellt wurden,ist es also kein Problem.
    Das Problem ist nur,dass man jeweils nur die ganzen Zeilen auslesen kann und dort den Wert und den Schlüssel voneinander trennen müsste.

    Zitat

    adminlevel=5
    kills=50
    deaths=53
    password=jsef83nwefw39ergwfn039erg9


    Bei SQL basierten UCP wäre es da deutlich einfacher,da bekomm ich die Daten schön in einem Array mit Schlüssel zurück.

    Eine Reihe aus der Datenbank löschen ?
    Wenn ich dich jetzt richtig verstehe,wieso machst du dann nicht folgendes query:
    format( sQuery, sizeof(sQuery), "DELETE FROM `%s` WHERE `ID` = %d",Name,ID );
    Ist doch viel einfacher.Solltest dir vielleicht mal etwas Wissen über MySQL aneignen,denn dein Weg ist mehr als umständlich.

    Wir haben hier übrigens ein Tag, [ pwn] und [ /pwn] um den Quellcode bringt wunder ( Ohne Leerzeichen ).


    new bInt[][BizzInnen] =
    {
    {X,Y,Z,INT}, //erklärt sich eigentlich von selbst + NR. 0
    {X,Y,Z,INT}, //Nr1
    {X;Y;Z;INT} //NR2
    };
    Ich hoffe du trägst für X , Y , Z und INT auch Werte ein und nicht einfach das Wort.
    Übrigens ist in der Zeile mit //NR2 anstatt , zwischen den Einträgen heweils ein Semikolon ( ; ) , ist falsch.
    new bInt[][BizzInnen] =
    {
    {100.0,-500.0,20.0,0}, //erklärt sich eigentlich von selbst + NR. 0
    {100.0,-500.0,20.0,0}, //Nr1
    {100.0,-500.0,20.0,0} //NR2
    };

    Was soll die Funktion überhaupt bewirken ? Das geht nämlich bestimmt auch einfacher was du vor hast.



    new a = (ID + 1), tname[1024][MAX_PLAYER_NAME], tnumber[1024];
    Das ist ziemlich viel, meinst du nicht ? Glaube der stack ist nicht mal standardmäßig so groß. Befürchte,dass du damit das Script zum Absturz bekommst bzw den Server.

    Jetzt mal im ernst,hast du dir vor dem Posten das Ganze auch gut überlegt ?
    Es gibt definitiv Fehlermeldungen,wenn ich die Funktionen nutzen möchte.Da brauch ich auch keinen Compiler für,dass sieht man doch auf den ersten Blick :whistling:

    stock mysql_GetInt(Table[], Field[], Where[], Is[])
    if(mysql_GetInt(playerid,"Adminlevel")>=rang)return 1; //<----- 785
    Und da fällt dir nichts auf ? Wo ist Where und Is ? Table ist sowieso falsch,denn die playerid ist a) kein String und b) sowieso kein guter Wert für eine Tabelle :P

    Dein Code bringt nichts ohne die Datenbank zu sehen. Denn deine Datenbank könnte theoretisch auch "meinedatenbank_nixmitsamp" heißen und deswegen nichts abspeichern. Man könnte dann ja ewig im Quelltext nach Fehlernsuchen auch wenn da keine sind.
    Übrigens würde ich nicht immer SpielerName(playerid) aufrufen.Ließ den Spielernamen einmalig aus und speicher es in einer Variable,die du dann an Stelle von SpielerName(playerid) überall bei SavePlayer verwendest.

    stock SqlGetConfig(what[])
    {
    new query[128];
    // mysql_format(MySQL[1], query, "SELECT `%s` FROM `config` LIMIT 1;", what); // geht beides nicht
    format(query, sizeof query, "SELECT `%s` FROM `config` LIMIT 1;", what);
    printf("SqlGetConfig #1 '%s'",query);
    mysql_query(query/*, (-1), (-1), MySQL[1]*/);
    print("SqlGetConfig #2");
    mysql_store_result(MySQL[1]);
    print("SqlGetConfig #3");
    mysql_fetch_row(query, MySQL[1]);
    print("SqlGetConfig #4");
    mysql_fetch_field_row(query, what, MySQL[1]);
    print("SqlGetConfig #5");
    mysql_free_result(MySQL[1]);
    print("SqlGetConfig #6");
    return query;
    }
    Dann Debug den Kram mal komplett und nicht nur so bischen :p.