Einfaches Handy system[ANGEPASST]

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
  • Vielen Dank für das feedback


    MFG


    PAWN


    Zum Thema i , i steht für Integer nicht id.


    An deiner Stelle würde ich das einfach über eine Array laufen lassen und nicht über 2 Arrays und diverse unnötige Schleifen.
    Zuzüglich möchte ich dich mal aufklären auf die verwendung von break in schleifen diese kannst du nutzen um die Schleife abzubrechen da es nicht umbedingt nötig ist
    bei deinem call-befehl die schleife obwohl ein treffer erzielt werden konnte fortzuführen. Als weiterer Punkt ist es wenn du schon eine konstante Länge hast bei einem string so diese bei format auch zu nutzen da Konstante Werte immer schneller verarbeitet werden als dies erstmal auszulesen. Du hast ein kleinen Fehle runten bei OnPlayerText dies ist ein string also text kein integer.


    Ich denk mal mit dem ersten Punkt wirst du nix anfangen können daher habe ich dir das mal umgeschrieben


    new Anrufer[MAX_PLAYERS] ={ -1,...};


    command(h, playerid, params[])
    {
    if(sStats[playerid][pHandy] <= 0)return SendClientMessage(playerid,Rot,"Du hast kein Handy");
    if(Anrufer[playerid] == -1)return SendClientMessage(playerid,Rot,"Du wurdest nicht angerufen!");
    new str[128];
    format(str,128,"%s hat aufgelegt!",GetName(playerid));
    SendClientMessage((Anrufer[playerid]-1),Rot,str);
    format(str,128,"Du hast das Telefonat mit %s beendet!",GetName((Anrufer[playerid]-1)));
    SendClientMessage(playerid,Gelb,str);
    printf("Hier %d",Anrufer[playerid]);
    Anrufer[(Anrufer[playerid]-1)] = -1;
    Anrufer[playerid] = -1;
    return 1;
    }
    command(call, playerid, params[])
    {
    if(sStats[playerid][pHandy] <= 0)return SendClientMessage(playerid,Rot,"Du hast kein Handy!");
    if(Anrufer[playerid] != -1)return SendClientMessage(playerid,Rot,"Du telefonierst schon!");
    extract params -> new nummer;else return SendClientMessage(playerid,Weiß,"Befehl : /call [nummer]");
    if(nummer == sStats[playerid][sNummer])return SendClientMessage(playerid,Rot,"Du kannst dich nicht selber anrufen!");
    for(new i; i<MAX_PLAYERS; ++i){
    if(sStats[i][sNummer] != nummer)continue;
    if(Anrufer[i] != -1)return SendClientMessage(playerid,Rot,"Dieser Spieler telefoniert schon!");
    Anrufer[i] = playerid;
    Anrufer[playerid] = i;
    new str[128];
    format(str,128,"%s ruft dich an, /p zum annehmen /h zum auflegen!",GetName(playerid));
    SendClientMessage(i,Gelb,str);
    format(str,128,"Du rufst %s an warte auf eine Antwort!",GetName(i));
    SendClientMessage(playerid,Gelb,str);
    break;
    }
    return 1;
    }
    command(p, playerid, params[])
    {
    if(sStats[playerid][pHandy] <= 0)return SendClientMessage(playerid,Rot,"Du hast kein Handy!");
    if(Anrufer[playerid] == -1)return SendClientMessage(playerid,Rot,"Du wurdest nicht angerufen!");
    new str[128];
    format(str,128,"%s hat den Hörer abgenommen!",GetName(playerid));
    SendClientMessage(Anrufer[playerid],Gelb,str);
    SendClientMessage(playerid,Weiß,"Angenommen!");
    Anrufer[Anrufer[playerid]] = playerid+1;
    Anrufer[playerid] = Anrufer[playerid]+1;
    return 1;
    }
    public OnPlayerText(playerid,text[])
    {
    if(Anrufer[(Anrufer[playerid]-1)] == (playerid+1))
    {
    new str[128];
    format(str,128,"(Handy) %s : %s",GetName(playerid),text);
    SendClientMessage((Anrufer[playerid]-1),-1,str);
    return 0;
    }
    return 1;
    }

  • Bimbix:
    Naja, neid ist kein Grund um auf solche eine Wortwahl zurückzugreifen ;)


    b2t
    Naja, geht einfacher und 'sauberer'.


    4/10 Nicht existierenden Brotfischen

  • Dein Ernst? :D


    Keine Speicherung nichts außerdem



    Super Nummern können einfach doppelt vorkommen Klasse!
    Solch einen Anbieter hab ich mir schon immer gewünscht :thumbup:


  • Anrufer[MAX_PLAYERS] = -255;
    HandyChat[MAX_PLAYERS] =-255;


    Das wird aber nur für den Index 0 den Wert auf -255 setzen.
    Außerdem sehe ich nirgendwo im Script,wo -255 anders behandelt wird als 0. Für einen ungültigen Wert einer SpielerID würde ich immer INVALID_PLAYER_ID nehmen. Ist mMn viel verständlicher,da daraus bereits hervor geht wofür der Wert stehen soll.

  • Ah un leute nun zu der speicherung der nummern!


    include dini


    new randphone = 100000 + random(899999);
    sStats[playerid][sNummer] = randphone;
    Checknummer(playerid);


    stock Checknummer(playerid)
    {
    new pfad[128];
    format(pfad,128,"/Nummern/%i.ini",sStats[playerid][Nummer]);
    if(dini_Exists(pad) == 1) { sStats[playerid][sNummer] = sStats[playerid][sNummer] +1;
    }

  • Ist auch nicht so der Knaller.
    Jetzt mal abgesehen davon,dass die Datei auch nicht erstellt wird. Woher weisst du denn,dass die Zufallszahl + 1 frei ist wenn die generierte Zufallszahl belegt ist ?
    dini_Exists(pad) pad oder pfad ?
    stock Checknummer(playerid) stock kann weg.
    new pfad[128];128 ist Bischen viel. 20 tut es auch.

  • ja hm stimmt auf das headspace hätt ich achten können und leute ein dini_Create(pfad); erstellen


    Dankö



    //Goldkiller: Das heißt wenn überhaupt heapspace. Du solltest dich mal in die Lage der Leser versetzen. Woher sollen die jetzt wissen,an welche Stelle dini_Create gehört ? Es kriegen sicherlich genug Leute selber hin,was ist aber dem dem Rest.

    Einmal editiert, zuletzt von Goldkiller ()

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