Beiträge von XonarZ

    Ich hab leider ein weiteres Problem ...




    Zeile 1150:

    Code
    if(!IsPlayerInRangeOfPoint(playerid, 5, tInfo[tID][i_x], tInfo[tID][i_y], tInfo[tID][i_z])) return  SCM(playerid, COLOR_BLUE, "[INFO] {FFFFFF}Du bist nicht in der nähe vom Bezahlpunkt");


    Zeile 1155:

    Code
    tInfo[tID][biz_kasse] += pInfo[playerid][tankkosten];


    tInfo Enum:

    Ich hab schon wieder nen brett vorm kopf ...


    MfG
    XonarZ

    Also ich seh da jetzt keinen Fehler.
    Poste am besten mal den ganzen Callback.


    (Übrigens noch:
    Erstelle die Variablen nicht im Loop, sondern davor, sonst werden die immer neu erstellt, und das ist unnötig)

    Wie gesagt, eig. ist der restliche Code Irrelevant, weil wenn ich bis new string[128], id = i+1; alles entferne, dann funktioniert mein Tacho, sobald aber die aller erste Zeile mit dem cache ... id drinne steht geht mein Tacho nicht mehr. Also wird nicht mehr angezeigt.


    //EDIT also ich habe nun die Zeile mit der id als letztes gemacht (unter den letzten cache) und nun funktionierts ... WoW


    MfG
    XonarZ

    Moin Jungs,


    Ich hab ein kleines Problem ... Seitdem ich mein Callback OnLoadTanke hinzugefügt habe, kann er mein Tacho System nicht mehr zeigen ... Wenn ich das Callback auskommentiere funktioniert mein Tacho wieder...



    Jemand eine Idee?


    @LeonMrBonnie / @Kaliber / @Jeffry


    Wie gesagt wenn das Callback auskommentiert ist, dann funktioniert mein Tacho ...


    MfG
    XonarZ

    Hey,
    Habe ein kleines Problem:


    Code
    new vid = GetPlayerVehicleID(i);
    						SetVehicleHealth(vid, random(150));

    Ich will das die random 150 abgezogen werden und nicht gesetzt werden

    probiers mal so:


    Code
    new vid = GetPlayerVehicleID(i), float:health;
    GetVehicleHealth(vid, health);
    SetVehicleHealth(vid, health-random(150));

    Heyho ich habe ein kleines Problem mit meinem Biz System...


    Code
    stock getBizID(){
    	for(new i = 0; i < sizeof(bInfo); i++){
         	if(bInfo[i][biz_id] == 0) continue;
         	printf("Biz: %s(%i) wurde Geladen | X: %f | Y: %f | Z: %f", bInfo[i][biz_name], bInfo[i][biz_id], bInfo[i][biz_x], bInfo[i][biz_y], bInfo[i][biz_z]);
    	    return bInfo[i][biz_id];
    	}
    	return -1;
    }



    Code
    public OnLoadTanke(){
    	new rows;
    	cache_get_row_count(rows);
    	for(new i = 0; i < sizeof(rows); i++){
    		printf("%i", getBizID());
    	}
    	return 1;
    }

    Als Ausgabe erhalte ich:



    Code
    [14:40:53] -1

    Es sind allerdings 2 Bizzen im bInfo array drinne...


    habt ihr eine idee?

    ich habe nun mal eine neue idee ausprobiert leider irgendwo einen denkfehler... Undzwar wie folgt:


    OnGameModeInit

    Code
    //Geschäfte
    	new query[2048];
    	mysql_format(handle, query, sizeof(query), "SELECT * FROM geschaefte");
    	mysql_pquery(handle, query, "OnLoadBiz");
    	//Tankstellen
    	mysql_format(handle, query, sizeof(query), "SELECT * FROM new_tankstellen");
    	mysql_pquery(handle, query, "OnLoadTanke");


    Callbacks & 1 Stock


    Geschäfte werden auch geladen (Textdraws erstellt usw)... Nun habe ich aber das Problem das mir die Konsole folgendes ausgibt:




    heißt er kommt bei OnLoadTanke ab dem zweiten durchgang nur bis print 3 ... weil eben die id nicht gleich der dbid ist (außer beim ersten mal) ... Nun ist meine Frage... Wo hab ich nen Denkfehler drinne ?


    //EDIT Neuer Versuch
    //EDIT2 Lösungsweg


    Ich habe nun eine Lösung gefunden...




    MfG
    XonarZ

    Moin,


    ich baue gerade mein Biz System ... Ich möchte allerdings mein System "Dynamisch" aufbauen. Ich habe angefangen mit der Unterscheidung ob es eine Tankstelle ist... Leider funktioniert es nicht so ganz...


    Meine enums:






    OnGameModeInit:

    Code
    //Lade Geschäfte
    	new query[2048];
    	mysql_format(handle, query, sizeof(query), "SELECT * FROM geschaefte");
    	mysql_pquery(handle, query, "loadBizzes");

    meine callbacks:


    Die Forwards:


    Code
    //Geschäfte
    forward loadBizzes();
    forward loadTanke(bizid);

    Als ergebnis steht in der Konsole:



    Code
    [14:23:45] Tankstelle: GS Tanke | X: 1928.579956 | Y: -1776.229980 | Z: 13.546899 | ID: 2 geladen
    [14:23:45] |__________Tankstellen wurden geladen__________|
    [14:23:45] Es wurden 1 Tankstellen geladen
    [14:23:45] Tankstelle: BSN Tanke | X: 1000.590026 | Y: -919.880004 | Z: 42.328098 | ID: 1 geladen
    [14:23:45] |__________Tankstellen wurden geladen__________|
    [14:23:45] Es wurden 1 Tankstellen geladen


    //EDIT Nachdem ich das erste Problem gelöst habe, habe ich nun ein weiteres kleines Problem^^



    MfG
    XonarZ

    Du kannst nicht die playerid verwenden, da die sich doch jedes mal ändert und wenn der Spieler offline ist schon gar nicht existiert.


    Du musst einfach nur den Namen von dem Spieler verwenden, das ist der eindeutige Key und nicht die playerid

    Du verstehst falsch glaub ich in der Datenbank - Spalte der jeweiligen Tankstelle ist unter der "Variable" owner die DatenbankID des Spielers eingetragen...


    Ich rufe mein Stock so auf:

    Code
    getPlayerName(tInfo[tID][owner])



    Mein stock sieht nun so aus:



    Code
    stock getPlayerName(dbid){
    	new query[512], Name[MAX_PLAYER_NAME];
    	mysql_format(handle, query, sizeof(query), "SELECT * FROM user WHERE id = '%i'", dbid);
    	mysql_pquery(handle, query);
    	cache_get_value_name(0, "name", Name, MAX_PLAYER_NAME);
    	return Name;
    }

    bringt mir so aber leider keinen Result...


    //EDIT ich hab das Problem nun gelöst... und zwar mit folgendem stock:



    Code
    stock getPlayerName(dbid){
    	new query[512], Name[MAX_PLAYER_NAME];
    	mysql_format(handle, query, sizeof(query), "SELECT * FROM user WHERE id = '%i'", dbid);
    	mysql_query(handle, query);
    	cache_get_value_name(0, "name", Name, MAX_PLAYER_NAME);
    	return Name;
    }


    MfG
    XonarZ

    Du musst einen stock verwenden, mit publics kannst du das so nicht zurück geben.
    Außerdem musst du anstatt mysql_pquery direkt mysql_query aufrufen. Zu empfehlen ist das aber nicht. Es wäre besser, den Code, der den Name anzeigen soll, im Callback von mysql_pquery auszuführen.

    Wie soll ich das am besten machen im stock mit dem code im pquery? meinst du das so in etwa:


    Code
    stock getPlayerName(playerid){
    	new row, quer[512], Name[MAX_PLAYER_NAME];
    	mysql_pquery(handle, "SELECT name FROM user WHERE id = '%i'", playerid);
    
    
    }

    MfG
    XonarZ

    Nabend ich hab mal wieder eine kleine Frage...


    Ich habe in der Datenbank als bizinhaber und teilhaber die datenbank id vom spieler drinne ... nun möchte ich die Namen auslesen (auch wenn sie offline sind) ... Leider komme ich gerade nicht so ganz klar...


    Code
    public getSpielerName(playerid){
        new row, query[512], Name[MAX_PLAYER_NAME];
        mysql_format(handle, query, sizeof(query), "SELECT * FROM user WHERE id = '%i'", playerid);
        mysql_pquery(handle, query);
    	cache_get_row_count(row);
    	if(row == 0) return 0;
    	cache_get_value_name(0, "name", Name);
    	return Name;
    }


    und benutzen tu ich es halt so:


    Code
    getSpielerName(tInfo[tID][owner]);

    Ich habe beim Compilen 2 Errors:


    Code
    ...selfmade.pwn(1563) : error 079: inconsistent return types (array & non-array)
    ...selfmade.pwn(1565) : error 090: public functions may not return arrays (symbol "getSpielerName")
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    2 Errors.

    Jetzt geht es... Danke dir... Eine frage hab ich noch:


    Ich kann doch den literCount mittels SetPVarFloat Speichern und GetPVarFloat aufrufen oder ? weil wenn man SetPVarFloat eingibt kommt ja eine Parameterliste aber bei GetPVarFloat nicht^^


    MfG
    XonarZ

    Mein Dialog_response für diesen DIALOG mit dem Inputtext sieht so aus:



    Soll ich es nochmal mit dem FLOAT_ERROR probieren ?


    MfG
    XonarZ

    Darf ich mal fragen, wie deine weiteren Abfragen aussehen und wofür du das brauchst?


    Denn es tritt immer bei Floating Operationen ein Fehler auf.

    Ich habe mein Tanksystem so strukturiert, dass mein Tank ein Float ist... wenn der Motor an ist, verliert das Fahrzeug jede Sekunde an gewissen Wert beim Kraftstoff welcher ebenfalls als Float deklariert ist...


    Wenn ich jetzt also tanken will, dann soll man auch 1.54 liter als Beispiel tanken können, weil halt nur so viel fehlen.


    MfG
    XonarZ

    Ja, da entsteht ein kleiner Rundungsfehler.
    So kannst du es lösen:


    C
    //Oben im Skript
    #define FLOAT_ERROR (0.000001)
    
    
    //Dann so nutzen:
    floatstr(inputtext)+FLOAT_ERROR

    Danke ... Leider macht er nun aus 1.04 = 1.05


    Ich hab das +FLOAT_ERROR wieder weggemacht und nun macht bei 1.04 und 1.05 die richtigen ergebnisse, nur leider bei 1.49 nicht da kommt 1.5 raus...


    MfG
    XonarZ