Jemaden zum 1o1 einladen

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
  • So in etwa könnte es aussehen ;)


    COMMAND:invite(playerid,params[])
    {
    new string[128],pID,name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,Hellblau,"Einladen: [Spieler ID]");
    format(string,sizeof(string),"Du wurdest von %s zu einem 1o1 herrausgefordert!",name);
    ShowPlayerDialog(pID,1,DIALOG_STYLE_MSGBOX,"1o1",string,"Annehmen","Ablehnen");
    return 1;
    }


  • Ja und wenn der eine annimmt wie sollen dann beide z.b in ein Raum geportet werden?
    Weil so würde es ja nicht gehen :D

  • Schau dir dafür mal OnDialogReponse an.


    Dort musst du die Dialogid abfragen und je nachdem, ob man den linken oder den rechten Button angeklickt hat, den Spieler porten.
    // Ganz oben in dein Script
    new g_Invite[MAX_PLAYERS] = {-1,...}; // Hier wird die ID des Spielers gespeichert, der die Anfrage geschickt hat. Brauchen wir, um ihn nachher zu porten ( Damit es nicht zu Buggs kommt, hab' ich direkt alle Variablen auf -1 gesettet )


    // In deinen Command
    g_Invite[pID] = playerid; // ID des Spielers, der die Anfrage geschickt hat, wird gespeichert.


    // In OnDialogResponse
    if(dialogid == /* DIALOG */ )
    {
    if(!response)return 1; // Wenn er ablehnt, abbrechen
    SetPlayerPos(playerid,/* .. */); // Der, der angenommen hat
    SetPlayerPos(g_Invite[playerid],/*..*/); // Der, der die Anfrage gesendet hat
    }

  • Wenn du eine Variable erstellst, hat diesen standardmäßig den Wert 0.
    Sollte es nun zu einem Bugg kommen & dir wird der Dialog angezeigt, ohne dass dich jemand eingeladen hat, würde der Spieler mit der ID 0 geportet werden, da ja vorher keine andere ID festgelegt wurde. Um das zu umgehen, setze ich für alle Variablen des Arrays ( Ja, g_Invite[MAX_PLAYERS] ist ein Array :p )den Wert auf -1. Einfach zur Sicherheit.


    Wenn ich new g_Invite[MAX_PLAYERS] = -1; schreiben würde, würde lediglich der erste Index des Arrays -1 sein.
    Mit "..." werden alle Variablen des Arrays auf -1 gesetzt.



    Kann sein, dass dich das ein bisschen verwirrt :p


    /edit: ^ kürzere Erklärung :D


  • COMMAND:1o1invite(playerid,params[])
    {
    new str[128],pID,str2[128];
    if(User[playerid][InMap] == 1) return SendClientMessage(playerid,GELB,"Du bist bereits in einer Arena!");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,GRAU,"BENUTZE: /1o1invite [SpielerName/ID]");
    g_Invite[pID] = playerid;
    format(str,1288,"Du hast dem Spieler %s eine 1o1 Anfrage gesendet",PlayerName(pID));
    SendClientMessage(playerid,HELLBLAU,str);
    format(str,128,"Der Spieler %s hat dich zum 1o1 eingeladen. Klicke auf 'Annehmen' um das 1o1 zu starten",PlayerName(playerid));
    ShowPlayerDialog(pID,DIALOG_INVITE,DIALOG_STYLE_MSGBOX,"LDM | 1o1 Invite",str2,"Annehmen","Abbrechen");
    return 1;
    }


    Warum bekommt der Typ kein Dialog angezeigt?

  • Siehe anderen Thread. Bitte auch nur einen verwenden.


    Ja xd
    Aufjedenfall klappt es
    Noch eine Frage, wie mache ich dass, das der Spieler beim sterben wieder in der Arena spawnt.
    Bei mir ist derzeit so das beide geportet werden und wenn einer stirbt spawnt er einfach am Spawn obwohl ich das wie bei den anderen Arenen gemacht habe.

  • Beitrag von Manniac ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.

  • if(invite1o1raum[playerid] == 1)
    {
    SetPlayerInterior(playerid,6);
    SetPlayerPos(playerid,768.2683,-37.4128,1000.5859);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,24,2201);
    }


    habs so gemacht in einem Stock was bei OnPlayerSpawn aufgerufen wird.
    Klappt aber net :D

  • Vergiss das, was ich vorher geschrieben habe. War falsch.


    Ist die Variable 100% auf 1 gesetzt?
    Wie sieht der komplette Code aus?


    Befehl:

    COMMAND:1o1invite(playerid,params[])
    {
    new str[128],pID,str2[128];
    if(User[playerid][InMap] == 1) return SendClientMessage(playerid,GELB,"Du bist bereits in einer Arena!");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,GRAU,"BENUTZE: /1o1invite [SpielerName/ID]");
    g_Invite[pID] = playerid;
    format(str,128,"Du hast dem Spieler %s eine 1o1 Anfrage gesendet",PlayerName(pID));
    SendClientMessage(playerid,HELLBLAU,str);
    format(str2,128,"Der Spieler %s hat dich zum 1o1 eingeladen. Klicke auf 'Annehmen' um das 1o1 zu starten",PlayerName(playerid));
    ShowPlayerDialog(pID,DIALOG_INVITE,DIALOG_STYLE_MSGBOX,"LDM | 1o1 Invite",str2,"Annehmen","Abbrechen");
    return 1;
    }


    Response:

    case DIALOG_INVITE:
    {
    if(!response)return 1;
    new world;
    world +=1;
    invite1o1raum[playerid] = 1;
    invite1o1raum[g_Invite[playerid]] = 1;
    SetPlayerArena(playerid);
    SetPlayerArena(g_Invite[playerid]);
    SetPlayerVirtualWorld(playerid,world);
    SetPlayerVirtualWorld(g_Invite[playerid],world);
    }


    stock SetPlayerArena

    stock SetPlayerArena(playerid)
    {
    if(dmspawn[0][playerid] == 1)
    {
    new randomspawn = random(sizeof(DeagleSpawn));
    SetPlayerPos(playerid,DeagleSpawn[randomspawn][0],DeagleSpawn[randomspawn][1],DeagleSpawn[randomspawn][2]);
    SetPlayerInterior(playerid,1);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,24,2201);
    }else if(dmspawn[1][playerid] == 1)
    {
    new randomspawn = random(sizeof(DMSpawn));
    SetPlayerPos(playerid,DMSpawn[randomspawn][0],DMSpawn[randomspawn][1],DMSpawn[randomspawn][2]);
    SetPlayerInterior(playerid,10);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,24,2201),GivePlayerWeapon(playerid,25,2201),GivePlayerWeapon(playerid,33,2201);
    }else if(dmspawn[2][playerid] == 1)
    {
    new randomspawn = random(sizeof(CBugSpawn));
    SetPlayerPos(playerid,CBugSpawn[randomspawn][0],CBugSpawn[randomspawn][1],CBugSpawn[randomspawn][2]);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,24,2201),GivePlayerWeapon(playerid,34,2201);
    }else if(dmspawn[3][playerid] == 1)
    {
    new randomspawn = random(sizeof(TeamDMSpawn));
    SetPlayerPos(playerid,TeamDMSpawn[randomspawn][0],TeamDMSpawn[randomspawn][1],TeamDMSpawn[randomspawn][2]);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,24,2201),GivePlayerWeapon(playerid,34,2201),GivePlayerWeapon(playerid,31,2201),GivePlayerWeapon(playerid,25,2201);
    }
    else if(oneraum[0][playerid] == 1)
    {
    SetPlayerInterior(playerid,6);
    SetPlayerPos(playerid,768.2683,-37.4128,1000.5859);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,24,2201);
    SetPlayerVirtualWorld(playerid,4);
    }else if(oneraum[1][playerid] == 1)
    {
    SetPlayerInterior(playerid,6);
    SetPlayerPos(playerid,768.2683,-37.4128,1000.5859);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,24,2201);
    SetPlayerVirtualWorld(playerid,5);
    }
    else if(oneraum[2][playerid] == 1)
    {
    SetPlayerInterior(playerid,6);
    SetPlayerPos(playerid,768.2683,-37.4128,1000.5859);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,24,2201);
    SetPlayerVirtualWorld(playerid,6);
    }else if(oneraum[3][playerid] == 1)
    {
    SetPlayerPos(playerid,1543.9360,-1353.3961,329.4742);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,24,2201);
    SetPlayerVirtualWorld(playerid,7);
    }else if(oneraum[4][playerid] == 1)
    {
    SetPlayerPos(playerid,1543.9360,-1353.3961,329.4742);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,24,2201);
    SetPlayerVirtualWorld(playerid,8);
    }else if(oneraum[5][playerid] == 1)
    {
    SetPlayerPos(playerid,1543.9360,-1353.3961,329.4742);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,24,2201);
    SetPlayerVirtualWorld(playerid,9);
    }else if(invite1o1raum[playerid] == 1)
    {
    SetPlayerInterior(playerid,6);
    SetPlayerPos(playerid,768.2683,-37.4128,1000.5859);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,24,2201);
    }
    return 1;
    }

  • Komisch. Mir fällt beim drüberschaun' kein Fehler auf.
    Debugge das mal.


    d.h nach dem Zeigen des Dialog die Variable invite1o1raum für beide Spieler (printf("%d | %d|", invite1o1raum[playerid],invite1o1raum[g_Invite[playerid]]);, dann direkt unter "stock SetPlayerArena" in die erste Zeile "print("SetPlayerArena called") und danach nochmal die beiden Variablen und schlussendlich in dem ifstatement "print("IF-Statement reached");