Probem mit Abrechnung für eine AD!

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
  • Hallo Leute,


    ich habe ein kleines Problem mit meinem /ad-Befehl.


    Pro Buchstabe/Zeichen den man für eine AD verwendet, sollen 2 Euro berechnet werden.
    Momentan wir aber ein irgendwie immer ein anderer Betrag gut geschrieben/abgerechnet.




    //Global
    new adtextsize[MAX_PLAYERS], adkosten[MAX_PLAYERS]; //Die Anzahl der Buchstaben + die Kosten für die AD.


    //Im Befehl
    new ADtext[65]; //Für den Text den der Spieler im Chat für die AD eingibt.
    adtextsize[playerid] = strlen(ADtext); //Soll die anzahl der Buchstaben/Zeichen, die für die AD verwendet wurden speichern.
    adkosten[playerid] = adtextsize[playerid]*2; //Soll die Anzahl der Buchstaben/Zeichen mit 2 multiplizieren! Für den Preis.
    GivePlayerMoney(playerid,-adkosten[playerid]); //Soll den Spieler das Geld abziehen.
    FrakInfo[5][fGeld] += adkosten[playerid]; Soll das abgezogene Geld in der Fraktionskasse der News gutschreiben.
    SaveEineFrak(5); ADCheck = Now()+60; //Speichert die Fraktion usw.


    Beispiel:
    Ein Spieler schreibt '/ad Hello World!' und eine AD mit dem Inhalt 'Hello World!' erscheint,
    'Hello World!'hat 12 Buchstaben/Zeichen, also werden dem Spieler 24 Euro berechnet (12*2=24).



    Ich hoffe ihr wisst was ich damit sagen will und könnt mir helfen!




    Gruß
    AlphaGen!

    DIVIDE ET IMPERA

  • Warum nicht noch mehr unnötige Variablen deklarieren?


    AdPrice = strlen(ADtext) * 2;


    fertig.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Vermutlich, dass dein Script garnicht wissen kann, wie der Text aussieht?
    Du deklarierst zwar ADtext, aber einen String da rein packen tust du offenbar nicht. Demnach ist ADtext nichts weiter als eine leere Variable.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Hier einmal der Befehl

    dcmd_ad(playerid,params[]) //Fraktions Befehl
    {
    new string[128], i = 0, ADtext[65], name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name));
    if(SpielerInfo[playerid][pPerso] != 1) return 1;
    if(sscanf(params,"s[65]",ADtext)) return SendClientMessage(playerid,GRAU,"Verwendung: /AD [Text]");
    adtextsize[playerid] = strlen(ADtext);
    adkosten[playerid] = adtextsize[playerid]*2;
    if(Now()<ADCheck) { format(string, sizeof(string), "Du kannst erst in %d Sekunden wieder eine AD schalten lassen!", ADCheck-Now()); SendClientMessage(playerid,ROT,string); }
    else if(GetPlayerMoney(playerid) < adkosten[playerid]) { format(string, sizeof(string), "Du hast %d Zeichen benutzt, die AD würde %d€ kosten, so viel Geld hast Du nicht!", adtextsize[playerid], adkosten[playerid]); SendClientMessage(playerid,ROT,string); }
    else if(GetPlayerMoney(playerid) >= adkosten[playerid])
    {
    for(;i < GetMaxPlayers(); i++)
    {
    format(string,sizeof(string),"AD:"); TextDrawSetString(ADTEST1,string); TextDrawShowForPlayer(i,ADTEST1);
    format(string,sizeof(string),"%s",ADtext); convert_encoding(string); TextDrawSetString(ADTEST2,string); TextDrawShowForPlayer(i,ADTEST2);
    format(string,sizeof(string),"Name: %s I ID: %d I Handynummer: %d",name,playerid,SpielerInfo[playerid][pHandyNummer]); TextDrawSetString(ADTEST3,string); TextDrawShowForPlayer(i,ADTEST3);
    format(string,sizeof(string),"Du hast %d Zeichen benutzt, die Werbung kostet %d€!", adtextsize[playerid], adkosten[playerid]); SendClientMessage(i,GRUEN,string);
    GivePlayerMoney(playerid,-adkosten[playerid]); FrakInfo[5][fGeld] += adkosten[playerid]; SaveEineFrak(5); ADCheck = Now()+60;
    }
    }
    return 1;
    }


    // EDIT:
    Mensch bin ich ein Depp, ich habe den Fehler nun selbst bemerkt.
    Ich habe die Zeile bezüglich des Abziehen und Gutschreibens des Geldes mit in die Schleife gepackt.
    Was dadurch passiert ist, kann sich ja wohl jeder selbst denken.. :D


    Trotzdem vielen, vielen Dank für die Hilfe!

    DIVIDE ET IMPERA

    Einmal editiert, zuletzt von [GSD]AlphaGen ()