Fehler beim auslesen vom Inputtext?

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
  • HeyHoo,


    Ich habe ein Selfmade Closed-Beta-System erstellt.
    Allerdings, kommt immer die Meldung, dass der Code falsch wäre bzw nicht mehr existieren würde...
    Obwohl dieser existiert!


    PAWN-Code:

    Spoiler anzeigen
    if(dialogid==DIALOG_CODE)
    {
    new str[5];
    if(response == 0)
    {
    return 1;
    }
    if(response == 1)
    {
    if(isNumeric(inputtext))
    {
    format(Codedatei,sizeof(Codedatei),"/Codes/%i.ini",inputtext);
    if(dini_Exists(Codedatei))
    {
    if(str[4] == 1111)
    {
    SetPlayerScore(playerid,7);
    GivePlayerMoney(playerid,50000);
    SetPVarInt(playerid,"Respekt",GetPVarInt(playerid,"Respekt")+30);
    SendClientMessage(playerid,Grün,"[ClosedBeta]Du hast für den Code 1111, 7 Level, 50000$ und 30 Respektpunkte erhalten!");
    dini_Remove(Codedatei);
    SetPVarInt(playerid,"CodeUsed",1);
    return 1;
    }
    if(str[4] == 2222)
    {
    SetPVarInt(playerid,"Fraktion",1);
    SetPVarInt(playerid,"Leader",1);
    SetPVarInt(playerid,"frakrank",7);
    SetPVarInt(playerid,"Frakskin",283);
    SendClientMessage(playerid,Grün,"[ClosedBeta]Du hast für den Code 2222, den Leaderposten der Fraktion LSPD erhalten!");
    dini_Remove(Codedatei);
    SetPVarInt(playerid,"CodeUsed",1);
    return 1;
    }
    if(str[4] == 3333)
    {
    SetPVarInt(playerid,"Fraktion",2);
    SetPVarInt(playerid,"Leader",1);
    SetPVarInt(playerid,"frakrank",7);
    SetPVarInt(playerid,"Frakskin",285);
    SendClientMessage(playerid,Grün,"[ClosedBeta]Du hast für den Code 3333, den Leaderposten der Fraktion FBI erhalten!");
    dini_Remove(Codedatei);
    SetPVarInt(playerid,"CodeUsed",1);
    return 1;
    }
    if(str[4] == 4444)
    {
    GivePlayerMoney(playerid,60000);
    SetPVarInt(playerid,"FreeCarslots",1);
    SetPlayerScore(playerid,9);
    SendClientMessage(playerid,Grün,"[ClosedBeta]Du hast für den Code 4444, 60000$,1 kostenlosen Carslot, und Level 9 erhalten!");
    dini_Remove(Codedatei);
    SetPVarInt(playerid,"CodeUsed",1);
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid,Rot,"[ClosedBeta]Dieser Code wurde leider schon eingelöst oder existiert nicht! Bitte versuche einen anderen Code!");//Das zeigt er an immer -.-*
    }
    }
    }
    }

    Der Dialog wird direkt durch einen Befehl aufgerufen, daher brauche ich den Befehl nicht posten.


    Bitte um Hilfe!


    lg
    DJ Deagle

  • du hast immer ein return 1 mach die mal alle weg und setze unten ein return 1

  • if(dialogid==DIALOG_CODE)
    {
    new str[5];
    if(response == 0)
    {
    return 1;
    }
    if(response == 1)
    {
    if(isNumeric(inputtext))
    {
    format(Codedatei,sizeof(Codedatei),"/Codes/%i.ini",inputtext);
    if(dini_Exists(Codedatei))
    {
    if(str[4] == 1111)
    {
    SetPlayerScore(playerid,7);
    GivePlayerMoney(playerid,50000);
    SetPVarInt(playerid,"Respekt",GetPVarInt(playerid,"Respekt")+30);
    SendClientMessage(playerid,Grün,"[ClosedBeta]Du hast für den Code 1111, 7 Level, 50000$ und 30 Respektpunkte erhalten!");
    dini_Remove(Codedatei);
    SetPVarInt(playerid,"CodeUsed",1);
    }
    if(str[4] == 2222)
    {
    SetPVarInt(playerid,"Fraktion",1);
    SetPVarInt(playerid,"Leader",1);
    SetPVarInt(playerid,"frakrank",7);
    SetPVarInt(playerid,"Frakskin",283);
    SendClientMessage(playerid,Grün,"[ClosedBeta]Du hast für den Code 2222, den Leaderposten der Fraktion LSPD erhalten!");
    dini_Remove(Codedatei);
    SetPVarInt(playerid,"CodeUsed",1);


    }
    if(str[4] == 3333)
    {
    SetPVarInt(playerid,"Fraktion",2);
    SetPVarInt(playerid,"Leader",1);
    SetPVarInt(playerid,"frakrank",7);
    SetPVarInt(playerid,"Frakskin",285);
    SendClientMessage(playerid,Grün,"[ClosedBeta]Du hast für den Code 3333, den Leaderposten der Fraktion FBI erhalten!");
    dini_Remove(Codedatei);
    SetPVarInt(playerid,"CodeUsed",1);
    }
    if(str[4] == 4444)
    {
    GivePlayerMoney(playerid,60000);
    SetPVarInt(playerid,"FreeCarslots",1);
    SetPlayerScore(playerid,9);
    SendClientMessage(playerid,Grün,"[ClosedBeta]Du hast für den Code 4444, 60000$,1 kostenlosen Carslot, und Level 9 erhalten!");
    dini_Remove(Codedatei);
    SetPVarInt(playerid,"CodeUsed",1);
    }
    }
    else
    {
    SendClientMessage(playerid,Rot,"[ClosedBeta]Dieser Code wurde leider schon eingelöst oder existiert nicht! Bitte versuche einen anderen Code!");//Das zeigt er an immer -.-*
    }
    }
    }
    return 1;
    }


    das else war auch falsch eingerückt else muss immer unter das if was abfragt und es ausgibt :)

  • Seit wann ist inputtext ein Integer? Entweder du deklarierst deinen inputtext im format als String (%s) oder du wandelst den String vorher in einen Integer um strval(inputtext)
    Sonst ist doch wohl klar, dass der Pfad zur Datei inkorrekt ist.


    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'

  • Ich habe seitens PAWNO keine Errors.
    Auch mit deinem "return-System" klappt es nicht, PawnFox!
    In meinem Script ist das else richtig eingedrückt, das liegt am Browser bzw am Forum!


    Suche weitere Hilfe..


    Was willst du eigentlich mit
    str[4] erreichen du fragst es auch nicht ab da bietet sich eher das zu vergleichen mit dem input

  • Habe es jetzt so:


    Spoiler anzeigen
    new str[4];
    new Inputtext = strval(str);
    if(response == 0)
    {
    return 1;
    }
    if(response == 1)
    {
    if(isNumeric(Inputtext))//<-- Errorzeile
    {
    format(Codedatei,sizeof(Codedatei),"/Codes/%i.ini",Inputtext);
    if(dini_Exists(Codedatei))
    {
    if(Inputtext == 1111)
    {


    Mit diesem Error:
    C:\Users\_Zinne\Desktop\SAMP Server\gamemodes\GURv0.0.2.pwn(5961) : error 035: argument type mismatch (argument 1)
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.



    lg
    Deagle

  • Die Abfrage mit IsNumeric ist überflüssig, mach die raus, da du den String eh schon in einen Integer umgewandelt hast, ist es so oder so eine Zahl ^^


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • probiers so

    if(response == 0)
    {
    return 1;
    }
    if(response == 1)
    {
    if(isNumeric(inputtext))//<-- Errorzeile
    {
    new code = strval(inputtext);
    format(Codedatei,sizeof(Codedatei),"/Codes/%i.ini",code);
    if(dini_Exists(Codedatei))
    {
    if(code == 1111)
    {


    sollte gehen
    //Edit


    @ Kaliber die Abfrage IsNumeric ist schon sinnvoll wenn er will das nur Zahlen eingetippt werden.

  • IPrototypeI


    Er hat doch schon den Inputtext ganz oben in einen in einen Integer umgewandelt, das unten mit dem Code ist überflüssig und hat nichts mit dem Error zu tun :D


    Ich wiederhole es nochmal, mach die Abfrage mit IsNumeric einfach raus ^^


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Hier:



    if(dialogid==DIALOG_CODE)
    {
    new str[4];
    new Inputtext = strval(str);
    if(response == 0)
    {
    return 1;
    }
    if(response == 1)
    {
    format(Codedatei,sizeof(Codedatei),"/Codes/%i.ini",Inputtext);
    if(dini_Exists(Codedatei))
    {
    if(Inputtext == 1698)
    {
    SetPlayerScore(playerid,7);
    GivePlayerMoney(playerid,50000);
    SetPVarInt(playerid,"Respekt",GetPVarInt(playerid,"Respekt")+30);
    SendClientMessage(playerid,Grün,"[ClosedBeta]Du hast für den Code 1698, 7 Level, 50000$ und 30 Respektpunkte erhalten!");
    dini_Remove(Codedatei);
    SetPVarInt(playerid,"CodeUsed",1);
    }
    if(Inputtext == 3865)
    {
    SetPVarInt(playerid,"Fraktion",1);
    SetPVarInt(playerid,"Leader",1);
    SetPVarInt(playerid,"frakrank",7);
    SetPVarInt(playerid,"Frakskin",283);
    SendClientMessage(playerid,Grün,"[ClosedBeta]Du hast für den Code 3865, den Leaderposten der Fraktion LSPD erhalten!");
    dini_Remove(Codedatei);
    SetPVarInt(playerid,"CodeUsed",1);
    }
    if(Inputtext == 7913)
    {
    SetPVarInt(playerid,"Fraktion",2);
    SetPVarInt(playerid,"Leader",1);
    SetPVarInt(playerid,"frakrank",7);
    SetPVarInt(playerid,"Frakskin",285);
    SendClientMessage(playerid,Grün,"[ClosedBeta]Du hast für den Code 3865, den Leaderposten der Fraktion FBI erhalten!");
    dini_Remove(Codedatei);
    SetPVarInt(playerid,"CodeUsed",1);
    }
    if(Inputtext == 4694)
    {
    GivePlayerMoney(playerid,60000);
    SetPVarInt(playerid,"FreeCarslots",1);
    SetPlayerScore(playerid,9);
    SendClientMessage(playerid,Grün,"[ClosedBeta]Du hast für den Code 4694, 60000$,1 kostenlosen Carslot, und Level 9 erhalten!");
    dini_Remove(Codedatei);
    SetPVarInt(playerid,"CodeUsed",1);
    }
    }
    else
    {
    return SendClientMessage(playerid,Rot,"[ClosedBeta]Dieser Code wurde leider schon eingelöst oder existiert nicht! Bitte versuche einen anderen Code!");
    }
    }
    }


    stock isNumeric(const string[])
    {
    new length=strlen(string);
    if (length==0) return false;
    for (new i = 0; i < length; i++) {
    if (
    (string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+') // Not a number,'+' or '-'
    || (string[i]=='-' && i!=0) // A '-' but not at first.
    || (string[i]=='+' && i!=0) // A '+' but not at first.
    ) return false;
    }
    if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
    return true;
    } // Der stock is von Marcos Banksystem

  • Schau doch mal bitte richtig.
    Du deklarierst in deinem Befehl die variable str, diese ist leer.
    Danach deklarierst du die Variable Inputtext und fühlst sie mit dem leeren Wert von str als Integer.


    Demnach ist auch Inputtext immer noch leer X( Warum machst dus dir so kompliziert?


    new zahl = strval(inputtext) // JA, inputtext kleingeschrieben, denn die Variable wird von dem Callback mitgegeben!
    if (zahl == 1234) dann blah
    else if (zahl == 5678) dann blubb
    else (zahl == 0123) dann boing


    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'