Handysystem Hilfe

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
  • Guten Abend, liebe Scripter!
    Ich wollte mich mal an ein Handysystem ranmachen und hab alle CMD's fertig, aber
    ich habe ein Problem mit den Namen.


    Diese wollte ich mit Variablen speichern, was auch funktioniert, aber ich habe einen Denkfehler
    und weiß nicht wirklich weiter..der Name ist immer mein eigener..


    COMMAND:call(playerid,params[])
    {
    new pID, number = hInfo[pID][Nummer],str[128],str2[128];
    hInfo[playerid][cID] = playerid;
    if(sscanf(params, "d",number)) return SendClientMessage(playerid,0xC8C8C8FF,"/call [Nummer]");
    if(number == hInfo[playerid][Nummer])return SendClientMessage(playerid,0xC8C8C8FF,"Du kannst dich nicht selber anrufen!");
    if(hInfo[playerid][Handy] == 0)return SendClientMessage(playerid,0xC8C8C8FF,"Du besitzt kein Handy!");
    if(hInfo[pID][Handy] == 0)return SendClientMessage(playerid,0xC8C8C8FF,"Dieser Spieler besitzt kein Handy!");
    if(hInfo[playerid][Guthaben] == 0)return SendClientMessage(playerid,0xC8C8C8FF,"Du hast kein Guthaben!");
    if(number == 0)return SendClientMessage(playerid,0xC8C8C8FF,"Diese Nummer ist nicht registriert!");
    if(Anruf[pID] == 1)return SendClientMessage(playerid,0xC8C8C8FF,"Dieser Spieler wird bereits angerufen!");
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(hInfo[i][Nummer] != number)continue;
    format(str,sizeof(str),"Eingehender Anruf %d (%s) [/pickup]",hInfo[playerid][Nummer],SpielerName[playerid]);
    format(str2,sizeof(str2),"Verbindungsaufbau mit Nummer (%d)",hInfo[pID][Nummer]);
    SendClientMessage(playerid,0xFFFA00FF,str2);
    SendClientMessage(i,0xFFFA00FF,str);
    Anruf[pID] = 1;
    Anruf[playerid] = 1;
    return 1;
    }
    return SendClientMessage(playerid,0xC8C8C8FF,"Diese Nummer ist nicht registriert!");
    }
    COMMAND:pickup(playerid,params[])
    {
    new str[128],str2[128];
    if(Anruf[playerid] == 0)return SendClientMessage(playerid,0xC8C8C8FF,"Du wirst nicht angerufen!");
    {
    format(str,sizeof(str),"Du hast den Anruf von %s angenommen!",SpielerName[hInfo[playerid][cID]]);
    format(str2,sizeof(str2),"Dein Gesprächsparnter (%s) hat den Anruf entgegen genommen!",SpielerName[playerid]);
    SendClientMessage(playerid,0xC8C8C8FF,str);
    SendClientMessage(hInfo[playerid][cID],0xC8C8C8FF,str2);
    aktiv[playerid] = 1;
    aktiv[hInfo[playerid][cID]] = 1;
    Anruf[playerid] = 0;
    Anruf[hInfo[playerid][cID]] = 0;
    }
    return 1;
    }


    */Edit2:
    Nochmal alles Codes gelöscht und durch die jeztigen ersetzt. Problem besteht aber trotzdem. 8|

  • format(str,sizeof(str),"Eingehender Anruf %d (%s) [/pickup]",hInfo[playerid][Nummer],SpielerName[playerid]);


    format(str2,sizeof(str2),"Dein Gesprächsparnter (%s) hat den Anruf entgegen genommen!",SpielerName[playerid]);

    playerid ist meines erachtens deine spielerid, änder es mal nach pID.

  • wenn du den befehl "/call" machst ist ja bei COMMAND:call(playerid,params[])
    die playerid über dem gesamten command deine spielerid. pID ist dann die des anderen spielers

  • So wie du es meinst, müsste ich ja vorher immer alle Spieler durchgehen bei den Abfragen.
    Bisschen serverlastig oder nicht? ^^


    Hab's jetzt so..


    COMMAND:call(playerid,params[])
    {
    new pID, number = hInfo[pID][Nummer],str[128],str2[128];
    hInfo[playerid][cID] = pID;
    if(sscanf(params, "d",number)) return SendClientMessage(playerid,0xC8C8C8FF,"/call [Nummer]");
    if(number == hInfo[playerid][Nummer])return SendClientMessage(playerid,0xC8C8C8FF,"Du kannst dich nicht selber anrufen!");
    if(hInfo[playerid][Handy] == 0)return SendClientMessage(playerid,0xC8C8C8FF,"Du besitzt kein Handy!");
    if(hInfo[pID][Handy] == 0)return SendClientMessage(playerid,0xC8C8C8FF,"Dieser Spieler besitzt kein Handy!");
    if(hInfo[playerid][Guthaben] == 0)return SendClientMessage(playerid,0xC8C8C8FF,"Du hast kein Guthaben!");
    if(number == 0)return SendClientMessage(playerid,0xC8C8C8FF,"Diese Nummer ist nicht registriert!");
    if(Anruf[pID] == 1)return SendClientMessage(playerid,0xC8C8C8FF,"Dieser Spieler wird bereits angerufen!");
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(hInfo[i][Nummer] != number)continue;
    format(str,sizeof(str),"Eingehender Anruf %d (%s) [/pickup]",hInfo[playerid][Nummer],SpielerName[playerid]);
    format(str2,sizeof(str2),"Verbindungsaufbau mit Nummer (%d)",hInfo[pID][Nummer]);
    SendClientMessage(playerid,0xFFFA00FF,str2);
    SendClientMessage(i,0xFFFA00FF,str);
    Anruf[pID] = 1;
    Anruf[playerid] = 1;
    return 1;
    }
    return SendClientMessage(playerid,0xC8C8C8FF,"Diese Nummer ist nicht registriert!");
    }


    COMMAND:pickup(playerid,params[])
    {
    new str[128],str2[128];
    new pID;
    hInfo[playerid][cID] = pID;
    if(Anruf[playerid] == 0)return SendClientMessage(playerid,0xC8C8C8FF,"Du wirst nicht angerufen!");
    {
    format(str,sizeof(str),"Du hast den Anruf von %s angenommen!",SpielerName[pID]);
    format(str2,sizeof(str2),"Dein Gesprächsparnter (%s) hat den Anruf entgegen genommen!",SpielerName[playerid]);
    SendClientMessage(playerid,0xC8C8C8FF,str);
    SendClientMessage(hInfo[playerid][cID],0xC8C8C8FF,str2);
    aktiv[playerid] = 1;
    aktiv[pID] = 1;
    Anruf[playerid] = 0;
    Anruf[pID] = 0;
    }
    return 1;
    }


    */Edit:
    Ich glaub ich hab dich falsch verstanden Haxler, aber was du genau meinst weiß ich auch nicht. ^^
    Hab einfach n Denkfehler dadrin, find ihn aber nicht..mein Code sieht jetzt so aus:


    COMMAND:call(playerid,params[])
    {
    new pID, number = hInfo[pID][Nummer],str[128],str2[128];
    hInfo[pID][cID] = pID;
    if(sscanf(params, "d",number)) return SendClientMessage(playerid,0xC8C8C8FF,"/call [Nummer]");
    if(number == hInfo[playerid][Nummer])return SendClientMessage(playerid,0xC8C8C8FF,"Du kannst dich nicht selber anrufen!");
    if(hInfo[playerid][Handy] == 0)return SendClientMessage(playerid,0xC8C8C8FF,"Du besitzt kein Handy!");
    if(hInfo[pID][Handy] == 0)return SendClientMessage(playerid,0xC8C8C8FF,"Dieser Spieler besitzt kein Handy!");
    if(hInfo[playerid][Guthaben] == 0)return SendClientMessage(playerid,0xC8C8C8FF,"Du hast kein Guthaben!");
    if(number == 0)return SendClientMessage(playerid,0xC8C8C8FF,"Diese Nummer ist nicht registriert!");
    if(Anruf[pID] == 1)return SendClientMessage(playerid,0xC8C8C8FF,"Dieser Spieler wird bereits angerufen!");
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(hInfo[i][Nummer] != number)continue;
    format(str,sizeof(str),"Eingehender Anruf %d (%s) [/pickup]",hInfo[playerid][Nummer],SpielerName[playerid]);
    format(str2,sizeof(str2),"Verbindungsaufbau mit Nummer (%d)",hInfo[pID][Nummer]);
    SendClientMessage(playerid,0xFFFA00FF,str2);
    SendClientMessage(i,0xFFFA00FF,str);
    Anruf[pID] = 1;
    Anruf[playerid] = 1;
    return 1;
    }
    return SendClientMessage(playerid,0xC8C8C8FF,"Diese Nummer ist nicht registriert!");
    }


    COMMAND:pickup(playerid,params[])
    {
    new str[128],str2[128];
    new pID;
    hInfo[pID][cID] = pID;
    if(Anruf[playerid] == 0)return SendClientMessage(playerid,0xC8C8C8FF,"Du wirst nicht angerufen!");
    {
    format(str,sizeof(str),"Du hast den Anruf von %s angenommen!",SpielerName[pID]);
    format(str2,sizeof(str2),"Dein Gesprächsparnter (%s) hat den Anruf entgegen genommen!",SpielerName[playerid]);
    SendClientMessage(playerid,0xC8C8C8FF,str);
    SendClientMessage(hInfo[playerid][cID],0xC8C8C8FF,str2);
    aktiv[playerid] = 1;
    aktiv[pID] = 1;
    Anruf[playerid] = 0;
    Anruf[pID] = 0;
    }
    return 1;
    }

  • Nein ich mein du erstellt die Variable pID die aber immer auf 0 bleibt.


    stock GetPlayerIDByNummer(nummer)
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(hInfo[i][Nummer] != nummer)continue;
    return i;
    }
    return -1;
    }
    if(sscanf(params, "d",number)) return SendClientMessage(playerid,0xC8C8C8FF,"/call [Nummer]");
    pID = GetPlayerIDByNummer(number);
    jetzt könntest du pID einfach verwenden...

  • Bei /call erstellt du doch die Variable pID. Dieser Variable wird aber NIE eine playerid zugewiesen. Demnach kannst du sie auch nicht einfach verwenden...
    if(Anruf[pID] == 1)return SendClientMessage(playerid,0xC8C8C8FF,"Dieser Spieler wird bereits angerufen!"); dürfte deshalb auch nicht funktionieren...

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Mein /heal Befehl sieht so aus:


    COMMAND:heal(playerid,params[])
    {
    new pID, Float:x,Float:y,Float:z;
    if(sscanf(params, "u",pID))return SendClientMessage(playerid,0xC8C8C8FF,"/heal [ID/Name]");
    if (!IsPlayerConnected(pID))return SendClientMessage(playerid,0xC8C8C8FF,"Dieser Spieler ist nicht online!");
    if (pID == playerid)return SendClientMessage(playerid,0xC8C8C8FF,"Du kannst dich nicht selber heilen!");
    if(pInfo[playerid][Fraktion] != 7) return SendClientMessage(playerid, 0xC8C8C8FF, "Du bist kein Mitglied der SAM!");
    if(pInfo[playerid][Medikamente] == 0) return SendClientMessage(playerid, 0xC8C8C8FF, "Du hast keine Medikamente mehr!");
    GetPlayerPos(playerid,x,y,z);
    {
    if(IsPlayerInRangeOfPoint(pID,3.0,x,y,z))
    if(GetPVarInt(pID, "heal") == 1) return SendClientMessage(playerid,0xC8C8C8FF,"Diesem Spieler wurde bereits eine Heilung angeboten!");
    else
    {
    new str[128] ,str2[128];
    format(str,sizeof(str),"%s hat dir eine Heilung angeboten, /acceptheal zum annehmen!",SpielerName[playerid]);
    format(str2,sizeof(str2),"Du hast %s eine Heilung angeboten!",SpielerName[pID]);
    SendClientMessage(pID,0x00A8FFFF,str);
    SendClientMessage(playerid,0x00A8FFFF,str2);
    SetPVarInt(pID,"heal", 1);
    pInfo[playerid][Medikamente]--;
    }
    return 1;
    }
    }


    Funktioniert alles richtig. Habe es eben getestet, habe ja 2 PC's ^^


    */Edit:
    Mir geht es ja auch garnicht darum Recht zu haben, ich möchte bloß dieses blöde Call-System hinter mich kriegen. ^^
    Sitze da jetzt schon seit gestern dran. Die ganzen versch. Handysysteme hier sind nicht wirklich brauchbar, daher konnte ich mir auch kaum
    was vernünftiges anschauen und das Prinzip nachmachen.

  • Hier if(sscanf(params, "d",number)) speicherst du die eingetippte Nummer in "number".
    Jetzt kannst du ganz einfach mit
    new pID = GetPlayerIDByNummer(number); die dazugehörige Spielerid rausfinden. Diese kannst du jetzt weiterverwenden

  • Ah okey, ich versuch es mal.
    Sollte jetzt etwas einfacher werden, wenn man dann auch mal pID hat. :P
    Ergebnis poste ich gleich hier rein.


    */Edit:
    Jetzt hab ich ein total dämliches Problem.
    Entweder ist pID oder number nicht definiert, weil es nicht vorher abgefragt werden kann.


    new number = hInfo[pID][Nummer],str[128],str2[128];
    new pID = GetPlayerIDByNummer(number);


    */Edit2:
    Gelöst. xD
    new pID ,number;
    number = hInfo[pID][Nummer];
    pID = GetPlayerIDByNummer(number);

  • new number = hInfo[pID][Nummer]
    ist unnötig da du pID ja noch nicht hast aber bei:
    if(sscanf(params, "d",number))
    wird die eingetippte Nummer in "number" gespeichert. Jetzt muss du die Funktion anwenden:
    new pID = GetPlayerIDByNummer(number);

  • Ich habs ein bisschen abgekürzt^^ so müsste es aussehen:



    new number,str[128],str2[128];
    if(sscanf(params, "d",number)) return SendClientMessage(playerid,0xC8C8C8FF,"/call [Nummer]");
    new pID = GetPlayerIDByNummer(number);

    edit: kleiner denkfehler